const saveAddressUsingAddressHierarchy = async (nodeValue: string, nodeType: string) => {
if (!isKeyOfNewAddress(nodeType) || !nodeValue) return;
setLoading(true);
const fetchLocality = await fetchAddressUsingAddressHierarchy({ queryString: nodeValue, searchType: nodeType });
if (!fetchLocality.isSuccess) {
setNewAddress({
...newAddress,
city: '',
state: '',
country: '',
});
setDisableLocality(false);
} else {
let nodeFound = false;
const parentLevelNodes = [];
for (let i = 0; i < hierarchyData?.length; i += 1) {
const curNode = hierarchyData[i].location_key.toLowerCase();
if ((nodeFound || curNode === nodeType.toLocaleLowerCase()) && curNode in fetchLocality?.data) {
nodeFound = true;
parentLevelNodes.push({ key: hierarchyData[i].location_key, value: fetchLocality?.data[curNode] });
}
}
const fetchedAddressFieldsObj = parentLevelNodes?.reduce((acc, curr) => {
if (isKeyOfNewAddress(curr.key)) {
acc[curr.key] = curr.value || null;
if (curr.key !== nodeType && (!isAddressMappingAllowed && curr.value)) {
setDisableLocality(true, curr.key);
} else {
setDisableLocality(false, curr.key);
}
}
return acc;
}, {} as { [key: string]: string | null });
setNewAddress({
...newAddress,
...fetchedAddressFieldsObj,
});
}
setLoading(false);
}; |