import { yupResolver } from '@hookform/resolvers/yup' import { useRouter } from 'next/router' import { useEffect, useState } from 'react' import * as Yup from 'yup' import cityApi from '../api/cityApi' import { Controller, useForm } from 'react-hook-form' import districtApi from '../api/districtApi' import subDistrictApi from '../api/subDistrictApi' import editAddressApi from '../api/editAddressApi' import HookFormSelect from '@/core/components/elements/Select/HookFormSelect' import { toast } from 'react-hot-toast' import Menu from '@/lib/auth/components/Menu' const EditAddress = ({ id, defaultValues }) => { const router = useRouter() const { register, formState: { errors }, handleSubmit, watch, setValue, getValues, 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) let oldDistrict = getValues('oldDistrict') if (oldDistrict) { setValue('district', oldDistrict) setValue('oldDistrict', '') } } loadDistricts() } }, [watchCity, setValue, getValues]) 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) let oldSubDistrict = getValues('oldSubDistrict') if (oldSubDistrict) { setValue('subDistrict', oldSubDistrict) setValue('oldSubDistrict', '') } } loadSubDistricts() } }, [watchDistrict, setValue, getValues]) const onSubmitHandler = async (values) => { const data = { ...values, city_id: values.city, district_id: values.district, sub_district_id: values.subDistrict } const address = await editAddressApi({ id, data }) if (address?.id) { toast.success('Berhasil mengubah alamat') router.back() } } return (

Ubah Alamat

( )} />
{errors.type?.message}
{errors.name?.message}
{errors.email?.message}
{errors.mobile?.message}
{errors.street?.message}
{errors.zip?.message}
} />
{errors.city?.message}
( )} />
{errors.district?.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 johndoe@example.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'), district: Yup.string().required('Harus di-pilih') }) const types = [ { value: 'contact', label: 'Contact Address' }, { value: 'invoice', label: 'Invoice Address' }, { value: 'delivery', label: 'Delivery Address' }, { value: 'other', label: 'Other Address' } ] export default EditAddress