diff --git a/frontend/components/cart/delivery/AddressModal.vue b/frontend/components/cart/delivery/AddressModal.vue index e262c8f..d7f763d 100644 --- a/frontend/components/cart/delivery/AddressModal.vue +++ b/frontend/components/cart/delivery/AddressModal.vue @@ -5,6 +5,8 @@ import useCreateOrUpdateAddress from "~/composables/api/account/useCreateOrUpdat import useGetAccount from "~/composables/api/account/useGetAccount"; import { QUERY_KEYS } from "~/constants"; import { useToast } from "~/composables/global/useToast"; +import useVuelidate from "@vuelidate/core"; +import { helpers, required, minLength } from "@vuelidate/validators"; // types @@ -42,6 +44,35 @@ const addressData = ref({ is_main: address.value?.is_main ?? false, }); +// computed + +const formRules = computed(() => { + return { + province: { + required: helpers.withMessage("فیلد استان سکونت الزامی می باشد", required), + minLength: helpers.withMessage("فیلد استان سکونت حداقل 2 کرکتر می باشد", minLength(2)), + }, + city: { + required: helpers.withMessage("فیلد شهر سکونت الزامی می باشد", required), + minLength: helpers.withMessage("فیلد شهر سکونت حداقل 2 کرکتر می باشد", minLength(2)), + }, + postal_code: { + required: helpers.withMessage("فیلد کد پستی الزامی می باشد", required), + minLength: helpers.withMessage("فیلد کد پستی حداقل 10 کرکتر می باشد", minLength(10)), + }, + address: { + required: helpers.withMessage("فیلد آدرس کامل الزامی می باشد", required), + minLength: helpers.withMessage("فیلد آدرس کامل حداقل 2 کرکتر می باشد", minLength(2)), + }, + phone: { + required: helpers.withMessage("فیلد تلفن همراه الزامی می باشد", required), + minLength: helpers.withMessage("فیلد تلفن همراه حداقل 10 کرکتر می باشد", minLength(10)), + }, + }; +}); + +const formValidator$ = useVuelidate(formRules, addressData); + // queries const { data: account } = useGetAccount(); @@ -64,35 +95,42 @@ const closeModal = () => { is_main: false, }; } + formValidator$.value.$reset(); isShow.value = false; }; -const addNew = () => { - createOrUpdateAddress( - { ...addressData.value }, - { - onSuccess: () => { - queryClient.invalidateQueries({ - queryKey: [QUERY_KEYS.addresses], - }); - closeModal(); - addToast({ - message: isEditing.value ? "آدرس با موفقیت ویرایش شد" : "آدرس با موفقیت اضافه شد", - options: { - status: "success", - }, - }); - }, - onError: () => { - addToast({ - message: isEditing.value ? "آدرس با موفقیت ویرایش شد" : "مشکلی در افزودن آدرس رخ داد", - options: { - status: "error", - }, - }); - }, - } - ); +const handleSubmit = async () => { + await formValidator$.value.$validate(); + if (!formValidator$.value.$errors.length) { + createOrUpdateAddress( + { ...addressData.value }, + { + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: [QUERY_KEYS.addresses], + }); + queryClient.invalidateQueries({ + queryKey: [QUERY_KEYS.cart], + }); + closeModal(); + addToast({ + message: isEditing.value ? "آدرس با موفقیت ویرایش شد" : "آدرس با موفقیت اضافه شد", + options: { + status: "success", + }, + }); + }, + onError: () => { + addToast({ + message: isEditing.value ? "آدرس با موفقیت ویرایش شد" : "مشکلی در افزودن آدرس رخ داد", + options: { + status: "error", + }, + }); + }, + } + ); + } }; watch( @@ -122,9 +160,9 @@ watch(