Compare commits
	
		
			8 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					2c62c7bc92 | ||
| 
						 | 
					2befa3ce6f | ||
| 
						 | 
					5a39deaa37 | ||
| 
						 | 
					abb8b2ba0f | ||
| 
						 | 
					a22f33dade | ||
| 
						 | 
					1990498f86 | ||
| 
						 | 
					dc035572f0 | ||
| 
						 | 
					5101e41565 | 
@@ -1,10 +1,4 @@
 | 
			
		||||
/src/assets
 | 
			
		||||
/build
 | 
			
		||||
/node_modules
 | 
			
		||||
/dist
 | 
			
		||||
/icons
 | 
			
		||||
helm
 | 
			
		||||
docker-entrypoint.d
 | 
			
		||||
.dockerignore
 | 
			
		||||
DockerFile
 | 
			
		||||
.github
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										88
									
								
								.eslintrc
									
									
									
									
									
								
							
							
						
						@@ -1,80 +1,22 @@
 | 
			
		||||
{
 | 
			
		||||
  "extends": ["airbnb", "prettier"],
 | 
			
		||||
  "plugins": ["prettier"],
 | 
			
		||||
  "env": {
 | 
			
		||||
      "browser": true,
 | 
			
		||||
    "es2021": true
 | 
			
		||||
      "jest": true
 | 
			
		||||
  },
 | 
			
		||||
  "parser": "@typescript-eslint/parser",
 | 
			
		||||
  "parserOptions": {
 | 
			
		||||
    "ecmaFeatures": {
 | 
			
		||||
      "jsx": true
 | 
			
		||||
    },
 | 
			
		||||
    "ecmaVersion": 12,
 | 
			
		||||
    "sourceType": "module",
 | 
			
		||||
    "allowImportExportEverywhere": false,
 | 
			
		||||
    "codeFrame": false,
 | 
			
		||||
    "project": "./tsconfig.json"
 | 
			
		||||
  },
 | 
			
		||||
  "ignorePatterns": ["build/", "dist/"],
 | 
			
		||||
  "extends": [
 | 
			
		||||
    "plugin:react/recommended",
 | 
			
		||||
    "plugin:@typescript-eslint/eslint-recommended",
 | 
			
		||||
    "plugin:@typescript-eslint/recommended",
 | 
			
		||||
    "airbnb",
 | 
			
		||||
    "airbnb-typescript",
 | 
			
		||||
    "prettier",
 | 
			
		||||
    "plugin:import/errors",
 | 
			
		||||
    "plugin:import/warnings",
 | 
			
		||||
    "plugin:import/typescript"
 | 
			
		||||
  ],
 | 
			
		||||
  "plugins": ["import", "react", "@typescript-eslint", "prettier"],
 | 
			
		||||
  "rules": {
 | 
			
		||||
    "import/extensions": [
 | 
			
		||||
      "error",
 | 
			
		||||
      "ignorePackages",
 | 
			
		||||
      {
 | 
			
		||||
        "js": "never",
 | 
			
		||||
        "jsx": "never",
 | 
			
		||||
        "ts": "never",
 | 
			
		||||
        "tsx": "never"
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "@typescript-eslint/naming-convention": [
 | 
			
		||||
      "error",
 | 
			
		||||
      {
 | 
			
		||||
        "selector": "function",
 | 
			
		||||
        "format": ["PascalCase", "camelCase"],
 | 
			
		||||
        "leadingUnderscore": "allowSingleOrDouble"
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "no-restricted-syntax": ["error", "ForInStatement", "LabeledStatement", "WithStatement"],
 | 
			
		||||
    "react/function-component-definition": [2, { "namedComponents": "arrow-function" }],
 | 
			
		||||
    "import/order": [
 | 
			
		||||
      "error",
 | 
			
		||||
      {
 | 
			
		||||
        "alphabetize": {
 | 
			
		||||
          "order": "asc",
 | 
			
		||||
          "caseInsensitive": true
 | 
			
		||||
        },
 | 
			
		||||
        "newlines-between": "never",
 | 
			
		||||
        "groups": ["builtin", "external", "parent", "sibling", "index"],
 | 
			
		||||
        "pathGroups": [
 | 
			
		||||
          {
 | 
			
		||||
            "pattern": "react",
 | 
			
		||||
            "group": "external",
 | 
			
		||||
            "position": "before"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "pathGroupsExcludedImportTypes": ["builtin"]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "max-len": ["error", { "code": 150 }],
 | 
			
		||||
    "@typescript-eslint/ban-ts-comment": ["off"],
 | 
			
		||||
    "import/prefer-default-export": ["off"],
 | 
			
		||||
    "max-len": ["error", {"code": 150}],
 | 
			
		||||
    "prefer-promise-reject-errors": ["off"],
 | 
			
		||||
    "react/jsx-filename-extension": ["off"],
 | 
			
		||||
    "react/prop-types": ["warn"],
 | 
			
		||||
    "react/require-default-props": "off",
 | 
			
		||||
    "no-return-assign": ["off"],
 | 
			
		||||
    "react/jsx-props-no-spreading": ["off"],
 | 
			
		||||
    "react/jsx-curly-newline": "off",
 | 
			
		||||
    "no-underscore-dangle": "off"
 | 
			
		||||
    "react/destructuring-assignment": ["off"],
 | 
			
		||||
    "no-restricted-syntax": ["error", "ForInStatement", "LabeledStatement", "WithStatement"],
 | 
			
		||||
    "react/jsx-one-expression-per-line": "off",
 | 
			
		||||
    "react/jsx-wrap-multilines": "off",
 | 
			
		||||
    "react/jsx-curly-newline": "off"
 | 
			
		||||
  },
 | 
			
		||||
  "settings": {
 | 
			
		||||
    "import/resolver": {
 | 
			
		||||
@@ -82,5 +24,11 @@
 | 
			
		||||
        "paths": ["src"]
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
    "parser": "babel-eslint",
 | 
			
		||||
    "parserOptions": {
 | 
			
		||||
      "sourceType": "module",
 | 
			
		||||
      "allowImportExportEverywhere": false,
 | 
			
		||||
      "codeFrame": false
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -20,13 +20,13 @@ defaults:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  docker:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    runs-on: ubuntu-20.04
 | 
			
		||||
    env:
 | 
			
		||||
      DOCKER_REGISTRY_URL: tip-tip-wlan-cloud-ucentral.jfrog.io
 | 
			
		||||
      DOCKER_REGISTRY_USERNAME: ucentral
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout actions repo
 | 
			
		||||
      uses: actions/checkout@v3
 | 
			
		||||
      uses: actions/checkout@v2
 | 
			
		||||
      with:
 | 
			
		||||
        repository: Telecominfraproject/.github
 | 
			
		||||
        path: github
 | 
			
		||||
@@ -56,7 +56,7 @@ jobs:
 | 
			
		||||
      - docker
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout actions repo
 | 
			
		||||
      uses: actions/checkout@v3
 | 
			
		||||
      uses: actions/checkout@v2
 | 
			
		||||
      with:
 | 
			
		||||
        repository: Telecominfraproject/.github
 | 
			
		||||
        path: github
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/cleanup.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -17,10 +17,4 @@ jobs:
 | 
			
		||||
    steps:
 | 
			
		||||
      - run: |
 | 
			
		||||
          export PR_BRANCH_TAG=$(echo ${GITHUB_HEAD_REF#refs/heads/} | tr '/' '-')
 | 
			
		||||
 | 
			
		||||
          if [[ ! $PR_BRANCH_TAG =~ (main|master|release-*) ]]; then
 | 
			
		||||
            echo "PR branch is $PR_BRANCH_TAG, deleting Docker image"
 | 
			
		||||
            curl -s -uucentral:${{ secrets.DOCKER_REGISTRY_PASSWORD }} -X DELETE "https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral/owgw-ui/$PR_BRANCH_TAG"
 | 
			
		||||
          else
 | 
			
		||||
            echo "PR branch is $PR_BRANCH_TAG, not deleting Docker image"
 | 
			
		||||
          fi
 | 
			
		||||
          curl -uucentral:${{ secrets.DOCKER_REGISTRY_PASSWORD }} -X DELETE "https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral/owgw-ui/$PR_BRANCH_TAG"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/enforce-jira-issue-key.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -11,7 +11,7 @@ jobs:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout actions repo
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
        uses: actions/checkout@v2
 | 
			
		||||
        with:
 | 
			
		||||
          repository: Telecominfraproject/.github
 | 
			
		||||
          path: github
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -11,13 +11,13 @@ defaults:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  helm-package:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    runs-on: ubuntu-20.04
 | 
			
		||||
    env:
 | 
			
		||||
      HELM_REPO_URL: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/
 | 
			
		||||
      HELM_REPO_USERNAME: ucentral
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout uCentral assembly chart repo
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
        uses: actions/checkout@v2
 | 
			
		||||
        with:
 | 
			
		||||
          path: wlan-cloud-ucentralgw-ui
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,8 +1,9 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# dependencies
 | 
			
		||||
/node_modules
 | 
			
		||||
/.pnp
 | 
			
		||||
.pnp.js
 | 
			
		||||
/dev-dist
 | 
			
		||||
 | 
			
		||||
# testing
 | 
			
		||||
/coverage
 | 
			
		||||
@@ -18,4 +19,5 @@
 | 
			
		||||
.env.production.local
 | 
			
		||||
 | 
			
		||||
npm-debug.log*
 | 
			
		||||
.vscode/settings.json
 | 
			
		||||
yarn-debug.log*
 | 
			
		||||
yarn-error.log*
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,4 @@
 | 
			
		||||
/src/assets
 | 
			
		||||
build
 | 
			
		||||
dist
 | 
			
		||||
node_modules
 | 
			
		||||
.github
 | 
			
		||||
/helm
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{ 
 | 
			
		||||
  "printWidth": 120,
 | 
			
		||||
    "printWidth": 100,
 | 
			
		||||
    "trailingComma": "all",
 | 
			
		||||
    "tabWidth": 2, 
 | 
			
		||||
    "semi": true, 
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						@@ -1,8 +1,6 @@
 | 
			
		||||
FROM node:18.7.0-alpine3.15 AS build
 | 
			
		||||
FROM node:14-alpine3.11 AS build
 | 
			
		||||
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
 | 
			
		||||
COPY package.json package-lock.json /app/
 | 
			
		||||
COPY package.json package-lock.json /
 | 
			
		||||
 | 
			
		||||
RUN npm install
 | 
			
		||||
 | 
			
		||||
@@ -10,8 +8,8 @@ COPY . .
 | 
			
		||||
 | 
			
		||||
RUN npm run build
 | 
			
		||||
 | 
			
		||||
FROM nginx:1.22.0-alpine AS runtime
 | 
			
		||||
FROM nginx:1.20.1-alpine AS runtime
 | 
			
		||||
 | 
			
		||||
COPY --from=build /app/build/ /usr/share/nginx/html/
 | 
			
		||||
COPY --from=build /build/ /usr/share/nginx/html/
 | 
			
		||||
 | 
			
		||||
COPY --from=build /app/docker-entrypoint.d/40-generate-config.sh /docker-entrypoint.d/40-generate-config.sh
 | 
			
		||||
COPY --from=build docker-entrypoint.d/40-generate-config.sh /docker-entrypoint.d/40-generate-config.sh
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								README.md
									
									
									
									
									
								
							
							
						
						@@ -1,7 +1,6 @@
 | 
			
		||||
# uCentralGW UI
 | 
			
		||||
 | 
			
		||||
## What is this?
 | 
			
		||||
 | 
			
		||||
The uCentralGW Client is a user interface that lets you monitor and manage devices connected to the [uCentral gateway](https://github.com/Telecominfraproject/wlan-cloud-ucentralgw). To use the interface,
 | 
			
		||||
you either need to run it on your machine for [development](#development) or build it for [production](#production).
 | 
			
		||||
 | 
			
		||||
@@ -10,34 +9,40 @@ NOTE: This UI will be evolving as micro services are added to the uCentral progr
 | 
			
		||||
## Running the solution
 | 
			
		||||
 | 
			
		||||
### Development
 | 
			
		||||
 | 
			
		||||
You need to run these commands in the root folder of the project and also have npm installed on your machine.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui
 | 
			
		||||
cd wlan-cloud-ucentralgw-ui
 | 
			
		||||
npm install
 | 
			
		||||
npm run dev
 | 
			
		||||
npm start
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Run these commands if you want to run the solution on your machine while also doing development on the [uCentral UI Library](https://github.com/Telecominfraproject/wlan-cloud-ucentral-ui-libs).
 | 
			
		||||
```
 | 
			
		||||
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui
 | 
			
		||||
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentral-ui-libs
 | 
			
		||||
cd wlan-cloud-ucentralgw-ui
 | 
			
		||||
npm link ../wlan-cloud-ucentral-ui-libs // Add sudo at the start of this command if it fails because of permissions
 | 
			
		||||
npm start
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Production
 | 
			
		||||
 | 
			
		||||
You need to run this in the root folder of the project and also have npm installed on your machine.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui
 | 
			
		||||
cd wlan-cloud-ucentralgw-ui
 | 
			
		||||
npm install
 | 
			
		||||
npm run build
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Once the build is done, you can move the `build` folder on your server.
 | 
			
		||||
 | 
			
		||||
### Configuration
 | 
			
		||||
You must change the `config.json` file in `public` directory to point to your uCentral Security Service URL (uCentralSec). You may also limit the ability for users to change the default uCentralSec. If you do not allow a uCentralSec change, the uCentralSec URL will not appear on the login screen. 
 | 
			
		||||
 | 
			
		||||
You can control the uCentral Security Service URL (uCentralSec) by modifying the ENV variable "VITE_UCENTRALSEC_URL". There is an example .env file located at the root of this repository.
 | 
			
		||||
Here are the current default values: 
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
VITE_UCENTRALSEC_URL="https://ucentral.dpaas.arilia.com:16001"
 | 
			
		||||
{
 | 
			
		||||
  "DEFAULT_UCENTRALSEC_URL": "https://ucentral.dpaas.arilia.com:16001",
 | 
			
		||||
  "ALLOW_UCENTRALSEC_CHANGE": false
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								babel.config.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,25 @@
 | 
			
		||||
{
 | 
			
		||||
  "presets": [
 | 
			
		||||
    [
 | 
			
		||||
      "@babel/preset-env",
 | 
			
		||||
      {
 | 
			
		||||
        "modules": false
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "@babel/preset-react"
 | 
			
		||||
  ],
 | 
			
		||||
  "env": {
 | 
			
		||||
    "production": {
 | 
			
		||||
      "plugins": [
 | 
			
		||||
        "@babel/plugin-transform-react-inline-elements",
 | 
			
		||||
        "@babel/plugin-transform-react-constant-elements",
 | 
			
		||||
        [
 | 
			
		||||
          "transform-react-remove-prop-types",
 | 
			
		||||
          {
 | 
			
		||||
            "removeImport": true
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								config/paths.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,12 @@
 | 
			
		||||
const path = require('path');
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  // Source files
 | 
			
		||||
  src: path.resolve(__dirname, '../src'),
 | 
			
		||||
 | 
			
		||||
  // Production build files
 | 
			
		||||
  build: path.resolve(__dirname, '../build'),
 | 
			
		||||
 | 
			
		||||
  // Static files that get copied to build folder
 | 
			
		||||
  public: path.resolve(__dirname, '../public'),
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										79
									
								
								config/webpack.common.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,79 @@
 | 
			
		||||
/* eslint-disable import/no-extraneous-dependencies */
 | 
			
		||||
/* eslint-disable prefer-template */
 | 
			
		||||
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
 | 
			
		||||
const CopyWebpackPlugin = require('copy-webpack-plugin');
 | 
			
		||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
 | 
			
		||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 | 
			
		||||
const webpack = require('webpack');
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const paths = require('./paths');
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  entry: [paths.src + '/index.js'],
 | 
			
		||||
  output: {
 | 
			
		||||
    path: paths.build,
 | 
			
		||||
    filename: '[name].bundle.js',
 | 
			
		||||
    publicPath: '/',
 | 
			
		||||
  },
 | 
			
		||||
  resolve: {
 | 
			
		||||
    modules: [path.resolve('./node_modules'), path.resolve('./src')],
 | 
			
		||||
    preferRelative: true,
 | 
			
		||||
  },
 | 
			
		||||
  plugins: [
 | 
			
		||||
    new webpack.DefinePlugin({
 | 
			
		||||
      'process.env.VERSION': JSON.stringify(process.env.npm_package_version),
 | 
			
		||||
    }),
 | 
			
		||||
    new MiniCssExtractPlugin({
 | 
			
		||||
      filename: 'styles/[name].[contenthash].css',
 | 
			
		||||
      chunkFilename: '[id].[contenthash].css',
 | 
			
		||||
    }),
 | 
			
		||||
    new CopyWebpackPlugin({
 | 
			
		||||
      patterns: [
 | 
			
		||||
        {
 | 
			
		||||
          from: paths.src + '/assets',
 | 
			
		||||
          to: 'assets',
 | 
			
		||||
          globOptions: {
 | 
			
		||||
            ignore: ['*.DS_Store'],
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          from: paths.public + '/locales',
 | 
			
		||||
          to: 'locales',
 | 
			
		||||
          globOptions: {
 | 
			
		||||
            ignore: ['*.DS_Store'],
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          from: paths.public + '/config.json',
 | 
			
		||||
          to: 'config.json',
 | 
			
		||||
        },
 | 
			
		||||
      ],
 | 
			
		||||
    }),
 | 
			
		||||
    new HtmlWebpackPlugin({
 | 
			
		||||
      title: 'uCentralGW',
 | 
			
		||||
      favicon: paths.public + '/favicon.ico',
 | 
			
		||||
      template: paths.public + '/index.html',
 | 
			
		||||
      filename: 'index.html',
 | 
			
		||||
    }),
 | 
			
		||||
    new CleanWebpackPlugin(),
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  module: {
 | 
			
		||||
    rules: [
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.(js|jsx)$/,
 | 
			
		||||
        exclude: /node_modules/,
 | 
			
		||||
        use: ['babel-loader'],
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.(css|scss)$/,
 | 
			
		||||
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.svg$/,
 | 
			
		||||
        use: ['@svgr/webpack'],
 | 
			
		||||
      },
 | 
			
		||||
      { test: /\.(?:ico|gif|png|jpg|jpeg)$/i, type: 'asset/resource' },
 | 
			
		||||
    ],
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								config/webpack.dev.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,54 @@
 | 
			
		||||
/* eslint-disable import/no-extraneous-dependencies */
 | 
			
		||||
/* eslint-disable prefer-template */
 | 
			
		||||
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
 | 
			
		||||
const { merge } = require('webpack-merge');
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const paths = require('./paths');
 | 
			
		||||
const common = require('./webpack.common');
 | 
			
		||||
 | 
			
		||||
module.exports = merge(common, {
 | 
			
		||||
  mode: 'development',
 | 
			
		||||
 | 
			
		||||
  target: 'web',
 | 
			
		||||
 | 
			
		||||
  devtool: 'inline-source-map',
 | 
			
		||||
 | 
			
		||||
  devServer: {
 | 
			
		||||
    historyApiFallback: true,
 | 
			
		||||
    contentBase: paths.build,
 | 
			
		||||
    open: true,
 | 
			
		||||
    compress: false,
 | 
			
		||||
    hot: true,
 | 
			
		||||
    port: 3000,
 | 
			
		||||
  },
 | 
			
		||||
  module: {
 | 
			
		||||
    rules: [
 | 
			
		||||
      {
 | 
			
		||||
        test: /\.[js]sx?$/,
 | 
			
		||||
        exclude: /node_modules/,
 | 
			
		||||
        use: [
 | 
			
		||||
          {
 | 
			
		||||
            loader: require.resolve('babel-loader'),
 | 
			
		||||
            options: {
 | 
			
		||||
              plugins: [require.resolve('react-refresh/babel')],
 | 
			
		||||
            },
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
    ],
 | 
			
		||||
  },
 | 
			
		||||
  resolve: {
 | 
			
		||||
    modules: [
 | 
			
		||||
      'node_modules',
 | 
			
		||||
      'src',
 | 
			
		||||
      path.resolve(__dirname, '../', 'node_modules', 'ucentral-libs', 'src'),
 | 
			
		||||
    ],
 | 
			
		||||
    alias: {
 | 
			
		||||
      react: path.resolve(__dirname, '../', 'node_modules', 'react'),
 | 
			
		||||
      'react-router-dom': path.resolve('./node_modules/react-router-dom'),
 | 
			
		||||
      'ucentral-libs': path.resolve(__dirname, '../', 'node_modules', 'ucentral-libs', 'src'),
 | 
			
		||||
      graphlib: path.resolve(__dirname, '../', 'node_modules', 'graphlib'),
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  plugins: [new ReactRefreshWebpackPlugin()],
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										86
									
								
								config/webpack.prod.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,86 @@
 | 
			
		||||
/* eslint-disable import/no-extraneous-dependencies */
 | 
			
		||||
/* eslint-disable prefer-template */
 | 
			
		||||
const { merge } = require('webpack-merge');
 | 
			
		||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 | 
			
		||||
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
 | 
			
		||||
const TerserPlugin = require('terser-webpack-plugin');
 | 
			
		||||
const CompressionPlugin = require('compression-webpack-plugin');
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const paths = require('./paths');
 | 
			
		||||
const common = require('./webpack.common');
 | 
			
		||||
 | 
			
		||||
module.exports = merge(common, {
 | 
			
		||||
  mode: 'production',
 | 
			
		||||
  devtool: false,
 | 
			
		||||
  output: {
 | 
			
		||||
    path: paths.build,
 | 
			
		||||
    publicPath: '/',
 | 
			
		||||
    filename: 'js/[name].[contenthash].bundle.js',
 | 
			
		||||
  },
 | 
			
		||||
  plugins: [
 | 
			
		||||
    // new BundleAnalyzerPlugin(),
 | 
			
		||||
    new MiniCssExtractPlugin({
 | 
			
		||||
      filename: 'styles/[name].[contenthash].css',
 | 
			
		||||
      chunkFilename: '[contenthash].css',
 | 
			
		||||
    }),
 | 
			
		||||
    new CompressionPlugin({
 | 
			
		||||
      filename: '[path]/[name].gz[query]',
 | 
			
		||||
      algorithm: 'gzip',
 | 
			
		||||
      test: /\.js$|\.css$|\.html$|\.eot?.+$|\.ttf?.+$|\.woff?.+$|\.svg?.+$/,
 | 
			
		||||
      threshold: 10240,
 | 
			
		||||
      minRatio: 0.8,
 | 
			
		||||
    }),
 | 
			
		||||
  ],
 | 
			
		||||
  module: {
 | 
			
		||||
    rules: [],
 | 
			
		||||
  },
 | 
			
		||||
  optimization: {
 | 
			
		||||
    minimize: true,
 | 
			
		||||
    minimizer: [
 | 
			
		||||
      '...',
 | 
			
		||||
      new TerserPlugin({
 | 
			
		||||
        terserOptions: {
 | 
			
		||||
          warnings: false,
 | 
			
		||||
          compress: {
 | 
			
		||||
            comparisons: false,
 | 
			
		||||
          },
 | 
			
		||||
          parse: {},
 | 
			
		||||
          mangle: true,
 | 
			
		||||
          output: {
 | 
			
		||||
            ascii_only: true,
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        parallel: true,
 | 
			
		||||
      }),
 | 
			
		||||
      new CssMinimizerPlugin(),
 | 
			
		||||
    ],
 | 
			
		||||
    nodeEnv: 'production',
 | 
			
		||||
    sideEffects: true,
 | 
			
		||||
    runtimeChunk: 'single',
 | 
			
		||||
    splitChunks: {
 | 
			
		||||
      chunks: 'all',
 | 
			
		||||
      maxInitialRequests: 10,
 | 
			
		||||
      minSize: 0,
 | 
			
		||||
      cacheGroups: {
 | 
			
		||||
        vendor: {
 | 
			
		||||
          test: /[\\/]node_modules[\\/]/,
 | 
			
		||||
          name(module) {
 | 
			
		||||
            const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
 | 
			
		||||
            return `npm.${packageName.replace('@', '')}`;
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  resolve: {
 | 
			
		||||
    modules: [],
 | 
			
		||||
    alias: {
 | 
			
		||||
      graphlib: path.resolve(__dirname, '../', 'node_modules', 'graphlib'),
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  performance: {
 | 
			
		||||
    hints: false,
 | 
			
		||||
    maxEntrypointSize: 512000,
 | 
			
		||||
    maxAssetSize: 512000,
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
@@ -1,32 +1,6 @@
 | 
			
		||||
#!/bin/ash
 | 
			
		||||
# Check if variables are set
 | 
			
		||||
export DEFAULT_OWSEC_URL="${DEFAULT_OWSEC_URL:-https://ucentral.dpaas.arilia.com:16001}"
 | 
			
		||||
export ALLOW_OWSEC_CHANGE="${ALLOW_OWSEC_CHANGE:-false}"
 | 
			
		||||
 | 
			
		||||
ENV_CONFIG_PATH=/usr/share/nginx/html/env-config.js
 | 
			
		||||
 | 
			
		||||
# Recreate config file
 | 
			
		||||
rm -rf $ENV_CONFIG_PATH
 | 
			
		||||
touch $ENV_CONFIG_PATH
 | 
			
		||||
 | 
			
		||||
# Add assignment
 | 
			
		||||
echo "window._env_ = {" >> $ENV_CONFIG_PATH
 | 
			
		||||
 | 
			
		||||
# Read each line in .env file
 | 
			
		||||
# Each line represents key=value pairs
 | 
			
		||||
env | grep REACT_ | while read -r line || [[ -n "$line" ]];
 | 
			
		||||
do
 | 
			
		||||
  echo $line
 | 
			
		||||
  # Split env variables by character `=`
 | 
			
		||||
  if printf '%s\n' "$line" | grep -q -e '='; then
 | 
			
		||||
    varname=$(printf '%s\n' "$line" | sed -e 's/=.*//')
 | 
			
		||||
    varvalue=$(printf '%s\n' "$line" | sed -e 's/^[^=]*=//')
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Read value of current variable if exists as Environment variable
 | 
			
		||||
  value=$(printf '%s\n' "${!varname}")
 | 
			
		||||
  # Otherwise use value from .env file
 | 
			
		||||
  [[ -z $value ]] && value=${varvalue}
 | 
			
		||||
 | 
			
		||||
  # Append configuration property to JS file
 | 
			
		||||
  echo "  $varname: \"$value\"," >> $ENV_CONFIG_PATH
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
echo "}" >> $ENV_CONFIG_PATH
 | 
			
		||||
echo '{"DEFAULT_UCENTRALSEC_URL": "'$DEFAULT_UCENTRALSEC_URL'","ALLOW_UCENTRALSEC_CHANGE": '$ALLOW_UCENTRALSEC_CHANGE'}' > /usr/share/nginx/html/config.json
 | 
			
		||||
 
 | 
			
		||||
@@ -17,9 +17,7 @@ metadata:
 | 
			
		||||
  {{- end }}
 | 
			
		||||
 | 
			
		||||
spec:
 | 
			
		||||
{{- if $ingressValue.className }}
 | 
			
		||||
  ingressClassName: {{ $ingressValue.className }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
{{- if $ingressValue.tls }}
 | 
			
		||||
  tls:
 | 
			
		||||
  {{- range $ingressValue.tls }}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ fullnameOverride: ""
 | 
			
		||||
images:
 | 
			
		||||
  owgwui:
 | 
			
		||||
    repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owgw-ui
 | 
			
		||||
    tag: v4.0.0
 | 
			
		||||
    tag: v2.6.0
 | 
			
		||||
    pullPolicy: Always
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
@@ -75,4 +75,5 @@ podAnnotations: {}
 | 
			
		||||
 | 
			
		||||
# Application
 | 
			
		||||
public_env_variables:
 | 
			
		||||
  REACT_APP_UCENTRALSEC_URL: https://ucentral.dpaas.arilia.com:16001
 | 
			
		||||
  DEFAULT_UCENTRALSEC_URL: https://ucentral.dpaas.arilia.com:16001
 | 
			
		||||
  ALLOW_UCENTRALSEC_CHANGE: false
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								index.html
									
									
									
									
									
								
							
							
						
						@@ -1,21 +0,0 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1" />
 | 
			
		||||
    <title>Controller</title>
 | 
			
		||||
    <meta name="description" content="OpenWiFi Controller App" />
 | 
			
		||||
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
 | 
			
		||||
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
 | 
			
		||||
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
 | 
			
		||||
    <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5" />
 | 
			
		||||
    <meta name="msapplication-TileColor" content="#da532c" />
 | 
			
		||||
    <script src="/env-config.js"></script>
 | 
			
		||||
    <meta name="theme-color" content="#000000" />
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <noscript>You need to enable JavaScript to run this app.</noscript>
 | 
			
		||||
    <div id="root"></div>
 | 
			
		||||
    <script type="module" src="./src/index.tsx"></script>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										9
									
								
								jsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "compilerOptions": {
 | 
			
		||||
    "baseUrl": "src",
 | 
			
		||||
    "paths": {
 | 
			
		||||
      "*": ["*"]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "include": ["src"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										28446
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
							
								
								
									
										176
									
								
								package.json
									
									
									
									
									
								
							
							
						
						@@ -1,101 +1,101 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "ucentral-client",
 | 
			
		||||
  "version": "4.0.0",
 | 
			
		||||
  "description": "",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "main": "index.tsx",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "dev": "vite",
 | 
			
		||||
    "build": "vite build",
 | 
			
		||||
    "format": "prettier --write \"src/**/*x.{ts,tsx,js,jsx}\"",
 | 
			
		||||
    "analyze": "source-map-explorer 'build/static/js/*.js'",
 | 
			
		||||
    "lint": "TIMING=1 eslint \"src/**/*.{ts,tsx,js,jsx}\" --fix",
 | 
			
		||||
    "clean": "rm -rf node_modules && rm -rf build"
 | 
			
		||||
  },
 | 
			
		||||
  "author": "",
 | 
			
		||||
  "license": "ISC",
 | 
			
		||||
  "version": "2.6.29",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@chakra-ui/anatomy": "^2.1.1",
 | 
			
		||||
    "@chakra-ui/icons": "^2.0.18",
 | 
			
		||||
    "@chakra-ui/react": "^2.3.6",
 | 
			
		||||
    "@chakra-ui/styled-system": "^2.9.0",
 | 
			
		||||
    "@chakra-ui/theme-tools": "^2.0.12",
 | 
			
		||||
    "@chakra-ui/utils": "^2.0.14",
 | 
			
		||||
    "@emotion/react": "^11.10.6",
 | 
			
		||||
    "@emotion/styled": "^11.10.6",
 | 
			
		||||
    "@fontsource/inter": "^4.5.15",
 | 
			
		||||
    "@googlemaps/react-wrapper": "^1.1.35",
 | 
			
		||||
    "@googlemaps/typescript-guards": "^2.0.3",
 | 
			
		||||
    "@hello-pangea/dnd": "^16.2.0",
 | 
			
		||||
    "@phosphor-icons/react": "^2.0.8",
 | 
			
		||||
    "@react-spring/web": "^9.7.2",
 | 
			
		||||
    "@tanstack/react-query": "^4.29.3",
 | 
			
		||||
    "@tanstack/react-table": "^8.8.5",
 | 
			
		||||
    "@textea/json-viewer": "^2.16.2",
 | 
			
		||||
    "axios": "^1.3.5",
 | 
			
		||||
    "@coreui/coreui": "^3.4.0",
 | 
			
		||||
    "@coreui/icons": "^2.0.1",
 | 
			
		||||
    "@coreui/icons-react": "^1.1.0",
 | 
			
		||||
    "@coreui/react": "^3.4.6",
 | 
			
		||||
    "@coreui/react-chartjs": "^1.1.0",
 | 
			
		||||
    "apexcharts": "^3.27.1",
 | 
			
		||||
    "axios": "^0.21.1",
 | 
			
		||||
    "axios-retry": "^3.1.9",
 | 
			
		||||
    "buffer": "^6.0.3",
 | 
			
		||||
    "chakra-react-select": "^4.6.0",
 | 
			
		||||
    "chart.js": "^3.9.1",
 | 
			
		||||
    "dagre": "^0.8.5",
 | 
			
		||||
    "fast-equals": "^5.0.1",
 | 
			
		||||
    "formik": "^2.2.9",
 | 
			
		||||
    "framer-motion": "^10.12.2",
 | 
			
		||||
    "i18next": "^22.4.14",
 | 
			
		||||
    "i18next-browser-languagedetector": "^7.0.1",
 | 
			
		||||
    "i18next-http-backend": "^2.2.0",
 | 
			
		||||
    "libphonenumber-js": "^1.10.26",
 | 
			
		||||
    "prop-types": "^15.8.1",
 | 
			
		||||
    "react": "^18.2.0",
 | 
			
		||||
    "react-app-polyfill": "^3.0.0",
 | 
			
		||||
    "react-chartjs-2": "^4.3.1",
 | 
			
		||||
    "react-country-flag": "^3.1.0",
 | 
			
		||||
    "i18next": "^20.3.1",
 | 
			
		||||
    "i18next-browser-languagedetector": "^6.1.2",
 | 
			
		||||
    "i18next-http-backend": "^1.2.6",
 | 
			
		||||
    "prop-types": "^15.7.2",
 | 
			
		||||
    "react": "^17.0.2",
 | 
			
		||||
    "react-apexcharts": "^1.3.9",
 | 
			
		||||
    "react-country-flag": "^3.0.2",
 | 
			
		||||
    "react-csv": "^2.2.2",
 | 
			
		||||
    "react-datepicker": "^4.11.0",
 | 
			
		||||
    "react-dom": "^18.2.0",
 | 
			
		||||
    "react-fast-compare": "^3.2.1",
 | 
			
		||||
    "react-i18next": "^12.2.0",
 | 
			
		||||
    "react-masonry-css": "^1.0.16",
 | 
			
		||||
    "react-router-dom": "^6.10.0",
 | 
			
		||||
    "react-table": "^7.8.0",
 | 
			
		||||
    "react-virtualized-auto-sizer": "^1.0.15",
 | 
			
		||||
    "react-window": "^1.8.9",
 | 
			
		||||
    "source-map-explorer": "^2.5.3",
 | 
			
		||||
    "typescript": "^5.0.4",
 | 
			
		||||
    "uuid": "^9.0.0",
 | 
			
		||||
    "vite": "^4.2.1",
 | 
			
		||||
    "yup": "^0.32.11",
 | 
			
		||||
    "zustand": "^4.3.7"
 | 
			
		||||
    "react-dom": "^17.0.2",
 | 
			
		||||
    "react-flow-renderer": "^9.6.6",
 | 
			
		||||
    "react-i18next": "^11.11.0",
 | 
			
		||||
    "react-paginate": "^7.1.3",
 | 
			
		||||
    "react-router-dom": "^5.2.0",
 | 
			
		||||
    "react-select": "^4.3.1",
 | 
			
		||||
    "react-tooltip": "^4.2.21",
 | 
			
		||||
    "react-widgets": "^5.1.1",
 | 
			
		||||
    "sass": "^1.35.1",
 | 
			
		||||
    "ucentral-libs": "^1.0.61",
 | 
			
		||||
    "uuid": "^8.3.2"
 | 
			
		||||
  },
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "start": "webpack serve --config config/webpack.dev.js",
 | 
			
		||||
    "build": "webpack --config config/webpack.prod.js",
 | 
			
		||||
    "format": "prettier --write 'src/**/*.js'",
 | 
			
		||||
    "eslint-fix": "eslint --fix 'src/**/*.js'"
 | 
			
		||||
  },
 | 
			
		||||
  "eslintConfig": {
 | 
			
		||||
    "extends": "react-app"
 | 
			
		||||
  },
 | 
			
		||||
  "husky": {
 | 
			
		||||
    "hooks": {
 | 
			
		||||
      "pre-commit": "lint-staged"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "lint-staged": {
 | 
			
		||||
    "*.{js,jsx}": [
 | 
			
		||||
      "eslint",
 | 
			
		||||
      "prettier --write"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/google.maps": "^3.52.5",
 | 
			
		||||
    "@types/node": "^18.15.11",
 | 
			
		||||
    "@types/react": "^18.0.37",
 | 
			
		||||
    "@types/react-csv": "^1.1.3",
 | 
			
		||||
    "@types/react-datepicker": "4.10.0",
 | 
			
		||||
    "@types/react-dom": "^18.0.11",
 | 
			
		||||
    "@types/react-table": "^7.7.14",
 | 
			
		||||
    "@types/react-virtualized-auto-sizer": "^1.0.1",
 | 
			
		||||
    "@types/react-window": "^1.8.5",
 | 
			
		||||
    "@types/uuid": "^9.0.1",
 | 
			
		||||
    "@vitejs/plugin-react": "^3.1.0",
 | 
			
		||||
    "eslint": "8.38.0",
 | 
			
		||||
    "eslint-config-airbnb": "^19.0.4",
 | 
			
		||||
    "eslint-config-airbnb-typescript": "^17.0.0",
 | 
			
		||||
    "eslint-config-airbnb-typescript-prettier": "^5.0.0",
 | 
			
		||||
    "eslint-config-prettier": "^8.8.0",
 | 
			
		||||
    "@babel/core": "^7.14.6",
 | 
			
		||||
    "@babel/plugin-proposal-class-properties": "^7.14.5",
 | 
			
		||||
    "@babel/plugin-transform-runtime": "^7.14.5",
 | 
			
		||||
    "@babel/polyfill": "^7.12.1",
 | 
			
		||||
    "@babel/preset-env": "^7.14.7",
 | 
			
		||||
    "@babel/preset-react": "^7.14.5",
 | 
			
		||||
    "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
 | 
			
		||||
    "@svgr/webpack": "^5.5.0",
 | 
			
		||||
    "autoprefixer": "^10.2.6",
 | 
			
		||||
    "babel-eslint": "^10.1.0",
 | 
			
		||||
    "babel-loader": "^8.2.2",
 | 
			
		||||
    "clean-webpack-plugin": "^3.0.0",
 | 
			
		||||
    "compression-webpack-plugin": "^8.0.1",
 | 
			
		||||
    "copy-webpack-plugin": "^7.0.0",
 | 
			
		||||
    "css-loader": "^5.2.6",
 | 
			
		||||
    "css-minimizer-webpack-plugin": "^2.0.0",
 | 
			
		||||
    "dotenv-webpack": "^6.0.4",
 | 
			
		||||
    "eslint": "^7.29.0",
 | 
			
		||||
    "eslint-config-airbnb": "^18.2.1",
 | 
			
		||||
    "eslint-config-prettier": "^7.2.0",
 | 
			
		||||
    "eslint-import-resolver-alias": "^1.1.2",
 | 
			
		||||
    "eslint-loader": "^4.0.2",
 | 
			
		||||
    "eslint-plugin-babel": "^5.3.1",
 | 
			
		||||
    "eslint-plugin-import": "^2.27.5",
 | 
			
		||||
    "eslint-plugin-jsx-a11y": "^6.7.1",
 | 
			
		||||
    "eslint-plugin-no-inline-styles": "^1.0.5",
 | 
			
		||||
    "eslint-plugin-prettier": "^4.2.1",
 | 
			
		||||
    "eslint-plugin-react": "^7.32.2",
 | 
			
		||||
    "eslint-plugin-react-hooks": "^4.6.0",
 | 
			
		||||
    "lint-staged": "^13.2.1",
 | 
			
		||||
    "prettier": "^2.8.7",
 | 
			
		||||
    "vite-plugin-pwa": "^0.14.7",
 | 
			
		||||
    "vite-plugin-svgr": "^4.2.0",
 | 
			
		||||
    "vite-tsconfig-paths": "^4.2.0"
 | 
			
		||||
    "eslint-plugin-import": "^2.23.4",
 | 
			
		||||
    "eslint-plugin-prettier": "^3.4.0",
 | 
			
		||||
    "eslint-plugin-react": "^7.24.0",
 | 
			
		||||
    "eslint-plugin-react-hooks": "^4.2.0",
 | 
			
		||||
    "html-webpack-plugin": "^5.3.2",
 | 
			
		||||
    "husky": "^4.3.8",
 | 
			
		||||
    "lint-staged": "^11.0.0",
 | 
			
		||||
    "mini-css-extract-plugin": "^1.6.1",
 | 
			
		||||
    "path": "^0.12.7",
 | 
			
		||||
    "prettier": "^2.3.2",
 | 
			
		||||
    "react-refresh": "^0.9.0",
 | 
			
		||||
    "sass-loader": "^11.1.1",
 | 
			
		||||
    "style-loader": "^2.0.0",
 | 
			
		||||
    "terser-webpack-plugin": "^5.1.4",
 | 
			
		||||
    "webpack": "^5.40.0",
 | 
			
		||||
    "webpack-bundle-analyzer": "^4.4.2",
 | 
			
		||||
    "webpack-cli": "^4.9.1",
 | 
			
		||||
    "webpack-dev-server": "^3.11.2",
 | 
			
		||||
    "webpack-merge": "^5.8.0"
 | 
			
		||||
  },
 | 
			
		||||
  "browserslist": {
 | 
			
		||||
    "production": [
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 12 KiB  | 
| 
		 Before Width: | Height: | Size: 29 KiB  | 
| 
		 Before Width: | Height: | Size: 36 KiB  | 
| 
		 Before Width: | Height: | Size: 11 KiB  | 
@@ -1,9 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<browserconfig>
 | 
			
		||||
    <msapplication>
 | 
			
		||||
        <tile>
 | 
			
		||||
            <square150x150logo src="/mstile-150x150.png"/>
 | 
			
		||||
            <TileColor>#414141</TileColor>
 | 
			
		||||
        </tile>
 | 
			
		||||
    </msapplication>
 | 
			
		||||
</browserconfig>
 | 
			
		||||
							
								
								
									
										4
									
								
								public/config.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
{
 | 
			
		||||
  "DEFAULT_UCENTRALSEC_URL": "https://ucentral.dpaas.arilia.com:16001",
 | 
			
		||||
  "ALLOW_UCENTRALSEC_CHANGE": false
 | 
			
		||||
}
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 294 KiB  | 
| 
		 Before Width: | Height: | Size: 394 KiB  | 
| 
		 Before Width: | Height: | Size: 141 KiB  | 
| 
		 Before Width: | Height: | Size: 138 KiB  | 
| 
		 Before Width: | Height: | Size: 245 KiB  | 
| 
		 Before Width: | Height: | Size: 245 KiB  | 
| 
		 Before Width: | Height: | Size: 245 KiB  | 
| 
		 Before Width: | Height: | Size: 239 KiB  | 
| 
		 Before Width: | Height: | Size: 239 KiB  | 
| 
		 Before Width: | Height: | Size: 239 KiB  | 
| 
		 Before Width: | Height: | Size: 32 KiB  | 
| 
		 Before Width: | Height: | Size: 100 KiB  | 
| 
		 Before Width: | Height: | Size: 100 KiB  | 
| 
		 Before Width: | Height: | Size: 123 KiB  | 
| 
		 Before Width: | Height: | Size: 79 KiB  | 
| 
		 Before Width: | Height: | Size: 31 KiB  | 
| 
		 Before Width: | Height: | Size: 31 KiB  | 
| 
		 Before Width: | Height: | Size: 140 KiB  | 
| 
		 Before Width: | Height: | Size: 121 KiB  | 
| 
		 Before Width: | Height: | Size: 129 KiB  | 
| 
		 Before Width: | Height: | Size: 129 KiB  | 
| 
		 Before Width: | Height: | Size: 286 KiB  | 
| 
		 Before Width: | Height: | Size: 502 KiB  | 
| 
		 Before Width: | Height: | Size: 637 KiB  | 
| 
		 Before Width: | Height: | Size: 324 KiB  | 
| 
		 Before Width: | Height: | Size: 313 KiB  | 
| 
		 Before Width: | Height: | Size: 314 KiB  | 
| 
		 Before Width: | Height: | Size: 283 KiB  | 
| 
		 Before Width: | Height: | Size: 374 KiB  | 
| 
		 Before Width: | Height: | Size: 33 KiB  | 
| 
		 Before Width: | Height: | Size: 267 KiB  | 
| 
		 Before Width: | Height: | Size: 331 KiB  | 
| 
		 Before Width: | Height: | Size: 194 KiB  | 
| 
		 Before Width: | Height: | Size: 194 KiB  | 
| 
		 Before Width: | Height: | Size: 133 KiB  | 
| 
		 Before Width: | Height: | Size: 133 KiB  | 
| 
		 Before Width: | Height: | Size: 194 KiB  | 
| 
		 Before Width: | Height: | Size: 24 KiB  | 
| 
		 Before Width: | Height: | Size: 1.6 MiB  | 
| 
		 Before Width: | Height: | Size: 117 KiB  | 
| 
		 Before Width: | Height: | Size: 218 KiB  | 
| 
		 Before Width: | Height: | Size: 421 KiB  | 
| 
		 Before Width: | Height: | Size: 817 KiB  | 
| 
		 Before Width: | Height: | Size: 879 KiB  | 
| 
		 Before Width: | Height: | Size: 664 KiB  | 
| 
		 Before Width: | Height: | Size: 304 KiB  | 
| 
		 Before Width: | Height: | Size: 32 KiB  | 
| 
		 Before Width: | Height: | Size: 38 KiB  | 
| 
		 Before Width: | Height: | Size: 47 KiB  | 
| 
		 Before Width: | Height: | Size: 1021 B  | 
| 
		 Before Width: | Height: | Size: 1.9 KiB  | 
| 
		 Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 202 KiB  | 
							
								
								
									
										165
									
								
								public/favicon.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,165 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 | 
			
		||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 | 
			
		||||
	 viewBox="0 0 141.5 185.6" style="enable-background:new 0 0 141.5 185.6;" xml:space="preserve">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
	.st0{fill:#414141;}
 | 
			
		||||
	.st1{fill:#FFFFFF;}
 | 
			
		||||
	.st2{fill:#FED206;}
 | 
			
		||||
	.st3{fill:#EB6F53;}
 | 
			
		||||
	.st4{fill:#3BA9B6;}
 | 
			
		||||
</style>
 | 
			
		||||
<g>
 | 
			
		||||
	<g>
 | 
			
		||||
		<path class="st0" d="M120.7,183.9H21.5c-10.8,0-19.5-8.7-19.5-19.5V20.5c0-10.8,8.7-19.5,19.5-19.5h99.2
 | 
			
		||||
			c10.8,0,19.5,8.7,19.5,19.5v143.9C140.2,175.2,131.5,183.9,120.7,183.9z"/>
 | 
			
		||||
		<g>
 | 
			
		||||
			<g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M46.3,166.2v-3.4h-1.2v-0.6h3.1v0.6H47v3.4H46.3z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M49,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H49z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M52.6,166.2v-4h0.7v3.4h1.8v0.6H52.6z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M55.7,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H55.7z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M59.1,164.2c0-1.2,0.9-2.1,2.1-2.1c0.8,0,1.3,0.4,1.6,0.9l-0.6,0.3c-0.2-0.3-0.6-0.6-1-0.6
 | 
			
		||||
						c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.4,0,0.8-0.3,1-0.6l0.6,0.3c-0.3,0.5-0.8,0.9-1.6,0.9
 | 
			
		||||
						C60,166.3,59.1,165.5,59.1,164.2z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M63.2,164.2c0-1.2,0.8-2.1,2-2.1c1.2,0,2,0.9,2,2.1c0,1.2-0.8,2.1-2,2.1C64,166.3,63.2,165.4,63.2,164.2z
 | 
			
		||||
						 M66.5,164.2c0-0.8-0.5-1.4-1.3-1.4c-0.8,0-1.3,0.6-1.3,1.4c0,0.8,0.5,1.4,1.3,1.4C66,165.7,66.5,165,66.5,164.2z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M71.3,166.2v-3.1l-1.2,3.1h-0.3l-1.2-3.1v3.1h-0.7v-4h1l1.1,2.7l1.1-2.7h1v4H71.3z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M75.7,166.2v-4h0.7v4H75.7z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M80.4,166.2l-2.1-2.8v2.8h-0.7v-4h0.7l2,2.8v-2.8h0.7v4H80.4z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M82.3,166.2v-4H85v0.6h-2v1h2v0.6h-2v1.7H82.3z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M87.9,166.2l-0.9-1.5h-0.7v1.5h-0.7v-4h1.7c0.8,0,1.3,0.5,1.3,1.2c0,0.7-0.5,1.1-0.9,1.2l1,1.6H87.9z
 | 
			
		||||
						 M88,163.5c0-0.4-0.3-0.6-0.7-0.6h-1v1.3h1C87.7,164.1,88,163.9,88,163.5z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M92.4,166.2l-0.3-0.8h-1.8l-0.3,0.8h-0.8l1.6-4h0.9l1.6,4H92.4z M91.2,162.9l-0.7,1.9h1.4L91.2,162.9z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M95.8,166.2v-4h1.5c0.8,0,1.2,0.5,1.2,1.2c0,0.6-0.4,1.2-1.2,1.2h-1.2v1.7H95.8z M98.2,163.4
 | 
			
		||||
						c0-0.5-0.3-0.9-0.9-0.9h-1.1v1.7h1.1C97.8,164.3,98.2,163.9,98.2,163.4z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M101.5,166.2l-1.1-1.6h-0.9v1.6h-0.3v-4h1.5c0.7,0,1.2,0.4,1.2,1.2c0,0.7-0.5,1.1-1.1,1.1l1.2,1.7H101.5z
 | 
			
		||||
						 M101.6,163.4c0-0.5-0.4-0.9-0.9-0.9h-1.1v1.7h1.1C101.2,164.3,101.6,163.9,101.6,163.4z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M102.8,164.2c0-1.2,0.8-2.1,1.9-2.1c1.2,0,1.9,0.9,1.9,2.1c0,1.2-0.8,2.1-1.9,2.1
 | 
			
		||||
						C103.6,166.3,102.8,165.4,102.8,164.2z M106.3,164.2c0-1-0.6-1.7-1.6-1.7c-1,0-1.6,0.7-1.6,1.7c0,1,0.6,1.7,1.6,1.7
 | 
			
		||||
						C105.7,166,106.3,165.2,106.3,164.2z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M106.9,165.8l0.2-0.3c0.2,0.2,0.4,0.4,0.8,0.4c0.5,0,0.9-0.4,0.9-0.9v-2.8h0.3v2.8c0,0.8-0.5,1.2-1.2,1.2
 | 
			
		||||
						C107.5,166.3,107.2,166.1,106.9,165.8z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M110.4,166.2v-4h2.5v0.3h-2.2v1.5h2.1v0.3h-2.1v1.6h2.2v0.3H110.4z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M113.5,164.2c0-1.2,0.9-2.1,2-2.1c0.6,0,1.1,0.3,1.5,0.7l-0.3,0.2c-0.3-0.3-0.7-0.6-1.2-0.6
 | 
			
		||||
						c-0.9,0-1.7,0.7-1.7,1.7c0,1,0.7,1.7,1.7,1.7c0.5,0,0.9-0.2,1.2-0.6l0.3,0.2c-0.4,0.4-0.8,0.7-1.5,0.7
 | 
			
		||||
						C114.4,166.3,113.5,165.5,113.5,164.2z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M118.7,166.2v-3.7h-1.3v-0.3h2.9v0.3H119v3.7H118.7z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
			</g>
 | 
			
		||||
			<g>
 | 
			
		||||
				<polygon class="st1" points="26.3,163.8 31.6,158.5 36.9,163.8 37.7,163.8 31.6,157.6 25.5,163.8 				"/>
 | 
			
		||||
				<polygon class="st1" points="36.9,164.7 31.6,170 26.3,164.7 25.5,164.7 31.6,170.8 37.7,164.7 				"/>
 | 
			
		||||
				<polygon class="st1" points="31,163.8 36.3,158.5 41.6,163.8 42.5,163.8 36.3,157.6 30.2,163.8 				"/>
 | 
			
		||||
				<polygon class="st1" points="41.6,164.7 36.3,170 31,164.7 30.2,164.7 36.3,170.8 42.5,164.7 				"/>
 | 
			
		||||
			</g>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g>
 | 
			
		||||
			<path class="st1" d="M33.2,100.7c-4.6,0-8.3,3.7-8.3,8.3s3.7,8.3,8.3,8.3s8.3-3.7,8.3-8.3S37.8,100.7,33.2,100.7z"/>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g>
 | 
			
		||||
			<g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st2" d="M33.2,35.2c40.7,0,73.8,33.1,73.8,73.8c0,0.7,0,1.4,0,2.1c0,1.7,0.6,3.3,1.7,4.6c1.2,1.2,2.8,1.9,4.5,2
 | 
			
		||||
						l0.2,0c3.5,0,6.3-2.7,6.4-6.2c0-0.8,0-1.7,0-2.5c0-47.7-38.8-86.6-86.6-86.6c-0.8,0-1.7,0-2.5,0c-1.7,0-3.3,0.8-4.5,2
 | 
			
		||||
						c-1.2,1.2-1.8,2.9-1.7,4.6c0.1,3.5,3,6.3,6.6,6.2C31.8,35.2,32.5,35.2,33.2,35.2z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
			</g>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g>
 | 
			
		||||
			<g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st3" d="M33.2,60.5c26.7,0,48.5,21.7,48.5,48.5c0,0.6,0,1.3,0,2c-0.1,1.7,0.5,3.3,1.7,4.6c1.2,1.3,2.7,2,4.4,2.1
 | 
			
		||||
						c1.7,0.1,3.3-0.5,4.6-1.7c1.2-1.2,2-2.7,2-4.4c0-0.9,0.1-1.8,0.1-2.6c0-33.8-27.5-61.2-61.2-61.2c-0.8,0-1.6,0-2.6,0.1
 | 
			
		||||
						c-1.7,0.1-3.3,0.8-4.4,2.1c-1.2,1.3-1.8,2.9-1.7,4.6s0.8,3.3,2.1,4.4c1.3,1.2,2.9,1.8,4.6,1.7C31.9,60.5,32.6,60.5,33.2,60.5z"
 | 
			
		||||
						/>
 | 
			
		||||
				</g>
 | 
			
		||||
			</g>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g>
 | 
			
		||||
			<g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st4" d="M33.2,86.7c12.3,0,22.3,10,22.3,22.3c0,0.5,0,1.1-0.1,1.8c-0.3,3.5,2.3,6.6,5.8,6.9
 | 
			
		||||
						c3.5,0.3,6.6-2.3,6.9-5.8c0.1-1,0.1-1.9,0.1-2.8c0-19.3-15.7-35.1-35.1-35.1c-0.9,0-1.8,0-2.8,0.1c-1.7,0.1-3.2,0.9-4.3,2.2
 | 
			
		||||
						c-1.1,1.3-1.6,2.9-1.5,4.6c0.1,1.7,0.9,3.2,2.2,4.3c1.3,1.1,2.9,1.6,4.6,1.5C32.1,86.7,32.7,86.7,33.2,86.7z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
			</g>
 | 
			
		||||
		</g>
 | 
			
		||||
	</g>
 | 
			
		||||
	<g>
 | 
			
		||||
		<path class="st1" d="M35.8,130.4c1.1,0.6,2.1,1.5,2.7,2.6c0.7,1.1,1,2.3,1,3.7s-0.3,2.6-1,3.7c-0.7,1.1-1.6,2-2.7,2.6
 | 
			
		||||
			c-1.1,0.6-2.4,1-3.8,1s-2.7-0.3-3.8-1c-1.1-0.6-2.1-1.5-2.7-2.6c-0.7-1.1-1-2.3-1-3.7c0-1.3,0.3-2.6,1-3.7c0.7-1.1,1.6-2,2.7-2.6
 | 
			
		||||
			c1.1-0.6,2.4-0.9,3.8-0.9C33.4,129.5,34.7,129.8,35.8,130.4z M29.9,132.9c-0.7,0.4-1.2,0.9-1.6,1.6s-0.6,1.4-0.6,2.2
 | 
			
		||||
			c0,0.8,0.2,1.6,0.6,2.3c0.4,0.7,0.9,1.2,1.6,1.6c0.7,0.4,1.4,0.6,2.1,0.6c0.8,0,1.5-0.2,2.1-0.6c0.6-0.4,1.2-0.9,1.5-1.6
 | 
			
		||||
			c0.4-0.7,0.6-1.4,0.6-2.3c0-0.8-0.2-1.6-0.6-2.2s-0.9-1.2-1.5-1.6c-0.6-0.4-1.4-0.6-2.1-0.6C31.3,132.3,30.6,132.5,29.9,132.9z"/>
 | 
			
		||||
		<path class="st1" d="M50.6,133.6c0.8,0.5,1.4,1.1,1.8,2c0.4,0.8,0.6,1.8,0.6,2.9c0,1.1-0.2,2-0.6,2.8c-0.4,0.8-1,1.5-1.8,1.9
 | 
			
		||||
			c-0.8,0.5-1.6,0.7-2.6,0.7c-0.7,0-1.4-0.1-2-0.4s-1.1-0.7-1.5-1.2v5.4h-3.1V133h3.1v1.6c0.4-0.5,0.9-1,1.4-1.2s1.2-0.4,2-0.4
 | 
			
		||||
			C48.9,132.9,49.8,133.1,50.6,133.6z M49.1,140.5c0.5-0.6,0.7-1.3,0.7-2.2c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.6-1.1-0.8-1.9-0.8
 | 
			
		||||
			s-1.4,0.3-1.9,0.8c-0.5,0.6-0.8,1.3-0.8,2.1c0,0.9,0.2,1.6,0.8,2.2s1.1,0.8,1.9,0.8S48.6,141,49.1,140.5z"/>
 | 
			
		||||
		<path class="st1" d="M63.4,134.4c0.9,1,1.4,2.4,1.4,4.2c0,0.3,0,0.6,0,0.7H57c0.2,0.7,0.5,1.2,1,1.6c0.5,0.4,1.1,0.6,1.8,0.6
 | 
			
		||||
			c0.5,0,1-0.1,1.5-0.3s0.9-0.5,1.3-0.9l1.6,1.6c-0.5,0.6-1.2,1.1-2,1.4c-0.8,0.3-1.6,0.5-2.6,0.5c-1.1,0-2.1-0.2-3-0.7
 | 
			
		||||
			s-1.5-1.1-2-1.9c-0.5-0.8-0.7-1.8-0.7-2.9c0-1.1,0.2-2.1,0.7-2.9s1.1-1.5,2-1.9c0.8-0.5,1.8-0.7,2.9-0.7
 | 
			
		||||
			C61.2,132.9,62.5,133.4,63.4,134.4z M61.8,137.5c0-0.7-0.3-1.3-0.7-1.7s-1-0.6-1.7-0.6c-0.7,0-1.2,0.2-1.7,0.6
 | 
			
		||||
			c-0.4,0.4-0.7,1-0.9,1.7H61.8z"/>
 | 
			
		||||
		<path class="st1" d="M76.2,134c0.7,0.7,1.1,1.7,1.1,3v6.8h-3.1v-5.9c0-0.7-0.2-1.2-0.6-1.6s-0.9-0.6-1.5-0.6
 | 
			
		||||
			c-0.8,0-1.4,0.3-1.8,0.8c-0.4,0.5-0.7,1.2-0.7,2v5.3h-3.1V133h3.1v1.9c0.7-1.3,2-2,3.7-2C74.6,132.8,75.5,133.2,76.2,134z"/>
 | 
			
		||||
		<path class="st1" d="M96,129.7h3.3l-4.7,14h-3.3l-2.9-10.1l-3,10.1h-3.2l-4.7-14h3.4l3,10.7l3-10.7H90l3.1,10.7L96,129.7z"/>
 | 
			
		||||
		<path class="st1" d="M103.3,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
 | 
			
		||||
			c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C102.6,128.2,103,128.3,103.3,128.7z M100.6,133h3.1
 | 
			
		||||
			v10.8h-3.1V133z"/>
 | 
			
		||||
		<path class="st1" d="M106.5,129.7h10.1l0,2.6h-6.9v3.4h6.3v2.6h-6.3v5.3h-3.2V129.7z"/>
 | 
			
		||||
		<path class="st1" d="M120.9,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
 | 
			
		||||
			c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C120.1,128.2,120.5,128.3,120.9,128.7z M118.1,133h3.1
 | 
			
		||||
			v10.8h-3.1V133z"/>
 | 
			
		||||
	</g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 8.0 KiB  | 
							
								
								
									
										14
									
								
								public/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,14 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <link rel="icon" href="favicon.ico" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1" />
 | 
			
		||||
    <meta name="theme-color" content="#000000" />
 | 
			
		||||
    <title>Gateway</title>
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <noscript>You need to enable JavaScript to run this app.</noscript>
 | 
			
		||||
    <div id="root"></div>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 9.9 KiB  | 
@@ -1,38 +0,0 @@
 | 
			
		||||
<?xml version="1.0" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
 | 
			
		||||
 "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
 | 
			
		||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
 width="744.000000pt" height="744.000000pt" viewBox="0 0 744.000000 744.000000"
 | 
			
		||||
 preserveAspectRatio="xMidYMid meet">
 | 
			
		||||
<metadata>
 | 
			
		||||
Created by potrace 1.14, written by Peter Selinger 2001-2017
 | 
			
		||||
</metadata>
 | 
			
		||||
<g transform="translate(0.000000,744.000000) scale(0.100000,-0.100000)"
 | 
			
		||||
fill="#000000" stroke="none">
 | 
			
		||||
<path d="M1827 7404 c-2 -2 -50 -6 -108 -8 -57 -3 -120 -10 -139 -15 -19 -6
 | 
			
		||||
-56 -16 -82 -22 -27 -7 -48 -16 -48 -20 0 -4 -14 -10 -30 -14 -17 -4 -36 -12
 | 
			
		||||
-43 -18 -7 -7 -28 -21 -46 -31 -115 -64 -247 -224 -304 -366 -59 -150 -55 65
 | 
			
		||||
-56 -3180 0 -3270 -5 -3017 60 -3178 92 -232 303 -410 546 -463 32 -7 65 -14
 | 
			
		||||
73 -16 22 -5 4127 -3 4180 2 77 7 279 77 300 104 3 3 25 19 50 35 56 37 135
 | 
			
		||||
116 180 181 19 28 38 52 43 53 4 2 5 7 2 12 -3 4 2 13 10 20 8 7 15 21 15 31
 | 
			
		||||
0 10 4 20 9 23 8 6 39 91 47 131 2 11 7 31 11 45 4 14 8 1364 9 3000 2 3142 3
 | 
			
		||||
3032 -42 3165 -43 130 -131 255 -245 350 -33 28 -123 90 -127 87 -1 -1 -16 5
 | 
			
		||||
-34 14 -35 18 -128 50 -173 59 -30 6 -187 18 -215 16 -57 -3 -122 -1 -129 4
 | 
			
		||||
-5 3 -11 1 -13 -4 -1 -5 -23 -6 -48 -2 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
 | 
			
		||||
-23 3 -44 2 -45 -2 -2 -4 -24 -4 -50 0 -27 5 -49 6 -51 5z"/>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 2.3 KiB  | 
							
								
								
									
										28
									
								
								src/@tanstack.react-table.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,28 +0,0 @@
 | 
			
		||||
/* eslint-disable @typescript-eslint/no-unused-vars */
 | 
			
		||||
import { BoxProps } from '@chakra-ui/react';
 | 
			
		||||
import '@tanstack/react-table';
 | 
			
		||||
 | 
			
		||||
declare module '@tanstack/table-core' {
 | 
			
		||||
  interface ColumnMeta<TData extends RowData, TValue> {
 | 
			
		||||
    ref?: React.MutableRefObject<HTMLTableCellElement | null>;
 | 
			
		||||
    customMinWidth?: string;
 | 
			
		||||
    anchored?: boolean;
 | 
			
		||||
    stopPropagation?: boolean;
 | 
			
		||||
    alwaysShow?: boolean;
 | 
			
		||||
    hasPopover?: boolean;
 | 
			
		||||
    customMaxWidth?: string;
 | 
			
		||||
    customWidth?: string;
 | 
			
		||||
    isMonospace?: boolean;
 | 
			
		||||
    isCentered?: boolean;
 | 
			
		||||
    columnSelectorOptions?: {
 | 
			
		||||
      label?: string;
 | 
			
		||||
    };
 | 
			
		||||
    rowContentOptions?: {
 | 
			
		||||
      style?: React.CSSProperties;
 | 
			
		||||
    };
 | 
			
		||||
    headerOptions?: {
 | 
			
		||||
      tooltip?: string;
 | 
			
		||||
    };
 | 
			
		||||
    headerStyleProps?: BoxProps;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								src/App.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,39 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import { HashRouter, Switch } from 'react-router-dom';
 | 
			
		||||
import 'scss/style.scss';
 | 
			
		||||
import Router from 'router';
 | 
			
		||||
import { AuthProvider } from 'ucentral-libs';
 | 
			
		||||
import { checkIfJson } from 'utils/helper';
 | 
			
		||||
import axiosInstance from 'utils/axiosInstance';
 | 
			
		||||
import { getItem } from 'utils/localStorageHelper';
 | 
			
		||||
 | 
			
		||||
const loading = (
 | 
			
		||||
  <div className="pt-3 text-center">
 | 
			
		||||
    <div className="sk-spinner sk-spinner-pulse" />
 | 
			
		||||
  </div>
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
const App = () => {
 | 
			
		||||
  const storageToken = getItem('access_token');
 | 
			
		||||
  const apiEndpoints = checkIfJson(getItem('gateway_endpoints'))
 | 
			
		||||
    ? JSON.parse(getItem('gateway_endpoints'))
 | 
			
		||||
    : {};
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <AuthProvider
 | 
			
		||||
      axiosInstance={axiosInstance}
 | 
			
		||||
      token={storageToken ?? ''}
 | 
			
		||||
      apiEndpoints={apiEndpoints}
 | 
			
		||||
    >
 | 
			
		||||
      <HashRouter>
 | 
			
		||||
        <React.Suspense fallback={loading}>
 | 
			
		||||
          <Switch>
 | 
			
		||||
            <Router />
 | 
			
		||||
          </Switch>
 | 
			
		||||
        </React.Suspense>
 | 
			
		||||
      </HashRouter>
 | 
			
		||||
    </AuthProvider>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default App;
 | 
			
		||||
							
								
								
									
										45
									
								
								src/App.tsx
									
									
									
									
									
								
							
							
						
						@@ -1,45 +0,0 @@
 | 
			
		||||
import React, { Suspense } from 'react';
 | 
			
		||||
import { Spinner } from '@chakra-ui/react';
 | 
			
		||||
import { QueryClientProvider, QueryClient } from '@tanstack/react-query';
 | 
			
		||||
import { HashRouter } from 'react-router-dom';
 | 
			
		||||
import { AuthProvider } from 'contexts/AuthProvider';
 | 
			
		||||
import { ControllerSocketProvider } from 'contexts/ControllerSocketProvider';
 | 
			
		||||
import { FirmwareSocketProvider } from 'contexts/FirmwareSocketProvider';
 | 
			
		||||
import { ProvisioningSocketProvider } from 'contexts/ProvisioningSocketProvider';
 | 
			
		||||
import { SecuritySocketProvider } from 'contexts/SecuritySocketProvider';
 | 
			
		||||
import Router from 'router';
 | 
			
		||||
 | 
			
		||||
const queryClient = new QueryClient({
 | 
			
		||||
  defaultOptions: {
 | 
			
		||||
    queries: {
 | 
			
		||||
      retry: 0,
 | 
			
		||||
      refetchOnWindowFocus: false,
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const App = () => {
 | 
			
		||||
  const storageToken = localStorage.getItem('access_token') ?? sessionStorage.getItem('access_token');
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <QueryClientProvider client={queryClient}>
 | 
			
		||||
      <HashRouter>
 | 
			
		||||
        <Suspense fallback={<Spinner />}>
 | 
			
		||||
          <AuthProvider token={storageToken !== null ? storageToken : undefined}>
 | 
			
		||||
            <SecuritySocketProvider>
 | 
			
		||||
              <FirmwareSocketProvider>
 | 
			
		||||
                <ProvisioningSocketProvider>
 | 
			
		||||
                  <ControllerSocketProvider>
 | 
			
		||||
                    <Router />
 | 
			
		||||
                  </ControllerSocketProvider>
 | 
			
		||||
                </ProvisioningSocketProvider>
 | 
			
		||||
              </FirmwareSocketProvider>
 | 
			
		||||
            </SecuritySocketProvider>
 | 
			
		||||
          </AuthProvider>
 | 
			
		||||
        </Suspense>
 | 
			
		||||
      </HashRouter>
 | 
			
		||||
    </QueryClientProvider>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default App;
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								src/assets/NotFound.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 24 KiB  | 
							
								
								
									
										165
									
								
								src/assets/OpenWiFi_BadgeLogo_DarkGrey.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,165 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 | 
			
		||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 | 
			
		||||
	 viewBox="0 0 141.5 185.6" style="enable-background:new 0 0 141.5 185.6;" xml:space="preserve">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
	.st0{fill:#414141;}
 | 
			
		||||
	.st1{fill:#FFFFFF;}
 | 
			
		||||
	.st2{fill:#FED206;}
 | 
			
		||||
	.st3{fill:#EB6F53;}
 | 
			
		||||
	.st4{fill:#3BA9B6;}
 | 
			
		||||
</style>
 | 
			
		||||
<g>
 | 
			
		||||
	<g>
 | 
			
		||||
		<path class="st0" d="M120.7,183.9H21.5c-10.8,0-19.5-8.7-19.5-19.5V20.5c0-10.8,8.7-19.5,19.5-19.5h99.2
 | 
			
		||||
			c10.8,0,19.5,8.7,19.5,19.5v143.9C140.2,175.2,131.5,183.9,120.7,183.9z"/>
 | 
			
		||||
		<g>
 | 
			
		||||
			<g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M46.3,166.2v-3.4h-1.2v-0.6h3.1v0.6H47v3.4H46.3z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M49,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H49z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M52.6,166.2v-4h0.7v3.4h1.8v0.6H52.6z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M55.7,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H55.7z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M59.1,164.2c0-1.2,0.9-2.1,2.1-2.1c0.8,0,1.3,0.4,1.6,0.9l-0.6,0.3c-0.2-0.3-0.6-0.6-1-0.6
 | 
			
		||||
						c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.4,0,0.8-0.3,1-0.6l0.6,0.3c-0.3,0.5-0.8,0.9-1.6,0.9
 | 
			
		||||
						C60,166.3,59.1,165.5,59.1,164.2z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M63.2,164.2c0-1.2,0.8-2.1,2-2.1c1.2,0,2,0.9,2,2.1c0,1.2-0.8,2.1-2,2.1C64,166.3,63.2,165.4,63.2,164.2z
 | 
			
		||||
						 M66.5,164.2c0-0.8-0.5-1.4-1.3-1.4c-0.8,0-1.3,0.6-1.3,1.4c0,0.8,0.5,1.4,1.3,1.4C66,165.7,66.5,165,66.5,164.2z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M71.3,166.2v-3.1l-1.2,3.1h-0.3l-1.2-3.1v3.1h-0.7v-4h1l1.1,2.7l1.1-2.7h1v4H71.3z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M75.7,166.2v-4h0.7v4H75.7z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M80.4,166.2l-2.1-2.8v2.8h-0.7v-4h0.7l2,2.8v-2.8h0.7v4H80.4z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M82.3,166.2v-4H85v0.6h-2v1h2v0.6h-2v1.7H82.3z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M87.9,166.2l-0.9-1.5h-0.7v1.5h-0.7v-4h1.7c0.8,0,1.3,0.5,1.3,1.2c0,0.7-0.5,1.1-0.9,1.2l1,1.6H87.9z
 | 
			
		||||
						 M88,163.5c0-0.4-0.3-0.6-0.7-0.6h-1v1.3h1C87.7,164.1,88,163.9,88,163.5z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M92.4,166.2l-0.3-0.8h-1.8l-0.3,0.8h-0.8l1.6-4h0.9l1.6,4H92.4z M91.2,162.9l-0.7,1.9h1.4L91.2,162.9z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M95.8,166.2v-4h1.5c0.8,0,1.2,0.5,1.2,1.2c0,0.6-0.4,1.2-1.2,1.2h-1.2v1.7H95.8z M98.2,163.4
 | 
			
		||||
						c0-0.5-0.3-0.9-0.9-0.9h-1.1v1.7h1.1C97.8,164.3,98.2,163.9,98.2,163.4z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M101.5,166.2l-1.1-1.6h-0.9v1.6h-0.3v-4h1.5c0.7,0,1.2,0.4,1.2,1.2c0,0.7-0.5,1.1-1.1,1.1l1.2,1.7H101.5z
 | 
			
		||||
						 M101.6,163.4c0-0.5-0.4-0.9-0.9-0.9h-1.1v1.7h1.1C101.2,164.3,101.6,163.9,101.6,163.4z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M102.8,164.2c0-1.2,0.8-2.1,1.9-2.1c1.2,0,1.9,0.9,1.9,2.1c0,1.2-0.8,2.1-1.9,2.1
 | 
			
		||||
						C103.6,166.3,102.8,165.4,102.8,164.2z M106.3,164.2c0-1-0.6-1.7-1.6-1.7c-1,0-1.6,0.7-1.6,1.7c0,1,0.6,1.7,1.6,1.7
 | 
			
		||||
						C105.7,166,106.3,165.2,106.3,164.2z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M106.9,165.8l0.2-0.3c0.2,0.2,0.4,0.4,0.8,0.4c0.5,0,0.9-0.4,0.9-0.9v-2.8h0.3v2.8c0,0.8-0.5,1.2-1.2,1.2
 | 
			
		||||
						C107.5,166.3,107.2,166.1,106.9,165.8z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M110.4,166.2v-4h2.5v0.3h-2.2v1.5h2.1v0.3h-2.1v1.6h2.2v0.3H110.4z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M113.5,164.2c0-1.2,0.9-2.1,2-2.1c0.6,0,1.1,0.3,1.5,0.7l-0.3,0.2c-0.3-0.3-0.7-0.6-1.2-0.6
 | 
			
		||||
						c-0.9,0-1.7,0.7-1.7,1.7c0,1,0.7,1.7,1.7,1.7c0.5,0,0.9-0.2,1.2-0.6l0.3,0.2c-0.4,0.4-0.8,0.7-1.5,0.7
 | 
			
		||||
						C114.4,166.3,113.5,165.5,113.5,164.2z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st1" d="M118.7,166.2v-3.7h-1.3v-0.3h2.9v0.3H119v3.7H118.7z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
			</g>
 | 
			
		||||
			<g>
 | 
			
		||||
				<polygon class="st1" points="26.3,163.8 31.6,158.5 36.9,163.8 37.7,163.8 31.6,157.6 25.5,163.8 				"/>
 | 
			
		||||
				<polygon class="st1" points="36.9,164.7 31.6,170 26.3,164.7 25.5,164.7 31.6,170.8 37.7,164.7 				"/>
 | 
			
		||||
				<polygon class="st1" points="31,163.8 36.3,158.5 41.6,163.8 42.5,163.8 36.3,157.6 30.2,163.8 				"/>
 | 
			
		||||
				<polygon class="st1" points="41.6,164.7 36.3,170 31,164.7 30.2,164.7 36.3,170.8 42.5,164.7 				"/>
 | 
			
		||||
			</g>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g>
 | 
			
		||||
			<path class="st1" d="M33.2,100.7c-4.6,0-8.3,3.7-8.3,8.3s3.7,8.3,8.3,8.3s8.3-3.7,8.3-8.3S37.8,100.7,33.2,100.7z"/>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g>
 | 
			
		||||
			<g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st2" d="M33.2,35.2c40.7,0,73.8,33.1,73.8,73.8c0,0.7,0,1.4,0,2.1c0,1.7,0.6,3.3,1.7,4.6c1.2,1.2,2.8,1.9,4.5,2
 | 
			
		||||
						l0.2,0c3.5,0,6.3-2.7,6.4-6.2c0-0.8,0-1.7,0-2.5c0-47.7-38.8-86.6-86.6-86.6c-0.8,0-1.7,0-2.5,0c-1.7,0-3.3,0.8-4.5,2
 | 
			
		||||
						c-1.2,1.2-1.8,2.9-1.7,4.6c0.1,3.5,3,6.3,6.6,6.2C31.8,35.2,32.5,35.2,33.2,35.2z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
			</g>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g>
 | 
			
		||||
			<g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st3" d="M33.2,60.5c26.7,0,48.5,21.7,48.5,48.5c0,0.6,0,1.3,0,2c-0.1,1.7,0.5,3.3,1.7,4.6c1.2,1.3,2.7,2,4.4,2.1
 | 
			
		||||
						c1.7,0.1,3.3-0.5,4.6-1.7c1.2-1.2,2-2.7,2-4.4c0-0.9,0.1-1.8,0.1-2.6c0-33.8-27.5-61.2-61.2-61.2c-0.8,0-1.6,0-2.6,0.1
 | 
			
		||||
						c-1.7,0.1-3.3,0.8-4.4,2.1c-1.2,1.3-1.8,2.9-1.7,4.6s0.8,3.3,2.1,4.4c1.3,1.2,2.9,1.8,4.6,1.7C31.9,60.5,32.6,60.5,33.2,60.5z"
 | 
			
		||||
						/>
 | 
			
		||||
				</g>
 | 
			
		||||
			</g>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g>
 | 
			
		||||
			<g>
 | 
			
		||||
				<g>
 | 
			
		||||
					<path class="st4" d="M33.2,86.7c12.3,0,22.3,10,22.3,22.3c0,0.5,0,1.1-0.1,1.8c-0.3,3.5,2.3,6.6,5.8,6.9
 | 
			
		||||
						c3.5,0.3,6.6-2.3,6.9-5.8c0.1-1,0.1-1.9,0.1-2.8c0-19.3-15.7-35.1-35.1-35.1c-0.9,0-1.8,0-2.8,0.1c-1.7,0.1-3.2,0.9-4.3,2.2
 | 
			
		||||
						c-1.1,1.3-1.6,2.9-1.5,4.6c0.1,1.7,0.9,3.2,2.2,4.3c1.3,1.1,2.9,1.6,4.6,1.5C32.1,86.7,32.7,86.7,33.2,86.7z"/>
 | 
			
		||||
				</g>
 | 
			
		||||
			</g>
 | 
			
		||||
		</g>
 | 
			
		||||
	</g>
 | 
			
		||||
	<g>
 | 
			
		||||
		<path class="st1" d="M35.8,130.4c1.1,0.6,2.1,1.5,2.7,2.6c0.7,1.1,1,2.3,1,3.7s-0.3,2.6-1,3.7c-0.7,1.1-1.6,2-2.7,2.6
 | 
			
		||||
			c-1.1,0.6-2.4,1-3.8,1s-2.7-0.3-3.8-1c-1.1-0.6-2.1-1.5-2.7-2.6c-0.7-1.1-1-2.3-1-3.7c0-1.3,0.3-2.6,1-3.7c0.7-1.1,1.6-2,2.7-2.6
 | 
			
		||||
			c1.1-0.6,2.4-0.9,3.8-0.9C33.4,129.5,34.7,129.8,35.8,130.4z M29.9,132.9c-0.7,0.4-1.2,0.9-1.6,1.6s-0.6,1.4-0.6,2.2
 | 
			
		||||
			c0,0.8,0.2,1.6,0.6,2.3c0.4,0.7,0.9,1.2,1.6,1.6c0.7,0.4,1.4,0.6,2.1,0.6c0.8,0,1.5-0.2,2.1-0.6c0.6-0.4,1.2-0.9,1.5-1.6
 | 
			
		||||
			c0.4-0.7,0.6-1.4,0.6-2.3c0-0.8-0.2-1.6-0.6-2.2s-0.9-1.2-1.5-1.6c-0.6-0.4-1.4-0.6-2.1-0.6C31.3,132.3,30.6,132.5,29.9,132.9z"/>
 | 
			
		||||
		<path class="st1" d="M50.6,133.6c0.8,0.5,1.4,1.1,1.8,2c0.4,0.8,0.6,1.8,0.6,2.9c0,1.1-0.2,2-0.6,2.8c-0.4,0.8-1,1.5-1.8,1.9
 | 
			
		||||
			c-0.8,0.5-1.6,0.7-2.6,0.7c-0.7,0-1.4-0.1-2-0.4s-1.1-0.7-1.5-1.2v5.4h-3.1V133h3.1v1.6c0.4-0.5,0.9-1,1.4-1.2s1.2-0.4,2-0.4
 | 
			
		||||
			C48.9,132.9,49.8,133.1,50.6,133.6z M49.1,140.5c0.5-0.6,0.7-1.3,0.7-2.2c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.6-1.1-0.8-1.9-0.8
 | 
			
		||||
			s-1.4,0.3-1.9,0.8c-0.5,0.6-0.8,1.3-0.8,2.1c0,0.9,0.2,1.6,0.8,2.2s1.1,0.8,1.9,0.8S48.6,141,49.1,140.5z"/>
 | 
			
		||||
		<path class="st1" d="M63.4,134.4c0.9,1,1.4,2.4,1.4,4.2c0,0.3,0,0.6,0,0.7H57c0.2,0.7,0.5,1.2,1,1.6c0.5,0.4,1.1,0.6,1.8,0.6
 | 
			
		||||
			c0.5,0,1-0.1,1.5-0.3s0.9-0.5,1.3-0.9l1.6,1.6c-0.5,0.6-1.2,1.1-2,1.4c-0.8,0.3-1.6,0.5-2.6,0.5c-1.1,0-2.1-0.2-3-0.7
 | 
			
		||||
			s-1.5-1.1-2-1.9c-0.5-0.8-0.7-1.8-0.7-2.9c0-1.1,0.2-2.1,0.7-2.9s1.1-1.5,2-1.9c0.8-0.5,1.8-0.7,2.9-0.7
 | 
			
		||||
			C61.2,132.9,62.5,133.4,63.4,134.4z M61.8,137.5c0-0.7-0.3-1.3-0.7-1.7s-1-0.6-1.7-0.6c-0.7,0-1.2,0.2-1.7,0.6
 | 
			
		||||
			c-0.4,0.4-0.7,1-0.9,1.7H61.8z"/>
 | 
			
		||||
		<path class="st1" d="M76.2,134c0.7,0.7,1.1,1.7,1.1,3v6.8h-3.1v-5.9c0-0.7-0.2-1.2-0.6-1.6s-0.9-0.6-1.5-0.6
 | 
			
		||||
			c-0.8,0-1.4,0.3-1.8,0.8c-0.4,0.5-0.7,1.2-0.7,2v5.3h-3.1V133h3.1v1.9c0.7-1.3,2-2,3.7-2C74.6,132.8,75.5,133.2,76.2,134z"/>
 | 
			
		||||
		<path class="st1" d="M96,129.7h3.3l-4.7,14h-3.3l-2.9-10.1l-3,10.1h-3.2l-4.7-14h3.4l3,10.7l3-10.7H90l3.1,10.7L96,129.7z"/>
 | 
			
		||||
		<path class="st1" d="M103.3,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
 | 
			
		||||
			c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C102.6,128.2,103,128.3,103.3,128.7z M100.6,133h3.1
 | 
			
		||||
			v10.8h-3.1V133z"/>
 | 
			
		||||
		<path class="st1" d="M106.5,129.7h10.1l0,2.6h-6.9v3.4h6.3v2.6h-6.3v5.3h-3.2V129.7z"/>
 | 
			
		||||
		<path class="st1" d="M120.9,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
 | 
			
		||||
			c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C120.1,128.2,120.5,128.3,120.9,128.7z M118.1,133h3.1
 | 
			
		||||
			v10.8h-3.1V133z"/>
 | 
			
		||||
	</g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 8.0 KiB  | 
| 
		 Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB  | 
| 
		 Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB  | 
| 
		 Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB  | 
| 
		 Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB  | 
| 
		 Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB  |