From 8725f6d62203a20727e5840b5ffdb66d68af322f Mon Sep 17 00:00:00 2001 From: Malini Date: Wed, 18 Feb 2026 13:32:23 +0530 Subject: [PATCH] added dropdown field for industry field --- .../Admin/configuration/CompanyProfile.jsx | 31 ++++++++++++++-- .../configuration/EditCompanyProfile.jsx | 35 ++++++++++++++++--- .../src/services/masters/masterService.js | 32 +++++++++++++++++ 3 files changed, 91 insertions(+), 7 deletions(-) diff --git a/ipi-survey-platform/src/pages/Admin/configuration/CompanyProfile.jsx b/ipi-survey-platform/src/pages/Admin/configuration/CompanyProfile.jsx index 093a145..6473eb0 100644 --- a/ipi-survey-platform/src/pages/Admin/configuration/CompanyProfile.jsx +++ b/ipi-survey-platform/src/pages/Admin/configuration/CompanyProfile.jsx @@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom'; import Table from '@/components/common/Table'; import Loader from '@/components/common/Loader'; import { TextField, SelectField, PhoneField } from '@/components/common/FormControls'; -import { fetchEmirates, fetchCityTowns } from '@/services/masters/masterService'; +import { fetchEmirates, fetchCityTowns, fetchIsicMaster } from '@/services/masters/masterService'; import { createEstablishment, fetchEstablishments, @@ -494,6 +494,7 @@ const CompanyProfile = () => { const [emirateLookup, setEmirateLookup] = React.useState({}); const [contactCityOptions, setContactCityOptions] = React.useState([]); const [corporateCityOptions, setCorporateCityOptions] = React.useState([]); + const [isicOptions, setIsicOptions] = React.useState([]); const [fieldErrors, setFieldErrors] = React.useState({}); const [isDirty, setIsDirty] = React.useState(false); const initialSnapshotRef = React.useRef(createEmptyProfile()); @@ -1026,15 +1027,17 @@ const CompanyProfile = () => {
-
@@ -1885,6 +1888,28 @@ const displayedRows = sortedProfiles.map((item) => { cancelled = true; controller.abort(); }; + }, []); + + React.useEffect(() => { + let cancelled = false; + const controller = new AbortController(); + const loadIsicOptions = async () => { + try { + const options = await fetchIsicMaster({ signal: controller.signal }); + if (cancelled) return; + setIsicOptions(options); + } catch (error) { + if (cancelled) return; + console.error('Failed to load ISIC master data.', error); + const message = error?.response?.data?.message || error?.message || 'Unable to load ISIC codes.'; + showToast('error', message); + } + }; + loadIsicOptions(); + return () => { + cancelled = true; + controller.abort(); + }; }, [showToast]); const loadContactCityOptions = React.useCallback( diff --git a/ipi-survey-platform/src/pages/Admin/configuration/EditCompanyProfile.jsx b/ipi-survey-platform/src/pages/Admin/configuration/EditCompanyProfile.jsx index 0fc924e..f8674e6 100644 --- a/ipi-survey-platform/src/pages/Admin/configuration/EditCompanyProfile.jsx +++ b/ipi-survey-platform/src/pages/Admin/configuration/EditCompanyProfile.jsx @@ -6,7 +6,7 @@ import { IoMdCheckbox, IoMdCheckboxOutline } from "react-icons/io"; import { TextField, SelectField, PhoneField } from "@/components/common/FormControls"; import Loader from "@/components/common/Loader"; import { fetchEstablishmentDetail, updateEstablishment } from '@/services/establishments/establishmentService'; -import { fetchEmirates, fetchCityTowns, fetchProducts } from '@/services/masters/masterService'; +import { fetchEmirates, fetchCityTowns, fetchProducts, fetchIsicMaster } from '@/services/masters/masterService'; import HeaderBar from "@/components/layout/HeaderBar"; // Helper functions @@ -95,6 +95,7 @@ const EditCompanyProfile = () => { const [emirateOptions, setEmirateOptions] = useState([]); const [emirateLookup, setEmirateLookup] = useState({}); const [contactCityOptions, setContactCityOptions] = useState([]); + const [isicOptions, setIsicOptions] = useState([]); const [availableProducts, setAvailableProducts] = useState([]); const [selectedProducts, setSelectedProducts] = useState([]); const [newlyAddedProductIds, setNewlyAddedProductIds] = useState(new Set()); @@ -545,6 +546,30 @@ const EditCompanyProfile = () => { }; }, []); + // Load ISIC codes on component mount using your service function + useEffect(() => { + let cancelled = false; + const controller = new AbortController(); + + const loadIsicCodes = async () => { + try { + const isicCodes = await fetchIsicMaster({ signal: controller.signal }); + if (cancelled) return; + setIsicOptions(isicCodes); + } catch (error) { + if (cancelled) return; + console.error('Failed to load ISIC codes:', error); + } + }; + + loadIsicCodes(); + + return () => { + cancelled = true; + controller.abort(); + }; + }, []); + // Load establishment data and set form with API data useEffect(() => { // Create an async function inside the effect @@ -840,11 +865,13 @@ const EditCompanyProfile = () => { error={fieldErrors.industryCodeBusiness} /> */}
- handleFormChange("industryCodeCurrent", e.target.value)} - placeholder="Enter Code" + options={isicOptions} + placeholder="Select Industry Code" width="100%" required error={fieldErrors.industryCodeCurrent} diff --git a/ipi-survey-platform/src/services/masters/masterService.js b/ipi-survey-platform/src/services/masters/masterService.js index 500c391..467d3c5 100644 --- a/ipi-survey-platform/src/services/masters/masterService.js +++ b/ipi-survey-platform/src/services/masters/masterService.js @@ -7,6 +7,7 @@ const endpoints = { units: '/unit_master', emirates: '/emirates', cityTowns: '/city-towns', + isicMaster: '/searchIsicMaster', }; const extractReasons = (payload) => { @@ -106,6 +107,24 @@ const toCityOption = (item) => { return null; }; +const toIsicOption = (item) => { + if (item === undefined || item === null) return null; + if (typeof item === 'string' || typeof item === 'number') { + const value = toStringOrNull(item); + return value ? { label: value, value } : null; + } + if (typeof item === 'object') { + const id = toStringOrNull(item.id ?? item.value ?? item.code); + const code = toStringOrNull(item.code); + const description = toStringOrNull(item.description ?? item.name ?? item.label); + const label = code && description ? `${code} - ${description}` : description ?? code ?? item.label; + const finalLabel = label ?? id; + if (!finalLabel) return null; + return { label: finalLabel, value: id ?? finalLabel, raw: item }; + } + return null; +}; + export const getVariationReasons = async (config = {}) => { const response = await getRequest(endpoints.variationReasons, config); return response.data; @@ -174,6 +193,17 @@ export const fetchCityTowns = async ({ emirateId, signal } = {}) => { return list.map(toCityOption).filter(Boolean); }; +export const getIsicMaster = async (config = {}) => { + const response = await getRequest(endpoints.isicMaster, config); + return response.data; +}; + +export const fetchIsicMaster = async ({ signal } = {}) => { + const data = await getIsicMaster({ signal }); + const list = extractReasons(data); + return list.map(toIsicOption).filter(Boolean); +}; + export default { getVariationReasons, fetchVariationReasons, @@ -187,4 +217,6 @@ export default { fetchEmirates, getCityTowns, fetchCityTowns, + getIsicMaster, + fetchIsicMaster, };