import HookFormSelect from "@/core/components/elements/Select/HookFormSelect" import useAuth from "@/core/hooks/useAuth" import { useRouter } from "next/router" import { Controller, useForm } from "react-hook-form" import * as Yup from "yup" import cityApi from "../api/cityApi" import districtApi from "../api/districtApi" import subDistrictApi from "../api/subDistrictApi" import { useEffect, useState } from "react" import createAddressApi from "../api/createAddressApi" import { toast } from "react-hot-toast" import { yupResolver } from "@hookform/resolvers/yup" const CreateAddress = () => { const auth = useAuth() const router = useRouter() const { register, formState: { errors }, handleSubmit, watch, setValue, control, } = useForm({ resolver: yupResolver(validationSchema), defaultValues }) const [ cities, setCities ] = useState([]) const [ districts, setDistricts ] = useState([]) const [ subDistricts, setSubDistricts ] = useState([]) useEffect(() => { const loadCities = async () => { let dataCities = await cityApi() dataCities = dataCities.map((city) => ({ value: city.id, label: city.name })) setCities(dataCities) } loadCities() }, []) const watchCity = watch('city') useEffect(() => { setValue('district', '') if (watchCity) { const loadDistricts = async () => { let dataDistricts = await districtApi({ cityId: watchCity }) dataDistricts = dataDistricts.map((district) => ({ value: district.id, label: district.name })) setDistricts(dataDistricts) } loadDistricts() } }, [ watchCity, setValue ]) const watchDistrict = watch('district') useEffect(() => { setValue('subDistrict', '') if (watchDistrict) { const loadSubDistricts = async () => { let dataSubDistricts = await subDistrictApi({ districtId: watchDistrict }) dataSubDistricts = dataSubDistricts.map((district) => ({ value: district.id, label: district.name })) setSubDistricts(dataSubDistricts) } loadSubDistricts() } }, [ watchDistrict, setValue ]) const onSubmitHandler = async (values) => { const data = { ...values, city_id: values.city, district_id: values.district, sub_district_id: values.subDistrict, parent_id: auth.partnerId } const address = await createAddressApi({ data }) if (address?.id) { toast.success('Berhasil menambahkan alamat') router.back() } } return (
} />
{ errors.type?.message }
{ errors.name?.message }
{ errors.email?.message }
{ errors.mobile?.message }
{ errors.street?.message }
{ errors.zip?.message }
} />
{ errors.city?.message }
( )} />
( )} />
) } const validationSchema = Yup.object().shape({ type: Yup.string().required('Harus di-pilih'), name: Yup.string().min(3, 'Minimal 3 karakter').required('Harus di-isi'), email: Yup.string().email('Format harus seperti contoh@email.com').required('Harus di-isi'), mobile: Yup.string().required('Harus di-isi'), street: Yup.string().required('Harus di-isi'), zip: Yup.string().required('Harus di-isi'), city: Yup.string().required('Harus di-pilih'), }) const defaultValues = { type: '', name: '', email: '', mobile: '', street: '', city: '', district: '', subDistrict: '', zip: '', } const types = [ { value: 'contact', label: 'Contact Address' }, { value: 'invoice', label: 'Invoice Address' }, { value: 'delivery', label: 'Delivery Address' }, { value: 'other', label: 'Other Address' }, ] export default CreateAddress