From b27f4f2f23a6d277f10e4fdc27399ca539144636 Mon Sep 17 00:00:00 2001 From: Mohammad javad Fesahat Date: Sat, 14 Oct 2023 11:08:42 +0330 Subject: [PATCH] 01 --- package-lock.json | 496 ++++++++++++------ package.json | 10 +- public/zano45-9.png | Bin 0 -> 16226 bytes src/app/(index)/layout.tsx | 67 +++ src/app/(index)/page.tsx | 53 ++ src/app/(index)/shop/layout.tsx | 40 ++ src/app/(index)/shop/page.tsx | 46 ++ src/app/(index)/shop/product/[id]/page.tsx | 48 ++ src/app/{ => (login_register)}/layout.tsx | 14 +- src/app/(login_register)/login/page.tsx | 32 ++ src/app/(login_register)/register/layout.tsx | 16 + src/app/(login_register)/register/page.tsx | 16 + src/app/components/layout/hamber-menu.tsx | 16 + src/app/components/layout/order-item.tsx | 49 ++ .../components/layout/shop/orders-list.tsx | 31 ++ .../components/layout/shop/products-cat.tsx | 23 + src/app/components/layout/shop/products.tsx | 44 ++ src/app/components/layout/top-menu.tsx | 23 + src/app/globals.css | 24 - src/app/page.tsx | 113 ---- src/app/redux/features/couterSlice.ts | 27 + src/app/redux/provider.tsx | 14 + src/app/redux/store.ts | 15 + src/context/OrderContext.ts | 18 + src/context/OrderContextProvider.tsx | 29 + 25 files changed, 970 insertions(+), 294 deletions(-) create mode 100644 public/zano45-9.png create mode 100644 src/app/(index)/layout.tsx create mode 100644 src/app/(index)/page.tsx create mode 100644 src/app/(index)/shop/layout.tsx create mode 100644 src/app/(index)/shop/page.tsx create mode 100644 src/app/(index)/shop/product/[id]/page.tsx rename src/app/{ => (login_register)}/layout.tsx (53%) create mode 100644 src/app/(login_register)/login/page.tsx create mode 100644 src/app/(login_register)/register/layout.tsx create mode 100644 src/app/(login_register)/register/page.tsx create mode 100644 src/app/components/layout/hamber-menu.tsx create mode 100644 src/app/components/layout/order-item.tsx create mode 100644 src/app/components/layout/shop/orders-list.tsx create mode 100644 src/app/components/layout/shop/products-cat.tsx create mode 100644 src/app/components/layout/shop/products.tsx create mode 100644 src/app/components/layout/top-menu.tsx delete mode 100644 src/app/page.tsx create mode 100644 src/app/redux/features/couterSlice.ts create mode 100644 src/app/redux/provider.tsx create mode 100644 src/app/redux/store.ts create mode 100644 src/context/OrderContext.ts create mode 100644 src/context/OrderContextProvider.tsx diff --git a/package-lock.json b/package-lock.json index 8dfe3bf..d936fad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,16 +8,18 @@ "name": "crm-customer-ui", "version": "0.1.0", "dependencies": { + "@reduxjs/toolkit": "^1.9.7", "@types/node": "20.5.1", "@types/react": "18.2.20", "@types/react-dom": "18.2.7", "autoprefixer": "10.4.15", "eslint": "8.47.0", - "eslint-config-next": "13.4.19", - "next": "13.4.19", + "eslint-config-next": "^13.5.4", + "next": "^13.5.4", "postcss": "8.4.28", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-redux": "^8.1.3", "tailwindcss": "3.3.3", "typescript": "5.1.6" } @@ -178,22 +180,22 @@ } }, "node_modules/@next/env": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", - "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==" + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", + "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz", - "integrity": "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.4.tgz", + "integrity": "sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==", "dependencies": { "glob": "7.1.7" } }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", - "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz", + "integrity": "sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==", "cpu": [ "arm64" ], @@ -206,9 +208,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", - "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", + "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" ], @@ -221,9 +223,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", - "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", + "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" ], @@ -236,9 +238,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", - "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", + "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" ], @@ -251,9 +253,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz", - "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==", + "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" ], @@ -266,9 +268,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz", - "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==", + "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" ], @@ -281,9 +283,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", - "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", + "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" ], @@ -296,9 +298,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", - "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", + "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" ], @@ -311,9 +313,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", - "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", + "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" ], @@ -357,19 +359,51 @@ "node": ">= 8" } }, + "node_modules/@reduxjs/toolkit": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", + "integrity": "sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==", + "dependencies": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, "node_modules/@rushstack/eslint-patch": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==" }, "node_modules/@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", "dependencies": { "tslib": "^2.4.0" } }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.3.tgz", + "integrity": "sha512-Wny3a2UXn5FEA1l7gc6BbpoV5mD1XijZqgkp4TRgDCDL5r3B5ieOFGUX5h3n78Tr1MEG7BfvoM8qeztdvNU0fw==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -408,6 +442,11 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "node_modules/@typescript-eslint/parser": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", @@ -1316,18 +1355,18 @@ } }, "node_modules/eslint-config-next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz", - "integrity": "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.4.tgz", + "integrity": "sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==", "dependencies": { - "@next/eslint-plugin-next": "13.4.19", - "@rushstack/eslint-patch": "^1.1.3", + "@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.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", + "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": { @@ -2043,6 +2082,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -2051,6 +2098,15 @@ "node": ">= 4" } }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2638,35 +2694,34 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/next/-/next-13.4.19.tgz", - "integrity": "sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.4.tgz", + "integrity": "sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==", "dependencies": { - "@next/env": "13.4.19", - "@swc/helpers": "0.5.1", + "@next/env": "13.5.4", + "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", + "postcss": "8.4.31", "styled-jsx": "5.1.1", - "watchpack": "2.4.0", - "zod": "3.21.4" + "watchpack": "2.4.0" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": ">=16.8.0" + "node": ">=16.14.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "13.4.19", - "@next/swc-darwin-x64": "13.4.19", - "@next/swc-linux-arm64-gnu": "13.4.19", - "@next/swc-linux-arm64-musl": "13.4.19", - "@next/swc-linux-x64-gnu": "13.4.19", - "@next/swc-linux-x64-musl": "13.4.19", - "@next/swc-win32-arm64-msvc": "13.4.19", - "@next/swc-win32-ia32-msvc": "13.4.19", - "@next/swc-win32-x64-msvc": "13.4.19" + "@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", @@ -2684,9 +2739,9 @@ } }, "node_modules/next/node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -2695,10 +2750,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -3173,6 +3232,49 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-redux": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz", + "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4 || ^5.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-redux/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -3192,6 +3294,22 @@ "node": ">=8.10.0" } }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "peerDependencies": { + "redux": "^4" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", @@ -3232,6 +3350,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, "node_modules/resolve": { "version": "1.22.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", @@ -3848,6 +3971,14 @@ "punycode": "^2.1.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -3979,14 +4110,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } } }, "dependencies": { @@ -4097,70 +4220,70 @@ } }, "@next/env": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", - "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==" + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", + "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==" }, "@next/eslint-plugin-next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz", - "integrity": "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.4.tgz", + "integrity": "sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==", "requires": { "glob": "7.1.7" } }, "@next/swc-darwin-arm64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", - "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz", + "integrity": "sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==", "optional": true }, "@next/swc-darwin-x64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", - "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz", + "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==", "optional": true }, "@next/swc-linux-arm64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", - "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", + "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==", "optional": true }, "@next/swc-linux-arm64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", - "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", + "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==", "optional": true }, "@next/swc-linux-x64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz", - "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==", + "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==", "optional": true }, "@next/swc-linux-x64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz", - "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==", + "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==", "optional": true }, "@next/swc-win32-arm64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", - "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", + "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==", "optional": true }, "@next/swc-win32-ia32-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", - "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", + "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==", "optional": true }, "@next/swc-win32-x64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", - "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", + "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==", "optional": true }, "@nodelib/fs.scandir": { @@ -4186,19 +4309,39 @@ "fastq": "^1.6.0" } }, + "@reduxjs/toolkit": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", + "integrity": "sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==", + "requires": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + } + }, "@rushstack/eslint-patch": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==" }, "@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", "requires": { "tslib": "^2.4.0" } }, + "@types/hoist-non-react-statics": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.3.tgz", + "integrity": "sha512-Wny3a2UXn5FEA1l7gc6BbpoV5mD1XijZqgkp4TRgDCDL5r3B5ieOFGUX5h3n78Tr1MEG7BfvoM8qeztdvNU0fw==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -4237,6 +4380,11 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, + "@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "@typescript-eslint/parser": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", @@ -4861,18 +5009,18 @@ } }, "eslint-config-next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz", - "integrity": "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.4.tgz", + "integrity": "sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==", "requires": { - "@next/eslint-plugin-next": "13.4.19", - "@rushstack/eslint-patch": "^1.1.3", + "@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.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", + "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" } }, @@ -5383,11 +5531,24 @@ "has-symbols": "^1.0.2" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" }, + "immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -5798,35 +5959,34 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/next/-/next-13.4.19.tgz", - "integrity": "sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.4.tgz", + "integrity": "sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==", "requires": { - "@next/env": "13.4.19", - "@next/swc-darwin-arm64": "13.4.19", - "@next/swc-darwin-x64": "13.4.19", - "@next/swc-linux-arm64-gnu": "13.4.19", - "@next/swc-linux-arm64-musl": "13.4.19", - "@next/swc-linux-x64-gnu": "13.4.19", - "@next/swc-linux-x64-musl": "13.4.19", - "@next/swc-win32-arm64-msvc": "13.4.19", - "@next/swc-win32-ia32-msvc": "13.4.19", - "@next/swc-win32-x64-msvc": "13.4.19", - "@swc/helpers": "0.5.1", + "@next/env": "13.5.4", + "@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", + "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", + "postcss": "8.4.31", "styled-jsx": "5.1.1", - "watchpack": "2.4.0", - "zod": "3.21.4" + "watchpack": "2.4.0" }, "dependencies": { "postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -6125,6 +6285,26 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-redux": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz", + "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", + "requires": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -6141,6 +6321,20 @@ "picomatch": "^2.2.1" } }, + "redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "requires": { + "@babel/runtime": "^7.9.2" + } + }, + "redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "requires": {} + }, "reflect.getprototypeof": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", @@ -6169,6 +6363,11 @@ "functions-have-names": "^1.2.3" } }, + "reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, "resolve": { "version": "1.22.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", @@ -6577,6 +6776,12 @@ "punycode": "^2.1.0" } }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -6672,11 +6877,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - }, - "zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==" } } } diff --git a/package.json b/package.json index 6915a5f..cf83c44 100644 --- a/package.json +++ b/package.json @@ -9,16 +9,18 @@ "lint": "next lint" }, "dependencies": { + "@reduxjs/toolkit": "^1.9.7", "@types/node": "20.5.1", "@types/react": "18.2.20", "@types/react-dom": "18.2.7", "autoprefixer": "10.4.15", "eslint": "8.47.0", - "eslint-config-next": "13.4.19", - "next": "13.4.19", + "eslint-config-next": "^13.5.4", + "next": "^13.5.4", "postcss": "8.4.28", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-redux": "^8.1.3", "tailwindcss": "3.3.3", "typescript": "5.1.6" } diff --git a/public/zano45-9.png b/public/zano45-9.png new file mode 100644 index 0000000000000000000000000000000000000000..9d6dfbcf541b1437a4d848fe130f77e8ecdaa01e GIT binary patch literal 16226 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 literal 0 HcmV?d00001 diff --git a/src/app/(index)/layout.tsx b/src/app/(index)/layout.tsx new file mode 100644 index 0000000..c8a5205 --- /dev/null +++ b/src/app/(index)/layout.tsx @@ -0,0 +1,67 @@ +import '../globals.css' +import type { Metadata } from 'next' +import { Inter } from 'next/font/google' +import HamberMenu from '../components/layout/hamber-menu' +import { headers } from 'next/headers'; +import OrderContextProvider from '@/context/OrderContextProvider'; +import ReduxProvider from '../redux/provider'; + + +const inter = Inter({ subsets: ['latin'] }) + +export const metadata: Metadata = { + title: 'Fesahat CRM', + description: 'Perfect CRM software', +} + +export default function RootLayout({ + children, +}: { + children: React.ReactNode +}) { + + const headersList = headers(); + const activePath = headersList.get('x-invoke-path'); + //const navigation = use + return ( + + +
+ +
+ +
    +
  • صفحه اصلی
  • +
  • سفارشات
  • +
  • تیکت ها
  • +
  • چک ها
  • +
  • واریزی ها
  • +
  • صورت حساب
  • +
+ +
+ +
+
+ + + +
+ محمد جواد فصاحت +
+ + +
+ + + {children} + + +
+ +
+ + + + ) +} diff --git a/src/app/(index)/page.tsx b/src/app/(index)/page.tsx new file mode 100644 index 0000000..bd5beb2 --- /dev/null +++ b/src/app/(index)/page.tsx @@ -0,0 +1,53 @@ +import { Fragment } from "react" +import { headers } from 'next/headers'; +import Link from "next/link"; + +const Page = ()=>{ + + const headersList = headers(); + const activePath = headersList.get('x-invoke-path'); + + return ( + <> + { activePath == '/' ? + +
+ + +
+ سفارشات +
+ + +
+ +
+ تیکت ها +
+ +
+ چک ها +
+ +
+ واریزی ها +
+ +
+ صورت حساب +
+ +
+ +
+ + : null } + +
+ +
+ + ) +} + +export default Page \ No newline at end of file diff --git a/src/app/(index)/shop/layout.tsx b/src/app/(index)/shop/layout.tsx new file mode 100644 index 0000000..45aa63a --- /dev/null +++ b/src/app/(index)/shop/layout.tsx @@ -0,0 +1,40 @@ +import OrderItem from '@/app/components/layout/order-item' +import OrdersList from '@/app/components/layout/shop/orders-list' +import type { Metadata } from 'next' + +export const metadata: Metadata = { + title: 'Fesahat Shop', + description: 'Perfect CRM software', +} + +export default function ShopLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( +
+
+ {children} +
+
+

سبد خرید شما

+ +
+ +
+ + + +
+ +

مشاهده کامل سبد خرید

+
+ ثبت نهایی +
+
+ +
+
+ ) +} diff --git a/src/app/(index)/shop/page.tsx b/src/app/(index)/shop/page.tsx new file mode 100644 index 0000000..4799304 --- /dev/null +++ b/src/app/(index)/shop/page.tsx @@ -0,0 +1,46 @@ +import ProductCategoryBox from '@/app/components/layout/shop/products-cat' +import Image from 'next/image' + +const Page = ()=>{ + return ( + <> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + ) +} + +export default Page \ No newline at end of file diff --git a/src/app/(index)/shop/product/[id]/page.tsx b/src/app/(index)/shop/product/[id]/page.tsx new file mode 100644 index 0000000..584a181 --- /dev/null +++ b/src/app/(index)/shop/product/[id]/page.tsx @@ -0,0 +1,48 @@ +'use client' +import Products from '@/app/components/layout/shop/products' +import Image from 'next/image' +import Link from 'next/link' +import { useRouter } from 'next/navigation' + + +const Page = ()=>{ + const router = useRouter() + return ( + <> +
+
+ + + سیفون پایه دار سیفون پایه دار + + + { router.back() }} className='cursor-pointer bg-cyan-700 pr-1 pl-1 text-white text-[0.9rem] rounded'>بازگشت + +
+ + +
+ sdf +
+ +
+ + + + + + +
+ +
{ router.back() }} className='w-full text-center bg-gray-800 text-white rounded mt-2 p-2'> + بازگشت به صفحه قبل +
+ + + +
+ + ) +} + +export default Page \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/(login_register)/layout.tsx similarity index 53% rename from src/app/layout.tsx rename to src/app/(login_register)/layout.tsx index ae84562..d5eca56 100644 --- a/src/app/layout.tsx +++ b/src/app/(login_register)/layout.tsx @@ -1,12 +1,12 @@ -import './globals.css' +import '../globals.css' import type { Metadata } from 'next' import { Inter } from 'next/font/google' const inter = Inter({ subsets: ['latin'] }) export const metadata: Metadata = { - title: 'Create Next App', - description: 'Generated by create next app', + title: 'Fesahat CRM', + description: 'Perfect CRM software', } export default function RootLayout({ @@ -15,8 +15,12 @@ export default function RootLayout({ children: React.ReactNode }) { return ( - - {children} + + +
+ {children} +
+ ) } diff --git a/src/app/(login_register)/login/page.tsx b/src/app/(login_register)/login/page.tsx new file mode 100644 index 0000000..708bc88 --- /dev/null +++ b/src/app/(login_register)/login/page.tsx @@ -0,0 +1,32 @@ +import { Fragment } from "react" + +const Page = ()=>{ + return ( + +
+
+ +

ورود به سامانه مشتریان

+ +
+ + + +
+ + + +
+
+
+ ) +} + +export default Page \ No newline at end of file diff --git a/src/app/(login_register)/register/layout.tsx b/src/app/(login_register)/register/layout.tsx new file mode 100644 index 0000000..a14e64f --- /dev/null +++ b/src/app/(login_register)/register/layout.tsx @@ -0,0 +1,16 @@ +export const metadata = { + title: 'Next.js', + description: 'Generated by Next.js', +} + +export default function RootLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} diff --git a/src/app/(login_register)/register/page.tsx b/src/app/(login_register)/register/page.tsx new file mode 100644 index 0000000..6576145 --- /dev/null +++ b/src/app/(login_register)/register/page.tsx @@ -0,0 +1,16 @@ +import { Fragment } from "react" + +const Page = ()=>{ + return ( + +
+ 01 +
+
+ 02 +
+
+ ) +} + +export default Page \ No newline at end of file diff --git a/src/app/components/layout/hamber-menu.tsx b/src/app/components/layout/hamber-menu.tsx new file mode 100644 index 0000000..7d03c3d --- /dev/null +++ b/src/app/components/layout/hamber-menu.tsx @@ -0,0 +1,16 @@ +'use client' +import { useState } from "react" +import TopMenu from "./top-menu" + + +const HamberMenu = ()=>{ + const [showMenu, setShowMenu] = useState(false) + return ( +
+ { setShowMenu(!showMenu) }} >منو + +
+ ) +} + +export default HamberMenu \ No newline at end of file diff --git a/src/app/components/layout/order-item.tsx b/src/app/components/layout/order-item.tsx new file mode 100644 index 0000000..a83954c --- /dev/null +++ b/src/app/components/layout/order-item.tsx @@ -0,0 +1,49 @@ +interface OrderItemProps { + +} + + +const OrderItem = ()=>{ + return ( + <> +
+

+ سه راهي دريچه بازديد 90 درجه +

+ +
+ + + سایز + + + + تعداد + + + قیمت + + +
+ +
+ + + 110*3.2 + + + + 24 کارتن + + + 5.598.058 + + +
+ +
+ + ) +} + +export default OrderItem \ No newline at end of file diff --git a/src/app/components/layout/shop/orders-list.tsx b/src/app/components/layout/shop/orders-list.tsx new file mode 100644 index 0000000..a853081 --- /dev/null +++ b/src/app/components/layout/shop/orders-list.tsx @@ -0,0 +1,31 @@ +'use client' +import { useOrderContext } from "@/context/OrderContext" +import OrderItem from "../order-item" +import { useSelector } from 'react-redux' +import { RootState } from "@/app/redux/store" + +const OrdersList = ()=>{ + const {orderList} = useOrderContext() + const count = useSelector((state: RootState) => state.counter.counter_value ) + + return ( + <> +

{count}

+ {orderList.map((iteamo: any)=>( +

{iteamo}

+ ))} + + + + + + + + + + + + ) +} + +export default OrdersList \ No newline at end of file diff --git a/src/app/components/layout/shop/products-cat.tsx b/src/app/components/layout/shop/products-cat.tsx new file mode 100644 index 0000000..7a96bc7 --- /dev/null +++ b/src/app/components/layout/shop/products-cat.tsx @@ -0,0 +1,23 @@ +import Image from "next/image" +import Link from "next/link" + + +const ProductCategoryBox = ()=>{ + return ( +
+

سیفون پایه دار

+ a + +
+ + 23 نوع + + + مشاهده + +
+
+ ) +} + +export default ProductCategoryBox \ No newline at end of file diff --git a/src/app/components/layout/shop/products.tsx b/src/app/components/layout/shop/products.tsx new file mode 100644 index 0000000..6c7b490 --- /dev/null +++ b/src/app/components/layout/shop/products.tsx @@ -0,0 +1,44 @@ +'use client' +import { useOrderContext } from "@/context/OrderContext" +import Image from "next/image" +import Link from "next/link" +import { useDispatch } from "react-redux" +import { incr } from "@/app/redux/features/couterSlice" + + +const Products = ()=>{ + const {addToOrderList} = useOrderContext() + const dispatch = useDispatch() + + return ( + <> + +
+ +
+ سایز + 110*3.2 +
+ +
+ قیمت + 1060000 +
+ +
+ +
+ + +
+ { dispatch ( incr() ) } }>inc + { addToOrderList('salam') }} className='cursor-pointer bg-lime-600 text-white rounded pt-1 pb-1 w-full text-center'>ثبت +
+ +
+ + + ) +} + +export default Products \ No newline at end of file diff --git a/src/app/components/layout/top-menu.tsx b/src/app/components/layout/top-menu.tsx new file mode 100644 index 0000000..2d450ef --- /dev/null +++ b/src/app/components/layout/top-menu.tsx @@ -0,0 +1,23 @@ +import Link from 'next/link' + +interface TopMenuProps { + showMenu: boolean, + setShowMenu: Function, +} + +const TopMenu = (props: TopMenuProps)=>{ + return ( +
    + { props.setShowMenu(false) }} href={"/"}> +
  • صفحه اصلی
  • + +
  • سفارشات
  • +
  • تیکت ها
  • +
  • چک ها
  • +
  • واریزی ها
  • +
  • صورت حساب
  • +
+ ) +} + +export default TopMenu \ No newline at end of file diff --git a/src/app/globals.css b/src/app/globals.css index fd81e88..b5c61c9 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,27 +1,3 @@ @tailwind base; @tailwind components; @tailwind utilities; - -:root { - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - } -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); -} diff --git a/src/app/page.tsx b/src/app/page.tsx deleted file mode 100644 index e38c626..0000000 --- a/src/app/page.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import Image from 'next/image' - -export default function Home() { - return ( -
-
-

- Get started by editing  - src/app/page.tsx -

- -
- -
- Next.js Logo -
- - -
- ) -} diff --git a/src/app/redux/features/couterSlice.ts b/src/app/redux/features/couterSlice.ts new file mode 100644 index 0000000..8000bde --- /dev/null +++ b/src/app/redux/features/couterSlice.ts @@ -0,0 +1,27 @@ +'use client' + +import { createSlice } from "@reduxjs/toolkit" + +interface CounterState { + counter_value: number +} + +const initialState: CounterState = { + counter_value: 0 +} + +export const counterSlice = createSlice({ + name: 'counter', + initialState, + reducers: { + incr: (state)=>{ + state.counter_value += 1 + }, + decr: (state)=>{ + state.counter_value -= 1 + }, + }, +}) + +export const { incr, decr } = counterSlice.actions; +export default counterSlice.reducer; \ No newline at end of file diff --git a/src/app/redux/provider.tsx b/src/app/redux/provider.tsx new file mode 100644 index 0000000..0340d75 --- /dev/null +++ b/src/app/redux/provider.tsx @@ -0,0 +1,14 @@ +'use client' + +import { Provider } from "react-redux" +import { store } from "./store" + +const ReduxProvider = ({children} : {children: React.ReactNode})=>{ + return ( + + { children } + + ) +} + +export default ReduxProvider \ No newline at end of file diff --git a/src/app/redux/store.ts b/src/app/redux/store.ts new file mode 100644 index 0000000..8b4d284 --- /dev/null +++ b/src/app/redux/store.ts @@ -0,0 +1,15 @@ +'use client' + +import { configureStore } from "@reduxjs/toolkit" +import couterReducer from "./features/couterSlice" + + +export const store = configureStore({ + reducer: { + counter: couterReducer + }, +}) + +export type RootState = ReturnType +export type AppDispatch = typeof store.dispatch + diff --git a/src/context/OrderContext.ts b/src/context/OrderContext.ts new file mode 100644 index 0000000..94e629c --- /dev/null +++ b/src/context/OrderContext.ts @@ -0,0 +1,18 @@ +import { createContext, useContext } from "react" + + +interface IOrderContext{ + orderList: any, + addToOrderList: (product: any)=>void + +} + +export const OrderContext = createContext({ + orderList: [], + addToOrderList(product) { + + }, +}) + +export const useOrderContext = ()=> useContext(OrderContext); + diff --git a/src/context/OrderContextProvider.tsx b/src/context/OrderContextProvider.tsx new file mode 100644 index 0000000..67e17f4 --- /dev/null +++ b/src/context/OrderContextProvider.tsx @@ -0,0 +1,29 @@ +'use client' +import React, {ReactNode, useState, useEffect} from 'react' +import { OrderContext } from './OrderContext' + +interface IProps { + children: ReactNode +} + +const OrderContextProvider = ({children}: IProps)=>{ + const [orderList, setOrderList] = useState([]) + + useEffect(()=>{ + setOrderList(['salam1', 'salam2']) + }, []) + + const addToOrderList = (norderList: any) => { + setOrderList([...orderList, norderList]) + } + return ( + + {children} + + ) +} + +export default OrderContextProvider \ No newline at end of file