From 9fbc3c44f745efb4ea8a5c119dde7027b65451d8 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 11 Sep 2025 09:22:34 +0700 Subject: fix address edit and create bug override --- src/lib/address/components/CreateAddress.jsx | 68 +++++++++++++--------------- src/lib/address/components/EditAddress.jsx | 66 +++++++++++++++------------ 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 ( -- cgit v1.2.3