From e5490dee8b68b1488dd77a3bf0ab4af393f27f41 Mon Sep 17 00:00:00 2001 From: sina_sajjadi Date: Sat, 7 Sep 2024 16:11:42 +0330 Subject: [PATCH] API connected , Staticks changed --- .env.local.example | 4 - next.config.js | 10 +- package-lock.json | 358 ++++++---- package.json | 4 +- public/لوگو3 1.svg | 11 + src/app/(account-pages)/(components)/Nav.tsx | 2 +- .../(account-pages)/account-billing/page.tsx | 32 - src/app/(account-pages)/account/page.tsx | 196 ++++-- .../passengers-list/PassengerTable.tsx | 55 ++ .../(account-pages)/passengers-list/page.tsx | 52 ++ .../(client-components)/(Header)/Header.tsx | 22 +- .../(client-components)/(Header)/MainNav1.tsx | 42 +- .../(Header)/SiteHeader.tsx | 13 +- .../StayDatesRangeInput.tsx | 95 +-- .../(HeroSearchForm)/ButtonSubmit.tsx | 2 +- .../(HeroSearchForm)/GuestsInput.tsx | 62 +- .../(HeroSearchForm)/HeroSearchForm.tsx | 20 +- .../(HeroSearchForm)/LocationInput.tsx | 70 +- src/app/(listing-detail)/SectionDateRange.tsx | 2 +- src/app/(listing-detail)/layout.tsx | 7 +- .../[[...stepIndex]]/PageAddListing1.tsx | 98 ++- .../add-listing/[[...stepIndex]]/layout.tsx | 50 -- src/app/add-listing/[[...stepIndex]]/page.tsx | 126 ++-- src/app/add-new-passenger/page.tsx | 227 ++++++ src/app/api/hello/auth/[...nextauth].ts | 26 - src/app/api/hello/route.ts | 3 - src/app/forgot-password/page.tsx | 151 ++++ src/app/globals.css | 5 + src/app/layout.tsx | 21 +- src/app/login/page.tsx | 170 +++-- src/app/page.tsx | 55 +- src/app/signup/methodes/page.tsx | 150 ++++ src/app/signup/otp-code/page.tsx | 132 ++++ src/app/signup/page.tsx | 191 ++++-- src/app/tours/[slug]/GuestsInput.tsx | 94 +++ src/app/tours/[slug]/StayDatesRangeInput.tsx | 69 ++ src/app/tours/[slug]/constant.ts | 71 ++ src/app/tours/[slug]/page.tsx | 648 ++++++++++++++++++ src/app/tours/layout.tsx | 70 ++ src/components/CardCategory3.tsx | 9 +- src/components/HeaderFilter.tsx | 27 +- src/components/SectionCustomTour.tsx | 69 ++ src/components/SectionGridFeaturePlaces.tsx | 73 +- src/components/SectionSliderNewCategories.tsx | 55 +- src/components/StayCard2.tsx | 54 +- src/components/api/axios.tsx | 31 + src/components/api/getImageURL.tsx | 36 + src/components/contexts/tourDetails.tsx | 73 ++ src/components/contexts/userContext.tsx | 26 + src/data/jsons/__stayListing.json | 21 +- src/data/navigation.ts | 368 +++++----- src/hooks/FormValidation.ts | 49 ++ src/images/hero-right-orginal.png | Bin 0 -> 1339122 bytes src/images/hero-right.png | Bin 1339122 -> 1963448 bytes src/images/logos/لوگو3 1.png | Bin 0 -> 15597 bytes src/images/logos/لوگو3 1.svg | 11 + src/shared/Avatar.tsx | 38 +- src/shared/Badge.tsx | 65 +- src/shared/ButtonPrimary.tsx | 2 +- src/shared/Input.tsx | 1 + src/shared/Logo.tsx | 23 +- src/shared/LogoSvgLight.tsx | 2 + src/shared/Navigation/Navigation.tsx | 3 + src/shared/PhoneNumberInput.tsx | 0 tailwind.config.js | 3 + yarn.lock | 82 ++- 66 files changed, 3511 insertions(+), 1026 deletions(-) delete mode 100644 .env.local.example create mode 100644 public/لوگو3 1.svg delete mode 100644 src/app/(account-pages)/account-billing/page.tsx create mode 100644 src/app/(account-pages)/passengers-list/PassengerTable.tsx create mode 100644 src/app/(account-pages)/passengers-list/page.tsx delete mode 100644 src/app/add-listing/[[...stepIndex]]/layout.tsx create mode 100644 src/app/add-new-passenger/page.tsx delete mode 100644 src/app/api/hello/auth/[...nextauth].ts delete mode 100644 src/app/api/hello/route.ts create mode 100644 src/app/forgot-password/page.tsx create mode 100644 src/app/signup/methodes/page.tsx create mode 100644 src/app/signup/otp-code/page.tsx create mode 100644 src/app/tours/[slug]/GuestsInput.tsx create mode 100644 src/app/tours/[slug]/StayDatesRangeInput.tsx create mode 100644 src/app/tours/[slug]/constant.ts create mode 100644 src/app/tours/[slug]/page.tsx create mode 100644 src/app/tours/layout.tsx create mode 100644 src/components/SectionCustomTour.tsx create mode 100644 src/components/api/axios.tsx create mode 100644 src/components/api/getImageURL.tsx create mode 100644 src/components/contexts/tourDetails.tsx create mode 100644 src/components/contexts/userContext.tsx create mode 100644 src/hooks/FormValidation.ts create mode 100644 src/images/hero-right-orginal.png create mode 100644 src/images/logos/لوگو3 1.png create mode 100644 src/images/logos/لوگو3 1.svg create mode 100644 src/shared/PhoneNumberInput.tsx diff --git a/.env.local.example b/.env.local.example deleted file mode 100644 index 26c333f..0000000 --- a/.env.local.example +++ /dev/null @@ -1,4 +0,0 @@ -NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=dwi7o19nn -CLOUDINARY_API_KEY=549144472596919 -CLOUDINARY_API_SECRET=AnNiPOszr1R0YCelomUmi9IyuBM -CLOUDINARY_FOLDER=test diff --git a/next.config.js b/next.config.js index 4488ba4..e493b2f 100644 --- a/next.config.js +++ b/next.config.js @@ -1,10 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: false, - experimental: { - appDir: true, - typedRoutes: true, - }, images: { remotePatterns: [ { @@ -31,6 +27,12 @@ const nextConfig = { port: "", pathname: "/**", }, + { + protocol: "https", + hostname: "aqila.nwhco.ir", + port: "", + pathname: "/**", + }, ], }, }; diff --git a/package-lock.json b/package-lock.json index 110fe67..38460d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@types/react": "18.2.7", "@types/react-datepicker": "^4.11.2", "@types/react-dom": "18.2.4", + "axios": "^1.7.5", "client-only": "^0.0.1", "eslint": "8.41.0", "eslint-config-next": "^13.4.3", @@ -25,12 +26,13 @@ "google-map-react": "^2.2.1", "lodash": "^4.17.21", "next": "^13.4.3", - "next-auth": "^4.23.1", + "next-auth": "^4.24.7", "rc-slider": "^10.1.1", "react": "^18.2.0", "react-datepicker": "^4.11.0", "react-dom": "^18.2.0", "react-hooks-global-state": "^2.1.0", + "react-icons": "^5.3.0", "react-swipeable": "^7.0.0", "react-use": "^17.4.0", "react-use-keypress": "^1.3.1", @@ -303,6 +305,126 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.3.tgz", + "integrity": "sha512-yx18udH/ZmR4Bw4M6lIIPE3JxsAZwo04iaucEfA2GMt1unXr2iodHUX/LAKNyi6xoLP2ghi0E+Xi1f4Qb8f1LQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.3.tgz", + "integrity": "sha512-Mi8xJWh2IOjryAM1mx18vwmal9eokJ2njY4nDh04scy37F0LEGJ/diL6JL6kTXi0UfUCGbMsOItf7vpReNiD2A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.3.tgz", + "integrity": "sha512-aBvtry4bxJ1xwKZ/LVPeBGBwWVwxa4bTnNkRRw6YffJnn/f4Tv4EGDPaVeYHZGQVA56wsGbtA6nZMuWs/EIk4Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.3.tgz", + "integrity": "sha512-krT+2G3kEsEUvZoYte3/2IscscDraYPc2B+fDJFipPktJmrv088Pei/RjrhWm5TMIy5URYjZUoDZdh5k940Dyw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.3.tgz", + "integrity": "sha512-AMdFX6EKJjC0G/CM6hJvkY8wUjCcbdj3Qg7uAQJ7PVejRWaVt0sDTMavbRfgMchx8h8KsAudUCtdFkG9hlEClw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.3.tgz", + "integrity": "sha512-jySgSXE48shaLtcQbiFO9ajE9mqz7pcAVLnVLvRIlUHyQYR/WyZdK8ehLs65Mz6j9cLrJM+YdmdJPyV4WDaz2g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.3.tgz", + "integrity": "sha512-5DxHo8uYcaADiE9pHrg8o28VMt/1kR8voDehmfs9AqS0qSClxAAl+CchjdboUvbCjdNWL1MISCvEfKY2InJ3JA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.3.tgz", + "integrity": "sha512-LaqkF3d+GXRA5X6zrUjQUrXm2MN/3E2arXBtn5C7avBCNYfm9G3Xc646AmmmpN3DJZVaMYliMyCIQCMDEzk80w==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@next/swc-win32-x64-msvc": { "version": "13.4.3", "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.3.tgz", @@ -875,6 +997,11 @@ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "license": "ISC" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -930,6 +1057,16 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/axobject-query": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", @@ -1176,6 +1313,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -1398,6 +1546,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -2156,6 +2312,25 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "license": "ISC" }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -2165,6 +2340,19 @@ "is-callable": "^1.1.3" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -2992,9 +3180,9 @@ } }, "node_modules/jose": { - "version": "4.14.6", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.6.tgz", - "integrity": "sha512-EqJPEUlZD0/CSUMubKtMaYUOtWe91tZXTWMJZoKSbLk+KtdhNdcvppH8lA9XwVu2V4Ailvsj0GBZJ2ZwDjfesQ==", + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", "funding": { "url": "https://github.com/sponsors/panva" } @@ -3200,6 +3388,25 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -3358,14 +3565,14 @@ } }, "node_modules/next-auth": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.23.1.tgz", - "integrity": "sha512-mL083z8KgRtlrIV6CDca2H1kduWJuK/3pTS0Fe2og15KOm4v2kkLGdSDfc2g+019aEBrJUT0pPW2Xx42ImN1WA==", + "version": "4.24.7", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.7.tgz", + "integrity": "sha512-iChjE8ov/1K/z98gdKbn2Jw+2vLgJtVV39X+rCP5SGnVQuco7QOr19FRNGMIrD8d3LYhHWV9j9sKLzq1aDWWQQ==", "dependencies": { "@babel/runtime": "^7.20.13", "@panva/hkdf": "^1.0.2", "cookie": "^0.5.0", - "jose": "^4.11.4", + "jose": "^4.15.5", "oauth": "^0.9.15", "openid-client": "^5.4.0", "preact": "^10.6.3", @@ -3373,7 +3580,7 @@ "uuid": "^8.3.2" }, "peerDependencies": { - "next": "^12.2.5 || ^13", + "next": "^12.2.5 || ^13 || ^14", "nodemailer": "^6.6.5", "react": "^17.0.2 || ^18", "react-dom": "^17.0.2 || ^18" @@ -3982,6 +4189,11 @@ "react-is": "^16.13.1" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -4104,6 +4316,14 @@ "react": ">=16.8.0" } }, + "node_modules/react-icons": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz", + "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -5340,126 +5560,6 @@ "optional": true } } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.3.tgz", - "integrity": "sha512-yx18udH/ZmR4Bw4M6lIIPE3JxsAZwo04iaucEfA2GMt1unXr2iodHUX/LAKNyi6xoLP2ghi0E+Xi1f4Qb8f1LQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.3.tgz", - "integrity": "sha512-Mi8xJWh2IOjryAM1mx18vwmal9eokJ2njY4nDh04scy37F0LEGJ/diL6JL6kTXi0UfUCGbMsOItf7vpReNiD2A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.3.tgz", - "integrity": "sha512-aBvtry4bxJ1xwKZ/LVPeBGBwWVwxa4bTnNkRRw6YffJnn/f4Tv4EGDPaVeYHZGQVA56wsGbtA6nZMuWs/EIk4Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.3.tgz", - "integrity": "sha512-krT+2G3kEsEUvZoYte3/2IscscDraYPc2B+fDJFipPktJmrv088Pei/RjrhWm5TMIy5URYjZUoDZdh5k940Dyw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.3.tgz", - "integrity": "sha512-AMdFX6EKJjC0G/CM6hJvkY8wUjCcbdj3Qg7uAQJ7PVejRWaVt0sDTMavbRfgMchx8h8KsAudUCtdFkG9hlEClw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.3.tgz", - "integrity": "sha512-jySgSXE48shaLtcQbiFO9ajE9mqz7pcAVLnVLvRIlUHyQYR/WyZdK8ehLs65Mz6j9cLrJM+YdmdJPyV4WDaz2g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.3.tgz", - "integrity": "sha512-5DxHo8uYcaADiE9pHrg8o28VMt/1kR8voDehmfs9AqS0qSClxAAl+CchjdboUvbCjdNWL1MISCvEfKY2InJ3JA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.3.tgz", - "integrity": "sha512-LaqkF3d+GXRA5X6zrUjQUrXm2MN/3E2arXBtn5C7avBCNYfm9G3Xc646AmmmpN3DJZVaMYliMyCIQCMDEzk80w==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } } } } diff --git a/package.json b/package.json index cc27ce6..bc6415e 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "@types/react": "18.2.7", "@types/react-datepicker": "^4.11.2", "@types/react-dom": "18.2.4", + "axios": "^1.7.5", "client-only": "^0.0.1", "eslint": "8.41.0", "eslint-config-next": "^13.4.3", @@ -26,12 +27,13 @@ "google-map-react": "^2.2.1", "lodash": "^4.17.21", "next": "^13.4.3", - "next-auth": "^4.23.1", + "next-auth": "^4.24.7", "rc-slider": "^10.1.1", "react": "^18.2.0", "react-datepicker": "^4.11.0", "react-dom": "^18.2.0", "react-hooks-global-state": "^2.1.0", + "react-icons": "^5.3.0", "react-swipeable": "^7.0.0", "react-use": "^17.4.0", "react-use-keypress": "^1.3.1", diff --git a/public/لوگو3 1.svg b/public/لوگو3 1.svg new file mode 100644 index 0000000..6b6e353 --- /dev/null +++ b/public/لوگو3 1.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/app/(account-pages)/(components)/Nav.tsx b/src/app/(account-pages)/(components)/Nav.tsx index 13de319..d548f4a 100644 --- a/src/app/(account-pages)/(components)/Nav.tsx +++ b/src/app/(account-pages)/(components)/Nav.tsx @@ -12,7 +12,7 @@ export const Nav = () => { "/account", "/account-savelists", "/account-password", - "/account-billing", + "/passengers-list", ]; return ( diff --git a/src/app/(account-pages)/account-billing/page.tsx b/src/app/(account-pages)/account-billing/page.tsx deleted file mode 100644 index 706023d..0000000 --- a/src/app/(account-pages)/account-billing/page.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from "react"; -import ButtonPrimary from "@/shared/ButtonPrimary"; - -const AccountBilling = () => { - return ( -
- {/* HEADING */} -

Payments & payouts

-
-
- Payout methods -
- - {` When you receive a payment for a reservation, we call that payment - to you a "payout." Our secure payment system supports several - payout methods, which can be set up below. Go to FAQ.`} -
-
- To get paid, you need to set up a payout method Airbnb releases - payouts about 24 hours after a guest’s scheduled check-in time. The - time it takes for the funds to appear in your account depends on your - payout method. Learn more -
-
- Add payout mothod -
-
-
- ); -}; - -export default AccountBilling; diff --git a/src/app/(account-pages)/account/page.tsx b/src/app/(account-pages)/account/page.tsx index 63f9bab..2519679 100644 --- a/src/app/(account-pages)/account/page.tsx +++ b/src/app/(account-pages)/account/page.tsx @@ -1,23 +1,131 @@ -import React, { FC } from "react"; +"use client"; +import React, { useContext, useState } from "react"; import Label from "@/components/Label"; import Avatar from "@/shared/Avatar"; import ButtonPrimary from "@/shared/ButtonPrimary"; import Input from "@/shared/Input"; -import Select from "@/shared/Select"; -import Textarea from "@/shared/Textarea"; +import ButtonSecondary from "@/shared/ButtonSecondary"; +import axiosInstance from "@/components/api/axios"; +import { useRouter } from "next/navigation"; +import { user as UserContext } from "@/components/contexts/userContext"; +import getImageURL from "@/components/api/getImageURL"; export interface AccountPageProps {} const AccountPage = () => { + const router = useRouter(); + + const User = JSON.parse(localStorage.getItem("user")) + let user = JSON.parse(localStorage.getItem("user")); + if (!user) { + return router.replace("/"); + } + const { setStatus } = useContext(UserContext); + + const [name, setName] = useState(user.fullname || ""); + const [email, setEmail] = useState(user.email || ""); + const [number, setNumber] = useState(user.phone_number || ""); + const [password, setPassword] = useState(""); + const [image, setImage] = useState(null); + const [imageURL, setImageURL] = useState(null); + const [error, setError] = useState(""); + + const deleteHandler = async () => { + setStatus(false); + + setError(""); + + try { + const response = await axiosInstance.delete( + `/api/account/profile/delete/`, + { + headers: { + Authorization: `token ${user.token}`, + }, + } + ); + if (response.status === 204) { + localStorage.removeItem("user"); + router.replace("/"); + } else { + setError("Something went wrong"); + } + } catch (error) { + setError(error.message); + } + }; + const signOutHandler = () => { + localStorage.removeItem("user"); + setStatus(false); + + router.replace("/"); + }; + + const changeHandler = async () => { + setError(""); + const formData = new FormData(); + formData.append("fullname", name); + formData.append("email", email); + formData.append("password", password); + if (imageURL) { + formData.append("avatar", imageURL); + } + + try { + const response = await axiosInstance.put( + `/api/account/profile/update/`, + formData, + { + headers: { + Authorization: `token ${user.token}`, + "Content-Type": "multipart/form-data", + }, + } + ); + if (response.status === 200) { + console.log(response); + + user.avatar = response.data.avatar; + user.email = response.data.email; + user.fullname = response.data.fullname; + user.phone_number = response.data.phone_number; + + localStorage.setItem("user", JSON.stringify(user)); + } else { + setError("Something went wrong"); + } + } catch (error) { + setError(error.message); + } + }; + + const handleFileChange = async (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + if (file) { + const uploadedFile = await getImageURL(file); + + setImageURL(uploadedFile.url); + }; + + setImage(file); + + + + } + return (
- {/* HEADING */} -

Account infomation

+

Account information

- +
{
- -
- {/* ---- */} -
- - -
- {/* ---- */} -
- - + setName(e.target.value)} + className="mt-1.5" + />
- {/* ---- */}
- + setEmail(e.target.value)} + className="mt-1.5" + />
- {/* ---- */}
- - -
- {/* ---- */} -
- - -
- {/* ---- */} -
- - + + setNumber(e.target.value)} + className="[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none mt-1.5" + type="text" + />
- {/* ---- */}
- -