diff --git a/frontend/pages/cart/delivery.vue b/frontend/pages/cart/delivery.vue index 568a7f3..5b3774b 100644 --- a/frontend/pages/cart/delivery.vue +++ b/frontend/pages/cart/delivery.vue @@ -2,6 +2,9 @@ // imports import useGetAllAddress from "~/composables/api/account/useGetAllAddress"; +import useSetOrderAddress from "~/composables/api/orders/useSetOrderAddress"; +import { useToast } from "~/composables/global/useToast"; +import { QUERY_KEYS } from "~/constants"; // meta @@ -24,10 +27,26 @@ type DeliveryData = { }; }; +// queries + +const { data: addresses, isLoading: addressesIsLoading } = useGetAllAddress(); + +const { mutateAsync: setOrderAddress, isPending: setOrderAddressIsPending } = + useSetOrderAddress(); + +// computed + +const selectedAddress = computed(() => { + return addresses.value?.find((i) => i.is_main) ?? null; +}); + // state +const { $queryClient: queryClient } = useNuxtApp(); +const { addToast } = useToast(); + const deliveryData = ref({ - address: null, + address: selectedAddress.value, deliveryMethod: { peyk: false, pishtaz: true, @@ -35,26 +54,57 @@ const deliveryData = ref({ }, }); -const { data: addresses, isLoading: addressesIsLoading } = useGetAllAddress(); - // methods const handleSelectAddress = (address: Address) => { deliveryData.value.address = { ...address }; }; + +// watch + +whenever( + () => deliveryData.value.address, + (nv) => { + setOrderAddress( + { address_id: nv.id! }, + { + onSettled: () => { + queryClient.invalidateQueries({ + queryKey: [QUERY_KEYS.addresses], + }); + }, + onError: () => { + addToast({ + message: "در انتخاب آدرس خطایی رخ داد", + options: { + description: "لطفا مجدد تلاش کنید", + }, + }); + }, + } + ); + }, + { + deep: true, + } +);