Fix: fill create guilds form and submit data structure
This commit is contained in:
@@ -8,7 +8,7 @@ import {
|
|||||||
Dialog,
|
Dialog,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogActions
|
DialogActions,
|
||||||
} from "@mui/material";
|
} from "@mui/material";
|
||||||
import { Add as AddIcon } from "@mui/icons-material";
|
import { Add as AddIcon } from "@mui/icons-material";
|
||||||
import { Grid } from "../../../../components/grid/Grid";
|
import { Grid } from "../../../../components/grid/Grid";
|
||||||
@@ -22,10 +22,6 @@ import { provinceGetFieldOfWorks } from "../../services/ProvinceGetFieldOfWorks"
|
|||||||
import { provinceGetTypeActivity } from "../../services/provinceGetTypeActivity";
|
import { provinceGetTypeActivity } from "../../services/provinceGetTypeActivity";
|
||||||
import { provinceGetRegisterCodeStateService } from "../../services/province-get-register-code-state";
|
import { provinceGetRegisterCodeStateService } from "../../services/province-get-register-code-state";
|
||||||
import { mainGetGuildsForUpdateOrCreateService } from "../../services/main-get-guilds-for-update-or-create";
|
import { mainGetGuildsForUpdateOrCreateService } from "../../services/main-get-guilds-for-update-or-create";
|
||||||
import {
|
|
||||||
slaughterGetProvinceService,
|
|
||||||
slaughterGetCitiesService
|
|
||||||
} from "../../../slaughter-house/services/slaughter-get-provinces";
|
|
||||||
import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl";
|
import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl";
|
||||||
import { PersonalInfoSection } from "./components/PersonalInfoSection";
|
import { PersonalInfoSection } from "./components/PersonalInfoSection";
|
||||||
import { InquiryForm } from "./components/InquiryForm";
|
import { InquiryForm } from "./components/InquiryForm";
|
||||||
@@ -36,7 +32,7 @@ import { GuildInfoAccordionItem } from "./components/GuildInfoAccordionItem";
|
|||||||
import { getValidationSchema, getInitialValues } from "./utils/formUtils";
|
import { getValidationSchema, getInitialValues } from "./utils/formUtils";
|
||||||
import {
|
import {
|
||||||
mapResponseDataToFormFields,
|
mapResponseDataToFormFields,
|
||||||
prepareSubmitData
|
prepareSubmitData,
|
||||||
} from "./utils/dataMapping";
|
} from "./utils/dataMapping";
|
||||||
import { handleSubmitSuccess, handleSubmitError } from "./utils/submitHandlers";
|
import { handleSubmitSuccess, handleSubmitError } from "./utils/submitHandlers";
|
||||||
|
|
||||||
@@ -91,8 +87,6 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
return [];
|
return [];
|
||||||
});
|
});
|
||||||
const [cities, setCities] = useState([]);
|
const [cities, setCities] = useState([]);
|
||||||
const [provinces, setProvinces] = useState([]);
|
|
||||||
const [provinceCities, setProvinceCities] = useState([]);
|
|
||||||
const [typeActivities, setTypeActivities] = useState([]);
|
const [typeActivities, setTypeActivities] = useState([]);
|
||||||
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
|
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
|
||||||
const [deleteDialogIndex, setDeleteDialogIndex] = useState(null);
|
const [deleteDialogIndex, setDeleteDialogIndex] = useState(null);
|
||||||
@@ -119,11 +113,14 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
gender: values?.gender,
|
gender: values?.gender,
|
||||||
first_name: values?.first_name,
|
first_name: values?.first_name,
|
||||||
last_name: values?.last_name,
|
last_name: values?.last_name,
|
||||||
national_code: values?.last_name,
|
national_code: values?.national_code,
|
||||||
is_alive: values?.is_alive,
|
is_alive: values?.is_alive,
|
||||||
birth_date: values?.birth_date,
|
birth_date: values?.birth_date,
|
||||||
father_name: values?.father_name,
|
father_name: values?.father_name,
|
||||||
mobile: values?.mobile
|
mobile: values?.mobile,
|
||||||
|
// Personal info city: always use current selection (guild section has city_name only)
|
||||||
|
person_city: values?.person_city,
|
||||||
|
city: values?.city,
|
||||||
};
|
};
|
||||||
return prepareSubmitData(
|
return prepareSubmitData(
|
||||||
combinedValues,
|
combinedValues,
|
||||||
@@ -137,18 +134,31 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
(result) => {
|
(result) => {
|
||||||
if (result.payload.error) {
|
if (result.payload.error) {
|
||||||
handleSubmitError(openNotif, result.payload.error);
|
handleSubmitError(openNotif, result.payload.error);
|
||||||
} else {
|
return;
|
||||||
handleSubmitSuccess(
|
|
||||||
dispatch,
|
|
||||||
openNotif,
|
|
||||||
updateTable,
|
|
||||||
values,
|
|
||||||
result.payload?.data
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
const data = result.payload?.data;
|
||||||
|
const hasPayloadErrors =
|
||||||
|
data?.error_count > 0 || (data?.errors?.length ?? 0) > 0;
|
||||||
|
if (hasPayloadErrors && data?.errors?.length > 0) {
|
||||||
|
const firstError = data.errors[0];
|
||||||
|
const message =
|
||||||
|
typeof firstError === "string"
|
||||||
|
? firstError
|
||||||
|
: firstError?.result || firstError?.message || "خطا در ثبت";
|
||||||
|
handleSubmitError(openNotif, message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
handleSubmitSuccess(
|
||||||
|
dispatch,
|
||||||
|
|
||||||
|
openNotif,
|
||||||
|
updateTable,
|
||||||
|
values,
|
||||||
|
data
|
||||||
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -166,12 +176,6 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
dispatch(provinceGetTypeActivity()).then((r) => {
|
dispatch(provinceGetTypeActivity()).then((r) => {
|
||||||
setTypeActivities(r.payload.data || []);
|
setTypeActivities(r.payload.data || []);
|
||||||
});
|
});
|
||||||
// Fetch provinces for province/city selection
|
|
||||||
dispatch(slaughterGetProvinceService()).then((r) => {
|
|
||||||
if (r?.payload?.data) {
|
|
||||||
setProvinces(r.payload.data);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -180,13 +184,13 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
const guildsForFormik = guildsList.map((guildItem) => {
|
const guildsForFormik = guildsList.map((guildItem) => {
|
||||||
const combinedGuild = {
|
const combinedGuild = {
|
||||||
...guildItem,
|
...guildItem,
|
||||||
user: guild?.user || {}
|
user: guild?.user || {},
|
||||||
};
|
};
|
||||||
const initialValues = getInitialValues(combinedGuild);
|
const initialValues = getInitialValues(combinedGuild);
|
||||||
return {
|
return {
|
||||||
steward: initialValues.steward || false,
|
steward: initialValues.steward || false,
|
||||||
guild: initialValues.guild || false,
|
guild: initialValues.guild || false,
|
||||||
license_number: initialValues.license_number ?? ""
|
license_number: initialValues.license_number ?? "",
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
formik.setFieldValue("guilds", guildsForFormik, false).then(() => {
|
formik.setFieldValue("guilds", guildsForFormik, false).then(() => {
|
||||||
@@ -196,51 +200,18 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
formik.validateForm();
|
formik.validateForm();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// Set province ID from state name when provinces are loaded
|
// Set city key from person_city name when cities are loaded (e.g. from DB/edit)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (
|
if (formik.values.person_city && !formik.values.city && cities.length > 0) {
|
||||||
formik.values.state &&
|
const city = cities.find(
|
||||||
provinces.length > 0 &&
|
(c) =>
|
||||||
!formik.values.province
|
(c.name || "").trim() === (formik.values.person_city || "").trim()
|
||||||
) {
|
|
||||||
const province = provinces.find((p) => p.name === formik.values.state);
|
|
||||||
if (province) {
|
|
||||||
formik.setFieldValue("province", province.key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, [provinces, formik.values.state, formik.values.province]);
|
|
||||||
|
|
||||||
// Fetch cities when province is selected (slaughter API uses province name)
|
|
||||||
useEffect(() => {
|
|
||||||
if (formik.values.province) {
|
|
||||||
const provinceName =
|
|
||||||
provinces.find((p) => p.key === formik.values.province)?.name ||
|
|
||||||
formik.values.province;
|
|
||||||
dispatch(slaughterGetCitiesService(provinceName)).then((r) => {
|
|
||||||
if (r?.payload?.data) {
|
|
||||||
setProvinceCities(r.payload.data);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
setProvinceCities([]);
|
|
||||||
}
|
|
||||||
}, [formik.values.province, provinces, dispatch]);
|
|
||||||
|
|
||||||
// Set city ID from person_city name when provinceCities are loaded
|
|
||||||
useEffect(() => {
|
|
||||||
if (
|
|
||||||
formik.values.person_city &&
|
|
||||||
!formik.values.city &&
|
|
||||||
provinceCities.length > 0
|
|
||||||
) {
|
|
||||||
const city = provinceCities.find(
|
|
||||||
(c) => c.name === formik.values.person_city
|
|
||||||
);
|
);
|
||||||
if (city) {
|
if (city) {
|
||||||
formik.setFieldValue("city", city.key);
|
formik.setFieldValue("city", city.key ?? city.id ?? "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [provinceCities, formik.values.person_city, formik.values.city]);
|
}, [cities, formik.values.person_city, formik.values.city]);
|
||||||
|
|
||||||
const mapResponseToFormFields = useCallback(
|
const mapResponseToFormFields = useCallback(
|
||||||
(responseData) => {
|
(responseData) => {
|
||||||
@@ -267,7 +238,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
const initialGuildValues = guildsData.map((guildItem) => {
|
const initialGuildValues = guildsData.map((guildItem) => {
|
||||||
const combinedGuild = {
|
const combinedGuild = {
|
||||||
...guildItem,
|
...guildItem,
|
||||||
user: responseData.user || {}
|
user: responseData.user || {},
|
||||||
};
|
};
|
||||||
return getInitialValues(combinedGuild);
|
return getInitialValues(combinedGuild);
|
||||||
});
|
});
|
||||||
@@ -277,7 +248,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
const guildsForFormik = initialGuildValues.map((g) => ({
|
const guildsForFormik = initialGuildValues.map((g) => ({
|
||||||
steward: g.steward ?? false,
|
steward: g.steward ?? false,
|
||||||
guild: g.guild ?? false,
|
guild: g.guild ?? false,
|
||||||
license_number: g.license_number ?? ""
|
license_number: g.license_number ?? "",
|
||||||
}));
|
}));
|
||||||
formik.setFieldValue("guilds", guildsForFormik, true).then(() => {
|
formik.setFieldValue("guilds", guildsForFormik, true).then(() => {
|
||||||
formik.validateField("guilds");
|
formik.validateField("guilds");
|
||||||
@@ -307,7 +278,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
vertical: "top",
|
vertical: "top",
|
||||||
horizontal: "center",
|
horizontal: "center",
|
||||||
msg: "لطفا کد ملی را وارد کنید",
|
msg: "لطفا کد ملی را وارد کنید",
|
||||||
severity: "error"
|
severity: "error",
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -317,7 +288,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
vertical: "top",
|
vertical: "top",
|
||||||
horizontal: "center",
|
horizontal: "center",
|
||||||
msg: "لطفا کد ملی 10 رقمی معتبر وارد کنید",
|
msg: "لطفا کد ملی 10 رقمی معتبر وارد کنید",
|
||||||
severity: "error"
|
severity: "error",
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -325,7 +296,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
dispatch(
|
dispatch(
|
||||||
mainGetGuildsForUpdateOrCreateService({
|
mainGetGuildsForUpdateOrCreateService({
|
||||||
national_code: inquiryNationalCode,
|
national_code: inquiryNationalCode,
|
||||||
update: false
|
update: false,
|
||||||
})
|
})
|
||||||
).then((r) => {
|
).then((r) => {
|
||||||
if (r.payload.error) {
|
if (r.payload.error) {
|
||||||
@@ -338,7 +309,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
vertical: "top",
|
vertical: "top",
|
||||||
horizontal: "center",
|
horizontal: "center",
|
||||||
msg: r.payload.error,
|
msg: r.payload.error,
|
||||||
severity: "error"
|
severity: "error",
|
||||||
});
|
});
|
||||||
if (!isAdmin) {
|
if (!isAdmin) {
|
||||||
return;
|
return;
|
||||||
@@ -362,7 +333,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
vertical: "top",
|
vertical: "top",
|
||||||
horizontal: "center",
|
horizontal: "center",
|
||||||
msg: successMsg,
|
msg: successMsg,
|
||||||
severity: "success"
|
severity: "success",
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setHasInquiry(false);
|
setHasInquiry(false);
|
||||||
@@ -378,7 +349,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
openNotif,
|
openNotif,
|
||||||
mapResponseToFormFields,
|
mapResponseToFormFields,
|
||||||
isAdmin,
|
isAdmin,
|
||||||
formik
|
formik,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const handleUpdateFromExternal = useCallback(() => {
|
const handleUpdateFromExternal = useCallback(() => {
|
||||||
@@ -387,7 +358,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
vertical: "top",
|
vertical: "top",
|
||||||
horizontal: "center",
|
horizontal: "center",
|
||||||
msg: "لطفا کد ملی 10 رقمی معتبر وارد کنید",
|
msg: "لطفا کد ملی 10 رقمی معتبر وارد کنید",
|
||||||
severity: "error"
|
severity: "error",
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -395,7 +366,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
dispatch(
|
dispatch(
|
||||||
mainGetGuildsForUpdateOrCreateService({
|
mainGetGuildsForUpdateOrCreateService({
|
||||||
national_code: formik.values.national_id,
|
national_code: formik.values.national_id,
|
||||||
update: true
|
update: true,
|
||||||
})
|
})
|
||||||
).then((r) => {
|
).then((r) => {
|
||||||
if (r.payload.error) {
|
if (r.payload.error) {
|
||||||
@@ -404,7 +375,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
vertical: "top",
|
vertical: "top",
|
||||||
horizontal: "center",
|
horizontal: "center",
|
||||||
msg: r.payload.error,
|
msg: r.payload.error,
|
||||||
severity: "error"
|
severity: "error",
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -412,7 +383,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
if (r.payload.data) {
|
if (r.payload.data) {
|
||||||
const updateResponse = {
|
const updateResponse = {
|
||||||
...r.payload.data,
|
...r.payload.data,
|
||||||
dbRegister: false
|
dbRegister: false,
|
||||||
};
|
};
|
||||||
mapResponseToFormFields(updateResponse);
|
mapResponseToFormFields(updateResponse);
|
||||||
setHasInquiry(true);
|
setHasInquiry(true);
|
||||||
@@ -421,7 +392,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
vertical: "top",
|
vertical: "top",
|
||||||
horizontal: "center",
|
horizontal: "center",
|
||||||
msg: "اطلاعات از سامانه خارجی بروزرسانی شد",
|
msg: "اطلاعات از سامانه خارجی بروزرسانی شد",
|
||||||
severity: "success"
|
severity: "success",
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setHasInquiry(false);
|
setHasInquiry(false);
|
||||||
@@ -497,14 +468,14 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
vertical: "top",
|
vertical: "top",
|
||||||
horizontal: "center",
|
horizontal: "center",
|
||||||
msg: r.payload.error,
|
msg: r.payload.error,
|
||||||
severity: "error"
|
severity: "error",
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
openNotif({
|
openNotif({
|
||||||
vertical: "top",
|
vertical: "top",
|
||||||
horizontal: "center",
|
horizontal: "center",
|
||||||
msg: "صنف با موفقیت حذف شد",
|
msg: "صنف با موفقیت حذف شد",
|
||||||
severity: "success"
|
severity: "success",
|
||||||
});
|
});
|
||||||
// Remove from list after successful deletion
|
// Remove from list after successful deletion
|
||||||
if (guildsList.length > 1) {
|
if (guildsList.length > 1) {
|
||||||
@@ -556,7 +527,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
}
|
}
|
||||||
newValues[index] = {
|
newValues[index] = {
|
||||||
...newValues[index],
|
...newValues[index],
|
||||||
[fieldName]: value
|
[fieldName]: value,
|
||||||
};
|
};
|
||||||
return newValues;
|
return newValues;
|
||||||
});
|
});
|
||||||
@@ -574,7 +545,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
}
|
}
|
||||||
updatedGuilds[index] = {
|
updatedGuilds[index] = {
|
||||||
...updatedGuilds[index],
|
...updatedGuilds[index],
|
||||||
[fieldName]: value
|
[fieldName]: value,
|
||||||
};
|
};
|
||||||
formik.setFieldValue("guilds", updatedGuilds, true).then(() => {
|
formik.setFieldValue("guilds", updatedGuilds, true).then(() => {
|
||||||
formik.validateField("guilds");
|
formik.validateField("guilds");
|
||||||
@@ -615,8 +586,8 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
: {
|
: {
|
||||||
xs: "96vw",
|
xs: "96vw",
|
||||||
md: "90vw",
|
md: "90vw",
|
||||||
nlg: "1280px"
|
nlg: "1280px",
|
||||||
}
|
},
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{shouldShowUpdateButton && (
|
{shouldShowUpdateButton && (
|
||||||
@@ -645,9 +616,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
isAdmin={isAdmin}
|
isAdmin={isAdmin}
|
||||||
isSuperAdmin={isSuperAdmin}
|
isSuperAdmin={isSuperAdmin}
|
||||||
isKillHouse={isKillHouse}
|
isKillHouse={isKillHouse}
|
||||||
provinces={provinces}
|
cities={cities}
|
||||||
provinceCities={provinceCities}
|
|
||||||
guildsList={guildsList}
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Grid
|
<Grid
|
||||||
@@ -673,9 +642,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
guildActive={guildActive}
|
guildActive={guildActive}
|
||||||
isAdmin={isAdmin}
|
isAdmin={isAdmin}
|
||||||
isSuperAdmin={isSuperAdmin}
|
isSuperAdmin={isSuperAdmin}
|
||||||
cities={
|
cities={cities}
|
||||||
provinceCities.length > 0 ? provinceCities : cities
|
|
||||||
}
|
|
||||||
typeActivities={typeActivities}
|
typeActivities={typeActivities}
|
||||||
onDelete={() => handleDeleteGuild(index)}
|
onDelete={() => handleDeleteGuild(index)}
|
||||||
canDelete={
|
canDelete={
|
||||||
@@ -734,7 +701,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
|
|||||||
formData={guildsList.map((guildItem, index) => {
|
formData={guildsList.map((guildItem, index) => {
|
||||||
const guildValues = guildsFormValues[index];
|
const guildValues = guildsFormValues[index];
|
||||||
const combinedValues = {
|
const combinedValues = {
|
||||||
...guildValues // Guild-specific info (overrides if same keys exist)
|
...guildValues, // Guild-specific info (overrides if same keys exist)
|
||||||
};
|
};
|
||||||
return prepareSubmitData(
|
return prepareSubmitData(
|
||||||
combinedValues,
|
combinedValues,
|
||||||
|
|||||||
@@ -161,25 +161,30 @@ export const GuildInfoSection = ({
|
|||||||
options={
|
options={
|
||||||
cities
|
cities
|
||||||
? cities.map((i) => ({
|
? cities.map((i) => ({
|
||||||
id: i.key,
|
id: i.id ?? i.key,
|
||||||
label: i.name,
|
label: i.name,
|
||||||
}))
|
}))
|
||||||
: []
|
: []
|
||||||
}
|
}
|
||||||
value={
|
value={(() => {
|
||||||
cities.find((c) => c.name === formik.values.city_name)
|
const c = cities?.find(
|
||||||
? {
|
(c) => c.name === formik.values.city_name
|
||||||
id: cities.find(
|
);
|
||||||
(c) => c.name === formik.values.city_name
|
if (c)
|
||||||
)?.key,
|
return {
|
||||||
label: formik.values.city_name,
|
id: c.id ?? c.key,
|
||||||
}
|
label: formik.values.city_name,
|
||||||
: formik.values.city_name
|
};
|
||||||
? {
|
|
||||||
id: null,
|
if (formik.values.city_name)
|
||||||
label: formik.values.city_name,
|
return {
|
||||||
}
|
id: null,
|
||||||
: null
|
label: formik.values.city_name,
|
||||||
|
};
|
||||||
|
return null;
|
||||||
|
})()}
|
||||||
|
isOptionEqualToValue={(a, b) =>
|
||||||
|
a?.id === b?.id || a?.label === b?.label
|
||||||
}
|
}
|
||||||
onChange={(e, value) => {
|
onChange={(e, value) => {
|
||||||
formik.setFieldValue("city_name", value ? value.label : "");
|
formik.setFieldValue("city_name", value ? value.label : "");
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import CakeIcon from "@mui/icons-material/Cake";
|
|||||||
import FaceIcon from "@mui/icons-material/Face";
|
import FaceIcon from "@mui/icons-material/Face";
|
||||||
import LocationCityIcon from "@mui/icons-material/LocationCity";
|
import LocationCityIcon from "@mui/icons-material/LocationCity";
|
||||||
import FavoriteIcon from "@mui/icons-material/Favorite";
|
import FavoriteIcon from "@mui/icons-material/Favorite";
|
||||||
import PublicIcon from "@mui/icons-material/Public";
|
|
||||||
import { Grid } from "../../../../../components/grid/Grid";
|
import { Grid } from "../../../../../components/grid/Grid";
|
||||||
import { SPACING } from "../../../../../data/spacing";
|
import { SPACING } from "../../../../../data/spacing";
|
||||||
import { LabelField } from "../../../../../components/label-field/LabelField";
|
import { LabelField } from "../../../../../components/label-field/LabelField";
|
||||||
@@ -35,8 +34,7 @@ export const PersonalInfoSection = ({
|
|||||||
isAdmin,
|
isAdmin,
|
||||||
isSuperAdmin,
|
isSuperAdmin,
|
||||||
isKillHouse,
|
isKillHouse,
|
||||||
provinces = [],
|
cities = [],
|
||||||
provinceCities = [],
|
|
||||||
}) => {
|
}) => {
|
||||||
const getGenderDisplay = (gender) => {
|
const getGenderDisplay = (gender) => {
|
||||||
if (gender === "True" || gender === true) return GENDER_VALUES.MALE;
|
if (gender === "True" || gender === true) return GENDER_VALUES.MALE;
|
||||||
@@ -307,55 +305,6 @@ export const PersonalInfoSection = ({
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12}>
|
|
||||||
{isAdmin ? (
|
|
||||||
<Autocomplete
|
|
||||||
size="small"
|
|
||||||
style={{ width: "100%" }}
|
|
||||||
disablePortal
|
|
||||||
id="province"
|
|
||||||
options={
|
|
||||||
provinces
|
|
||||||
? provinces.map((i) => ({
|
|
||||||
id: i.key,
|
|
||||||
label: i.name,
|
|
||||||
}))
|
|
||||||
: []
|
|
||||||
}
|
|
||||||
value={
|
|
||||||
provinces.find((p) => p.key === formik.values.province)
|
|
||||||
? {
|
|
||||||
id: formik.values.province,
|
|
||||||
label:
|
|
||||||
provinces.find(
|
|
||||||
(p) => p.key === formik.values.province
|
|
||||||
)?.name || "",
|
|
||||||
}
|
|
||||||
: null
|
|
||||||
}
|
|
||||||
onChange={(e, value) => {
|
|
||||||
formik.setFieldValue("province", value ? value.id : "");
|
|
||||||
formik.setFieldValue("city", "");
|
|
||||||
formik.setFieldValue("person_city", "");
|
|
||||||
}}
|
|
||||||
disabled={guild}
|
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField {...params} label="استان" />
|
|
||||||
)}
|
|
||||||
/>
|
|
||||||
) : (
|
|
||||||
<InfoBox
|
|
||||||
icon={PublicIcon}
|
|
||||||
label="استان"
|
|
||||||
value={
|
|
||||||
provinces.find((p) => p.key === formik.values.province)
|
|
||||||
?.name ||
|
|
||||||
formik.values.state ||
|
|
||||||
"-"
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12}>
|
<Grid item xs={12}>
|
||||||
{isAdmin ? (
|
{isAdmin ? (
|
||||||
<Autocomplete
|
<Autocomplete
|
||||||
@@ -363,31 +312,31 @@ export const PersonalInfoSection = ({
|
|||||||
style={{ width: "100%" }}
|
style={{ width: "100%" }}
|
||||||
disablePortal
|
disablePortal
|
||||||
id="city"
|
id="city"
|
||||||
disabled={!formik.values.province}
|
|
||||||
options={
|
options={
|
||||||
provinceCities
|
cities
|
||||||
? provinceCities.map((i) => ({
|
? cities.map((i) => ({
|
||||||
id: i.key,
|
id: i.key ?? i.id,
|
||||||
label: i.name,
|
label: i.name,
|
||||||
}))
|
}))
|
||||||
: []
|
: []
|
||||||
}
|
}
|
||||||
value={
|
value={(() => {
|
||||||
provinceCities.find((c) => c.key === formik.values.city)
|
const c = cities.find(
|
||||||
? {
|
(c) => (c.key ?? c.id) === formik.values.city
|
||||||
id: formik.values.city,
|
);
|
||||||
label:
|
if (c)
|
||||||
provinceCities.find(
|
return {
|
||||||
(c) => c.key === formik.values.city
|
id: c.key ?? c.id,
|
||||||
)?.name || "",
|
label: c.name,
|
||||||
}
|
};
|
||||||
: formik.values.person_city
|
if (formik.values.person_city)
|
||||||
? {
|
return {
|
||||||
id: null,
|
id: null,
|
||||||
label: formik.values.person_city,
|
label: formik.values.person_city,
|
||||||
}
|
};
|
||||||
: null
|
return null;
|
||||||
}
|
})()}
|
||||||
|
isOptionEqualToValue={(a, b) => a?.id === b?.id}
|
||||||
onChange={(e, value) => {
|
onChange={(e, value) => {
|
||||||
formik.setFieldValue("city", value ? value.id : "");
|
formik.setFieldValue("city", value ? value.id : "");
|
||||||
formik.setFieldValue(
|
formik.setFieldValue(
|
||||||
@@ -404,7 +353,7 @@ export const PersonalInfoSection = ({
|
|||||||
icon={LocationCityIcon}
|
icon={LocationCityIcon}
|
||||||
label="شهر"
|
label="شهر"
|
||||||
value={
|
value={
|
||||||
provinceCities.find((c) => c.key === formik.values.city)
|
cities.find((c) => (c.key ?? c.id) === formik.values.city)
|
||||||
?.name ||
|
?.name ||
|
||||||
formik.values.person_city ||
|
formik.values.person_city ||
|
||||||
"-"
|
"-"
|
||||||
|
|||||||
@@ -1,34 +1,8 @@
|
|||||||
/**
|
|
||||||
* Data Mapping Utilities for Create Guilds Form
|
|
||||||
*
|
|
||||||
* This module handles mapping data from three different sources:
|
|
||||||
*
|
|
||||||
* 1. EDIT MODE: Guild data passed directly as prop when editing existing guild
|
|
||||||
* - Handled by: getInitialValues() in formUtils.js
|
|
||||||
* - Data structure: guild object with nested user and address objects
|
|
||||||
*
|
|
||||||
* 2. DATABASE INQUIRY: Inquiry by national code returns data from our database
|
|
||||||
* - Handled by: extractFormFieldsFromDatabaseInquiry()
|
|
||||||
* - Condition: responseData.dbRegister === true
|
|
||||||
* - Data structure: responseData.user, responseData.guilds[] with nested address
|
|
||||||
*
|
|
||||||
* 3. EXTERNAL API INQUIRY: Inquiry by national code returns data from external system
|
|
||||||
* - Handled by: extractFormFieldsFromExternalApi()
|
|
||||||
* - Condition: responseData.dbRegister === false
|
|
||||||
* - Data structure: responseData.user, responseData.guilds[] with layerTwo object
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { getRoleFromUrl } from "../../../../../utils/getRoleFromUrl";
|
import { getRoleFromUrl } from "../../../../../utils/getRoleFromUrl";
|
||||||
import { normalizeExternalApiDate, normalizeDatabaseDate } from "./dateUtils";
|
import { normalizeExternalApiDate, normalizeDatabaseDate } from "./dateUtils";
|
||||||
import { formatDateForSubmit } from "./dateUtils";
|
import { formatDateForSubmit } from "./dateUtils";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepares form data for submission to the API
|
|
||||||
*
|
|
||||||
* Three data sources can provide the initial data:
|
|
||||||
* 1. Edit mode: Guild data passed as prop (guild parameter)
|
|
||||||
* 2. Database inquiry: Inquiry returns data from our database (hasInquiry === false)
|
|
||||||
* 3. External API inquiry: Inquiry returns data from external system (hasInquiry === true)
|
|
||||||
*
|
*
|
||||||
* @param {Object} values - Form values from Formik
|
* @param {Object} values - Form values from Formik
|
||||||
* @param {Object} guild - Guild data when editing existing guild (edit mode)
|
* @param {Object} guild - Guild data when editing existing guild (edit mode)
|
||||||
@@ -58,12 +32,8 @@ export const prepareSubmitData = (
|
|||||||
values.birth_date || "",
|
values.birth_date || "",
|
||||||
hasInquiry === true
|
hasInquiry === true
|
||||||
),
|
),
|
||||||
// city is for user info (personal info) - use person_city from personal info
|
city: values.person_city || "",
|
||||||
city: values.person_city || values.city || "",
|
|
||||||
// city_name is for guild info
|
|
||||||
city_name: values.city_name || "",
|
city_name: values.city_name || "",
|
||||||
// province is stored as ID when selected, or as name from state field
|
|
||||||
province: values.province || "",
|
|
||||||
address: values.address || "",
|
address: values.address || "",
|
||||||
postalcode: values.postal_code || "",
|
postalcode: values.postal_code || "",
|
||||||
licenseNumber: values.license_number || "",
|
licenseNumber: values.license_number || "",
|
||||||
@@ -87,7 +57,7 @@ export const prepareSubmitData = (
|
|||||||
title: values.guild_name || "",
|
title: values.guild_name || "",
|
||||||
role: getRoleFromUrl(),
|
role: getRoleFromUrl(),
|
||||||
has_inquiry: hasInquiry !== null ? hasInquiry : false,
|
has_inquiry: hasInquiry !== null ? hasInquiry : false,
|
||||||
...(values.active !== null && { active: values.active })
|
...(values.active !== null && { active: values.active }),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (guild) {
|
if (guild) {
|
||||||
@@ -101,10 +71,6 @@ export const prepareSubmitData = (
|
|||||||
return baseData;
|
return baseData;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts form field values from database inquiry response
|
|
||||||
* Data source: Inquiry national code which returns data from our database (dbRegister === true)
|
|
||||||
*/
|
|
||||||
const extractFormFieldsFromDatabaseInquiry = (
|
const extractFormFieldsFromDatabaseInquiry = (
|
||||||
responseDataFromDb,
|
responseDataFromDb,
|
||||||
inquiryNationalCode
|
inquiryNationalCode
|
||||||
@@ -116,8 +82,6 @@ const extractFormFieldsFromDatabaseInquiry = (
|
|||||||
? responseDataFromDb.guilds[0]
|
? responseDataFromDb.guilds[0]
|
||||||
: {};
|
: {};
|
||||||
const addressFromDb = firstGuildFromDb?.address || {};
|
const addressFromDb = firstGuildFromDb?.address || {};
|
||||||
const provinceFromDb = addressFromDb.province || {};
|
|
||||||
const cityFromDb = addressFromDb.city || {};
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
// Personal Information Fields
|
// Personal Information Fields
|
||||||
@@ -128,7 +92,9 @@ const extractFormFieldsFromDatabaseInquiry = (
|
|||||||
birth_date: normalizeDatabaseDate(userFromDb.birthday || ""),
|
birth_date: normalizeDatabaseDate(userFromDb.birthday || ""),
|
||||||
father_name: userFromDb.fatherName || "",
|
father_name: userFromDb.fatherName || "",
|
||||||
gender: userFromDb.gender || "",
|
gender: userFromDb.gender || "",
|
||||||
|
|
||||||
person_city: userFromDb.city || "",
|
person_city: userFromDb.city || "",
|
||||||
|
city: "",
|
||||||
is_alive:
|
is_alive:
|
||||||
userFromDb.isAlive === false
|
userFromDb.isAlive === false
|
||||||
? "خیر"
|
? "خیر"
|
||||||
@@ -140,9 +106,6 @@ const extractFormFieldsFromDatabaseInquiry = (
|
|||||||
// Guild Information Fields
|
// Guild Information Fields
|
||||||
guild_name: firstGuildFromDb.guildsName || "",
|
guild_name: firstGuildFromDb.guildsName || "",
|
||||||
area_activity: firstGuildFromDb.areaActivity || "",
|
area_activity: firstGuildFromDb.areaActivity || "",
|
||||||
state: provinceFromDb.name || "",
|
|
||||||
province: provinceFromDb.key || "",
|
|
||||||
city: cityFromDb.key || "",
|
|
||||||
address: addressFromDb.address || "",
|
address: addressFromDb.address || "",
|
||||||
license_expire_date: normalizeDatabaseDate(
|
license_expire_date: normalizeDatabaseDate(
|
||||||
firstGuildFromDb.licenseExpireDate || ""
|
firstGuildFromDb.licenseExpireDate || ""
|
||||||
@@ -156,7 +119,13 @@ const extractFormFieldsFromDatabaseInquiry = (
|
|||||||
union_name: firstGuildFromDb.unionName || "",
|
union_name: firstGuildFromDb.unionName || "",
|
||||||
postal_code: addressFromDb.postalCode || "",
|
postal_code: addressFromDb.postalCode || "",
|
||||||
phone_number: firstGuildFromDb.phoneNumber || "",
|
phone_number: firstGuildFromDb.phoneNumber || "",
|
||||||
guild_national_id: firstGuildFromDb.nationalCode || "",
|
// nationalId (شناسه ملی شرکت) comes from guild.company_identifier when dbRegister true
|
||||||
|
guild_national_id:
|
||||||
|
firstGuildFromDb.company_identifier ??
|
||||||
|
firstGuildFromDb.companyIdentifier ??
|
||||||
|
firstGuildFromDb.nationalCode ??
|
||||||
|
firstGuildFromDb.nationalId ??
|
||||||
|
"",
|
||||||
corporation_name: firstGuildFromDb.companyName || "",
|
corporation_name: firstGuildFromDb.companyName || "",
|
||||||
|
|
||||||
// Status Fields (is_foreign_national is at guild level in API response)
|
// Status Fields (is_foreign_national is at guild level in API response)
|
||||||
@@ -187,14 +156,10 @@ const extractFormFieldsFromDatabaseInquiry = (
|
|||||||
// Additional Database Fields
|
// Additional Database Fields
|
||||||
company_name: firstGuildFromDb.companyName || "",
|
company_name: firstGuildFromDb.companyName || "",
|
||||||
company_identifier: firstGuildFromDb.companyIdentifier || "",
|
company_identifier: firstGuildFromDb.companyIdentifier || "",
|
||||||
type_activity_name: firstGuildFromDb.typeActivity || ""
|
type_activity_name: firstGuildFromDb.typeActivity || "",
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts form field values from external API inquiry response
|
|
||||||
* Data source: Inquiry national code which doesn't return data from our database (dbRegister === false)
|
|
||||||
*/
|
|
||||||
const extractFormFieldsFromExternalApi = (
|
const extractFormFieldsFromExternalApi = (
|
||||||
responseDataFromExternalApi,
|
responseDataFromExternalApi,
|
||||||
inquiryNationalCode
|
inquiryNationalCode
|
||||||
@@ -237,9 +202,7 @@ const extractFormFieldsFromExternalApi = (
|
|||||||
// Guild Information Fields
|
// Guild Information Fields
|
||||||
guild_name: firstGuildFromExternalApi.title || "",
|
guild_name: firstGuildFromExternalApi.title || "",
|
||||||
area_activity: firstGuildFromExternalApi.isicname || "",
|
area_activity: firstGuildFromExternalApi.isicname || "",
|
||||||
state: firstGuildFromExternalApi.state || "",
|
city: "", // User selects from cities list
|
||||||
province: "", // External API doesn't provide province ID
|
|
||||||
city: firstGuildFromExternalApi.city || "",
|
|
||||||
address: firstGuildFromExternalApi.address || "",
|
address: firstGuildFromExternalApi.address || "",
|
||||||
license_expire_date: normalizeExternalApiDate(
|
license_expire_date: normalizeExternalApiDate(
|
||||||
firstGuildFromExternalApi.licenseExpireDate || ""
|
firstGuildFromExternalApi.licenseExpireDate || ""
|
||||||
@@ -279,18 +242,10 @@ const extractFormFieldsFromExternalApi = (
|
|||||||
guild:
|
guild:
|
||||||
typeof firstGuildFromExternalApi.guild === "boolean"
|
typeof firstGuildFromExternalApi.guild === "boolean"
|
||||||
? firstGuildFromExternalApi.guild
|
? firstGuildFromExternalApi.guild
|
||||||
: false
|
: false,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Maps response data to form fields based on data source
|
|
||||||
*
|
|
||||||
* Three data sources:
|
|
||||||
* 1. Edit mode: Guild data passed as prop (handled by getInitialValues in formUtils.js)
|
|
||||||
* 2. Database inquiry: Inquiry national code which returns data from our database (dbRegister === true)
|
|
||||||
* 3. External API inquiry: Inquiry national code which doesn't return data from our database (dbRegister === false)
|
|
||||||
*/
|
|
||||||
export const mapResponseDataToFormFields = (
|
export const mapResponseDataToFormFields = (
|
||||||
responseData,
|
responseData,
|
||||||
inquiryNationalCode,
|
inquiryNationalCode,
|
||||||
|
|||||||
@@ -145,14 +145,61 @@ export const formatDateForSubmitDatabase = (dateString) => {
|
|||||||
return normalizedDate.replace(/-/g, "/");
|
return normalizedDate.replace(/-/g, "/");
|
||||||
};
|
};
|
||||||
|
|
||||||
export const formatDateForSubmit = (dateString, isExternalApi = false) => {
|
/**
|
||||||
|
* Always formats date for submit as Jalali YYYY/MM/DD with English numerals.
|
||||||
|
* Used for birthDate and licenseExpireDate (and licenseIssueDate) in every scenario.
|
||||||
|
* Example: "1403/02/26", "1404/06/10"
|
||||||
|
*/
|
||||||
|
export const formatDateForSubmit = (dateString) => {
|
||||||
if (!dateString || typeof dateString !== "string") {
|
if (!dateString || typeof dateString !== "string") {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isExternalApi) {
|
const normalized = convertPersianToEnglishNumerals(dateString);
|
||||||
return formatDateForSubmitExternal(dateString);
|
|
||||||
} else {
|
// Already Jalali (YYYY/MM/DD, year < 1500): ensure zero-padded and return
|
||||||
return formatDateForSubmitDatabase(dateString);
|
const persianPattern = /^\d{4}\/\d{1,2}\/\d{1,2}$/;
|
||||||
|
if (persianPattern.test(normalized)) {
|
||||||
|
const parts = normalized.split("/");
|
||||||
|
const py = parseInt(parts[0], 10);
|
||||||
|
const pm = parseInt(parts[1], 10);
|
||||||
|
const pd = parseInt(parts[2], 10);
|
||||||
|
if (py < 1500 && !isNaN(py) && !isNaN(pm) && !isNaN(pd)) {
|
||||||
|
return `${py}/${String(pm).padStart(2, "0")}/${String(pd).padStart(
|
||||||
|
2,
|
||||||
|
"0"
|
||||||
|
)}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Gregorian YYYY-MM-DD or YYYY/MM/DD: convert to Jalali
|
||||||
|
const gregorianPattern = /^\d{4}[-/]\d{1,2}[-/]\d{1,2}$/;
|
||||||
|
if (gregorianPattern.test(normalized)) {
|
||||||
|
const [y, m, d] = normalized.split(/[-/]/).map((s) => parseInt(s, 10));
|
||||||
|
if (y > 1500 && !isNaN(y) && !isNaN(m) && !isNaN(d)) {
|
||||||
|
try {
|
||||||
|
const gregorianDate = new Date(y, m - 1, d);
|
||||||
|
const jalaliStr = convertToIranianTime(
|
||||||
|
gregorianDate.toISOString().split("T")[0]
|
||||||
|
);
|
||||||
|
return convertPersianToEnglishNumerals(jalaliStr).replace(/-/g, "/");
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error converting to Jalali:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback: try parsing as date then convert to Jalali
|
||||||
|
try {
|
||||||
|
const date = new Date(normalized.replace(/\//g, "-"));
|
||||||
|
if (!isNaN(date.getTime())) {
|
||||||
|
const iso = date.toISOString().split("T")[0];
|
||||||
|
const jalaliStr = convertToIranianTime(iso);
|
||||||
|
return convertPersianToEnglishNumerals(jalaliStr).replace(/-/g, "/");
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error formatting date for submit:", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return normalized.replace(/-/g, "/");
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ export const getValidationSchema = (isEditMode) =>
|
|||||||
last_name: yup.string(),
|
last_name: yup.string(),
|
||||||
guild_name: yup.string(),
|
guild_name: yup.string(),
|
||||||
guild_category: yup.string(),
|
guild_category: yup.string(),
|
||||||
state: yup.string(),
|
|
||||||
city: yup.string(),
|
city: yup.string(),
|
||||||
address: yup.string(),
|
address: yup.string(),
|
||||||
license_expire_date: yup.string(),
|
license_expire_date: yup.string(),
|
||||||
@@ -48,14 +47,14 @@ export const getValidationSchema = (isEditMode) =>
|
|||||||
license_number: yup.string().required("شماره مجوز الزامی است"),
|
license_number: yup.string().required("شماره مجوز الزامی است"),
|
||||||
|
|
||||||
steward: yup.boolean(),
|
steward: yup.boolean(),
|
||||||
guild: yup.boolean()
|
guild: yup.boolean(),
|
||||||
})
|
})
|
||||||
.test(
|
.test(
|
||||||
"steward-guild-required",
|
"steward-guild-required",
|
||||||
"برای هر واحد صنفی، حداقل یکی از گزینههای مباشر یا صنف باید انتخاب شود",
|
"برای هر واحد صنفی، حداقل یکی از گزینههای مباشر یا صنف باید انتخاب شود",
|
||||||
(value) => value?.steward === true || value?.guild === true
|
(value) => value?.steward === true || value?.guild === true
|
||||||
)
|
)
|
||||||
)
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -71,7 +70,6 @@ export const getInitialValues = (guildDataForEdit) => {
|
|||||||
// Extract user data from edit mode guild object
|
// Extract user data from edit mode guild object
|
||||||
const userDataFromEdit = guildDataForEdit?.user || {};
|
const userDataFromEdit = guildDataForEdit?.user || {};
|
||||||
const addressDataFromEdit = guildDataForEdit?.address || {};
|
const addressDataFromEdit = guildDataForEdit?.address || {};
|
||||||
const provinceDataFromEdit = addressDataFromEdit?.province || {};
|
|
||||||
const cityDataFromEdit = addressDataFromEdit?.city || {};
|
const cityDataFromEdit = addressDataFromEdit?.city || {};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -83,15 +81,14 @@ export const getInitialValues = (guildDataForEdit) => {
|
|||||||
birth_date: normalizeDatabaseDate(userDataFromEdit.birthday || ""),
|
birth_date: normalizeDatabaseDate(userDataFromEdit.birthday || ""),
|
||||||
father_name: userDataFromEdit.fatherName || "",
|
father_name: userDataFromEdit.fatherName || "",
|
||||||
gender: userDataFromEdit.gender || "",
|
gender: userDataFromEdit.gender || "",
|
||||||
person_city: userDataFromEdit.city || "",
|
person_city: userDataFromEdit.city || cityDataFromEdit?.name || "",
|
||||||
|
city: cityDataFromEdit?.id ?? cityDataFromEdit?.key ?? "",
|
||||||
is_alive: userDataFromEdit.isAlive || "",
|
is_alive: userDataFromEdit.isAlive || "",
|
||||||
mobile: userDataFromEdit.mobile || "",
|
mobile: userDataFromEdit.mobile || "",
|
||||||
|
|
||||||
// Guild Information Fields (from guild object in edit mode)
|
// Guild Information Fields (from guild object in edit mode)
|
||||||
guild_name: guildDataForEdit?.guildsName || guildDataForEdit?.name || "",
|
guild_name: guildDataForEdit?.guildsName || guildDataForEdit?.name || "",
|
||||||
area_activity: guildDataForEdit?.areaActivity || "",
|
area_activity: guildDataForEdit?.areaActivity || "",
|
||||||
state: provinceDataFromEdit.name || "",
|
|
||||||
province: provinceDataFromEdit.key || "",
|
|
||||||
city_name: cityDataFromEdit.name || "",
|
city_name: cityDataFromEdit.name || "",
|
||||||
address: addressDataFromEdit.address || "",
|
address: addressDataFromEdit.address || "",
|
||||||
license_expire_date: normalizeDatabaseDate(
|
license_expire_date: normalizeDatabaseDate(
|
||||||
@@ -103,7 +100,13 @@ export const getInitialValues = (guildDataForEdit) => {
|
|||||||
postal_code: addressDataFromEdit.postalCode || "",
|
postal_code: addressDataFromEdit.postalCode || "",
|
||||||
phone_number: guildDataForEdit?.phoneNumber || "",
|
phone_number: guildDataForEdit?.phoneNumber || "",
|
||||||
license_number: guildDataForEdit?.licenseNumber || "",
|
license_number: guildDataForEdit?.licenseNumber || "",
|
||||||
guild_national_id: guildDataForEdit?.nationalId || "",
|
// شناسه ملی شرکت: from company_identifier when dbRegister true
|
||||||
|
guild_national_id:
|
||||||
|
guildDataForEdit?.company_identifier ??
|
||||||
|
guildDataForEdit?.companyIdentifier ??
|
||||||
|
guildDataForEdit?.nationalCode ??
|
||||||
|
guildDataForEdit?.nationalId ??
|
||||||
|
"",
|
||||||
corporation_name: guildDataForEdit?.companyName || "",
|
corporation_name: guildDataForEdit?.companyName || "",
|
||||||
license_issue_date: normalizeDatabaseDate(
|
license_issue_date: normalizeDatabaseDate(
|
||||||
guildDataForEdit?.licenseIssueDate || ""
|
guildDataForEdit?.licenseIssueDate || ""
|
||||||
@@ -154,9 +157,9 @@ export const getInitialValues = (guildDataForEdit) => {
|
|||||||
? guildDataForEdit.guild
|
? guildDataForEdit.guild
|
||||||
: typeof guildDataForEdit?.isGuild === "boolean"
|
: typeof guildDataForEdit?.isGuild === "boolean"
|
||||||
? guildDataForEdit.isGuild
|
? guildDataForEdit.isGuild
|
||||||
: false
|
: false,
|
||||||
}
|
},
|
||||||
]
|
]
|
||||||
: []
|
: [],
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -89,7 +89,10 @@ export const StewardShowAllocations = forwardRef(
|
|||||||
|
|
||||||
const updateTable = () => {
|
const updateTable = () => {
|
||||||
fetchApiData(1);
|
fetchApiData(1);
|
||||||
handleUpdate();
|
// Do not call handleUpdate() here - parent's handleUpdate already calls
|
||||||
|
// updateTable() on both instances; calling handleUpdate would cause
|
||||||
|
// infinite recursion (handleUpdate → updateTable → handleUpdate → …).
|
||||||
|
// Callers that need the parent bars summary refreshed call handleUpdate explicitly.
|
||||||
};
|
};
|
||||||
|
|
||||||
useImperativeHandle(ref, () => ({
|
useImperativeHandle(ref, () => ({
|
||||||
@@ -264,7 +267,7 @@ export const StewardShowAllocations = forwardRef(
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchApiData(1);
|
fetchApiData(1);
|
||||||
}, [dispatch, selectedDate1, selectedDate2, perPage]);
|
}, [selectedDate1, selectedDate2, perPage]);
|
||||||
|
|
||||||
const handleSubmit = async (event) => {
|
const handleSubmit = async (event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export const StewardStock = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
handleUpdate();
|
handleUpdate();
|
||||||
}, [dispatch]);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Grid container xs={12} justifyContent="end" alignItems="center">
|
<Grid container xs={12} justifyContent="end" alignItems="center">
|
||||||
|
|||||||
Reference in New Issue
Block a user