Compare commits
	
		
			288 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | a4743b6db5 | ||
|   | b3880f7e7e | ||
|   | 30fffdfe52 | ||
|   | c8d6540ca6 | ||
|   | 2b2f08c231 | ||
|   | 0cfed90a7b | ||
|   | 01008dc1aa | ||
|   | 26b90cfdba | ||
|   | b218051104 | ||
|   | a2fa93938f | ||
|   | c220d11dd0 | ||
|   | 40d533ecc5 | ||
|   | d1a1c96e74 | ||
|   | 1a18985c0d | ||
|   | 8eede7b559 | ||
|   | caab40b08e | ||
|   | 18fa320b19 | ||
|   | 6f9f6638d6 | ||
|   | 5688e2f7bc | ||
|   | 4738097178 | ||
|   | 591ecc3664 | ||
|   | b9089a39ac | ||
|   | b7bdf89d37 | ||
|   | 849ea9f7b2 | ||
|   | bd737ef563 | ||
|   | e250bd38f8 | ||
|   | 7083da702a | ||
|   | 3d01c20339 | ||
|   | 3b74649206 | ||
|   | a10f0c992e | ||
|   | 32974620c4 | ||
|   | 0781e3ad8e | ||
|   | 0ce107eea0 | ||
|   | 73e3efd92f | ||
|   | 69bff8d8fe | ||
|   | 22b223f82f | ||
|   | 7b0d43c8b8 | ||
|   | 7c64fb7a11 | ||
|   | 61f8b69f02 | ||
|   | c32fedeb4c | ||
|   | 4ba3bed742 | ||
|   | 810318b584 | ||
|   | 863fda3ef3 | ||
|   | deb7715ea1 | ||
|   | adaebb17e7 | ||
|   | e3f6ab43ff | ||
|   | cf977b7612 | ||
|   | fedb60fc8f | ||
|   | f8ddf88b8c | ||
|   | 301581da63 | ||
|   | 88cb945760 | ||
|   | c61d0052a9 | ||
|   | 147c3a1153 | ||
|   | e9f1e4d8da | ||
|   | f3a995f68f | ||
|   | a967163d28 | ||
|   | d3514213ca | ||
|   | a55341f406 | ||
|   | 1c9a5bfa18 | ||
|   | 179900fab0 | ||
|   | 9011e30521 | ||
|   | 418f4ce576 | ||
|   | 9eb65237f9 | ||
|   | 89a667569b | ||
|   | b87091a33a | ||
|   | d9a659acbc | ||
|   | ec8347fd7d | ||
|   | b161729c46 | ||
|   | 2194a7fc23 | ||
|   | 03c6471e97 | ||
|   | be52ed7d44 | ||
|   | 3afc9db5d3 | ||
|   | 30d882e1c0 | ||
|   | 4836279b77 | ||
|   | 4a74bfebc4 | ||
|   | 653cd758f4 | ||
|   | e65f577202 | ||
|   | 3f9478de30 | ||
|   | 070a03c73e | ||
|   | 244692e766 | ||
|   | a154fffcce | ||
|   | ae0c529fca | ||
|   | edcca87acf | ||
|   | 356188a350 | ||
|   | cafb950aa7 | ||
|   | 549627a355 | ||
|   | e6307648da | ||
|   | fab4467bfd | ||
|   | 37666c5075 | ||
|   | 871efc88b5 | ||
|   | db5611233b | ||
|   | caa1fd4d9b | ||
|   | be3f5548f4 | ||
|   | a33740c372 | ||
|   | 130d71d5a0 | ||
|   | bcd9c692e6 | ||
|   | 5947f3362d | ||
|   | 4bbfbb82bc | ||
|   | 6f7876d3e7 | ||
|   | d4aff8067e | ||
|   | eaca70d29b | ||
|   | a1889c88d3 | ||
|   | 53b3926e29 | ||
|   | 745e76db79 | ||
|   | 82e153c277 | ||
|   | b080b73b97 | ||
|   | 1c05d8df28 | ||
|   | efc80a183b | ||
|   | 8a92912035 | ||
|   | b870cf828a | ||
|   | 4cb4fe53a5 | ||
|   | f70992e9a1 | ||
|   | eb48d77636 | ||
|   | df1686a2ae | ||
|   | 8781c78c15 | ||
|   | ad5b0ce2a0 | ||
|   | 039e641046 | ||
|   | f1f62efe6f | ||
|   | b3053f32b2 | ||
|   | 09184b0402 | ||
|   | 98562fd967 | ||
|   | 65e9e64cb4 | ||
|   | 573ecbd58d | ||
|   | a801fcca49 | ||
|   | e9d16ee172 | ||
|   | db4dfc93e8 | ||
|   | cf17f03ae0 | ||
|   | 64f3ee797e | ||
|   | e287705e88 | ||
|   | 9583b2bae0 | ||
|   | 2698993a6d | ||
|   | a14b595e8c | ||
|   | d7957b85ae | ||
|   | 227a51423d | ||
|   | ea0e7340cc | ||
|   | 999680e94b | ||
|   | 566dbbb157 | ||
|   | 75d995d54e | ||
|   | 908faa491b | ||
|   | 7a254e343e | ||
|   | 016ac336b9 | ||
|   | 1cfd3a10ad | ||
|   | 1838029d22 | ||
|   | 7767043a5a | ||
|   | b1cfa6db19 | ||
|   | 623d5a5546 | ||
|   | 8c676eb965 | ||
|   | 1e4ccce36c | ||
|   | 1808206e74 | ||
|   | 0fbc2b92aa | ||
|   | 42d274e988 | ||
|   | ec64680a66 | ||
|   | d006b89efd | ||
|   | 48654c382d | ||
|   | 8d23168a87 | ||
|   | e27baaec9d | ||
|   | 31a37ae506 | ||
|   | 6360f90102 | ||
|   | b829003711 | ||
|   | fae773b25a | ||
|   | 0e8df4441d | ||
|   | 35e7e26d67 | ||
|   | 14c88280f5 | ||
|   | aaab9d3bc5 | ||
|   | 02095595c6 | ||
|   | 9a80664ce2 | ||
|   | b69e7e4ddf | ||
|   | db642782b0 | ||
|   | 33dedbbfa3 | ||
|   | a8f53de511 | ||
|   | 3b7dad989f | ||
|   | 4d62c5298a | ||
|   | 538c6b5233 | ||
|   | 969a14802b | ||
|   | 5c7f683d16 | ||
|   | c7874e5e40 | ||
|   | 628e4fa873 | ||
|   | 8e01abbeb6 | ||
|   | 89ee99f98d | ||
|   | 21452d091f | ||
|   | d21f55b476 | ||
|   | d01453ea1d | ||
|   | 09e3327e94 | ||
|   | 00deeb9fdd | ||
|   | 0aed1ba04f | ||
|   | 526947e3a1 | ||
|   | b52308df80 | ||
|   | bdb9e02df0 | ||
|   | 6273020127 | ||
|   | 4d1a464954 | ||
|   | 9711ab6c5f | ||
|   | 95963eb0be | ||
|   | 0596edb0a1 | ||
|   | 7ac82d4ad9 | ||
|   | 74a9ad955b | ||
|   | c23cce672c | ||
|   | d39b4b3624 | ||
|   | 2c3ebeec09 | ||
|   | 86f2ffa61f | ||
|   | 017781ff35 | ||
|   | 7d72ad0f37 | ||
|   | 152033f98a | ||
|   | c21bf5b87d | ||
|   | fa60d40171 | ||
|   | d80d5557c8 | ||
|   | 6c7ac8d7f4 | ||
|   | d72867da35 | ||
|   | 14347b73f2 | ||
|   | 11e2bf4cbb | ||
|   | b2553d35fd | ||
|   | 58f8a02557 | ||
|   | 34450144ba | ||
|   | f9e08d53af | ||
|   | 006e402d9f | ||
|   | 8132012534 | ||
|   | 3e8f02eea4 | ||
|   | 7312980453 | ||
|   | 8c20d41d89 | ||
|   | d50d53ac1f | ||
|   | b0d7ab2e81 | ||
|   | 91223b7518 | ||
|   | 616e4b6e0c | ||
|   | 5170ea81e7 | ||
|   | 53a8cd8ee4 | ||
|   | 2229e8cb7d | ||
|   | 9ce1041b0e | ||
|   | 187065098b | ||
|   | 467bdf0045 | ||
|   | 9462b5b461 | ||
|   | da7f29a9e0 | ||
|   | d06bfd91ff | ||
|   | b9bba10697 | ||
|   | 4581de92ad | ||
|   | 72c520cca7 | ||
|   | 835ee2a046 | ||
|   | d03dee8fda | ||
|   | 6e89598a51 | ||
|   | 0a2aa6f734 | ||
|   | 2e7836eec3 | ||
|   | 31bdda8bf8 | ||
|   | 2fc93fa819 | ||
|   | 3c5a939b16 | ||
|   | 0f40c4cd49 | ||
|   | 7ad184cb48 | ||
|   | 41a7d5d0a8 | ||
|   | 78c48e004c | ||
|   | 7106d61881 | ||
|   | 8ead4c4708 | ||
|   | 52ca7d3503 | ||
|   | 7d504da0a8 | ||
|   | c6dee2252b | ||
|   | 680c4a9ec4 | ||
|   | 3887d57fa4 | ||
|   | d733daed9d | ||
|   | de8651ab52 | ||
|   | 0ce641d10b | ||
|   | 316224b424 | ||
|   | cf9bbce284 | ||
|   | 6eae6c046e | ||
|   | 837a430228 | ||
|   | 71431f8fb5 | ||
|   | 0c7cd1f299 | ||
|   | 674682e919 | ||
|   | a5ca8115af | ||
|   | d4338fce42 | ||
|   | 14e8135f81 | ||
|   | e925f07505 | ||
|   | b792b51bd0 | ||
|   | fb64813b2a | ||
|   | b16e0e33ab | ||
|   | 818921e4a2 | ||
|   | 6c437459ca | ||
|   | b276901874 | ||
|   | 85b92f46f5 | ||
|   | 237b8b5ede | ||
|   | 438d008c34 | ||
|   | 53a3de1ebc | ||
|   | 2d35747e75 | ||
|   | 71feebea6d | ||
|   | c8c75e7a70 | ||
|   | 7b2263e9a5 | ||
|   | 9cd216bbba | ||
|   | e032ff4485 | ||
|   | fbe9ca5dd9 | ||
|   | 4533bb6dd7 | ||
|   | 3320c03603 | ||
|   | bc12b598ce | ||
|   | a34f679c43 | 
| @@ -1,4 +1,10 @@ | |||||||
| /src/assets | /src/assets | ||||||
| /build | /build | ||||||
| /node_modules | /node_modules | ||||||
|  | /dist | ||||||
|  | /icons | ||||||
|  | helm | ||||||
|  | docker-entrypoint.d | ||||||
|  | .dockerignore | ||||||
|  | DockerFile | ||||||
| .github | .github | ||||||
|   | |||||||
							
								
								
									
										94
									
								
								.eslintrc
									
									
									
									
									
								
							
							
						
						| @@ -1,22 +1,80 @@ | |||||||
| { | { | ||||||
|   "extends": ["airbnb", "prettier"], |  | ||||||
|   "plugins": ["prettier"], |  | ||||||
|   "env": { |   "env": { | ||||||
|       "browser": true, |     "browser": true, | ||||||
|       "jest": true |     "es2021": 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": { |   "rules": { | ||||||
|     "max-len": ["error", {"code": 150}], |     "import/extensions": [ | ||||||
|     "prefer-promise-reject-errors": ["off"], |       "error", | ||||||
|     "react/jsx-filename-extension": ["off"], |       "ignorePackages", | ||||||
|     "react/prop-types": ["warn"], |       { | ||||||
|     "no-return-assign": ["off"], |         "js": "never", | ||||||
|     "react/jsx-props-no-spreading": ["off"], |         "jsx": "never", | ||||||
|     "react/destructuring-assignment": ["off"], |         "ts": "never", | ||||||
|  |         "tsx": "never" | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "@typescript-eslint/naming-convention": [ | ||||||
|  |       "error", | ||||||
|  |       { | ||||||
|  |         "selector": "function", | ||||||
|  |         "format": ["PascalCase", "camelCase"], | ||||||
|  |         "leadingUnderscore": "allowSingleOrDouble" | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|     "no-restricted-syntax": ["error", "ForInStatement", "LabeledStatement", "WithStatement"], |     "no-restricted-syntax": ["error", "ForInStatement", "LabeledStatement", "WithStatement"], | ||||||
|     "react/jsx-one-expression-per-line": "off", |     "react/function-component-definition": [2, { "namedComponents": "arrow-function" }], | ||||||
|     "react/jsx-wrap-multilines": "off", |     "import/order": [ | ||||||
|     "react/jsx-curly-newline": "off" |       "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"], | ||||||
|  |     "react/prop-types": ["warn"], | ||||||
|  |     "react/require-default-props": "off", | ||||||
|  |     "react/jsx-props-no-spreading": ["off"], | ||||||
|  |     "react/jsx-curly-newline": "off", | ||||||
|  |     "no-underscore-dangle": "off" | ||||||
|   }, |   }, | ||||||
|   "settings": { |   "settings": { | ||||||
|     "import/resolver": { |     "import/resolver": { | ||||||
| @@ -24,11 +82,5 @@ | |||||||
|         "paths": ["src"] |         "paths": ["src"] | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   }, |   } | ||||||
|     "parser": "babel-eslint", |  | ||||||
|     "parserOptions": { |  | ||||||
|       "sourceType": "module", |  | ||||||
|       "allowImportExportEverywhere": false, |  | ||||||
|       "codeFrame": false |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -20,13 +20,13 @@ defaults: | |||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   docker: |   docker: | ||||||
|     runs-on: ubuntu-20.04 |     runs-on: ubuntu-latest | ||||||
|     env: |     env: | ||||||
|       DOCKER_REGISTRY_URL: tip-tip-wlan-cloud-ucentral.jfrog.io |       DOCKER_REGISTRY_URL: tip-tip-wlan-cloud-ucentral.jfrog.io | ||||||
|       DOCKER_REGISTRY_USERNAME: ucentral |       DOCKER_REGISTRY_USERNAME: ucentral | ||||||
|     steps: |     steps: | ||||||
|     - name: Checkout actions repo |     - name: Checkout actions repo | ||||||
|       uses: actions/checkout@v2 |       uses: actions/checkout@v3 | ||||||
|       with: |       with: | ||||||
|         repository: Telecominfraproject/.github |         repository: Telecominfraproject/.github | ||||||
|         path: github |         path: github | ||||||
| @@ -56,7 +56,7 @@ jobs: | |||||||
|       - docker |       - docker | ||||||
|     steps: |     steps: | ||||||
|     - name: Checkout actions repo |     - name: Checkout actions repo | ||||||
|       uses: actions/checkout@v2 |       uses: actions/checkout@v3 | ||||||
|       with: |       with: | ||||||
|         repository: Telecominfraproject/.github |         repository: Telecominfraproject/.github | ||||||
|         path: github |         path: github | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								.github/workflows/cleanup.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -17,4 +17,10 @@ jobs: | |||||||
|     steps: |     steps: | ||||||
|       - run: | |       - run: | | ||||||
|           export PR_BRANCH_TAG=$(echo ${GITHUB_HEAD_REF#refs/heads/} | tr '/' '-') |           export PR_BRANCH_TAG=$(echo ${GITHUB_HEAD_REF#refs/heads/} | tr '/' '-') | ||||||
|           curl -uucentral:${{ secrets.DOCKER_REGISTRY_PASSWORD }} -X DELETE "https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral/owgw-ui/$PR_BRANCH_TAG" |  | ||||||
|  |           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 | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								.github/workflows/enforce-jira-issue-key.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -11,7 +11,7 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout actions repo |       - name: Checkout actions repo | ||||||
|         uses: actions/checkout@v2 |         uses: actions/checkout@v3 | ||||||
|         with: |         with: | ||||||
|           repository: Telecominfraproject/.github |           repository: Telecominfraproject/.github | ||||||
|           path: github |           path: github | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -11,13 +11,13 @@ defaults: | |||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   helm-package: |   helm-package: | ||||||
|     runs-on: ubuntu-20.04 |     runs-on: ubuntu-latest | ||||||
|     env: |     env: | ||||||
|       HELM_REPO_URL: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/ |       HELM_REPO_URL: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/ | ||||||
|       HELM_REPO_USERNAME: ucentral |       HELM_REPO_USERNAME: ucentral | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout uCentral assembly chart repo |       - name: Checkout uCentral assembly chart repo | ||||||
|         uses: actions/checkout@v2 |         uses: actions/checkout@v3 | ||||||
|         with: |         with: | ||||||
|           path: wlan-cloud-ucentralgw-ui |           path: wlan-cloud-ucentralgw-ui | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,9 +1,8 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| # dependencies | # dependencies | ||||||
| /node_modules | /node_modules | ||||||
| /.pnp | /.pnp | ||||||
| .pnp.js | .pnp.js | ||||||
|  | /dev-dist | ||||||
|  |  | ||||||
| # testing | # testing | ||||||
| /coverage | /coverage | ||||||
| @@ -19,5 +18,4 @@ | |||||||
| .env.production.local | .env.production.local | ||||||
|  |  | ||||||
| npm-debug.log* | npm-debug.log* | ||||||
| yarn-debug.log* | .vscode/settings.json | ||||||
| yarn-error.log* |  | ||||||
|   | |||||||
| @@ -1,4 +1,6 @@ | |||||||
| /src/assets | /src/assets | ||||||
| build | build | ||||||
|  | dist | ||||||
| node_modules | node_modules | ||||||
| .github | .github | ||||||
|  | /helm | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								.prettierrc
									
									
									
									
									
								
							
							
						
						| @@ -1,7 +1,7 @@ | |||||||
| {  | { | ||||||
|     "printWidth": 100, |   "printWidth": 120, | ||||||
|     "trailingComma": "all", |   "trailingComma": "all", | ||||||
|     "tabWidth": 2,  |   "tabWidth": 2, | ||||||
|     "semi": true,  |   "semi": true, | ||||||
|     "singleQuote": true |   "singleQuote": true | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						| @@ -1,6 +1,8 @@ | |||||||
| FROM node:14-alpine3.11 AS build | FROM node:18.7.0-alpine3.15 AS build | ||||||
|  |  | ||||||
| COPY package.json package-lock.json / | WORKDIR /app | ||||||
|  |  | ||||||
|  | COPY package.json package-lock.json /app/ | ||||||
|  |  | ||||||
| RUN npm install | RUN npm install | ||||||
|  |  | ||||||
| @@ -8,8 +10,8 @@ COPY . . | |||||||
|  |  | ||||||
| RUN npm run build | RUN npm run build | ||||||
|  |  | ||||||
| FROM nginx:1.20.1-alpine AS runtime | FROM nginx:1.22.0-alpine AS runtime | ||||||
|  |  | ||||||
| COPY --from=build /build/ /usr/share/nginx/html/ | COPY --from=build /app/build/ /usr/share/nginx/html/ | ||||||
|  |  | ||||||
| COPY --from=build docker-entrypoint.d/40-generate-config.sh /docker-entrypoint.d/40-generate-config.sh | COPY --from=build /app/docker-entrypoint.d/40-generate-config.sh /docker-entrypoint.d/40-generate-config.sh | ||||||
|   | |||||||
							
								
								
									
										27
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| @@ -1,6 +1,7 @@ | |||||||
| # uCentralGW UI | # uCentralGW UI | ||||||
|  |  | ||||||
| ## What is this? | ## 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, | 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). | you either need to run it on your machine for [development](#development) or build it for [production](#production). | ||||||
|  |  | ||||||
| @@ -9,40 +10,34 @@ NOTE: This UI will be evolving as micro services are added to the uCentral progr | |||||||
| ## Running the solution | ## Running the solution | ||||||
|  |  | ||||||
| ### Development | ### Development | ||||||
|  |  | ||||||
| You need to run these commands in the root folder of the project and also have npm installed on your machine. | 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 | git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui | ||||||
| cd wlan-cloud-ucentralgw-ui | cd wlan-cloud-ucentralgw-ui | ||||||
| npm install | npm install | ||||||
| npm start | npm run dev | ||||||
| ``` |  | ||||||
|  |  | ||||||
| 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 | ### Production | ||||||
|  |  | ||||||
| You need to run this in the root folder of the project and also have npm installed on your machine. | 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 | git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui | ||||||
| cd wlan-cloud-ucentralgw-ui | cd wlan-cloud-ucentralgw-ui | ||||||
| npm install | npm install | ||||||
| npm run build | npm run build | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| Once the build is done, you can move the `build` folder on your server. | Once the build is done, you can move the `build` folder on your server. | ||||||
|  |  | ||||||
| ### Configuration | ### 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.  |  | ||||||
|  |  | ||||||
| Here are the current default values:  | 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 |  | ||||||
| } |  | ||||||
| ``` | ``` | ||||||
|   | |||||||
| @@ -1,25 +0,0 @@ | |||||||
| { |  | ||||||
|   "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 |  | ||||||
|           } |  | ||||||
|         ] |  | ||||||
|       ] |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| 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'), |  | ||||||
| }; |  | ||||||
| @@ -1,79 +0,0 @@ | |||||||
| /* 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' }, |  | ||||||
|     ], |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| @@ -1,54 +0,0 @@ | |||||||
| /* 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()], |  | ||||||
| }); |  | ||||||
| @@ -1,86 +0,0 @@ | |||||||
| /* 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,6 +1,32 @@ | |||||||
| #!/bin/ash | #!/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}" |  | ||||||
|  |  | ||||||
| echo '{"DEFAULT_UCENTRALSEC_URL": "'$DEFAULT_UCENTRALSEC_URL'","ALLOW_UCENTRALSEC_CHANGE": '$ALLOW_UCENTRALSEC_CHANGE'}' > /usr/share/nginx/html/config.json | 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 | ||||||
|   | |||||||
| @@ -17,7 +17,9 @@ metadata: | |||||||
|   {{- end }} |   {{- end }} | ||||||
|  |  | ||||||
| spec: | spec: | ||||||
|  | {{- if $ingressValue.className }} | ||||||
|  |   ingressClassName: {{ $ingressValue.className }} | ||||||
|  | {{- end }} | ||||||
| {{- if $ingressValue.tls }} | {{- if $ingressValue.tls }} | ||||||
|   tls: |   tls: | ||||||
|   {{- range $ingressValue.tls }} |   {{- range $ingressValue.tls }} | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ fullnameOverride: "" | |||||||
| images: | images: | ||||||
|   owgwui: |   owgwui: | ||||||
|     repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owgw-ui |     repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owgw-ui | ||||||
|     tag: main |     tag: v4.0.0 | ||||||
|     pullPolicy: Always |     pullPolicy: Always | ||||||
|  |  | ||||||
| services: | services: | ||||||
| @@ -75,5 +75,4 @@ podAnnotations: {} | |||||||
|  |  | ||||||
| # Application | # Application | ||||||
| public_env_variables: | public_env_variables: | ||||||
|   DEFAULT_UCENTRALSEC_URL: https://ucentral.dpaas.arilia.com:16001 |   REACT_APP_UCENTRALSEC_URL: https://ucentral.dpaas.arilia.com:16001 | ||||||
|   ALLOW_UCENTRALSEC_CHANGE: false |  | ||||||
|   | |||||||
							
								
								
									
										21
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,21 @@ | |||||||
|  | <!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> | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| { |  | ||||||
|   "compilerOptions": { |  | ||||||
|     "baseUrl": "src", |  | ||||||
|     "paths": { |  | ||||||
|       "*": ["*"] |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   "include": ["src"] |  | ||||||
| } |  | ||||||
							
								
								
									
										29158
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
							
								
								
									
										180
									
								
								package.json
									
									
									
									
									
								
							
							
						
						| @@ -1,101 +1,101 @@ | |||||||
| { | { | ||||||
|   "name": "ucentral-client", |   "name": "ucentral-client", | ||||||
|   "version": "2.7.0", |   "version": "4.0.0", | ||||||
|   "dependencies": { |   "description": "", | ||||||
|     "@coreui/coreui": "^3.4.0", |   "private": true, | ||||||
|     "@coreui/icons": "^2.0.1", |   "main": "index.tsx", | ||||||
|     "@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", |  | ||||||
|     "dagre": "^0.8.5", |  | ||||||
|     "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-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.60", |  | ||||||
|     "uuid": "^8.3.2" |  | ||||||
|   }, |  | ||||||
|   "main": "index.js", |  | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "start": "webpack serve --config config/webpack.dev.js", |     "dev": "vite", | ||||||
|     "build": "webpack --config config/webpack.prod.js", |     "build": "vite build", | ||||||
|     "format": "prettier --write 'src/**/*.js'", |     "format": "prettier --write \"src/**/*x.{ts,tsx,js,jsx}\"", | ||||||
|     "eslint-fix": "eslint --fix 'src/**/*.js'" |     "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" | ||||||
|   }, |   }, | ||||||
|   "eslintConfig": { |   "author": "", | ||||||
|     "extends": "react-app" |   "license": "ISC", | ||||||
|   }, |   "dependencies": { | ||||||
|   "husky": { |     "@chakra-ui/anatomy": "^2.1.1", | ||||||
|     "hooks": { |     "@chakra-ui/icons": "^2.0.18", | ||||||
|       "pre-commit": "lint-staged" |     "@chakra-ui/react": "^2.3.6", | ||||||
|     } |     "@chakra-ui/styled-system": "^2.9.0", | ||||||
|   }, |     "@chakra-ui/theme-tools": "^2.0.12", | ||||||
|   "lint-staged": { |     "@chakra-ui/utils": "^2.0.14", | ||||||
|     "*.{js,jsx}": [ |     "@emotion/react": "^11.10.6", | ||||||
|       "eslint", |     "@emotion/styled": "^11.10.6", | ||||||
|       "prettier --write" |     "@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", | ||||||
|  |     "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", | ||||||
|  |     "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" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@babel/core": "^7.14.6", |     "@types/google.maps": "^3.52.5", | ||||||
|     "@babel/plugin-proposal-class-properties": "^7.14.5", |     "@types/node": "^18.15.11", | ||||||
|     "@babel/plugin-transform-runtime": "^7.14.5", |     "@types/react": "^18.0.37", | ||||||
|     "@babel/polyfill": "^7.12.1", |     "@types/react-csv": "^1.1.3", | ||||||
|     "@babel/preset-env": "^7.14.7", |     "@types/react-datepicker": "4.10.0", | ||||||
|     "@babel/preset-react": "^7.14.5", |     "@types/react-dom": "^18.0.11", | ||||||
|     "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", |     "@types/react-table": "^7.7.14", | ||||||
|     "@svgr/webpack": "^5.5.0", |     "@types/react-virtualized-auto-sizer": "^1.0.1", | ||||||
|     "autoprefixer": "^10.2.6", |     "@types/react-window": "^1.8.5", | ||||||
|     "babel-eslint": "^10.1.0", |     "@types/uuid": "^9.0.1", | ||||||
|     "babel-loader": "^8.2.2", |     "@vitejs/plugin-react": "^3.1.0", | ||||||
|     "clean-webpack-plugin": "^3.0.0", |     "eslint": "8.38.0", | ||||||
|     "compression-webpack-plugin": "^8.0.1", |     "eslint-config-airbnb": "^19.0.4", | ||||||
|     "copy-webpack-plugin": "^7.0.0", |     "eslint-config-airbnb-typescript": "^17.0.0", | ||||||
|     "css-loader": "^5.2.6", |     "eslint-config-airbnb-typescript-prettier": "^5.0.0", | ||||||
|     "css-minimizer-webpack-plugin": "^2.0.0", |     "eslint-config-prettier": "^8.8.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-import-resolver-alias": "^1.1.2", | ||||||
|     "eslint-loader": "^4.0.2", |  | ||||||
|     "eslint-plugin-babel": "^5.3.1", |     "eslint-plugin-babel": "^5.3.1", | ||||||
|     "eslint-plugin-import": "^2.23.4", |     "eslint-plugin-import": "^2.27.5", | ||||||
|     "eslint-plugin-prettier": "^3.4.0", |     "eslint-plugin-jsx-a11y": "^6.7.1", | ||||||
|     "eslint-plugin-react": "^7.24.0", |     "eslint-plugin-no-inline-styles": "^1.0.5", | ||||||
|     "eslint-plugin-react-hooks": "^4.2.0", |     "eslint-plugin-prettier": "^4.2.1", | ||||||
|     "html-webpack-plugin": "^5.3.2", |     "eslint-plugin-react": "^7.32.2", | ||||||
|     "husky": "^4.3.8", |     "eslint-plugin-react-hooks": "^4.6.0", | ||||||
|     "lint-staged": "^11.0.0", |     "lint-staged": "^13.2.1", | ||||||
|     "mini-css-extract-plugin": "^1.6.1", |     "prettier": "^2.8.7", | ||||||
|     "path": "^0.12.7", |     "vite-plugin-pwa": "^0.14.7", | ||||||
|     "prettier": "^2.3.2", |     "vite-plugin-svgr": "^4.2.0", | ||||||
|     "react-refresh": "^0.9.0", |     "vite-tsconfig-paths": "^4.2.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": { |   "browserslist": { | ||||||
|     "production": [ |     "production": [ | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								public/android-chrome-192x192.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 12 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/android-chrome-384x384.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 29 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/android-chrome-512x512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 36 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/apple-touch-icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 11 KiB | 
							
								
								
									
										9
									
								
								public/browserconfig.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,9 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <browserconfig> | ||||||
|  |     <msapplication> | ||||||
|  |         <tile> | ||||||
|  |             <square150x150logo src="/mstile-150x150.png"/> | ||||||
|  |             <TileColor>#414141</TileColor> | ||||||
|  |         </tile> | ||||||
|  |     </msapplication> | ||||||
|  | </browserconfig> | ||||||
| @@ -1,4 +0,0 @@ | |||||||
| { |  | ||||||
|   "DEFAULT_UCENTRALSEC_URL": "https://ucentral.dpaas.arilia.com:16001", |  | ||||||
|   "ALLOW_UCENTRALSEC_CHANGE": false |  | ||||||
| } |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								public/devices/asterfusion_CX204Y-24GT-M-SWP4.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 294 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/asterfusion_CX204Y-48GT-M-SWP4.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 394 KiB | 
| Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cig_wf186h.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 141 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cig_wf186w.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 138 KiB | 
| Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cig_wf188n-ca-ath12.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 245 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cig_wf188n-ca.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 245 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cig_wf188n-us.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 245 KiB | 
| Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB | 
| Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB | 
| Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cig_wf196-ca-ath12.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 239 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cig_wf196-ca.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 239 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cig_wf196-us.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 239 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cig_wf196.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 32 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cig_wf610d.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 100 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cig_wf660a.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 100 KiB | 
| Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 218 KiB | 
| Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 158 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cybertan_eww631-a1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 123 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cybertan_eww631-b1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 79 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cybertan_skf224-c1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 31 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/cybertan_skf424-c1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 31 KiB | 
| Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 140 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_eap101.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 140 KiB | 
| Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 121 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_eap102.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 121 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_eap104.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 129 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_eap104_ath12.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 129 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_eap111.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 286 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_ecs2100-10p.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 502 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_ecs2100-10t.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 637 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_ecs2100-28p.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 324 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_ecs2100-28pp.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 313 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_ecs2100-28t.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 314 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_ecs2100-52t.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 283 KiB | 
| Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_ecs4125-10p.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 374 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_ecs4125.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 33 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_ecs4150-28t.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 267 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_ecs4150-58p.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 331 KiB | 
| Before Width: | Height: | Size: 192 KiB After Width: | Height: | Size: 192 KiB | 
| Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 197 KiB | 
| Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_oap101-6e.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 194 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_oap101.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 194 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_oap101e-6e.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 133 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_oap101e.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 133 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/edgecore_oap102.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 194 KiB | 
| Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB | 
| Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB | 
| Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/generic_ap.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 24 KiB | 
| Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB | 
| Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/hfcl_ion4x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.6 MiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/hfcl_ion4x_2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 117 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/hfcl_ion4x_w.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 218 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/hfcl_ion4xe.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 421 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/hfcl_ion4xi.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 817 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/hfcl_ion4xi_HMR.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 879 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/hfcl_ion4xi_w.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 664 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/hfcl_ion4xi_wp.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 304 KiB | 
| Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB | 
| Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB | 
| Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 89 KiB | 
| Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 89 KiB | 
| Before Width: | Height: | Size: 204 KiB After Width: | Height: | Size: 204 KiB | 
| Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 159 KiB | 
| Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 159 KiB |