From ce994eddb4a6a1ea3a7e295e20233bb353d0e0ec Mon Sep 17 00:00:00 2001 From: shuhaib s <95394061+shuhaib-aot@users.noreply.github.com> Date: Tue, 9 Apr 2024 09:30:04 +0530 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=9A=80=20Release=206.0.0=20(#173)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * navbar fixed and removed margin top from admin header * changed admin module version * Changed internationalization * changed typo of env * updated tenant wrong login * updated callback * Internationalization for delete modal. * Translation changes * Internationalization changes for enhancement * RBAC Check for unauthorized designers- Internationalization * helper services * updated roles creation function * updated edit role functionality * Prevent EDIT and DELETE of Default roles * added check for multi tenancy * Changed tenant checking method * added translation * added constants file * Internationalization changes for RBAC changes * package_lock_update * updated regex * updated regex for support forward slash * updated * Ui-enhancement changes * Internationalization changes for application RBAC (#48) * Translatio changes for application RBAC * Update resourceBundles.ts * version 5.2.1 1. added release branch into cd 2. changed footer version to 5.2.1 3. changed version * Added Inter naternationalization for Application ID in application page (#52) * Moved UserName to the right end of the navbar (epd change) (#51) * changed version to 5.3.0-alpha * updated style * date issues fixed for all browsers * fixed dmn internationalization * Added translations * Added template internationalization * accessibility changes * Added internationalization changes * fixed category internationalization in template * Space removed from text * Removed container class override and #main and reset the alignment * admin footer changed * contianer max size added for 1400 pixel * utc time zone changes to system time zone * Delete forms-flow-service/src/constants/constant.ts removed duplicate file * Added design-changes branch into cd for developing * Cursor-classes added * css converted into scss * updated translations * updated translation * added code * udated translations * new navbar design * class name changed to nav-item to nav-menu-item * added getMoment function to get moment instance * updated code fix * dropdown override removed * updated translations * Admin UI refresh 1. removed custom classes and used bootstrap classes 2. added main and base classes into admin from global css 3. moved .table td override style into bootstrapOverride scss file * added internationalization for missed keywords * new changes * cleanup * admin window cleanup * fixed navbar * font size and table margin update * Cance button changes * internsationalisation changes * user table changes * tenanty key fixed and footer fix * toast fix and navbar font size fix * removed full language name from navbar * temp version removed * Internationalisation updates * fixed active tab of form when select bundle and fixed margin of language select * updated chatbot translations * translation issue fixed * Margin fixes * button padding changed * Updated translations * translation changes (#95) * Bundle table changes * Updated internationalization for delete message change * Remove unused * pending changes in translation (#99) * pending changes in translation * updated * Bundle translation update (#102) * task-list translation changes (#101) * Updated task page translation * Bundling translation updates (#103) * Bundle translation update * Translation updates * Updated task page translation (#105) * Auto-logout issue (#104) * Keycloak token refresh issue * timer id * Update roles.tsx (#106) * search by bundle name internationalisation changed (#107) * search by bundle name internationalisation changed * updated * Tasks page translation update (#108) * filter and submission internationalisation updated (#109) * internationalisation change in draft search (#110) * transalation for premium feature * Pagination translation update (#112) * translation pending changes * version upgrade 5.3.0 (#113) * Update CHANGELOG.md (#115) * version changed to 5.3.1-alpha * accessility changes (#119) * accessility changes * task page contrast issue resolved * Updated translations in submission filter and taskpage (#121) * disabled default users for multitenant (#122) * accessbility fix in ee (#123) * accessbility fix in ee * translation updated in richtext * translation in task page * bootstrap upgrade changes (#124) * bootstrap upgrade changes * border bottom removed for the tables * changes for form page with new bootstrap (#125) * changes for form page with new bootstrap * opacity changed * Added translations for DMN button changes (#126) * bundle table-header color added (#129) * Bootstrap fixes in admin page (#128) * Bootstrap fixes in admin tab * style updates in admin part * bootstrap fix in formio-form classes (#127) * bootstrap fix in formio-form classes * unwanted style removed * pending changes (#120) * pending chnages * updated * data-testid added in navbar and admin (#130) * data-testid added in navbar and admin * data-testid updated * version changed to 6.0.0-alpha (#134) * btn link text decoration fixed (#135) * data-test id added in pending admin part (#131) * data-testid added in pending admin part * roles part updated * select option and modal data-testid updated * change in data-testid (btn to button) * missed datatestid added in admin part (#136) * Color Variables Added to Micro front-end. (#137) * removed default submit call of form * wizard style issue fixed (#139) * Added while label for integration module * Added deploy config * Fixed authorization and added iframes * Added Essential color variables for modeler file. (#141) * Fixed navbar collaps toggle on nav option select (#142) * added event key on nav link of integration * Fixed navbar responsive and dynamic height of navbar (#146) * fixed navbar responsive issue * temp fixed iframe height * fixed dynamic height * removed create new button * Removed un-necessory convertion to number of resources id * Resource Id convertion to string * Resolved Forms and Submission hightlight issue (#149) * Longer app name issue fixed (#151) * longer application name fix * longer app name issue fixed * unwanted class removed * favicon issue fixed (#153) * favicon issue fix * dependencies array added * Added internationalization Display authorized tasks based on user roles (#152) * fixed navbar responsive issue * Added internationalization for Display authorized tasks based on user roles * Admin Search and filter updates in Frontend. (#150) * fixed navbar favicon and app name issue * style change and tooltip added to app name (#156) * Added translations for task management * Translation update for candidate group label change * Added translation for FWF-3103 (#155) * internationalisation added for task page (#160) * Internationalization added for product fruit period notification and filter delete modal (#159) * Add Users to keyclaok from admin tab (#161) * added user functionality * added api access * added clear function * added translation files * Translation-fix in task page (#164) * page for premium subscription is added in integration (#165) * page for premium subscription is added in integration * updated * Added internationalization for task variable rework (#162) * pending translation fixes (#167) * Updated add user modal for multitenancy admin (#166) * Updated add user modal for multitenancy * css formatted * Error message updated * translations update fo integration (#169) * internationalisation for integration (#168) * internationalisation for integration * change in edit label * Update CHANGELOG.md * Update CHANGELOG.md * Validation error persisting issue fixed * 🚀 Ready to release 6.0.0 (#172) * Release/5.3.1 (#144) * Update VERSION * Navbar mobile view fix * Update package.json (#145) * Changes to add custom Keycloak relative path (#158) * version changed 6.0.0-alpha -> 6.0.0 --------- Co-authored-by: Sumesh Punakkal Kariyil * translation fix added * translation added --------- Co-authored-by: abhilash-aot Co-authored-by: abilpraju-aot Co-authored-by: Josephalexantony-aot Co-authored-by: Bonymol-aot Co-authored-by: AbijithS-aot Co-authored-by: Abil P Raju <83952803+abilpraju-aot@users.noreply.github.com> Co-authored-by: Alex Antony <83585487+Josephalexantony-aot@users.noreply.github.com> Co-authored-by: Bonymol Baby <88372115+Bonymol-aot@users.noreply.github.com> Co-authored-by: fahad-aot Co-authored-by: Abijith Sebastian <98075058+AbijithS-aot@users.noreply.github.com> Co-authored-by: Ajay krishna Co-authored-by: fahad-aot <99656326+fahad-aot@users.noreply.github.com> Co-authored-by: Ajay-aot <115780710+Ajay-aot@users.noreply.github.com> Co-authored-by: auslin-aot <99173163+auslin-aot@users.noreply.github.com> Co-authored-by: Sumesh Punakkal Kariyil --- .../workflows/forms-flow-integration-cd.yml | 55 + CHANGELOG.md | 15 + VERSION | 2 +- forms-flow-admin/package-lock.json | 532 +- forms-flow-admin/package.json | 3 +- .../src/components/dashboard/dashboard.tsx | 44 +- .../dashboard/insightDashboard.scss | 6 +- .../src/components/footer/footer.tsx | 4 +- .../src/components/roles/roles.scss | 9 +- .../src/components/roles/roles.tsx | 263 +- .../src/components/users/users.scss | 5 +- .../src/components/users/users.tsx | 246 +- forms-flow-admin/src/containers/head.tsx | 28 +- forms-flow-admin/src/endpoints/index.ts | 1 + forms-flow-admin/src/index.tsx | 2 +- forms-flow-admin/src/services/users/index.ts | 18 + forms-flow-integration/.eslintrc | 8 + forms-flow-integration/.prettierignore | 8 + forms-flow-integration/Dockerfile | 41 + forms-flow-integration/babel.config.json | 30 + forms-flow-integration/docker-compose.yaml | 9 + forms-flow-integration/jest.config.js | 12 + forms-flow-integration/nginx.conf | 63 + forms-flow-integration/package-lock.json | 24426 ++++++++++++++++ forms-flow-integration/package.json | 67 + .../src/components/ConnectedApps/index.tsx | 43 + .../src/components/Footer/footer.scss | 0 .../src/components/Footer/footer.tsx | 23 + .../src/components/Footer/index.ts | 3 + .../src/components/Library/index.tsx | 42 + .../src/components/Loading/Loading.tsx | 9 + .../src/components/Loading/SpinnerSVG.js | 51 + .../src/components/Loading/index.ts | 3 + .../components/PremiumSubscription/index.tsx | 78 + .../src/components/Recipes/index.tsx | 44 + forms-flow-integration/src/constants/index.ts | 32 + .../src/containers/Alert.tsx | 12 + .../src/containers/head.tsx | 48 + forms-flow-integration/src/declarations.d.ts | 43 + .../src/endpoints/config.ts | 10 + forms-flow-integration/src/endpoints/index.ts | 10 + .../src/formsflow-integration.tsx | 16 + forms-flow-integration/src/index.scss | 22 + forms-flow-integration/src/index.tsx | 172 + .../src/resourceBundles/i18n.js | 12 + .../src/root.component.test.tsx | 9 + forms-flow-integration/src/root.component.tsx | 13 + .../src/services/connectedApps/index.ts | 7 + .../src/services/integration/index.ts | 7 + .../src/services/library/index.ts | 6 + .../src/services/recipes/index.ts | 7 + forms-flow-integration/tsconfig.json | 10 + forms-flow-integration/webpack.config.js | 38 + forms-flow-nav/src/Navbar.css | 20 +- forms-flow-nav/src/Navbar.jsx | 251 +- forms-flow-nav/src/constants/constants.js | 6 + forms-flow-nav/src/endpoints/index.js | 3 +- .../src/services/integration/index.js | 4 + .../src/resourceBundles/bg/resourceBundles.ts | 72 +- .../src/resourceBundles/de/resourceBundles.ts | 72 +- .../src/resourceBundles/en/resourceBundles.ts | 74 +- .../src/resourceBundles/fr/resourceBundles.ts | 72 +- .../src/resourceBundles/pt/resourceBundles.ts | 72 +- .../src/resourceBundles/zh/resourceBundles.ts | 72 +- forms-flow-theme/src/baseStyle.scss | 3 +- .../src/components/custom-table.scss | 2 + forms-flow-theme/src/global.scss | 172 +- .../overrideClasses/bootstrapOverride.scss | 14 + .../formioComponentOverride.scss | 30 +- 69 files changed, 27170 insertions(+), 436 deletions(-) create mode 100644 .github/workflows/forms-flow-integration-cd.yml create mode 100644 forms-flow-integration/.eslintrc create mode 100644 forms-flow-integration/.prettierignore create mode 100644 forms-flow-integration/Dockerfile create mode 100644 forms-flow-integration/babel.config.json create mode 100644 forms-flow-integration/docker-compose.yaml create mode 100644 forms-flow-integration/jest.config.js create mode 100644 forms-flow-integration/nginx.conf create mode 100644 forms-flow-integration/package-lock.json create mode 100644 forms-flow-integration/package.json create mode 100644 forms-flow-integration/src/components/ConnectedApps/index.tsx create mode 100644 forms-flow-integration/src/components/Footer/footer.scss create mode 100644 forms-flow-integration/src/components/Footer/footer.tsx create mode 100644 forms-flow-integration/src/components/Footer/index.ts create mode 100644 forms-flow-integration/src/components/Library/index.tsx create mode 100644 forms-flow-integration/src/components/Loading/Loading.tsx create mode 100644 forms-flow-integration/src/components/Loading/SpinnerSVG.js create mode 100644 forms-flow-integration/src/components/Loading/index.ts create mode 100644 forms-flow-integration/src/components/PremiumSubscription/index.tsx create mode 100644 forms-flow-integration/src/components/Recipes/index.tsx create mode 100644 forms-flow-integration/src/constants/index.ts create mode 100644 forms-flow-integration/src/containers/Alert.tsx create mode 100644 forms-flow-integration/src/containers/head.tsx create mode 100644 forms-flow-integration/src/declarations.d.ts create mode 100644 forms-flow-integration/src/endpoints/config.ts create mode 100644 forms-flow-integration/src/endpoints/index.ts create mode 100644 forms-flow-integration/src/formsflow-integration.tsx create mode 100644 forms-flow-integration/src/index.scss create mode 100644 forms-flow-integration/src/index.tsx create mode 100644 forms-flow-integration/src/resourceBundles/i18n.js create mode 100644 forms-flow-integration/src/root.component.test.tsx create mode 100644 forms-flow-integration/src/root.component.tsx create mode 100644 forms-flow-integration/src/services/connectedApps/index.ts create mode 100644 forms-flow-integration/src/services/integration/index.ts create mode 100644 forms-flow-integration/src/services/library/index.ts create mode 100644 forms-flow-integration/src/services/recipes/index.ts create mode 100644 forms-flow-integration/tsconfig.json create mode 100644 forms-flow-integration/webpack.config.js create mode 100644 forms-flow-nav/src/services/integration/index.js diff --git a/.github/workflows/forms-flow-integration-cd.yml b/.github/workflows/forms-flow-integration-cd.yml new file mode 100644 index 000000000..92e8da83a --- /dev/null +++ b/.github/workflows/forms-flow-integration-cd.yml @@ -0,0 +1,55 @@ +name: forms-flow-integration-CD +on: + workflow_dispatch: + push: + branches: + - main + - develop + - release/* + paths: + - "forms-flow-integration/**" + - "VERSION" +defaults: + run: + shell: bash +jobs: + build: + name: Build and push artifacts to s3 + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '16.17.0' + - name: Set version + if: ${{ github.ref != 'refs/heads/main' }} + working-directory: . + run: | + VER=$(cat VERSION) + echo "VERSION=$VER" >> $GITHUB_ENV + + - name: Set version + if: ${{ github.ref == 'refs/heads/main' }} + working-directory: . + run: | + VER=$(cat VERSION) + VER=${VER/-alpha/''} + echo "VERSION=$VER" >> $GITHUB_ENV + + #TODO: force installing due to dependency conflict need to resolve the dependency + - run: npm ci --force + working-directory: ./forms-flow-integration + - run: npm run build:webpack + working-directory: ./forms-flow-integration + - uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ secrets.REGION }} + - run: npm ci + working-directory: ./scripts + - run: node index forms-flow-integration + env: + BUCKET: ${{ secrets.BUCKET}} + VERSION: ${{ env.VERSION }} + working-directory: ./scripts diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e32c36d7..17793d970 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,21 @@ Mark items as `Added`, `Changed`, `Fixed`, `Modified`, `Removed`, `Untested Features`, `Upcoming Features`, `Known Issues` +## 6.0.0 - 2024-04-05 + +`Added` + +**forms-flow-admin** +* Added incorporate a user across multiple tenants + +**forms-flow-inegration** +* Added new component for ipaas integration + +`Generic Changes` +* Fixed UI issues + + + ## 5.3.0 - 2023-11-24 `Added` diff --git a/VERSION b/VERSION index 67617da57..9773998bc 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v5.3.1 +v6.0.0 diff --git a/forms-flow-admin/package-lock.json b/forms-flow-admin/package-lock.json index 361c7a165..627b93a6d 100644 --- a/forms-flow-admin/package-lock.json +++ b/forms-flow-admin/package-lock.json @@ -1,12 +1,12 @@ { "name": "@formsflow/admin", - "version": "1.0.0", + "version": "6.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@formsflow/admin", - "version": "1.0.0", + "version": "6.0.0", "dependencies": { "@types/react": "^17.0.19", "@types/react-dom": "^17.0.9", @@ -18,6 +18,7 @@ "react-bootstrap-table2-paginator": "^2.1.2", "react-i18next": "^12.1.4", "react-router-dom": "5.1.2", + "react-select": "^5.8.0", "react-toastify": "^9.1.1", "single-spa": "^5.9.3", "single-spa-react": "^4.3.1" @@ -82,7 +83,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -336,7 +336,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -459,7 +458,6 @@ "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -468,7 +466,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -515,7 +512,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -1865,7 +1861,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -1890,6 +1885,128 @@ "node": ">=10.0.0" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", + "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -1937,6 +2054,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -3459,8 +3598,7 @@ "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/prettier": { "version": "2.7.2", @@ -3982,7 +4120,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -4311,6 +4448,35 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -4587,7 +4753,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -4637,7 +4802,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -4783,7 +4947,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -4791,8 +4954,7 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/colorette": { "version": "2.0.19", @@ -5021,8 +5183,7 @@ "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { "version": "0.5.0", @@ -5703,7 +5864,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -5840,7 +6000,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -6640,6 +6799,11 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -6955,8 +7119,7 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -7171,7 +7334,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -7192,7 +7354,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -7623,7 +7784,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7639,7 +7799,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -7770,8 +7929,7 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-bigint": { "version": "1.0.4", @@ -7829,7 +7987,6 @@ "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -10035,8 +10192,7 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -10163,8 +10319,7 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/loader-runner": { "version": "4.3.0", @@ -10314,6 +10469,11 @@ "node": ">= 4.0.0" } }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -10847,7 +11007,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -10859,7 +11018,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -10934,8 +11092,7 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -10947,7 +11104,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -11652,6 +11808,26 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-select": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz", + "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-toastify": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.1.tgz", @@ -11885,7 +12061,6 @@ "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -12710,11 +12885,15 @@ "webpack": "^5.0.0" } }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -12760,7 +12939,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -12962,7 +13140,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, "engines": { "node": ">=4" } @@ -13264,6 +13441,19 @@ "requires-port": "^1.0.0" } }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -14191,7 +14381,6 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, "engines": { "node": ">= 6" } @@ -14245,7 +14434,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "requires": { "@babel/highlight": "^7.18.6" } @@ -14433,7 +14621,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -14525,14 +14712,12 @@ "@babel/helper-string-parser": { "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { "version": "7.18.6", @@ -14567,7 +14752,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -15473,7 +15657,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", - "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -15492,6 +15675,111 @@ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true }, + "@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "requires": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "@emotion/react": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", + "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "requires": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, "@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -15526,6 +15814,28 @@ } } }, + "@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "requires": { + "@floating-ui/utils": "^0.2.1" + } + }, + "@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "requires": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, "@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -16762,8 +17072,7 @@ "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "@types/prettier": { "version": "2.7.2", @@ -17221,7 +17530,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -17465,6 +17773,30 @@ "@types/babel__traverse": "^7.0.6" } }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + } + } + }, "babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -17686,8 +18018,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camel-case": { "version": "4.1.2", @@ -17723,7 +18054,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -17827,7 +18157,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -17835,8 +18164,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "colorette": { "version": "2.0.19", @@ -18020,8 +18348,7 @@ "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "cookie": { "version": "0.5.0", @@ -18539,7 +18866,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -18654,8 +18980,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "escodegen": { "version": "2.0.0", @@ -19271,6 +19596,11 @@ "pkg-dir": "^4.1.0" } }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -19490,8 +19820,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { "version": "1.1.5", @@ -19646,7 +19975,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -19660,8 +19988,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "has-property-descriptors": { "version": "1.0.0", @@ -19988,7 +20315,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -19997,8 +20323,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" } } }, @@ -20095,8 +20420,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "is-bigint": { "version": "1.0.4", @@ -20136,7 +20460,6 @@ "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -21758,8 +22081,7 @@ "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema-traverse": { "version": "0.4.1", @@ -21859,8 +22181,7 @@ "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "loader-runner": { "version": "4.3.0", @@ -21985,6 +22306,11 @@ "fs-monkey": "^1.0.3" } }, + "memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -22388,7 +22714,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "requires": { "callsites": "^3.0.0" } @@ -22397,7 +22722,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -22456,8 +22780,7 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.7", @@ -22468,8 +22791,7 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "picocolors": { "version": "1.0.0", @@ -22988,6 +23310,22 @@ "tiny-warning": "^1.0.0" } }, + "react-select": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz", + "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==", + "requires": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + } + }, "react-toastify": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.1.tgz", @@ -23170,7 +23508,6 @@ "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -23791,11 +24128,15 @@ "dev": true, "requires": {} }, + "stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -23830,8 +24171,7 @@ "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "symbol-tree": { "version": "3.2.4", @@ -23976,8 +24316,7 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "to-regex-range": { "version": "5.0.1", @@ -24193,6 +24532,12 @@ "requires-port": "^1.0.0" } }, + "use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "requires": {} + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -24872,8 +25217,7 @@ "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yargs": { "version": "16.2.0", diff --git a/forms-flow-admin/package.json b/forms-flow-admin/package.json index 05595d532..67d7ab7ee 100644 --- a/forms-flow-admin/package.json +++ b/forms-flow-admin/package.json @@ -1,6 +1,6 @@ { "name": "@formsflow/admin", - "version": "5.3.1", + "version": "6.0.0", "scripts": { "start": "webpack serve", "start:standalone": "webpack serve --env standalone", @@ -62,6 +62,7 @@ "react-bootstrap-table2-paginator": "^2.1.2", "react-i18next": "^12.1.4", "react-router-dom": "5.1.2", + "react-select": "^5.8.0", "react-toastify": "^9.1.1", "single-spa": "^5.9.3", "single-spa-react": "^4.3.1" diff --git a/forms-flow-admin/src/components/dashboard/dashboard.tsx b/forms-flow-admin/src/components/dashboard/dashboard.tsx index f206a89d8..b02f78100 100644 --- a/forms-flow-admin/src/components/dashboard/dashboard.tsx +++ b/forms-flow-admin/src/components/dashboard/dashboard.tsx @@ -37,10 +37,10 @@ const customDropUp = ({ options, currSizePerPage, onSizePerPageChange }) => { }; export const InsightDashboard = React.memo((props: any) => { - const { dashboards, groups, authorizations, setCount,authReceived } = props; + const { dashboards, groups, authorizations, setCount, authReceived } = props; const isGroupUpdated = groups.length > 0; - const [authDashBoardList, setAuthDashboardList] = React.useState([]); + const [authDashBoardList, setAuthDashboardList] = React.useState([]); const [isAuthUpdated, setIsAuthUpdated] = React.useState(false); const { t } = useTranslation(); @@ -53,17 +53,17 @@ export const InsightDashboard = React.memo((props: any) => { const [err, setErr] = React.useState({}); const [isLoading, setIsLoading] = React.useState(true); - React.useEffect(()=>{ - if(props.error){ + React.useEffect(() => { + if (props.error) { setIsLoading(false); } - },[props.error]); + }, [props.error]); - React.useEffect(()=>{ - if(!props.loading){ + React.useEffect(() => { + if (!props.loading) { setIsLoading(false); } - },[props.loading]) + }, [props.loading]) function compare(a, b) { if (Number(a.resourceId) < Number(b.resourceId)) { @@ -77,9 +77,9 @@ export const InsightDashboard = React.memo((props: any) => { const updateAuthList = (authorizations) => { let newList = [...authorizations]; - let authIds = newList.map((item) => Number(item.resourceId)); + let authIds = newList.map((item) => item.resourceId); for (let item of dashboards?.results) { - if (!authIds.includes(item.id)) { + if (!authIds.includes(String(item.id))) { let obj = { resourceId: String(item.id), resourceDetails: { @@ -136,7 +136,7 @@ export const InsightDashboard = React.memo((props: any) => { setAuthDashboardList(updateAuthList(data)); setIsLoading(false); toast.success(t("Update success!")) - }, (err)=>{ + }, (err) => { setErr(err); toast.error(t("Update failed!")) }); @@ -158,7 +158,7 @@ export const InsightDashboard = React.memo((props: any) => { setAuthDashboardList(updateAuthList(data)); setIsLoading(false); toast.success(t("Update success!")) - }, (err)=>{ + }, (err) => { setErr(err); toast.error(t("Update failed!")) }); @@ -166,9 +166,8 @@ export const InsightDashboard = React.memo((props: any) => { setErr ); }; - const noData = () => ( -
+

{(t) => t(props.error || "No data Found")}

@@ -187,12 +186,15 @@ export const InsightDashboard = React.memo((props: any) => { return (
{cell?.map((label, i) => ( -
+
{label} removeDashboardAuth(rowData, label)} + data-testid={`dashboard-remove-auth-btn-${i}`} >
@@ -223,6 +225,7 @@ export const InsightDashboard = React.memo((props: any) => { className="role" key={key} onClick={() => addDashboardAuth(item)} + data-testid={`dashboard-remaining-group-${key}`} > {item.path}
@@ -243,8 +246,8 @@ export const InsightDashboard = React.memo((props: any) => { className="btn btn-primary" disabled={!isGroupUpdated} > - - {(t) => t("Add")} + + {(t) => t("Add")} ); @@ -279,7 +282,7 @@ export const InsightDashboard = React.memo((props: any) => { }; const customTotal = (from, to, size) => ( - + {(t) => t("Showing")} {from}{" "} {(t) => t("to")} {to}{" "} {(t) => t("of")} {size}{" "} @@ -309,12 +312,13 @@ export const InsightDashboard = React.memo((props: any) => { columns={columns} pagination={pagination} bordered={false} - wrapperClasses="table-container-admin mb-3" + wrapperClasses="table-container-admin mb-3 px-4" rowStyle={{ color: "#09174A", fontWeight: 600, }} noDataIndication={noData} + data-testid="admin-dashboard-table" /> ) : ( diff --git a/forms-flow-admin/src/components/dashboard/insightDashboard.scss b/forms-flow-admin/src/components/dashboard/insightDashboard.scss index 25c05ed95..5c820301a 100644 --- a/forms-flow-admin/src/components/dashboard/insightDashboard.scss +++ b/forms-flow-admin/src/components/dashboard/insightDashboard.scss @@ -18,4 +18,8 @@ .container-admin .react-bootstrap-table-pagination-list{ margin-top: 1rem; } - \ No newline at end of file + +.table-container-admin tbody { + overflow-y: auto; + height: 360px; +} \ No newline at end of file diff --git a/forms-flow-admin/src/components/footer/footer.tsx b/forms-flow-admin/src/components/footer/footer.tsx index 325f07cf0..3e6fa0eb5 100644 --- a/forms-flow-admin/src/components/footer/footer.tsx +++ b/forms-flow-admin/src/components/footer/footer.tsx @@ -6,10 +6,10 @@ import { Translation } from "react-i18next"; const version_org = packageInfo.version; const Footer = React.memo(() => { return ( -
+

-
+
{(t) => t("Powered by ")}{" "} formsflow.ai diff --git a/forms-flow-admin/src/components/roles/roles.scss b/forms-flow-admin/src/components/roles/roles.scss index d211abe8b..d52c63dc8 100644 --- a/forms-flow-admin/src/components/roles/roles.scss +++ b/forms-flow-admin/src/components/roles/roles.scss @@ -7,15 +7,17 @@ border-radius: 8px; overflow-y: scroll; max-height: 25rem; -} +} .table th{ color: #646464; - border: none; +} +.table th , +.table tr { + vertical-align: middle; } .search-role { - width: 33.625rem !important; margin-bottom: 1.75rem; margin-top: 1.875rem; display: flex; @@ -89,6 +91,7 @@ .react-bootstrap-table{ width: auto !important; } + .user-table-container{ overflow-y: scroll; max-height: 25rem; diff --git a/forms-flow-admin/src/components/roles/roles.tsx b/forms-flow-admin/src/components/roles/roles.tsx index 539f32955..eb86e468d 100644 --- a/forms-flow-admin/src/components/roles/roles.tsx +++ b/forms-flow-admin/src/components/roles/roles.tsx @@ -15,12 +15,15 @@ import Dropdown from "react-bootstrap/Dropdown"; import OverlayTrigger from "react-bootstrap/OverlayTrigger"; import Popover from "react-bootstrap/Popover"; import { toast } from "react-toastify"; -import { KEYCLOAK_ENABLE_CLIENT_AUTH, MULTITENANCY_ENABLED } from "../../constants"; +import { + KEYCLOAK_ENABLE_CLIENT_AUTH, + MULTITENANCY_ENABLED, +} from "../../constants"; import { DEFAULT_ROLES } from "../../constants"; const Roles = React.memo((props: any) => { const { t } = useTranslation(); - const {tenantId} = useParams(); + const { tenantId } = useParams(); const [roles, setRoles] = React.useState([]); const [activePage, setActivePage] = React.useState(1); const [sizePerPage, setSizePerPage] = React.useState(5); @@ -42,7 +45,8 @@ const Roles = React.memo((props: any) => { description: "", }; const [deleteCandidate, setDeleteCandidate] = React.useState(initialRoleType); - const [selectedRoleIdentifier, setSelectedRoleIdentifier] = React.useState(""); + const [selectedRoleIdentifier, setSelectedRoleIdentifier] = + React.useState(""); const [editCandidate, setEditCandidate] = React.useState(initialRoleType); const [disabled, setDisabled] = React.useState(true); const [search, setSerach] = React.useState(""); @@ -92,7 +96,7 @@ const Roles = React.memo((props: any) => { } ); }; - + const handleChangeName = (e) => { setPayload({ ...payload, name: e.target.value }); }; @@ -119,12 +123,16 @@ const Roles = React.memo((props: any) => { } if (KEYCLOAK_ENABLE_CLIENT_AUTH) { if (hasSpecialCharacters(payload.name)) { - toast.error(t("Role names cannot contain special characters except _ , -")); + toast.error( + t("Role names cannot contain special characters except _ , -") + ); return; } } else { if (hasSpecialCharacterswithslash(payload.name)) { - toast.error(t("Role names cannot contain special characters except _ , - , / ")); + toast.error( + t("Role names cannot contain special characters except _ , - , / ") + ); return; } } @@ -138,7 +146,7 @@ const Roles = React.memo((props: any) => { }, (err) => { setError(err); - setDisabled(false); + setDisabled(false); toast.error(t("Failed to create role!")); } ); @@ -149,12 +157,16 @@ const Roles = React.memo((props: any) => { } if (KEYCLOAK_ENABLE_CLIENT_AUTH) { if (hasSpecialCharacters(editCandidate.name)) { - toast.error(t("Role names cannot contain special characters except _ , -")); + toast.error( + t("Role names cannot contain special characters except _ , -") + ); return; } } else { if (hasSpecialCharacterswithslash(editCandidate.name)) { - toast.error(t("Role names cannot contain special characters except _ , - , / ")); + toast.error( + t("Role names cannot contain special characters except _ , - , / ") + ); return; } } @@ -226,68 +238,85 @@ const Roles = React.memo((props: any) => { setDisabled(false); }; - const checkDefaultRoleOrNot = (role:any) =>{ - if(MULTITENANCY_ENABLED && tenantId){ + const checkDefaultRoleOrNot = (role: any) => { + if (MULTITENANCY_ENABLED && tenantId) { const roles = [ `${tenantId}-designer`, `${tenantId}-client`, `${tenantId}-reviewer`, `${tenantId}-admin`, + "formsflow-reviewer", + "formsflow-designer", + "formsflow-client", + "camunda-admin", + "Approver", + "clerk", + "designer", ]; - return roles.includes(role) - }else{ + return roles.includes(role); + } else { return DEFAULT_ROLES.includes(role); } - } + }; // Delete confirmation const confirmDelete = () => ( -
- - - {t("Confirm Delete")} - - - {`${t("Are you sure deleting the role")} ${deleteCandidate.name}`} - - - - - - -
+
+ + + {t("Confirm Delete")} + + + {`${t("Are you sure deleting the role")} ${deleteCandidate.name}`} + + + + + + +
); const showCreateModal = () => ( -
+
- - {t("Create Role")} - - -
+ + {t("Create Role")} + + - {t("Role Name")} - * + + {t("Role Name")} + + * - {t("Description")} - * + + {t("Description")} + + * { title={t("Enter Description")} /> - -
- - - - +
+ + + +
); const showEditModal = () => ( -
+
- - {t("Edit Role")} - - -
+ + {t("Edit Role")} + + - {t("Role Name")} - * + + {t("Role Name")} + + * - {t("Description")} - * + + {t("Description")} + + * - -
- - - - +
+ + + +
); const noData = () => ( -
+

{(t) => t(props.error || "No data Found")}

@@ -368,7 +412,7 @@ const Roles = React.memo((props: any) => { ); const customTotal = (from, to, size) => ( - + {(t) => t("Showing")} {from}{" "} {(t) => t("to")} {to}{" "} {(t) => t("of")} {size}{" "} @@ -423,7 +467,7 @@ const Roles = React.memo((props: any) => { const pagination = paginationFactory({ showTotal: true, align: "center", - className:"d-flex", + className: "d-flex", sizePerPageList: getpageList(), page: activePage, sizePerPage: sizePerPage, @@ -473,9 +517,15 @@ const Roles = React.memo((props: any) => { } > -
handleClick(e, rowData)}> -

{(t) => t("View")}

- +
handleClick(e, rowData)} + data-testid="user-list-view-dropdown" + > +

+ {(t) => t("View")} +

+
); @@ -485,17 +535,19 @@ const Roles = React.memo((props: any) => { dataField: "id", text: {(t) => t("Actions")}, formatter: (cell, rowData, rowIdx, formatExtraData) => { - return ( - checkDefaultRoleOrNot(rowData.name) ? null : + return checkDefaultRoleOrNot(rowData.name) ? null : (
{ - setSelectedRoleIdentifier(KEYCLOAK_ENABLE_CLIENT_AUTH ? rowData.name : rowData.id) + setSelectedRoleIdentifier( + KEYCLOAK_ENABLE_CLIENT_AUTH ? rowData.name : rowData.id + ); setEditCandidate(rowData); handleShowEditRoleModal(); }} + data-testid="admin-roles-edit-icon" /> { setDeleteCandidate(rowData); handleShowDeleteModal(); }} + data-testid="admin-roles-delete-icon" />
); @@ -522,6 +575,7 @@ const Roles = React.memo((props: any) => { onChange={handlFilter} value={search} title={t("Search...")} + data-testid="search-role-input" /> {search.length > 0 && ( @@ -531,13 +585,19 @@ const Roles = React.memo((props: any) => { setSerach(""); setRoles(props.roles); }} + data-testid="clear-role-search-button" > {t("Clear")} )}
-
{!props?.loading ? ( @@ -547,12 +607,13 @@ const Roles = React.memo((props: any) => { columns={columns} pagination={pagination} bordered={false} - wrapperClasses="table-container" + wrapperClasses="table-container px-4" rowStyle={{ color: "#09174A", fontWeight: 600, }} noDataIndication={noData} + data-testid="admin-roles-table" /> ) : ( diff --git a/forms-flow-admin/src/components/users/users.scss b/forms-flow-admin/src/components/users/users.scss index daac336f8..8fde4558e 100644 --- a/forms-flow-admin/src/components/users/users.scss +++ b/forms-flow-admin/src/components/users/users.scss @@ -41,6 +41,9 @@ .user-filter-container > select { border: none; - padding: 8px; width: max-content; } + +.success{ + color: var(--color-success) ; +} \ No newline at end of file diff --git a/forms-flow-admin/src/components/users/users.tsx b/forms-flow-admin/src/components/users/users.tsx index 334561a49..792404c4d 100644 --- a/forms-flow-admin/src/components/users/users.tsx +++ b/forms-flow-admin/src/components/users/users.tsx @@ -12,24 +12,44 @@ import DropdownButton from "react-bootstrap/DropdownButton"; import Dropdown from "react-bootstrap/Dropdown"; import { toast } from "react-toastify"; import { Tooltip } from "react-bootstrap"; +import Modal from "react-bootstrap/Modal"; // Import Modal from react-bootstrap import "./users.scss"; -import { KEYCLOAK_ENABLE_CLIENT_AUTH } from "../../constants"; - +import { KEYCLOAK_ENABLE_CLIENT_AUTH,MULTITENANCY_ENABLED } from "../../constants"; +import Select from "react-select"; +import { CreateUser } from "../../services/users"; const Users = React.memo((props: any) => { const [selectedRow, setSelectedRow] = React.useState(null); const [selectedRoles, setSelectedRoles] = React.useState([]); - const [roleNameMapper, setROleNameMapper] = React.useState({}); + const [roleNameMapper, setRoleNameMapper] = React.useState({}); const [roles, setRoles] = React.useState([]); - const [error, setError] = React.useState(); + const [error, setError] = React.useState(null); // Initialize error state with null instead of undefined const [loading, setLoading] = React.useState(false); const [activePage, setActivePage] = React.useState(1); const [sizePerPage, setSizePerPage] = React.useState(5); - const [selectedFilter, setSelectedFilter] = React.useState(); + const [selectedFilter, setSelectedFilter] = React.useState(null); // Initialize selectedFilter with null + const [searchKey, setSearchKey] = React.useState(""); + const [showInviteModal, setShowInviteModal] = React.useState(false); // Add state for managing invite modal const { t } = useTranslation(); + const [selectedRolesModal, setSelectedRolesModal] = React.useState([]); + const [formData, setFormData] = React.useState({ user: ""}); + const [showSuccessModal, setShowSuccessModal] = React.useState(false); + const [validationError, setValidationError] = React.useState(''); + + const openSuccessModal = () => { + setShowSuccessModal(true); + closeInviteModal(); + }; + const closeSuccessModal = () => { + setShowSuccessModal(false); + clearForm(); + props.setInvalidated(true); + }; + React.useEffect(() => { props?.setFilter(selectedFilter); - }, [selectedFilter]); + props?.setSearch(searchKey); + }, [selectedFilter, searchKey]); React.useEffect(() => { if (props?.page?.pageNo) { @@ -50,19 +70,18 @@ const Users = React.memo((props: any) => { for (let role of roles) { mapper[role.id] = role.name.split("/").at(-1); } - setROleNameMapper(mapper); + setRoleNameMapper(mapper); // Corrected the function name from setROleNameMapper to setRoleNameMapper }, [roles]); const addRole = (row) => { setSelectedRow(row); setSelectedRoles([]); }; - + const handleRoleSelectChange = (selectedOptions) => { + setSelectedRolesModal(selectedOptions); + }; const handleSearch = (e) => { - if (selectedFilter) { - setSelectedFilter(undefined); - } - props.setSearch(e.target.value); + setSearchKey(e.target.value); }; const removePermission = (rowData, item) => { @@ -87,18 +106,21 @@ const Users = React.memo((props: any) => { } ); }; + const handleSizeChange = (sizePerPage, page) => { setActivePage(page); setSizePerPage(sizePerPage); }; + const customTotal = (from, to, size) => ( - + {(t) => t("Showing")} {from}{" "} {(t) => t("to")} {to}{" "} {(t) => t("of")} {size}{" "} {(t) => t("results")} ); + const customDropUp = ({ options, currSizePerPage, onSizePerPageChange }) => { return ( { variant="secondary" title={currSizePerPage} style={{ display: "inline" }} + data-testid="admin-users-custom-drop-up" > {options.map((option) => ( onSizePerPageChange(option.page)} + data-testid={`admin-users-drop-up-option-${option.text}`} > {option.text} @@ -119,6 +143,7 @@ const Users = React.memo((props: any) => { ); }; + const getpageList = () => { const list = [ { @@ -198,15 +223,25 @@ const Users = React.memo((props: any) => { return (
{cell?.map((item, i) => ( -
+
{item?.path} : <>} + overlay={ + !KEYCLOAK_ENABLE_CLIENT_AUTH ? ( + {item?.path} + ) : ( + <> + ) + } > {item?.name} removePermission(rowData, item)} > @@ -239,7 +274,7 @@ const Users = React.memo((props: any) => { const getRoleRepresentation = (role, key, rowData) => { const userPermissions = rowData.role; let shouldHighLight = userPermissions.find( - (element: any) => element.id === role.id + (element) => element.id === role.id ); let isSelected = false; if (selectedRoles.includes(role.id)) { @@ -291,7 +326,10 @@ const Users = React.memo((props: any) => { placement="left" rootClose={true} overlay={ - +
{roles.length > 0 ? ( @@ -305,8 +343,11 @@ const Users = React.memo((props: any) => {
{roles.length > 0 && ( - )}
@@ -314,8 +355,13 @@ const Users = React.memo((props: any) => { } > - ); @@ -323,45 +369,178 @@ const Users = React.memo((props: any) => { }, ]; + const clearForm = () => { + setFormData({ user: "" }); + setSelectedRolesModal([]); + }; + + const openInviteModal = () => { + setValidationError(null); + setShowInviteModal(true); + } + const closeInviteModal = () => { + clearForm(); + setShowInviteModal(false); + } + const sendInvites = () => { + const selectedRolesIds = selectedRolesModal.map(role => ({ roleId: role.value, name: role.label })); + const payload = { + roles: selectedRolesIds, + user: formData.user, + }; + CreateUser( + payload, + (data) => { + openSuccessModal(); + + }, + (err) => { + setValidationError(t("User doesn't exist!")); + } + ); + }; + + return ( <> + + + + + +
+
+
+ + +
+
+ {t("Success")} +
+

{t("User added")}

+
+
+
+
+ +
-
-
+
+
- {props.search?.length > 0 && ( + {searchKey && ( )}
-
- {t("Filter By:")} - -