diff options
| author | it-fixcomart <it@fixcomart.co.id> | 2025-09-10 15:57:43 +0700 |
|---|---|---|
| committer | it-fixcomart <it@fixcomart.co.id> | 2025-09-10 15:57:43 +0700 |
| commit | bd276355e5b2090628d3ad10e95f2c118e883ab2 (patch) | |
| tree | 0dc9f73fd38d36d6a1ad99124f397a0b5e3f7548 | |
| parent | 2c3890956b9150ffcb8134f1aba5d99fdd895a66 (diff) | |
<hafid> fix address override
| -rw-r--r-- | src/lib/address/components/CreateAddress.jsx | 71 | ||||
| -rw-r--r-- | src/lib/address/components/EditAddress.jsx | 54 | ||||
| -rw-r--r-- | src/lib/maps/components/PinPointMap.jsx | 13 |
3 files changed, 82 insertions, 56 deletions
diff --git a/src/lib/address/components/CreateAddress.jsx b/src/lib/address/components/CreateAddress.jsx index fcfad056..68e72c62 100644 --- a/src/lib/address/components/CreateAddress.jsx +++ b/src/lib/address/components/CreateAddress.jsx @@ -58,30 +58,6 @@ const CreateAddress = () => { resetPin(); }, [resetPin]); - - useEffect(() => { - if (defaultValues?.zip) { - setValue("zip", defaultValues.zip); - } - - // set state/province - if (defaultValues?.province) { - const selectedState = states.find( - (state) => - defaultValues.province.includes(state.label) || - state.label.includes(defaultValues.province) - ); - if (selectedState) { - setValue("state", selectedState.value); - } - } - - // set street - if (defaultValues?.street) { - setValue("street", defaultValues.street); - } - }, [states, setValue, defaultValues]); - useEffect(() => { const loadState = async () => { let dataState = await stateApi({ tempo: false }); @@ -95,6 +71,20 @@ const CreateAddress = () => { setAddressMaps(''); }, []); + useEffect(() => { + if (detailAddress) { + setValue('zip', detailAddress.postalCode); + const selectedState = states.find( + (state) => + detailAddress?.province.includes(state.label) || + state.label.includes(detailAddress?.province) + ); + setValue('state', selectedState?.value); + setValue('street', detailAddress?.street); + + } + }, [detailAddress, setValue]); + const watchState = watch('state'); useEffect(() => { setValue('city', ''); @@ -130,6 +120,21 @@ const CreateAddress = () => { } }, [auth]); + useEffect(() => { + if (detailAddress && Object.keys(detailAddress).length > 0) { + const selectedCities = cities.find( + (city) => + detailAddress?.district + .toLowerCase() + .includes(city.label.toLowerCase()) || + city.label + .toLowerCase() + .includes(detailAddress?.district.toLowerCase()) + ); + setValue('city', selectedCities?.value); + } + }, [cities, detailAddress, setValue]); + const watchCity = watch('city'); useEffect(() => { setValue('district', ''); @@ -197,9 +202,23 @@ const CreateAddress = () => { useEffect(() => { const currentCity = cities.find((c) => c.value === watch("city"))?.label || ""; - setSelectedCityName(currentCity); - }, [watch("city"), cities]); + let normalized = currentCity.toLowerCase().trim(); + + const parts = normalized.split(" "); + + if (parts.length >= 3) { + // hapus prefix kabupaten/kota kalau ada + normalized = normalized + .replace(/^kabupaten\s+/i, "") + .replace(/^kota\s+/i, "") + .trim(); + } + + setSelectedCityName(normalized); + }, [watch("city"), cities]); + + console.log(selectedCityName); const onSubmitHandler = async (values) => { if (detailAddress?.district) { if ( diff --git a/src/lib/address/components/EditAddress.jsx b/src/lib/address/components/EditAddress.jsx index d9908726..d5f22670 100644 --- a/src/lib/address/components/EditAddress.jsx +++ b/src/lib/address/components/EditAddress.jsx @@ -121,7 +121,18 @@ const EditAddress = ({ id, defaultValues }) => { } }, [getValues, resetPin, setAddressMaps, setSelectedPosition]); - + useEffect(() => { + if (Object.keys(detailAddress).length > 0) { + setValue('zip', detailAddress.postalCode); + const selectedState = states.find( + (state) => + detailAddress?.province.includes(state.label) || + state.label.includes(detailAddress?.province) + ); + setValue('state', selectedState?.value); + setValue('street', detailAddress?.street); + } + }, [detailAddress, setValue]); useEffect(() => { const loadProfile = async () => { @@ -234,29 +245,24 @@ const EditAddress = ({ id, defaultValues }) => { loadDistricts(); } }, [watchCity, setValue, getValues]); - + useEffect(() => { if (!isPinned) return; // skip kalau belum pin - - // jangan override kalau form sudah punya nilai district if (getValues("district")) return; - if (Object.keys(detailAddress || {}).length > 0) { + if (Object.keys(detailAddress).length > 0) { const selectedDistrict = districts.find( (district) => - detailAddress?.subDistrict - ?.toLowerCase() + detailAddress.subDistrict + .toLowerCase() .includes(district.label.toLowerCase()) || district.label .toLowerCase() - .includes(detailAddress?.subDistrict?.toLowerCase()) + .includes(detailAddress.subDistrict.toLowerCase()) ); - - if (selectedDistrict) { - setValue("district", selectedDistrict.value); - } + setValue('district', selectedDistrict?.value); } - }, [districts, detailAddress, isPinned, getValues, setValue]); + }, [districts, detailAddress, setValue]); const watchDistrict = watch('district'); @@ -284,26 +290,22 @@ const EditAddress = ({ id, defaultValues }) => { useEffect(() => { if (!isPinned) return; // skip kalau belum pin - - // jangan override kalau form sudah punya nilai subDistrict if (getValues("subDistrict")) return; - - if (Object.keys(detailAddress || {}).length > 0) { + + if (Object.keys(detailAddress).length > 0) { const selectedSubDistrict = subDistricts.find( (district) => - detailAddress?.village - ?.toLowerCase() + detailAddress.village + .toLowerCase() .includes(district.label.toLowerCase()) || - district.label + district.label .toLowerCase() - .includes(detailAddress?.village?.toLowerCase()) - ); + .includes(detailAddress.village.toLowerCase()) + ); - if (selectedSubDistrict) { - setValue("subDistrict", selectedSubDistrict.value); - } + setValue('subDistrict', selectedSubDistrict?.value); } - }, [subDistricts, detailAddress, isPinned, getValues, setValue]); + }, [subDistricts, detailAddress, setValue]); useEffect(() => { if (id) { diff --git a/src/lib/maps/components/PinPointMap.jsx b/src/lib/maps/components/PinPointMap.jsx index 753f65c7..a9ead055 100644 --- a/src/lib/maps/components/PinPointMap.jsx +++ b/src/lib/maps/components/PinPointMap.jsx @@ -96,10 +96,15 @@ const PinpointLocation = ({ const formattedAddress = data.results[0].formatted_address; const details = { - // street: - // getAddressComponent(addressComponents, 'route') + - // ' ' + - // getAddressComponent(addressComponents, 'street_number'), + street: [ + getAddressComponent(addressComponents, 'route'), + getAddressComponent(addressComponents, 'street_number'), + getAddressComponent(addressComponents, 'administrative_area_level_4'), + getAddressComponent(addressComponents, 'administrative_area_level_3'), + getAddressComponent(addressComponents, 'administrative_area_level_2'), + getAddressComponent(addressComponents, 'administrative_area_level_1'), + getAddressComponent(addressComponents, 'postal_code'), + ].filter(Boolean).join(', '), province: getAddressComponent( addressComponents, 'administrative_area_level_1' |
