Compare commits
6 Commits
v4.0.0-RC1
...
release/v2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a41f66f002 | ||
|
|
866036f323 | ||
|
|
6c4cbff1a6 | ||
|
|
6298d4f29a | ||
|
|
8f0828a394 | ||
|
|
c4cfc76b2d |
@@ -1,10 +1,4 @@
|
|||||||
/src/assets
|
/src/assets
|
||||||
/build
|
/build
|
||||||
/node_modules
|
/node_modules
|
||||||
/dist
|
|
||||||
/icons
|
|
||||||
helm
|
|
||||||
docker-entrypoint.d
|
|
||||||
.dockerignore
|
|
||||||
DockerFile
|
|
||||||
.github
|
.github
|
||||||
|
|||||||
92
.eslintrc
@@ -1,80 +1,22 @@
|
|||||||
{
|
{
|
||||||
|
"extends": ["airbnb", "prettier"],
|
||||||
|
"plugins": ["prettier"],
|
||||||
"env": {
|
"env": {
|
||||||
"browser": true,
|
"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": {
|
"rules": {
|
||||||
"import/extensions": [
|
"max-len": ["error", {"code": 150}],
|
||||||
"error",
|
"prefer-promise-reject-errors": ["off"],
|
||||||
"ignorePackages",
|
"react/jsx-filename-extension": ["off"],
|
||||||
{
|
|
||||||
"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"],
|
|
||||||
"react/prop-types": ["warn"],
|
"react/prop-types": ["warn"],
|
||||||
"react/require-default-props": "off",
|
"no-return-assign": ["off"],
|
||||||
"react/jsx-props-no-spreading": ["off"],
|
"react/jsx-props-no-spreading": ["off"],
|
||||||
"react/jsx-curly-newline": "off",
|
"react/destructuring-assignment": ["off"],
|
||||||
"no-underscore-dangle": "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": {
|
"settings": {
|
||||||
"import/resolver": {
|
"import/resolver": {
|
||||||
@@ -82,5 +24,11 @@
|
|||||||
"paths": ["src"]
|
"paths": ["src"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"parser": "babel-eslint",
|
||||||
|
"parserOptions": {
|
||||||
|
"sourceType": "module",
|
||||||
|
"allowImportExportEverywhere": false,
|
||||||
|
"codeFrame": false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
80
.github/workflows/ci.yml
vendored
@@ -12,7 +12,6 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
- 'release/*'
|
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
@@ -20,53 +19,50 @@ defaults:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
docker:
|
docker:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-20.04
|
||||||
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
|
- uses: actions/checkout@v2
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
repository: Telecominfraproject/.github
|
|
||||||
path: github
|
|
||||||
|
|
||||||
- name: Build and push Docker image
|
- name: Build Docker image
|
||||||
uses: ./github/composite-actions/docker-image-build
|
run: docker build -t owgw-ui:${{ github.sha }} .
|
||||||
with:
|
|
||||||
image_name: owgw-ui
|
|
||||||
registry: tip-tip-wlan-cloud-ucentral.jfrog.io
|
|
||||||
registry_user: ucentral
|
|
||||||
registry_password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Notify on failure via Slack
|
- name: Tag Docker image
|
||||||
if: failure() && github.ref == 'refs/heads/main'
|
run: |
|
||||||
uses: rtCamp/action-slack-notify@v2
|
TAGS="${{ github.sha }}"
|
||||||
env:
|
|
||||||
SLACK_USERNAME: GitHub Actions failure notifier
|
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
|
|
||||||
SLACK_COLOR: "${{ job.status }}"
|
|
||||||
SLACK_ICON: https://raw.githubusercontent.com/quintessence/slack-icons/master/images/github-logo-slack-icon.png
|
|
||||||
SLACK_TITLE: Docker build failed for OWGW-UI service
|
|
||||||
|
|
||||||
trigger-deploy-to-dev:
|
if [[ ${GITHUB_REF} == "refs/heads/"* ]]
|
||||||
runs-on: ubuntu-latest
|
then
|
||||||
if: github.ref == 'refs/heads/main'
|
CURRENT_TAG=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '-')
|
||||||
needs:
|
TAGS="$TAGS $CURRENT_TAG"
|
||||||
- docker
|
else
|
||||||
steps:
|
if [[ ${GITHUB_REF} == "refs/tags/"* ]]
|
||||||
- name: Checkout actions repo
|
then
|
||||||
uses: actions/checkout@v3
|
CURRENT_TAG=$(echo ${GITHUB_REF#refs/tags/} | tr '/' '-')
|
||||||
with:
|
TAGS="$TAGS $CURRENT_TAG"
|
||||||
repository: Telecominfraproject/.github
|
else # PR build
|
||||||
path: github
|
CURRENT_TAG=$(echo ${GITHUB_HEAD_REF#refs/heads/} | tr '/' '-')
|
||||||
|
TAGS="$TAGS $CURRENT_TAG"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Trigger deployment of the latest version to dev instance and wait for result
|
echo "Result tags: $TAGS"
|
||||||
uses: ./github/composite-actions/trigger-workflow-and-wait
|
|
||||||
|
for tag in $TAGS; do
|
||||||
|
docker tag owgw-ui:${{ github.sha }} ${{ env.DOCKER_REGISTRY_URL }}/owgw-ui:$tag
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Log into Docker registry
|
||||||
|
if: startsWith(github.ref, 'refs/tags/') || startsWith(github.ref, 'refs/pull/') || github.ref == 'refs/heads/main'
|
||||||
|
uses: docker/login-action@v1
|
||||||
with:
|
with:
|
||||||
owner: Telecominfraproject
|
registry: ${{ env.DOCKER_REGISTRY_URL }}
|
||||||
repo: wlan-testing
|
username: ${{ env.DOCKER_REGISTRY_USERNAME }}
|
||||||
workflow: ucentralgw-dev-deployment.yaml
|
password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
|
||||||
token: ${{ secrets.WLAN_TESTING_PAT }}
|
|
||||||
ref: master
|
- name: Push Docker images
|
||||||
inputs: '{"force_latest": "true"}'
|
if: startsWith(github.ref, 'refs/tags/') || startsWith(github.ref, 'refs/pull/') || github.ref == 'refs/heads/main'
|
||||||
|
run: |
|
||||||
|
docker images | grep ${{ env.DOCKER_REGISTRY_URL }}/owgw-ui | awk -F ' ' '{print $1":"$2}' | xargs -I {} docker push {}
|
||||||
|
|||||||
9
.github/workflows/cleanup.yml
vendored
@@ -4,7 +4,6 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
- 'release/*'
|
|
||||||
types: [ closed ]
|
types: [ closed ]
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
@@ -17,10 +16,4 @@ 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
|
|
||||||
|
|||||||
24
.github/workflows/enforce-jira-issue-key.yml
vendored
@@ -1,24 +0,0 @@
|
|||||||
name: Ensure Jira issue is linked
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [opened, edited, reopened, synchronize]
|
|
||||||
branches:
|
|
||||||
- 'release/*'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check_for_issue_key:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout actions repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
repository: Telecominfraproject/.github
|
|
||||||
path: github
|
|
||||||
|
|
||||||
- name: Run JIRA check
|
|
||||||
uses: ./github/composite-actions/enforce-jira-issue-key
|
|
||||||
with:
|
|
||||||
jira_base_url: ${{ secrets.TIP_JIRA_URL }}
|
|
||||||
jira_user_email: ${{ secrets.TIP_JIRA_USER_EMAIL }}
|
|
||||||
jira_api_token: ${{ secrets.TIP_JIRA_API_TOKEN }}
|
|
||||||
46
.github/workflows/release.yml
vendored
@@ -1,46 +0,0 @@
|
|||||||
name: Release chart package
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
helm-package:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
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
|
|
||||||
with:
|
|
||||||
path: wlan-cloud-ucentralgw-ui
|
|
||||||
|
|
||||||
- name: Build package
|
|
||||||
working-directory: wlan-cloud-ucentralgw-ui/helm
|
|
||||||
run: |
|
|
||||||
helm plugin install https://github.com/aslafy-z/helm-git --version 0.10.0
|
|
||||||
helm repo add bitnami https://charts.bitnami.com/bitnami
|
|
||||||
helm repo update
|
|
||||||
helm dependency update
|
|
||||||
mkdir dist
|
|
||||||
helm package . -d dist
|
|
||||||
|
|
||||||
- name: Generate GitHub release body
|
|
||||||
working-directory: wlan-cloud-ucentralgw-ui/helm
|
|
||||||
run: |
|
|
||||||
pip3 install yq -q
|
|
||||||
echo "Docker image - tip-tip-wlan-cloud-ucentral.jfrog.io/owgw-ui:$GITHUB_REF_NAME" > release.txt
|
|
||||||
echo "Helm charted may be attached to this release" >> release.txt
|
|
||||||
echo "Deployment artifacts may be found in https://github.com/Telecominfraproject/wlan-cloud-ucentral-deploy/tree/$GITHUB_REF_NAME" >> release.txt
|
|
||||||
|
|
||||||
- name: Create GitHub release
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
with:
|
|
||||||
body_path: wlan-cloud-ucentralgw-ui/helm/release.txt
|
|
||||||
files: wlan-cloud-ucentralgw-ui/helm/dist/*
|
|
||||||
6
.gitignore
vendored
@@ -1,8 +1,9 @@
|
|||||||
|
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
/node_modules
|
/node_modules
|
||||||
/.pnp
|
/.pnp
|
||||||
.pnp.js
|
.pnp.js
|
||||||
/dev-dist
|
|
||||||
|
|
||||||
# testing
|
# testing
|
||||||
/coverage
|
/coverage
|
||||||
@@ -18,4 +19,5 @@
|
|||||||
.env.production.local
|
.env.production.local
|
||||||
|
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
.vscode/settings.json
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/src/assets
|
/src/assets
|
||||||
build
|
build
|
||||||
dist
|
|
||||||
node_modules
|
node_modules
|
||||||
.github
|
.github
|
||||||
/helm
|
|
||||||
|
|||||||
14
.prettierrc
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"printWidth": 120,
|
"printWidth": 100,
|
||||||
"trailingComma": "all",
|
"trailingComma": "all",
|
||||||
"tabWidth": 2,
|
"tabWidth": 2,
|
||||||
"semi": true,
|
"semi": true,
|
||||||
"singleQuote": true
|
"singleQuote": 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 /
|
||||||
|
|
||||||
COPY package.json package-lock.json /app/
|
|
||||||
|
|
||||||
RUN npm install
|
RUN npm install
|
||||||
|
|
||||||
@@ -10,8 +8,8 @@ COPY . .
|
|||||||
|
|
||||||
RUN npm run build
|
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
|
||||||
|
|||||||
27
README.md
@@ -1,7 +1,6 @@
|
|||||||
# 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).
|
||||||
|
|
||||||
@@ -10,34 +9,40 @@ 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 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
|
### 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.
|
||||||
|
|
||||||
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:
|
||||||
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
|
#!/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
|
echo '{"DEFAULT_UCENTRALSEC_URL": "'$DEFAULT_UCENTRALSEC_URL'","ALLOW_UCENTRALSEC_CHANGE": '$ALLOW_UCENTRALSEC_CHANGE'}' > /usr/share/nginx/html/config.json
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ metadata:
|
|||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
spec:
|
spec:
|
||||||
replicas: {{ .Values.replicaCount }}
|
replicas: {{ .Values.replicaCount }}
|
||||||
revisionHistoryLimit: {{ .Values.revisionHistoryLimit }}
|
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubernetes.io/name: {{ include "owgwui.name" . }}
|
app.kubernetes.io/name: {{ include "owgwui.name" . }}
|
||||||
|
|||||||
@@ -17,9 +17,7 @@ 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 }}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
# System
|
# System
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
revisionHistoryLimit: 2
|
|
||||||
|
|
||||||
nameOverride: ""
|
nameOverride: ""
|
||||||
fullnameOverride: ""
|
fullnameOverride: ""
|
||||||
@@ -8,7 +7,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: v4.0.0-RC1
|
tag: v2.4.2
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|
||||||
services:
|
services:
|
||||||
@@ -75,4 +74,5 @@ podAnnotations: {}
|
|||||||
|
|
||||||
# Application
|
# Application
|
||||||
public_env_variables:
|
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"]
|
||||||
|
}
|
||||||
32183
package-lock.json
generated
178
package.json
@@ -1,101 +1,99 @@
|
|||||||
{
|
{
|
||||||
"name": "ucentral-client",
|
"name": "ucentral-client",
|
||||||
"version": "4.0.0",
|
"version": "2.4.3",
|
||||||
"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",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@chakra-ui/anatomy": "^2.1.1",
|
"@coreui/coreui": "^3.4.0",
|
||||||
"@chakra-ui/icons": "^2.0.18",
|
"@coreui/icons": "^2.0.1",
|
||||||
"@chakra-ui/react": "^2.3.6",
|
"@coreui/icons-react": "^1.1.0",
|
||||||
"@chakra-ui/styled-system": "^2.9.0",
|
"@coreui/react": "^3.4.6",
|
||||||
"@chakra-ui/theme-tools": "^2.0.12",
|
"@coreui/react-chartjs": "^1.1.0",
|
||||||
"@chakra-ui/utils": "^2.0.14",
|
"apexcharts": "^3.27.1",
|
||||||
"@emotion/react": "^11.10.6",
|
"axios": "^0.21.1",
|
||||||
"@emotion/styled": "^11.10.6",
|
"axios-retry": "^3.1.9",
|
||||||
"@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",
|
"dagre": "^0.8.5",
|
||||||
"fast-equals": "^5.0.1",
|
"i18next": "^20.3.1",
|
||||||
"formik": "^2.2.9",
|
"i18next-browser-languagedetector": "^6.1.2",
|
||||||
"framer-motion": "^10.12.2",
|
"i18next-http-backend": "^1.2.6",
|
||||||
"i18next": "^22.4.14",
|
"prop-types": "^15.7.2",
|
||||||
"i18next-browser-languagedetector": "^7.0.1",
|
"react": "^17.0.2",
|
||||||
"i18next-http-backend": "^2.2.0",
|
"react-apexcharts": "^1.3.9",
|
||||||
"libphonenumber-js": "^1.10.26",
|
"react-dom": "^17.0.2",
|
||||||
"prop-types": "^15.8.1",
|
"react-flow-renderer": "^9.6.6",
|
||||||
"react": "^18.2.0",
|
"react-i18next": "^11.11.0",
|
||||||
"react-app-polyfill": "^3.0.0",
|
"react-paginate": "^7.1.3",
|
||||||
"react-chartjs-2": "^4.3.1",
|
"react-router-dom": "^5.2.0",
|
||||||
"react-country-flag": "^3.1.0",
|
"react-select": "^4.3.1",
|
||||||
"react-csv": "^2.2.2",
|
"react-tooltip": "^4.2.21",
|
||||||
"react-datepicker": "^4.11.0",
|
"react-widgets": "^5.1.1",
|
||||||
"react-dom": "^18.2.0",
|
"sass": "^1.35.1",
|
||||||
"react-fast-compare": "^3.2.1",
|
"ucentral-libs": "^1.0.37",
|
||||||
"react-i18next": "^12.2.0",
|
"uuid": "^8.3.2"
|
||||||
"react-masonry-css": "^1.0.16",
|
},
|
||||||
"react-router-dom": "^6.10.0",
|
"main": "index.js",
|
||||||
"react-table": "^7.8.0",
|
"scripts": {
|
||||||
"react-virtualized-auto-sizer": "^1.0.15",
|
"start": "webpack serve --config config/webpack.dev.js",
|
||||||
"react-window": "^1.8.9",
|
"build": "webpack --config config/webpack.prod.js",
|
||||||
"source-map-explorer": "^2.5.3",
|
"format": "prettier --write 'src/**/*.js'",
|
||||||
"typescript": "^5.0.4",
|
"eslint-fix": "eslint --fix 'src/**/*.js'"
|
||||||
"uuid": "^9.0.0",
|
},
|
||||||
"vite": "^4.2.1",
|
"eslintConfig": {
|
||||||
"yup": "^0.32.11",
|
"extends": "react-app"
|
||||||
"zustand": "^4.3.7"
|
},
|
||||||
|
"husky": {
|
||||||
|
"hooks": {
|
||||||
|
"pre-commit": "lint-staged"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lint-staged": {
|
||||||
|
"*.{js,jsx}": [
|
||||||
|
"eslint",
|
||||||
|
"prettier --write"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/google.maps": "^3.52.5",
|
"@babel/core": "^7.14.6",
|
||||||
"@types/node": "^18.15.11",
|
"@babel/plugin-proposal-class-properties": "^7.14.5",
|
||||||
"@types/react": "^18.0.37",
|
"@babel/plugin-transform-runtime": "^7.14.5",
|
||||||
"@types/react-csv": "^1.1.3",
|
"@babel/polyfill": "^7.12.1",
|
||||||
"@types/react-datepicker": "4.10.0",
|
"@babel/preset-env": "^7.14.7",
|
||||||
"@types/react-dom": "^18.0.11",
|
"@babel/preset-react": "^7.14.5",
|
||||||
"@types/react-table": "^7.7.14",
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
|
||||||
"@types/react-virtualized-auto-sizer": "^1.0.1",
|
"@svgr/webpack": "^5.5.0",
|
||||||
"@types/react-window": "^1.8.5",
|
"autoprefixer": "^10.2.6",
|
||||||
"@types/uuid": "^9.0.1",
|
"babel-eslint": "^10.1.0",
|
||||||
"@vitejs/plugin-react": "^3.1.0",
|
"babel-loader": "^8.2.2",
|
||||||
"eslint": "8.38.0",
|
"clean-webpack-plugin": "^3.0.0",
|
||||||
"eslint-config-airbnb": "^19.0.4",
|
"compression-webpack-plugin": "^8.0.1",
|
||||||
"eslint-config-airbnb-typescript": "^17.0.0",
|
"copy-webpack-plugin": "^7.0.0",
|
||||||
"eslint-config-airbnb-typescript-prettier": "^5.0.0",
|
"css-loader": "^5.2.6",
|
||||||
"eslint-config-prettier": "^8.8.0",
|
"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-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.27.5",
|
"eslint-plugin-import": "^2.23.4",
|
||||||
"eslint-plugin-jsx-a11y": "^6.7.1",
|
"eslint-plugin-prettier": "^3.4.0",
|
||||||
"eslint-plugin-no-inline-styles": "^1.0.5",
|
"eslint-plugin-react": "^7.24.0",
|
||||||
"eslint-plugin-prettier": "^4.2.1",
|
"eslint-plugin-react-hooks": "^4.2.0",
|
||||||
"eslint-plugin-react": "^7.32.2",
|
"html-webpack-plugin": "^5.3.2",
|
||||||
"eslint-plugin-react-hooks": "^4.6.0",
|
"husky": "^4.3.8",
|
||||||
"lint-staged": "^13.2.1",
|
"lint-staged": "^11.0.0",
|
||||||
"prettier": "^2.8.7",
|
"mini-css-extract-plugin": "^1.6.1",
|
||||||
"vite-plugin-pwa": "^0.14.7",
|
"node-sass": "^5.0.0",
|
||||||
"vite-plugin-svgr": "^4.2.0",
|
"path": "^0.12.7",
|
||||||
"vite-tsconfig-paths": "^4.2.0"
|
"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": {
|
"browserslist": {
|
||||||
"production": [
|
"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: 104 KiB |
|
Before Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 245 KiB |
|
Before Width: | Height: | Size: 245 KiB |
|
Before Width: | Height: | Size: 245 KiB |
|
Before Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 75 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: 218 KiB |
|
Before Width: | Height: | Size: 158 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: 140 KiB |
|
Before Width: | Height: | Size: 121 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: 44 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: 192 KiB |
|
Before Width: | Height: | Size: 197 KiB |
|
Before Width: | Height: | Size: 50 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: 59 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 72 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: 34 KiB |
|
Before Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 204 KiB |
|
Before Width: | Height: | Size: 159 KiB |