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 addressApi from '@/lib/address/api/addressApi'; 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'; import useAuth from '@/core/hooks/useAuth'; import odooApi from '@/core/api/odooApi'; import stateApi from '../api/stateApi'; const EditAddress = ({ id, defaultValues }) => { const auth = useAuth(); const router = useRouter(); const { register, formState: { errors }, handleSubmit, watch, setValue, getValues, control, } = useForm({ resolver: yupResolver(validationSchema), defaultValues, }); const [states, setStates] = useState([]); const [cities, setCities] = useState([]); const [districts, setDistricts] = useState([]); const [subDistricts, setSubDistricts] = useState([]); useEffect(() => { const loadProfile = async () => { const dataProfile = await addressApi({ id: auth.partnerId }); setValue('industry', dataProfile.industryId); setValue('companyType', dataProfile.companyTypeId); setValue('taxName', dataProfile.taxName); setValue('npwp', dataProfile.npwp); setValue('alamat_wajib_pajak', dataProfile.alamatWajibPajak); setValue('alamat_bisnis', dataProfile.alamatBisnis); setValue('business_name', dataProfile.name); setValue('city', dataProfile.city?.id); setValue('district', dataProfile.district?.id); setValue('subDistrict', dataProfile.subDistrict?.id); }; if (auth) loadProfile(); }, [auth?.parentId]); useEffect(() => { const loadStates = async () => { let dataStates = await stateApi({ tempo: false }); dataStates = dataStates.map((state) => ({ value: state.id, label: state.name, })); setStates(dataStates); }; loadStates(); }, []); const watchState = watch('state'); useEffect(() => { if (watchState) { setValue('city', ''); const loadCities = async () => { let dataCities = await cityApi({ stateId: watchState }); dataCities = dataCities.map((city) => ({ value: city.id, label: city.name, })); setCities(dataCities); let oldCity = getValues('oldCity'); if (oldCity) { setValue('city', oldCity); setValue('oldCity', ''); } }; loadCities(); } }, [watchState, setValue, getValues]); const watchCity = watch('city'); useEffect(() => { if (watchCity) { // setValue('district', ''); 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(() => { if (watchDistrict) { // setValue('subDistrict', ''); 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, phone: values.mobile, state_id: values.state, city_id: values.city, district_id: values.district, sub_district_id: values.subDistrict, }; if (!auth.company) { data.alamat_lengkap_text = values.street; } const address = await editAddressApi({ id, data }); let dataAlamat; let isUpdated = true; if (auth.company) { if (auth?.partnerId == id) { dataAlamat = { id_user: auth.partnerId, alamat_lengkap_text: values.alamat_wajib_pajak, street: values.street, }; isUpdated = await odooApi( 'PUT', `/api/v1/partner/${auth.parentId}`, dataAlamat ); } } // if (isUpdated?.id) { if (address?.id && (auth.company && auth?.partnerId == id ? isUpdated?.id : true)) { toast.success('Berhasil mengubah alamat'); router.back(); } else { toast.error('Terjadi kesalahan internal'); router.back(); } }; return ( <>

Ubah Alamat

{auth?.partnerId == id &&
Utama
}
( )} />
{errors.type?.message}
{errors.name?.message}
{errors.email?.message}
{errors.mobile?.message}
{errors.street?.message}
{errors.zip?.message}
( )} />
{errors.state?.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'), state: Yup.string().required('Harus di-pilih'), 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;