From bc0f4abdeab04677a2c057293e0d34481e95faf2 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Fri, 14 Feb 2025 01:22:45 +0330 Subject: [PATCH 01/20] updated address type --- frontend/types/global.d.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/frontend/types/global.d.ts b/frontend/types/global.d.ts index 9ba04d1..72a5ca9 100644 --- a/frontend/types/global.d.ts +++ b/frontend/types/global.d.ts @@ -95,13 +95,14 @@ declare global { type Address = { id: number | undefined; - province: string; - city: string; - postal_code: string; - address: string; - phone: string; - name: string; - for_me: "خیر" | "بله"; + province: string | undefined; + city: string | undefined; + postal_code: string | undefined; + address: string | undefined; + phone: string | undefined; + name: string | undefined; + for_me: "خیر" | "بله" | boolean; + is_main: boolean; }; type DeliveryMethod = { From 2b4f80bb46d8c4e07da8e71d783aa6798c860451 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Fri, 14 Feb 2025 01:22:57 +0330 Subject: [PATCH 02/20] added loading indicator --- frontend/app.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/app.vue b/frontend/app.vue index dd43ce5..b08570b 100644 --- a/frontend/app.vue +++ b/frontend/app.vue @@ -7,6 +7,8 @@ import { VueQueryDevtools } from "@tanstack/vue-query-devtools"; + +
@@ -20,4 +22,3 @@ import { VueQueryDevtools } from "@tanstack/vue-query-devtools";
- From 9f42f5cbe9c7da80b44a99000132523fc8849436 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Fri, 14 Feb 2025 01:23:10 +0330 Subject: [PATCH 03/20] added vue3 marquee --- frontend/package-lock.json | 13 +++++++++++++ frontend/package.json | 1 + 2 files changed, 14 insertions(+) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 619a606..acf8c36 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -30,6 +30,7 @@ "vue-router": "latest", "vue-scrollto": "^2.20.0", "vue-skeletor": "^1.0.6", + "vue3-marquee": "^4.2.2", "vue3-persian-datetime-picker": "^1.2.2" }, "devDependencies": { @@ -12744,6 +12745,18 @@ "integrity": "sha512-ER4vHlFSXCW3ixK2DlczUE6CZliHsn4d2TvZ9/26C6Oq8zoyEY23BsqweMPtF8QULSz1+G5m2New1BwKNVOZhQ==", "license": "MIT" }, + "node_modules/vue3-marquee": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/vue3-marquee/-/vue3-marquee-4.2.2.tgz", + "integrity": "sha512-FeFvGUVInKfFilXFcnl8sDRBJBZCZSNLlQDquJErB9db6W2xICRVqbRV/jtdzsEP0rftarLQhx9MeEAU0+TPuQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "vue": "^3.2" + } + }, "node_modules/vue3-persian-datetime-picker": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/vue3-persian-datetime-picker/-/vue3-persian-datetime-picker-1.2.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index 518b021..8ba8134 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -36,6 +36,7 @@ "vue-router": "latest", "vue-scrollto": "^2.20.0", "vue-skeletor": "^1.0.6", + "vue3-marquee": "^4.2.2", "vue3-persian-datetime-picker": "^1.2.2" }, "devDependencies": { From 2f2fb3744580e6e264ec65371c5bfeadddda63ab Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Fri, 14 Feb 2025 01:23:16 +0330 Subject: [PATCH 04/20] added vue3 marquee plugin --- frontend/plugins/marquee.client.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 frontend/plugins/marquee.client.ts diff --git a/frontend/plugins/marquee.client.ts b/frontend/plugins/marquee.client.ts new file mode 100644 index 0000000..f903219 --- /dev/null +++ b/frontend/plugins/marquee.client.ts @@ -0,0 +1,5 @@ +import Vue3Marquee from "vue3-marquee"; + +export default defineNuxtPlugin((nuxtApp) => { + nuxtApp.vueApp.use(Vue3Marquee, { name: "Marquee" }); +}); From da87655deed860107c9c8aadbc0365e1198d5b71 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Fri, 14 Feb 2025 01:23:29 +0330 Subject: [PATCH 05/20] added check auth middleware --- frontend/middleware/checkAuth.global.ts | 57 +++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 frontend/middleware/checkAuth.global.ts diff --git a/frontend/middleware/checkAuth.global.ts b/frontend/middleware/checkAuth.global.ts new file mode 100644 index 0000000..d153891 --- /dev/null +++ b/frontend/middleware/checkAuth.global.ts @@ -0,0 +1,57 @@ +import { useAuth } from "~/composables/api/auth/useAuth"; +import useRefreshAuth from "~/composables/api/auth/useRefreshAuth"; +import useVerify from "~/composables/api/auth/useVerify"; + +export default defineNuxtRouteMiddleware(() => { + // state + + const { mutateAsync: refreshAuth } = useRefreshAuth(); + const { token, refreshToken, updateToken, updateRefreshToken, logout } = + useAuth(); + const { mutateAsync: verify } = useVerify(); + + // lifecycle + + onServerPrefetch(async () => { + if (!!token.value) { + // 1.1 - token is there + + try { + await verify({ + token: token.value, + }); + + // 2.1 - token is valid, finish + } catch (e) { + // 2.2 - token is there, but not valid, try to refresh token + + if (!!refreshToken.value) { + // 3.1 - refresh token is there, try to refresh + + try { + const refreshResponse = await refreshAuth({ + refresh: refreshToken.value, + }); + + // 4.1 - token is refreshed successfully, finish + + updateToken(refreshResponse.access); + updateRefreshToken(refreshResponse.refresh); + } catch (e) { + // 4.2 - cant refreshing token, logout + + logout(); + } + } else { + // 3.2 - refresh token is not exist, logout + + logout(); + } + } + } else { + // 1.2 - token is not exist, logout + + logout(); + } + }); +}); From 411d37b02da6701d4988d6995ff25e8e128684c1 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Fri, 14 Feb 2025 01:23:58 +0330 Subject: [PATCH 06/20] updated address modal --- frontend/components/cart/AddressModal.vue | 332 ++++++++++------------ 1 file changed, 154 insertions(+), 178 deletions(-) diff --git a/frontend/components/cart/AddressModal.vue b/frontend/components/cart/AddressModal.vue index 481e493..252ec59 100644 --- a/frontend/components/cart/AddressModal.vue +++ b/frontend/components/cart/AddressModal.vue @@ -12,13 +12,23 @@ import { useToast } from "~/composables/global/useToast"; type Props = { address?: Address; + isShow: boolean; +}; + +type Emits = { + "update:address": [value: File]; + "update:isShow": [value: boolean]; }; // props const props = defineProps(); -const { address } = toRefs(props); +const { address, isShow } = toRefs(props); + +// emits + +const emit = defineEmits(); // computed @@ -30,8 +40,6 @@ const { $queryClient: queryClient } = useNuxtApp(); const { addToast } = useToast(); -const isShow = ref(false); - const addressData = ref({ id: address.value?.id ?? undefined, province: address.value?.province ?? "", @@ -56,6 +64,13 @@ const { isPending: createAddressIsPending, } = useCreateOrUpdateAddress(isEditing); +// computed + +const visible = computed({ + get: () => isShow.value ?? false, + set: (value: boolean) => emit("update:isShow", value), +}); + // methods const closeModal = () => { @@ -71,7 +86,6 @@ const closeModal = () => { for_me: "بله", }; } - isShow.value = false; }; const addNew = () => { @@ -122,199 +136,161 @@ watch( From a9ac2cd7f34d26b36bd124eeb36af857e2aa0f7e Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Fri, 14 Feb 2025 01:24:03 +0330 Subject: [PATCH 07/20] updated modal --- frontend/components/global/Modal.vue | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/frontend/components/global/Modal.vue b/frontend/components/global/Modal.vue index 948be76..b2ec075 100644 --- a/frontend/components/global/Modal.vue +++ b/frontend/components/global/Modal.vue @@ -6,6 +6,7 @@ type Props = { icon?: string; title: string; iconSize?: string; + contectClass?: string; }; type Emits = { @@ -35,7 +36,14 @@ const isShow = computed({