summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2025-09-10 10:16:33 +0000
committerIT Fixcomart <it@fixcomart.co.id>2025-09-10 10:16:33 +0000
commit3c37a43c9870df2fd9134b05086427c8be8b794f (patch)
tree0dc9f73fd38d36d6a1ad99124f397a0b5e3f7548
parentc56b5adb52caf9cbb070966216e122fcbee0a624 (diff)
parentbd276355e5b2090628d3ad10e95f2c118e883ab2 (diff)
Merged in validation_address (pull request #462)
<hafid> fix address override
-rw-r--r--src/lib/address/components/CreateAddress.jsx71
-rw-r--r--src/lib/address/components/EditAddress.jsx54
-rw-r--r--src/lib/maps/components/PinPointMap.jsx13
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'