summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2025-09-11 02:25:12 +0000
committerIT Fixcomart <it@fixcomart.co.id>2025-09-11 02:25:12 +0000
commit69a73a618f71c0d05b0bc7325c181515ecc67970 (patch)
treedfedd2e6a69a61a47952b2620e17d13d7a37ab84
parent3c37a43c9870df2fd9134b05086427c8be8b794f (diff)
parent9fbc3c44f745efb4ea8a5c119dde7027b65451d8 (diff)
Merged in validation_address (pull request #463)
<hafid> fix address edit and create bug override
-rw-r--r--src/lib/address/components/CreateAddress.jsx68
-rw-r--r--src/lib/address/components/EditAddress.jsx66
2 files changed, 68 insertions, 66 deletions
diff --git a/src/lib/address/components/CreateAddress.jsx b/src/lib/address/components/CreateAddress.jsx
index 68e72c62..23238d4b 100644
--- a/src/lib/address/components/CreateAddress.jsx
+++ b/src/lib/address/components/CreateAddress.jsx
@@ -53,6 +53,7 @@ const CreateAddress = () => {
const [showValidationPopup, setShowValidationPopup] = useState(false);
const [popupMessage, setPopupMessage] = useState("");
const [selectedCityName, setSelectedCityName] = useState("");
+ const [normalizedDistrict, setNormalizedDistrict] = useState("");
useEffect(() => {
resetPin();
@@ -71,12 +72,12 @@ const CreateAddress = () => {
setAddressMaps('');
}, []);
- useEffect(() => {
+ useEffect(() => {
if (detailAddress) {
setValue('zip', detailAddress.postalCode);
const selectedState = states.find(
(state) =>
- detailAddress?.province.includes(state.label) ||
+ (detailAddress?.province || "").includes(state.label) ||
state.label.includes(detailAddress?.province)
);
setValue('state', selectedState?.value);
@@ -120,18 +121,26 @@ const CreateAddress = () => {
}
}, [auth]);
+ const normalizeName = (name = "") => {
+ return name
+ .toLowerCase()
+ .replace(/\bkabupaten\b/gi, "")
+ .replace(/\bkota\b/gi, "")
+ .trim();
+ };
+
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);
+ if (detailAddress?.district) {
+ const normalizedDistrict = normalizeName(detailAddress.district);
+
+ const selectedCity = cities.find((city) => {
+ const normalizedCity = normalizeName(city.label);
+ return normalizedCity === normalizedDistrict;
+ });
+
+ if (selectedCity) {
+ setValue("city", selectedCity.value);
+ }
}
}, [cities, detailAddress, setValue]);
@@ -200,31 +209,18 @@ const CreateAddress = () => {
}
}, [subDistricts, detailAddress, setValue]);
- useEffect(() => {
- const currentCity = cities.find((c) => c.value === watch("city"))?.label || "";
-
- 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);
+
+ // console.log(selectedCityName, '=', normalizedDistrict);
const onSubmitHandler = async (values) => {
- if (detailAddress?.district) {
- if (
- selectedCityName &&
- selectedCityName.toLowerCase() !== detailAddress?.district?.toLowerCase()
- ) {
+ if (detailAddress) {
+ const cityName = normalizeName(
+ cities.find((c) => c.value === watch("city"))?.label || ""
+ );
+ const districtName = normalizeName(detailAddress?.district || "");
+ // console.log(cityName, '=', districtName);
+
+ if (cityName && cityName !== districtName) {
setPopupMessage("Titik Koordinat tidak sesuai dengan Kota yang dipilih");
setShowValidationPopup(true);
return;
diff --git a/src/lib/address/components/EditAddress.jsx b/src/lib/address/components/EditAddress.jsx
index d5f22670..75f1a89a 100644
--- a/src/lib/address/components/EditAddress.jsx
+++ b/src/lib/address/components/EditAddress.jsx
@@ -51,6 +51,7 @@ const EditAddress = ({ id, defaultValues }) => {
const [showValidationPopup, setShowValidationPopup] = useState(false);
const [popupMessage, setPopupMessage] = useState("");
const [selectedCityName, setSelectedCityName] = useState("");
+ const [normalizedDistrict, setNormalizedDistrict] = useState("");
const {
addressMaps,
@@ -61,6 +62,14 @@ const EditAddress = ({ id, defaultValues }) => {
getDefaultCenter, // penting untuk deteksi default center
} = useMaps();
+ const normalizeName = (name = "") => {
+ return name
+ .toLowerCase()
+ .replace(/\bkabupaten\b/gi, "")
+ .replace(/\bkota\b/gi, "")
+ .trim();
+ };
+
// Helper: cek apakah benar2 sudah PIN (bukan default center & ada addressMaps)
const isPinned = useMemo(() => {
if (!selectedPosition) return false;
@@ -149,24 +158,35 @@ const EditAddress = ({ id, defaultValues }) => {
}, [auth?.parentId, setValue]);
// Isi ZIP/Prov dari detailAddress (JANGAN isi street)
- useEffect(() => {
- const zip = getValues("zip");
- const province = getValues("state");
- if (!zip && defaultValues?.zip) {
+useEffect(() => {
+ const zip = getValues("zip");
+ const province = getValues("state");
+ const street = getValues("street");
+
+ // set zip dari DB kalau kosong
+ if (!zip && defaultValues?.zip) {
setValue("zip", defaultValues.zip);
}
- if (!getValues("state") && province) {
+ // set state dari DB kalau kosong
+ if (!province && defaultValues?.state) {
const selectedState = states.find(
(state) =>
- province.includes(state.label) || state.label.includes(province)
+ defaultValues.state.includes(state.label) ||
+ state.label.includes(defaultValues.state)
);
if (selectedState) {
setValue("state", selectedState.value);
}
}
+
+ // set street dari DB kalau kosong
+ if (!street && defaultValues?.street) {
+ setValue("street", defaultValues.street);
+ }
}, [states, setValue, getValues, defaultValues]);
+
useEffect(() => {
const loadStates = async () => {
let dataStates = await stateApi({ tempo: false });
@@ -313,38 +333,24 @@ const EditAddress = ({ id, defaultValues }) => {
}
}, [id, setValue]);
- useEffect(() => {
- const currentCity = cities.find((c) => c.value === watch("city"))?.label || "";
-
- 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(defaultValues);
-
- // console.log(selectedCityName, '=', detailAddress?.district);
const onSubmitHandler = async (values) => {
if (addressMaps) {
if (!detailAddress){
if (defaultValues?.oldCity !== values.city) {
setPopupMessage("Titik Koordinat tidak sesuai dengan Kota yang dipilih");
setShowValidationPopup(true);
- console.log(detailAddress)
+ // console.log(detailAddress)
return;
}
}
- if(detailAddress){
- if (selectedCityName && selectedCityName !== detailAddress?.district?.toLowerCase()) {
+ if (detailAddress) {
+ const cityName = normalizeName(
+ cities.find((c) => c.value === watch("city"))?.label || ""
+ );
+ const districtName = normalizeName(detailAddress?.district || "");
+ // console.log(cityName, '=', districtName);
+
+ if (cityName && cityName !== districtName) {
setPopupMessage("Titik Koordinat tidak sesuai dengan Kota yang dipilih");
setShowValidationPopup(true);
return;
@@ -433,7 +439,7 @@ const EditAddress = ({ id, defaultValues }) => {
}
const dataProfile = await addressApi({ id: auth.partnerId });
- console.log('ini adalah', dataProfile);
+ // console.log('ini adalah', dataProfile);
};
// console.log('ini adalah', detailAddress);
return (