diff --git a/src/features/province/components/create-guilds/CreateGuilds.js b/src/features/province/components/create-guilds/CreateGuilds.js index 8b7f592..477f2ff 100644 --- a/src/features/province/components/create-guilds/CreateGuilds.js +++ b/src/features/province/components/create-guilds/CreateGuilds.js @@ -33,6 +33,7 @@ import { getValidationSchema, getInitialValues } from "./utils/formUtils"; import { mapResponseDataToFormFields, prepareSubmitData, + mapExternalApiGuildToFormValues, } from "./utils/dataMapping"; import { handleSubmitSuccess, handleSubmitError } from "./utils/submitHandlers"; @@ -118,7 +119,6 @@ export const CreateGuilds = ({ guild, updateTable }) => { birth_date: values?.birth_date, father_name: values?.father_name, mobile: values?.mobile, - // Personal info city: always use current selection (guild section has city_name only) person_city: values?.person_city, city: values?.city, }; @@ -224,6 +224,9 @@ export const CreateGuilds = ({ guild, updateTable }) => { if (responseData.dbRegister === false) { setDbRegister(false); setHasInquiry(null); + if (guildsData.length > 0) { + setGuildActive(guildsData[0]?.active ?? true); + } } else { setHasInquiry(responseData.hasInquiry ?? null); const firstGuild = guildsData.length > 0 ? guildsData[0] : null; @@ -235,13 +238,16 @@ export const CreateGuilds = ({ guild, updateTable }) => { if (guildsData.length > 0) { setGuildsList(guildsData); - const initialGuildValues = guildsData.map((guildItem) => { - const combinedGuild = { - ...guildItem, - user: responseData.user || {}, - }; - return getInitialValues(combinedGuild); - }); + const initialGuildValues = + responseData.dbRegister === false + ? guildsData.map((g) => mapExternalApiGuildToFormValues(g)) + : guildsData.map((guildItem) => { + const combinedGuild = { + ...guildItem, + user: responseData.user || {}, + }; + return getInitialValues(combinedGuild); + }); setGuildsFormValues(initialGuildValues); // Update Formik's guilds array for validation (include validated fields) diff --git a/src/features/province/components/create-guilds/utils/dataMapping.js b/src/features/province/components/create-guilds/utils/dataMapping.js index f9fbc36..b958e35 100644 --- a/src/features/province/components/create-guilds/utils/dataMapping.js +++ b/src/features/province/components/create-guilds/utils/dataMapping.js @@ -160,24 +160,27 @@ const extractFormFieldsFromDatabaseInquiry = ( }; }; +/** + * Personal info only from external API (dbRegister false). + * Guild data is mapped per guild via mapExternalApiGuildToFormValues. + */ const extractFormFieldsFromExternalApi = ( responseDataFromExternalApi, inquiryNationalCode ) => { const userFromExternalApi = responseDataFromExternalApi.user || {}; - const firstGuildFromExternalApi = + const firstGuild = Array.isArray(responseDataFromExternalApi.guilds) && responseDataFromExternalApi.guilds.length > 0 ? responseDataFromExternalApi.guilds[0] : {}; - const layerTwoFromExternalApi = firstGuildFromExternalApi.layerTwo || {}; + const layerTwo = firstGuild.layerTwo || {}; return { - // Personal Information Fields first_name: userFromExternalApi.firstName || "", last_name: userFromExternalApi.lastName || "", national_id: String( - layerTwoFromExternalApi.nationalcode || + layerTwo.nationalcode || userFromExternalApi.nationalCode || inquiryNationalCode ).trim(), @@ -191,58 +194,73 @@ const extractFormFieldsFromExternalApi = ( ? "False" : "", person_city: userFromExternalApi.city || "", + city: "", is_alive: userFromExternalApi.isLive === true ? "بلی" : userFromExternalApi.isLive === false ? "خیر" : "", - mobile: layerTwoFromExternalApi.mobilenumber || "", + mobile: layerTwo.mobilenumber || "", + }; +}; - // Guild Information Fields - guild_name: firstGuildFromExternalApi.title || "", - area_activity: firstGuildFromExternalApi.isicname || "", - city: "", // User selects from cities list - address: firstGuildFromExternalApi.address || "", +/** + * Maps one external API guild (dbRegister false) to guild form values. + * All fields are guild data, not personal info. + */ +export const mapExternalApiGuildToFormValues = (guild) => { + const layerTwo = guild?.layerTwo || {}; + return { + guild_name: guild?.title || "", + area_activity: guild?.isicname || "", + city_name: guild?.city || "", + address: guild?.address || "", license_expire_date: normalizeExternalApiDate( - firstGuildFromExternalApi.licenseExpireDate || "" + guild?.licenseExpireDate || "" ), - license_status: firstGuildFromExternalApi.licenseStatus || "", - license_type: firstGuildFromExternalApi.licenseType || "", - license_number: firstGuildFromExternalApi.licenseNumber || "", + license_status: guild?.licenseStatus || "", + license_type: guild?.licenseType || "", + license_number: guild?.licenseNumber || "", license_issue_date: normalizeExternalApiDate( - layerTwoFromExternalApi.licenseIssueDate || "" + layerTwo.licenseIssueDate || "" ), - union_name: layerTwoFromExternalApi.unionName || "", - postal_code: layerTwoFromExternalApi.postalcode || "", - phone_number: layerTwoFromExternalApi.phonenumber || "", - guild_national_id: layerTwoFromExternalApi.nationalId || "", - corporation_name: layerTwoFromExternalApi.corporationName || "", - - // Status Fields + union_name: layerTwo.unionName || "", + postal_code: layerTwo.postalcode || "", + phone_number: layerTwo.phonenumber || "", + guild_national_id: layerTwo.nationalId || "", + corporation_name: layerTwo.corporationName || "", + active: guild?.active ?? true, is_foreigner: - layerTwoFromExternalApi.isForeigner === "خیر" + layerTwo.isForeigner === "خیر" ? false - : layerTwoFromExternalApi.isForeigner === "بلی" + : layerTwo.isForeigner === "بلی" ? true - : "", - has_steward: - layerTwoFromExternalApi.hasSteward === "خیر" - ? false - : layerTwoFromExternalApi.hasSteward === "بلی" - ? true - : "", - has_partner: - layerTwoFromExternalApi.hasPartner === "خیر" - ? false - : layerTwoFromExternalApi.hasPartner === "بلی" - ? true - : "", - steward: false, // External API doesn't provide steward status - guild: - typeof firstGuildFromExternalApi.guild === "boolean" - ? firstGuildFromExternalApi.guild : false, + has_steward: + layerTwo.hasSteward === "خیر" + ? false + : layerTwo.hasSteward === "بلی" + ? true + : false, + has_partner: + layerTwo.hasPartner === "خیر" + ? false + : layerTwo.hasPartner === "بلی" + ? true + : false, + steward: + layerTwo.hasSteward === "خیر" + ? false + : layerTwo.hasSteward === "بلی" + ? true + : false, + guild: + layerTwo.hasSteward === "خیر" + ? true + : layerTwo.hasSteward === "بلی" + ? true + : true, }; };