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,
};