From f88cf29deea84c99fb7d16e5e52a59f4efa31ddb Mon Sep 17 00:00:00 2001 From: CZnavody19 Date: Wed, 8 Nov 2023 08:44:43 +0100 Subject: [PATCH 01/49] changed day title format --- src/app/admin/[date]/page.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/admin/[date]/page.tsx b/src/app/admin/[date]/page.tsx index 94a2980..f2bf63b 100644 --- a/src/app/admin/[date]/page.tsx +++ b/src/app/admin/[date]/page.tsx @@ -20,6 +20,7 @@ import getToken from "@/utils/getToken"; import { MenuInterface } from "@/types/MenuInterface"; import adminGetPriceLvls from "@/queries/adminGetPriceLvls"; import { NoticeType } from "antd/lib/message/interface"; +import pickerLocale from "@/constants/PickerLocale"; const CreateMenu = ({ params }: { params: { date: string } }) => { const menuByDate = useQuery(getMenusByDate, { @@ -230,7 +231,7 @@ const CreateMenu = ({ params }: { params: { date: string } }) => {
{contextHolder} - Menu {params.date} + {new Date(params.date).toLocaleDateString(pickerLocale.lang.locale, { weekday: 'long', month: 'numeric', day: 'numeric'})}
{(menu ?? []).map((item, i: number) => { From 8f92949d15867bd79a3064cbc02bfcfed13a48fa Mon Sep 17 00:00:00 2001 From: CZnavody19 Date: Sun, 19 Nov 2023 17:16:03 +0100 Subject: [PATCH 02/49] change picker date format --- src/app/admin/queue/page.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/admin/queue/page.tsx b/src/app/admin/queue/page.tsx index 8617aad..d890e57 100644 --- a/src/app/admin/queue/page.tsx +++ b/src/app/admin/queue/page.tsx @@ -45,6 +45,7 @@ const QueuePage = () => {
{ setDate( From b91d8c8c68eb4be80165c51d96f510ea823f2df9 Mon Sep 17 00:00:00 2001 From: CZnavody19 Date: Sun, 19 Nov 2023 17:26:16 +0100 Subject: [PATCH 03/49] made date title a variable --- src/app/admin/[date]/page.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/admin/[date]/page.tsx b/src/app/admin/[date]/page.tsx index f2bf63b..324e937 100644 --- a/src/app/admin/[date]/page.tsx +++ b/src/app/admin/[date]/page.tsx @@ -227,11 +227,13 @@ const CreateMenu = ({ params }: { params: { date: string } }) => { }); }; + const dateTitle = new Date(params.date).toLocaleDateString(pickerLocale.lang.locale, { weekday: 'long', month: 'numeric', day: 'numeric'}); + return (
{contextHolder} - {new Date(params.date).toLocaleDateString(pickerLocale.lang.locale, { weekday: 'long', month: 'numeric', day: 'numeric'})} + {dateTitle}
{(menu ?? []).map((item, i: number) => { From 0a679b6eba8b55da744a6c7246dc2eaf6737bda8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Wed, 22 Nov 2023 19:13:03 +0100 Subject: [PATCH 04/49] Use unix time (#28) * fix table orders, calendar * use unix instead of string * use extend in root layout --- bun.lockb | Bin 189790 -> 190166 bytes package-lock.json | 5162 +++++++++++++++++++++++++++ package.json | 1 + src/app/admin/[date]/page.tsx | 34 +- src/app/admin/layout.tsx | 3 +- src/app/admin/page.tsx | 43 +- src/app/admin/queue/page.tsx | 10 +- src/app/admin/statistics/page.tsx | 28 +- src/components/LunchOrderTable.tsx | 12 +- src/components/OrderItem.tsx | 2 + src/components/Statistics/Table.tsx | 43 +- src/lib/getTime.ts | 50 + src/queries/adminGetMenuOrders.ts | 4 +- src/queries/getMenusByDate.ts | 4 +- src/queries/waiterOrders.ts | 2 +- src/types/LunchOrder.ts | 9 + src/types/MenuInterface.ts | 2 +- src/types/OrdersInterface.ts | 4 +- 18 files changed, 5338 insertions(+), 75 deletions(-) create mode 100644 package-lock.json create mode 100644 src/lib/getTime.ts diff --git a/bun.lockb b/bun.lockb index 7567b54c774aad2037fa861f112bdde3f18c58d4..95ee14b21e579d0cc4f586b733e4349efa199800 100755 GIT binary patch delta 37501 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 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1155451 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5162 @@ +{ + "name": "move", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "move", + "version": "0.1.0", + "dependencies": { + "@ant-design/cssinjs": "^1.17.0", + "@apollo/client": "latest", + "@apollo/experimental-nextjs-app-support": "^0.4.2", + "@types/node": "20.6.0", + "@types/react": "18.2.21", + "@types/react-dom": "18.2.7", + "@vercel/analytics": "^1.0.2", + "antd": "^5.9.0", + "autoprefixer": "10.4.15", + "dayjs": "^1.11.9", + "dayjs-plugin-utc": "^0.1.2", + "eslint": "8.49.0", + "eslint-config-next": "13.5.4", + "graphql": "^16.8.0", + "install": "^0.13.0", + "next": "13.5.4", + "postcss": "8.4.29", + "react": "18.2.0", + "react-dom": "18.2.0", + "recharts": "^2.8.0", + "tailwindcss": "3.3.3", + "typescript": "5.2.2" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ant-design/colors": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/cssinjs": { + "version": "1.17.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@emotion/hash": "^0.8.0", + "@emotion/unitless": "^0.7.5", + "classnames": "^2.3.1", + "csstype": "^3.0.10", + "rc-util": "^5.35.0", + "stylis": "^4.0.13" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/icons": { + "version": "5.2.6", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.3.1", + "license": "MIT" + }, + "node_modules/@ant-design/react-slick": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.4", + "classnames": "^2.2.5", + "json2mq": "^0.2.0", + "resize-observer-polyfill": "^1.5.1", + "throttle-debounce": "^5.0.0" + }, + "peerDependencies": { + "react": ">=16.9.0" + } + }, + "node_modules/@apollo/client": { + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.8.7.tgz", + "integrity": "sha512-DnQtFkQrCyxHTSa9gR84YRLmU/al6HeXcLZazVe+VxKBmx/Hj4rV8xWtzfWYX5ijartsqDR7SJgV037MATEecA==", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@wry/context": "^0.7.3", + "@wry/equality": "^0.5.6", + "@wry/trie": "^0.4.3", + "graphql-tag": "^2.12.6", + "hoist-non-react-statics": "^3.3.2", + "optimism": "^0.17.5", + "prop-types": "^15.7.2", + "response-iterator": "^0.2.6", + "symbol-observable": "^4.0.0", + "ts-invariant": "^0.10.3", + "tslib": "^2.3.0", + "zen-observable-ts": "^1.2.5" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0", + "graphql-ws": "^5.5.5", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" + }, + "peerDependenciesMeta": { + "graphql-ws": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "subscriptions-transport-ws": { + "optional": true + } + } + }, + "node_modules/@apollo/experimental-nextjs-app-support": { + "version": "0.4.3", + "license": "MIT", + "dependencies": { + "server-only": "^0.0.1", + "superjson": "^1.12.2", + "ts-invariant": "^0.10.3" + }, + "peerDependencies": { + "@apollo/client": ">=3.8.0-rc || ^3.8.0", + "next": "^13.4.1", + "react": "^18" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.1", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.9.1", + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.49.0", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "license": "MIT", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.0.8", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@next/env": { + "version": "13.5.4", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.5.4", + "license": "MIT", + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.5.4", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz", + "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz", + "integrity": "sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz", + "integrity": "sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz", + "integrity": "sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz", + "integrity": "sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz", + "integrity": "sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz", + "integrity": "sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz", + "integrity": "sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rc-component/color-picker": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@ctrl/tinycolor": "^3.6.0", + "classnames": "^2.2.6", + "rc-util": "^5.30.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/context": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mini-decimal": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@rc-component/mutate-observer": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz", + "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tour": { + "version": "1.10.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0", + "@rc-component/portal": "^1.0.0-9", + "@rc-component/trigger": "^1.3.6", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/trigger": { + "version": "1.17.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@rc-component/portal": "^1.1.0", + "classnames": "^2.3.2", + "rc-align": "^4.0.0", + "rc-motion": "^2.0.0", + "rc-resize-observer": "^1.3.1", + "rc-util": "^5.33.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.5.1", + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.2", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/d3-array": { + "version": "3.0.8", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.1", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.5", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.3", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.6.0", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.8", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.21", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.7", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-dom/node_modules/@types/react": { + "version": "18.2.25", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.4", + "license": "MIT" + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.7.4", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.7.4", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.7.4", + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.7.4", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.7.4", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.7.4", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vercel/analytics": { + "version": "1.1.0", + "license": "MPL-2.0", + "dependencies": { + "server-only": "^0.0.1" + } + }, + "node_modules/@wry/context": { + "version": "0.7.3", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/equality": { + "version": "0.5.6", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/trie": { + "version": "0.4.3", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antd": { + "version": "5.9.4", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/cssinjs": "^1.16.0", + "@ant-design/icons": "^5.2.2", + "@ant-design/react-slick": "~1.0.0", + "@babel/runtime": "^7.18.3", + "@ctrl/tinycolor": "^3.6.0", + "@rc-component/color-picker": "~1.4.1", + "@rc-component/mutate-observer": "^1.1.0", + "@rc-component/tour": "~1.10.0", + "@rc-component/trigger": "^1.16.0", + "classnames": "^2.2.6", + "copy-to-clipboard": "^3.2.0", + "dayjs": "^1.11.1", + "qrcode.react": "^3.1.0", + "rc-cascader": "~3.17.0", + "rc-checkbox": "~3.1.0", + "rc-collapse": "~3.7.1", + "rc-dialog": "~9.2.0", + "rc-drawer": "~6.4.1", + "rc-dropdown": "~4.1.0", + "rc-field-form": "~1.38.1", + "rc-image": "~7.2.0", + "rc-input": "~1.2.1", + "rc-input-number": "~8.1.0", + "rc-mentions": "~2.8.0", + "rc-menu": "~9.12.0", + "rc-motion": "^2.9.0", + "rc-notification": "~5.1.1", + "rc-pagination": "~3.6.1", + "rc-picker": "~3.14.1", + "rc-progress": "~3.5.1", + "rc-rate": "~2.12.0", + "rc-resize-observer": "^1.3.1", + "rc-segmented": "~2.2.2", + "rc-select": "~14.9.0", + "rc-slider": "~10.2.1", + "rc-steps": "~6.0.1", + "rc-switch": "~4.1.0", + "rc-table": "~7.34.4", + "rc-tabs": "~12.12.1", + "rc-textarea": "~1.4.0", + "rc-tooltip": "~6.0.1", + "rc-tree": "~5.7.12", + "rc-tree-select": "~5.13.0", + "rc-upload": "~4.3.4", + "rc-util": "^5.37.0", + "scroll-into-view-if-needed": "^3.0.3", + "throttle-debounce": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-tree-filter": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "license": "ISC" + }, + "node_modules/async-validator": { + "version": "4.2.5", + "license": "MIT" + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.15", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.8.2", + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001546", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/classnames": { + "version": "2.3.2", + "license": "MIT" + }, + "node_modules/client-only": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "3.1.0", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "license": "MIT", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-unit-converter": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "license": "BSD-2-Clause" + }, + "node_modules/dayjs": { + "version": "1.11.10", + "license": "MIT" + }, + "node_modules/dayjs-plugin-utc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dayjs-plugin-utc/-/dayjs-plugin-utc-0.1.2.tgz", + "integrity": "sha512-ExERH5o3oo6jFOdkvMP3gytTCQ9Ksi5PtylclJWghr7k7m3o2U5QrwtdiJkOxLOH4ghr0EKhpqGefzGz1VvVJg==" + }, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "license": "Apache-2.0" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-align": { + "version": "1.12.4", + "license": "MIT" + }, + "node_modules/dom-helpers": { + "version": "3.4.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.544", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.22.2", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "license": "MIT", + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.49.0", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "13.5.4", + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "13.5.4", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "license": "ISC", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-equals": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fraction.js": { + "version": "4.3.6", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "license": "BSD-2-Clause" + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.0.8", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "13.23.0", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/graphql": { + "version": "16.8.1", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/has": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/install": { + "version": "0.13.0", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "4.1.15", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jiti": { + "version": "1.20.0", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/json2mq": { + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "node_modules/json5": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.3", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/next": { + "version": "13.5.4", + "license": "MIT", + "dependencies": { + "@next/env": "13.5.4", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.31", + "styled-jsx": "5.1.1", + "watchpack": "2.4.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=16.14.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "13.5.4", + "@next/swc-darwin-x64": "13.5.4", + "@next/swc-linux-arm64-gnu": "13.5.4", + "@next/swc-linux-arm64-musl": "13.5.4", + "@next/swc-linux-x64-gnu": "13.5.4", + "@next/swc-linux-x64-musl": "13.5.4", + "@next/swc-win32-arm64-msvc": "13.5.4", + "@next/swc-win32-ia32-msvc": "13.5.4", + "@next/swc-win32-x64-msvc": "13.5.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optimism": { + "version": "0.17.5", + "license": "MIT", + "dependencies": { + "@wry/context": "^0.7.0", + "@wry/trie": "^0.4.3", + "tslib": "^2.3.0" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "license": "MIT", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.29", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode.react": { + "version": "3.1.0", + "license": "ISC", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/rc-align": { + "version": "4.0.15", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.26.0", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-cascader": { + "version": "3.17.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "array-tree-filter": "^2.1.0", + "classnames": "^2.3.1", + "rc-select": "~14.9.0", + "rc-tree": "~5.7.0", + "rc-util": "^5.35.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-checkbox": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.3.2", + "rc-util": "^5.25.2" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-collapse": { + "version": "3.7.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.3.4", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dialog": { + "version": "9.2.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.0.0-8", + "classnames": "^2.2.6", + "rc-motion": "^2.3.0", + "rc-util": "^5.21.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-drawer": { + "version": "6.4.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.1.1", + "classnames": "^2.2.6", + "rc-motion": "^2.6.1", + "rc-util": "^5.36.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dropdown": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@rc-component/trigger": "^1.7.0", + "classnames": "^2.2.6", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/rc-field-form": { + "version": "1.38.2", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0", + "async-validator": "^4.1.0", + "rc-util": "^5.32.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-image": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@rc-component/portal": "^1.0.2", + "classnames": "^2.2.6", + "rc-dialog": "~9.2.0", + "rc-motion": "^2.6.2", + "rc-util": "^5.34.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-input": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.18.1" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/rc-input-number": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/mini-decimal": "^1.0.1", + "classnames": "^2.2.5", + "rc-input": "~1.2.1", + "rc-util": "^5.28.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-mentions": { + "version": "2.8.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.22.5", + "@rc-component/trigger": "^1.5.0", + "classnames": "^2.2.6", + "rc-input": "~1.2.1", + "rc-menu": "~9.12.0", + "rc-textarea": "~1.4.0", + "rc-util": "^5.34.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-menu": { + "version": "9.12.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^1.6.2", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.3.1", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-motion": { + "version": "2.9.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.21.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-notification": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.6.0", + "rc-util": "^5.20.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-overflow": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.37.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-pagination": { + "version": "3.6.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.32.2" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-picker": { + "version": "3.14.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^1.5.0", + "classnames": "^2.2.1", + "rc-util": "^5.30.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "date-fns": ">= 2.x", + "dayjs": ">= 1.x", + "luxon": ">= 3.x", + "moment": ">= 2.x", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + }, + "peerDependenciesMeta": { + "date-fns": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + } + } + }, + "node_modules/rc-progress": { + "version": "3.5.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-util": "^5.16.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-rate": { + "version": "2.12.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.0.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-resize-observer": { + "version": "1.3.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.7", + "classnames": "^2.2.1", + "rc-util": "^5.27.0", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-segmented": { + "version": "2.2.2", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-motion": "^2.4.4", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/rc-select": { + "version": "14.9.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^1.5.0", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-overflow": "^1.3.1", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-slider": { + "version": "10.2.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.27.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-steps": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.16.7", + "classnames": "^2.2.3", + "rc-util": "^5.16.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-switch": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0", + "classnames": "^2.2.1", + "rc-util": "^5.30.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-table": { + "version": "7.34.4", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/context": "^1.4.0", + "classnames": "^2.2.5", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.36.0", + "rc-virtual-list": "^3.11.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tabs": { + "version": "12.12.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.2", + "classnames": "2.x", + "rc-dropdown": "~4.1.0", + "rc-menu": "~9.12.0", + "rc-motion": "^2.6.2", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.34.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-textarea": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-input": "~1.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tooltip": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@rc-component/trigger": "^1.0.4", + "classnames": "^2.3.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tree": { + "version": "5.7.12", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.1" + }, + "engines": { + "node": ">=10.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-tree-select": { + "version": "5.13.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-select": "~14.9.0", + "rc-tree": "~5.7.0", + "rc-util": "^5.16.1" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-upload": { + "version": "4.3.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "classnames": "^2.2.5", + "rc-util": "^5.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util": { + "version": "5.37.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "react-is": "^16.12.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-virtual-list": { + "version": "3.11.2", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.0", + "classnames": "^2.2.6", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.36.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/react": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "license": "MIT" + }, + "node_modules/react-resize-detector": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-smooth": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.0", + "react-transition-group": "2.9.0" + }, + "peerDependencies": { + "prop-types": "^15.6.0", + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "2.9.0", + "license": "BSD-3-Clause", + "dependencies": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">=15.0.0", + "react-dom": ">=15.0.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recharts": { + "version": "2.8.0", + "license": "MIT", + "dependencies": { + "classnames": "^2.2.5", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.19", + "react-is": "^16.10.2", + "react-resize-detector": "^8.0.4", + "react-smooth": "^2.0.2", + "recharts-scale": "^0.4.4", + "reduce-css-calc": "^2.1.8", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "prop-types": "^15.6.0", + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/reduce-css-calc": { + "version": "2.1.8", + "license": "MIT", + "dependencies": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + } + }, + "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { + "version": "3.3.1", + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.6", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/response-iterator": { + "version": "0.2.6", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/server-only": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.3.0", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.34.0", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/glob/node_modules/minimatch": { + "version": "3.0.8", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/superjson": { + "version": "1.13.3", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.3", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/postcss": { + "version": "8.4.31", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throttle-debounce": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "license": "MIT" + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "license": "Apache-2.0" + }, + "node_modules/ts-invariant": { + "version": "0.10.3", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/victory-vendor": { + "version": "36.6.11", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.3.2", + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zen-observable": { + "version": "0.8.15", + "license": "MIT" + }, + "node_modules/zen-observable-ts": { + "version": "1.2.5", + "license": "MIT", + "dependencies": { + "zen-observable": "0.8.15" + } + } + } +} diff --git a/package.json b/package.json index 8658d79..1b3f867 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "antd": "^5.9.0", "autoprefixer": "10.4.15", "dayjs": "^1.11.9", + "dayjs-plugin-utc": "^0.1.2", "eslint": "8.49.0", "eslint-config-next": "13.5.4", "graphql": "^16.8.0", diff --git a/src/app/admin/[date]/page.tsx b/src/app/admin/[date]/page.tsx index 94a2980..ea34668 100644 --- a/src/app/admin/[date]/page.tsx +++ b/src/app/admin/[date]/page.tsx @@ -1,6 +1,8 @@ "use client"; import React, { useEffect, useState } from "react"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; import { useRouter } from "next/navigation"; import { Typography, Card, Button, Spin, message } from "antd"; import MenuItem from "@/components/MenuItem/MenuItem"; @@ -20,12 +22,22 @@ import getToken from "@/utils/getToken"; import { MenuInterface } from "@/types/MenuInterface"; import adminGetPriceLvls from "@/queries/adminGetPriceLvls"; import { NoticeType } from "antd/lib/message/interface"; +import getTime from "@/lib/getTime"; const CreateMenu = ({ params }: { params: { date: string } }) => { + dayjs.extend(utc); const menuByDate = useQuery(getMenusByDate, { variables: { - dateFrom: params.date, - dateTo: params.date, + dateFrom: getTime({ + date: params.date, + day: "middle", + unix: true, + }), + dateTo: getTime({ + date: params.date, + day: "middle", + unix: true, + }), }, context: { headers: { @@ -111,7 +123,11 @@ const CreateMenu = ({ params }: { params: { date: string } }) => { input: menu ? menu?.map((item: MenuInterface, index: number) => { return { - date: params.date, + date: getTime({ + date: params.date, + day: "middle", + unix: true, + }), order: item.order, priceLvl: item.level, meal: item.meal, @@ -143,7 +159,11 @@ const CreateMenu = ({ params }: { params: { date: string } }) => { .map((item: MenuInterface, index: number) => { return { id: item.id, - date: params.date, + date: getTime({ + date: params.date, + day: "middle", + unix: true, + }), order: item.order, priceLvl: item.level, meal: item.meal, @@ -170,7 +190,11 @@ const CreateMenu = ({ params }: { params: { date: string } }) => { createMenu({ variables: { input: { - date: params.date, + date: getTime({ + date: params.date, + day: "middle", + unix: true, + }), order: item.order, priceLvl: item.level, meal: item.meal, diff --git a/src/app/admin/layout.tsx b/src/app/admin/layout.tsx index f000008..e1c73d7 100644 --- a/src/app/admin/layout.tsx +++ b/src/app/admin/layout.tsx @@ -6,6 +6,7 @@ import { useRouter } from "next/navigation"; import { usePathname } from "next/navigation"; import { Button } from "antd"; import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; import { LogoutOutlined } from "@ant-design/icons"; import updateLocale from "dayjs/plugin/updateLocale"; import { navbarItems } from "@/components/Layout/constants"; @@ -17,7 +18,7 @@ const AdminLayout = ({ children }: { children: React.ReactNode }) => { const pathname = usePathname(); const router = useRouter(); - dayjs.extend(updateLocale); + dayjs.extend(updateLocale, utc); dayjs.updateLocale("en", { weekStart: 1, }); diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index bb064a8..edbcb55 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -6,23 +6,27 @@ import { useRouter } from "next/navigation"; import { Typography, Calendar } from "antd"; import type { Dayjs } from "dayjs"; import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; import pickerLocale from "@/constants/PickerLocale"; import getMenusByDate from "@/queries/getMenusByDate"; import getToken from "@/utils/getToken"; import { MenuInterface } from "@/types/MenuInterface"; +import { timeStamp } from "console"; +import getTime from "@/lib/getTime"; const AdminPage = () => { - const [menuMap, setMenuMap] = useState | undefined>( + dayjs.extend(utc); + const [menuMap, setMenuMap] = useState | undefined>( undefined ); - const [viewedDates, setViewedDates] = useState([ - dayjs().startOf("month").subtract(5, "day").format("YYYY-MM-DD"), - dayjs().endOf("month").add(15, "day").format("YYYY-MM-DD"), + const [viewedDatesUnix, setViewedDatesUnix] = useState([ + dayjs().startOf("month").subtract(5, "day").unix(), + dayjs().endOf("month").add(15, "day").unix(), ]); const { Title } = Typography; const [value, setValue] = useState(dayjs().format("YYYY-MM-DD")); const router = useRouter(); - const currentDate = dayjs(); + const currentDate = dayjs().utc(); const [menusByDate, { data }] = useLazyQuery(getMenusByDate, { context: { @@ -44,11 +48,11 @@ const AdminPage = () => { useEffect(() => { menusByDate({ variables: { - dateFrom: viewedDates[0], - dateTo: viewedDates[1], + dateFrom: viewedDatesUnix[0], + dateTo: viewedDatesUnix[1], }, }); - }, [viewedDates]); + }, [viewedDatesUnix]); useEffect(() => { if (!data?.getMenusByDate) return; @@ -58,7 +62,7 @@ const AdminPage = () => { const menuMap = new Map(); for (let menu of menuList) { - const date = dayjs(menu.date).format("YYYY-MM-DD"); + const date = menu.date; if (menuMap.has(date)) { menuMap.set(date, menuMap.get(date) + 1); } else { @@ -72,13 +76,22 @@ const AdminPage = () => { if (newMenuMap.has(date) && !prevMenuMap?.has(date)) { newMenuMap.set(date, newMenuMap.get(date) + count); } else { - newMenuMap.set(date, count); + newMenuMap.set(dayjs.unix(date).utc().unix(), count); } } return newMenuMap; }); }, [data]); + const mapHasValue = (timestamp: number) => { + return menuMap?.has(timestamp); + }; + + const getMapValueByDate = (timestamp: number) => { + const date = dayjs.unix(timestamp).utc().startOf("day").unix(); + return menuMap?.get(date); + }; + return (
@@ -89,9 +102,9 @@ const AdminPage = () => { - setViewedDates([ - e.startOf("month").format("YYYY-MM-DD"), - e.endOf("month").format("YYYY-MM-DD"), + setViewedDatesUnix([ + e.startOf("month").unix(), + e.endOf("month").unix(), ]) } locale={pickerLocale} @@ -99,8 +112,8 @@ const AdminPage = () => { return (

- {menuMap?.has(date.format("YYYY-MM-DD")) - ? `(${menuMap?.get(date.format("YYYY-MM-DD"))})` + {mapHasValue(date.utc().startOf("day").unix()) + ? `(${getMapValueByDate(date.unix())})` : null}

diff --git a/src/app/admin/queue/page.tsx b/src/app/admin/queue/page.tsx index 8617aad..8e39dc2 100644 --- a/src/app/admin/queue/page.tsx +++ b/src/app/admin/queue/page.tsx @@ -7,12 +7,14 @@ import LunchOrderTable from "@/components/LunchOrderTable"; import { Button, DatePicker } from "antd"; import RefreshButton from "@/components/RefreshButton"; import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; import pickerLocale from "@/constants/PickerLocale"; import waiterOrders from "@/queries/waiterOrders"; import getToken from "@/utils/getToken"; const QueuePage = () => { - const [date, setDate] = useState(undefined); + dayjs.extend(utc); + const [date, setDate] = useState(undefined); const [waiterQuery, { data }] = useLazyQuery(waiterOrders, { context: { @@ -30,7 +32,7 @@ const QueuePage = () => { const queryOrders = () => { waiterQuery({ variables: { - date: date ? date : dayjs().startOf("day").format("YYYY-MM-DD"), + date: date ? date : dayjs().utc().startOf("day").unix(), }, }); }; @@ -48,9 +50,7 @@ const QueuePage = () => { className="w-full md:w-[20rem]" onChange={(date) => { setDate( - date - ? dayjs(date?.format()).format("YYYY-MM-DD") - : undefined + date ? dayjs(date?.format()).utc().unix() : undefined ); }} /> diff --git a/src/app/admin/statistics/page.tsx b/src/app/admin/statistics/page.tsx index f50fd13..8fbf1f4 100644 --- a/src/app/admin/statistics/page.tsx +++ b/src/app/admin/statistics/page.tsx @@ -6,6 +6,7 @@ import { Typography, DatePicker, Button, Modal } from "antd"; import adminGetMenuOrders from "@/queries/adminGetMenuOrders"; import getToken from "@/utils/getToken"; import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; import type { OrdersInterface, NormalizedOrdersInterface, @@ -14,15 +15,17 @@ import type { import StatisticModalChart from "@/components/StatisticModalChart/StatisticModalChart"; import pickerLocale from "@/constants/PickerLocale"; import { StatisticsTable } from "@/components/Statistics"; +import getTime from "@/lib/getTime"; const Statistics = () => { + dayjs.extend(utc); const [modalOpen, setModalOpen] = useState(false); const [date, setDate] = useState(); const [selectedOrders, setSelectedOrders] = useState< OrdersInterface[] | undefined >(undefined); const [dataSource, setDataSource] = useState< - { key: string; date: string; total: number }[] | undefined + { key: string; date: number; total: number }[] | undefined >(undefined); const { Title } = Typography; @@ -42,8 +45,16 @@ const Statistics = () => { ordersQuery({ variables: { - dateFrom: date[0].format("YYYY-MM-DD"), - dateTo: date[1].format("YYYY-MM-DD"), + dateFrom: getTime({ + date: date[0].format("YYYY-MM-DD"), + day: "middle", + unix: true, + }), + dateTo: getTime({ + date: date[1].format("YYYY-MM-DD"), + day: "middle", + unix: true, + }), }, }); }; @@ -58,8 +69,8 @@ const Statistics = () => { ordersQuery({ variables: { - dateFrom: monday.format("YYYY-MM-DD"), - dateTo: nextFriday.format("YYYY-MM-DD"), + dateFrom: monday.utc().unix(), + dateTo: nextFriday.utc().unix(), }, }); }, []); @@ -93,7 +104,7 @@ const Statistics = () => { ) => { return normalizedOrders?.reduce( ( - acc: { key: string; date: string; total: number }[], + acc: { key: string; date: number; total: number }[], curr: NormalizedOrdersInterface ) => { const index = acc.findIndex((item) => item.date === curr.date); @@ -138,7 +149,10 @@ const Statistics = () => { onChange={(dates) => { const dayjsDates = dates && dates?.length > 0 - ? [dayjs(dates[0]?.format()), dayjs(dates[1]?.format())] + ? [ + dayjs.unix(dates[0]?.unix() ?? 0), + dayjs.unix(dates[1]?.unix() ?? 0), + ] : undefined; setDate(dayjsDates); }} diff --git a/src/components/LunchOrderTable.tsx b/src/components/LunchOrderTable.tsx index 6b1d03e..b27687c 100644 --- a/src/components/LunchOrderTable.tsx +++ b/src/components/LunchOrderTable.tsx @@ -2,11 +2,13 @@ import { useEffect, useState } from "react"; import dayjs from "dayjs"; -import type { LunchOrder } from "@/types/LunchOrder"; +import type { LunchOrder, NormalizedLunchOrder } from "@/types/LunchOrder"; import OrderItem from "./OrderItem"; const LunchOrderTable = ({ data }: { data: LunchOrder[] }) => { - const [normalizedData, setNormalizedData] = useState([]); + const [normalizedData, setNormalizedData] = useState( + [] + ); const columns = [ { title: "Jméno", @@ -17,6 +19,10 @@ const LunchOrderTable = ({ data }: { data: LunchOrder[] }) => { title: "Čas", dataIndex: "date", key: "date", + render: (e: number) => { + const date = dayjs.unix(e).utc().format("DD.MM.YYYY"); + return

test

; + }, }, { title: "Oběd", @@ -34,7 +40,7 @@ const LunchOrderTable = ({ data }: { data: LunchOrder[] }) => { setNormalizedData( data?.map((order) => ({ ...order, - date: dayjs(order.date, "HH:mm:ss").add(2, "hours").format("HH:mm"), + date: dayjs.unix(order.date).format("HH:mm"), })) ); }, [data]); diff --git a/src/components/OrderItem.tsx b/src/components/OrderItem.tsx index 9b3604e..d28c421 100644 --- a/src/components/OrderItem.tsx +++ b/src/components/OrderItem.tsx @@ -2,6 +2,8 @@ import React from "react"; import type { LunchOrder } from "@/types/LunchOrder"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; const OrderItem = ({ order, diff --git a/src/components/Statistics/Table.tsx b/src/components/Statistics/Table.tsx index 86ae7b4..72e9491 100644 --- a/src/components/Statistics/Table.tsx +++ b/src/components/Statistics/Table.tsx @@ -2,11 +2,13 @@ import React, { Dispatch, SetStateAction } from "react"; import { Table, Button } from "antd"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; import type { OrdersInterface } from "@/types/OrdersInterface"; interface orderData { key: string; - date: string; + date: number; total: number; } @@ -18,9 +20,10 @@ interface Props { } const StatisticsTable = (props: Props) => { + dayjs.extend(utc); const filterOrderData = ( data: OrdersInterface[] | undefined, - date: string, + date: number, orderNumber: number ) => { return data?.filter( @@ -33,31 +36,9 @@ const StatisticsTable = (props: Props) => { title: "Datum", dataIndex: "date", key: "date", - render: (e: string) => { - const parts = e.split("-"); - const year = parts[0]; - const month = parts[1].padStart(2, "0"); - const day = parts[2].padStart(2, "0"); - - const formattedDate = `${year}-${month}-${day}`; - const date = new Date(formattedDate); - - if (isNaN(date.getTime())) { - return

Invalid date

; - } - - const dayNumber = date.getDate(); - const monthNumber = date.getMonth() + 1; - const dayString = date.toLocaleString("cs-CZ", { weekday: "long" }); - - const dayFormatted = `0${dayNumber}`.slice(-2); - const monthFormatted = `0${monthNumber}`.slice(-2); - - const dateString = `${ - dayString.charAt(0).toUpperCase() + dayString.slice(1) - } ${dayFormatted}. ${monthFormatted}.`; - - return

{dateString}

; + render: (e: number) => { + const date = dayjs.unix(e).utc().format("DD.MM.YYYY"); + return date; }, }, { @@ -68,28 +49,28 @@ const StatisticsTable = (props: Props) => { { title: "1.", key: "firstorder", - render: (e: { key: string; date: string }) => { + render: (e: { key: string; date: number }) => { return

{filterOrderData(props.data, e.date, 1)}

; }, }, { title: "2.", key: "secondorder", - render: (e: { key: string; date: string }) => { + render: (e: { key: string; date: number }) => { return

{filterOrderData(props.data, e.date, 2)}

; }, }, { title: "3.", key: "thirdorder", - render: (e: { key: string; date: string }) => { + render: (e: { key: string; date: number }) => { return

{filterOrderData(props.data, e.date, 3)}

; }, }, { title: "Akce", key: "action", - render: (e: { key: string; date: string }) => { + render: (e: { key: string; date: number }) => { return ( - )} - - -
-
- {menuByDate.loading && } -
-
- ); + return ; }; -export default CreateMenu; +export default CreateMenuPage; diff --git a/src/app/admin/layout.tsx b/src/app/admin/layout.tsx index e1c73d7..90beb89 100644 --- a/src/app/admin/layout.tsx +++ b/src/app/admin/layout.tsx @@ -43,7 +43,7 @@ const AdminLayout = ({ children }: { children: React.ReactNode }) => { ? "5" : "1" ); - }, [pathname]); + }, [pathname, router]); const handleLogout = () => { localStorage.removeItem("token"); @@ -59,7 +59,7 @@ const AdminLayout = ({ children }: { children: React.ReactNode }) => { case "3": return "/admin/statistics"; case "4": - return "/admin/resources"; + // return "/admin/resources"; case "5": return "/admin/settings"; default: @@ -107,6 +107,7 @@ const AdminLayout = ({ children }: { children: React.ReactNode }) => { const isSelected = item.key === selectedKey; return ( { - dayjs.extend(utc); - const [menuMap, setMenuMap] = useState | undefined>( - undefined - ); - const [viewedDatesUnix, setViewedDatesUnix] = useState([ - dayjs().startOf("month").subtract(5, "day").unix(), - dayjs().endOf("month").add(15, "day").unix(), - ]); - const { Title } = Typography; - const [value, setValue] = useState(dayjs().format("YYYY-MM-DD")); - const router = useRouter(); - const currentDate = dayjs().utc(); +const Page = () => { + const token = getToken(); - const [menusByDate, { data }] = useLazyQuery(getMenusByDate, { - context: { - headers: { - Authorization: getToken(), - }, - }, - fetchPolicy: "network-only", - }); - - const onSelect = (newValue: Dayjs) => { - if (newValue.format("YYYY-MM-DD") !== value) { - setValue(newValue.format("YYYY-MM-DD")); - return; - } - router.push(`/admin/${newValue.format("YYYY-MM-DD")}`); - }; - - useEffect(() => { - menusByDate({ - variables: { - dateFrom: viewedDatesUnix[0], - dateTo: viewedDatesUnix[1], - }, - }); - }, [viewedDatesUnix]); - - useEffect(() => { - if (!data?.getMenusByDate) return; - - const menuList: MenuInterface[] = data.getMenusByDate; - - const menuMap = new Map(); - - for (let menu of menuList) { - const date = menu.date; - if (menuMap.has(date)) { - menuMap.set(date, menuMap.get(date) + 1); - } else { - menuMap.set(date, 1); - } - } - - setMenuMap((prevMenuMap) => { - const newMenuMap = new Map(prevMenuMap); - for (let [date, count] of menuMap.entries()) { - if (newMenuMap.has(date) && !prevMenuMap?.has(date)) { - newMenuMap.set(date, newMenuMap.get(date) + count); - } else { - newMenuMap.set(dayjs.unix(date).utc().unix(), count); - } - } - return newMenuMap; - }); - }, [data]); - - const mapHasValue = (timestamp: number) => { - return menuMap?.has(timestamp); - }; - - const getMapValueByDate = (timestamp: number) => { - const date = dayjs.unix(timestamp).utc().startOf("day").unix(); - return menuMap?.get(date); - }; - - return ( -
-
- - Jídelní lístek - -
- - setViewedDatesUnix([ - e.startOf("month").unix(), - e.endOf("month").unix(), - ]) - } - locale={pickerLocale} - cellRender={(date: Dayjs) => { - return ( -
-

- {mapHasValue(date.utc().startOf("day").unix()) - ? `(${getMapValueByDate(date.unix())})` - : null} -

-
- ); - }} - /> -
-
-
- ); + return ; }; -export default AdminPage; + +export default Page; diff --git a/src/app/admin/queue/page.tsx b/src/app/admin/queue/page.tsx index 8e39dc2..f3146e2 100644 --- a/src/app/admin/queue/page.tsx +++ b/src/app/admin/queue/page.tsx @@ -1,69 +1,10 @@ -"use client"; - -import React, { useEffect, useState } from "react"; -import { useLazyQuery } from "@apollo/client"; -import PageTitle from "@/components/PageTitle"; -import LunchOrderTable from "@/components/LunchOrderTable"; -import { Button, DatePicker } from "antd"; -import RefreshButton from "@/components/RefreshButton"; -import dayjs from "dayjs"; -import utc from "dayjs/plugin/utc"; -import pickerLocale from "@/constants/PickerLocale"; -import waiterOrders from "@/queries/waiterOrders"; +import QueuePage from "@/components/QueuePage/QueuePage"; import getToken from "@/utils/getToken"; -const QueuePage = () => { - dayjs.extend(utc); - const [date, setDate] = useState(undefined); - - const [waiterQuery, { data }] = useLazyQuery(waiterOrders, { - context: { - headers: { - Authorization: getToken(), - }, - }, - fetchPolicy: "network-only", - }); - - useEffect(() => { - queryOrders(); - }, []); - - const queryOrders = () => { - waiterQuery({ - variables: { - date: date ? date : dayjs().utc().startOf("day").unix(), - }, - }); - }; +const Page = () => { + const token = getToken(); - return ( -
-
- Výdej -
-
- -
- { - setDate( - date ? dayjs(date?.format()).utc().unix() : undefined - ); - }} - /> - -
-
- -
-
-
- ); + return ; }; -export default QueuePage; +export default Page; diff --git a/src/app/admin/settings/page.tsx b/src/app/admin/settings/page.tsx index 8c565de..9132a92 100644 --- a/src/app/admin/settings/page.tsx +++ b/src/app/admin/settings/page.tsx @@ -1,253 +1,93 @@ -"use client"; +import { PriceLevel, PriceLevelGroup } from "@/components/Settings/components"; +import adminGetAllPriceLvlGroups from "@/queries/adminGetAllPriceLvlGroups"; +import getToken from "@/utils/getToken"; +import adminGetAllFoodPriceLvls from "@/queries/adminGetAllFoodPriceLvls"; +import UserGroup from "@/components/Settings/components/UserGroup/UserGroup"; +import { getClient } from "@/lib/ssrApolloClient"; +import adminGetAllUserGroups from "@/queries/adminGetAllUserGroups"; +import { revalidatePath } from "next/cache"; -import { - Button, - Typography, - Table, - Modal, - Form, - Input, - DatePicker, - InputNumber, - ConfigProvider, - Divider, -} from "antd"; -import type { ColumnsType } from "antd/es/table"; -import { useState } from "react"; -import csCZ from "antd/locale/cs_CZ"; -import React from "react"; -import dayjs from "dayjs"; -import pickerLocale from "@/constants/PickerLocale"; + const getData = async () => { + "use server"; -const ResourcesPage = () => { - const { Title } = Typography; - const { RangePicker } = DatePicker; + revalidatePath("/admin/settings"); - const [isGroupModalOpen, setIsGroupModalOpen] = useState(false); - const [isPriceModalOpen, setIsPriceModalOpen] = useState(false); + const { data: allPriceLvlGroupsData } = await getClient().query({ + query: adminGetAllPriceLvlGroups, + context: { + headers: { + Authorization: getToken(), + }, + }, + fetchPolicy: "network-only", + }); - const [groupForm] = Form.useForm(); - const [priceForm] = Form.useForm(); + const { data: priceLevelsData } = await getClient().query({ + query: adminGetAllFoodPriceLvls, + context: { + headers: { + Authorization: getToken(), + }, + }, + fetchPolicy: "network-only", + }); - interface PriceType { - key: React.Key; - name: string; - price: number; - } - interface GroupType { - key: React.Key; - name: string; - price: number; - dateFrom: Date; - dateTo: Date; - } + const { data: userGroupsData } = await getClient().query({ + query: adminGetAllUserGroups, + context: { + headers: { + Authorization: getToken(), + }, + fetchOptions: { + next: { revalidate: 5 }, + }, + }, + fetchPolicy: "network-only", + }); - const priceColoumns: ColumnsType = [ - { - title: "Name", - dataIndex: "name", - }, - { - title: "Price", - dataIndex: "price", - render: (text, record) =>

{record.price} Kč

, - }, - ]; - const groupColoumns: ColumnsType = [ - { - title: "Name", - dataIndex: "name", - }, - { - title: "Price", - dataIndex: "price", - render: (text, record) =>

{record.price} Kč

, - }, - { - title: "Date", - render: (text, record) => ( - - ), - }, - ]; + return { + allPriceLvlGroupsData, + priceLevelsData, + userGroupsData, + }; + }; - const priceData: PriceType[] = [ - { - key: "1", - name: "John Brown", - price: 32, - }, - { - key: "2", - name: "Jim Green", - price: 42, - }, - { - key: "3", - name: "Joe Black", - price: 32, - }, - { - key: "4", - name: "Disabled User", - price: 99, - }, - ]; - const groupData: GroupType[] = [ - { - key: "1", - name: "John Brown", - price: 32, - dateFrom: new Date(), - dateTo: new Date(), - }, - { - key: "2", - name: "Jim Green", - price: 42, - dateFrom: new Date(), - dateTo: new Date(), - }, - { - key: "3", - name: "Joe Black", - price: 32, - dateFrom: new Date(), - dateTo: new Date(), - }, - { - key: "4", - name: "Disabled User", - price: 99, - dateFrom: new Date(), - dateTo: new Date(), - }, - ]; +const Page = async () => { + const token = getToken(); + + const { allPriceLvlGroupsData, priceLevelsData, userGroupsData } = + await getData(); return (
- + <h1 className="text-5xl sm:text-7xl m-0 font-black text-[#1F2937]"> Nastavení - -
-
-
-

Skupina

- -
- - + +
-
-

Cenová hladina

- +
+ +
-
- { - groupForm - .validateFields() - .then((values) => { - setIsGroupModalOpen(false); - groupForm.resetFields(); - }) - .catch((info) => {}); - }} - onCancel={() => { - setIsGroupModalOpen(false); - groupForm.resetFields(); - }} - > -
{ - setIsGroupModalOpen(false); - }} - > - - - - - - - - - - - - -
- { - priceForm - .validateFields() - .then((values) => { - setIsPriceModalOpen(false); - priceForm.resetFields(); - }) - .catch((info) => {}); - }} - onCancel={() => { - setIsPriceModalOpen(false); - priceForm.resetFields(); - }} - > -
{ - setIsPriceModalOpen(false); - }} - > - - - - - - - -
); }; -export default ResourcesPage; +export default Page; diff --git a/src/app/admin/statistics/page.tsx b/src/app/admin/statistics/page.tsx index 8fbf1f4..ceec5bb 100644 --- a/src/app/admin/statistics/page.tsx +++ b/src/app/admin/statistics/page.tsx @@ -1,190 +1,9 @@ -"use client"; - -import React, { useEffect, useState } from "react"; -import { useLazyQuery } from "@apollo/client"; -import { Typography, DatePicker, Button, Modal } from "antd"; -import adminGetMenuOrders from "@/queries/adminGetMenuOrders"; +import StatisticsPage from "@/components/Statistics/StatisticsPage"; import getToken from "@/utils/getToken"; -import dayjs from "dayjs"; -import utc from "dayjs/plugin/utc"; -import type { - OrdersInterface, - NormalizedOrdersInterface, - ValueKeyInterface, -} from "@/types/OrdersInterface"; -import StatisticModalChart from "@/components/StatisticModalChart/StatisticModalChart"; -import pickerLocale from "@/constants/PickerLocale"; -import { StatisticsTable } from "@/components/Statistics"; -import getTime from "@/lib/getTime"; - -const Statistics = () => { - dayjs.extend(utc); - const [modalOpen, setModalOpen] = useState(false); - const [date, setDate] = useState(); - const [selectedOrders, setSelectedOrders] = useState< - OrdersInterface[] | undefined - >(undefined); - const [dataSource, setDataSource] = useState< - { key: string; date: number; total: number }[] | undefined - >(undefined); - - const { Title } = Typography; - const { RangePicker } = DatePicker; - - const [ordersQuery, { data }] = useLazyQuery(adminGetMenuOrders, { - context: { - headers: { - Authorization: getToken(), - }, - }, - fetchPolicy: "no-cache", - }); - - const queryOrders = () => { - if (!date?.[0] || !date?.[1]) return; - - ordersQuery({ - variables: { - dateFrom: getTime({ - date: date[0].format("YYYY-MM-DD"), - day: "middle", - unix: true, - }), - dateTo: getTime({ - date: date[1].format("YYYY-MM-DD"), - day: "middle", - unix: true, - }), - }, - }); - }; - - useEffect(() => { - const today = dayjs(); - - const monday = today.startOf("week"); - const nextFriday = today.startOf("week").add(1, "week").add(4, "day"); - - setDate([monday, nextFriday]); - - ordersQuery({ - variables: { - dateFrom: monday.utc().unix(), - dateTo: nextFriday.utc().unix(), - }, - }); - }, []); - - const createValueKeyPairs = ( - orders: OrdersInterface[] | undefined - ): ValueKeyInterface[] | undefined => { - return orders?.map((item: OrdersInterface) => { - return { - key: `${item.Order}. ${item.meal.slice(0, 10)}...`, - value: item.Count, - }; - }); - }; - - const normalizeOrders = ( - orders: OrdersInterface[] | undefined - ): NormalizedOrdersInterface[] | undefined => { - return orders?.map((item: OrdersInterface) => { - return { - key: item.id, - date: item.date, - total: item.Count, - orders: [{ id: "1" }], - }; - }); - }; - - const spliceOrdersWithSameDate = ( - normalizedOrders: NormalizedOrdersInterface[] - ) => { - return normalizedOrders?.reduce( - ( - acc: { key: string; date: number; total: number }[], - curr: NormalizedOrdersInterface - ) => { - const index = acc.findIndex((item) => item.date === curr.date); - if (index === -1) { - acc.push(curr); - } else { - acc[index].total += curr.total; - } - return acc; - }, - [] - ); - }; - - useEffect(() => { - const normalizedOrders = normalizeOrders(data?.adminGetMenuOrders); - - if (!normalizedOrders) return; - - const splicedOrders = spliceOrdersWithSameDate(normalizedOrders); - - splicedOrders?.sort((a, b) => { - return dayjs(a.date).isBefore(dayjs(b.date)) ? -1 : 1; - }); - - setDataSource(splicedOrders); - }, [data]); +const Page = () => { + const token = getToken(); - return ( -
-
- - Objednávky - -
-
- { - const dayjsDates = - dates && dates?.length > 0 - ? [ - dayjs.unix(dates[0]?.unix() ?? 0), - dayjs.unix(dates[1]?.unix() ?? 0), - ] - : undefined; - setDate(dayjsDates); - }} - /> - -
- -
-
- setModalOpen(false)} - title={`Statistiky pro ${selectedOrders?.[0]?.date}`} - > -
- -
-
-
- ); + return ; }; -export default Statistics; +export default Page; diff --git a/src/app/page.tsx b/src/app/page.tsx index 40a2f4c..2d7b6d4 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,109 +1,14 @@ -"use client"; - -import React, { useEffect } from "react"; -import { useRouter } from "next/navigation"; -import { LockOutlined, UserOutlined } from "@ant-design/icons"; -import { Button, Form, Input, message, Typography } from "antd"; -import { useLazyQuery } from "@apollo/client"; -import login from "@/queries/login"; +import { cookies } from "next/headers"; +import LoginPage from "@/components/Login/LoginPage"; const HomePage = () => { - const [messageApi, contextHolder] = message.useMessage(); - const { Title } = Typography; - const router = useRouter(); - - const [loginQuery, { data, error }] = useLazyQuery(login, { - fetchPolicy: "network-only", - }); - - useEffect(() => { - if (!data?.login) return; - - localStorage.setItem("token", data.login); - router.push("/admin"); - }, [data]); - - useEffect(() => { - if (error) { - messageApiError(); - } - }, [error]); - - const messageApiError = () => { - messageApi.open({ - type: "error", - content: "Zadané údaje nejsou správné!", - }); - }; + const setToken = async (token: string) => { + "use server"; - const onFinish = (values: { email: string; password: string }) => { - loginQuery({ - variables: { - email: values.email, - password: values.password, - }, - }); + cookies().set("token", token); }; - return ( - <> - {contextHolder} -
-
-

Vítejte v

- - Menuroo - -
- - } - placeholder="Email" - size="large" - /> - - - } - type="password" - placeholder="Heslo" - size="large" - /> - - - - - -
-
- - ); + return ; }; export default HomePage; diff --git a/src/components/AdminPage/AdminPage.tsx b/src/components/AdminPage/AdminPage.tsx new file mode 100644 index 0000000..d345a05 --- /dev/null +++ b/src/components/AdminPage/AdminPage.tsx @@ -0,0 +1,129 @@ +"use client"; + +import React, { useEffect, useState } from "react"; +import { useLazyQuery } from "@apollo/client"; +import { useRouter } from "next/navigation"; +import { Typography, Calendar } from "antd"; +import type { Dayjs } from "dayjs"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import pickerLocale from "@/constants/PickerLocale"; +import getMenusByDate from "@/queries/getMenusByDate"; +import { MenuInterface } from "@/types/MenuInterface"; + +interface Props { + token: string; +} + +const AdminPage = (props: Props) => { + dayjs.extend(utc); + const [menuMap, setMenuMap] = useState | undefined>( + undefined + ); + const [viewedDatesUnix, setViewedDatesUnix] = useState([ + dayjs().startOf("month").subtract(5, "day").unix(), + dayjs().endOf("month").add(15, "day").unix(), + ]); + const { Title } = Typography; + const [value, setValue] = useState(dayjs().format("YYYY-MM-DD")); + const router = useRouter(); + const currentDate = dayjs().utc(); + + const [menusByDate, { data }] = useLazyQuery(getMenusByDate, { + context: { + headers: { + Authorization: props.token, + }, + }, + fetchPolicy: "network-only", + }); + + const onSelect = (newValue: Dayjs) => { + if (newValue.format("YYYY-MM-DD") !== value) { + setValue(newValue.format("YYYY-MM-DD")); + return; + } + router.push(`/admin/${newValue.format("YYYY-MM-DD")}`); + }; + + useEffect(() => { + menusByDate({ + variables: { + dateFrom: viewedDatesUnix[0], + dateTo: viewedDatesUnix[1], + }, + }); + }, [viewedDatesUnix]); + + useEffect(() => { + if (!data?.getMenusByDate) return; + + const menuList: MenuInterface[] = data.getMenusByDate; + + const menuMap = new Map(); + + for (let menu of menuList) { + const date = menu.date; + if (menuMap.has(date)) { + menuMap.set(date, menuMap.get(date) + 1); + } else { + menuMap.set(date, 1); + } + } + + setMenuMap((prevMenuMap) => { + const newMenuMap = new Map(prevMenuMap); + for (let [date, count] of menuMap.entries()) { + if (newMenuMap.has(date) && !prevMenuMap?.has(date)) { + newMenuMap.set(date, newMenuMap.get(date) + count); + } else { + newMenuMap.set(dayjs.unix(date).utc().unix(), count); + } + } + return newMenuMap; + }); + }, [data]); + + const mapHasValue = (timestamp: number) => { + return menuMap?.has(timestamp); + }; + + const getMapValueByDate = (timestamp: number) => { + const date = dayjs.unix(timestamp).utc().startOf("day").unix(); + return menuMap?.get(date); + }; + + return ( +
+
+ + Jídelní lístek + +
+ + setViewedDatesUnix([ + e.startOf("month").unix(), + e.endOf("month").unix(), + ]) + } + locale={pickerLocale} + cellRender={(date: Dayjs) => { + return ( +
+

+ {mapHasValue(date.utc().startOf("day").unix()) + ? `(${getMapValueByDate(date.unix())})` + : null} +

+
+ ); + }} + /> +
+
+
+ ); +}; +export default AdminPage; diff --git a/src/components/CreateMenu/CreateMenu.tsx b/src/components/CreateMenu/CreateMenu.tsx new file mode 100644 index 0000000..1385f11 --- /dev/null +++ b/src/components/CreateMenu/CreateMenu.tsx @@ -0,0 +1,309 @@ +"use client"; + +import React, { useEffect, useState } from "react"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import { useRouter } from "next/navigation"; +import { Typography, Card, Button, Spin, message } from "antd"; +import MenuItem from "@/components/MenuItem/MenuItem"; +import { PlusOutlined } from "@ant-design/icons"; +import { MealOptionsInterface } from "@/types/MealOptionsInterface"; +import { useQuery } from "@apollo/experimental-nextjs-app-support/ssr"; +import { useMutation } from "@apollo/client"; +import adminGetMainDishes from "@/queries/adminGetMainDishes"; +import adminGetSoups from "@/queries/adminGetSoups"; +import adminGetDrinks from "@/queries/adminGetDrinks"; +import adminCreateMenus from "@/queries/adminCreateMenus"; +import adminCreateMenu from "@/queries/adminCreateMenu"; +import adminUpdateMenu from "@/queries/adminUpdateMenus"; +import adminDeleteMenu from "@/queries/adminDeleteMenu"; +import getMenusByDate from "@/queries/getMenusByDate"; +import { MenuInterface } from "@/types/MenuInterface"; +import adminGetAllFoodPriceLvls from "@/queries/adminGetAllFoodPriceLvls"; +import { NoticeType } from "antd/lib/message/interface"; +import getTime from "@/lib/getTime"; + +const CreateMenu = ({ + params, + token, +}: { + params: { date: string }; + token: string; +}) => { + dayjs.extend(utc); + const menuByDate = useQuery(getMenusByDate, { + variables: { + dateFrom: getTime({ + date: params.date, + day: "middle", + }), + dateTo: getTime({ + date: params.date, + day: "middle", + }), + }, + context: { + headers: { + Authorization: token, + }, + }, + fetchPolicy: "network-only", + }); + + const [menuIsSet, setMenuIsSet] = useState(false); + const [createMenus] = useMutation(adminCreateMenus); + const [createMenu] = useMutation(adminCreateMenu); + const [updateMenu] = useMutation(adminUpdateMenu); + const [deleteMenu] = useMutation(adminDeleteMenu); + const parsedMenu: MenuInterface[] = menuByDate.data?.getMenusByDate.map( + (item: any) => { + return { + id: item.id, + order: item.Order, + key: item.id, + level: item.priceLvlId, + meal: item.meal, + soup: item.soup, + drink: item.drink, + }; + } + ); + const [menu, setMenu] = useState(undefined); + const [menuOptions, setMenuOptions] = useState< + MealOptionsInterface | undefined + >(); + const [idsForDeletion, setIdsForDeletion] = useState([]); + const [messageApi, contextHolder] = message.useMessage(); + const { Title } = Typography; + const router = useRouter(); + + const options = { + context: { + headers: { + Authorization: token, + }, + }, + }; + + const levelsQuery = useQuery(adminGetAllFoodPriceLvls, options); + const mainDishesQuery = useQuery(adminGetMainDishes, options); + const soupsQuery = useQuery(adminGetSoups, options); + const drinksQuery = useQuery(adminGetDrinks, options); + + useEffect(() => { + if (!parsedMenu || parsedMenu.length < 1 || menuIsSet) return; + + setMenuIsSet(true); + parsedMenu.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)); + setMenu(parsedMenu); + }, [parsedMenu]); + + useEffect(() => { + if ( + !mainDishesQuery.data?.adminGetMainDishes || + !soupsQuery.data?.adminGetSoups || + !drinksQuery.data?.adminGetDrinks + ) + return; + + setMenuOptions({ + meal: mainDishesQuery.data.adminGetMainDishes.map((item: string) => ({ + value: item, + })), + soup: soupsQuery.data.adminGetSoups.map((item: string) => ({ + value: item, + })), + drink: drinksQuery.data.adminGetDrinks.map((item: string) => ({ + value: item, + })), + }); + }, [mainDishesQuery.data, soupsQuery.data, drinksQuery.data]); + + const handleSubmit = () => { + if (!menuIsSet) { + createMenus({ + variables: { + input: menu + ? menu?.map((item: MenuInterface) => { + return { + date: getTime({ + date: params.date, + day: "middle", + }), + order: item.order, + priceLvl: item.level, + meal: item.meal, + soup: item.soup, + drink: item.drink, + }; + }) + : [], + }, + context: { + headers: { + Authorization: token, + }, + }, + }); + + router.push("/admin"); + return; + } + + updateMenu({ + variables: { + input: menu + ? menu + ?.filter( + (item: MenuInterface) => + item.id && !idsForDeletion.includes(item.id) + ) + .map((item: MenuInterface) => { + return { + id: item.id, + date: getTime({ + date: params.date, + day: "middle", + }), + order: item.order, + priceLvl: item.level, + meal: item.meal, + soup: item.soup, + drink: item.drink, + }; + }) + : [], + }, + context: { + headers: { + Authorization: token, + }, + }, + }); + + (menu ?? []) + .filter((item: MenuInterface) => !item.id) + .forEach((item: MenuInterface) => { + createMenu({ + variables: { + input: { + date: getTime({ + date: params.date, + day: "middle", + }), + order: item.order, + priceLvl: item.level, + meal: item.meal, + soup: item.soup, + drink: item.drink, + }, + }, + context: { + headers: { + Authorization: token, + }, + }, + }); + }); + + idsForDeletion.forEach((id) => { + deleteMenu({ + variables: { + id: id, + }, + context: { + headers: { + Authorization: token, + }, + }, + }); + }); + + messageApiSuccess("Menu bylo úspěšně uloženo!", "success"); + }; + + const handleDelete = () => { + (menu ?? []).forEach((item) => { + deleteMenu({ + variables: { + id: item.id, + }, + context: { + headers: { + Authorization: token, + }, + }, + }); + }); + + router.push("/admin"); + }; + + const messageApiSuccess = (message: string, type: NoticeType | undefined) => { + messageApi.open({ + type: type, + content: message, + }); + }; + + return ( +
+ {contextHolder} + + Menu {params.date} + +
+ {(menu ?? []).map((item) => { + return ( + + ); + })} + + setMenu([ + ...(menu ?? []), + { + key: menu ? menu[menu.length - 1].key + 1 : 0, + level: 0, + meal: "", + soup: "", + drink: "", + order: (menu?.length ?? 0) + 1, + }, + ]) + } + hoverable={true} + bordered={true} + > + + +
+
+ {menuIsSet && ( + + )} + + +
+
+ {menuByDate.loading && } +
+
+ ); +}; + +export default CreateMenu; diff --git a/src/components/Layout/constants.ts b/src/components/Layout/constants.ts index 45ad509..afe2c66 100644 --- a/src/components/Layout/constants.ts +++ b/src/components/Layout/constants.ts @@ -11,10 +11,10 @@ export const navbarItems = [ key: "3", label: "Objednávky", }, - { - key: "4", - label: "Účetní pohyby", - }, + // { + // key: "4", + // label: "Účetní pohyby", + // }, { key: "5", label: "Nastavení", diff --git a/src/components/Login/LoginPage.tsx b/src/components/Login/LoginPage.tsx new file mode 100644 index 0000000..2af5f4b --- /dev/null +++ b/src/components/Login/LoginPage.tsx @@ -0,0 +1,114 @@ +"use client"; + +import React, { useEffect } from "react"; +import { useRouter } from "next/navigation"; +import { LockOutlined, UserOutlined } from "@ant-design/icons"; +import { Button, Form, Input, message, Typography } from "antd"; +import { useLazyQuery } from "@apollo/client"; +import login from "@/queries/login"; + +interface Props { + setToken: (token: string) => void; +} + +const LoginPage = (props: Props) => { + const [messageApi, contextHolder] = message.useMessage(); + const { Title } = Typography; + const router = useRouter(); + + const [loginQuery, { data, error }] = useLazyQuery(login, { + fetchPolicy: "network-only", + }); + + useEffect(() => { + if (!data?.login) return; + + props.setToken(data.login); + localStorage.setItem("token", data.login); + router.push("/admin"); + }, [data]); + + useEffect(() => { + if (error) { + messageApiError(); + } + }, [error]); + + const messageApiError = () => { + messageApi.open({ + type: "error", + content: "Zadané údaje nejsou správné!", + }); + }; + + const onFinish = (values: { email: string; password: string }) => { + loginQuery({ + variables: { + email: values.email, + password: values.password, + }, + }); + }; + + return ( + <> + {contextHolder} +
+
+

Vítejte v

+ + Menuroo + +
+ + } + placeholder="Email" + size="large" + /> + + + } + type="password" + placeholder="Heslo" + size="large" + /> + + + + + +
+
+ + ); +}; + +export default LoginPage; diff --git a/src/components/LunchItem/LunchItem.tsx b/src/components/LunchItem/LunchItem.tsx index adbed22..70808ce 100644 --- a/src/components/LunchItem/LunchItem.tsx +++ b/src/components/LunchItem/LunchItem.tsx @@ -5,7 +5,7 @@ interface LunchItemProps { } const LunchItem = ({ lunch }: LunchItemProps) => { - const { date, options } = lunch; + const { date } = lunch; return
{date}
; }; diff --git a/src/components/LunchOrderTable.tsx b/src/components/LunchOrderTable.tsx index b27687c..a94dc2b 100644 --- a/src/components/LunchOrderTable.tsx +++ b/src/components/LunchOrderTable.tsx @@ -1,14 +1,10 @@ "use client"; -import { useEffect, useState } from "react"; import dayjs from "dayjs"; -import type { LunchOrder, NormalizedLunchOrder } from "@/types/LunchOrder"; +import type { LunchOrder } from "@/types/LunchOrder"; import OrderItem from "./OrderItem"; const LunchOrderTable = ({ data }: { data: LunchOrder[] }) => { - const [normalizedData, setNormalizedData] = useState( - [] - ); const columns = [ { title: "Jméno", @@ -19,8 +15,7 @@ const LunchOrderTable = ({ data }: { data: LunchOrder[] }) => { title: "Čas", dataIndex: "date", key: "date", - render: (e: number) => { - const date = dayjs.unix(e).utc().format("DD.MM.YYYY"); + render: () => { return

test

; }, }, @@ -36,15 +31,6 @@ const LunchOrderTable = ({ data }: { data: LunchOrder[] }) => { }, ]; - useEffect(() => { - setNormalizedData( - data?.map((order) => ({ - ...order, - date: dayjs.unix(order.date).format("HH:mm"), - })) - ); - }, [data]); - return (
@@ -54,8 +40,8 @@ const LunchOrderTable = ({ data }: { data: LunchOrder[] }) => {
))}
- {normalizedData?.length > 0 && - normalizedData?.map((order: LunchOrder, index: number) => ( + {data?.length > 0 && + data?.map((order: LunchOrder, index: number) => ( { - const [value, setValue] = useState(""); const [options, setOptions] = useState<{ value: string }[]>([]); const filterMenuOptions = ( diff --git a/src/components/MenuItem/MenuItem.tsx b/src/components/MenuItem/MenuItem.tsx index 4282155..c335824 100644 --- a/src/components/MenuItem/MenuItem.tsx +++ b/src/components/MenuItem/MenuItem.tsx @@ -2,13 +2,9 @@ import React, { useEffect, useState } from "react"; import { - Col, Card, - AutoComplete, - Row, Select, Button, - Input, InputNumber, } from "antd"; import { MealOptionsInterface } from "@/types/MealOptionsInterface"; @@ -37,7 +33,6 @@ const MenuItem = ({ }: MenuItemProps) => { const [menuIsSet, setMenuIsSet] = useState(false); const [level, setLevel] = useState(1); - const [menuItemType, setMenuItemType] = useState(""); const [meal, setMeal] = useState(""); const [soup, setSoup] = useState(""); const [drink, setDrink] = useState(""); diff --git a/src/components/OrderItem.tsx b/src/components/OrderItem.tsx index d28c421..668c09e 100644 --- a/src/components/OrderItem.tsx +++ b/src/components/OrderItem.tsx @@ -3,7 +3,6 @@ import React from "react"; import type { LunchOrder } from "@/types/LunchOrder"; import dayjs from "dayjs"; -import utc from "dayjs/plugin/utc"; const OrderItem = ({ order, @@ -29,7 +28,9 @@ const OrderItem = ({

{order.order}

-

{order.date}

+

+ {dayjs.unix(order.date).format("HH:mm")} +

{order.meal}

{order.name}

diff --git a/src/components/QueuePage/QueuePage.tsx b/src/components/QueuePage/QueuePage.tsx new file mode 100644 index 0000000..8e74dcc --- /dev/null +++ b/src/components/QueuePage/QueuePage.tsx @@ -0,0 +1,72 @@ +"use client"; + +import React, { useEffect, useState } from "react"; +import { useLazyQuery } from "@apollo/client"; +import PageTitle from "@/components/PageTitle"; +import LunchOrderTable from "@/components/LunchOrderTable"; +import { Button, DatePicker } from "antd"; +import RefreshButton from "@/components/RefreshButton"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import pickerLocale from "@/constants/PickerLocale"; +import waiterOrders from "@/queries/waiterOrders"; + +interface Props { + token: string; +} + +const QueuePage = (props: Props) => { + dayjs.extend(utc); + const [date, setDate] = useState(undefined); + + const [waiterQuery, { data }] = useLazyQuery(waiterOrders, { + context: { + headers: { + Authorization: props.token, + }, + }, + fetchPolicy: "network-only", + }); + + useEffect(() => { + queryOrders(); + }, []); + + const queryOrders = () => { + waiterQuery({ + variables: { + date: date ? date : dayjs().utc().startOf("day").unix(), + }, + }); + }; + + return ( +
+
+ Výdej +
+
+ +
+ { + setDate( + date ? dayjs(date?.format()).utc().unix() : undefined + ); + }} + /> + +
+
+ +
+
+
+ ); +}; + +export default QueuePage; diff --git a/src/components/Settings/components/PriceLevel/PriceLevel.tsx b/src/components/Settings/components/PriceLevel/PriceLevel.tsx new file mode 100644 index 0000000..3da6b35 --- /dev/null +++ b/src/components/Settings/components/PriceLevel/PriceLevel.tsx @@ -0,0 +1,191 @@ +"use client"; + +import { useMutation } from "@apollo/client"; +import { Button, Table, Form, Input, InputNumber } from "antd"; +import { useState } from "react"; +import React from "react"; +import type { ColumnsType } from "antd/lib/table"; +import ModifyModal from "../modals/ModifyModal/ModifyModal"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import { + CreatePriceLevelInterface, + PriceLevelInterface, +} from "@/types/PriceLevelInterface"; +import adminCreateFoodPriceLvl from "@/queries/adminCreateFoodPriceLvl"; +import adminDeleteFoodPriceLvl from "@/queries/adminDeleteFoodPriceLvl"; +import adminUpdateFoodPriceLvl from "@/queries/adminUpdateFoodPriceLvl"; + +interface Props { + revalidateData: () => void; + data: PriceLevelInterface[]; + token: string; +} + +const PriceLevel = (props: Props) => { + dayjs.extend(utc); + + const [formRef, setFormRef] = useState(undefined); + + const [createFoodPriceLevel] = useMutation(adminCreateFoodPriceLvl); + const [updateFoodPriceLevel] = useMutation(adminUpdateFoodPriceLvl); + const [deleteFoodPriceLevel] = useMutation(adminDeleteFoodPriceLvl); + + const [createPriceModalOpen, setCreatePriceModalOpen] = useState(false); + const [editPriceModalOpen, setEditPriceModalOpen] = useState(false); + + const [selectedRowData, setSelectedRowData] = useState(); + + const actionCallback = (record: PriceLevelInterface) => { + setSelectedRowData(record); + setEditPriceModalOpen(true); + }; + + const priceColumns: ColumnsType = [ + { + title: "Název", + dataIndex: "name", + }, + // { + // title: "ID", + // dataIndex: "id", + // render: (text, record) =>

{record.id}

, + // }, + { + title: "Akce", + dataIndex: "actions", + render: (text, record) => ( + + ), + }, + ]; + + const createModalSubmitCallback = (data: CreatePriceLevelInterface) => { + createFoodPriceLevel({ + variables: { + FoodPriceLvlName: data.name, + }, + context: { + headers: { + Authorization: props.token, + }, + }, + }); + + props.revalidateData(); + }; + + const deleteModalSubmitCallback = () => { + if (!selectedRowData) { + return; + } + + deleteFoodPriceLevel({ + variables: { + foodPriceLvlID: selectedRowData.id, + }, + context: { + headers: { + Authorization: props.token, + }, + }, + }); + + props.revalidateData(); + }; + + const updateModalSubmitCallback = (data: PriceLevelInterface) => { + if (!data) { + return; + } + + updateFoodPriceLevel({ + variables: { + foodPriceLvlID: data.id, + input: { + name: data.name, + }, + }, + context: { + headers: { + Authorization: props.token, + }, + }, + }); + + props.revalidateData(); + }; + + return ( +
+ + title="Vytvořit cenovou hladinu" + modalOpen={createPriceModalOpen} + setModalOpen={setCreatePriceModalOpen} + onSubmit={createModalSubmitCallback} + > + + + + + + + + + , + ]} + > + + + + + + +
+
+

Cenová hladina

+ +
+
+ + + ); +}; + +export default PriceLevel; diff --git a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx new file mode 100644 index 0000000..5510229 --- /dev/null +++ b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx @@ -0,0 +1,343 @@ +"use client"; + +import { useMutation } from "@apollo/client"; +import { + Button, + Table, + Form, + Input, + InputNumber, + DatePicker, + Select, +} from "antd"; +import { useState } from "react"; +import React from "react"; +import type { ColumnsType } from "antd/lib/table"; +import type { + CreatePriceTypeGroupInterface, + GetPriceLevelGroupInterface, + MutatedPriceLevelGroupInterface, +} from "@/components/Settings/types"; +import adminCreatePriceLvlGroup from "@/queries/adminCreatePriceLvlGroup"; +import adminDeletePriceLvlGroup from "@/queries/adminDeletePriceLvlGroup"; +import adminUpdatePriceLvlGroup from "@/queries/adminUpdatePriceLvlGroup"; +import getTime from "@/lib/getTime"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import ModifyModal from "../modals/ModifyModal/ModifyModal"; +import pickerLocale from "@/constants/PickerLocale"; +import { PriceLevelInterface } from "@/types/PriceLevelInterface"; + +interface Props { + data: GetPriceLevelGroupInterface[]; + priceLevels: PriceLevelInterface[]; + userGroups: PriceLevelInterface[]; + token: string; + revalidateData: () => void; +} + +const PriceLevelGroup = (props: Props) => { + dayjs.extend(utc); + + const [formRef, setFormRef] = useState(undefined); + + const [createPriceLvlGroup] = useMutation(adminCreatePriceLvlGroup); + const [updatePriceLvlGroup] = useMutation(adminUpdatePriceLvlGroup); + const [deletePriceLvlGroup] = useMutation(adminDeletePriceLvlGroup); + + const [createPriceModalOpen, setCreatePriceModalOpen] = useState(false); + const [editPriceModalOpen, setEditPriceModalOpen] = useState(false); + + const [selectedRowData, setSelectedRowData] = + useState(); + + const { RangePicker } = DatePicker; + + const actionCallback = (record: GetPriceLevelGroupInterface) => { + const mutatedRecord: MutatedPriceLevelGroupInterface = { + ...record, + ValidFromTo: [dayjs.unix(record.ValidFrom), dayjs.unix(record.ValidTo)], + UserGroup: record.UserGroup.name, + FoodPriceLevel: record.FoodPriceLevel.name, + UserGroupExtended: record.UserGroup, + FoodPriceLevelExtended: record.FoodPriceLevel, + }; + + setSelectedRowData(mutatedRecord); + setEditPriceModalOpen(true); + }; + + const priceColumns: ColumnsType = [ + { + title: "Název", + dataIndex: "name", + render: (text, record) =>

{record.UserGroup.name}

, + }, + { + title: "Cena", + dataIndex: "price", + render: (text, record) =>

{record.price} Kč

, + }, + // { + // title: "ID", + // dataIndex: "id", + // render: (text, record) =>

{record.id}

, + // }, + { + title: "Akce", + dataIndex: "actions", + render: (text, record) => ( + + ), + }, + ]; + + const createModalSubmitCallback = (data: CreatePriceTypeGroupInterface) => { + const result = { + id: data.id, + key: data.key, + Price: data.Price, + ValidTo: getTime({ + date: dayjs(data.ValidFromTo[1]).format("YYYY-MM-DD"), + day: "start", + }), + ValidFrom: getTime({ + date: dayjs(data.ValidFromTo[0]).format("YYYY-MM-DD"), + day: "start", + }), + UserGroupID: data.UserGroupID, + FoodPriceLevelID: data.FoodPriceLevelID, + }; + + createPriceLvlGroup({ + variables: { + input: result, + }, + context: { + headers: { + Authorization: props.token, + }, + }, + }); + + props.revalidateData(); + }; + + const deleteModalSubmitCallback = () => { + if (!selectedRowData) { + return; + } + + deletePriceLvlGroup({ + variables: { + priceLvlGroupID: selectedRowData.id, + }, + context: { + headers: { + Authorization: props.token, + }, + }, + }); + + props.revalidateData(); + }; + + const updateModalSubmitCallback = (data: MutatedPriceLevelGroupInterface) => { + if (!data) { + return; + } + + const tryParseInt = (value: string | number) => { + const parsedValue = parseInt(value as string); + + if (isNaN(parsedValue)) { + return false; + } + + return parsedValue; + }; + + const result = { + Price: data.price, + ValidTo: getTime({ + date: dayjs(data.ValidFromTo[1]).format("YYYY-MM-DD"), + day: "start", + }), + ValidFrom: getTime({ + date: dayjs(data.ValidFromTo[0]).format("YYYY-MM-DD"), + day: "start", + }), + UserGroupID: tryParseInt(data.UserGroup) + ? data.UserGroup + : data.UserGroupExtended.id, + FoodPriceLevelID: tryParseInt(data.FoodPriceLevel) + ? data.FoodPriceLevel + : data.FoodPriceLevelExtended.id, + }; + + updatePriceLvlGroup({ + variables: { + priceLvlGroupID: data.id, + input: result, + }, + context: { + headers: { + Authorization: props.token, + }, + }, + }); + + props.revalidateData(); + }; + + const mutateDataToSelect = (data: PriceLevelInterface[]) => { + return data.map((item) => ({ + label: item.name, + value: item.id, + })); + }; + + return ( +
+ + title="Vytvořte skupinu cenové hladiny" + modalOpen={createPriceModalOpen} + setModalOpen={setCreatePriceModalOpen} + onSubmit={createModalSubmitCallback} + > + + + + + + + + + + + + title="Upravte skupinu cenové hladiny" + modalOpen={editPriceModalOpen} + setModalOpen={setEditPriceModalOpen} + data={selectedRowData} + onSubmit={updateModalSubmitCallback} + setFormRef={setFormRef} + footer={[ + <> + + + + , + ]} + > + + + + + + + + + + + + + + + +
+
+

+ Nastavení cenové hl. pro skupinu uživatelů +

+ +
+
+ + + ); +}; + +export default PriceLevelGroup; diff --git a/src/components/Settings/components/UserGroup/EmailHandles.tsx b/src/components/Settings/components/UserGroup/EmailHandles.tsx new file mode 100644 index 0000000..07b813b --- /dev/null +++ b/src/components/Settings/components/UserGroup/EmailHandles.tsx @@ -0,0 +1,47 @@ +import { useEffect, useState } from "react"; +import { Button, Form, Input } from "antd"; + +interface Props { + count?: number; +} + +const EmailHandles = (props: Props) => { + const [handles, setHandles] = useState([{ key: 0, value: "" }]); + + const addHandle = () => { + setHandles((prev) => [...prev, { key: prev.length, value: "" }]); + }; + + useEffect(() => { + // for each create a new empty + if (!props.count) { + return; + } + + console.log(props.count); + + const newHandles = []; + for (let i = 0; i < props.count; i++) { + newHandles.push({ key: i, value: "" }); + } + setHandles(newHandles); + }, [props.count]); + + return ( + <> + {handles.map((handle, index) => ( + + + + ))} + + + ); +}; + +export default EmailHandles; diff --git a/src/components/Settings/components/UserGroup/UserGroup.tsx b/src/components/Settings/components/UserGroup/UserGroup.tsx new file mode 100644 index 0000000..cada8e7 --- /dev/null +++ b/src/components/Settings/components/UserGroup/UserGroup.tsx @@ -0,0 +1,230 @@ +"use client"; + +import { useMutation } from "@apollo/client"; +import { Button, Table, Form, Input, InputNumber } from "antd"; +import { useState } from "react"; +import React from "react"; +import type { ColumnsType } from "antd/lib/table"; +import dayjs from "dayjs"; +import ModifyModal from "../modals/ModifyModal/ModifyModal"; +import utc from "dayjs/plugin/utc"; +import { + CreatePriceLevelInterface, + PriceLevelInterface, +} from "@/types/PriceLevelInterface"; +import adminCreateUserGroup from "@/queries/adminCreateUserGroup"; +import adminDeleteUserGroup from "@/queries/adminDeleteUserGroup"; +import adminUpdateUserGroup from "@/queries/adminUpdateUserGroup"; +import { getClient } from "@/lib/ssrApolloClient"; +import { + CreateUserGroupInterface, + UserGroupInterface, +} from "@/components/Settings/types"; +import EmailHandles from "./EmailHandles"; + +interface Props { + revalidateData: () => void; + data: UserGroupInterface[]; + token: string; +} + +const UserGroup = (props: Props) => { + dayjs.extend(utc); + + const [formRef, setFormRef] = useState(undefined); + + const [createUserGroup] = useMutation(adminCreateUserGroup); + const [updateUserGroup] = useMutation(adminUpdateUserGroup); + const [deleteUserGroup] = useMutation(adminDeleteUserGroup); + + const [createPriceModalOpen, setCreatePriceModalOpen] = useState(false); + const [editPriceModalOpen, setEditPriceModalOpen] = useState(false); + + const [selectedRowData, setSelectedRowData] = useState(); + + const [domainInputCount, setDomainInputCount] = useState(0); + + const actionCallback = (record: UserGroupInterface) => { + let domainCount = 0; + const emailHandlesObject = record.emailHandles.reduce( + (acc, handle, index) => { + // @ts-ignore + acc[`emailHandle${index}`] = handle; + domainCount++; + return acc; + }, + {} + ); + + // @ts-ignore + setSelectedRowData({ ...record, ...emailHandlesObject }); + setDomainInputCount(domainCount); + setEditPriceModalOpen(true); + }; + + const priceColumns: ColumnsType = [ + { + title: "Název", + dataIndex: "name", + }, + // { + // title: "ID", + // dataIndex: "id", + // render: (text, record) =>

{record.id}

, + // }, + { + title: "Akce", + dataIndex: "actions", + render: (text, record) => ( + + ), + }, + ]; + + const getDomainHandles = (data: any) => { + const emailHandleKeys = Object.keys(data).filter((key) => + key.startsWith("emailHandle") + ); + + emailHandleKeys.sort((a, b) => { + const numA = parseInt(a.replace("emailHandle", ""), 10); + const numB = parseInt(b.replace("emailHandle", ""), 10); + return numA - numB; + }); + + return emailHandleKeys.map((key) => data[key]); + }; + + const createModalSubmitCallback = (data: CreateUserGroupInterface) => { + console.log(data); + createUserGroup({ + variables: { + input: { name: data.name, emailHandles: getDomainHandles(data) }, + }, + context: { + headers: { + Authorization: props.token, + }, + }, + }); + + props.revalidateData(); + }; + + const deleteModalSubmitCallback = () => { + if (!selectedRowData) { + return; + } + + deleteUserGroup({ + variables: { + userGroupID: selectedRowData.id, + }, + context: { + headers: { + Authorization: props.token, + }, + }, + }); + + props.revalidateData(); + }; + + const updateModalSubmitCallback = (data: UserGroupInterface) => { + console.log("ehre", data); + if (!data) { + return; + } + + updateUserGroup({ + variables: { + userGroupID: data.id, + input: { + name: data.name, + }, + }, + context: { + headers: { + Authorization: props.token, + }, + }, + }); + + props.revalidateData(); + }; + + return ( +
+ + title="Vytvořit skupinu uživatelů" + modalOpen={createPriceModalOpen} + setModalOpen={setCreatePriceModalOpen} + onSubmit={createModalSubmitCallback} + > + + + + + + + + + + , + ]} + > + + + + + + +
+
+

Skupiny uživatelů

+ +
+
+ + + ); +}; + +export default UserGroup; diff --git a/src/components/Settings/components/index.ts b/src/components/Settings/components/index.ts new file mode 100644 index 0000000..6a4d875 --- /dev/null +++ b/src/components/Settings/components/index.ts @@ -0,0 +1,3 @@ +export { default as PriceLevel } from "./PriceLevel/PriceLevel"; +export { default as UseGroup } from "./UserGroup/UserGroup"; +export { default as PriceLevelGroup } from "./PriceLevelGroup/PriceLevelGroup"; diff --git a/src/components/Settings/components/modals/ModifyModal/ModifyModal.tsx b/src/components/Settings/components/modals/ModifyModal/ModifyModal.tsx new file mode 100644 index 0000000..8341cca --- /dev/null +++ b/src/components/Settings/components/modals/ModifyModal/ModifyModal.tsx @@ -0,0 +1,74 @@ +import React, { + SetStateAction, + Dispatch, + ReactNode, + useLayoutEffect, +} from "react"; +import { Modal, Form } from "antd"; + +interface Props { + setFormRef?: Dispatch>; + title: string; + modalOpen: boolean; + setModalOpen: Dispatch>; + onSubmit: (data: T) => void; + data?: T | undefined; + children: ReactNode; + footer?: ReactNode; +} + +const ModifyModal = (props: Props) => { + const [form] = Form.useForm(); + + useLayoutEffect(() => { + if (props.setFormRef) { + props.setFormRef(form); + } + }, [props.setFormRef, form]); + + useLayoutEffect(() => { + if (!props.data) { + return; + } + + form.setFieldsValue(props.data); + }, [props.modalOpen]); + + const onSubmit = () => { + form + .validateFields() + .then((values) => { + props.onSubmit(values); + props.setModalOpen(false); + form.resetFields(); + }) + .catch(() => {}); + }; + + return ( + { + props.setModalOpen(false); + form.resetFields(); + }} + footer={props.footer} + > +
+ {props.children} + +
+ ); +}; + +export default ModifyModal; diff --git a/src/components/Settings/types.ts b/src/components/Settings/types.ts new file mode 100644 index 0000000..d26c472 --- /dev/null +++ b/src/components/Settings/types.ts @@ -0,0 +1,64 @@ +import dayjs, { Dayjs } from "dayjs"; +import React from "react"; + +export interface GetPriceLevelGroupInterface { + id: number; + price: number; + UserGroup: { + id: number; + name: string; + }; + FoodPriceLevel: { + id: number; + name: string; + }; + ValidFrom: number; + ValidTo: number; + ValidFromTo: Dayjs[]; +} + +export interface MutatedPriceLevelGroupInterface { + id: number; + price: number; + UserGroup: string; + FoodPriceLevel: string; + UserGroupExtended: { + id: number; + name: string; + }; + FoodPriceLevelExtended: { + id: number; + name: string; + }; + ValidFrom: number; + ValidTo: number; + ValidFromTo: Dayjs[]; +} + +export interface CreatePriceTypeGroupInterface { + key: React.Key; + Price: number; + id: number; + ValidFromTo: [dayjs.Dayjs, dayjs.Dayjs]; + FoodPriceLevelID: number; + UserGroupID: number; +} + +export interface GroupType { + key: React.Key; + name: string; + price: number; + dateFrom: Date; + dateTo: Date; +} + +export interface UserGroupInterface { + id: number; + name: string; + emailHandles: string[]; +} + +export interface CreateUserGroupInterface { + name: string; + emailHandle: string[]; +} diff --git a/src/components/Settings/utils.ts b/src/components/Settings/utils.ts new file mode 100644 index 0000000..6f8494c --- /dev/null +++ b/src/components/Settings/utils.ts @@ -0,0 +1,2 @@ +export const generateEmailDomainFormName = (index: number) => + `Doména ${index + 1}`; diff --git a/src/components/StatisticModalChart/StatisticModalChart.tsx b/src/components/StatisticModalChart/StatisticModalChart.tsx index 6f37ab9..c560bf1 100644 --- a/src/components/StatisticModalChart/StatisticModalChart.tsx +++ b/src/components/StatisticModalChart/StatisticModalChart.tsx @@ -18,7 +18,7 @@ const StatisticModalChart = (props: { [`počet: ${value}`]} + formatter={(value) => [`počet: ${value}`]} contentStyle={{ backgroundColor: "#fff", borderRadius: "5px", diff --git a/src/components/Statistics/StatisticsPage.tsx b/src/components/Statistics/StatisticsPage.tsx new file mode 100644 index 0000000..553f0e0 --- /dev/null +++ b/src/components/Statistics/StatisticsPage.tsx @@ -0,0 +1,191 @@ +"use client"; + +import React, { useEffect, useState } from "react"; +import { useLazyQuery } from "@apollo/client"; +import { Typography, DatePicker, Button, Modal } from "antd"; +import adminGetMenuOrders from "@/queries/adminGetMenuOrders"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import type { + OrdersInterface, + NormalizedOrdersInterface, + ValueKeyInterface, +} from "@/types/OrdersInterface"; +import StatisticModalChart from "@/components/StatisticModalChart/StatisticModalChart"; +import pickerLocale from "@/constants/PickerLocale"; +import { StatisticsTable } from "@/components/Statistics"; +import getTime from "@/lib/getTime"; + +interface Props { + token: string; +} + +const StatisticsPage = (props: Props) => { + dayjs.extend(utc); + const [modalOpen, setModalOpen] = useState(false); + const [date, setDate] = useState(); + const [selectedOrders, setSelectedOrders] = useState< + OrdersInterface[] | undefined + >(undefined); + const [dataSource, setDataSource] = useState< + { key: string; date: number; total: number }[] | undefined + >(undefined); + + const { Title } = Typography; + const { RangePicker } = DatePicker; + + const [ordersQuery, { data }] = useLazyQuery(adminGetMenuOrders, { + context: { + headers: { + Authorization: props.token, + }, + }, + fetchPolicy: "no-cache", + }); + + const queryOrders = () => { + if (!date?.[0] || !date?.[1]) return; + + ordersQuery({ + variables: { + dateFrom: getTime({ + date: date[0].format("YYYY-MM-DD"), + day: "middle", + }), + dateTo: getTime({ + date: date[1].format("YYYY-MM-DD"), + day: "middle", + }), + }, + }); + }; + + useEffect(() => { + const today = dayjs(); + + const monday = today.startOf("week"); + const nextFriday = today.startOf("week").add(1, "week").add(4, "day"); + + setDate([monday, nextFriday]); + + ordersQuery({ + variables: { + dateFrom: monday.utc().unix(), + dateTo: nextFriday.utc().unix(), + }, + }); + }, []); + + const createValueKeyPairs = ( + orders: OrdersInterface[] | undefined + ): ValueKeyInterface[] | undefined => { + return orders?.map((item: OrdersInterface) => { + return { + key: `${item.Order}. ${item.meal.slice(0, 10)}...`, + value: item.Count, + }; + }); + }; + + const normalizeOrders = ( + orders: OrdersInterface[] | undefined + ): NormalizedOrdersInterface[] | undefined => { + return orders?.map((item: OrdersInterface) => { + return { + key: item.id, + date: item.date, + total: item.Count, + orders: [{ id: "1" }], + }; + }); + }; + + const spliceOrdersWithSameDate = ( + normalizedOrders: NormalizedOrdersInterface[] + ) => { + return normalizedOrders?.reduce( + ( + acc: { key: string; date: number; total: number }[], + curr: NormalizedOrdersInterface + ) => { + const index = acc.findIndex((item) => item.date === curr.date); + if (index === -1) { + acc.push(curr); + } else { + acc[index].total += curr.total; + } + return acc; + }, + [] + ); + }; + + useEffect(() => { + const normalizedOrders = normalizeOrders(data?.adminGetMenuOrders); + + if (!normalizedOrders) return; + + const splicedOrders = spliceOrdersWithSameDate(normalizedOrders); + + splicedOrders?.sort((a, b) => { + return dayjs(a.date).isBefore(dayjs(b.date)) ? -1 : 1; + }); + + setDataSource(splicedOrders); + }, [data]); + + return ( +
+
+ + Objednávky + +
+
+ { + const dayjsDates = + dates && dates?.length > 0 + ? [ + dayjs.unix(dates[0]?.unix() ?? 0), + dayjs.unix(dates[1]?.unix() ?? 0), + ] + : undefined; + setDate(dayjsDates); + }} + /> + +
+ +
+
+ setModalOpen(false)} + title={`Statistiky pro ${selectedOrders?.[0]?.date}`} + > +
+ +
+
+
+ ); +}; + +export default StatisticsPage; diff --git a/src/constants/PickerLocale.ts b/src/constants/PickerLocale.ts index e090f1c..19d0311 100644 --- a/src/constants/PickerLocale.ts +++ b/src/constants/PickerLocale.ts @@ -1,5 +1,4 @@ import { PickerLocale } from "antd/lib/date-picker/generatePicker"; -import { TimePickerLocale } from "antd/lib/time-picker"; const locale: any = { locale: "cs_CZ", diff --git a/src/lib/getTime.ts b/src/lib/getTime.ts index b67c104..428e7e1 100644 --- a/src/lib/getTime.ts +++ b/src/lib/getTime.ts @@ -4,35 +4,12 @@ import utc from "dayjs/plugin/utc"; interface Props { date: string; day: "start" | "end" | "middle"; - unix: boolean; } -const getTime = (props: Props) => { +const getTime = (props: Props): number => { dayjs.extend(utc); - if (props.unix) { - return getUnix(props); - } - - if (props.day === "start") { - return dayjs(props.date) - .utc() - .add(12, "hour") - .startOf("day") - .format("YYYY-MM-DD HH:mm:ss"); - } - - if (props.day === "middle") { - return dayjs(props.date) - .utc() - .add(12, "hour") - .format("YYYY-MM-DD HH:mm:ss"); - } - return dayjs(props.date) - .utc() - .add(12, "hour") - .endOf("day") - .format("YYYY-MM-DD HH:mm:ss"); + return getUnix(props); }; const getUnix = (props: Props) => { diff --git a/src/lib/ssrApolloClient.ts b/src/lib/ssrApolloClient.ts new file mode 100644 index 0000000..1c1e489 --- /dev/null +++ b/src/lib/ssrApolloClient.ts @@ -0,0 +1,15 @@ +import { HttpLink } from "@apollo/client"; +import { registerApolloClient } from "@apollo/experimental-nextjs-app-support/rsc"; +import { + NextSSRInMemoryCache, + NextSSRApolloClient, +} from "@apollo/experimental-nextjs-app-support/ssr"; + +export const { getClient } = registerApolloClient(() => { + return new NextSSRApolloClient({ + cache: new NextSSRInMemoryCache(), + link: new HttpLink({ + uri: process.env.NEXT_PUBLIC_API_URL, + }), + }); +}); diff --git a/src/queries/adminCreateFoodPriceLvl.ts b/src/queries/adminCreateFoodPriceLvl.ts new file mode 100644 index 0000000..a76509e --- /dev/null +++ b/src/queries/adminCreateFoodPriceLvl.ts @@ -0,0 +1,10 @@ +import { gql } from "@apollo/client"; + +export default gql` + mutation adminCreateFoodPriceLvl($FoodPriceLvlName: String!) { + adminCreateFoodPriceLvl(FoodPriceLvlName: $FoodPriceLvlName) { + id + name + } + } +`; diff --git a/src/queries/adminCreatePriceLvlGroup.ts b/src/queries/adminCreatePriceLvlGroup.ts new file mode 100644 index 0000000..1924b4a --- /dev/null +++ b/src/queries/adminCreatePriceLvlGroup.ts @@ -0,0 +1,20 @@ +import { gql } from "@apollo/client"; + +export default gql` + mutation adminCreatePriceLvlGroup($input: CreatePriceLevelGroup!) { + adminCreatePriceLvlGroup(input: $input) { + id + ValidFrom + ValidTo + price + FoodPriceLevel { + id + name + } + UserGroup { + id + name + } + } + } +`; diff --git a/src/queries/adminCreateUserGroup.ts b/src/queries/adminCreateUserGroup.ts new file mode 100644 index 0000000..dfb3c5d --- /dev/null +++ b/src/queries/adminCreateUserGroup.ts @@ -0,0 +1,10 @@ +import { gql } from "@apollo/client"; + +export default gql` + mutation adminCreateUserGroup($input: CreateUserGroup!) { + adminCreateUserGroup(input: $input) { + id + name + } + } +`; diff --git a/src/queries/adminDeleteFoodPriceLvl.ts b/src/queries/adminDeleteFoodPriceLvl.ts new file mode 100644 index 0000000..5092c2a --- /dev/null +++ b/src/queries/adminDeleteFoodPriceLvl.ts @@ -0,0 +1,9 @@ +import { gql } from "@apollo/client"; + +export default gql` + mutation adminDeleteFoodPriceLvl($foodPriceLvlID: ID!) { + adminDeleteFoodPriceLvl(foodPriceLvlID: $foodPriceLvlID) { + ok + } + } +`; diff --git a/src/queries/adminDeletePriceLvlGroup.ts b/src/queries/adminDeletePriceLvlGroup.ts new file mode 100644 index 0000000..bbe718c --- /dev/null +++ b/src/queries/adminDeletePriceLvlGroup.ts @@ -0,0 +1,9 @@ +import { gql } from "@apollo/client"; + +export default gql` + mutation adminDeletePriceLvlGroup($priceLvlGroupID: ID!) { + adminDeletePriceLvlGroup(priceLvlGroupID: $priceLvlGroupID) { + ok + } + } +`; diff --git a/src/queries/adminDeleteUserGroup.ts b/src/queries/adminDeleteUserGroup.ts new file mode 100644 index 0000000..d5919b6 --- /dev/null +++ b/src/queries/adminDeleteUserGroup.ts @@ -0,0 +1,9 @@ +import { gql } from "@apollo/client"; + +export default gql` + mutation adminDeleteUserGroup($userGroupID: ID!) { + adminDeleteUserGroup(userGroupID: $userGroupID) { + ok + } + } +`; diff --git a/src/queries/adminGetPriceLvls.ts b/src/queries/adminGetAllFoodPriceLvls.ts similarity index 58% rename from src/queries/adminGetPriceLvls.ts rename to src/queries/adminGetAllFoodPriceLvls.ts index 41572ed..f71cc4c 100644 --- a/src/queries/adminGetPriceLvls.ts +++ b/src/queries/adminGetAllFoodPriceLvls.ts @@ -1,8 +1,8 @@ import { gql } from "@apollo/client"; export default gql` - query adminGetPriceLvls { - adminGetPriceLvls { + query adminGetAllFoodPriceLvls { + adminGetAllFoodPriceLvls { id name } diff --git a/src/queries/adminGetAllPriceLvlGroups.ts b/src/queries/adminGetAllPriceLvlGroups.ts new file mode 100644 index 0000000..f5ff567 --- /dev/null +++ b/src/queries/adminGetAllPriceLvlGroups.ts @@ -0,0 +1,20 @@ +import { gql } from "@apollo/client"; + +export default gql` + query adminGetAllPriceLvlGroups { + adminGetAllPriceLvlGroups { + id + price + UserGroup { + id + name + } + ValidFrom + ValidTo + FoodPriceLevel { + id + name + } + } + } +`; diff --git a/src/queries/adminGetAllUserGroups.ts b/src/queries/adminGetAllUserGroups.ts new file mode 100644 index 0000000..f266b9b --- /dev/null +++ b/src/queries/adminGetAllUserGroups.ts @@ -0,0 +1,11 @@ +import { gql } from "@apollo/client"; + +export default gql` + query adminGetAllUserGroups { + adminGetAllUserGroups { + id + name + emailHandles + } + } +`; diff --git a/src/queries/adminUpdateFoodPriceLvl.ts b/src/queries/adminUpdateFoodPriceLvl.ts new file mode 100644 index 0000000..43c0f08 --- /dev/null +++ b/src/queries/adminUpdateFoodPriceLvl.ts @@ -0,0 +1,12 @@ +import { gql } from "@apollo/client"; + +export default gql` + mutation adminUpdateFoodPriceLvl( + $foodPriceLvlID: ID! + $input: UpdateFoodPriceLvl! + ) { + adminUpdateFoodPriceLvl(foodPriceLvlID: $foodPriceLvlID, input: $input) { + ok + } + } +`; diff --git a/src/queries/adminUpdatePriceLvlGroup.ts b/src/queries/adminUpdatePriceLvlGroup.ts new file mode 100644 index 0000000..4215e6b --- /dev/null +++ b/src/queries/adminUpdatePriceLvlGroup.ts @@ -0,0 +1,12 @@ +import { gql } from "@apollo/client"; + +export default gql` + mutation adminUpdatePriceLvlGroup( + $priceLvlGroupID: ID! + $input: UpdatePriceLvlGroup! + ) { + adminUpdatePriceLvlGroup(priceLvlGroupID: $priceLvlGroupID, input: $input) { + ok + } + } +`; diff --git a/src/queries/adminUpdateUserGroup.ts b/src/queries/adminUpdateUserGroup.ts new file mode 100644 index 0000000..5bf7c54 --- /dev/null +++ b/src/queries/adminUpdateUserGroup.ts @@ -0,0 +1,9 @@ +import { gql } from "@apollo/client"; + +export default gql` + mutation adminUpdateUserGroup($userGroupID: ID!, $input: UpdateUserGroup!) { + adminUpdateUserGroup(userGroupID: $userGroupID, input: $input) { + ok + } + } +`; diff --git a/src/types/PriceLevelInterface.ts b/src/types/PriceLevelInterface.ts index 9487fe2..02e5902 100644 --- a/src/types/PriceLevelInterface.ts +++ b/src/types/PriceLevelInterface.ts @@ -2,3 +2,7 @@ export interface PriceLevelInterface { id: string; name: string; } + +export interface CreatePriceLevelInterface { + name: string; +} diff --git a/src/utils/getToken.ts b/src/utils/getToken.ts index 739c313..939153d 100644 --- a/src/utils/getToken.ts +++ b/src/utils/getToken.ts @@ -1,9 +1,11 @@ +import { cookies } from "next/headers"; + const getToken = () => { if (typeof window === "undefined") { - return ""; + return cookies().get("token")?.value ?? ""; } - return localStorage.getItem("token"); + return localStorage.getItem("token") ?? ""; }; export default getToken; From 9ec025018b2511b529b5ad2e545cb1bf8d469ae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Sat, 2 Dec 2023 12:29:39 +0100 Subject: [PATCH 06/49] disable add domain button on preview --- .../Settings/components/UserGroup/EmailHandles.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/Settings/components/UserGroup/EmailHandles.tsx b/src/components/Settings/components/UserGroup/EmailHandles.tsx index 07b813b..65d55ac 100644 --- a/src/components/Settings/components/UserGroup/EmailHandles.tsx +++ b/src/components/Settings/components/UserGroup/EmailHandles.tsx @@ -13,13 +13,10 @@ const EmailHandles = (props: Props) => { }; useEffect(() => { - // for each create a new empty if (!props.count) { return; } - console.log(props.count); - const newHandles = []; for (let i = 0; i < props.count; i++) { newHandles.push({ key: i, value: "" }); @@ -39,7 +36,9 @@ const EmailHandles = (props: Props) => { ))} - + ); }; From 862284655cb63b1f59099625640a29aa5e2b042d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Sun, 3 Dec 2023 01:22:33 +0100 Subject: [PATCH 07/49] fix queue time on desktop --- src/components/LunchOrderTable.tsx | 3 --- src/components/OrderItem.tsx | 18 ++++++++++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/components/LunchOrderTable.tsx b/src/components/LunchOrderTable.tsx index a94dc2b..8782897 100644 --- a/src/components/LunchOrderTable.tsx +++ b/src/components/LunchOrderTable.tsx @@ -15,9 +15,6 @@ const LunchOrderTable = ({ data }: { data: LunchOrder[] }) => { title: "Čas", dataIndex: "date", key: "date", - render: () => { - return

test

; - }, }, { title: "Oběd", diff --git a/src/components/OrderItem.tsx b/src/components/OrderItem.tsx index 668c09e..dfd8ca8 100644 --- a/src/components/OrderItem.tsx +++ b/src/components/OrderItem.tsx @@ -4,6 +4,12 @@ import React from "react"; import type { LunchOrder } from "@/types/LunchOrder"; import dayjs from "dayjs"; +interface ColInterface { + key: string; + dataIndex: string; + title: string; +} + const OrderItem = ({ order, index, @@ -11,8 +17,16 @@ const OrderItem = ({ }: { order: LunchOrder; index: number; - columns: { key: string; dataIndex: string; title: string }[]; + columns: ColInterface[]; }) => { + const renderData = (col: ColInterface) => { + if (col.dataIndex === "date") { + return dayjs.unix(order.date).format("HH:mm"); + } + + return (order as any)[col.dataIndex]; + }; + return (
{columns.map((col) => (
- {(order as any)[col.dataIndex]} + {renderData(col)}
))}
From 728edda84b45c1aba8dd22a46997e6953c54e724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Mon, 4 Dec 2023 09:51:07 +0100 Subject: [PATCH 08/49] remove recharts & add bundle analyzer --- bun.lockb | Bin 190166 -> 182619 bytes next.config.js | 6 +- package-lock.json | 5162 ----------------- package.json | 23 +- .../StatisticModalChart.tsx | 35 - src/components/Statistics/StatisticsPage.tsx | 13 - src/components/Statistics/Table.tsx | 22 - 7 files changed, 18 insertions(+), 5243 deletions(-) delete mode 100644 package-lock.json delete mode 100644 src/components/StatisticModalChart/StatisticModalChart.tsx diff --git a/bun.lockb b/bun.lockb index 95ee14b21e579d0cc4f586b733e4349efa199800..0fa73f3406c42a50de682bced9c58e5d8a7635c6 100755 GIT binary patch delta 56839 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.10.0" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ant-design/colors": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "@ctrl/tinycolor": "^3.4.0" - } - }, - "node_modules/@ant-design/cssinjs": { - "version": "1.17.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.1", - "@emotion/hash": "^0.8.0", - "@emotion/unitless": "^0.7.5", - "classnames": "^2.3.1", - "csstype": "^3.0.10", - "rc-util": "^5.35.0", - "stylis": "^4.0.13" - }, - "peerDependencies": { - "react": ">=16.0.0", - "react-dom": ">=16.0.0" - } - }, - "node_modules/@ant-design/icons": { - "version": "5.2.6", - "license": "MIT", - "dependencies": { - "@ant-design/colors": "^7.0.0", - "@ant-design/icons-svg": "^4.3.0", - "@babel/runtime": "^7.11.2", - "classnames": "^2.2.6", - "rc-util": "^5.31.1" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "react": ">=16.0.0", - "react-dom": ">=16.0.0" - } - }, - "node_modules/@ant-design/icons-svg": { - "version": "4.3.1", - "license": "MIT" - }, - "node_modules/@ant-design/react-slick": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.4", - "classnames": "^2.2.5", - "json2mq": "^0.2.0", - "resize-observer-polyfill": "^1.5.1", - "throttle-debounce": "^5.0.0" - }, - "peerDependencies": { - "react": ">=16.9.0" - } - }, - "node_modules/@apollo/client": { - "version": "3.8.7", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.8.7.tgz", - "integrity": "sha512-DnQtFkQrCyxHTSa9gR84YRLmU/al6HeXcLZazVe+VxKBmx/Hj4rV8xWtzfWYX5ijartsqDR7SJgV037MATEecA==", - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "@wry/context": "^0.7.3", - "@wry/equality": "^0.5.6", - "@wry/trie": "^0.4.3", - "graphql-tag": "^2.12.6", - "hoist-non-react-statics": "^3.3.2", - "optimism": "^0.17.5", - "prop-types": "^15.7.2", - "response-iterator": "^0.2.6", - "symbol-observable": "^4.0.0", - "ts-invariant": "^0.10.3", - "tslib": "^2.3.0", - "zen-observable-ts": "^1.2.5" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0", - "graphql-ws": "^5.5.5", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" - }, - "peerDependenciesMeta": { - "graphql-ws": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "subscriptions-transport-ws": { - "optional": true - } - } - }, - "node_modules/@apollo/experimental-nextjs-app-support": { - "version": "0.4.3", - "license": "MIT", - "dependencies": { - "server-only": "^0.0.1", - "superjson": "^1.12.2", - "ts-invariant": "^0.10.3" - }, - "peerDependencies": { - "@apollo/client": ">=3.8.0-rc || ^3.8.0", - "next": "^13.4.1", - "react": "^18" - } - }, - "node_modules/@babel/runtime": { - "version": "7.23.1", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ctrl/tinycolor": { - "version": "3.6.1", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/@emotion/hash": { - "version": "0.8.0", - "license": "MIT" - }, - "node_modules/@emotion/unitless": { - "version": "0.7.5", - "license": "MIT" - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.49.0", - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "license": "MIT", - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.0.8", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "license": "BSD-3-Clause" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@next/env": { - "version": "13.5.4", - "license": "MIT" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.5.4", - "license": "MIT", - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.5.4", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz", - "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz", - "integrity": "sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz", - "integrity": "sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz", - "integrity": "sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz", - "integrity": "sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz", - "integrity": "sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz", - "integrity": "sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz", - "integrity": "sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rc-component/color-picker": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "@ctrl/tinycolor": "^3.6.0", - "classnames": "^2.2.6", - "rc-util": "^5.30.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/@rc-component/context": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "rc-util": "^5.27.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/@rc-component/mini-decimal": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.0" - }, - "engines": { - "node": ">=8.x" - } - }, - "node_modules/@rc-component/mutate-observer": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.0", - "classnames": "^2.3.2", - "rc-util": "^5.24.4" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/@rc-component/portal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz", - "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", - "dependencies": { - "@babel/runtime": "^7.18.0", - "classnames": "^2.3.2", - "rc-util": "^5.24.4" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/@rc-component/tour": { - "version": "1.10.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.0", - "@rc-component/portal": "^1.0.0-9", - "@rc-component/trigger": "^1.3.6", - "classnames": "^2.3.2", - "rc-util": "^5.24.4" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/@rc-component/trigger": { - "version": "1.17.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@rc-component/portal": "^1.1.0", - "classnames": "^2.3.2", - "rc-align": "^4.0.0", - "rc-motion": "^2.0.0", - "rc-resize-observer": "^1.3.1", - "rc-util": "^5.33.0" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.5.1", - "license": "MIT" - }, - "node_modules/@swc/helpers": { - "version": "0.5.2", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/d3-array": { - "version": "3.0.8", - "license": "MIT" - }, - "node_modules/@types/d3-color": { - "version": "3.1.1", - "license": "MIT" - }, - "node_modules/@types/d3-ease": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/@types/d3-interpolate": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "@types/d3-color": "*" - } - }, - "node_modules/@types/d3-path": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/@types/d3-scale": { - "version": "4.0.5", - "license": "MIT", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-shape": { - "version": "3.1.3", - "license": "MIT", - "dependencies": { - "@types/d3-path": "*" - } - }, - "node_modules/@types/d3-time": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/@types/d3-timer": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.6.0", - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.8", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.2.21", - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.7", - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-dom/node_modules/@types/react": { - "version": "18.2.25", - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.4", - "license": "MIT" - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.7.4", - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "6.7.4", - "@typescript-eslint/types": "6.7.4", - "@typescript-eslint/typescript-estree": "6.7.4", - "@typescript-eslint/visitor-keys": "6.7.4", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.4", - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.7.4", - "@typescript-eslint/visitor-keys": "6.7.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.7.4", - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.4", - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.7.4", - "@typescript-eslint/visitor-keys": "6.7.4", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.4", - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.7.4", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vercel/analytics": { - "version": "1.1.0", - "license": "MPL-2.0", - "dependencies": { - "server-only": "^0.0.1" - } - }, - "node_modules/@wry/context": { - "version": "0.7.3", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wry/equality": { - "version": "0.5.6", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wry/trie": { - "version": "0.4.3", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/antd": { - "version": "5.9.4", - "license": "MIT", - "dependencies": { - "@ant-design/colors": "^7.0.0", - "@ant-design/cssinjs": "^1.16.0", - "@ant-design/icons": "^5.2.2", - "@ant-design/react-slick": "~1.0.0", - "@babel/runtime": "^7.18.3", - "@ctrl/tinycolor": "^3.6.0", - "@rc-component/color-picker": "~1.4.1", - "@rc-component/mutate-observer": "^1.1.0", - "@rc-component/tour": "~1.10.0", - "@rc-component/trigger": "^1.16.0", - "classnames": "^2.2.6", - "copy-to-clipboard": "^3.2.0", - "dayjs": "^1.11.1", - "qrcode.react": "^3.1.0", - "rc-cascader": "~3.17.0", - "rc-checkbox": "~3.1.0", - "rc-collapse": "~3.7.1", - "rc-dialog": "~9.2.0", - "rc-drawer": "~6.4.1", - "rc-dropdown": "~4.1.0", - "rc-field-form": "~1.38.1", - "rc-image": "~7.2.0", - "rc-input": "~1.2.1", - "rc-input-number": "~8.1.0", - "rc-mentions": "~2.8.0", - "rc-menu": "~9.12.0", - "rc-motion": "^2.9.0", - "rc-notification": "~5.1.1", - "rc-pagination": "~3.6.1", - "rc-picker": "~3.14.1", - "rc-progress": "~3.5.1", - "rc-rate": "~2.12.0", - "rc-resize-observer": "^1.3.1", - "rc-segmented": "~2.2.2", - "rc-select": "~14.9.0", - "rc-slider": "~10.2.1", - "rc-steps": "~6.0.1", - "rc-switch": "~4.1.0", - "rc-table": "~7.34.4", - "rc-tabs": "~12.12.1", - "rc-textarea": "~1.4.0", - "rc-tooltip": "~6.0.1", - "rc-tree": "~5.7.12", - "rc-tree-select": "~5.13.0", - "rc-upload": "~4.3.4", - "rc-util": "^5.37.0", - "scroll-into-view-if-needed": "^3.0.3", - "throttle-debounce": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ant-design" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" - }, - "node_modules/aria-query": { - "version": "5.3.0", - "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.7", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-tree-filter": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "license": "ISC" - }, - "node_modules/async-validator": { - "version": "4.2.5", - "license": "MIT" - }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.15", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.8.2", - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.22.1", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001546", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/classnames": { - "version": "2.3.2", - "license": "MIT" - }, - "node_modules/client-only": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/commander": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/compute-scroll-into-view": { - "version": "3.1.0", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/copy-anything": { - "version": "3.0.5", - "license": "MIT", - "dependencies": { - "is-what": "^4.1.8" - }, - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-to-clipboard": { - "version": "3.3.3", - "license": "MIT", - "dependencies": { - "toggle-selection": "^1.0.6" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-unit-converter": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "license": "MIT" - }, - "node_modules/d3-array": { - "version": "3.2.4", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "license": "ISC", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "license": "ISC", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "license": "ISC", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "license": "ISC", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "license": "BSD-2-Clause" - }, - "node_modules/dayjs": { - "version": "1.11.10", - "license": "MIT" - }, - "node_modules/dayjs-plugin-utc": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dayjs-plugin-utc/-/dayjs-plugin-utc-0.1.2.tgz", - "integrity": "sha512-ExERH5o3oo6jFOdkvMP3gytTCQ9Ksi5PtylclJWghr7k7m3o2U5QrwtdiJkOxLOH4ghr0EKhpqGefzGz1VvVJg==" - }, - "node_modules/debug": { - "version": "4.3.4", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js-light": { - "version": "2.5.1", - "license": "MIT" - }, - "node_modules/deep-is": { - "version": "0.1.4", - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "license": "Apache-2.0" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/doctrine": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-align": { - "version": "1.12.4", - "license": "MIT" - }, - "node_modules/dom-helpers": { - "version": "3.4.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.544", - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-abstract": { - "version": "1.22.2", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "license": "MIT", - "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.49.0", - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", - "@humanwhocodes/config-array": "^0.11.11", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "13.5.4", - "license": "MIT", - "dependencies": { - "@next/eslint-plugin-next": "13.5.4", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "license": "ISC", - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/eslint-plugin-import": { - "version": "2.28.1", - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", - "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-equals": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.15.0", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.9", - "license": "ISC" - }, - "node_modules/for-each": { - "version": "0.3.3", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fraction.js": { - "version": "4.3.6", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.7.2", - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "license": "BSD-2-Clause" - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.0.8", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globals": { - "version": "13.23.0", - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "license": "MIT" - }, - "node_modules/graphql": { - "version": "16.8.1", - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" - } - }, - "node_modules/graphql-tag": { - "version": "2.12.6", - "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/has": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/install": { - "version": "0.13.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-what": { - "version": "4.1.15", - "license": "MIT", - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, - "node_modules/jiti": { - "version": "1.20.0", - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/json2mq": { - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "string-convert": "^0.2.0" - } - }, - "node_modules/json5": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.3", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/mz": { - "version": "2.7.0", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "license": "MIT" - }, - "node_modules/next": { - "version": "13.5.4", - "license": "MIT", - "dependencies": { - "@next/env": "13.5.4", - "@swc/helpers": "0.5.2", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=16.14.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "13.5.4", - "@next/swc-darwin-x64": "13.5.4", - "@next/swc-linux-arm64-gnu": "13.5.4", - "@next/swc-linux-arm64-musl": "13.5.4", - "@next/swc-linux-x64-gnu": "13.5.4", - "@next/swc-linux-x64-musl": "13.5.4", - "@next/swc-win32-arm64-msvc": "13.5.4", - "@next/swc-win32-ia32-msvc": "13.5.4", - "@next/swc-win32-x64-msvc": "13.5.4" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.7", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.7", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optimism": { - "version": "0.17.5", - "license": "MIT", - "dependencies": { - "@wry/context": "^0.7.0", - "@wry/trie": "^0.4.3", - "tslib": "^2.3.0" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "license": "MIT", - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.4.29", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qrcode.react": { - "version": "3.1.0", - "license": "ISC", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/rc-align": { - "version": "4.0.15", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "dom-align": "^1.7.0", - "rc-util": "^5.26.0", - "resize-observer-polyfill": "^1.5.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-cascader": { - "version": "3.17.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "array-tree-filter": "^2.1.0", - "classnames": "^2.3.1", - "rc-select": "~14.9.0", - "rc-tree": "~5.7.0", - "rc-util": "^5.35.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-checkbox": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.3.2", - "rc-util": "^5.25.2" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-collapse": { - "version": "3.7.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.3.4", - "rc-util": "^5.27.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-dialog": { - "version": "9.2.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "@rc-component/portal": "^1.0.0-8", - "classnames": "^2.2.6", - "rc-motion": "^2.3.0", - "rc-util": "^5.21.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-drawer": { - "version": "6.4.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "@rc-component/portal": "^1.1.1", - "classnames": "^2.2.6", - "rc-motion": "^2.6.1", - "rc-util": "^5.36.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-dropdown": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@rc-component/trigger": "^1.7.0", - "classnames": "^2.2.6", - "rc-util": "^5.17.0" - }, - "peerDependencies": { - "react": ">=16.11.0", - "react-dom": ">=16.11.0" - } - }, - "node_modules/rc-field-form": { - "version": "1.38.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.0", - "async-validator": "^4.1.0", - "rc-util": "^5.32.2" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-image": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.2", - "@rc-component/portal": "^1.0.2", - "classnames": "^2.2.6", - "rc-dialog": "~9.2.0", - "rc-motion": "^2.6.2", - "rc-util": "^5.34.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-input": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-util": "^5.18.1" - }, - "peerDependencies": { - "react": ">=16.0.0", - "react-dom": ">=16.0.0" - } - }, - "node_modules/rc-input-number": { - "version": "8.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "@rc-component/mini-decimal": "^1.0.1", - "classnames": "^2.2.5", - "rc-input": "~1.2.1", - "rc-util": "^5.28.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-mentions": { - "version": "2.8.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.22.5", - "@rc-component/trigger": "^1.5.0", - "classnames": "^2.2.6", - "rc-input": "~1.2.1", - "rc-menu": "~9.12.0", - "rc-textarea": "~1.4.0", - "rc-util": "^5.34.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-menu": { - "version": "9.12.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "@rc-component/trigger": "^1.6.2", - "classnames": "2.x", - "rc-motion": "^2.4.3", - "rc-overflow": "^1.3.1", - "rc-util": "^5.27.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-motion": { - "version": "2.9.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-util": "^5.21.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-notification": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.6.0", - "rc-util": "^5.20.1" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-overflow": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.37.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-pagination": { - "version": "3.6.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.32.2" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-picker": { - "version": "3.14.5", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "@rc-component/trigger": "^1.5.0", - "classnames": "^2.2.1", - "rc-util": "^5.30.0" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "date-fns": ">= 2.x", - "dayjs": ">= 1.x", - "luxon": ">= 3.x", - "moment": ">= 2.x", - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - }, - "peerDependenciesMeta": { - "date-fns": { - "optional": true - }, - "dayjs": { - "optional": true - }, - "luxon": { - "optional": true - }, - "moment": { - "optional": true - } - } - }, - "node_modules/rc-progress": { - "version": "3.5.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-util": "^5.16.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-rate": { - "version": "2.12.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.0.1" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-resize-observer": { - "version": "1.3.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.7", - "classnames": "^2.2.1", - "rc-util": "^5.27.0", - "resize-observer-polyfill": "^1.5.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-segmented": { - "version": "2.2.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-motion": "^2.4.4", - "rc-util": "^5.17.0" - }, - "peerDependencies": { - "react": ">=16.0.0", - "react-dom": ">=16.0.0" - } - }, - "node_modules/rc-select": { - "version": "14.9.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "@rc-component/trigger": "^1.5.0", - "classnames": "2.x", - "rc-motion": "^2.0.1", - "rc-overflow": "^1.3.1", - "rc-util": "^5.16.1", - "rc-virtual-list": "^3.5.2" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/rc-slider": { - "version": "10.2.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.27.0" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-steps": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.16.7", - "classnames": "^2.2.3", - "rc-util": "^5.16.1" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-switch": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.21.0", - "classnames": "^2.2.1", - "rc-util": "^5.30.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-table": { - "version": "7.34.4", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "@rc-component/context": "^1.4.0", - "classnames": "^2.2.5", - "rc-resize-observer": "^1.1.0", - "rc-util": "^5.36.0", - "rc-virtual-list": "^3.11.1" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-tabs": { - "version": "12.12.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.2", - "classnames": "2.x", - "rc-dropdown": "~4.1.0", - "rc-menu": "~9.12.0", - "rc-motion": "^2.6.2", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.34.1" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-textarea": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-input": "~1.2.1", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.27.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-tooltip": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.2", - "@rc-component/trigger": "^1.0.4", - "classnames": "^2.3.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-tree": { - "version": "5.7.12", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.0.1", - "rc-util": "^5.16.1", - "rc-virtual-list": "^3.5.1" - }, - "engines": { - "node": ">=10.x" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/rc-tree-select": { - "version": "5.13.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-select": "~14.9.0", - "rc-tree": "~5.7.0", - "rc-util": "^5.16.1" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/rc-upload": { - "version": "4.3.5", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "classnames": "^2.2.5", - "rc-util": "^5.2.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-util": { - "version": "5.37.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "react-is": "^16.12.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-virtual-list": { - "version": "3.11.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.0", - "classnames": "^2.2.6", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.36.0" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/react": { - "version": "18.2.0", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "license": "MIT" - }, - "node_modules/react-resize-detector": { - "version": "8.1.0", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-smooth": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "fast-equals": "^5.0.0", - "react-transition-group": "2.9.0" - }, - "peerDependencies": { - "prop-types": "^15.6.0", - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-transition-group": { - "version": "2.9.0", - "license": "BSD-3-Clause", - "dependencies": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - }, - "peerDependencies": { - "react": ">=15.0.0", - "react-dom": ">=15.0.0" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recharts": { - "version": "2.8.0", - "license": "MIT", - "dependencies": { - "classnames": "^2.2.5", - "eventemitter3": "^4.0.1", - "lodash": "^4.17.19", - "react-is": "^16.10.2", - "react-resize-detector": "^8.0.4", - "react-smooth": "^2.0.2", - "recharts-scale": "^0.4.4", - "reduce-css-calc": "^2.1.8", - "victory-vendor": "^36.6.8" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "prop-types": "^15.6.0", - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/recharts-scale": { - "version": "0.4.5", - "license": "MIT", - "dependencies": { - "decimal.js-light": "^2.4.1" - } - }, - "node_modules/reduce-css-calc": { - "version": "2.1.8", - "license": "MIT", - "dependencies": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - } - }, - "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { - "version": "3.3.1", - "license": "MIT" - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resize-observer-polyfill": { - "version": "1.5.1", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.6", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/response-iterator": { - "version": "0.2.6", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/scroll-into-view-if-needed": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "compute-scroll-into-view": "^3.0.2" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/server-only": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/set-function-name": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string-convert": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/stylis": { - "version": "4.3.0", - "license": "MIT" - }, - "node_modules/sucrase": { - "version": "3.34.0", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/glob/node_modules/minimatch": { - "version": "3.0.8", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/superjson": { - "version": "1.13.3", - "license": "MIT", - "dependencies": { - "copy-anything": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tailwindcss": { - "version": "3.3.3", - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/node_modules/postcss": { - "version": "8.4.31", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/thenify": { - "version": "3.3.1", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/throttle-debounce": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=12.22" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/ts-api-utils": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "license": "Apache-2.0" - }, - "node_modules/ts-invariant": { - "version": "0.10.3", - "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/victory-vendor": { - "version": "36.6.11", - "license": "MIT AND ISC", - "dependencies": { - "@types/d3-array": "^3.0.3", - "@types/d3-ease": "^3.0.0", - "@types/d3-interpolate": "^3.0.1", - "@types/d3-scale": "^4.0.2", - "@types/d3-shape": "^3.1.0", - "@types/d3-time": "^3.0.0", - "@types/d3-timer": "^3.0.0", - "d3-array": "^3.1.6", - "d3-ease": "^3.0.1", - "d3-interpolate": "^3.0.1", - "d3-scale": "^4.0.2", - "d3-shape": "^3.1.0", - "d3-time": "^3.0.0", - "d3-timer": "^3.0.1" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "license": "MIT", - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.3.2", - "license": "ISC", - "engines": { - "node": ">= 14" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zen-observable": { - "version": "0.8.15", - "license": "MIT" - }, - "node_modules/zen-observable-ts": { - "version": "1.2.5", - "license": "MIT", - "dependencies": { - "zen-observable": "0.8.15" - } - } - } -} diff --git a/package.json b/package.json index 1b3f867..8673098 100644 --- a/package.json +++ b/package.json @@ -6,29 +6,32 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "analyze": "ANALYZE=true next build" }, "dependencies": { "@ant-design/cssinjs": "^1.17.0", "@apollo/client": "latest", "@apollo/experimental-nextjs-app-support": "^0.4.2", - "@types/node": "20.6.0", - "@types/react": "18.2.21", - "@types/react-dom": "18.2.7", + "@next/bundle-analyzer": "^14.0.3", "@vercel/analytics": "^1.0.2", "antd": "^5.9.0", - "autoprefixer": "10.4.15", "dayjs": "^1.11.9", "dayjs-plugin-utc": "^0.1.2", - "eslint": "8.49.0", - "eslint-config-next": "13.5.4", "graphql": "^16.8.0", "install": "^0.13.0", "next": "13.5.4", - "postcss": "8.4.29", "react": "18.2.0", - "react-dom": "18.2.0", - "recharts": "^2.8.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "@types/node": "20.6.0", + "@types/react": "18.2.21", + "@types/react-dom": "18.2.7", + "eslint": "8.49.0", + "eslint-config-next": "13.5.4", + "autoprefixer": "10.4.15", + "postcss": "8.4.29", "tailwindcss": "3.3.3", "typescript": "5.2.2" } diff --git a/src/components/StatisticModalChart/StatisticModalChart.tsx b/src/components/StatisticModalChart/StatisticModalChart.tsx deleted file mode 100644 index c560bf1..0000000 --- a/src/components/StatisticModalChart/StatisticModalChart.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { ValueKeyInterface } from "@/types/OrdersInterface"; -import React from "react"; -import { - BarChart, - Bar, - ResponsiveContainer, - XAxis, - YAxis, - Tooltip, -} from "recharts"; - -const StatisticModalChart = (props: { - data: ValueKeyInterface[] | undefined; -}) => { - return ( - - - - - [`počet: ${value}`]} - contentStyle={{ - backgroundColor: "#fff", - borderRadius: "5px", - boxShadow: "0 0 10px rgba(0, 0, 0, 0.2)", - padding: "10px", - }} - /> - - - - ); -}; - -export default StatisticModalChart; diff --git a/src/components/Statistics/StatisticsPage.tsx b/src/components/Statistics/StatisticsPage.tsx index 553f0e0..6412f89 100644 --- a/src/components/Statistics/StatisticsPage.tsx +++ b/src/components/Statistics/StatisticsPage.tsx @@ -11,7 +11,6 @@ import type { NormalizedOrdersInterface, ValueKeyInterface, } from "@/types/OrdersInterface"; -import StatisticModalChart from "@/components/StatisticModalChart/StatisticModalChart"; import pickerLocale from "@/constants/PickerLocale"; import { StatisticsTable } from "@/components/Statistics"; import getTime from "@/lib/getTime"; @@ -22,7 +21,6 @@ interface Props { const StatisticsPage = (props: Props) => { dayjs.extend(utc); - const [modalOpen, setModalOpen] = useState(false); const [date, setDate] = useState(); const [selectedOrders, setSelectedOrders] = useState< OrdersInterface[] | undefined @@ -169,21 +167,10 @@ const StatisticsPage = (props: Props) => {
- setModalOpen(false)} - title={`Statistiky pro ${selectedOrders?.[0]?.date}`} - > -
- -
-
); }; diff --git a/src/components/Statistics/Table.tsx b/src/components/Statistics/Table.tsx index 72e9491..161a4b6 100644 --- a/src/components/Statistics/Table.tsx +++ b/src/components/Statistics/Table.tsx @@ -15,7 +15,6 @@ interface orderData { interface Props { data: OrdersInterface[] | undefined; tableDataSource: orderData[] | undefined; - openModal: Dispatch>; setModalData: Dispatch>; } @@ -67,27 +66,6 @@ const StatisticsTable = (props: Props) => { return

{filterOrderData(props.data, e.date, 3)}

; }, }, - { - title: "Akce", - key: "action", - render: (e: { key: string; date: number }) => { - return ( - - ); - }, - }, ]; return
; From 7a5d5f0e00c5e53347956d47b60c6a17844a6473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Mon, 4 Dec 2023 21:41:08 +0100 Subject: [PATCH 09/49] handle page not found --- src/app/admin/layout.tsx | 7 ++++--- src/app/not-found.tsx | 24 ++++++++++++++++++++++++ src/components/CreateMenu/CreateMenu.tsx | 8 +++++++- src/utils/isTokenInLocalStorage.ts | 5 +++++ 4 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 src/app/not-found.tsx create mode 100644 src/utils/isTokenInLocalStorage.ts diff --git a/src/app/admin/layout.tsx b/src/app/admin/layout.tsx index 90beb89..abe0dca 100644 --- a/src/app/admin/layout.tsx +++ b/src/app/admin/layout.tsx @@ -10,6 +10,7 @@ import utc from "dayjs/plugin/utc"; import { LogoutOutlined } from "@ant-design/icons"; import updateLocale from "dayjs/plugin/updateLocale"; import { navbarItems } from "@/components/Layout/constants"; +import isTokenInLocalStorage from "@/utils/isTokenInLocalStorage"; const AdminLayout = ({ children }: { children: React.ReactNode }) => { const [selectedKey, setSelectedKey] = React.useState(""); @@ -24,10 +25,10 @@ const AdminLayout = ({ children }: { children: React.ReactNode }) => { }); useLayoutEffect(() => { - if (localStorage.getItem("token") === null) { - router.push("/"); - } else { + if (isTokenInLocalStorage()) { setIsLogged(true); + } else { + router.push("/"); } setSelectedKey( diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx new file mode 100644 index 0000000..6db051f --- /dev/null +++ b/src/app/not-found.tsx @@ -0,0 +1,24 @@ +"use client"; +import Link from "next/link"; +import React from "react"; +import { Button, Result } from "antd"; +import isTokenInLocalStorage from "@/utils/isTokenInLocalStorage"; + +const RootNotFound = () => { + const redirectUrl = isTokenInLocalStorage() ? "/admin" : "/"; + + return ( + + Domů + + } + /> + ); +}; + +export default RootNotFound; diff --git a/src/components/CreateMenu/CreateMenu.tsx b/src/components/CreateMenu/CreateMenu.tsx index 1385f11..cbe5dad 100644 --- a/src/components/CreateMenu/CreateMenu.tsx +++ b/src/components/CreateMenu/CreateMenu.tsx @@ -30,6 +30,13 @@ const CreateMenu = ({ params: { date: string }; token: string; }) => { + const router = useRouter(); + + if (!dayjs(params.date).date()) { + router.push("/admin"); + return; + } + dayjs.extend(utc); const menuByDate = useQuery(getMenusByDate, { variables: { @@ -75,7 +82,6 @@ const CreateMenu = ({ const [idsForDeletion, setIdsForDeletion] = useState([]); const [messageApi, contextHolder] = message.useMessage(); const { Title } = Typography; - const router = useRouter(); const options = { context: { diff --git a/src/utils/isTokenInLocalStorage.ts b/src/utils/isTokenInLocalStorage.ts new file mode 100644 index 0000000..6e97eb2 --- /dev/null +++ b/src/utils/isTokenInLocalStorage.ts @@ -0,0 +1,5 @@ +const isTokenInLocalStorage = () => { + return localStorage.getItem("token"); +}; + +export default isTokenInLocalStorage; From 2717fbe97818c88aa867b71f7870bfa89dff52ab Mon Sep 17 00:00:00 2001 From: CZnavody19 Date: Tue, 5 Dec 2023 13:02:19 +0100 Subject: [PATCH 10/49] Fixed conflicts --- src/components/CreateMenu/CreateMenu.tsx | 6 +++++- src/components/QueuePage/QueuePage.tsx | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/CreateMenu/CreateMenu.tsx b/src/components/CreateMenu/CreateMenu.tsx index 1385f11..898bae8 100644 --- a/src/components/CreateMenu/CreateMenu.tsx +++ b/src/components/CreateMenu/CreateMenu.tsx @@ -22,6 +22,8 @@ import { MenuInterface } from "@/types/MenuInterface"; import adminGetAllFoodPriceLvls from "@/queries/adminGetAllFoodPriceLvls"; import { NoticeType } from "antd/lib/message/interface"; import getTime from "@/lib/getTime"; +import pickerLocale from "@/constants/PickerLocale"; + const CreateMenu = ({ params, @@ -246,11 +248,13 @@ const CreateMenu = ({ }); }; + const dateTitle = new Date(params.date).toLocaleDateString(pickerLocale.lang.locale, { weekday: 'long', month: 'numeric', day: 'numeric'}); + return (
{contextHolder} - Menu {params.date} + Menu {dateTitle}
{(menu ?? []).map((item) => { diff --git a/src/components/QueuePage/QueuePage.tsx b/src/components/QueuePage/QueuePage.tsx index 8e74dcc..33d7d96 100644 --- a/src/components/QueuePage/QueuePage.tsx +++ b/src/components/QueuePage/QueuePage.tsx @@ -50,6 +50,7 @@ const QueuePage = (props: Props) => {
{ setDate( From ce02333dd19ed80d0f4bf32636ea11c6300566fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Wed, 6 Dec 2023 18:54:27 +0100 Subject: [PATCH 11/49] implement domain deletion --- src/app/not-found.tsx | 1 + src/components/CreateMenu/CreateMenu.tsx | 10 +- .../components/UserGroup/EmailHandles.tsx | 72 ++++-- .../components/UserGroup/UserGroup.tsx | 208 +++++++++++------- .../components/UserGroup/UserGroupContext.tsx | 46 ++++ src/components/Settings/types.ts | 7 +- src/queries/addminDeleteDomain.ts | 9 + src/queries/adminAddDomainsToUserGroup.ts | 9 + src/queries/adminGetAllUserGroups.ts | 5 +- src/utils/isTokenInLocalStorage.ts | 4 + 10 files changed, 269 insertions(+), 102 deletions(-) create mode 100644 src/components/Settings/components/UserGroup/UserGroupContext.tsx create mode 100644 src/queries/addminDeleteDomain.ts create mode 100644 src/queries/adminAddDomainsToUserGroup.ts diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx index 6db051f..7dd4232 100644 --- a/src/app/not-found.tsx +++ b/src/app/not-found.tsx @@ -1,4 +1,5 @@ "use client"; + import Link from "next/link"; import React from "react"; import { Button, Result } from "antd"; diff --git a/src/components/CreateMenu/CreateMenu.tsx b/src/components/CreateMenu/CreateMenu.tsx index cbe5dad..ae86668 100644 --- a/src/components/CreateMenu/CreateMenu.tsx +++ b/src/components/CreateMenu/CreateMenu.tsx @@ -32,11 +32,6 @@ const CreateMenu = ({ }) => { const router = useRouter(); - if (!dayjs(params.date).date()) { - router.push("/admin"); - return; - } - dayjs.extend(utc); const menuByDate = useQuery(getMenusByDate, { variables: { @@ -252,6 +247,11 @@ const CreateMenu = ({ }); }; + if (!dayjs(params.date).date()) { + router.push("/admin"); + return; + } + return (
{contextHolder} diff --git a/src/components/Settings/components/UserGroup/EmailHandles.tsx b/src/components/Settings/components/UserGroup/EmailHandles.tsx index 65d55ac..30f1a48 100644 --- a/src/components/Settings/components/UserGroup/EmailHandles.tsx +++ b/src/components/Settings/components/UserGroup/EmailHandles.tsx @@ -1,15 +1,24 @@ import { useEffect, useState } from "react"; import { Button, Form, Input } from "antd"; +import { useUserGroupContext } from "./UserGroupContext"; +import { EmailHandleInterface } from "../../types"; interface Props { count?: number; + handleDelete?: (id: number) => void; } const EmailHandles = (props: Props) => { - const [handles, setHandles] = useState([{ key: 0, value: "" }]); + const { emailHandles } = useUserGroupContext(); + const [handles, setHandles] = useState([ + { key: 0, value: "", disabled: false }, + ]); const addHandle = () => { - setHandles((prev) => [...prev, { key: prev.length, value: "" }]); + setHandles((prev) => [ + ...prev, + { key: prev.length, value: "", disabled: false }, + ]); }; useEffect(() => { @@ -17,28 +26,57 @@ const EmailHandles = (props: Props) => { return; } - const newHandles = []; - for (let i = 0; i < props.count; i++) { - newHandles.push({ key: i, value: "" }); - } + const newHandles = emailHandles.map( + (handle: EmailHandleInterface, index: number) => { + return { key: index, value: handle.domain, disabled: true }; + } + ); + setHandles(newHandles); }, [props.count]); + const handleDelete = (index: number) => { + const handleLocalHandleDeletion = () => { + setHandles((prev) => + prev.filter((_, handlePosition) => handlePosition !== index) + ); + }; + + if (!props.handleDelete) { + if (!props.count) { + handleLocalHandleDeletion(); + } + return; + } + + handleLocalHandleDeletion(); + if (emailHandles?.[index]?.id) { + props.handleDelete(emailHandles?.[index].id); + } + }; + return ( <> {handles.map((handle, index) => ( - - - + <> +
+ {handles.length > 1 && ( + + )} +
+ + + + ))} - + ); }; diff --git a/src/components/Settings/components/UserGroup/UserGroup.tsx b/src/components/Settings/components/UserGroup/UserGroup.tsx index cada8e7..ced58e7 100644 --- a/src/components/Settings/components/UserGroup/UserGroup.tsx +++ b/src/components/Settings/components/UserGroup/UserGroup.tsx @@ -2,25 +2,24 @@ import { useMutation } from "@apollo/client"; import { Button, Table, Form, Input, InputNumber } from "antd"; -import { useState } from "react"; +import { useState, useMemo } from "react"; import React from "react"; import type { ColumnsType } from "antd/lib/table"; import dayjs from "dayjs"; import ModifyModal from "../modals/ModifyModal/ModifyModal"; import utc from "dayjs/plugin/utc"; -import { - CreatePriceLevelInterface, - PriceLevelInterface, -} from "@/types/PriceLevelInterface"; import adminCreateUserGroup from "@/queries/adminCreateUserGroup"; import adminDeleteUserGroup from "@/queries/adminDeleteUserGroup"; import adminUpdateUserGroup from "@/queries/adminUpdateUserGroup"; -import { getClient } from "@/lib/ssrApolloClient"; +import addminDeleteDomain from "@/queries/addminDeleteDomain"; +import adminAddDomainsToUserGroup from "@/queries/adminAddDomainsToUserGroup"; import { CreateUserGroupInterface, + EmailHandleInterface, UserGroupInterface, } from "@/components/Settings/types"; import EmailHandles from "./EmailHandles"; +import { UserGroupContextProvider } from "./UserGroupContext"; interface Props { revalidateData: () => void; @@ -36,6 +35,8 @@ const UserGroup = (props: Props) => { const [createUserGroup] = useMutation(adminCreateUserGroup); const [updateUserGroup] = useMutation(adminUpdateUserGroup); const [deleteUserGroup] = useMutation(adminDeleteUserGroup); + const [deleteDomain] = useMutation(addminDeleteDomain); + const [addDomainsToUserGroup] = useMutation(adminAddDomainsToUserGroup); const [createPriceModalOpen, setCreatePriceModalOpen] = useState(false); const [editPriceModalOpen, setEditPriceModalOpen] = useState(false); @@ -43,21 +44,26 @@ const UserGroup = (props: Props) => { const [selectedRowData, setSelectedRowData] = useState(); const [domainInputCount, setDomainInputCount] = useState(0); + const [emailHandles, setEmailHandles] = useState([]); const actionCallback = (record: UserGroupInterface) => { let domainCount = 0; + const emailHandlesObject = record.emailHandles.reduce( (acc, handle, index) => { // @ts-ignore - acc[`emailHandle${index}`] = handle; + acc[`emailHandle${index}`] = handle.domain; domainCount++; return acc; }, {} ); - // @ts-ignore - setSelectedRowData({ ...record, ...emailHandlesObject }); + setSelectedRowData({ + ...record, + ...emailHandlesObject, + }); + setEmailHandles(record.emailHandles); setDomainInputCount(domainCount); setEditPriceModalOpen(true); }; @@ -67,11 +73,6 @@ const UserGroup = (props: Props) => { title: "Název", dataIndex: "name", }, - // { - // title: "ID", - // dataIndex: "id", - // render: (text, record) =>

{record.id}

, - // }, { title: "Akce", dataIndex: "actions", @@ -94,11 +95,34 @@ const UserGroup = (props: Props) => { return numA - numB; }); - return emailHandleKeys.map((key) => data[key]); + const newEmailHandles = emailHandleKeys + .map((key) => data[key]) + .filter((handle: string) => { + return !emailHandles.find( + (emailHandle) => emailHandle.domain === handle + ); + }); + + return newEmailHandles; + }; + + const deleteDomainCallback = (id: number) => { + deleteDomain({ + variables: { + domainID: id, + }, + context: { + headers: { + Authorization: props.token, + }, + }, + }); + + setEditPriceModalOpen(false); + props.revalidateData(); }; const createModalSubmitCallback = (data: CreateUserGroupInterface) => { - console.log(data); createUserGroup({ variables: { input: { name: data.name, emailHandles: getDomainHandles(data) }, @@ -133,7 +157,6 @@ const UserGroup = (props: Props) => { }; const updateModalSubmitCallback = (data: UserGroupInterface) => { - console.log("ehre", data); if (!data) { return; } @@ -152,78 +175,107 @@ const UserGroup = (props: Props) => { }, }); + addDomainsToUserGroup({ + variables: { + userGroupID: data.id, + emails: getDomainHandles(data), + }, + context: { + headers: { + Authorization: props.token, + }, + }, + }); + props.revalidateData(); }; + const memoizedContextValue = useMemo(() => { + return { + emailHandles, + setEmailHandles, + }; + }, [emailHandles, setEmailHandles]); + return ( -
- - title="Vytvořit skupinu uživatelů" - modalOpen={createPriceModalOpen} - setModalOpen={setCreatePriceModalOpen} - onSubmit={createModalSubmitCallback} - > - - - - - - + +
+ + key={selectedRowData?.id} + title="Vytvořit skupinu uživatelů" + modalOpen={createPriceModalOpen} + setModalOpen={setCreatePriceModalOpen} + onSubmit={createModalSubmitCallback} + > + + + + + + + + + + , + ]} + > + + + + + + +
+
+

Skupiny uživatelů

- - - , - ]} - > - - - - - - -
-
-

Skupiny uživatelů

- +
+
-
- + ); }; diff --git a/src/components/Settings/components/UserGroup/UserGroupContext.tsx b/src/components/Settings/components/UserGroup/UserGroupContext.tsx new file mode 100644 index 0000000..8cc6bca --- /dev/null +++ b/src/components/Settings/components/UserGroup/UserGroupContext.tsx @@ -0,0 +1,46 @@ +import { + Dispatch, + ReactNode, + SetStateAction, + createContext, + useContext, +} from "react"; +import { EmailHandleInterface } from "../../types"; + +interface UserGroupContextValue { + emailHandles: EmailHandleInterface[]; + setEmailHandles: Dispatch>; +} + +const UserGroupContext = createContext({ + emailHandles: [], + setEmailHandles: () => {}, +}); + +export const useUserGroupContext = () => { + return useContext(UserGroupContext); +}; + +interface UserGroupContextProviderProps { + value: UserGroupContextValue; + children: ReactNode; +} + +export const UserGroupContextProvider = ( + props: UserGroupContextProviderProps +) => { + const { + value: { emailHandles, setEmailHandles }, + } = props; + + return ( + + {props.children} + + ); +}; diff --git a/src/components/Settings/types.ts b/src/components/Settings/types.ts index d26c472..86fa773 100644 --- a/src/components/Settings/types.ts +++ b/src/components/Settings/types.ts @@ -52,10 +52,15 @@ export interface GroupType { dateTo: Date; } +export interface EmailHandleInterface { + id: number; + domain: string; +} + export interface UserGroupInterface { id: number; name: string; - emailHandles: string[]; + emailHandles: EmailHandleInterface[]; } export interface CreateUserGroupInterface { diff --git a/src/queries/addminDeleteDomain.ts b/src/queries/addminDeleteDomain.ts new file mode 100644 index 0000000..cab05d5 --- /dev/null +++ b/src/queries/addminDeleteDomain.ts @@ -0,0 +1,9 @@ +import { gql } from "@apollo/client"; + +export default gql` + mutation addminDeleteDomain($domainID: ID!) { + addminDeleteDomain(domainID: $domainID) { + ok + } + } +`; diff --git a/src/queries/adminAddDomainsToUserGroup.ts b/src/queries/adminAddDomainsToUserGroup.ts new file mode 100644 index 0000000..60b8fb8 --- /dev/null +++ b/src/queries/adminAddDomainsToUserGroup.ts @@ -0,0 +1,9 @@ +import { gql } from "@apollo/client"; + +export default gql` + mutation adminAddDomainsToUserGroup($userGroupID: ID!, $emails: [String!]!) { + adminAddDomainsToUserGroup(userGroupID: $userGroupID, emails: $emails) { + ok + } + } +`; diff --git a/src/queries/adminGetAllUserGroups.ts b/src/queries/adminGetAllUserGroups.ts index f266b9b..d74040e 100644 --- a/src/queries/adminGetAllUserGroups.ts +++ b/src/queries/adminGetAllUserGroups.ts @@ -5,7 +5,10 @@ export default gql` adminGetAllUserGroups { id name - emailHandles + emailHandles { + id + domain + } } } `; diff --git a/src/utils/isTokenInLocalStorage.ts b/src/utils/isTokenInLocalStorage.ts index 6e97eb2..ef65b9f 100644 --- a/src/utils/isTokenInLocalStorage.ts +++ b/src/utils/isTokenInLocalStorage.ts @@ -1,4 +1,8 @@ const isTokenInLocalStorage = () => { + if (typeof window === "undefined") { + return false; + } + return localStorage.getItem("token"); }; From e73016e62bbefd4ffda34044039713939b0bf4e1 Mon Sep 17 00:00:00 2001 From: CZnavody19 Date: Wed, 6 Dec 2023 19:08:21 +0100 Subject: [PATCH 12/49] conflict fix --- src/components/CreateMenu/CreateMenu.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/components/CreateMenu/CreateMenu.tsx b/src/components/CreateMenu/CreateMenu.tsx index 898bae8..3b5f445 100644 --- a/src/components/CreateMenu/CreateMenu.tsx +++ b/src/components/CreateMenu/CreateMenu.tsx @@ -250,6 +250,11 @@ const CreateMenu = ({ const dateTitle = new Date(params.date).toLocaleDateString(pickerLocale.lang.locale, { weekday: 'long', month: 'numeric', day: 'numeric'}); + if (!dayjs(params.date).date()) { + router.push("/admin"); + return; + } + return (
{contextHolder} From 00228764152d8b3130a4d62d836b5c718e47dcd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 7 Dec 2023 09:11:53 +0100 Subject: [PATCH 13/49] fix menu heading title --- src/components/CreateMenu/CreateMenu.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CreateMenu/CreateMenu.tsx b/src/components/CreateMenu/CreateMenu.tsx index a6f8085..1249d47 100644 --- a/src/components/CreateMenu/CreateMenu.tsx +++ b/src/components/CreateMenu/CreateMenu.tsx @@ -260,7 +260,7 @@ const CreateMenu = ({
{contextHolder} - Menu {dateTitle} + Menu pro {dateTitle}
{(menu ?? []).map((item) => { From d29cc5597dbe7ae87759bc972b6c62f554613adc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 7 Dec 2023 09:15:15 +0100 Subject: [PATCH 14/49] update pricelevelgroup modal & table fields --- .../PriceLevelGroup/PriceLevelGroup.tsx | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx index 5510229..d85a32b 100644 --- a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx +++ b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx @@ -207,16 +207,6 @@ const PriceLevelGroup = (props: Props) => { setModalOpen={setCreatePriceModalOpen} onSubmit={createModalSubmitCallback} > - - - - - - { options={mutateDataToSelect(props.userGroups)} /> + {/*TODO: split into two datetimes */} + + + + + + title="Upravte skupinu cenové hladiny" @@ -275,16 +276,6 @@ const PriceLevelGroup = (props: Props) => { , ]} > - - - - - - { options={mutateDataToSelect(props.userGroups)} /> + {/*TODO: split into two datetimes */} + + + + + + @@ -324,7 +331,7 @@ const PriceLevelGroup = (props: Props) => {

- Nastavení cenové hl. pro skupinu uživatelů + Nastavení cenových hladin pro skupiny uživatelů

-
+
); From 4e372e876dc2191b551cea7516fb4a5b13e64a18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 7 Dec 2023 09:22:48 +0100 Subject: [PATCH 16/49] implement sorts for settings tables --- .../Settings/components/PriceLevel/PriceLevel.tsx | 9 ++++++++- .../components/PriceLevelGroup/PriceLevelGroup.tsx | 9 +++------ .../Settings/components/UserGroup/UserGroup.tsx | 3 +++ src/constants/PickerLocale.ts | 6 ++++++ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/components/Settings/components/PriceLevel/PriceLevel.tsx b/src/components/Settings/components/PriceLevel/PriceLevel.tsx index 3da6b35..90bb513 100644 --- a/src/components/Settings/components/PriceLevel/PriceLevel.tsx +++ b/src/components/Settings/components/PriceLevel/PriceLevel.tsx @@ -15,6 +15,7 @@ import { import adminCreateFoodPriceLvl from "@/queries/adminCreateFoodPriceLvl"; import adminDeleteFoodPriceLvl from "@/queries/adminDeleteFoodPriceLvl"; import adminUpdateFoodPriceLvl from "@/queries/adminUpdateFoodPriceLvl"; +import { tableSortLocale } from "@/constants/PickerLocale"; interface Props { revalidateData: () => void; @@ -45,6 +46,7 @@ const PriceLevel = (props: Props) => { { title: "Název", dataIndex: "name", + sorter: (a, b) => a.name.localeCompare(b.name), }, // { // title: "ID", @@ -182,7 +184,12 @@ const PriceLevel = (props: Props) => { Vytvořit -
+
); diff --git a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx index f70a4ef..c2aca6f 100644 --- a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx +++ b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx @@ -27,6 +27,7 @@ import utc from "dayjs/plugin/utc"; import ModifyModal from "../modals/ModifyModal/ModifyModal"; import pickerLocale from "@/constants/PickerLocale"; import { PriceLevelInterface } from "@/types/PriceLevelInterface"; +import { tableSortLocale } from "@/constants/PickerLocale"; interface Props { data: GetPriceLevelGroupInterface[]; @@ -348,7 +349,7 @@ const PriceLevelGroup = (props: Props) => { -
+

Nastavení cenových hladin pro skupiny uživatelů @@ -362,11 +363,7 @@ const PriceLevelGroup = (props: Props) => {

void; @@ -72,6 +73,7 @@ const UserGroup = (props: Props) => { { title: "Název", dataIndex: "name", + sorter: (a, b) => a.name.localeCompare(b.name), }, { title: "Akce", @@ -269,6 +271,7 @@ const UserGroup = (props: Props) => {
Date: Thu, 7 Dec 2023 10:36:46 +0100 Subject: [PATCH 17/49] limit max length of price level name to prevent BE crash or something --- src/components/Settings/components/PriceLevel/PriceLevel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Settings/components/PriceLevel/PriceLevel.tsx b/src/components/Settings/components/PriceLevel/PriceLevel.tsx index 90bb513..93be87d 100644 --- a/src/components/Settings/components/PriceLevel/PriceLevel.tsx +++ b/src/components/Settings/components/PriceLevel/PriceLevel.tsx @@ -166,7 +166,7 @@ const PriceLevel = (props: Props) => { ]} > - + - {/*TODO: split into two datetimes */} - + + + + @@ -317,18 +329,15 @@ const PriceLevelGroup = (props: Props) => { options={mutateDataToSelect(props.userGroups)} /> - {/*TODO: split into two datetimes */} - + + + + diff --git a/src/utils/filterSelectOption.ts b/src/utils/filterSelectOption.ts new file mode 100644 index 0000000..d68947d --- /dev/null +++ b/src/utils/filterSelectOption.ts @@ -0,0 +1,6 @@ +const filterSelectOptions = ( + input: string, + option?: { label: string; value: string } +) => (option?.label ?? "").toLowerCase().includes(input.toLowerCase()); + +export default filterSelectOptions; From 9e934a4b168b7bc9428c5156f8d28499c93d3fdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 7 Dec 2023 10:37:14 +0100 Subject: [PATCH 19/49] refactor --- .../modals/ModifyModal/ModifyModal.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/Settings/components/modals/ModifyModal/ModifyModal.tsx b/src/components/Settings/components/modals/ModifyModal/ModifyModal.tsx index 8341cca..587ba35 100644 --- a/src/components/Settings/components/modals/ModifyModal/ModifyModal.tsx +++ b/src/components/Settings/components/modals/ModifyModal/ModifyModal.tsx @@ -35,14 +35,14 @@ const ModifyModal = (props: Props) => { }, [props.modalOpen]); const onSubmit = () => { - form - .validateFields() - .then((values) => { - props.onSubmit(values); - props.setModalOpen(false); - form.resetFields(); - }) - .catch(() => {}); + form + .validateFields() + .then((values) => { + props.onSubmit(values); + props.setModalOpen(false); + form.resetFields(); + }) + .catch(() => {}); }; return ( From b274728d9c2b48936f346dc735f7d12798ff635d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 7 Dec 2023 10:37:35 +0100 Subject: [PATCH 20/49] modify interfaces for ValidFromTo --- src/components/Settings/types.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/components/Settings/types.ts b/src/components/Settings/types.ts index 86fa773..4555670 100644 --- a/src/components/Settings/types.ts +++ b/src/components/Settings/types.ts @@ -14,7 +14,6 @@ export interface GetPriceLevelGroupInterface { }; ValidFrom: number; ValidTo: number; - ValidFromTo: Dayjs[]; } export interface MutatedPriceLevelGroupInterface { @@ -30,16 +29,16 @@ export interface MutatedPriceLevelGroupInterface { id: number; name: string; }; - ValidFrom: number; - ValidTo: number; - ValidFromTo: Dayjs[]; + ValidFrom: Dayjs; + ValidTo: Dayjs | null; } export interface CreatePriceTypeGroupInterface { key: React.Key; Price: number; id: number; - ValidFromTo: [dayjs.Dayjs, dayjs.Dayjs]; + ValidFrom: number; + ValidTo: number; FoodPriceLevelID: number; UserGroupID: number; } From cb56fa56553a007ed7bc6b9bb66b566ab7bae1ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 7 Dec 2023 10:39:49 +0100 Subject: [PATCH 21/49] add search to update modal pricelevelgroup --- .../Settings/components/PriceLevelGroup/PriceLevelGroup.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx index 5c32b42..7806c2f 100644 --- a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx +++ b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx @@ -315,6 +315,8 @@ const PriceLevelGroup = (props: Props) => { rules={[{ required: true }]} > From bd57c1ddb2a88d7315867327a84b33987a44fd2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 7 Dec 2023 11:40:53 +0100 Subject: [PATCH 22/49] use czech locale for dates --- .../components/PriceLevelGroup/PriceLevelGroup.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx index 7806c2f..f0a5c9d 100644 --- a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx +++ b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx @@ -92,7 +92,7 @@ const PriceLevelGroup = (props: Props) => { title: "Platné od", dataIndex: "ValidFrom", render: (text, record) => ( -

{dayjs.unix(record.ValidFrom).format("YYYY-MM-DD")}

+

{dayjs.unix(record.ValidFrom).format("DD.MM.YYYY")}

), sorter: (a, b) => a.ValidFrom - b.ValidFrom, }, @@ -102,7 +102,7 @@ const PriceLevelGroup = (props: Props) => { render: (text, record) => (

{record.ValidTo - ? dayjs.unix(record.ValidTo).format("YYYY-MM-DD") + ? dayjs.unix(record.ValidTo).format("DD.MM.YYYY") : "Neomezené"}

), @@ -126,12 +126,12 @@ const PriceLevelGroup = (props: Props) => { Price: data.Price, ValidTo: data.ValidTo ? getTime({ - date: dayjs(data.ValidTo).format("YYYY-MM-DD"), + date: dayjs(data.ValidTo).format("DD.MM.YYYY"), day: "start", }) : 0, ValidFrom: getTime({ - date: dayjs(data.ValidFrom).format("YYYY-MM-DD"), + date: dayjs(data.ValidFrom).format("DD.MM.YYYY"), day: "start", }), UserGroupID: data.UserGroupID, From 6583aa30b5fc31cebd0dcda8d8bf45aa7c475786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 7 Dec 2023 11:46:11 +0100 Subject: [PATCH 23/49] edit create modal text --- .../Settings/components/PriceLevelGroup/PriceLevelGroup.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx index f0a5c9d..df8873b 100644 --- a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx +++ b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx @@ -229,7 +229,7 @@ const PriceLevelGroup = (props: Props) => { return (
- title="Vytvořte skupinu cenové hladiny" + title="Nastavte konkrétní výši cenově hladiny pro uživatelskou skupinu" modalOpen={createPriceModalOpen} setModalOpen={setCreatePriceModalOpen} onSubmit={createModalSubmitCallback} From 9aa60c7a7eee96eea816d2b014ecd0b2d3f3140d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 7 Dec 2023 13:02:12 +0100 Subject: [PATCH 24/49] add min value --- .../Settings/components/PriceLevelGroup/PriceLevelGroup.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx index df8873b..065ffde 100644 --- a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx +++ b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx @@ -271,7 +271,7 @@ const PriceLevelGroup = (props: Props) => { - + From f871eb6fef39fb780eeb284bf1c5034f94ac497a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 7 Dec 2023 13:02:23 +0100 Subject: [PATCH 25/49] update favicon --- src/app/favicon.ico | Bin 25931 -> 107064 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/app/favicon.ico b/src/app/favicon.ico index 718d6fea4835ec2d246af9800eddb7ffb276240c..7bd50dc58d177c7f5b48def20965753d9c2cdf30 100644 GIT binary patch literal 107064 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 VkwS5j_Ir6xM4;{u`KSz){Xf@P?jisH literal 25931 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 LrJugUA?W`A8`#=m From 0f7e6db9691d1f112b74dd58962afdebdcd25d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 7 Dec 2023 20:51:03 +0100 Subject: [PATCH 26/49] fix date passing into getTime function --- .../Settings/components/PriceLevelGroup/PriceLevelGroup.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx index 065ffde..d12d370 100644 --- a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx +++ b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx @@ -126,12 +126,12 @@ const PriceLevelGroup = (props: Props) => { Price: data.Price, ValidTo: data.ValidTo ? getTime({ - date: dayjs(data.ValidTo).format("DD.MM.YYYY"), + date: dayjs(data.ValidTo).format("YYYY-MM-DD"), day: "start", }) : 0, ValidFrom: getTime({ - date: dayjs(data.ValidFrom).format("DD.MM.YYYY"), + date: dayjs(data.ValidFrom).format("YYYY-MM-DD"), day: "start", }), UserGroupID: data.UserGroupID, From 2cb65cb4af8be4559a25b5ab0a9589a57885989e Mon Sep 17 00:00:00 2001 From: Diego Date: Sat, 9 Dec 2023 17:06:29 +0100 Subject: [PATCH 27/49] add pipeline to push to dev --- .github/workflows/push_registry_dev.yaml | 31 ++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/push_registry_dev.yaml diff --git a/.github/workflows/push_registry_dev.yaml b/.github/workflows/push_registry_dev.yaml new file mode 100644 index 0000000..014d9a6 --- /dev/null +++ b/.github/workflows/push_registry_dev.yaml @@ -0,0 +1,31 @@ +name: Build and Push Docker Image + +on: + push: + branches: + - master + + +jobs: + build_and_push: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Get SHA for last commit + run: echo "SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV + + + - name: Login to Docker Registry + run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin ${{ secrets.DOCKER_REGISTRY }} + + - name: Build Docker Image + run: docker build -t ${{ secrets.DOCKER_USERNAME }}/menuroo-admin-dev:${{ env.SHORT_SHA }} . + + - name: Tag Docker Image + run: docker tag ${{ secrets.DOCKER_USERNAME }}/menuroo-admin-dev:${{ env.SHORT_SHA }} ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/menuroo-admin-dev:${{ env.SHORT_SHA }} + + - name: Push Docker Image + run: docker push ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/menuroo-admin-dev:${{ env.SHORT_SHA }} From 0ad89e64d0c49c33d1fc58139dd119f768971350 Mon Sep 17 00:00:00 2001 From: Diego Date: Sat, 9 Dec 2023 17:08:55 +0100 Subject: [PATCH 28/49] fix pipeline because brain aneurysm --- .github/workflows/push_registry_dev.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push_registry_dev.yaml b/.github/workflows/push_registry_dev.yaml index 014d9a6..042c9fe 100644 --- a/.github/workflows/push_registry_dev.yaml +++ b/.github/workflows/push_registry_dev.yaml @@ -3,7 +3,7 @@ name: Build and Push Docker Image on: push: branches: - - master + - stage jobs: From b3b491591bc0031628b8cbc55c0a7417bf4792ac Mon Sep 17 00:00:00 2001 From: Diego Date: Sat, 9 Dec 2023 18:32:04 +0100 Subject: [PATCH 29/49] fix pipelines to add env vars during build --- .github/workflows/push_registry.yaml | 2 +- .github/workflows/push_registry_dev.yaml | 2 +- Dockerfile | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/push_registry.yaml b/.github/workflows/push_registry.yaml index 52854e6..2b6bb2a 100644 --- a/.github/workflows/push_registry.yaml +++ b/.github/workflows/push_registry.yaml @@ -22,7 +22,7 @@ jobs: run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin ${{ secrets.DOCKER_REGISTRY }} - name: Build Docker Image - run: docker build -t ${{ secrets.DOCKER_USERNAME }}/menuroo-admin:${{ env.SHORT_SHA }} . + run: docker build --build-arg NEXT_PUBLIC_API_URL="https://api.menuroo.cz/query" -t ${{ secrets.DOCKER_USERNAME }}/menuroo-admin:${{ env.SHORT_SHA }} . - name: Tag Docker Image run: docker tag ${{ secrets.DOCKER_USERNAME }}/menuroo-admin:${{ env.SHORT_SHA }} ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/menuroo-admin:${{ env.SHORT_SHA }} diff --git a/.github/workflows/push_registry_dev.yaml b/.github/workflows/push_registry_dev.yaml index 042c9fe..e197f32 100644 --- a/.github/workflows/push_registry_dev.yaml +++ b/.github/workflows/push_registry_dev.yaml @@ -22,7 +22,7 @@ jobs: run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin ${{ secrets.DOCKER_REGISTRY }} - name: Build Docker Image - run: docker build -t ${{ secrets.DOCKER_USERNAME }}/menuroo-admin-dev:${{ env.SHORT_SHA }} . + run: docker build --build-arg NEXT_PUBLIC_API_URL="https://api.dev.menuroo.cz/query" -t ${{ secrets.DOCKER_USERNAME }}/menuroo-admin-dev:${{ env.SHORT_SHA }} . - name: Tag Docker Image run: docker tag ${{ secrets.DOCKER_USERNAME }}/menuroo-admin-dev:${{ env.SHORT_SHA }} ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/menuroo-admin-dev:${{ env.SHORT_SHA }} diff --git a/Dockerfile b/Dockerfile index 60fd060..7f5d405 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,10 @@ FROM node:18-alpine -ARG NEXT_PUBLIC_API_URL="https://api.menuroo.com/query" +# Declare a build argument with a default value +ARG NEXT_PUBLIC_API_URL="https://api.dev.menuroo.com/query" + +# Set the environment variable with the build argument value +ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL} RUN mkdir -p /app WORKDIR /app From 74fdbb6e8760114d8adfe8383802941900415933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Mon, 11 Dec 2023 14:13:41 +0100 Subject: [PATCH 30/49] fix day names not being correct (#32) --- src/components/CreateMenu/CreateMenu.tsx | 25 +++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/components/CreateMenu/CreateMenu.tsx b/src/components/CreateMenu/CreateMenu.tsx index 1249d47..a59cfd8 100644 --- a/src/components/CreateMenu/CreateMenu.tsx +++ b/src/components/CreateMenu/CreateMenu.tsx @@ -249,7 +249,30 @@ const CreateMenu = ({ }); }; - const dateTitle = new Date(params.date).toLocaleDateString(pickerLocale.lang.locale, { weekday: 'long', month: 'numeric', day: 'numeric'}); + const dayNamesDict = { + neděle: "neděli", + pondělí: "pondělí", + úterý: "úterý", + středa: "středu", + čtvrtek: "čtvrtek", + pátek: "pátek", + sobota: "sobotu", + }; + + const date = new Date(params.date); + + const weekDay = date.toLocaleDateString(pickerLocale.lang.locale, { + weekday: "long", + }); + + const customDayName = dayNamesDict[weekDay as keyof typeof dayNamesDict]; + + const restOfDate = date.toLocaleDateString(pickerLocale.lang.locale, { + month: "numeric", + day: "numeric", + }); + + const dateTitle = `${customDayName} ${restOfDate}`; if (!dayjs(params.date).date()) { router.push("/admin"); From bd10fc70ee510c0a917a6410c266d581bd229b89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Mon, 11 Dec 2023 14:13:59 +0100 Subject: [PATCH 31/49] revalidate settings data properly (#31) --- src/app/admin/settings/page.tsx | 77 ++++++++++--------- .../components/PriceLevel/PriceLevel.tsx | 8 +- .../PriceLevelGroup/PriceLevelGroup.tsx | 8 +- .../components/UserGroup/UserGroup.tsx | 10 +-- src/utils/revalidate.ts | 9 +++ 5 files changed, 61 insertions(+), 51 deletions(-) create mode 100644 src/utils/revalidate.ts diff --git a/src/app/admin/settings/page.tsx b/src/app/admin/settings/page.tsx index 9132a92..c131ebc 100644 --- a/src/app/admin/settings/page.tsx +++ b/src/app/admin/settings/page.tsx @@ -10,14 +10,15 @@ import { revalidatePath } from "next/cache"; const getData = async () => { "use server"; - revalidatePath("/admin/settings"); - const { data: allPriceLvlGroupsData } = await getClient().query({ query: adminGetAllPriceLvlGroups, context: { headers: { Authorization: getToken(), }, + fetchOptions: { + next: { tags: ["priceLvlGroups"] }, + }, }, fetchPolicy: "network-only", }); @@ -28,6 +29,9 @@ import { revalidatePath } from "next/cache"; headers: { Authorization: getToken(), }, + fetchOptions: { + next: { tags: ["priceLevels"] }, + }, }, fetchPolicy: "network-only", }); @@ -39,7 +43,7 @@ import { revalidatePath } from "next/cache"; Authorization: getToken(), }, fetchOptions: { - next: { revalidate: 5 }, + next: { tags: ["userGroups"] }, }, }, fetchPolicy: "network-only", @@ -52,42 +56,39 @@ import { revalidatePath } from "next/cache"; }; }; -const Page = async () => { - const token = getToken(); + const Page = async () => { + const token = getToken(); - const { allPriceLvlGroupsData, priceLevelsData, userGroupsData } = - await getData(); + const { allPriceLvlGroupsData, priceLevelsData, userGroupsData } = + await getData(); - return ( -
-

- Nastavení -

-
-
-
- - -
- -
-
-
- ); -}; + return ( +
+

+ Nastavení +

+
+
+
+ + +
+ +
+
+
+ ); + }; export default Page; diff --git a/src/components/Settings/components/PriceLevel/PriceLevel.tsx b/src/components/Settings/components/PriceLevel/PriceLevel.tsx index 93be87d..36d27df 100644 --- a/src/components/Settings/components/PriceLevel/PriceLevel.tsx +++ b/src/components/Settings/components/PriceLevel/PriceLevel.tsx @@ -16,9 +16,9 @@ import adminCreateFoodPriceLvl from "@/queries/adminCreateFoodPriceLvl"; import adminDeleteFoodPriceLvl from "@/queries/adminDeleteFoodPriceLvl"; import adminUpdateFoodPriceLvl from "@/queries/adminUpdateFoodPriceLvl"; import { tableSortLocale } from "@/constants/PickerLocale"; +import revalidate from "@/utils/revalidate"; interface Props { - revalidateData: () => void; data: PriceLevelInterface[]; token: string; } @@ -76,7 +76,7 @@ const PriceLevel = (props: Props) => { }, }); - props.revalidateData(); + revalidate("priceLevels"); }; const deleteModalSubmitCallback = () => { @@ -95,7 +95,7 @@ const PriceLevel = (props: Props) => { }, }); - props.revalidateData(); + revalidate("priceLevels"); }; const updateModalSubmitCallback = (data: PriceLevelInterface) => { @@ -117,7 +117,7 @@ const PriceLevel = (props: Props) => { }, }); - props.revalidateData(); + revalidate("priceLevels"); }; return ( diff --git a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx index d12d370..e86be6f 100644 --- a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx +++ b/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx @@ -29,13 +29,13 @@ import pickerLocale from "@/constants/PickerLocale"; import { PriceLevelInterface } from "@/types/PriceLevelInterface"; import { tableSortLocale } from "@/constants/PickerLocale"; import filterSelectOptions from "@/utils/filterSelectOption"; +import revalidate from "@/utils/revalidate"; interface Props { data: GetPriceLevelGroupInterface[]; priceLevels: PriceLevelInterface[]; userGroups: PriceLevelInterface[]; token: string; - revalidateData: () => void; } const PriceLevelGroup = (props: Props) => { @@ -149,7 +149,7 @@ const PriceLevelGroup = (props: Props) => { }, }); - props.revalidateData(); + revalidate("priceLvlGroups"); }; const deleteModalSubmitCallback = () => { @@ -168,7 +168,7 @@ const PriceLevelGroup = (props: Props) => { }, }); - props.revalidateData(); + revalidate("priceLvlGroups"); }; const updateModalSubmitCallback = (data: MutatedPriceLevelGroupInterface) => { @@ -216,7 +216,7 @@ const PriceLevelGroup = (props: Props) => { }, }); - props.revalidateData(); + revalidate("priceLvlGroups"); }; const mutateDataToSelect = (data: PriceLevelInterface[]) => { diff --git a/src/components/Settings/components/UserGroup/UserGroup.tsx b/src/components/Settings/components/UserGroup/UserGroup.tsx index 65aee4b..a396c09 100644 --- a/src/components/Settings/components/UserGroup/UserGroup.tsx +++ b/src/components/Settings/components/UserGroup/UserGroup.tsx @@ -21,9 +21,9 @@ import { import EmailHandles from "./EmailHandles"; import { UserGroupContextProvider } from "./UserGroupContext"; import { tableSortLocale } from "@/constants/PickerLocale"; +import revalidate from "@/utils/revalidate"; interface Props { - revalidateData: () => void; data: UserGroupInterface[]; token: string; } @@ -121,7 +121,7 @@ const UserGroup = (props: Props) => { }); setEditPriceModalOpen(false); - props.revalidateData(); + revalidate("userGroups"); }; const createModalSubmitCallback = (data: CreateUserGroupInterface) => { @@ -136,7 +136,7 @@ const UserGroup = (props: Props) => { }, }); - props.revalidateData(); + revalidate("userGroups"); }; const deleteModalSubmitCallback = () => { @@ -155,7 +155,7 @@ const UserGroup = (props: Props) => { }, }); - props.revalidateData(); + revalidate("userGroups"); }; const updateModalSubmitCallback = (data: UserGroupInterface) => { @@ -189,7 +189,7 @@ const UserGroup = (props: Props) => { }, }); - props.revalidateData(); + revalidate("userGroups"); }; const memoizedContextValue = useMemo(() => { diff --git a/src/utils/revalidate.ts b/src/utils/revalidate.ts new file mode 100644 index 0000000..3c2ceba --- /dev/null +++ b/src/utils/revalidate.ts @@ -0,0 +1,9 @@ +"use server"; + +import { revalidateTag } from "next/cache"; + +const revalidate = (tag: string) => { + revalidateTag(tag); +}; + +export default revalidate; From 4c83fb9c026a39d5a6458063c7377086f61ae6a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 14 Dec 2023 14:02:27 +0100 Subject: [PATCH 32/49] improve data fetching on admin && menu pages --- src/app/admin/[date]/page.tsx | 38 +++++- src/app/admin/page.tsx | 38 +++++- src/app/admin/settings/page.tsx | 1 - src/components/AdminPage/AdminPage.tsx | 120 +---------------- .../AdminPageContent/AdminPageContent.tsx | 121 ++++++++++++++++++ .../AdminPageTitle/AdminPageTitle.tsx | 15 +++ src/components/CreateMenu/CreateMenu.tsx | 82 +++++------- 7 files changed, 246 insertions(+), 169 deletions(-) create mode 100644 src/components/AdminPage/components/AdminPageContent/AdminPageContent.tsx create mode 100644 src/components/AdminPage/components/AdminPageTitle/AdminPageTitle.tsx diff --git a/src/app/admin/[date]/page.tsx b/src/app/admin/[date]/page.tsx index 0718d4d..2eac8fa 100644 --- a/src/app/admin/[date]/page.tsx +++ b/src/app/admin/[date]/page.tsx @@ -2,11 +2,45 @@ import CreateMenu from "@/components/CreateMenu/CreateMenu"; import getToken from "@/utils/getToken"; +import getMenusByDate from "@/queries/getMenusByDate"; +import { getClient } from "@/lib/ssrApolloClient"; +import getTime from "@/lib/getTime"; -const CreateMenuPage = ({ params }: { params: { date: string } }) => { +const CreateMenuPage = async ({ params }: { params: { date: string } }) => { const token = getToken(); - return ; + const { data: menusByDate } = await getClient() + .query({ + query: getMenusByDate, + variables: { + dateFrom: getTime({ + date: params.date, + day: "middle", + }), + dateTo: getTime({ + date: params.date, + day: "middle", + }), + }, + context: { + headers: { + Authorization: getToken(), + }, + fetchOptions: { + next: { tags: ["menusByDate"] }, + }, + }, + fetchPolicy: "network-only", + }) + .catch((err) => err); + + return ( + + ); }; export default CreateMenuPage; diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index 33d44d8..271cffc 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -2,11 +2,45 @@ import getToken from "@/utils/getToken"; import AdminPage from "@/components/AdminPage/AdminPage"; +import getMenusByDate from "@/queries/getMenusByDate"; +import { getClient } from "@/lib/ssrApolloClient"; +import dayjs from "dayjs"; -const Page = () => { +const getData = async () => { + const viewedDatesUnix = [ + dayjs().startOf("month").subtract(5, "day").unix(), + dayjs().endOf("month").add(15, "day").unix(), + ]; + + const { data: menusByDate } = await getClient().query({ + query: getMenusByDate, + variables: { + dateFrom: viewedDatesUnix[0], + dateTo: viewedDatesUnix[1], + }, + context: { + headers: { + Authorization: getToken(), + }, + fetchOptions: { + next: { tags: ["menusByDate"] }, + }, + }, + fetchPolicy: "network-only", + }); + + return { + menusByDate, + }; +}; + +const Page = async () => { const token = getToken(); + const { menusByDate } = await getData(); - return ; + return ( + + ); }; export default Page; diff --git a/src/app/admin/settings/page.tsx b/src/app/admin/settings/page.tsx index c131ebc..e43d799 100644 --- a/src/app/admin/settings/page.tsx +++ b/src/app/admin/settings/page.tsx @@ -5,7 +5,6 @@ import adminGetAllFoodPriceLvls from "@/queries/adminGetAllFoodPriceLvls"; import UserGroup from "@/components/Settings/components/UserGroup/UserGroup"; import { getClient } from "@/lib/ssrApolloClient"; import adminGetAllUserGroups from "@/queries/adminGetAllUserGroups"; -import { revalidatePath } from "next/cache"; const getData = async () => { "use server"; diff --git a/src/components/AdminPage/AdminPage.tsx b/src/components/AdminPage/AdminPage.tsx index d345a05..4ad03f7 100644 --- a/src/components/AdminPage/AdminPage.tsx +++ b/src/components/AdminPage/AdminPage.tsx @@ -1,127 +1,21 @@ -"use client"; +"use server"; -import React, { useEffect, useState } from "react"; -import { useLazyQuery } from "@apollo/client"; -import { useRouter } from "next/navigation"; -import { Typography, Calendar } from "antd"; -import type { Dayjs } from "dayjs"; -import dayjs from "dayjs"; -import utc from "dayjs/plugin/utc"; -import pickerLocale from "@/constants/PickerLocale"; -import getMenusByDate from "@/queries/getMenusByDate"; +import React from "react"; import { MenuInterface } from "@/types/MenuInterface"; +import Title from "./components/AdminPageTitle/AdminPageTitle"; +import AdminPageContent from "./components/AdminPageContent/AdminPageContent"; interface Props { token: string; + menusByDate: MenuInterface[]; } const AdminPage = (props: Props) => { - dayjs.extend(utc); - const [menuMap, setMenuMap] = useState | undefined>( - undefined - ); - const [viewedDatesUnix, setViewedDatesUnix] = useState([ - dayjs().startOf("month").subtract(5, "day").unix(), - dayjs().endOf("month").add(15, "day").unix(), - ]); - const { Title } = Typography; - const [value, setValue] = useState(dayjs().format("YYYY-MM-DD")); - const router = useRouter(); - const currentDate = dayjs().utc(); - - const [menusByDate, { data }] = useLazyQuery(getMenusByDate, { - context: { - headers: { - Authorization: props.token, - }, - }, - fetchPolicy: "network-only", - }); - - const onSelect = (newValue: Dayjs) => { - if (newValue.format("YYYY-MM-DD") !== value) { - setValue(newValue.format("YYYY-MM-DD")); - return; - } - router.push(`/admin/${newValue.format("YYYY-MM-DD")}`); - }; - - useEffect(() => { - menusByDate({ - variables: { - dateFrom: viewedDatesUnix[0], - dateTo: viewedDatesUnix[1], - }, - }); - }, [viewedDatesUnix]); - - useEffect(() => { - if (!data?.getMenusByDate) return; - - const menuList: MenuInterface[] = data.getMenusByDate; - - const menuMap = new Map(); - - for (let menu of menuList) { - const date = menu.date; - if (menuMap.has(date)) { - menuMap.set(date, menuMap.get(date) + 1); - } else { - menuMap.set(date, 1); - } - } - - setMenuMap((prevMenuMap) => { - const newMenuMap = new Map(prevMenuMap); - for (let [date, count] of menuMap.entries()) { - if (newMenuMap.has(date) && !prevMenuMap?.has(date)) { - newMenuMap.set(date, newMenuMap.get(date) + count); - } else { - newMenuMap.set(dayjs.unix(date).utc().unix(), count); - } - } - return newMenuMap; - }); - }, [data]); - - const mapHasValue = (timestamp: number) => { - return menuMap?.has(timestamp); - }; - - const getMapValueByDate = (timestamp: number) => { - const date = dayjs.unix(timestamp).utc().startOf("day").unix(); - return menuMap?.get(date); - }; - return (
- - Jídelní lístek - -
- - setViewedDatesUnix([ - e.startOf("month").unix(), - e.endOf("month").unix(), - ]) - } - locale={pickerLocale} - cellRender={(date: Dayjs) => { - return ( -
-

- {mapHasValue(date.utc().startOf("day").unix()) - ? `(${getMapValueByDate(date.unix())})` - : null} -

-
- ); - }} - /> -
+ Jídelní lístek +
); diff --git a/src/components/AdminPage/components/AdminPageContent/AdminPageContent.tsx b/src/components/AdminPage/components/AdminPageContent/AdminPageContent.tsx new file mode 100644 index 0000000..443d904 --- /dev/null +++ b/src/components/AdminPage/components/AdminPageContent/AdminPageContent.tsx @@ -0,0 +1,121 @@ +"use client"; + +import React, { useEffect, useState } from "react"; +import { useLazyQuery } from "@apollo/client"; +import { useRouter } from "next/navigation"; +import { Calendar } from "antd"; +import type { Dayjs } from "dayjs"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import pickerLocale from "@/constants/PickerLocale"; +import getMenusByDate from "@/queries/getMenusByDate"; +import { MenuInterface } from "@/types/MenuInterface"; + +interface Props { + token: string; + menusByDate: MenuInterface[]; +} + +const AdminPageContent = (props: Props) => { + dayjs.extend(utc); + const [menuMap, setMenuMap] = useState | undefined>( + undefined + ); + const [viewedDatesUnix, setViewedDatesUnix] = useState([ + dayjs().startOf("month").subtract(5, "day").unix(), + dayjs().endOf("month").add(15, "day").unix(), + ]); + const [value, setValue] = useState(dayjs().format("YYYY-MM-DD")); + const router = useRouter(); + + const [menusByDate, { data }] = useLazyQuery(getMenusByDate, { + context: { + headers: { + Authorization: props.token, + }, + }, + fetchPolicy: "network-only", + }); + + const onSelect = (newValue: Dayjs) => { + if (newValue.format("YYYY-MM-DD") !== value) { + setValue(newValue.format("YYYY-MM-DD")); + return; + } + router.push(`/admin/${newValue.format("YYYY-MM-DD")}`); + }; + + useEffect(() => { + menusByDate({ + variables: { + dateFrom: viewedDatesUnix[0], + dateTo: viewedDatesUnix[1], + }, + }); + }, [viewedDatesUnix]); + + useEffect(() => { + if (!data?.getMenusByDate && !props.menusByDate) return; + + const menuList: MenuInterface[] = data?.getMenusByDate ?? props.menusByDate; + + const menuMap = new Map(); + + for (let menu of menuList) { + const date = menu.date; + if (menuMap.has(date)) { + menuMap.set(date, menuMap.get(date) + 1); + } else { + menuMap.set(date, 1); + } + } + + setMenuMap((prevMenuMap) => { + const newMenuMap = new Map(prevMenuMap); + for (let [date, count] of menuMap.entries()) { + if (newMenuMap.has(date) && !prevMenuMap?.has(date)) { + newMenuMap.set(date, newMenuMap.get(date) + count); + } else { + newMenuMap.set(dayjs.unix(date).utc().unix(), count); + } + } + return newMenuMap; + }); + }, [props.menusByDate, data]); + + const mapHasValue = (timestamp: number) => { + return menuMap?.has(timestamp); + }; + + const getMapValueByDate = (timestamp: number) => { + const date = dayjs.unix(timestamp).utc().startOf("day").unix(); + return menuMap?.get(date); + }; + + return ( +
+ + setViewedDatesUnix([ + e.startOf("month").unix(), + e.endOf("month").unix(), + ]) + } + locale={pickerLocale} + cellRender={(date: Dayjs) => { + return ( +
+

+ {mapHasValue(date.utc().startOf("day").unix()) + ? `(${getMapValueByDate(date.unix())})` + : null} +

+
+ ); + }} + /> +
+ ); +}; +export default AdminPageContent; diff --git a/src/components/AdminPage/components/AdminPageTitle/AdminPageTitle.tsx b/src/components/AdminPage/components/AdminPageTitle/AdminPageTitle.tsx new file mode 100644 index 0000000..97afbab --- /dev/null +++ b/src/components/AdminPage/components/AdminPageTitle/AdminPageTitle.tsx @@ -0,0 +1,15 @@ +import { ReactNode } from "react"; + +interface Props { + children: ReactNode; +} + +const AdminPageTitle = (props: Props) => { + return ( +

+ {props.children} +

+ ); +}; + +export default AdminPageTitle; diff --git a/src/components/CreateMenu/CreateMenu.tsx b/src/components/CreateMenu/CreateMenu.tsx index a59cfd8..6757dd4 100644 --- a/src/components/CreateMenu/CreateMenu.tsx +++ b/src/components/CreateMenu/CreateMenu.tsx @@ -4,7 +4,7 @@ import React, { useEffect, useState } from "react"; import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; import { useRouter } from "next/navigation"; -import { Typography, Card, Button, Spin, message } from "antd"; +import { Typography, Card, Button, message } from "antd"; import MenuItem from "@/components/MenuItem/MenuItem"; import { PlusOutlined } from "@ant-design/icons"; import { MealOptionsInterface } from "@/types/MealOptionsInterface"; @@ -17,61 +17,40 @@ import adminCreateMenus from "@/queries/adminCreateMenus"; import adminCreateMenu from "@/queries/adminCreateMenu"; import adminUpdateMenu from "@/queries/adminUpdateMenus"; import adminDeleteMenu from "@/queries/adminDeleteMenu"; -import getMenusByDate from "@/queries/getMenusByDate"; import { MenuInterface } from "@/types/MenuInterface"; import adminGetAllFoodPriceLvls from "@/queries/adminGetAllFoodPriceLvls"; import { NoticeType } from "antd/lib/message/interface"; import getTime from "@/lib/getTime"; import pickerLocale from "@/constants/PickerLocale"; +import revalidate from "@/utils/revalidate"; - -const CreateMenu = ({ - params, - token, -}: { +interface Props { params: { date: string }; token: string; -}) => { + menus: MenuInterface[]; +} + +const CreateMenu = (props: Props) => { const router = useRouter(); dayjs.extend(utc); - const menuByDate = useQuery(getMenusByDate, { - variables: { - dateFrom: getTime({ - date: params.date, - day: "middle", - }), - dateTo: getTime({ - date: params.date, - day: "middle", - }), - }, - context: { - headers: { - Authorization: token, - }, - }, - fetchPolicy: "network-only", - }); const [menuIsSet, setMenuIsSet] = useState(false); const [createMenus] = useMutation(adminCreateMenus); const [createMenu] = useMutation(adminCreateMenu); const [updateMenu] = useMutation(adminUpdateMenu); const [deleteMenu] = useMutation(adminDeleteMenu); - const parsedMenu: MenuInterface[] = menuByDate.data?.getMenusByDate.map( - (item: any) => { - return { - id: item.id, - order: item.Order, - key: item.id, - level: item.priceLvlId, - meal: item.meal, - soup: item.soup, - drink: item.drink, - }; - } - ); + const parsedMenu: MenuInterface[] = props?.menus.map((item: any) => { + return { + id: item.id, + order: item.Order, + key: item.id, + level: item.priceLvlId, + meal: item.meal, + soup: item.soup, + drink: item.drink, + }; + }); const [menu, setMenu] = useState(undefined); const [menuOptions, setMenuOptions] = useState< MealOptionsInterface | undefined @@ -83,7 +62,7 @@ const CreateMenu = ({ const options = { context: { headers: { - Authorization: token, + Authorization: props.token, }, }, }; @@ -130,7 +109,7 @@ const CreateMenu = ({ ? menu?.map((item: MenuInterface) => { return { date: getTime({ - date: params.date, + date: props.params.date, day: "middle", }), order: item.order, @@ -144,11 +123,12 @@ const CreateMenu = ({ }, context: { headers: { - Authorization: token, + Authorization: props.token, }, }, }); + revalidate("menusByDate"); router.push("/admin"); return; } @@ -165,7 +145,7 @@ const CreateMenu = ({ return { id: item.id, date: getTime({ - date: params.date, + date: props.params.date, day: "middle", }), order: item.order, @@ -179,7 +159,7 @@ const CreateMenu = ({ }, context: { headers: { - Authorization: token, + Authorization: props.token, }, }, }); @@ -191,7 +171,7 @@ const CreateMenu = ({ variables: { input: { date: getTime({ - date: params.date, + date: props.params.date, day: "middle", }), order: item.order, @@ -203,7 +183,7 @@ const CreateMenu = ({ }, context: { headers: { - Authorization: token, + Authorization: props.token, }, }, }); @@ -216,7 +196,7 @@ const CreateMenu = ({ }, context: { headers: { - Authorization: token, + Authorization: props.token, }, }, }); @@ -233,12 +213,13 @@ const CreateMenu = ({ }, context: { headers: { - Authorization: token, + Authorization: props.token, }, }, }); }); + revalidate("menusByDate"); router.push("/admin"); }; @@ -259,7 +240,7 @@ const CreateMenu = ({ sobota: "sobotu", }; - const date = new Date(params.date); + const date = new Date(props.params.date); const weekDay = date.toLocaleDateString(pickerLocale.lang.locale, { weekday: "long", @@ -274,7 +255,7 @@ const CreateMenu = ({ const dateTitle = `${customDayName} ${restOfDate}`; - if (!dayjs(params.date).date()) { + if (!dayjs(props.params.date).date()) { router.push("/admin"); return; } @@ -333,7 +314,6 @@ const CreateMenu = ({
- {menuByDate.loading && } ); From 8e2e6cf5a9803f663e69a913ddb66032da49ddc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Sun, 17 Dec 2023 18:48:47 +0100 Subject: [PATCH 33/49] Add Jest configuration and LoginTitle component (#33) --- bun.lockb | Bin 182619 -> 315626 bytes jest.config.ts | 13 +++++++++++ package.json | 13 +++++++++-- src/components/Login/LoginPage.tsx | 6 ++--- .../components/LoginTitle/LoginTitle.test.tsx | 14 ++++++++++++ .../components/LoginTitle/LoginTitle.tsx | 21 ++++++++++++++++++ 6 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 jest.config.ts create mode 100644 src/components/Login/components/LoginTitle/LoginTitle.test.tsx create mode 100644 src/components/Login/components/LoginTitle/LoginTitle.tsx diff --git a/bun.lockb b/bun.lockb index 0fa73f3406c42a50de682bced9c58e5d8a7635c6..9cf1d2bece742ea23788929fb599af63b96759e9 100755 GIT binary patch literal 315626 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 z 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

=xGEPwlJ6cDrLguWYwSnUPv& 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�{lusP6ID^Tc=T$W^MdTVYC3FqAsHW%Nt)XFZw0hwQ_txnQsfQCraUv3wv-=2L|9WL1Rj0FsN zTR;e?LgHpMuzQXQ^fP3ZF5Dz4wu<{)1}7b29?{UUAi7nD`X0pZdT-sv<}A;mjy5cI9MP(2Gp*Vfy#2%Y1~~h&r~xj8qHjE6{hLY! zY)umA}CM3rtZgEMy7j&HYpH&jF+hF>&*^??q(^i2UfTNw?IpNp+q&r7zPP)hHu~qFB_$ zscN&S-l%^jY}X_Nb9C1ZYj$0jm}b0iG?^$pKJk`fq3g01+=C3VZ~`KuClmqjLB}IdlbtM46Qx*ZCuayE9h~yYCR4a z_ZudvNRVH4cTUG9i&KrIZh1~O$TJRlk86)I7kd)XnKNQ8b+uW_+seA@7Td-RohC~4 zydW}=TWFz=LpMjc{VGqZ%iRtzxRACcr)uI!9gLS};yJtVJ$s(w7M(jxE)(fd3F%kC!rK>WUD5D`lFZkqGXLHW^QfJw9|#8jqczPfsgY7arTEZVtu$adH;PVyY$}x z7L{kS))C9+0AD`G9C04@@M9>qsd$8^+MQJ^ybTtNL!xz2E~!a?K?ZeuZp<51iFoPh zOQ};@2OD7#O2~1HsKP)-G0M*?^o5E5lOL8)sd0LDssCaJLh5TM+g*b;c&1X=Fz67ElJBW5m8OHm9Q2S;8px=5R#7cVttP zJ7o7oM>9M^5v3~U&Pg=x_)&hC9r@S18(u`2P56{297<2MJQE;b0Y>KG5W21 z;A+Kn85~Qb#yq3yxQ#uA>FzMVcQ!|@dpRo5c zd&;V1wRd$?I#5NADG%@#u&7eYb({@Maa21)o1u~>*Mb>oj00{odNI+w0$_{d*05w9TRy0S~SbPA)U$srhDK&-nbF`Ayamd3r$n%)gJjmDqmo-eyf#CinqV&@mOJFe z?5ol%L5K*hWnWr-hQI4;yK>nAJ*2#OLJ>%EcRl5a zAYkz+%4)RDyl=32fT?5hDV&fAR3XB)%N>ic>ybtJ8oM4CIjQn$o zhG2Vfgy!>JeYA$X#M!_cN0r&+xu9q#(DiwC9ruMa zFX|dqisUBLrWS)o{!-(-f7gf~0u{xW4swW;UIpv&q1waiugY|}+QHkzVVZ1Gd~j5+ zC`E|F3k&ErJ4eK_3WzrspnMRL%L`en^Sa!KplboGU-o7}X59f>ZfQ~q%ds(?6!C%w z;$E7{6^cn0$>IdHQ(`uSOdt!9Q8K!q9jH#6q_t7HINq(-J7i0IGgX`nO;VNW<)v== z(wEGj9F+~q4%$j3sv&E(*maknHLZ};5Z z6Q`HVD@DqI`sD1cfL+t~dPIZIgTri-?D1m`1SOwy!sCFPa?sgnZ1p_kz^8!87iflM zhN7K@EqYO2y?W73g-K6#cU2gW8tT;&l#co~+U=`X@62var?=V4Ub}wf_LZ9hu*Dhs z#`><>$lELL`ml>b0rd5oPu{u%@q^;(wJRwv3J0+>tOvi@qUx*MFHdInUEMM02nZ*& zYHCx%sAxz|ZK6gLDGw3@H9Anw+eg=(rcV91b3~vajQXR~c<#GGCo z@l7$VTcI#-92Uy+04K77O?F}o!sMd%HTD`Mra>3WlQl*{azZG^K=opckb;NfP1HID z;go}#9ZxyA7aB!}QRBZ{yc+NXLrNVOXOpHxP`di-Ho|GFsn!P9eTiObX9Qn60gNNO zCAWG39IZGgoHG~cAEm@ZeWE@DQ54g*<<`)q1P807DP(TdXhs{zCajRk+gpQ`cYhrZ zZE%9!Po)6)2m5eDrVGELvKkz*;-)0XL1Yu1hsM$_2V8Hfm5>Ob+-~91NmYOUt|wCj~x=Nkd#e z+j{1n-#)qEnxoAqO}FHTwIb_Gs`3H0D*6DUta(%Ow8p_WzFK*Bj1xv#ZFX$FYq8{# zE2XF|9#nq3BXmM)YVfCQy_r$C)iO={?hL<;?(Gz(C?qNjM2aW4s!nme2o0jB~O|)oo$AS5p;s~dwC(2UYe1ttq?3U(J&`4 z3yY0%g13{RWSrYjqoXL~whiDusN195a>WpPQUNrI3Hf8*lb$@oR1Tuy589I4Mx`@I zAnT+k7Tb{0b>@Agwy|J%q3mXW6TLo|pRxwiLy2^d6)1r<@19_kZF7SJdown~O%O{| z0vO9YCfioR&oa-5-u zwUGu7e0g-NdOFpurY4TUb$AH?=i!fvJ4fz=;P&47p-+#G_fU1gn14#Xvxo{VS!ctt zI;t-rM1=s{2Z77`I_jB?Y@OE{l7sdG z8*zDL?FhcBYDE#?*0V$j!vK^r{6X8NLbuxn?dOZ#9B0>*lPIO1nG*Vm+76v&a8UDU z>3KZ~dU19BoIVnP1fvE{B!_G4KCdBmZ^flwl;~z{suiGZNZo=UA_FHA6e}T^bE459 zlMGq|F^Yw|>=YGXi70Gdyb=|X!O8L=Y&17XD6c8YmooyU-}hE*KizsUw+2v+p;0!Z zLthl_h>Es}$?&z)w3~AEJ20ogci@ZGFNYO(F|s=sb+Hdp8{usuI9uQ>NB(?FsQDQ-b~$Ih(k-^G*HQ6 zeO^AaRnopqQG#yEy}ljdgV zM@@Mpz7#7(3+QCb$y-<&qFvSp!F-Typu2CFD636HQr{L?F#uPxHX|ig;YN1?-$X_k z@U-c@xe_&$Oh0fv&CP=LjD{Odd3~P6cghucv$Ak+e#D2~r`z>@gD8&NB`#Ra55!$F z!Z>(r&49VX|3o*oQPK_V1d*$p$C1X^g@?%!2=(DI@Yn-pV??_caRVsBm%Y>HxG9FSRx2zRCL9E~t){3cJozTZD9%Q+;;3>S<-30O zD*l2HrBVw|H!C>1NlJ-1L7>|l8PZM*;Y=eglkG6NVRHt&3kd_VE=zRFK|3z+sB!j| z#oSwH3}lu)VMSl9SgW@K-*uD^rR(TpJ|_2f2J*Nk>%@bL*k-k?njWo5F(w)oN2BIB zB8o{?GD1z%PUr$~`O)hkx}utaxLBL!ti#nJwP^{y0-Pvz?Aj)d8lbV=g>S41 zUj46n+_KrY4=(d|;^X(~WA*lQezultYslQ+y$>zECJU9N z^>GeS7hZ6Dj|UK*7TBC|>v78-Tj@@$0jHIF#zpN=?6^xV!JqTu#(IzcNZyhq-nek# z;avCH5Vn^)8Hb%fCWatnVjw~Uu|m`m=}k^33fK?<_DS}ez~ZG+o(L#-B)-H&%bpGJ z8D^np^ULS!?X)FFi8+_I9HKN)CCd+$&R-}Gm6gtF zYOb)k&I)}2Y>23Im6K!-_8zF3o>WXZTPdZ#xm<^EA?lt#T8!xn&^QWbyalPG31t)! zgLqUvU3zjo)_+GpMmIM`-myPb@j<1dTxsno3v@d{7ohB7>E}P-4KJXr?nX^wHVFIV zUW33{NSH5<;B&220-hn60ojD12d;zX22?h;?NE`Zs=v>L(Dvol2A&Lc|DAQ2v`CTgsX%ln1&CWt6(4xT!OCMPB?i#9ERf<5n5OYC> zJ540=qDLkBBMYEyb301A0)$pG(cC5v@J(2yP934UN~LyjKA`f8a%wS@JW9^>I&g6Kpi)zAY|48= z#rze~)xD~193Sy#S@N_-)`RqZJ4faLiv_4|e$gH(0t`dRqlAF8#0Tb%3^;1N>L86J zOfbe#S+F@I(B-59<<#x=&QXGtQec$ULNjXp3zD*SY!O89R4r_3G~za(ma?7bhDlE` zoyu#5Bz=~^6=wra9ECL96hYO2yzL&DP9XCt9{n-2CbOz5Z^4h^^iZym}QdTELh1}dK8x;+PC`P|r&nkOu z`wp>C|AITeplHIy)jM$doVqy1&_FBX4ILEsUG8bvA)8B(=|0^rl0(tW3jPL6I%kA? zd65unHZHz&P=rXqP~t{0Cnq0nBA&_83%dgq2S}8xevmjsKxvu>1VsE1;dg9X@`{rV zOXy%(K$J9&<>Et}kx@)=iMTDp1J2luYE!2|LMu0N_Eg-7mI0v|E;LG}8fqdaXefe` z@JZ_H+7-^sKTezZ;yEWzBzg!I!3~Z=d@rbLuU5Rcc3Va-(?d3e zbie9@#Z}P~>xc<2;=i<-sHrIpZNj5u$-#!Z?&@_2vxw&8w%?&w!4o2){I}i@LUN*G zLnf(BqfuhjbO$vYz{}Z(H$-AL%63*?ZgjV6aXg*C?*stt_9jf1jk4fvN}_IY!3v)n z?@q-*(MeG(N~ib<+qf2r#j0;>qFDzZDCEEw3LCM+8enq3EXyqtA=WJszRFmbpN?d{6{<$X&QaIbEMr!i2a1#g%0O zN4Bv@33KHEeeZ?5MW?@^)rnr~j+>QfW2o|uGT0~nKmFhT17dxMmjD0& delta 43389 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 diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..0dd0922 --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,13 @@ +import type { Config } from "jest"; +import nextJest from "next/jest.js"; + +const createJestConfig = nextJest({ + dir: "./", +}); + +const config: Config = { + coverageProvider: "v8", + testEnvironment: "jsdom", +}; + +export default createJestConfig(config); diff --git a/package.json b/package.json index 8673098..af6c6d3 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,9 @@ "build": "next build", "start": "next start", "lint": "next lint", - "analyze": "ANALYZE=true next build" + "analyze": "ANALYZE=true next build", + "test": "jest", + "test:watch": "jest --watch" }, "dependencies": { "@ant-design/cssinjs": "^1.17.0", @@ -25,14 +27,21 @@ "react-dom": "18.2.0" }, "devDependencies": { + "@testing-library/jest-dom": "^6.1.5", + "@testing-library/react": "^14.1.2", + "@types/jest": "^29.5.11", "@types/node": "20.6.0", "@types/react": "18.2.21", "@types/react-dom": "18.2.7", + "autoprefixer": "10.4.15", "eslint": "8.49.0", "eslint-config-next": "13.5.4", - "autoprefixer": "10.4.15", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "postcss": "8.4.29", "tailwindcss": "3.3.3", + "ts-jest": "^29.1.1", + "ts-node-dev": "^2.0.0", "typescript": "5.2.2" } } diff --git a/src/components/Login/LoginPage.tsx b/src/components/Login/LoginPage.tsx index 6d4c828..812e597 100644 --- a/src/components/Login/LoginPage.tsx +++ b/src/components/Login/LoginPage.tsx @@ -6,6 +6,7 @@ import { LockOutlined, UserOutlined } from "@ant-design/icons"; import { Button, Form, Input, message, Typography } from "antd"; import { useLazyQuery } from "@apollo/client"; import login from "@/queries/login"; +import LoginTitle from "./components/LoginTitle/LoginTitle"; interface Props { setToken: (token: string) => void; @@ -55,10 +56,7 @@ const LoginPage = (props: Props) => { {contextHolder}

-

Vítejte v

- - Menuroo - +
{ + it("renders the application title", () => { + render(); + + const heading = screen.getByRole("heading", { level: 1 }); + + expect(heading).toBeInTheDocument(); + expect(heading).toHaveTextContent("Menuroo"); + }); +}); diff --git a/src/components/Login/components/LoginTitle/LoginTitle.tsx b/src/components/Login/components/LoginTitle/LoginTitle.tsx new file mode 100644 index 0000000..a5d5193 --- /dev/null +++ b/src/components/Login/components/LoginTitle/LoginTitle.tsx @@ -0,0 +1,21 @@ +import { Typography } from "antd"; + +interface Props { + title: string; + titleAccentHighlighted: string; +} + +const LoginTitle = (props: Props) => { + const { Title } = Typography; + + return ( +
+

{props.title}

+ + {props.titleAccentHighlighted} + +
+ ); +}; + +export default LoginTitle; From ab15d837d051c30703d24121a66b004fef71e831 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 4 Jan 2024 12:38:49 +0100 Subject: [PATCH 34/49] Implement new design (#37) * Login page redesign (#35) * New login page redesign & update next & remove tailwindcss * add error state to login input * Redesign/Layout and main page reimplementations (#36) * rework layout make layout run on server, rework pathings, add sidebar, etc. * admin layout, menu table, route reimplementation * table row * implement month switching to menu table * init modal * init modal menu --- .eslintrc.json | 3 +- .gitignore | 2 + bun.lockb | Bin 315626 -> 300275 bytes package.json | 6 +- postcss.config.js | 1 - public/fonts/Nunito-Black.ttf | Bin 0 -> 132032 bytes public/fonts/Nunito-BlackItalic.ttf | Bin 0 -> 135336 bytes public/fonts/Nunito-Bold.ttf | Bin 0 -> 132152 bytes public/fonts/Nunito-BoldItalic.ttf | Bin 0 -> 135396 bytes public/fonts/Nunito-ExtraBold.ttf | Bin 0 -> 132072 bytes public/fonts/Nunito-ExtraBoldItalic.ttf | Bin 0 -> 135408 bytes public/fonts/Nunito-ExtraLight.ttf | Bin 0 -> 131992 bytes public/fonts/Nunito-ExtraLightItalic.ttf | Bin 0 -> 135344 bytes public/fonts/Nunito-Italic.ttf | Bin 0 -> 135532 bytes public/fonts/Nunito-Light.ttf | Bin 0 -> 132220 bytes public/fonts/Nunito-LightItalic.ttf | Bin 0 -> 135664 bytes public/fonts/Nunito-Medium.ttf | Bin 0 -> 132304 bytes public/fonts/Nunito-MediumItalic.ttf | Bin 0 -> 135588 bytes public/fonts/Nunito-Regular.ttf | Bin 0 -> 132204 bytes public/fonts/Nunito-SemiBold.ttf | Bin 0 -> 132156 bytes public/fonts/Nunito-SemiBoldItalic.ttf | Bin 0 -> 135408 bytes public/img/headerIcon.svg | 1 + public/img/smallArrow.svg | 1 + src/app/{admin => (admin)}/[date]/page.tsx | 2 +- src/app/(admin)/jidelni-listek/page.tsx | 14 ++ src/app/(admin)/layout.tsx | 54 +++++++ src/app/(admin)/not-found.tsx | 11 ++ src/app/{admin => (admin)}/queue/page.tsx | 2 +- src/app/{admin => (admin)}/resources/page.tsx | 0 src/app/(admin)/settings/page.tsx | 93 +++++++++++ .../{admin => (admin)}/statistics/page.tsx | 2 +- src/app/{ => (login)}/layout.tsx | 23 +-- src/app/{ => (login)}/page.tsx | 7 +- src/app/admin/layout.tsx | 146 ------------------ src/app/admin/settings/page.tsx | 93 ----------- src/app/globals.css | 116 +++++++++++++- src/app/not-found.tsx | 25 --- src/app/privacy/layout.tsx | 23 +++ .../AdminLayout/AdminLayout.module.css | 12 ++ src/components/AdminLayout/AdminLayout.tsx | 19 +++ .../components/Sidebar/Sidebar.module.css | 70 +++++++++ .../components/Sidebar/Sidebar.tsx | 83 ++++++++++ .../components/Logout/Logout.module.css | 3 + .../Sidebar/components/Logout/Logout.tsx | 29 ++++ .../Sidebar/components/Logout/index.tsx | 1 + .../Sidebar/constants/sidebarItems.ts | 24 +++ .../AdminLayout/components/Sidebar/index.tsx | 1 + src/components/AdminLayout/index.tsx | 1 + src/components/AdminPage/AdminPage.tsx | 23 --- .../AdminPageTitle/AdminPageTitle.tsx | 15 -- src/components/Input/Input.module.css | 15 ++ src/components/Input/Input.tsx | 42 +++++ src/components/Input/index.tsx | 1 + src/components/Login/LoginPage.tsx | 112 -------------- .../components/LoginTitle/LoginTitle.tsx | 21 --- .../LoginTitle.test.tsx | 4 +- .../LogoHeader/LogoHeader.module.css | 29 ++++ src/components/LogoHeader/LogoHeader.tsx | 25 +++ src/components/LogoHeader/index.tsx | 1 + src/components/Table/Table.module.css | 0 src/components/Table/Table.tsx | 5 + src/components/Table/index.tsx | 1 + .../Typography/Typography.module.css | 69 +++++++++ src/components/Typography/Typography.tsx | 108 +++++++++++++ src/components/Typography/index.tsx | 1 + src/lib/dayjs.ts | 8 + src/middleware.ts | 27 ++++ src/modules/AdminPage/AdminPage.tsx | 30 ++++ .../AdminPage/actions/getMenus.ts} | 25 +-- .../AdminPageContent.module.css | 4 + .../AdminPageContent/AdminPageContent.tsx | 35 +---- .../components/Table/Table.module.css | 20 +++ .../AdminPage/components/Table/Table.tsx | 96 ++++++++++++ .../components/DateHeader/DateHeader.tsx | 49 ++++++ .../DateHeader/HeaderHeader.module.css | 38 +++++ .../Table/components/DateHeader/index.tsx | 1 + .../Table/components/Modal/Modal.module.css | 32 ++++ .../Table/components/Modal/Modal.tsx | 25 +++ .../Modal/components/Item.module.css | 25 +++ .../components/Modal/components/Item.tsx | 34 ++++ .../components/Modal/components/index.tsx | 1 + .../Table/components/Row/Row.module.css | 27 ++++ .../components/Table/components/Row/Row.tsx | 51 ++++++ .../components/Table/components/Row/index.tsx | 1 + .../AdminPage/components/Table/index.tsx | 1 + .../AdminPage/components/Table/types.ts | 4 + .../utils/mapMenusToSequencedMonthDays.ts | 63 ++++++++ .../AdminPage/utils/updateMenuInterval.ts | 17 ++ .../CreateMenu/CreateMenu.tsx | 27 ++-- .../Layout/constants.ts | 0 .../LunchItem/LunchItem.tsx | 0 .../LunchOrderTable.tsx | 0 .../MenuItem/AutoCompleteInput.tsx | 0 .../MenuItem/MenuItem.tsx | 4 +- src/{components => modules}/OrderItem.tsx | 0 src/{components => modules}/PageTitle.tsx | 0 .../QueuePage/QueuePage.tsx | 6 +- src/{components => modules}/RefreshButton.tsx | 0 .../components/PriceLevel/PriceLevel.tsx | 0 .../PriceLevelGroup/PriceLevelGroup.tsx | 2 +- .../components/UserGroup/EmailHandles.tsx | 0 .../components/UserGroup/UserGroup.tsx | 2 +- .../components/UserGroup/UserGroupContext.tsx | 2 +- .../Settings/components/index.ts | 0 .../modals/ModifyModal/ModifyModal.tsx | 0 src/{components => modules}/Settings/types.ts | 0 src/{components => modules}/Settings/utils.ts | 0 .../Sidebar/Sidebar.tsx | 0 .../Statistics/StatisticsPage.tsx | 2 +- .../Statistics/Table.tsx | 0 .../Statistics/index.ts | 0 .../login/components/Footer/Footer.module.css | 20 +++ .../login/components/Footer/Footer.tsx | 23 +++ src/modules/login/components/Footer/index.tsx | 1 + .../login/components/Form/Form.module.css | 35 +++++ src/modules/login/components/Form/Form.tsx | 99 ++++++++++++ src/modules/login/components/Form/index.tsx | 1 + src/modules/login/context/LoginContext.tsx | 40 +++++ .../login/screens/LoginPage.module.css | 16 ++ src/modules/login/screens/LoginPage.tsx | 68 ++++++++ src/modules/login/screens/index.tsx | 1 + src/modules/menu/screens/Menu.module.css | 0 src/modules/menu/screens/Menu.tsx | 0 src/modules/menu/screens/index.tsx | 0 src/theme/themeConfig.ts | 1 + src/types/MenuInterface.ts | 7 +- src/utils/getMonthName.ts | 22 +++ src/utils/getWeekDay.ts | 1 + src/utils/isTokenInLocalStorage.ts | 9 -- tailwind.config.ts | 28 ---- tsconfig.json | 22 ++- 131 files changed, 1811 insertions(+), 582 deletions(-) create mode 100644 public/fonts/Nunito-Black.ttf create mode 100644 public/fonts/Nunito-BlackItalic.ttf create mode 100644 public/fonts/Nunito-Bold.ttf create mode 100644 public/fonts/Nunito-BoldItalic.ttf create mode 100644 public/fonts/Nunito-ExtraBold.ttf create mode 100644 public/fonts/Nunito-ExtraBoldItalic.ttf create mode 100644 public/fonts/Nunito-ExtraLight.ttf create mode 100644 public/fonts/Nunito-ExtraLightItalic.ttf create mode 100644 public/fonts/Nunito-Italic.ttf create mode 100644 public/fonts/Nunito-Light.ttf create mode 100644 public/fonts/Nunito-LightItalic.ttf create mode 100644 public/fonts/Nunito-Medium.ttf create mode 100644 public/fonts/Nunito-MediumItalic.ttf create mode 100644 public/fonts/Nunito-Regular.ttf create mode 100644 public/fonts/Nunito-SemiBold.ttf create mode 100644 public/fonts/Nunito-SemiBoldItalic.ttf create mode 100644 public/img/headerIcon.svg create mode 100644 public/img/smallArrow.svg rename src/app/{admin => (admin)}/[date]/page.tsx (94%) create mode 100644 src/app/(admin)/jidelni-listek/page.tsx create mode 100644 src/app/(admin)/layout.tsx create mode 100644 src/app/(admin)/not-found.tsx rename src/app/{admin => (admin)}/queue/page.tsx (72%) rename src/app/{admin => (admin)}/resources/page.tsx (100%) create mode 100644 src/app/(admin)/settings/page.tsx rename src/app/{admin => (admin)}/statistics/page.tsx (69%) rename src/app/{ => (login)}/layout.tsx (85%) rename src/app/{ => (login)}/page.tsx (65%) delete mode 100644 src/app/admin/layout.tsx delete mode 100644 src/app/admin/settings/page.tsx delete mode 100644 src/app/not-found.tsx create mode 100644 src/app/privacy/layout.tsx create mode 100644 src/components/AdminLayout/AdminLayout.module.css create mode 100644 src/components/AdminLayout/AdminLayout.tsx create mode 100644 src/components/AdminLayout/components/Sidebar/Sidebar.module.css create mode 100644 src/components/AdminLayout/components/Sidebar/Sidebar.tsx create mode 100644 src/components/AdminLayout/components/Sidebar/components/Logout/Logout.module.css create mode 100644 src/components/AdminLayout/components/Sidebar/components/Logout/Logout.tsx create mode 100644 src/components/AdminLayout/components/Sidebar/components/Logout/index.tsx create mode 100644 src/components/AdminLayout/components/Sidebar/constants/sidebarItems.ts create mode 100644 src/components/AdminLayout/components/Sidebar/index.tsx create mode 100644 src/components/AdminLayout/index.tsx delete mode 100644 src/components/AdminPage/AdminPage.tsx delete mode 100644 src/components/AdminPage/components/AdminPageTitle/AdminPageTitle.tsx create mode 100644 src/components/Input/Input.module.css create mode 100644 src/components/Input/Input.tsx create mode 100644 src/components/Input/index.tsx delete mode 100644 src/components/Login/LoginPage.tsx delete mode 100644 src/components/Login/components/LoginTitle/LoginTitle.tsx rename src/components/{Login/components/LoginTitle => LogoHeader}/LoginTitle.test.tsx (73%) create mode 100644 src/components/LogoHeader/LogoHeader.module.css create mode 100644 src/components/LogoHeader/LogoHeader.tsx create mode 100644 src/components/LogoHeader/index.tsx create mode 100644 src/components/Table/Table.module.css create mode 100644 src/components/Table/Table.tsx create mode 100644 src/components/Table/index.tsx create mode 100644 src/components/Typography/Typography.module.css create mode 100644 src/components/Typography/Typography.tsx create mode 100644 src/components/Typography/index.tsx create mode 100644 src/lib/dayjs.ts create mode 100644 src/middleware.ts create mode 100644 src/modules/AdminPage/AdminPage.tsx rename src/{app/admin/page.tsx => modules/AdminPage/actions/getMenus.ts} (51%) create mode 100644 src/modules/AdminPage/components/AdminPageContent/AdminPageContent.module.css rename src/{components => modules}/AdminPage/components/AdminPageContent/AdminPageContent.tsx (77%) create mode 100644 src/modules/AdminPage/components/Table/Table.module.css create mode 100644 src/modules/AdminPage/components/Table/Table.tsx create mode 100644 src/modules/AdminPage/components/Table/components/DateHeader/DateHeader.tsx create mode 100644 src/modules/AdminPage/components/Table/components/DateHeader/HeaderHeader.module.css create mode 100644 src/modules/AdminPage/components/Table/components/DateHeader/index.tsx create mode 100644 src/modules/AdminPage/components/Table/components/Modal/Modal.module.css create mode 100644 src/modules/AdminPage/components/Table/components/Modal/Modal.tsx create mode 100644 src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css create mode 100644 src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx create mode 100644 src/modules/AdminPage/components/Table/components/Modal/components/index.tsx create mode 100644 src/modules/AdminPage/components/Table/components/Row/Row.module.css create mode 100644 src/modules/AdminPage/components/Table/components/Row/Row.tsx create mode 100644 src/modules/AdminPage/components/Table/components/Row/index.tsx create mode 100644 src/modules/AdminPage/components/Table/index.tsx create mode 100644 src/modules/AdminPage/components/Table/types.ts create mode 100644 src/modules/AdminPage/utils/mapMenusToSequencedMonthDays.ts create mode 100644 src/modules/AdminPage/utils/updateMenuInterval.ts rename src/{components => modules}/CreateMenu/CreateMenu.tsx (92%) rename src/{components => modules}/Layout/constants.ts (100%) rename src/{components => modules}/LunchItem/LunchItem.tsx (100%) rename src/{components => modules}/LunchOrderTable.tsx (100%) rename src/{components => modules}/MenuItem/AutoCompleteInput.tsx (100%) rename src/{components => modules}/MenuItem/MenuItem.tsx (96%) rename src/{components => modules}/OrderItem.tsx (100%) rename src/{components => modules}/PageTitle.tsx (100%) rename src/{components => modules}/QueuePage/QueuePage.tsx (92%) rename src/{components => modules}/RefreshButton.tsx (100%) rename src/{components => modules}/Settings/components/PriceLevel/PriceLevel.tsx (100%) rename src/{components => modules}/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx (99%) rename src/{components => modules}/Settings/components/UserGroup/EmailHandles.tsx (100%) rename src/{components => modules}/Settings/components/UserGroup/UserGroup.tsx (99%) rename src/{components => modules}/Settings/components/UserGroup/UserGroupContext.tsx (96%) rename src/{components => modules}/Settings/components/index.ts (100%) rename src/{components => modules}/Settings/components/modals/ModifyModal/ModifyModal.tsx (100%) rename src/{components => modules}/Settings/types.ts (100%) rename src/{components => modules}/Settings/utils.ts (100%) rename src/{components => modules}/Sidebar/Sidebar.tsx (100%) rename src/{components => modules}/Statistics/StatisticsPage.tsx (98%) rename src/{components => modules}/Statistics/Table.tsx (100%) rename src/{components => modules}/Statistics/index.ts (100%) create mode 100644 src/modules/login/components/Footer/Footer.module.css create mode 100644 src/modules/login/components/Footer/Footer.tsx create mode 100644 src/modules/login/components/Footer/index.tsx create mode 100644 src/modules/login/components/Form/Form.module.css create mode 100644 src/modules/login/components/Form/Form.tsx create mode 100644 src/modules/login/components/Form/index.tsx create mode 100644 src/modules/login/context/LoginContext.tsx create mode 100644 src/modules/login/screens/LoginPage.module.css create mode 100644 src/modules/login/screens/LoginPage.tsx create mode 100644 src/modules/login/screens/index.tsx create mode 100644 src/modules/menu/screens/Menu.module.css create mode 100644 src/modules/menu/screens/Menu.tsx create mode 100644 src/modules/menu/screens/index.tsx create mode 100644 src/utils/getMonthName.ts delete mode 100644 src/utils/isTokenInLocalStorage.ts delete mode 100644 tailwind.config.ts diff --git a/.eslintrc.json b/.eslintrc.json index cfc136b..4e4dede 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,7 @@ { "extends": "next", "rules": { - "no-unused-vars": "warn" + "no-unused-vars": "warn", + "react/display-name": "off" } } diff --git a/.gitignore b/.gitignore index 64fe91e..d96baf0 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,5 @@ jspm_packages .node_repl_history .next .vercel + +.DS_Store diff --git a/bun.lockb b/bun.lockb index 9cf1d2bece742ea23788929fb599af63b96759e9..8362c641805c1df4627b92eff7ebeeb4024b63e5 100755 GIT binary patch delta 73481 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

+ + ); +}; +export default AdminPage; diff --git a/src/app/admin/page.tsx b/src/modules/AdminPage/actions/getMenus.ts similarity index 51% rename from src/app/admin/page.tsx rename to src/modules/AdminPage/actions/getMenus.ts index 271cffc..ab6405d 100644 --- a/src/app/admin/page.tsx +++ b/src/modules/AdminPage/actions/getMenus.ts @@ -1,16 +1,12 @@ "use server"; import getToken from "@/utils/getToken"; -import AdminPage from "@/components/AdminPage/AdminPage"; import getMenusByDate from "@/queries/getMenusByDate"; import { getClient } from "@/lib/ssrApolloClient"; -import dayjs from "dayjs"; +import updateMenuInterval from "@/modules/AdminPage/utils/updateMenuInterval"; -const getData = async () => { - const viewedDatesUnix = [ - dayjs().startOf("month").subtract(5, "day").unix(), - dayjs().endOf("month").add(15, "day").unix(), - ]; +const getMenus = async (unix?: number) => { + const viewedDatesUnix = updateMenuInterval(unix); const { data: menusByDate } = await getClient().query({ query: getMenusByDate, @@ -29,18 +25,7 @@ const getData = async () => { fetchPolicy: "network-only", }); - return { - menusByDate, - }; + return menusByDate.getMenusByDate; }; -const Page = async () => { - const token = getToken(); - const { menusByDate } = await getData(); - - return ( - - ); -}; - -export default Page; +export default getMenus; diff --git a/src/modules/AdminPage/components/AdminPageContent/AdminPageContent.module.css b/src/modules/AdminPage/components/AdminPageContent/AdminPageContent.module.css new file mode 100644 index 0000000..a472b62 --- /dev/null +++ b/src/modules/AdminPage/components/AdminPageContent/AdminPageContent.module.css @@ -0,0 +1,4 @@ +.container { + width: 100%; + height: 100%; +} \ No newline at end of file diff --git a/src/components/AdminPage/components/AdminPageContent/AdminPageContent.tsx b/src/modules/AdminPage/components/AdminPageContent/AdminPageContent.tsx similarity index 77% rename from src/components/AdminPage/components/AdminPageContent/AdminPageContent.tsx rename to src/modules/AdminPage/components/AdminPageContent/AdminPageContent.tsx index 443d904..53257ec 100644 --- a/src/components/AdminPage/components/AdminPageContent/AdminPageContent.tsx +++ b/src/modules/AdminPage/components/AdminPageContent/AdminPageContent.tsx @@ -5,26 +5,29 @@ import { useLazyQuery } from "@apollo/client"; import { useRouter } from "next/navigation"; import { Calendar } from "antd"; import type { Dayjs } from "dayjs"; -import dayjs from "dayjs"; +import dayjs from "@/lib/dayjs"; import utc from "dayjs/plugin/utc"; import pickerLocale from "@/constants/PickerLocale"; import getMenusByDate from "@/queries/getMenusByDate"; import { MenuInterface } from "@/types/MenuInterface"; +import styles from "./AdminPageContent.module.css"; + interface Props { token: string; menusByDate: MenuInterface[]; } const AdminPageContent = (props: Props) => { - dayjs.extend(utc); const [menuMap, setMenuMap] = useState | undefined>( undefined ); + const [viewedDatesUnix, setViewedDatesUnix] = useState([ dayjs().startOf("month").subtract(5, "day").unix(), dayjs().endOf("month").add(15, "day").unix(), ]); + const [value, setValue] = useState(dayjs().format("YYYY-MM-DD")); const router = useRouter(); @@ -92,30 +95,8 @@ const AdminPageContent = (props: Props) => { return menuMap?.get(date); }; - return ( -
- - setViewedDatesUnix([ - e.startOf("month").unix(), - e.endOf("month").unix(), - ]) - } - locale={pickerLocale} - cellRender={(date: Dayjs) => { - return ( -
-

- {mapHasValue(date.utc().startOf("day").unix()) - ? `(${getMapValueByDate(date.unix())})` - : null} -

-
- ); - }} - /> -
- ); + return
+ +
; }; export default AdminPageContent; diff --git a/src/modules/AdminPage/components/Table/Table.module.css b/src/modules/AdminPage/components/Table/Table.module.css new file mode 100644 index 0000000..416dd89 --- /dev/null +++ b/src/modules/AdminPage/components/Table/Table.module.css @@ -0,0 +1,20 @@ +.container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.headerContainer { + width: 100%; + height: fit-content; +} + +.rowWrapper { + border-radius: 1rem; + border: 1px solid var(--Beige, #EEE8DA); + overflow-y: scroll; + max-height: 45rem; + background-color: #F5F2EB; +} \ No newline at end of file diff --git a/src/modules/AdminPage/components/Table/Table.tsx b/src/modules/AdminPage/components/Table/Table.tsx new file mode 100644 index 0000000..317bd36 --- /dev/null +++ b/src/modules/AdminPage/components/Table/Table.tsx @@ -0,0 +1,96 @@ +"use client"; + +import { useState } from "react"; +import dynamic from "next/dynamic"; +import dayjs from "@/lib/dayjs"; +import { Row } from "./components/Row"; +import { DateHeader } from "./components/DateHeader"; +import { DayMenu } from "@/types/MenuInterface"; +import getMonthName from "../../../../utils/getMonthName"; +import { MonthType } from "./types"; + +import styles from "./Table.module.css"; + +interface Props { + menus: DayMenu[]; + updateMenus: (unix: number) => void; +} + +const Modal = dynamic(() => import("./components/Modal/Modal")); + +const Table = (props: Props) => { + const currentMonth = getMonthName(dayjs().format("MM-DD-YYYY")) ?? ""; + const [month, setMonth] = useState({ + displayName: currentMonth, + value: parseInt(dayjs().format("MM")), + }); + const [year, setYear] = useState(parseInt(dayjs().format("YYYY"))); + + const [modalVisible, setModalVisible] = useState(false); + + const handleMonthChange = (direction: -1 | 1) => { + const monthValue = month.value + direction; + let newMonth = monthValue; + + if (newMonth <= 0) { + newMonth = 12; + setYear(year - 1); + } else if (newMonth > 12) { + newMonth = 1; + setYear(year + 1); + } + + const newMonthName = getMonthName( + dayjs() + .month(newMonth - 1) + .format("MM-DD-YYYY") + ); + + setMonth({ + displayName: newMonthName ?? "", + value: newMonth, + }); + + props.updateMenus( + dayjs() + .utc() + .month(newMonth - 1) + .year(year) + .startOf("month") + .unix() + ); + }; + + const showModal = (date: number) => { + setModalVisible(true); + }; + + const hideModal = () => { + setModalVisible(false); + }; + + return ( +
+ {modalVisible && } +
+ +
+
+ {props.menus.map((menu: DayMenu, index: number) => ( + + ))} +
+
+ ); +}; + +export default Table; diff --git a/src/modules/AdminPage/components/Table/components/DateHeader/DateHeader.tsx b/src/modules/AdminPage/components/Table/components/DateHeader/DateHeader.tsx new file mode 100644 index 0000000..1fea6e0 --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/DateHeader/DateHeader.tsx @@ -0,0 +1,49 @@ +import Image from "next/image"; +import styles from "./HeaderHeader.module.css"; +import cx from "classnames"; +import { Typography } from "@/components/Typography"; +import { MonthType } from "../../types"; + +interface Props { + month: MonthType; + year: number; + handleMonthChange: (direction: -1 | 1) => void; +} + +const DateHeader = (props: Props) => { + return ( +
+ +
+ + {props.month.displayName} {props.year} + +
+ +
+ ); +}; + +export default DateHeader; diff --git a/src/modules/AdminPage/components/Table/components/DateHeader/HeaderHeader.module.css b/src/modules/AdminPage/components/Table/components/DateHeader/HeaderHeader.module.css new file mode 100644 index 0000000..aad8d13 --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/DateHeader/HeaderHeader.module.css @@ -0,0 +1,38 @@ +.dateHeader { + height: 100%; + width: 100%; + display: flex; + flex-direction: row; + align-items: center; +} + +.arrow { + &.isRotated { + transform: rotate(180deg); + } +} + +.arrowButton { + background: none; + border: none; + padding: 0; + cursor: pointer; + width: 1rem; + height: 100%; + min-height: 2rem; + display: flex; + justify-content: flex-end; + align-items: center; + &.isRotated { + justify-content: start; + } +} + +.heading { + width: 11rem; + min-width: fit-content; + display: flex; + justify-content: center; + align-items: center; + user-select: none; +} diff --git a/src/modules/AdminPage/components/Table/components/DateHeader/index.tsx b/src/modules/AdminPage/components/Table/components/DateHeader/index.tsx new file mode 100644 index 0000000..68a68da --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/DateHeader/index.tsx @@ -0,0 +1 @@ +export { default as DateHeader } from "./DateHeader"; diff --git a/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css new file mode 100644 index 0000000..0cdd07e --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css @@ -0,0 +1,32 @@ +.container { + width: 100vw; + height: 100vh; + top: 0; + left: 0; + z-index: 1; + position: absolute; + display: flex; + justify-content: center; + align-items: center; + background: rgba(0, 0, 0, 0.5); +} + +.modalContainer { + width: 94.31rem; + max-width: 100vw; + height: 54.81rem; + padding: 3rem 4.5rem 4.375rem 4.5rem; + box-sizing: border-box; + border-radius: 1rem; + background: var(--beige-web, #F9F7F2); + position: absolute; + overflow: scroll; +} + +.content { + display: flex; + justify-content: center; + align-items: start; + flex-direction: column; + gap: 1.5rem; +} diff --git a/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx b/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx new file mode 100644 index 0000000..0b87db7 --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx @@ -0,0 +1,25 @@ +import { Typography } from "@/components/Typography"; +import Item from "./components/Item"; + +import styles from "./Modal.module.css"; + +interface Props { + hideModal: () => void; +} + +const Modal = (props: Props) => { + return ( +
+
+
+ MENU UNSET + + + +
+
+
+ ); +}; + +export default Modal; diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css b/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css new file mode 100644 index 0000000..8beea4c --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css @@ -0,0 +1,25 @@ +.container { + width: 100%; + height: 27.75rem; + border-radius: 1rem; + border: 1px solid var(--Beige, #EEE8DA); + background: #F5F2EB; + padding: 2rem 1.75rem 2.6875rem 2.5rem; + display: flex; + flex-direction: column; + gap: 2rem; +} + +.menus { + display: flex; + justify-content: start; + flex-direction: column; + gap: 1.5rem; + height: 100%; +} + +.inputSection { + display: flex; + flex-direction: column; + gap: 0.25rem; +} diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx new file mode 100644 index 0000000..78233c1 --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx @@ -0,0 +1,34 @@ +import { Typography } from "@/components/Typography"; + +import styles from "./Item.module.css" +import { Input } from "@/components/Input"; + +interface Props { + menuOrder: number; +} + +const Item = (props: Props) => { + return ( +
+
+ Menu {props.menuOrder} +
+
+
+ test + test +
+
+ test + test +
+
+ test + test +
+
+
+ ) +} + +export default Item; diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/index.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/index.tsx new file mode 100644 index 0000000..09a72a8 --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/components/index.tsx @@ -0,0 +1 @@ +export { default as Item } from "./Item"; diff --git a/src/modules/AdminPage/components/Table/components/Row/Row.module.css b/src/modules/AdminPage/components/Table/components/Row/Row.module.css new file mode 100644 index 0000000..a9e8830 --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Row/Row.module.css @@ -0,0 +1,27 @@ +.container { + display: flex; + justify-content: space-between; + height: 5.6rem; + padding: 1.0625rem 2.5rem 1.0625rem 1.75rem; + + &.whiteBackground { + background-color: var(--beige-web, #F9F7F2); + } +} + +.actionContainer { + display: flex; + justify-content: space-between; + align-items: center; + gap: 4.44rem; + min-width: fit-content; +} + +.arrowButton { + background: none; + border: none; + cursor: pointer; + display: flex; + justify-content: flex-end; + align-items: center; +} \ No newline at end of file diff --git a/src/modules/AdminPage/components/Table/components/Row/Row.tsx b/src/modules/AdminPage/components/Table/components/Row/Row.tsx new file mode 100644 index 0000000..21e736d --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Row/Row.tsx @@ -0,0 +1,51 @@ +import Image from "next/image"; +import dayjs from "@/lib/dayjs"; +import getDayOfWeek from "@/utils/getWeekDay"; +import { Typography } from "@/components/Typography"; +import { DayMenu } from "@/types/MenuInterface"; +import cx from "classnames"; + +import styles from "./Row.module.css"; + +interface Props { + rowData: DayMenu; + oddRow: boolean; + showModal: (date: number) => void; +} + +const Row = (props: Props) => { + return ( +
+
+ + {getDayOfWeek(dayjs.unix(props.rowData.date).format("MM-DD-YYYY"))} + + + {dayjs.unix(props.rowData.date).format("DD.MM. YYYY")} + +
+
+ + {props.rowData.menus.length} Menu + + +
+
+ ); +}; + +export default Row; diff --git a/src/modules/AdminPage/components/Table/components/Row/index.tsx b/src/modules/AdminPage/components/Table/components/Row/index.tsx new file mode 100644 index 0000000..9abd55d --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Row/index.tsx @@ -0,0 +1 @@ +export { default as Row } from "./Row"; diff --git a/src/modules/AdminPage/components/Table/index.tsx b/src/modules/AdminPage/components/Table/index.tsx new file mode 100644 index 0000000..6c9ff96 --- /dev/null +++ b/src/modules/AdminPage/components/Table/index.tsx @@ -0,0 +1 @@ +export { default as Table } from "./Table"; diff --git a/src/modules/AdminPage/components/Table/types.ts b/src/modules/AdminPage/components/Table/types.ts new file mode 100644 index 0000000..8b9c1a9 --- /dev/null +++ b/src/modules/AdminPage/components/Table/types.ts @@ -0,0 +1,4 @@ +export type MonthType = { + displayName: string; + value: number; +}; diff --git a/src/modules/AdminPage/utils/mapMenusToSequencedMonthDays.ts b/src/modules/AdminPage/utils/mapMenusToSequencedMonthDays.ts new file mode 100644 index 0000000..10384a3 --- /dev/null +++ b/src/modules/AdminPage/utils/mapMenusToSequencedMonthDays.ts @@ -0,0 +1,63 @@ +import dayjs from "@/lib/dayjs"; +import type { MenuInterface, DayMenu } from "src/types/MenuInterface"; + +const getUnixDaysForGivenMonth = (unix: number) => { + const days = dayjs.unix(unix).daysInMonth(); + + const daysArray = Array.from(Array(days).keys()).map((day) => day + 1); + + const unixDays = daysArray.map((day) => { + return dayjs.unix(unix).date(day).utc().startOf("day").unix(); + }); + + return unixDays; +}; + +const mapMenusToSequencedMonthDays = ( + menus: MenuInterface[], + dateUnix?: number +): DayMenu[] => { + const unixDays = getUnixDaysForGivenMonth(dateUnix ?? dayjs().unix()); + + const grouped = menus.reduce( + (acc: { [key: number]: MenuInterface[] }, menu) => { + if (!acc[menu.date]) { + acc[menu.date] = []; + } + acc[menu.date].push(menu); + return acc; + }, + {} + ); + + const mutatedMenu: DayMenu[] = Object.keys(grouped).map((date) => ({ + date: parseInt(date), + menus: grouped[parseInt(date)], + })); + + const menuMap: Map = new Map(); + mutatedMenu.map((menu: DayMenu) => { + menuMap.set(menu.date, menu); + }); + + const daysWithMenus: DayMenu[] = []; + + unixDays.map((day: number) => { + if (!menuMap.has(day)) { + daysWithMenus.push({ + date: day, + menus: [], + }); + return; + } + + daysWithMenus.push({ + date: day, + menus: menuMap.get(day)?.menus || [], + }); + }); + + return daysWithMenus; +}; + +export default mapMenusToSequencedMonthDays; diff --git a/src/modules/AdminPage/utils/updateMenuInterval.ts b/src/modules/AdminPage/utils/updateMenuInterval.ts new file mode 100644 index 0000000..bdbed5f --- /dev/null +++ b/src/modules/AdminPage/utils/updateMenuInterval.ts @@ -0,0 +1,17 @@ +import dayjs from "@/lib/dayjs"; + +const updateMenuInterval = (unix?: number) => { + if (!unix) { + return [ + dayjs().utc().startOf("month").unix(), + dayjs().utc().endOf("month").unix(), + ]; + } + + return [ + dayjs.unix(unix).utc().startOf("month").unix(), + dayjs.unix(unix).utc().endOf("month").unix(), + ]; +}; + +export default updateMenuInterval; diff --git a/src/components/CreateMenu/CreateMenu.tsx b/src/modules/CreateMenu/CreateMenu.tsx similarity index 92% rename from src/components/CreateMenu/CreateMenu.tsx rename to src/modules/CreateMenu/CreateMenu.tsx index 6757dd4..8e2bfa8 100644 --- a/src/components/CreateMenu/CreateMenu.tsx +++ b/src/modules/CreateMenu/CreateMenu.tsx @@ -5,7 +5,7 @@ import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; import { useRouter } from "next/navigation"; import { Typography, Card, Button, message } from "antd"; -import MenuItem from "@/components/MenuItem/MenuItem"; +import MenuItem from "@/modules/MenuItem/MenuItem"; import { PlusOutlined } from "@ant-design/icons"; import { MealOptionsInterface } from "@/types/MealOptionsInterface"; import { useQuery } from "@apollo/experimental-nextjs-app-support/ssr"; @@ -17,7 +17,7 @@ import adminCreateMenus from "@/queries/adminCreateMenus"; import adminCreateMenu from "@/queries/adminCreateMenu"; import adminUpdateMenu from "@/queries/adminUpdateMenus"; import adminDeleteMenu from "@/queries/adminDeleteMenu"; -import { MenuInterface } from "@/types/MenuInterface"; +// import { any } from "@/types/any"; import adminGetAllFoodPriceLvls from "@/queries/adminGetAllFoodPriceLvls"; import { NoticeType } from "antd/lib/message/interface"; import getTime from "@/lib/getTime"; @@ -27,7 +27,7 @@ import revalidate from "@/utils/revalidate"; interface Props { params: { date: string }; token: string; - menus: MenuInterface[]; + menus: any[]; } const CreateMenu = (props: Props) => { @@ -40,7 +40,7 @@ const CreateMenu = (props: Props) => { const [createMenu] = useMutation(adminCreateMenu); const [updateMenu] = useMutation(adminUpdateMenu); const [deleteMenu] = useMutation(adminDeleteMenu); - const parsedMenu: MenuInterface[] = props?.menus.map((item: any) => { + const parsedMenu: any[] = props?.menus.map((item: any) => { return { id: item.id, order: item.Order, @@ -51,7 +51,7 @@ const CreateMenu = (props: Props) => { drink: item.drink, }; }); - const [menu, setMenu] = useState(undefined); + const [menu, setMenu] = useState(undefined); const [menuOptions, setMenuOptions] = useState< MealOptionsInterface | undefined >(); @@ -106,7 +106,7 @@ const CreateMenu = (props: Props) => { createMenus({ variables: { input: menu - ? menu?.map((item: MenuInterface) => { + ? menu?.map((item: any) => { return { date: getTime({ date: props.params.date, @@ -129,7 +129,7 @@ const CreateMenu = (props: Props) => { }); revalidate("menusByDate"); - router.push("/admin"); + router.push("/jidelni-listek"); return; } @@ -138,10 +138,9 @@ const CreateMenu = (props: Props) => { input: menu ? menu ?.filter( - (item: MenuInterface) => - item.id && !idsForDeletion.includes(item.id) + (item: any) => item.id && !idsForDeletion.includes(item.id) ) - .map((item: MenuInterface) => { + .map((item: any) => { return { id: item.id, date: getTime({ @@ -165,8 +164,8 @@ const CreateMenu = (props: Props) => { }); (menu ?? []) - .filter((item: MenuInterface) => !item.id) - .forEach((item: MenuInterface) => { + .filter((item: any) => !item.id) + .forEach((item: any) => { createMenu({ variables: { input: { @@ -220,7 +219,7 @@ const CreateMenu = (props: Props) => { }); revalidate("menusByDate"); - router.push("/admin"); + router.push("/jidelni-listek"); }; const messageApiSuccess = (message: string, type: NoticeType | undefined) => { @@ -256,7 +255,7 @@ const CreateMenu = (props: Props) => { const dateTitle = `${customDayName} ${restOfDate}`; if (!dayjs(props.params.date).date()) { - router.push("/admin"); + router.push("/jidelni-listek"); return; } diff --git a/src/components/Layout/constants.ts b/src/modules/Layout/constants.ts similarity index 100% rename from src/components/Layout/constants.ts rename to src/modules/Layout/constants.ts diff --git a/src/components/LunchItem/LunchItem.tsx b/src/modules/LunchItem/LunchItem.tsx similarity index 100% rename from src/components/LunchItem/LunchItem.tsx rename to src/modules/LunchItem/LunchItem.tsx diff --git a/src/components/LunchOrderTable.tsx b/src/modules/LunchOrderTable.tsx similarity index 100% rename from src/components/LunchOrderTable.tsx rename to src/modules/LunchOrderTable.tsx diff --git a/src/components/MenuItem/AutoCompleteInput.tsx b/src/modules/MenuItem/AutoCompleteInput.tsx similarity index 100% rename from src/components/MenuItem/AutoCompleteInput.tsx rename to src/modules/MenuItem/AutoCompleteInput.tsx diff --git a/src/components/MenuItem/MenuItem.tsx b/src/modules/MenuItem/MenuItem.tsx similarity index 96% rename from src/components/MenuItem/MenuItem.tsx rename to src/modules/MenuItem/MenuItem.tsx index c335824..5687148 100644 --- a/src/components/MenuItem/MenuItem.tsx +++ b/src/modules/MenuItem/MenuItem.tsx @@ -55,7 +55,7 @@ const MenuItem = ({ }, [menu]); useEffect(() => { - const updatedMenu: MenuInterface[] = (menu ?? []).map((item) => { + const updatedMenu: any[] = (menu ?? []).map((item) => { if (item.key === index) { return { id: item.id, key: index, level, meal, soup, drink, order }; } @@ -66,7 +66,7 @@ const MenuItem = ({ }, [meal, soup, drink, level, order]); const handleDelete = () => { - const updatedMenu: MenuInterface[] = (menu ?? []).filter( + const updatedMenu: any[] = (menu ?? []).filter( (item) => item.key !== index ); diff --git a/src/components/OrderItem.tsx b/src/modules/OrderItem.tsx similarity index 100% rename from src/components/OrderItem.tsx rename to src/modules/OrderItem.tsx diff --git a/src/components/PageTitle.tsx b/src/modules/PageTitle.tsx similarity index 100% rename from src/components/PageTitle.tsx rename to src/modules/PageTitle.tsx diff --git a/src/components/QueuePage/QueuePage.tsx b/src/modules/QueuePage/QueuePage.tsx similarity index 92% rename from src/components/QueuePage/QueuePage.tsx rename to src/modules/QueuePage/QueuePage.tsx index 33d7d96..1340115 100644 --- a/src/components/QueuePage/QueuePage.tsx +++ b/src/modules/QueuePage/QueuePage.tsx @@ -2,10 +2,10 @@ import React, { useEffect, useState } from "react"; import { useLazyQuery } from "@apollo/client"; -import PageTitle from "@/components/PageTitle"; -import LunchOrderTable from "@/components/LunchOrderTable"; +import PageTitle from "@/modules/PageTitle"; +import LunchOrderTable from "@/modules/LunchOrderTable"; import { Button, DatePicker } from "antd"; -import RefreshButton from "@/components/RefreshButton"; +import RefreshButton from "@/modules/RefreshButton"; import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; import pickerLocale from "@/constants/PickerLocale"; diff --git a/src/components/RefreshButton.tsx b/src/modules/RefreshButton.tsx similarity index 100% rename from src/components/RefreshButton.tsx rename to src/modules/RefreshButton.tsx diff --git a/src/components/Settings/components/PriceLevel/PriceLevel.tsx b/src/modules/Settings/components/PriceLevel/PriceLevel.tsx similarity index 100% rename from src/components/Settings/components/PriceLevel/PriceLevel.tsx rename to src/modules/Settings/components/PriceLevel/PriceLevel.tsx diff --git a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx b/src/modules/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx similarity index 99% rename from src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx rename to src/modules/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx index e86be6f..d65d6cd 100644 --- a/src/components/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx +++ b/src/modules/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx @@ -17,7 +17,7 @@ import type { CreatePriceTypeGroupInterface, GetPriceLevelGroupInterface, MutatedPriceLevelGroupInterface, -} from "@/components/Settings/types"; +} from "@/modules/Settings/types"; import adminCreatePriceLvlGroup from "@/queries/adminCreatePriceLvlGroup"; import adminDeletePriceLvlGroup from "@/queries/adminDeletePriceLvlGroup"; import adminUpdatePriceLvlGroup from "@/queries/adminUpdatePriceLvlGroup"; diff --git a/src/components/Settings/components/UserGroup/EmailHandles.tsx b/src/modules/Settings/components/UserGroup/EmailHandles.tsx similarity index 100% rename from src/components/Settings/components/UserGroup/EmailHandles.tsx rename to src/modules/Settings/components/UserGroup/EmailHandles.tsx diff --git a/src/components/Settings/components/UserGroup/UserGroup.tsx b/src/modules/Settings/components/UserGroup/UserGroup.tsx similarity index 99% rename from src/components/Settings/components/UserGroup/UserGroup.tsx rename to src/modules/Settings/components/UserGroup/UserGroup.tsx index a396c09..b25c71b 100644 --- a/src/components/Settings/components/UserGroup/UserGroup.tsx +++ b/src/modules/Settings/components/UserGroup/UserGroup.tsx @@ -17,7 +17,7 @@ import { CreateUserGroupInterface, EmailHandleInterface, UserGroupInterface, -} from "@/components/Settings/types"; +} from "@/modules/Settings/types"; import EmailHandles from "./EmailHandles"; import { UserGroupContextProvider } from "./UserGroupContext"; import { tableSortLocale } from "@/constants/PickerLocale"; diff --git a/src/components/Settings/components/UserGroup/UserGroupContext.tsx b/src/modules/Settings/components/UserGroup/UserGroupContext.tsx similarity index 96% rename from src/components/Settings/components/UserGroup/UserGroupContext.tsx rename to src/modules/Settings/components/UserGroup/UserGroupContext.tsx index 8cc6bca..72fda76 100644 --- a/src/components/Settings/components/UserGroup/UserGroupContext.tsx +++ b/src/modules/Settings/components/UserGroup/UserGroupContext.tsx @@ -14,7 +14,7 @@ interface UserGroupContextValue { const UserGroupContext = createContext({ emailHandles: [], - setEmailHandles: () => {}, + setEmailHandles: () => { }, }); export const useUserGroupContext = () => { diff --git a/src/components/Settings/components/index.ts b/src/modules/Settings/components/index.ts similarity index 100% rename from src/components/Settings/components/index.ts rename to src/modules/Settings/components/index.ts diff --git a/src/components/Settings/components/modals/ModifyModal/ModifyModal.tsx b/src/modules/Settings/components/modals/ModifyModal/ModifyModal.tsx similarity index 100% rename from src/components/Settings/components/modals/ModifyModal/ModifyModal.tsx rename to src/modules/Settings/components/modals/ModifyModal/ModifyModal.tsx diff --git a/src/components/Settings/types.ts b/src/modules/Settings/types.ts similarity index 100% rename from src/components/Settings/types.ts rename to src/modules/Settings/types.ts diff --git a/src/components/Settings/utils.ts b/src/modules/Settings/utils.ts similarity index 100% rename from src/components/Settings/utils.ts rename to src/modules/Settings/utils.ts diff --git a/src/components/Sidebar/Sidebar.tsx b/src/modules/Sidebar/Sidebar.tsx similarity index 100% rename from src/components/Sidebar/Sidebar.tsx rename to src/modules/Sidebar/Sidebar.tsx diff --git a/src/components/Statistics/StatisticsPage.tsx b/src/modules/Statistics/StatisticsPage.tsx similarity index 98% rename from src/components/Statistics/StatisticsPage.tsx rename to src/modules/Statistics/StatisticsPage.tsx index 6412f89..c82f924 100644 --- a/src/components/Statistics/StatisticsPage.tsx +++ b/src/modules/Statistics/StatisticsPage.tsx @@ -12,7 +12,7 @@ import type { ValueKeyInterface, } from "@/types/OrdersInterface"; import pickerLocale from "@/constants/PickerLocale"; -import { StatisticsTable } from "@/components/Statistics"; +import { StatisticsTable } from "@/modules/Statistics"; import getTime from "@/lib/getTime"; interface Props { diff --git a/src/components/Statistics/Table.tsx b/src/modules/Statistics/Table.tsx similarity index 100% rename from src/components/Statistics/Table.tsx rename to src/modules/Statistics/Table.tsx diff --git a/src/components/Statistics/index.ts b/src/modules/Statistics/index.ts similarity index 100% rename from src/components/Statistics/index.ts rename to src/modules/Statistics/index.ts diff --git a/src/modules/login/components/Footer/Footer.module.css b/src/modules/login/components/Footer/Footer.module.css new file mode 100644 index 0000000..5c1b191 --- /dev/null +++ b/src/modules/login/components/Footer/Footer.module.css @@ -0,0 +1,20 @@ +.container { + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; + width: 100%; +} + +.divider { + width: 16.5rem; + height: 0.0625rem; + background: var(--Divider, #CACACA); +} + +.menurooLink { + color: var(--red, #D51F2C); + text-decoration-line: underline; + cursor: pointer; + margin-top: 0.3rem; +} diff --git a/src/modules/login/components/Footer/Footer.tsx b/src/modules/login/components/Footer/Footer.tsx new file mode 100644 index 0000000..8bd0658 --- /dev/null +++ b/src/modules/login/components/Footer/Footer.tsx @@ -0,0 +1,23 @@ +import Link from "next/link"; +import { Typography } from "@/components/Typography"; +import styles from "./Footer.module.css"; + +const Footer = () => { + return ( +
+
+
+ + Nevlastníte restauraci? + + + + Vraťte se do Menuroo + + +
+
+ ); +}; + +export default Footer; diff --git a/src/modules/login/components/Footer/index.tsx b/src/modules/login/components/Footer/index.tsx new file mode 100644 index 0000000..090a49a --- /dev/null +++ b/src/modules/login/components/Footer/index.tsx @@ -0,0 +1 @@ +export { default as Footer } from "./Footer"; diff --git a/src/modules/login/components/Form/Form.module.css b/src/modules/login/components/Form/Form.module.css new file mode 100644 index 0000000..0e9b2e2 --- /dev/null +++ b/src/modules/login/components/Form/Form.module.css @@ -0,0 +1,35 @@ +.container { + display: flex; + flex-direction: column; + gap: 1.5rem; +} + +.inputsContainer { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.loginButton { + color: white; + padding: 1rem 0.5rem; + width: 100%; + border-radius: 1rem; + background: var(--red, #D51F2C); + transition: background 0.15s ease-in-out; + cursor: pointer; + + &.buttonDisabled { + background: var(--DISABLED, #5A5A5A); + cursor: not-allowed; + } +} + +.input { + background-color: var(--beige-web, #F9F7F2); + transition: border 0.15s ease-in-out; + + &.inputError { + border: 1px solid var(--red, #D51F2C); + } +} \ No newline at end of file diff --git a/src/modules/login/components/Form/Form.tsx b/src/modules/login/components/Form/Form.tsx new file mode 100644 index 0000000..78a8498 --- /dev/null +++ b/src/modules/login/components/Form/Form.tsx @@ -0,0 +1,99 @@ +import { useState, useEffect } from "react"; +import { Input } from "@/components/Input"; +import { Typography } from "@/components/Typography"; +import { useLoginContext } from "../../context/LoginContext"; +import cx from "classnames"; + +import styles from "./Form.module.css"; + +const Form = () => { + const { authenticate, emailRef, passwordRef } = useLoginContext(); + + const [emailValid, setEmailValid] = useState(false); + const [passwordValid, setPasswordValid] = useState(false); + const [buttonDisabled, setButtonDisabled] = useState(true); + + const [showEmailError, setShowEmailError] = useState(false); + const [showPasswordError, setShowPasswordError] = useState(false); + + const verifyEmailInput = () => { + if (emailRef?.current?.value.length === 0) { + setEmailValid(false); + setShowEmailError(false); + return; + } + + const emailRegex = /\S+@\S+\.\S+/; + + if (emailRef?.current && emailRegex.test(emailRef?.current?.value)) { + setEmailValid(true); + setShowEmailError(false); + } else { + setEmailValid(false); + setShowEmailError(true); + } + }; + + const verifyPasswordInput = () => { + if (passwordRef?.current?.value.length === 0) { + setPasswordValid(false); + setShowPasswordError(false); + return; + } + + if (passwordRef?.current && passwordRef?.current?.value.length > 0) { + setPasswordValid(true); + setShowPasswordError(false); + } else { + setPasswordValid(false); + setShowPasswordError(true); + } + }; + + useEffect(() => { + if (emailValid && passwordValid) { + setButtonDisabled(false); + } else { + setButtonDisabled(true); + } + }, [emailValid, passwordValid]); + + return ( +
+
+ + Email + + + Heslo + +
+ + Přihlásit se + +
+ ); +}; + +export default Form; diff --git a/src/modules/login/components/Form/index.tsx b/src/modules/login/components/Form/index.tsx new file mode 100644 index 0000000..e4500b6 --- /dev/null +++ b/src/modules/login/components/Form/index.tsx @@ -0,0 +1 @@ +export { default as Form } from "./Form"; diff --git a/src/modules/login/context/LoginContext.tsx b/src/modules/login/context/LoginContext.tsx new file mode 100644 index 0000000..daec266 --- /dev/null +++ b/src/modules/login/context/LoginContext.tsx @@ -0,0 +1,40 @@ +import { createContext, useContext, ReactNode, MutableRefObject } from "react"; + +interface LoginContextValue { + authenticate: () => void; + emailRef: MutableRefObject; + passwordRef: MutableRefObject; +} + +const LoginContext = createContext({ + authenticate: () => {}, + emailRef: { current: null }, + passwordRef: { current: null }, +}); + +export const useLoginContext = () => { + return useContext(LoginContext); +}; + +interface LoginContextProviderProps { + value: LoginContextValue; + children: ReactNode; +} + +export const LoginContextProvider = (props: LoginContextProviderProps) => { + const { + value: { authenticate, emailRef, passwordRef }, + } = props; + + return ( + + {props.children} + + ); +}; diff --git a/src/modules/login/screens/LoginPage.module.css b/src/modules/login/screens/LoginPage.module.css new file mode 100644 index 0000000..ab9f3e4 --- /dev/null +++ b/src/modules/login/screens/LoginPage.module.css @@ -0,0 +1,16 @@ +.container { + min-height: 100vh; + widht: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.innerContainer { + display: flex; + flex-direction: column; + width: 20.5rem; + gap: 2rem; +} + diff --git a/src/modules/login/screens/LoginPage.tsx b/src/modules/login/screens/LoginPage.tsx new file mode 100644 index 0000000..c17f452 --- /dev/null +++ b/src/modules/login/screens/LoginPage.tsx @@ -0,0 +1,68 @@ +"use client"; + +import React, { useEffect, useMemo, useRef } from "react"; +import { useRouter } from "next/navigation"; +import { useLazyQuery } from "@apollo/client"; +import login from "@/queries/login"; +import { LogoHeader } from "@/components/LogoHeader"; +import { Form } from "../components/Form"; +import { Footer } from "../components/Footer"; +import { LoginContextProvider } from "../context/LoginContext"; + +import styles from "./LoginPage.module.css"; + +interface Props { + setToken: (token: string) => void; +} + +const LoginPage = (props: Props) => { + const emailRef = useRef(null); + const passwordRef = useRef(null); + + const router = useRouter(); + + const [loginQuery, { data, error }] = useLazyQuery(login, { + fetchPolicy: "network-only", + }); + + const authenticate = () => { + if (emailRef.current?.value && passwordRef.current?.value) { + loginQuery({ + variables: { + email: emailRef.current.value, + password: passwordRef.current.value, + }, + }); + } + }; + + useEffect(() => { + if (!data?.login) return; + + props.setToken(data.login); + router.push("/jidelni-listek"); + }, [data]); + + const memoizedValue = useMemo( + () => ({ + authenticate, + emailRef, + passwordRef, + }), + [authenticate, emailRef, passwordRef] + ); + + return ( + +
+
+ +
+
+
+
+
+ ); +}; + +export default LoginPage; diff --git a/src/modules/login/screens/index.tsx b/src/modules/login/screens/index.tsx new file mode 100644 index 0000000..62cd443 --- /dev/null +++ b/src/modules/login/screens/index.tsx @@ -0,0 +1 @@ +export { default as LoginPage } from "./LoginPage"; diff --git a/src/modules/menu/screens/Menu.module.css b/src/modules/menu/screens/Menu.module.css new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/menu/screens/Menu.tsx b/src/modules/menu/screens/Menu.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/menu/screens/index.tsx b/src/modules/menu/screens/index.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/theme/themeConfig.ts b/src/theme/themeConfig.ts index aa34f3a..e0cf7c0 100644 --- a/src/theme/themeConfig.ts +++ b/src/theme/themeConfig.ts @@ -4,6 +4,7 @@ const theme: ThemeConfig = { token: { colorPrimary: "#37D399", colorText: "#1F2937", + fontFamily: "Nunito", }, }; diff --git a/src/types/MenuInterface.ts b/src/types/MenuInterface.ts index 4959a65..95d178c 100644 --- a/src/types/MenuInterface.ts +++ b/src/types/MenuInterface.ts @@ -6,5 +6,10 @@ export interface MenuInterface { meal: string; soup: string; drink: string; - date?: number; + date: number; } + +export type DayMenu = { + date: number; + menus: MenuInterface[]; +}; diff --git a/src/utils/getMonthName.ts b/src/utils/getMonthName.ts new file mode 100644 index 0000000..833f93c --- /dev/null +++ b/src/utils/getMonthName.ts @@ -0,0 +1,22 @@ +// MM-DD-YYYY +const getMonthName = (date: string) => { + const month = new Date(date).getMonth(); + return isNaN(month) + ? null + : [ + "Leden", + "Únor", + "Březen", + "Duben", + "Květen", + "Červen", + "Červenec", + "Srpen", + "Září", + "Říjen", + "Listopad", + "Prosinec", + ][month]; +}; + +export default getMonthName; diff --git a/src/utils/getWeekDay.ts b/src/utils/getWeekDay.ts index 78a1e5b..53ce5e3 100644 --- a/src/utils/getWeekDay.ts +++ b/src/utils/getWeekDay.ts @@ -1,3 +1,4 @@ +// MM-DD-YYYY const getDayOfWeek = (date: string) => { const dayOfWeek = new Date(date).getDay(); return isNaN(dayOfWeek) diff --git a/src/utils/isTokenInLocalStorage.ts b/src/utils/isTokenInLocalStorage.ts deleted file mode 100644 index ef65b9f..0000000 --- a/src/utils/isTokenInLocalStorage.ts +++ /dev/null @@ -1,9 +0,0 @@ -const isTokenInLocalStorage = () => { - if (typeof window === "undefined") { - return false; - } - - return localStorage.getItem("token"); -}; - -export default isTokenInLocalStorage; diff --git a/tailwind.config.ts b/tailwind.config.ts deleted file mode 100644 index 2716bcb..0000000 --- a/tailwind.config.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { Config } from "tailwindcss"; - -const config: Config = { - preflight: false, - important: true, - content: [ - "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", - "./src/components/**/*.{js,ts,jsx,tsx,mdx}", - "./src/app/**/*.{js,ts,jsx,tsx,mdx}", - ], - theme: { - extend: { - screens: { - xxl: "1440px", - }, - backgroundImage: { - "gradient-radial": "radial-gradient(var(--tw-gradient-stops))", - "gradient-conic": - "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))", - }, - colors: { - primary: "#37d399", - }, - }, - }, - plugins: [], -}; -export default config; diff --git a/tsconfig.json b/tsconfig.json index 1a65918..aae095a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,12 @@ "compilerOptions": { "target": "es5", "downlevelIteration": true, - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "es2015", + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -21,9 +26,18 @@ ], "baseUrl": ".", "paths": { - "@/*": ["./src/*"] + "@/*": [ + "./src/*" + ] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] } From e1183915cfed180a6cf485e8a76ae667d30c0b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 4 Jan 2024 13:02:49 +0100 Subject: [PATCH 35/49] fix 404 causing client error --- src/modules/AdminPage/actions/getMenus.ts | 37 +++++++++++++---------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/modules/AdminPage/actions/getMenus.ts b/src/modules/AdminPage/actions/getMenus.ts index ab6405d..2c81584 100644 --- a/src/modules/AdminPage/actions/getMenus.ts +++ b/src/modules/AdminPage/actions/getMenus.ts @@ -6,26 +6,31 @@ import { getClient } from "@/lib/ssrApolloClient"; import updateMenuInterval from "@/modules/AdminPage/utils/updateMenuInterval"; const getMenus = async (unix?: number) => { - const viewedDatesUnix = updateMenuInterval(unix); + try { + const viewedDatesUnix = updateMenuInterval(unix); - const { data: menusByDate } = await getClient().query({ - query: getMenusByDate, - variables: { - dateFrom: viewedDatesUnix[0], - dateTo: viewedDatesUnix[1], - }, - context: { - headers: { - Authorization: getToken(), + const { data: menusByDate } = await getClient().query({ + query: getMenusByDate, + variables: { + dateFrom: viewedDatesUnix[0], + dateTo: viewedDatesUnix[1], }, - fetchOptions: { - next: { tags: ["menusByDate"] }, + context: { + headers: { + Authorization: getToken(), + }, + fetchOptions: { + next: { tags: ["menusByDate"] }, + }, }, - }, - fetchPolicy: "network-only", - }); + fetchPolicy: "network-only", + }); - return menusByDate.getMenusByDate; + return menusByDate.getMenusByDate ?? []; + } catch (error) { + return []; + } }; export default getMenus; + From f0c7994cff59c166c85effc4b97032738cf7a153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Fri, 5 Jan 2024 09:49:02 +0100 Subject: [PATCH 36/49] bump apollo & remove experimental support --- bun.lockb | Bin 300275 -> 300340 bytes next.config.js | 6 +----- package.json | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/bun.lockb b/bun.lockb index 8362c641805c1df4627b92eff7ebeeb4024b63e5..76cbd9bf653f159e8854611562037773de279328 100755 GIT binary patch delta 30696 zcmeHw2Ut|sy7t~P46?C-B8p>A>;h5;9AU%`ii*AK2qU000Tpb6CQ(6AajVN-u*DWN z8cQ^mn5d}OVor=DYI06;Vq#2;If*glf4{Z%#&R_0+o3D_uaak-J7~N z*ENLVi;9a96-RK?V|X1Kp3RRwAZN~zwU zH9=kd)fiJ9=ZOGG@&bGdl( zNj{*lA(CVU4Fx5x_xXwLH-J_FW}&>lnt8MFK;mR3r)JvGbz(~T2MsiJ&Azl07SZe3~Tfw+dCK zj!sC<%#ftiyuP^y)j<;$7LixjO{v~+iyFmwxG>U~6}J>HQe zNgp7cdad0?)K6EHa{kUiQNoP50b$@klHP4A@Va)Q^lgn6f|8=9fl{lxQO*-|Jt#@; z$cne8*b^M_Dam7#(axa`f?Egj$$bWP6tww^qW)%qoq2(sL_;Z#aSq}jRx8*ZlpG=v z3{r=yIt#`=1to`p?s)oyXpue>>BOLSjBub7;99`#QJ>n0Pxeht8<{Q*1VhxGaJ(QX zFDu2Km4wC~b`cWa?J5|$2wEEj9hsTwnZAykzs8D+N7ZDvx^BC=3CC31xYTft0U+-y z>LE!DK)=zN`V^G<(!DCfHw6aGmNxVh=`}PO3Z+y+Ilo>)mI_Fxv01*iraVwGodcD# z9htemYUO~Au4bWv>s@oTB7(n z3xjM{} zU9!WdEVv^~s*m;|3EVfFd7T}SR1F2

~cK2udSz$Vky(6eu~3C(^0Gr{zD4XhV!| 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 IB`5d)0Rh^^ZvX%Q delta 30600 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 diff --git a/next.config.js b/next.config.js index 5d1d7aa..d7ed443 100644 --- a/next.config.js +++ b/next.config.js @@ -1,9 +1,5 @@ /** @type {import('next').NextConfig} */ -const nextConfig = { - experimental: { - serverActions: true, - }, -}; +const nextConfig = {}; const withBundleAnalyzer = require("@next/bundle-analyzer")({ enabled: process.env.ANALYZE === "true", diff --git a/package.json b/package.json index 114e244..37b4459 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "dependencies": { "@ant-design/cssinjs": "^1.17.0", "@apollo/client": "latest", - "@apollo/experimental-nextjs-app-support": "^0.4.2", + "@apollo/experimental-nextjs-app-support": "^0.5.2", "@next/bundle-analyzer": "^14.0.3", "@vercel/analytics": "^1.0.2", "antd": "^5.9.0", From 1a07d1e0182fd86567d87ae09df8b4bdd88c24fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Fri, 12 Jan 2024 16:42:26 +0100 Subject: [PATCH 37/49] wip --- next.config.js | 6 ++- src/app/(admin)/jidelni-listek/page.tsx | 4 +- src/app/(admin)/queue/page.tsx | 10 ----- src/app/(admin)/vydej/page.tsx | 11 +++++ .../components/Sidebar/Sidebar.tsx | 1 + src/components/Table/Table.tsx | 40 ++++++++++++++++++- src/modules/AdminPage/AdminPage.tsx | 1 - src/modules/OrdersPage/OrdersPage.tsx | 31 ++++++++++++++ .../OrdersPage/actions/getWaiterOrders.ts | 33 +++++++++++++++ src/types/LunchOrder.ts | 7 ++-- 10 files changed, 123 insertions(+), 21 deletions(-) delete mode 100644 src/app/(admin)/queue/page.tsx create mode 100644 src/app/(admin)/vydej/page.tsx create mode 100644 src/modules/OrdersPage/OrdersPage.tsx create mode 100644 src/modules/OrdersPage/actions/getWaiterOrders.ts diff --git a/next.config.js b/next.config.js index d7ed443..5d1d7aa 100644 --- a/next.config.js +++ b/next.config.js @@ -1,5 +1,9 @@ /** @type {import('next').NextConfig} */ -const nextConfig = {}; +const nextConfig = { + experimental: { + serverActions: true, + }, +}; const withBundleAnalyzer = require("@next/bundle-analyzer")({ enabled: process.env.ANALYZE === "true", diff --git a/src/app/(admin)/jidelni-listek/page.tsx b/src/app/(admin)/jidelni-listek/page.tsx index c0fe836..13d98bd 100644 --- a/src/app/(admin)/jidelni-listek/page.tsx +++ b/src/app/(admin)/jidelni-listek/page.tsx @@ -1,14 +1,12 @@ "use server"; -import getToken from "@/utils/getToken"; import AdminPage from "@/modules/AdminPage/AdminPage"; import getMenus from "@/modules/AdminPage/actions/getMenus"; const Page = async () => { - const token = getToken(); const menusByDate = await getMenus(); - return ; + return ; }; export default Page; diff --git a/src/app/(admin)/queue/page.tsx b/src/app/(admin)/queue/page.tsx deleted file mode 100644 index 4276e6c..0000000 --- a/src/app/(admin)/queue/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import QueuePage from "@/modules/QueuePage/QueuePage"; -import getToken from "@/utils/getToken"; - -const Page = () => { - const token = getToken(); - - return ; -}; - -export default Page; diff --git a/src/app/(admin)/vydej/page.tsx b/src/app/(admin)/vydej/page.tsx new file mode 100644 index 0000000..fa1780e --- /dev/null +++ b/src/app/(admin)/vydej/page.tsx @@ -0,0 +1,11 @@ +import OrdersPage from "@/modules/OrdersPage/OrdersPage"; +import getWaiterOrders from "@/modules/OrdersPage/actions/getWaiterOrders"; + +const Page = async () => { + // TODO: remove the "1" + const waiterOrders = await getWaiterOrders(1); + + return ; +}; + +export default Page; diff --git a/src/components/AdminLayout/components/Sidebar/Sidebar.tsx b/src/components/AdminLayout/components/Sidebar/Sidebar.tsx index eefafd3..783dabb 100644 --- a/src/components/AdminLayout/components/Sidebar/Sidebar.tsx +++ b/src/components/AdminLayout/components/Sidebar/Sidebar.tsx @@ -1,5 +1,6 @@ "use server"; +import { useRouter } from "next/navigation"; import Link from "next/link"; import { headers } from "next/headers"; import { Typography } from "@/components/Typography"; diff --git a/src/components/Table/Table.tsx b/src/components/Table/Table.tsx index 7091cfb..fa7c507 100644 --- a/src/components/Table/Table.tsx +++ b/src/components/Table/Table.tsx @@ -1,5 +1,41 @@ -const Table = () => { - return

; +type TableDataTypes = string | number | boolean | JSX.Element; + +interface Props { + headings: Array; + data: Array>; +} + +const Table = (props: Props) => { + return ( +
+ + + {props.headings.map((heading, index) => ( + + ))} + + + + {props.data.map((row, index) => ( + + {Object.values(row).map((value, index) => ( + + ))} + + ))} + +
+ {heading} +
+ {value} +
+ ); }; export default Table; diff --git a/src/modules/AdminPage/AdminPage.tsx b/src/modules/AdminPage/AdminPage.tsx index 8f6b8d3..f1bcc4b 100644 --- a/src/modules/AdminPage/AdminPage.tsx +++ b/src/modules/AdminPage/AdminPage.tsx @@ -7,7 +7,6 @@ import mapMenusToSequencedMonthDays from "./utils/mapMenusToSequencedMonthDays"; import getMenus from "./actions/getMenus"; interface Props { - token: string; menusByDate: MenuInterface[]; } diff --git a/src/modules/OrdersPage/OrdersPage.tsx b/src/modules/OrdersPage/OrdersPage.tsx new file mode 100644 index 0000000..95b2702 --- /dev/null +++ b/src/modules/OrdersPage/OrdersPage.tsx @@ -0,0 +1,31 @@ +import { Table } from '@/components/Table'; +import type { OrdersInterface } from '@/types/LunchOrder'; + +interface Props { + waiterOrders: OrdersInterface[]; +} + +const OrdersPage = (props: Props) => { + console.log(props.waiterOrders) + + const tableHeadings = ['orderId', 'meal', 'date', 'name', 'order'] + + const tableData = props.waiterOrders.map((order) => { + return { + 'orderId': order.orderId, + 'meal': order.meal, + 'date': order.date, + 'name': order.name, + 'order': order.order, + } + }) + + + return ( +
+ + + ) +} + +export default OrdersPage; diff --git a/src/modules/OrdersPage/actions/getWaiterOrders.ts b/src/modules/OrdersPage/actions/getWaiterOrders.ts new file mode 100644 index 0000000..7196d30 --- /dev/null +++ b/src/modules/OrdersPage/actions/getWaiterOrders.ts @@ -0,0 +1,33 @@ +"use server"; + +import dayjs from "@/lib/dayjs" +import getToken from "@/utils/getToken"; +import waiterOrders from "@/queries/waiterOrders"; +import { getClient } from "@/lib/ssrApolloClient"; + +const getWaiterOrders = async (unix?: number) => { + try { + const { data: getWaiterOrders } = await getClient().query({ + query: waiterOrders, + variables: { + date: unix ? unix : dayjs().utc().startOf("day").unix(), + }, + context: { + headers: { + Authorization: getToken(), + }, + fetchOptions: { + next: { tags: ["waiterOrders"] }, + }, + }, + fetchPolicy: "network-only", + }); + + return getWaiterOrders.waiterOrders ?? []; + } catch (error) { + return []; + } +}; + +export default getWaiterOrders; + diff --git a/src/types/LunchOrder.ts b/src/types/LunchOrder.ts index 357faca..00eab37 100644 --- a/src/types/LunchOrder.ts +++ b/src/types/LunchOrder.ts @@ -1,9 +1,8 @@ -export interface LunchOrder { - key: string; - orderId: number; +export interface OrdersInterface { + orderId: string; date: number; - name: string; meal: string; + name: string; order: number; } From 6eded7d9c4fb0d27dd5b21a82e6589b245170c23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Fri, 12 Jan 2024 17:51:27 +0100 Subject: [PATCH 38/49] load data into modal & close button --- public/img/cross.svg | 4 ++ src/modules/AdminPage/AdminPage.tsx | 2 - .../AdminPage/components/Table/Table.tsx | 4 +- .../Table/components/Modal/Modal.module.css | 37 +++++++++++++++++++ .../Table/components/Modal/Modal.tsx | 29 ++++++++++++--- .../components/Modal/components/Item.tsx | 32 ++++++++++++---- .../components/Table/components/Row/Row.tsx | 12 ++++-- 7 files changed, 100 insertions(+), 20 deletions(-) create mode 100644 public/img/cross.svg diff --git a/public/img/cross.svg b/public/img/cross.svg new file mode 100644 index 0000000..a4857b6 --- /dev/null +++ b/public/img/cross.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/modules/AdminPage/AdminPage.tsx b/src/modules/AdminPage/AdminPage.tsx index f1bcc4b..7078440 100644 --- a/src/modules/AdminPage/AdminPage.tsx +++ b/src/modules/AdminPage/AdminPage.tsx @@ -21,9 +21,7 @@ const AdminPage = (props: Props) => { }; return ( -
- ); }; export default AdminPage; diff --git a/src/modules/AdminPage/components/Table/Table.tsx b/src/modules/AdminPage/components/Table/Table.tsx index 317bd36..7f6bfbe 100644 --- a/src/modules/AdminPage/components/Table/Table.tsx +++ b/src/modules/AdminPage/components/Table/Table.tsx @@ -20,6 +20,7 @@ const Modal = dynamic(() => import("./components/Modal/Modal")); const Table = (props: Props) => { const currentMonth = getMonthName(dayjs().format("MM-DD-YYYY")) ?? ""; + const [modalData, setModalData] = useState(); const [month, setMonth] = useState({ displayName: currentMonth, value: parseInt(dayjs().format("MM")), @@ -71,7 +72,7 @@ const Table = (props: Props) => { return (
- {modalVisible && } + {modalVisible && }
{ key={index} rowData={menu} oddRow={index % 2 !== 0} + setModalData={setModalData} showModal={showModal} /> ))} diff --git a/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css index 0cdd07e..bf26f08 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css +++ b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css @@ -21,6 +21,11 @@ background: var(--beige-web, #F9F7F2); position: absolute; overflow: scroll; + +} + +.modalContainer::-webkit-scrollbar { + display: none; } .content { @@ -30,3 +35,35 @@ flex-direction: column; gap: 1.5rem; } + +.heading { + width: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.buttonControls { + display: flex; + flex-direction: row; + justify-content: space-between; + gap: 1.5rem; +} + +.buttonControls button { + display: flex; + justify-content: center; + align-items: center; + padding: 1rem 1.44rem 1rem 1.44rem; + border-radius: 1rem; + gap: 0.62rem; + background-color: var(--red, #D51F2C); + color: var(--white, #FFF); + cursor: pointer; +} + +.buttonIcon { + position: relative; + width: 1.25rem; + height: 1.25rem; +} \ No newline at end of file diff --git a/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx b/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx index 0b87db7..eb0dc73 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx +++ b/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx @@ -1,21 +1,40 @@ +import Image from "next/image"; import { Typography } from "@/components/Typography"; import Item from "./components/Item"; import styles from "./Modal.module.css"; +import { DayMenu, MenuInterface } from "@/types/MenuInterface"; interface Props { + data: DayMenu | undefined; hideModal: () => void; } const Modal = (props: Props) => { return ( -
+
- MENU UNSET - - - +
+ + MENU UNSET + +
+ + Zavřít +
+ +
+
+
+
+ {props.data?.menus.map((menu: MenuInterface, index: number) => ( + + ))}
diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx index 78233c1..e632b28 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx @@ -2,8 +2,10 @@ import { Typography } from "@/components/Typography"; import styles from "./Item.module.css" import { Input } from "@/components/Input"; +import { MenuInterface } from "@/types/MenuInterface"; interface Props { + menu: MenuInterface; menuOrder: number; } @@ -11,24 +13,38 @@ const Item = (props: Props) => { return (
- Menu {props.menuOrder} + + Menu {props.menuOrder} +
- test - test + + Hlavní jídlo: + + + ... +
- test - test + + Polévka: + + + ... +
- test - test + + Pití: + + + ... +
- ) + ); } export default Item; diff --git a/src/modules/AdminPage/components/Table/components/Row/Row.tsx b/src/modules/AdminPage/components/Table/components/Row/Row.tsx index 21e736d..ab5286a 100644 --- a/src/modules/AdminPage/components/Table/components/Row/Row.tsx +++ b/src/modules/AdminPage/components/Table/components/Row/Row.tsx @@ -6,14 +6,21 @@ import { DayMenu } from "@/types/MenuInterface"; import cx from "classnames"; import styles from "./Row.module.css"; +import { Dispatch, SetStateAction } from "react"; interface Props { rowData: DayMenu; oddRow: boolean; + setModalData: Dispatch>; showModal: (date: number) => void; } const Row = (props: Props) => { + const handleModalOpen = () => { + props.setModalData(props.rowData); + props.showModal(props.rowData.date); + }; + return (
{ {props.rowData.menus.length} Menu -
+
+ + Výdej + +
+
- ) -} + ); +}; export default OrdersPage; diff --git a/src/modules/OrdersPage/components/Footer/Footer.module.css b/src/modules/OrdersPage/components/Footer/Footer.module.css new file mode 100644 index 0000000..b60b2ad --- /dev/null +++ b/src/modules/OrdersPage/components/Footer/Footer.module.css @@ -0,0 +1,20 @@ +.container { + width: 100%; + display: flex; + margin-top: 1rem; + justify-content: end; + gap: 1.25rem; +} + +.button { + display: flex; + justify-content: center; + align-items: center; + padding: 1rem 1.4375rem; + border-radius: 1rem; + gap: 0.5rem; + cursor: pointer; + border: 1px solid var(--red, #D51F2C); + background-color: var(--red, #D51F2C); + color: var(--white, #FFF); +} \ No newline at end of file diff --git a/src/modules/OrdersPage/components/Footer/Footer.tsx b/src/modules/OrdersPage/components/Footer/Footer.tsx new file mode 100644 index 0000000..6bbaeef --- /dev/null +++ b/src/modules/OrdersPage/components/Footer/Footer.tsx @@ -0,0 +1,29 @@ +"use client"; + +import { MutableRefObject } from "react"; +import { Typography } from "@/components/Typography"; +import cx from "classnames"; + +import styles from "./Footer.module.css"; + +interface Props { + refreshOrders: () => void; + orderDateRef: MutableRefObject; +} + +const Footer = (props: Props) => { + return ( +
+ + Obnovit seznam + +
+ ); +}; + +export default Footer; diff --git a/src/modules/OrdersPage/components/Footer/index.tsx b/src/modules/OrdersPage/components/Footer/index.tsx new file mode 100644 index 0000000..090a49a --- /dev/null +++ b/src/modules/OrdersPage/components/Footer/index.tsx @@ -0,0 +1 @@ +export { default as Footer } from "./Footer"; diff --git a/src/modules/OrdersPage/components/Table/Table.module.css b/src/modules/OrdersPage/components/Table/Table.module.css new file mode 100644 index 0000000..55da7da --- /dev/null +++ b/src/modules/OrdersPage/components/Table/Table.module.css @@ -0,0 +1,13 @@ +.container { + width: 100%; + max-height: 45rem; + display: flex; + flex-direction: column; + border-radius: 1rem; + border: 1px solid var(--Beige, #EEE8DA); + overflow-y: scroll; +} + +.container::-webkit-scrollbar { + display: none; +} \ No newline at end of file diff --git a/src/modules/OrdersPage/components/Table/Table.tsx b/src/modules/OrdersPage/components/Table/Table.tsx new file mode 100644 index 0000000..1cdc0b4 --- /dev/null +++ b/src/modules/OrdersPage/components/Table/Table.tsx @@ -0,0 +1,19 @@ +import { Row } from "./components/Row"; +import { OrdersInterface } from "@/types/LunchOrder"; +import styles from "./Table.module.css"; + +interface Props { + data: OrdersInterface[]; +} + +const Table = (props: Props) => { + return ( +
+ {props.data.map((row: OrdersInterface, index: number) => ( + + ))} +
+ ); +}; + +export default Table; diff --git a/src/modules/OrdersPage/components/Table/components/Row/Row.module.css b/src/modules/OrdersPage/components/Table/components/Row/Row.module.css new file mode 100644 index 0000000..7eabb4d --- /dev/null +++ b/src/modules/OrdersPage/components/Table/components/Row/Row.module.css @@ -0,0 +1,10 @@ +.row { + display: flex; + height: 7.5rem; + padding: 2rem 2.5625rem 1.625rem 3rem; + gap: 6rem; + + &.beigeBackground { + background: #F5F2EB; + } +} diff --git a/src/modules/OrdersPage/components/Table/components/Row/Row.tsx b/src/modules/OrdersPage/components/Table/components/Row/Row.tsx new file mode 100644 index 0000000..cb8cc32 --- /dev/null +++ b/src/modules/OrdersPage/components/Table/components/Row/Row.tsx @@ -0,0 +1,23 @@ +import { OrdersInterface } from "@/types/LunchOrder"; +import dayjs from "@/lib/dayjs"; +import cx from "classnames"; + +import styles from "./Row.module.css"; + +interface Props { + rowData: OrdersInterface; + oddRow: boolean; +} +const Row = (props: Props) => { + return ( +
+
+

{props.rowData.name}

+

{dayjs.unix(props.rowData.date).utc().format("HH:MM")}

+
+

{props.rowData.meal}

+
+ ); +}; + +export default Row; diff --git a/src/modules/OrdersPage/components/Table/components/Row/index.tsx b/src/modules/OrdersPage/components/Table/components/Row/index.tsx new file mode 100644 index 0000000..9abd55d --- /dev/null +++ b/src/modules/OrdersPage/components/Table/components/Row/index.tsx @@ -0,0 +1 @@ +export { default as Row } from "./Row"; diff --git a/src/modules/OrdersPage/components/Table/index.tsx b/src/modules/OrdersPage/components/Table/index.tsx new file mode 100644 index 0000000..6c9ff96 --- /dev/null +++ b/src/modules/OrdersPage/components/Table/index.tsx @@ -0,0 +1 @@ +export { default as Table } from "./Table"; diff --git a/src/modules/OrdersPage/utils/transformWaiterOrders.ts b/src/modules/OrdersPage/utils/transformWaiterOrders.ts new file mode 100644 index 0000000..2ec7897 --- /dev/null +++ b/src/modules/OrdersPage/utils/transformWaiterOrders.ts @@ -0,0 +1,14 @@ +import { OrdersInterface } from "@/types/LunchOrder"; + +const transformWaiterOrders = (waiterOrders: OrdersInterface[]) => + waiterOrders.map((order) => { + return { + name: order.name, + date: order.date, + orderId: order.orderId, + meal: order.meal, + order: order.order, + }; + }); + +export default transformWaiterOrders; From d8dd6f5de33bc03121a3dbc87301bc1de68b1553 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Sun, 14 Jan 2024 12:12:36 +0100 Subject: [PATCH 40/49] fix login not being highlighted after browser creds autofill --- src/modules/login/components/Form/Form.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/modules/login/components/Form/Form.tsx b/src/modules/login/components/Form/Form.tsx index 78a8498..fd8ba05 100644 --- a/src/modules/login/components/Form/Form.tsx +++ b/src/modules/login/components/Form/Form.tsx @@ -50,6 +50,11 @@ const Form = () => { } }; + useEffect(() => { + verifyEmailInput(); + verifyPasswordInput(); + }, []); + useEffect(() => { if (emailValid && passwordValid) { setButtonDisabled(false); From 185daf6bfe2bb88b3ae64bb8292da38e9a676839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Sun, 14 Jan 2024 12:50:35 +0100 Subject: [PATCH 41/49] init order overview page --- src/app/(admin)/objednavky/page.tsx | 12 +++++++ src/app/(admin)/vydej/page.tsx | 6 ++-- .../MenuOrdersPage/MenuOrdersPage.module.css | 11 ++++++ src/modules/MenuOrdersPage/MenuOrdersPage.tsx | 29 +++++++++++++++ .../MenuOrdersPage/actions/getOrders.ts | 34 ++++++++++++++++++ .../components/DayBox/DayBox.module.css | 16 +++++++++ .../components/DayBox/DayBox.tsx | 35 +++++++++++++++++++ .../components/DayBox/index.tsx | 1 + .../MenuOrdersPage/types/MenuOrders.ts | 9 +++++ src/modules/OrderItem.tsx | 4 +-- .../WaiterOrdersPage.module.css} | 0 .../WaiterOrdersPage.tsx} | 14 ++++---- .../actions/getWaiterOrders.ts | 0 .../components/Footer/Footer.module.css | 0 .../components/Footer/Footer.tsx | 0 .../components/Footer/index.tsx | 0 .../components/Table/Table.module.css | 0 .../components/Table/Table.tsx | 6 ++-- .../Table/components/Row/Row.module.css | 0 .../components/Table/components/Row/Row.tsx | 4 +-- .../components/Table/components/Row/index.tsx | 0 .../components/Table/index.tsx | 0 .../WaiterOrdersPage/types/waiterOrder.ts | 7 ++++ .../utils/transformWaiterOrders.ts | 4 +-- src/types/LunchOrder.ts | 16 --------- 25 files changed, 173 insertions(+), 35 deletions(-) create mode 100644 src/app/(admin)/objednavky/page.tsx create mode 100644 src/modules/MenuOrdersPage/MenuOrdersPage.module.css create mode 100644 src/modules/MenuOrdersPage/MenuOrdersPage.tsx create mode 100644 src/modules/MenuOrdersPage/actions/getOrders.ts create mode 100644 src/modules/MenuOrdersPage/components/DayBox/DayBox.module.css create mode 100644 src/modules/MenuOrdersPage/components/DayBox/DayBox.tsx create mode 100644 src/modules/MenuOrdersPage/components/DayBox/index.tsx create mode 100644 src/modules/MenuOrdersPage/types/MenuOrders.ts rename src/modules/{OrdersPage/OrdersPage.module.css => WaiterOrdersPage/WaiterOrdersPage.module.css} (100%) rename src/modules/{OrdersPage/OrdersPage.tsx => WaiterOrdersPage/WaiterOrdersPage.tsx} (74%) rename src/modules/{OrdersPage => WaiterOrdersPage}/actions/getWaiterOrders.ts (100%) rename src/modules/{OrdersPage => WaiterOrdersPage}/components/Footer/Footer.module.css (100%) rename src/modules/{OrdersPage => WaiterOrdersPage}/components/Footer/Footer.tsx (100%) rename src/modules/{OrdersPage => WaiterOrdersPage}/components/Footer/index.tsx (100%) rename src/modules/{OrdersPage => WaiterOrdersPage}/components/Table/Table.module.css (100%) rename src/modules/{OrdersPage => WaiterOrdersPage}/components/Table/Table.tsx (66%) rename src/modules/{OrdersPage => WaiterOrdersPage}/components/Table/components/Row/Row.module.css (100%) rename src/modules/{OrdersPage => WaiterOrdersPage}/components/Table/components/Row/Row.tsx (82%) rename src/modules/{OrdersPage => WaiterOrdersPage}/components/Table/components/Row/index.tsx (100%) rename src/modules/{OrdersPage => WaiterOrdersPage}/components/Table/index.tsx (100%) create mode 100644 src/modules/WaiterOrdersPage/types/waiterOrder.ts rename src/modules/{OrdersPage => WaiterOrdersPage}/utils/transformWaiterOrders.ts (65%) delete mode 100644 src/types/LunchOrder.ts diff --git a/src/app/(admin)/objednavky/page.tsx b/src/app/(admin)/objednavky/page.tsx new file mode 100644 index 0000000..ab04818 --- /dev/null +++ b/src/app/(admin)/objednavky/page.tsx @@ -0,0 +1,12 @@ +"use server"; + +import MenuOrdersPage from "@/modules/MenuOrdersPage/MenuOrdersPage"; +import getMenuOrders from "@/modules/MenuOrdersPage/actions/getOrders"; + +const Page = async () => { + const menuOrders = await getMenuOrders(); + + return ; +}; + +export default Page; diff --git a/src/app/(admin)/vydej/page.tsx b/src/app/(admin)/vydej/page.tsx index fa1780e..5acaab3 100644 --- a/src/app/(admin)/vydej/page.tsx +++ b/src/app/(admin)/vydej/page.tsx @@ -1,11 +1,11 @@ -import OrdersPage from "@/modules/OrdersPage/OrdersPage"; -import getWaiterOrders from "@/modules/OrdersPage/actions/getWaiterOrders"; +import WaiterOrdersPage from "@/modules/WaiterOrdersPage/WaiterOrdersPage"; +import getWaiterOrders from "@/modules/WaiterOrdersPage/actions/getWaiterOrders"; const Page = async () => { // TODO: remove the "1" const waiterOrders = await getWaiterOrders(1); - return ; + return ; }; export default Page; diff --git a/src/modules/MenuOrdersPage/MenuOrdersPage.module.css b/src/modules/MenuOrdersPage/MenuOrdersPage.module.css new file mode 100644 index 0000000..c676d50 --- /dev/null +++ b/src/modules/MenuOrdersPage/MenuOrdersPage.module.css @@ -0,0 +1,11 @@ +.container { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.boxWrapper { + display: flex; + flex-direction: column; + gap: 2.5rem; +} \ No newline at end of file diff --git a/src/modules/MenuOrdersPage/MenuOrdersPage.tsx b/src/modules/MenuOrdersPage/MenuOrdersPage.tsx new file mode 100644 index 0000000..64ddd8a --- /dev/null +++ b/src/modules/MenuOrdersPage/MenuOrdersPage.tsx @@ -0,0 +1,29 @@ +"use client"; + +import { Typography } from "@/components/Typography"; +import { MenuOrdersInterface } from "./types/MenuOrders"; +import { DayBox } from "./components/DayBox"; + +import styles from "./MenuOrdersPage.module.css"; + +interface Props { + menuOrders: MenuOrdersInterface[]; +} + +const MenuOrdersPage = (props: Props) => { + console.log(props.menuOrders); + return ( +
+ + Objednávky + +
+ {props.menuOrders.map((day: MenuOrdersInterface) => ( + + ))} +
+
+ ); +}; + +export default MenuOrdersPage; diff --git a/src/modules/MenuOrdersPage/actions/getOrders.ts b/src/modules/MenuOrdersPage/actions/getOrders.ts new file mode 100644 index 0000000..9c8edfc --- /dev/null +++ b/src/modules/MenuOrdersPage/actions/getOrders.ts @@ -0,0 +1,34 @@ +"use server"; + +import getToken from "@/utils/getToken"; +import adminGetMenuOrders from "@/queries/adminGetMenuOrders"; +import dayjs from "@/lib/dayjs"; +import { getClient } from "@/lib/ssrApolloClient"; + +const getMenuOrders = async (unix?: number) => { + // TODO: add dateFrom and dateTo + try { + const { data: getMenuOrders } = await getClient().query({ + query: adminGetMenuOrders, + variables: { + dateFrom: 0, + dateTo: dayjs().utc().endOf("day").unix(), + }, + context: { + headers: { + Authorization: getToken(), + }, + fetchOptions: { + next: { tags: ["menusByDate"] }, + }, + }, + fetchPolicy: "network-only", + }); + + return getMenuOrders.adminGetMenuOrders ?? []; + } catch (error) { + return []; + } +}; + +export default getMenuOrders; diff --git a/src/modules/MenuOrdersPage/components/DayBox/DayBox.module.css b/src/modules/MenuOrdersPage/components/DayBox/DayBox.module.css new file mode 100644 index 0000000..83c1e06 --- /dev/null +++ b/src/modules/MenuOrdersPage/components/DayBox/DayBox.module.css @@ -0,0 +1,16 @@ +.container { + height: fit-content; + display: flex; + width: 55.375rem; + padding: 2rem 3rem 4rem 3rem; + flex-direction: column; + align-items: flex-start; + gap: 1.5rem; + border-radius: 1rem; + border: 1px solid var(--Beige, #EEE8DA); + background: var(--beige-light, #F5F2EB); +} + +.header { + +} \ No newline at end of file diff --git a/src/modules/MenuOrdersPage/components/DayBox/DayBox.tsx b/src/modules/MenuOrdersPage/components/DayBox/DayBox.tsx new file mode 100644 index 0000000..238b189 --- /dev/null +++ b/src/modules/MenuOrdersPage/components/DayBox/DayBox.tsx @@ -0,0 +1,35 @@ +import { Typography } from "@/components/Typography"; +import dayjs from "@/lib/dayjs"; +import { MenuOrdersInterface } from "../../types/MenuOrders"; +import styles from "./DayBox.module.css"; + +interface Props { + data: MenuOrdersInterface; +} + +const DayBox = (props: Props) => { + return ( +
+
+ + {dayjs.unix(props.data.date).utc().format("DD.MM.YYYY")} + +
+
+ + Polévky + + {props.data.soup} +
+
+ + Hlavní jídla + + {props.data.meal} +
+
+
+ ); +}; + +export default DayBox; diff --git a/src/modules/MenuOrdersPage/components/DayBox/index.tsx b/src/modules/MenuOrdersPage/components/DayBox/index.tsx new file mode 100644 index 0000000..77f561e --- /dev/null +++ b/src/modules/MenuOrdersPage/components/DayBox/index.tsx @@ -0,0 +1 @@ +export { default as DayBox } from "./DayBox"; diff --git a/src/modules/MenuOrdersPage/types/MenuOrders.ts b/src/modules/MenuOrdersPage/types/MenuOrders.ts new file mode 100644 index 0000000..cc4cb4a --- /dev/null +++ b/src/modules/MenuOrdersPage/types/MenuOrders.ts @@ -0,0 +1,9 @@ +export interface MenuOrdersInterface { + id: string; + date: number; + meal: string; + drink: string; + soup: string; + Order: number; + Count: number; +} diff --git a/src/modules/OrderItem.tsx b/src/modules/OrderItem.tsx index dfd8ca8..6a794dd 100644 --- a/src/modules/OrderItem.tsx +++ b/src/modules/OrderItem.tsx @@ -1,7 +1,7 @@ "use client"; import React from "react"; -import type { LunchOrder } from "@/types/LunchOrder"; +import type { WaiterOrder } from "./WaiterOrdersPage/types/waiterOrder"; import dayjs from "dayjs"; interface ColInterface { @@ -15,7 +15,7 @@ const OrderItem = ({ index, columns, }: { - order: LunchOrder; + order: WaiterOrder; index: number; columns: ColInterface[]; }) => { diff --git a/src/modules/OrdersPage/OrdersPage.module.css b/src/modules/WaiterOrdersPage/WaiterOrdersPage.module.css similarity index 100% rename from src/modules/OrdersPage/OrdersPage.module.css rename to src/modules/WaiterOrdersPage/WaiterOrdersPage.module.css diff --git a/src/modules/OrdersPage/OrdersPage.tsx b/src/modules/WaiterOrdersPage/WaiterOrdersPage.tsx similarity index 74% rename from src/modules/OrdersPage/OrdersPage.tsx rename to src/modules/WaiterOrdersPage/WaiterOrdersPage.tsx index e2d12fe..8c2fe9a 100644 --- a/src/modules/OrdersPage/OrdersPage.tsx +++ b/src/modules/WaiterOrdersPage/WaiterOrdersPage.tsx @@ -6,20 +6,20 @@ import { Table } from "./components/Table"; import { Footer } from "./components/Footer"; import dayjs from "@/lib/dayjs"; import transformWaiterOrders from "./utils/transformWaiterOrders"; -import type { OrdersInterface } from "@/types/LunchOrder"; +import type { WaiterOrder } from "./types/waiterOrder"; import getWaiterOrders from "./actions/getWaiterOrders"; -import styles from "./OrdersPage.module.css"; +import styles from "./WaiterOrdersPage.module.css"; interface Props { - waiterOrders: OrdersInterface[]; + waiterOrders: WaiterOrder[]; } -const OrdersPage = (props: Props) => { +const WaiterOrdersPage = (props: Props) => { const initialSSRData = transformWaiterOrders(props.waiterOrders); const [waiterOrders, setWaiterOrders] = - useState(initialSSRData); + useState(initialSSRData); const ordersDateRef = useRef(dayjs().utc().startOf("day").unix()); @@ -34,9 +34,9 @@ const OrdersPage = (props: Props) => { Výdej
-
+
); }; -export default OrdersPage; +export default WaiterOrdersPage; diff --git a/src/modules/OrdersPage/actions/getWaiterOrders.ts b/src/modules/WaiterOrdersPage/actions/getWaiterOrders.ts similarity index 100% rename from src/modules/OrdersPage/actions/getWaiterOrders.ts rename to src/modules/WaiterOrdersPage/actions/getWaiterOrders.ts diff --git a/src/modules/OrdersPage/components/Footer/Footer.module.css b/src/modules/WaiterOrdersPage/components/Footer/Footer.module.css similarity index 100% rename from src/modules/OrdersPage/components/Footer/Footer.module.css rename to src/modules/WaiterOrdersPage/components/Footer/Footer.module.css diff --git a/src/modules/OrdersPage/components/Footer/Footer.tsx b/src/modules/WaiterOrdersPage/components/Footer/Footer.tsx similarity index 100% rename from src/modules/OrdersPage/components/Footer/Footer.tsx rename to src/modules/WaiterOrdersPage/components/Footer/Footer.tsx diff --git a/src/modules/OrdersPage/components/Footer/index.tsx b/src/modules/WaiterOrdersPage/components/Footer/index.tsx similarity index 100% rename from src/modules/OrdersPage/components/Footer/index.tsx rename to src/modules/WaiterOrdersPage/components/Footer/index.tsx diff --git a/src/modules/OrdersPage/components/Table/Table.module.css b/src/modules/WaiterOrdersPage/components/Table/Table.module.css similarity index 100% rename from src/modules/OrdersPage/components/Table/Table.module.css rename to src/modules/WaiterOrdersPage/components/Table/Table.module.css diff --git a/src/modules/OrdersPage/components/Table/Table.tsx b/src/modules/WaiterOrdersPage/components/Table/Table.tsx similarity index 66% rename from src/modules/OrdersPage/components/Table/Table.tsx rename to src/modules/WaiterOrdersPage/components/Table/Table.tsx index 1cdc0b4..27938ef 100644 --- a/src/modules/OrdersPage/components/Table/Table.tsx +++ b/src/modules/WaiterOrdersPage/components/Table/Table.tsx @@ -1,15 +1,15 @@ import { Row } from "./components/Row"; -import { OrdersInterface } from "@/types/LunchOrder"; +import { WaiterOrder } from "../../types/waiterOrder"; import styles from "./Table.module.css"; interface Props { - data: OrdersInterface[]; + data: WaiterOrder[]; } const Table = (props: Props) => { return (
- {props.data.map((row: OrdersInterface, index: number) => ( + {props.data.map((row: WaiterOrder, index: number) => ( ))}
diff --git a/src/modules/OrdersPage/components/Table/components/Row/Row.module.css b/src/modules/WaiterOrdersPage/components/Table/components/Row/Row.module.css similarity index 100% rename from src/modules/OrdersPage/components/Table/components/Row/Row.module.css rename to src/modules/WaiterOrdersPage/components/Table/components/Row/Row.module.css diff --git a/src/modules/OrdersPage/components/Table/components/Row/Row.tsx b/src/modules/WaiterOrdersPage/components/Table/components/Row/Row.tsx similarity index 82% rename from src/modules/OrdersPage/components/Table/components/Row/Row.tsx rename to src/modules/WaiterOrdersPage/components/Table/components/Row/Row.tsx index cb8cc32..2150bb2 100644 --- a/src/modules/OrdersPage/components/Table/components/Row/Row.tsx +++ b/src/modules/WaiterOrdersPage/components/Table/components/Row/Row.tsx @@ -1,11 +1,11 @@ -import { OrdersInterface } from "@/types/LunchOrder"; +import { WaiterOrder } from "@/modules/WaiterOrdersPage/types/waiterOrder"; import dayjs from "@/lib/dayjs"; import cx from "classnames"; import styles from "./Row.module.css"; interface Props { - rowData: OrdersInterface; + rowData: WaiterOrder; oddRow: boolean; } const Row = (props: Props) => { diff --git a/src/modules/OrdersPage/components/Table/components/Row/index.tsx b/src/modules/WaiterOrdersPage/components/Table/components/Row/index.tsx similarity index 100% rename from src/modules/OrdersPage/components/Table/components/Row/index.tsx rename to src/modules/WaiterOrdersPage/components/Table/components/Row/index.tsx diff --git a/src/modules/OrdersPage/components/Table/index.tsx b/src/modules/WaiterOrdersPage/components/Table/index.tsx similarity index 100% rename from src/modules/OrdersPage/components/Table/index.tsx rename to src/modules/WaiterOrdersPage/components/Table/index.tsx diff --git a/src/modules/WaiterOrdersPage/types/waiterOrder.ts b/src/modules/WaiterOrdersPage/types/waiterOrder.ts new file mode 100644 index 0000000..cef09bb --- /dev/null +++ b/src/modules/WaiterOrdersPage/types/waiterOrder.ts @@ -0,0 +1,7 @@ +export interface WaiterOrder { + orderId: string; + date: number; + meal: string; + name: string; + order: number; +} diff --git a/src/modules/OrdersPage/utils/transformWaiterOrders.ts b/src/modules/WaiterOrdersPage/utils/transformWaiterOrders.ts similarity index 65% rename from src/modules/OrdersPage/utils/transformWaiterOrders.ts rename to src/modules/WaiterOrdersPage/utils/transformWaiterOrders.ts index 2ec7897..357d837 100644 --- a/src/modules/OrdersPage/utils/transformWaiterOrders.ts +++ b/src/modules/WaiterOrdersPage/utils/transformWaiterOrders.ts @@ -1,6 +1,6 @@ -import { OrdersInterface } from "@/types/LunchOrder"; +import { WaiterOrder } from "../types/waiterOrder"; -const transformWaiterOrders = (waiterOrders: OrdersInterface[]) => +const transformWaiterOrders = (waiterOrders: WaiterOrder[]) => waiterOrders.map((order) => { return { name: order.name, diff --git a/src/types/LunchOrder.ts b/src/types/LunchOrder.ts deleted file mode 100644 index 00eab37..0000000 --- a/src/types/LunchOrder.ts +++ /dev/null @@ -1,16 +0,0 @@ -export interface OrdersInterface { - orderId: string; - date: number; - meal: string; - name: string; - order: number; -} - -export interface NormalizedLunchOrder { - key: string; - orderId: number; - date: string; - name: string; - meal: string; - order: number; -} From 4122ac0368d46067f7a46383f57621fb7f843f9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Sun, 14 Jan 2024 12:50:48 +0100 Subject: [PATCH 42/49] fix modal max width --- .../Table/components/Modal/Modal.module.css | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css index a8ee021..73e03dd 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css +++ b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css @@ -9,11 +9,15 @@ justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.5); + + @media (max-height: 900px) { + align-items: start; + } } .modalContainer { width: 94.31rem; - max-width: 100vw; + max-width: 90%; height: 54.81rem; padding: 3rem 4.5rem 4.375rem 4.5rem; box-sizing: border-box; @@ -21,7 +25,6 @@ background: var(--beige-web, #F9F7F2); position: absolute; overflow: scroll; - } .modalContainer::-webkit-scrollbar { @@ -42,6 +45,11 @@ flex-direction: row; align-items: center; justify-content: space-between; + + @media (max-width: 1080px) { + flex-direction: column; + align-items: start; + } } .buttonControls { From cd6e987c3cf711d093429c7b0684ac2fb523ab37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Sun, 14 Jan 2024 14:09:59 +0100 Subject: [PATCH 43/49] init redesigned settings page --- src/app/(admin)/nastaveni/page.tsx | 9 +++++ src/modules/Settings/SettingsPage.module.css | 0 src/modules/Settings/SettingsPage.tsx | 32 +++++++++++++++++ .../components/Table/Table.module.css | 14 ++++++++ .../Settings/components/Table/Table.tsx | 21 +++++++++++ .../Table/components/Row.module.css | 31 ++++++++++++++++ .../components/Table/components/Row.tsx | 35 +++++++++++++++++++ .../components/Table/components/index.tsx | 1 + .../Settings/components/Table/index.tsx | 1 + .../components/PriceLevel/PriceLevel.tsx | 0 .../PriceLevelGroup/PriceLevelGroup.tsx | 0 .../components/UserGroup/EmailHandles.tsx | 0 .../components/UserGroup/UserGroup.tsx | 0 .../components/UserGroup/UserGroupContext.tsx | 0 .../components/index.ts | 0 .../modals/ModifyModal/ModifyModal.tsx | 0 .../{Settings => SettingsOld}/types.ts | 0 .../{Settings => SettingsOld}/utils.ts | 0 18 files changed, 144 insertions(+) create mode 100644 src/app/(admin)/nastaveni/page.tsx create mode 100644 src/modules/Settings/SettingsPage.module.css create mode 100644 src/modules/Settings/SettingsPage.tsx create mode 100644 src/modules/Settings/components/Table/Table.module.css create mode 100644 src/modules/Settings/components/Table/Table.tsx create mode 100644 src/modules/Settings/components/Table/components/Row.module.css create mode 100644 src/modules/Settings/components/Table/components/Row.tsx create mode 100644 src/modules/Settings/components/Table/components/index.tsx create mode 100644 src/modules/Settings/components/Table/index.tsx rename src/modules/{Settings => SettingsOld}/components/PriceLevel/PriceLevel.tsx (100%) rename src/modules/{Settings => SettingsOld}/components/PriceLevelGroup/PriceLevelGroup.tsx (100%) rename src/modules/{Settings => SettingsOld}/components/UserGroup/EmailHandles.tsx (100%) rename src/modules/{Settings => SettingsOld}/components/UserGroup/UserGroup.tsx (100%) rename src/modules/{Settings => SettingsOld}/components/UserGroup/UserGroupContext.tsx (100%) rename src/modules/{Settings => SettingsOld}/components/index.ts (100%) rename src/modules/{Settings => SettingsOld}/components/modals/ModifyModal/ModifyModal.tsx (100%) rename src/modules/{Settings => SettingsOld}/types.ts (100%) rename src/modules/{Settings => SettingsOld}/utils.ts (100%) diff --git a/src/app/(admin)/nastaveni/page.tsx b/src/app/(admin)/nastaveni/page.tsx new file mode 100644 index 0000000..a2244a8 --- /dev/null +++ b/src/app/(admin)/nastaveni/page.tsx @@ -0,0 +1,9 @@ +"use server"; + +import SettingsPage from "@/modules/Settings/SettingsPage"; + +const Page = async () => { + return ; +}; + +export default Page; diff --git a/src/modules/Settings/SettingsPage.module.css b/src/modules/Settings/SettingsPage.module.css new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/Settings/SettingsPage.tsx b/src/modules/Settings/SettingsPage.tsx new file mode 100644 index 0000000..cac493c --- /dev/null +++ b/src/modules/Settings/SettingsPage.tsx @@ -0,0 +1,32 @@ +import { Table } from "./components/Table"; + +import styles from "./SettingsPage.module.css"; + +export interface SettingItem { + rowTitle: string; +} + +const Settings = () => { + const settingsItems: SettingItem[] = [ + { + rowTitle: "Uživatelé restaurace", + }, + { + rowTitle: "Nápoje", + }, + { + rowTitle: "Skupiny strávníků", + }, + { + rowTitle: "Cenové hladiny", + }, + ]; + + return ( +
+
+ + ); +}; + +export default Settings; diff --git a/src/modules/Settings/components/Table/Table.module.css b/src/modules/Settings/components/Table/Table.module.css new file mode 100644 index 0000000..50b2021 --- /dev/null +++ b/src/modules/Settings/components/Table/Table.module.css @@ -0,0 +1,14 @@ +.container { + width: 100%; + max-width: 41.875rem; + max-height: 45rem; + display: flex; + flex-direction: column; + border-radius: 1rem; + border: 1px solid var(--Beige, #EEE8DA); + overflow-y: scroll; +} + +.container::-webkit-scrollbar { + display: none; +} \ No newline at end of file diff --git a/src/modules/Settings/components/Table/Table.tsx b/src/modules/Settings/components/Table/Table.tsx new file mode 100644 index 0000000..9bb3e9d --- /dev/null +++ b/src/modules/Settings/components/Table/Table.tsx @@ -0,0 +1,21 @@ +import { Row } from "./components"; +import type { SettingItem } from "../../SettingsPage"; + +import styles from "./Table.module.css"; + +interface Props { + data: SettingItem[]; +} +const Table = (props: Props) => { + return ( +
+ {props.data.map((item: SettingItem, index: number) => ( + + {item} + + ))} +
+ ); +}; + +export default Table; diff --git a/src/modules/Settings/components/Table/components/Row.module.css b/src/modules/Settings/components/Table/components/Row.module.css new file mode 100644 index 0000000..817aa59 --- /dev/null +++ b/src/modules/Settings/components/Table/components/Row.module.css @@ -0,0 +1,31 @@ +.row { + display: flex; + height: 5.625rem; + padding: 0 3rem 0 3rem; + justify-content: space-between; + align-items: center; + + &.beigeBackground { + background: #F5F2EB; + } +} + + +.editRowButton { + outline: none; + border: none; + background: none; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + gap: 1rem; + text-decoration: underline; +} + +.rightArrow { + width: 0.5625rem; + height: 0.9375rem; + position: relative; +} + diff --git a/src/modules/Settings/components/Table/components/Row.tsx b/src/modules/Settings/components/Table/components/Row.tsx new file mode 100644 index 0000000..c7babf3 --- /dev/null +++ b/src/modules/Settings/components/Table/components/Row.tsx @@ -0,0 +1,35 @@ +import Image from "next/image"; +import { Typography } from "@/components/Typography"; +import type { SettingItem } from "@/modules/Settings/SettingsPage"; +import cx from "classnames"; + +import styles from "./Row.module.css"; + +interface Props { + children: SettingItem; + isEven: boolean; +} + +const Row = (props: Props) => { + return ( +
+ + {props.children.rowTitle} + +
+ + Upravit +
+ +
+
+
+
+ ); +}; + +export default Row; diff --git a/src/modules/Settings/components/Table/components/index.tsx b/src/modules/Settings/components/Table/components/index.tsx new file mode 100644 index 0000000..9abd55d --- /dev/null +++ b/src/modules/Settings/components/Table/components/index.tsx @@ -0,0 +1 @@ +export { default as Row } from "./Row"; diff --git a/src/modules/Settings/components/Table/index.tsx b/src/modules/Settings/components/Table/index.tsx new file mode 100644 index 0000000..6c9ff96 --- /dev/null +++ b/src/modules/Settings/components/Table/index.tsx @@ -0,0 +1 @@ +export { default as Table } from "./Table"; diff --git a/src/modules/Settings/components/PriceLevel/PriceLevel.tsx b/src/modules/SettingsOld/components/PriceLevel/PriceLevel.tsx similarity index 100% rename from src/modules/Settings/components/PriceLevel/PriceLevel.tsx rename to src/modules/SettingsOld/components/PriceLevel/PriceLevel.tsx diff --git a/src/modules/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx b/src/modules/SettingsOld/components/PriceLevelGroup/PriceLevelGroup.tsx similarity index 100% rename from src/modules/Settings/components/PriceLevelGroup/PriceLevelGroup.tsx rename to src/modules/SettingsOld/components/PriceLevelGroup/PriceLevelGroup.tsx diff --git a/src/modules/Settings/components/UserGroup/EmailHandles.tsx b/src/modules/SettingsOld/components/UserGroup/EmailHandles.tsx similarity index 100% rename from src/modules/Settings/components/UserGroup/EmailHandles.tsx rename to src/modules/SettingsOld/components/UserGroup/EmailHandles.tsx diff --git a/src/modules/Settings/components/UserGroup/UserGroup.tsx b/src/modules/SettingsOld/components/UserGroup/UserGroup.tsx similarity index 100% rename from src/modules/Settings/components/UserGroup/UserGroup.tsx rename to src/modules/SettingsOld/components/UserGroup/UserGroup.tsx diff --git a/src/modules/Settings/components/UserGroup/UserGroupContext.tsx b/src/modules/SettingsOld/components/UserGroup/UserGroupContext.tsx similarity index 100% rename from src/modules/Settings/components/UserGroup/UserGroupContext.tsx rename to src/modules/SettingsOld/components/UserGroup/UserGroupContext.tsx diff --git a/src/modules/Settings/components/index.ts b/src/modules/SettingsOld/components/index.ts similarity index 100% rename from src/modules/Settings/components/index.ts rename to src/modules/SettingsOld/components/index.ts diff --git a/src/modules/Settings/components/modals/ModifyModal/ModifyModal.tsx b/src/modules/SettingsOld/components/modals/ModifyModal/ModifyModal.tsx similarity index 100% rename from src/modules/Settings/components/modals/ModifyModal/ModifyModal.tsx rename to src/modules/SettingsOld/components/modals/ModifyModal/ModifyModal.tsx diff --git a/src/modules/Settings/types.ts b/src/modules/SettingsOld/types.ts similarity index 100% rename from src/modules/Settings/types.ts rename to src/modules/SettingsOld/types.ts diff --git a/src/modules/Settings/utils.ts b/src/modules/SettingsOld/utils.ts similarity index 100% rename from src/modules/Settings/utils.ts rename to src/modules/SettingsOld/utils.ts From 9921032e3445b75cbe96aee114de2a6506982e86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Sun, 14 Jan 2024 14:12:46 +0100 Subject: [PATCH 44/49] init finance page --- src/app/(admin)/finance/page.tsx | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/app/(admin)/finance/page.tsx diff --git a/src/app/(admin)/finance/page.tsx b/src/app/(admin)/finance/page.tsx new file mode 100644 index 0000000..e0cc2f0 --- /dev/null +++ b/src/app/(admin)/finance/page.tsx @@ -0,0 +1,7 @@ +import { Fragment } from "react"; + +const Page = async () => { + return ; +}; + +export default Page; From 67f4fc3797a33371671fa98ce7a92be52f81feb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Thu, 18 Jan 2024 12:30:22 +0100 Subject: [PATCH 45/49] change menu modal implementation --- public/img/arrowUp.svg | 3 + public/img/closeCrossRed.svg | 4 + public/img/redCross.svg | 6 +- src/components/Input/Input.tsx | 2 +- src/modules/AdminPage/AdminPage.tsx | 2 +- .../Table/components/Modal/Modal.module.css | 37 +++++--- .../Table/components/Modal/Modal.tsx | 8 +- .../Modal/components/Item.module.css | 88 ++++++++++++++++- .../components/Modal/components/Item.tsx | 95 +++++++++++++------ 9 files changed, 193 insertions(+), 52 deletions(-) create mode 100644 public/img/arrowUp.svg create mode 100644 public/img/closeCrossRed.svg diff --git a/public/img/arrowUp.svg b/public/img/arrowUp.svg new file mode 100644 index 0000000..134c1d8 --- /dev/null +++ b/public/img/arrowUp.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/img/closeCrossRed.svg b/public/img/closeCrossRed.svg new file mode 100644 index 0000000..e208ce0 --- /dev/null +++ b/public/img/closeCrossRed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/img/redCross.svg b/public/img/redCross.svg index f20ec78..881e5a1 100644 --- a/public/img/redCross.svg +++ b/public/img/redCross.svg @@ -1,4 +1,4 @@ - - - \ No newline at end of file + + + diff --git a/src/components/Input/Input.tsx b/src/components/Input/Input.tsx index ce622f0..39db162 100644 --- a/src/components/Input/Input.tsx +++ b/src/components/Input/Input.tsx @@ -19,7 +19,7 @@ interface Props { const Input = forwardRef< HTMLInputElement, Props & - DetailedHTMLProps, HTMLInputElement> + DetailedHTMLProps, HTMLInputElement> >( ( { type, required = true, className, onChange, children, ...other }: Props, diff --git a/src/modules/AdminPage/AdminPage.tsx b/src/modules/AdminPage/AdminPage.tsx index 7078440..5c46e91 100644 --- a/src/modules/AdminPage/AdminPage.tsx +++ b/src/modules/AdminPage/AdminPage.tsx @@ -21,7 +21,7 @@ const AdminPage = (props: Props) => { }; return ( -
+
); }; export default AdminPage; diff --git a/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css index 73e03dd..c39dfba 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css +++ b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css @@ -19,12 +19,10 @@ width: 94.31rem; max-width: 90%; height: 54.81rem; - padding: 3rem 4.5rem 4.375rem 4.5rem; box-sizing: border-box; - border-radius: 1rem; + border-radius: 2rem; background: var(--beige-web, #F9F7F2); position: absolute; - overflow: scroll; } .modalContainer::-webkit-scrollbar { @@ -39,12 +37,27 @@ gap: 1.5rem; } +.itemsContainer { + display: flex; + justify-content: center; + align-items: start; + flex-direction: column; + width: 100%; + height: 100%; + padding: 3rem 4.5rem 4.375rem 4.5rem; +} + .heading { width: 100%; display: flex; flex-direction: row; align-items: center; justify-content: space-between; + border-bottom: 2px solid var(--Beige, #EEE8DA); + box-shadow: 0px 4px 12px 0px rgba(0, 0, 0, 0.06); + padding-left: 4.5rem; + padding-right: 4.5rem; + height: 8.3rem; @media (max-width: 1080px) { flex-direction: column; @@ -52,7 +65,7 @@ } } -.buttonControls { +.buttonControls { display: flex; flex-direction: row; justify-content: space-between; @@ -60,24 +73,24 @@ } .button { - display: flex; + display: flex; justify-content: center; align-items: center; padding: 1rem 1.44rem 1rem 1.44rem; - border-radius: 1rem; + border-radius: 1rem; gap: 0.62rem; cursor: pointer; - background: var(--red, #D51F2C); - border: 1px solid var(--red, #D51F2C); + background: var(--red, #D51F2C); + border: 1px solid var(--red, #D51F2C); } .closeButton { - background-color: var(--red, #D51F2C); - color: var(--white, #FFF); + background-color: var(--red, #D51F2C); + color: var(--white, #FFF); } .addButton { - background-color: transparent; + background-color: transparent; color: var(--red, #D51F2C); } @@ -85,4 +98,4 @@ position: relative; width: 1.25rem; height: 1.25rem; -} \ No newline at end of file +} diff --git a/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx b/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx index 6ca58e0..7f3ba58 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx +++ b/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx @@ -46,9 +46,11 @@ const Modal = (props: Props) => { - {props.data?.menus.map((menu: MenuInterface, index: number) => ( - - ))} +
+ {props.data?.menus.map((menu: MenuInterface, index: number) => ( + + ))} +
diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css b/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css index 8beea4c..f138f45 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css @@ -1,13 +1,53 @@ .container { width: 100%; - height: 27.75rem; border-radius: 1rem; - border: 1px solid var(--Beige, #EEE8DA); - background: #F5F2EB; - padding: 2rem 1.75rem 2.6875rem 2.5rem; + padding: 0 2.5rem 0 2.5rem; + border: 2px solid var(--Beige, #EEE8DA); + background: var(--beige-web, #F9F7F2); display: flex; flex-direction: column; gap: 2rem; + overflow: hidden; + justify-content: start; + align-items: start; + height: 6.5rem; + transition: height 0.2s ease-in-out; + + &.isOpened { + height: fit-content; + } +} + +.heading { + width: 100%; + min-height: 6rem; + display: flex; + align-items: center; + justify-content: space-between; + user-select: none; +} + +.heading div { + display: flex; + gap: 1.25rem; + align-items: center; +} + +.wrapper { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + gap: 1.5rem; + justify-content: center; + align-items: start; + opacity: 0; + transition: opacity 0.5s ease-in-out; + margin-bottom: 2rem; + + &.isOpened { + opacity: 1; + } } .menus { @@ -16,6 +56,18 @@ flex-direction: column; gap: 1.5rem; height: 100%; + width: 100%; +} + +.horizontalMenu { + display: flex; + flex-direction: row; + gap: 1.5rem; + width: 100%; +} + +.horizontalMenu div { + flex: 1; } .inputSection { @@ -23,3 +75,31 @@ flex-direction: column; gap: 0.25rem; } + +.dropDownIcon { + width: 1.25rem; + height: 1.25rem; + position: relative; + transition: transform 0.2s ease-in-out; + transform: rotate(180deg); + + &.isRotated { + transform: rotate(0deg); + } +} + +.closeButton { + width: 1rem; + height: 1rem; + cursor: pointer; + outline: none; + border: none; + background: transparent; + position: relative; +} + +.input { + border-radius: 0.75rem; + border: 2px solid var(--Beige, #EEE8DA); + background: var(--Light-beige-copy, #F5F2EB); +} diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx index e632b28..4ab73df 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx @@ -1,8 +1,11 @@ +import Image from "next/image"; +import { useRef, useState } from "react"; import { Typography } from "@/components/Typography"; import styles from "./Item.module.css" import { Input } from "@/components/Input"; import { MenuInterface } from "@/types/MenuInterface"; +import cx from "classnames"; interface Props { menu: MenuInterface; @@ -10,37 +13,73 @@ interface Props { } const Item = (props: Props) => { + const [isOpened, setIsOpened] = useState(false); + const dropDownRef = useRef(null) + + const handleOpen = () => { + if (!dropDownRef.current) { + return + } + + if (!isOpened) { + dropDownRef.current.style.height = dropDownRef.current.scrollHeight + 32 + 'px'; + } else { + dropDownRef.current.style.height = '6.5rem'; + } + + setIsOpened(!isOpened); + } return ( -
-
- - Menu {props.menuOrder} - -
-
-
- - Hlavní jídlo: +
+
+
+
+ + + +
+ + Menu {props.menuOrder} - - ... -
-
- - Polévka: - - - ... - -
-
- - Pití: - - - ... - + + + +
+
+
+
+ + Hlavní jídlo: + + + ... + +
+
+
+ + Polévka: + + + ... + +
+
+ + Pití: + + + ... + +
+
From 97bc059ab643269ddf04ac19803d7c93c6fcce69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Sat, 20 Jan 2024 20:33:21 +0100 Subject: [PATCH 46/49] init dropdown --- src/components/Dropdown/Dropdown.module.css | 40 +++++++++++++++++ src/components/Dropdown/Dropdown.tsx | 44 +++++++++++++++++++ src/components/Dropdown/index.tsx | 1 + src/components/Dropdown/types/dropdownItem.ts | 5 +++ .../Modal/components/Item.module.css | 8 ++++ .../components/Modal/components/Item.tsx | 8 +++- 6 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 src/components/Dropdown/Dropdown.module.css create mode 100644 src/components/Dropdown/Dropdown.tsx create mode 100644 src/components/Dropdown/index.tsx create mode 100644 src/components/Dropdown/types/dropdownItem.ts diff --git a/src/components/Dropdown/Dropdown.module.css b/src/components/Dropdown/Dropdown.module.css new file mode 100644 index 0000000..fc5e162 --- /dev/null +++ b/src/components/Dropdown/Dropdown.module.css @@ -0,0 +1,40 @@ +.container { + width: 100%; + height: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 0.875rem 1.5rem; + cursor: pointer; + position: relative; +} + +.chevron { + position: relative; + width: 1rem; + height: 1rem; + rotate: 180deg; + transition: rotate 0.2s ease-in-out; + + &.isOpen { + rotate: 0deg; + } +} + +.dropdownMenu { + position: absolute; + display: none; + padding-top: 3rem; + flex-direction: column; + width: 100%; + + &.isOpen { + display: flex; + } +} + +.dropdownItem { + height: 2.5rem; + padding: 0.5rem 1.5rem; +} diff --git a/src/components/Dropdown/Dropdown.tsx b/src/components/Dropdown/Dropdown.tsx new file mode 100644 index 0000000..140d4e3 --- /dev/null +++ b/src/components/Dropdown/Dropdown.tsx @@ -0,0 +1,44 @@ +import { useRef, useState } from "react"; +import Image from "next/image" +import type { dropdownItem } from "./types/dropdownItem" +import cx from "classnames"; + +import styles from "./Dropdown.module.css" + +interface Props { + items: dropdownItem[] + className?: string +} + +const Dropdown = (props: Props) => { + const valueRef = useRef(null) + const [isOpened, setIsOpened] = useState(false) + + const handleOpen = () => { + setIsOpened(!isOpened) + } + + return ( +
+

text

+
+ +
+
+ {props.items.map((item: dropdownItem, index: number) => { + return ( +
+

{item.value}

+
+ ) + })} +
+
+ ) +} + +export default Dropdown; diff --git a/src/components/Dropdown/index.tsx b/src/components/Dropdown/index.tsx new file mode 100644 index 0000000..ade5256 --- /dev/null +++ b/src/components/Dropdown/index.tsx @@ -0,0 +1 @@ +export { default as Dropdown } from './Dropdown'; diff --git a/src/components/Dropdown/types/dropdownItem.ts b/src/components/Dropdown/types/dropdownItem.ts new file mode 100644 index 0000000..75455eb --- /dev/null +++ b/src/components/Dropdown/types/dropdownItem.ts @@ -0,0 +1,5 @@ +export interface dropdownItem { + value: string; + selectable?: boolean; + selected?: boolean; +} diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css b/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css index f138f45..133768a 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css @@ -98,6 +98,14 @@ position: relative; } +.levelDropdown { + width: 20.875rem; + position: relative; + background: none; + outline: none; + border: none; +} + .input { border-radius: 0.75rem; border: 2px solid var(--Beige, #EEE8DA); diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx index 4ab73df..201d68f 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx @@ -1,6 +1,7 @@ import Image from "next/image"; import { useRef, useState } from "react"; import { Typography } from "@/components/Typography"; +import { Dropdown } from "@/components/Dropdown"; import styles from "./Item.module.css" import { Input } from "@/components/Input"; @@ -22,7 +23,7 @@ const Item = (props: Props) => { } if (!isOpened) { - dropDownRef.current.style.height = dropDownRef.current.scrollHeight + 32 + 'px'; + dropDownRef.current.style.height = 'fit-content'; } else { dropDownRef.current.style.height = '6.5rem'; } @@ -81,6 +82,11 @@ const Item = (props: Props) => {
+
+ + + +
); From 2c186d91b535de5ac5a7de271873f77cdd2eed5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Sat, 20 Jan 2024 21:41:52 +0100 Subject: [PATCH 47/49] write some ugly code to make transition work with uknown values --- .../components/Table/components/Modal/Modal.module.css | 3 ++- .../Table/components/Modal/components/Item.module.css | 2 +- .../Table/components/Modal/components/Item.tsx | 9 ++++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css index c39dfba..0b70d98 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css +++ b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css @@ -10,7 +10,7 @@ align-items: center; background: rgba(0, 0, 0, 0.5); - @media (max-height: 900px) { + @media (max-height: 768px) { align-items: start; } } @@ -19,6 +19,7 @@ width: 94.31rem; max-width: 90%; height: 54.81rem; + max-height: 90%; box-sizing: border-box; border-radius: 2rem; background: var(--beige-web, #F9F7F2); diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css b/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css index 133768a..e9b56eb 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css @@ -42,7 +42,7 @@ justify-content: center; align-items: start; opacity: 0; - transition: opacity 0.5s ease-in-out; + transition: opacity 0.2s ease-in-out; margin-bottom: 2rem; &.isOpened { diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx index 201d68f..e9d4569 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx @@ -22,8 +22,15 @@ const Item = (props: Props) => { return } + // UGLY if (!isOpened) { - dropDownRef.current.style.height = 'fit-content'; + dropDownRef.current.style.height = 'auto'; + const elementHeight = dropDownRef.current.scrollHeight; + dropDownRef.current.style.height = '6.5rem'; + + void dropDownRef.current.offsetHeight; + + dropDownRef.current.style.height = elementHeight + 'px'; } else { dropDownRef.current.style.height = '6.5rem'; } From c7a35694a0cacee76047f7708ac3a239062683bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Sat, 20 Jan 2024 23:31:20 +0100 Subject: [PATCH 48/49] make modal item generic --- public/img/splitter.svg | 3 + src/components/Dropdown/Dropdown.tsx | 15 +++- src/components/Dropdown/types/dropdownItem.ts | 1 + .../Table/components/Modal/Modal.module.css | 15 ++++ .../Table/components/Modal/Modal.tsx | 59 +++++++++++++- .../components/{ => Item}/Item.module.css | 76 ++++++------------- .../Modal/components/{ => Item}/Item.tsx | 49 +++--------- .../Modal/components/Item/index.tsx | 1 + .../components/MenuItem/MenuItem.module.css | 39 ++++++++++ .../Modal/components/MenuItem/MenuItem.tsx | 58 ++++++++++++++ .../Modal/components/MenuItem/index.tsx | 1 + .../components/TypeItem/TypeItem.module.css | 39 ++++++++++ .../Modal/components/TypeItem/TypeItem.tsx | 31 ++++++++ .../Modal/components/TypeItem/index.tsx | 1 + .../components/Modal/components/index.tsx | 1 - .../AdminPage/components/Table/types.ts | 10 +++ 16 files changed, 299 insertions(+), 100 deletions(-) create mode 100644 public/img/splitter.svg rename src/modules/AdminPage/components/Table/components/Modal/components/{ => Item}/Item.module.css (68%) rename src/modules/AdminPage/components/Table/components/Modal/components/{ => Item}/Item.tsx (53%) create mode 100644 src/modules/AdminPage/components/Table/components/Modal/components/Item/index.tsx create mode 100644 src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.module.css create mode 100644 src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.tsx create mode 100644 src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/index.tsx create mode 100644 src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/TypeItem.module.css create mode 100644 src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/TypeItem.tsx create mode 100644 src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/index.tsx delete mode 100644 src/modules/AdminPage/components/Table/components/Modal/components/index.tsx diff --git a/public/img/splitter.svg b/public/img/splitter.svg new file mode 100644 index 0000000..82a9a0c --- /dev/null +++ b/public/img/splitter.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/Dropdown/Dropdown.tsx b/src/components/Dropdown/Dropdown.tsx index 140d4e3..c5fb4b8 100644 --- a/src/components/Dropdown/Dropdown.tsx +++ b/src/components/Dropdown/Dropdown.tsx @@ -1,6 +1,7 @@ -import { useRef, useState } from "react"; +import { useRef, useState, Ref, MouseEvent, MutableRefObject } from "react"; import Image from "next/image" import type { dropdownItem } from "./types/dropdownItem" +import { } from "react"; import cx from "classnames"; import styles from "./Dropdown.module.css" @@ -8,16 +9,24 @@ import styles from "./Dropdown.module.css" interface Props { items: dropdownItem[] className?: string + valueRef: MutableRefObject } const Dropdown = (props: Props) => { - const valueRef = useRef(null) const [isOpened, setIsOpened] = useState(false) const handleOpen = () => { setIsOpened(!isOpened) } + const handleSelect = (index: number) => { + const dropdownItem = props.items.at(index)?.index + + if (props.valueRef?.current && dropdownItem) { + props.valueRef.current = dropdownItem + } + } + return (

text

@@ -31,7 +40,7 @@ const Dropdown = (props: Props) => { })}> {props.items.map((item: dropdownItem, index: number) => { return ( -
+
handleSelect(index)}>

{item.value}

) diff --git a/src/components/Dropdown/types/dropdownItem.ts b/src/components/Dropdown/types/dropdownItem.ts index 75455eb..da735cb 100644 --- a/src/components/Dropdown/types/dropdownItem.ts +++ b/src/components/Dropdown/types/dropdownItem.ts @@ -1,5 +1,6 @@ export interface dropdownItem { value: string; + index: number; selectable?: boolean; selected?: boolean; } diff --git a/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css index 0b70d98..7722a75 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css +++ b/src/modules/AdminPage/components/Table/components/Modal/Modal.module.css @@ -24,6 +24,7 @@ border-radius: 2rem; background: var(--beige-web, #F9F7F2); position: absolute; + overflow: scroll; } .modalContainer::-webkit-scrollbar { @@ -43,6 +44,7 @@ justify-content: center; align-items: start; flex-direction: column; + gap: 1.5rem; width: 100%; height: 100%; padding: 3rem 4.5rem 4.375rem 4.5rem; @@ -100,3 +102,16 @@ width: 1.25rem; height: 1.25rem; } + +.splitContainer { + display: flex; + align-items: center; + justify-content: center; + width: 100%; +} + +.splitContainer div { + position: relative; + width: 95%; + height: 0.1rem; +} diff --git a/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx b/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx index 7f3ba58..b8a6c87 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx +++ b/src/modules/AdminPage/components/Table/components/Modal/Modal.tsx @@ -1,11 +1,13 @@ import Image from "next/image"; +import type { OfferType } from "../../types" import { DayMenu, MenuInterface } from "@/types/MenuInterface"; import { Typography } from "@/components/Typography"; -import Item from "./components/Item"; +import { MenuItem } from "./components/MenuItem"; import unixGetDate from "@/modules/AdminPage/utils/unixGetDate"; import cx from "classnames"; import styles from "./Modal.module.css"; +import { TypeItem } from "./components/TypeItem"; interface Props { data: DayMenu | undefined; @@ -13,6 +15,35 @@ interface Props { } const Modal = (props: Props) => { + + const mockedOffers: OfferType[] = [ + { + name: "Hlavní jídlo", + items: [ + { name: "svickova", bookingDays: 1 }, + { name: "gulas", bookingDays: 2 }, + { name: "neco", bookingDays: 3 }, + ] + }, + { + name: "Polévka", + items: [ + { name: "svickova", bookingDays: 1 }, + { name: "gulas", bookingDays: 2 }, + { name: "neco", bookingDays: 3 }, + ] + }, + { + + name: "Pití", + items: [ + { name: "svickova", bookingDays: 1 }, + { name: "gulas", bookingDays: 2 }, + { name: "neco", bookingDays: 3 }, + ] + } + ] + return (
@@ -47,9 +78,31 @@ const Modal = (props: Props) => {
- {props.data?.menus.map((menu: MenuInterface, index: number) => ( - + + Typy + + {mockedOffers.map((offer: OfferType, index: number) => ( + ))} +
+
+ +
+
+ {props.data?.menus.length && ( + <> + + Menu + + {props.data?.menus.map((menu: MenuInterface, index: number) => ( + + ))} + + )}
diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css b/src/modules/AdminPage/components/Table/components/Modal/components/Item/Item.module.css similarity index 68% rename from src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css rename to src/modules/AdminPage/components/Table/components/Modal/components/Item/Item.module.css index e9b56eb..e911294 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/Item.module.css +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item/Item.module.css @@ -1,16 +1,17 @@ .container { - width: 100%; - border-radius: 1rem; - padding: 0 2.5rem 0 2.5rem; - border: 2px solid var(--Beige, #EEE8DA); - background: var(--beige-web, #F9F7F2); display: flex; flex-direction: column; - gap: 2rem; - overflow: hidden; justify-content: start; align-items: start; + width: 100%; height: 6.5rem; + padding: 0 2.5rem 0 2.5rem; + border-radius: 1rem; + overflow: hidden; + + border: 2px solid var(--Beige, #EEE8DA); + background: var(--beige-web, #F9F7F2); + transition: height 0.2s ease-in-out; &.isOpened { @@ -19,63 +20,46 @@ } .heading { - width: 100%; - min-height: 6rem; display: flex; align-items: center; justify-content: space-between; + width: 100%; + min-height: 6rem; user-select: none; + margin-bottom: 0.5rem; } .heading div { display: flex; - gap: 1.25rem; align-items: center; + gap: 1.25rem; } .wrapper { width: 100%; height: 100%; + position: relative; +} + +.childWrapper { display: flex; flex-direction: column; - gap: 1.5rem; justify-content: center; align-items: start; - opacity: 0; + gap: 1.5rem; + position: absolute; + height: fit-content; + width: 100%; transition: opacity 0.2s ease-in-out; - margin-bottom: 2rem; + padding-bottom: 2rem; + + opacity: 0; &.isOpened { opacity: 1; } } -.menus { - display: flex; - justify-content: start; - flex-direction: column; - gap: 1.5rem; - height: 100%; - width: 100%; -} - -.horizontalMenu { - display: flex; - flex-direction: row; - gap: 1.5rem; - width: 100%; -} - -.horizontalMenu div { - flex: 1; -} - -.inputSection { - display: flex; - flex-direction: column; - gap: 0.25rem; -} - .dropDownIcon { width: 1.25rem; height: 1.25rem; @@ -97,17 +81,3 @@ background: transparent; position: relative; } - -.levelDropdown { - width: 20.875rem; - position: relative; - background: none; - outline: none; - border: none; -} - -.input { - border-radius: 0.75rem; - border: 2px solid var(--Beige, #EEE8DA); - background: var(--Light-beige-copy, #F5F2EB); -} diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/Item/Item.tsx similarity index 53% rename from src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx rename to src/modules/AdminPage/components/Table/components/Modal/components/Item/Item.tsx index e9d4569..7c33463 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/Item.tsx +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item/Item.tsx @@ -1,16 +1,13 @@ import Image from "next/image"; -import { useRef, useState } from "react"; +import { ReactNode, useRef, useState } from "react"; import { Typography } from "@/components/Typography"; -import { Dropdown } from "@/components/Dropdown"; +import cx from "classnames"; import styles from "./Item.module.css" -import { Input } from "@/components/Input"; -import { MenuInterface } from "@/types/MenuInterface"; -import cx from "classnames"; interface Props { - menu: MenuInterface; - menuOrder: number; + header: string; + children: ReactNode; } const Item = (props: Props) => { @@ -51,7 +48,7 @@ const Item = (props: Props) => { - Menu {props.menuOrder} + {props.header} @@ -61,38 +58,10 @@ const Item = (props: Props) => {
-
-
- - Hlavní jídlo: - - - ... - -
-
-
- - Polévka: - - - ... - -
-
- - Pití: - - - ... - -
-
-
-
- - - +
+ {props.children}
diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item/index.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/Item/index.tsx new file mode 100644 index 0000000..684ee9c --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item/index.tsx @@ -0,0 +1 @@ +export { default as Item } from "./Item" diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.module.css b/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.module.css new file mode 100644 index 0000000..6ba1de9 --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.module.css @@ -0,0 +1,39 @@ +.menus { + display: flex; + justify-content: start; + flex-direction: column; + gap: 1.5rem; + height: 100%; + width: 100%; +} + +.horizontalMenu { + display: flex; + flex-direction: row; + gap: 1.5rem; + width: 100%; +} + +.horizontalMenu div { + flex: 1; +} + +.inputSection { + display: flex; + flex-direction: column; + gap: 0.25rem; +} + +.levelDropdown { + width: 20.875rem; + position: relative; + background: none; + outline: none; + border: none; +} + +.input { + border-radius: 0.75rem; + border: 2px solid var(--Beige, #EEE8DA); + background: var(--Light-beige-copy, #F5F2EB); +} diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.tsx new file mode 100644 index 0000000..06d1423 --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.tsx @@ -0,0 +1,58 @@ +import { useRef } from "react" +import { Typography } from "@/components/Typography"; +import { Dropdown } from "@/components/Dropdown"; +import { Input } from "@/components/Input"; +import { MenuInterface } from "@/types/MenuInterface"; +import { Item } from "../Item" + +import styles from "./MenuItem.module.css" + +interface Props { + menu: MenuInterface; + menuOrder: number; + header: string; +} + +const MenuItem = (props: Props) => { + const priceLevelRef = useRef() + + return ( + +
+
+ + Hlavní jídlo: + + + ... + +
+
+
+ + Polévka: + + + ... + +
+
+ + Pití: + + + ... + +
+
+
+
+ + + +
+
+ ); +} + +export default MenuItem; diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/index.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/index.tsx new file mode 100644 index 0000000..cf0669a --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/index.tsx @@ -0,0 +1 @@ +export { default as MenuItem } from "./MenuItem"; diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/TypeItem.module.css b/src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/TypeItem.module.css new file mode 100644 index 0000000..b053588 --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/TypeItem.module.css @@ -0,0 +1,39 @@ +.menus { + display: flex; + justify-content: start; + flex-direction: column; + gap: 1.5rem; + height: 100%; + width: 100%; +} + +.horizontalMenu { + display: flex; + flex-direction: row; + gap: 1.5rem; + width: 100%; +} + +.horizontalMenu div { + flex: 1; +} + +.inputSection { + display: flex; + flex-direction: column; + gap: 1.5rem; +} + +.levelDropdown { + width: 20.875rem; + position: relative; + background: none; + outline: none; + border: none; +} + +.input { + border-radius: 0.75rem; + border: 2px solid var(--Beige, #EEE8DA); + background: var(--Light-beige-copy, #F5F2EB); +} diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/TypeItem.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/TypeItem.tsx new file mode 100644 index 0000000..313fb68 --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/TypeItem.tsx @@ -0,0 +1,31 @@ +import { Typography } from "@/components/Typography"; +import { Input } from "@/components/Input"; +import { Item } from "../Item" +import type { OfferType, OfferTypeItem } from "../../../../types"; + +import styles from "./TypeItem.module.css" + +interface Props { + offer: OfferType; + header: string; +} + +const TypeItem = (props: Props) => { + return ( + +
+
+ {props.offer.items.map((item: OfferTypeItem) => { + return ( + + ... + + ) + })} +
+
+
+ ); +} + +export default TypeItem; diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/index.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/index.tsx new file mode 100644 index 0000000..eabaf8b --- /dev/null +++ b/src/modules/AdminPage/components/Table/components/Modal/components/TypeItem/index.tsx @@ -0,0 +1 @@ +export { default as TypeItem } from "./TypeItem" diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/index.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/index.tsx deleted file mode 100644 index 09a72a8..0000000 --- a/src/modules/AdminPage/components/Table/components/Modal/components/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default as Item } from "./Item"; diff --git a/src/modules/AdminPage/components/Table/types.ts b/src/modules/AdminPage/components/Table/types.ts index 8b9c1a9..43a0655 100644 --- a/src/modules/AdminPage/components/Table/types.ts +++ b/src/modules/AdminPage/components/Table/types.ts @@ -2,3 +2,13 @@ export type MonthType = { displayName: string; value: number; }; + +export type OfferTypeItem = { + name: string + bookingDays: number; +} + +export type OfferType = { + name: string; + items: OfferTypeItem[] +} From 850525ed241d43b73f0af473e4c381811acd86d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vani=C5=A1?= Date: Mon, 22 Jan 2024 17:41:01 +0100 Subject: [PATCH 49/49] make dropdown consume external reference --- src/components/Dropdown/Dropdown.module.css | 26 ++++++++++- src/components/Dropdown/Dropdown.tsx | 44 ++++++++++++------- .../Modal/components/Item/Item.module.css | 2 +- .../components/MenuItem/MenuItem.module.css | 3 -- .../Modal/components/MenuItem/MenuItem.tsx | 15 +++++-- 5 files changed, 64 insertions(+), 26 deletions(-) diff --git a/src/components/Dropdown/Dropdown.module.css b/src/components/Dropdown/Dropdown.module.css index fc5e162..09a7b24 100644 --- a/src/components/Dropdown/Dropdown.module.css +++ b/src/components/Dropdown/Dropdown.module.css @@ -1,6 +1,6 @@ .container { width: 100%; - height: 100%; + min-height: 100%; display: flex; flex-direction: row; justify-content: space-between; @@ -8,6 +8,14 @@ padding: 0.875rem 1.5rem; cursor: pointer; position: relative; + + border-radius: 0.75rem; + border: 2px solid var(--Beige, #EEE8DA); + background: var(--Light-beige-copy, #F5F2EB); +} + +.container h4 { + z-index: 1; } .chevron { @@ -16,6 +24,7 @@ height: 1rem; rotate: 180deg; transition: rotate 0.2s ease-in-out; + z-index: 1; &.isOpen { rotate: 0deg; @@ -28,13 +37,28 @@ padding-top: 3rem; flex-direction: column; width: 100%; + left: 0; + top: 0; &.isOpen { display: flex; } } +.dropdownMenu>div:last-child { + border-bottom-left-radius: 0.75rem; + border-bottom-right-radius: 0.75rem; + border-bottom: 2px solid var(--Beige, #EEE8DA); + +} + .dropdownItem { + display: flex; height: 2.5rem; padding: 0.5rem 1.5rem; + width: 100%; + border-left: 2px solid var(--Beige, #EEE8DA); + border-right: 2px solid var(--Beige, #EEE8DA); + background: var(--Light-beige-copy, #F5F2EB); + cursor: pointer; } diff --git a/src/components/Dropdown/Dropdown.tsx b/src/components/Dropdown/Dropdown.tsx index c5fb4b8..d2d589d 100644 --- a/src/components/Dropdown/Dropdown.tsx +++ b/src/components/Dropdown/Dropdown.tsx @@ -1,7 +1,7 @@ import { useRef, useState, Ref, MouseEvent, MutableRefObject } from "react"; +import { Typography } from "@/components/Typography"; import Image from "next/image" import type { dropdownItem } from "./types/dropdownItem" -import { } from "react"; import cx from "classnames"; import styles from "./Dropdown.module.css" @@ -22,29 +22,39 @@ const Dropdown = (props: Props) => { const handleSelect = (index: number) => { const dropdownItem = props.items.at(index)?.index - if (props.valueRef?.current && dropdownItem) { + if (dropdownItem != null) { props.valueRef.current = dropdownItem } } return ( -
-

text

-
- -
-
+
- {props.items.map((item: dropdownItem, index: number) => { - return ( -
handleSelect(index)}> -

{item.value}

-
- ) - })} + +

Vyberte

+
+
+ +
+
+
+
+ {props.items.map((item: dropdownItem, index: number) => { + return ( +
handleSelect(index)}> + +

{item.value}

+
+
+ ) + })} +
) diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/Item/Item.module.css b/src/modules/AdminPage/components/Table/components/Modal/components/Item/Item.module.css index e911294..a36128a 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/Item/Item.module.css +++ b/src/modules/AdminPage/components/Table/components/Modal/components/Item/Item.module.css @@ -7,7 +7,7 @@ height: 6.5rem; padding: 0 2.5rem 0 2.5rem; border-radius: 1rem; - overflow: hidden; + overflow: visible; border: 2px solid var(--Beige, #EEE8DA); background: var(--beige-web, #F9F7F2); diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.module.css b/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.module.css index 6ba1de9..0d56f38 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.module.css +++ b/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.module.css @@ -27,9 +27,6 @@ .levelDropdown { width: 20.875rem; position: relative; - background: none; - outline: none; - border: none; } .input { diff --git a/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.tsx b/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.tsx index 06d1423..8ec11de 100644 --- a/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.tsx +++ b/src/modules/AdminPage/components/Table/components/Modal/components/MenuItem/MenuItem.tsx @@ -1,4 +1,4 @@ -import { useRef } from "react" +import { useEffect, useRef, useState } from "react" import { Typography } from "@/components/Typography"; import { Dropdown } from "@/components/Dropdown"; import { Input } from "@/components/Input"; @@ -16,6 +16,12 @@ interface Props { const MenuItem = (props: Props) => { const priceLevelRef = useRef() + const [buttonState, setButtonState] = useState(false) + + useEffect(() => { + console.log(priceLevelRef) + }, [buttonState]) + return (
@@ -47,10 +53,11 @@ const MenuItem = (props: Props) => {
- - - +
+ +
+
); }