@erpsquad/common 1.8.114 → 1.8.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index/index.esm10.js +3 -3
- package/dist/_virtual/index/index.esm11.js +2 -4
- package/dist/_virtual/index/index.esm11.js.map +1 -1
- package/dist/_virtual/index/index.esm2.js +4 -2
- package/dist/_virtual/index/index.esm2.js.map +1 -1
- package/dist/_virtual/index/index.esm3.js +3 -3
- package/dist/_virtual/index/index.esm4.js +3 -3
- package/dist/_virtual/index/index.esm5.js +3 -3
- package/dist/_virtual/index/index.esm6.js +3 -3
- package/dist/_virtual/index/index.esm7.js +3 -3
- package/dist/_virtual/index/index.esm8.js +3 -3
- package/dist/_virtual/index/index.esm9.js +3 -3
- package/dist/_virtual/index/index10.js +1 -1
- package/dist/_virtual/index/index11.js +1 -1
- package/dist/_virtual/index/index2.js +1 -1
- package/dist/_virtual/index/index3.js +1 -1
- package/dist/_virtual/index/index4.js +1 -1
- package/dist/_virtual/index/index5.js +1 -1
- package/dist/_virtual/index/index6.js +1 -1
- package/dist/_virtual/index/index7.js +1 -1
- package/dist/_virtual/index/index8.js +1 -1
- package/dist/_virtual/index/index9.js +1 -1
- package/dist/components/form-control/form-parser/form-parser/index.esm.js +1 -1
- package/dist/components/form-control/form-parser/form-parser/index.js +1 -1
- package/dist/components/form-control/form-parser/form-parser/index.js.map +1 -1
- package/dist/index.esm.js +64 -64
- package/dist/index.js +1 -1
- package/dist/node_modules/@asseinfo/react-kanban/dist/index/index.esm.js +1 -1
- package/dist/node_modules/@asseinfo/react-kanban/dist/index/index.js +1 -1
- package/dist/node_modules/@asseinfo/react-kanban/dist/index/index.js.map +1 -1
- package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.esm.js +1 -1
- package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.js +1 -1
- package/dist/node_modules/@mui/system/colorManipulator/index.esm.js +2 -2
- package/dist/node_modules/@mui/system/colorManipulator/index.js +1 -1
- package/dist/node_modules/@mui/system/colorManipulator/index.js.map +1 -1
- package/dist/node_modules/@mui/system/createStyled/index.esm.js +6 -6
- package/dist/node_modules/@mui/system/createStyled/index.js +1 -1
- package/dist/node_modules/@mui/system/useThemeWithoutDefault/index.esm.js +1 -1
- package/dist/node_modules/@mui/system/useThemeWithoutDefault/index.js +1 -1
- package/dist/src/utils/form-builder-deconversion.d.ts +0 -43
- package/dist/style.css +70 -70
- package/dist/utils/form-builder-deconversion/index.esm.js +5 -4
- package/dist/utils/form-builder-deconversion/index.esm.js.map +1 -1
- package/dist/utils/form-builder-deconversion/index.js +1 -1
- package/dist/utils/form-builder-deconversion/index.js.map +1 -1
- package/dist/utils/form-builder-deconversion.d.ts +0 -43
- package/dist/utils/index.esm.js +4 -4
- package/dist/utils/index.js +1 -1
- package/dist/views/form-builder/utils/common/index.esm.js +1 -1
- package/dist/views/form-builder/utils/common/index.js +1 -1
- package/dist/views/form-builder/utils/common/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/views/form-builder/utils/common.ts"],"sourcesContent":["// React imports\nimport { useEffect } from \"react\";\n\n// ERP Common imports\nimport formBuilderDeConversion from \"@/utils/form-builder-deconversion\";\n\n// Module pathname imports\nimport { PathnameAccounting } from \"../../../constants/pathnames/pathname.accounting\";\nimport { PathnameCrm } from \"../../../constants/pathnames/pathname.crm\";\nimport { PathnameInventory } from \"../../../constants/pathnames/pathname.inventory\";\nimport { PathnameManufacturing } from \"../../../constants/pathnames/pathname.manufacturing\";\nimport { PathnamePurchase } from \"../../../constants/pathnames/pathname.procurement\";\nimport { PathnameRental } from \"../../../constants/pathnames/pathname.rental\";\nimport { PathnameUsers } from \"../../../constants/pathnames/pathname.user\";\n\n// Types for better type safety\nexport interface TableColumn {\n header: string;\n accessorKey: string;\n visible: boolean;\n}\n\nexport interface FormMember {\n field_type: string;\n table?: string;\n table_columns?: TableColumn[];\n [key: string]: any;\n}\n\nexport interface FormSection {\n field_type: string;\n label: string;\n is_accordion: boolean;\n id: string;\n remove_section: boolean;\n form_switcher_label?: string;\n form_switcher_name?: string;\n is_section_field?: boolean;\n section_type?: string;\n switcher_forms?: any;\n members: FormMember[];\n}\n\nexport interface TabData {\n tab_order: number;\n data: FormSection[];\n}\n\nexport interface ProcessedData {\n tab?: TabData[];\n section?: FormSection[];\n tabsData?: TabData[];\n}\n\n// Constants for module paths\nconst MODULE_PATHS = {\n accounting: PathnameAccounting.FORMS,\n inventory: PathnameInventory.FORMS,\n manufacturing: PathnameManufacturing.FORMS,\n procurement: PathnamePurchase.FORMS,\n crm: PathnameCrm.FORMS,\n rental: PathnameRental.FORMS,\n user: PathnameUsers.FORMS,\n} as const;\n\nexport type ModuleType = keyof typeof MODULE_PATHS;\n\n// Helper function to format text (converts snake_case to Title Case)\nexport const formatText = (text: string): string => {\n return text\n .split('_')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n};\n\n// Helper function to get redirection path\nconst getRedirectionPath = (currentModule: string): string => {\n if (!isValidModule(currentModule)) {\n throw new Error(`Invalid module: ${currentModule}`);\n }\n return MODULE_PATHS[currentModule as ModuleType];\n};\n\n// Type guard for module validation\nconst isValidModule = (module: string): module is ModuleType => {\n return module in MODULE_PATHS;\n};\n\n// Helper function to create default table columns\nexport const createDefaultTableColumns = (): TableColumn[] => [\n { header: \"Column 1\", accessorKey: \"column_1\", visible: true },\n { header: \"Column 2\", accessorKey: \"column_2\", visible: true },\n];\n\n// Helper function to process table columns\nexport const processTableColumns = (\n member: FormMember,\n formBuilder: any\n): TableColumn[] => {\n // Return existing columns if they exist\n if (member.table_columns?.length) {\n return member.table_columns;\n }\n\n // Check if table exists and has fields\n if (!member.table || !formBuilder.fields?.[member.table]) {\n return createDefaultTableColumns();\n }\n\n const fields = formBuilder.fields[member.table];\n if (!Array.isArray(fields) || fields.length === 0) {\n return createDefaultTableColumns();\n }\n\n return fields.map((field: any, index: number) => ({\n header: formatText(field.field),\n accessorKey: field.field,\n visible: index <= 3, // Show first 4 columns by default\n }));\n};\n\n// Helper function to process members\nexport const processMembers = (\n sections: FormSection[],\n formBuilder: any\n): FormMember[] => {\n return sections.flatMap((section) =>\n section.members.map((member) => {\n if (member.field_type === \"table\") {\n return {\n ...member,\n table_columns: processTableColumns(member, formBuilder),\n };\n }\n return { ...member };\n })\n );\n};\n\n// Helper function to extract sections data\nexport const extractSections = (sections: FormSection[]): Omit<FormSection, 'members'>[] => {\n return sections.map(({\n field_type,\n label,\n is_accordion,\n id,\n remove_section,\n form_switcher_label,\n form_switcher_name,\n is_section_field,\n section_type,\n switcher_forms,\n }) => ({\n field_type,\n label,\n is_accordion,\n id,\n remove_section,\n form_switcher_label,\n form_switcher_name,\n is_section_field,\n section_type,\n switcher_forms,\n }));\n};\n\n// Main processing function\nconst processData = (\n data: ProcessedData,\n activeTabId: number = 0,\n formBuilder: any,\n tabsData: TabData[] | null,\n // Callback functions\n callbacks: {\n removeSection: () => void;\n remove: () => void;\n setTabsData: (data: TabData[]) => void;\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n): void => {\n const { removeSection, remove, setTabsData, append, appendSection } = callbacks;\n\n try {\n // Clear existing data\n removeSection();\n remove();\n\n if (data.tab) {\n processTabData(data.tab, activeTabId, formBuilder, callbacks);\n } else if (data.section) {\n processSectionData(data.section, formBuilder, callbacks);\n } else if (data.tabsData && tabsData) {\n processExistingTabsData(tabsData, activeTabId, callbacks);\n } else {\n throw new Error(\"Invalid data format: Missing required properties (tab, section, or tabsData)\");\n }\n } catch (error) {\n console.error(\"Error processing data:\", error);\n // You might want to show a user-friendly error message instead of alert\n alert(error instanceof Error ? error.message : \"An error occurred while processing data\");\n }\n};\n\n// Process tab data\nconst processTabData = (\n tabs: TabData[],\n activeTabId: number,\n formBuilder: any,\n callbacks: {\n setTabsData: (data: TabData[]) => void;\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n): void => {\n const { setTabsData, append, appendSection } = callbacks;\n\n setTabsData(tabs);\n\n const activeTab = tabs.find(tab => tab.tab_order === activeTabId + 1);\n if (!activeTab?.data) {\n console.warn(`No active tab found for tab order: ${activeTabId + 1}`);\n return;\n }\n\n const sections = extractSections(activeTab.data);\n const members = processMembers(activeTab.data, formBuilder);\n\n append(members);\n appendSection(sections);\n};\n\n// Process section data\nconst processSectionData = (\n sections: FormSection[],\n formBuilder: any,\n callbacks: {\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n): void => {\n const { append, appendSection } = callbacks;\n\n const extractedSections = extractSections(sections);\n const members = processMembers(sections, formBuilder);\n\n append(members);\n appendSection(extractedSections);\n};\n\n// Process existing tabs data\nconst processExistingTabsData = (\n tabsData: TabData[],\n activeTabId: number,\n callbacks: {\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n): void => {\n const { append, appendSection } = callbacks;\n\n const activeTab = tabsData.find(tab => tab.tab_order === activeTabId + 1);\n if (!activeTab?.data) {\n console.warn(`No active tab found for tab order: ${activeTabId + 1}`);\n return;\n }\n\n const sections = extractSections(activeTab.data);\n const members = activeTab.data.flatMap(section =>\n section.members.map(member => ({ ...member }))\n );\n\n if (members.length > 0) append(members);\n if (sections.length > 0) appendSection(sections);\n};\n\n// Custom hook for form data processing\nexport const useFormDataProcessor = (\n formBuilder: any,\n tabsData: TabData[],\n activeTabValue: number,\n callbacks: {\n removeSection: () => void;\n remove: () => void;\n setTabsData: (data: TabData[]) => void;\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n) => {\n const { removeSection, remove, append } = callbacks;\n\n // Memoize the serialized form data to avoid unnecessary re-renders\n const serializedFormData = useMemo(() =>\n JSON.stringify(formBuilder?.formData),\n [formBuilder?.formData]\n );\n\n // Memoize the initial data processing\n const initialData = useMemo(() => {\n if (!formBuilder?.formData?.length) return null;\n\n try {\n return formBuilderDeConversion(formBuilder.formData);\n } catch (error) {\n console.error('Error processing form data:', error);\n return null;\n }\n }, [serializedFormData]);\n\n useEffect(() => {\n // Handle case when there's no initial data\n if (!initialData) {\n removeSection();\n remove();\n append([]);\n return;\n }\n\n // Determine processing strategy based on available data\n try {\n if (tabsData.length > 0) {\n // Process existing tabs data\n processData(\n { tabsData: tabsData },\n activeTabValue,\n formBuilder,\n tabsData,\n callbacks\n );\n } else if (initialData.tab) {\n // Process new tab data\n processData(\n initialData,\n activeTabValue,\n formBuilder,\n tabsData,\n callbacks\n );\n } else if (initialData.section) {\n // Process section data\n processData(\n initialData,\n 0, // No active tab for section-only data\n formBuilder,\n tabsData,\n callbacks\n );\n } else {\n console.warn('No valid data structure found in initialData');\n removeSection();\n remove();\n append([]);\n }\n } catch (error) {\n console.error('Error in form data processing:', error);\n // Reset to clean state on error\n removeSection();\n remove();\n append([]);\n }\n }, [activeTabValue, serializedFormData, tabsData.length, initialData, callbacks, formBuilder]);\n\n return { initialData };\n};\n\n// Alternative: Direct useEffect implementation (if you prefer not to use custom hook)\nexport const useFormDataEffect = (\n formBuilder: any,\n tabsData: TabData[],\n activeTabValue: number = 0,\n callbacks: {\n removeSection: () => void;\n remove: () => void;\n setTabsData: (data: TabData[]) => void;\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n) => {\n const { removeSection, remove, append } = callbacks;\n\n useEffect(() => {\n let initialData: ProcessedData | null = null;\n\n // Process initial data\n if (formBuilder?.formData?.length) {\n try {\n initialData = formBuilderDeConversion(formBuilder.formData);\n } catch (error) {\n console.error('Error converting form data:', error);\n }\n }\n\n // Handle empty initial data\n if (!initialData) {\n removeSection();\n remove();\n append([]);\n return;\n }\n\n // Process data based on available structure\n try {\n if (tabsData.length > 0) {\n processData(\n { tabsData: tabsData },\n activeTabValue,\n formBuilder,\n tabsData,\n callbacks\n );\n } else if (initialData.tab) {\n processData(\n initialData,\n activeTabValue,\n formBuilder,\n tabsData,\n callbacks\n );\n } else if (initialData.section) {\n processData(\n initialData,\n 0,\n formBuilder,\n tabsData,\n callbacks\n );\n } else {\n console.warn('Invalid data structure in initialData');\n removeSection();\n remove();\n append([]);\n }\n } catch (error) {\n console.error('Error processing form data:', error);\n // Reset to clean state on error\n removeSection();\n remove();\n append([]);\n }\n }, [activeTabValue, JSON.stringify(formBuilder?.formData), tabsData.length]);\n};\n\n// Usage example:\n/*\n// Option 1: Using custom hook\nconst { initialData } = useFormDataProcessor(\n formBuilder,\n tabsData,\n activeTabValue,\n {\n removeSection,\n remove,\n setTabsData,\n append,\n appendSection\n }\n);\n\n// Option 2: Using direct useEffect\nuseFormDataEffect(\n formBuilder,\n tabsData,\n activeTabValue,\n {\n removeSection,\n remove,\n setTabsData,\n append,\n appendSection\n }\n);\n*/\n\n// Path generation utility (separate from the effect)\nexport const generateModulePath = (currentModule: string): string => {\n try {\n const redirectionPath = getRedirectionPath(currentModule);\n return `/dashboard/${currentModule}${redirectionPath}`;\n } catch (error) {\n console.error('Error generating module path:', error);\n throw error;\n }\n};"],"names":["MODULE_PATHS","accounting","PathnameAccounting","FORMS","inventory","PathnameInventory","manufacturing","PathnameManufacturing","procurement","PathnamePurchase","crm","PathnameCrm","rental","PathnameRental","user","PathnameUsers","formatText","text","split","map","word","charAt","toUpperCase","slice","toLowerCase","join","processTableColumns","member","formBuilder","_a","table_columns","length","table","_b","fields","header","accessorKey","visible","Array","isArray","field","index","processMembers","sections","flatMap","section","members","field_type","extractSections","label","is_accordion","id","remove_section","form_switcher_label","form_switcher_name","is_section_field","section_type","switcher_forms","processData","data","activeTabId","tabsData","callbacks","removeSection","remove","tab","processTabData","processSectionData","Error","processExistingTabsData","error","alert","message","tabs","setTabsData","append","appendSection","activeTab","find","tab_order","extractedSections","currentModule","redirectionPath","getRedirectionPath","activeTabValue","useEffect","initialData","formData","formBuilderDeConversion","JSON","stringify","serializedFormData","useMemo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/views/form-builder/utils/common.ts"],"sourcesContent":["// React imports\nimport { useEffect } from \"react\";\n\n// ERP Common imports\nimport formBuilderDeConversion from \"@/utils/form-builder-deconversion\";\n\n// Module pathname imports\nimport { PathnameAccounting } from \"../../../constants/pathnames/pathname.accounting\";\nimport { PathnameCrm } from \"../../../constants/pathnames/pathname.crm\";\nimport { PathnameInventory } from \"../../../constants/pathnames/pathname.inventory\";\nimport { PathnameManufacturing } from \"../../../constants/pathnames/pathname.manufacturing\";\nimport { PathnamePurchase } from \"../../../constants/pathnames/pathname.procurement\";\nimport { PathnameRental } from \"../../../constants/pathnames/pathname.rental\";\nimport { PathnameUsers } from \"../../../constants/pathnames/pathname.user\";\n\n// Types for better type safety\nexport interface TableColumn {\n header: string;\n accessorKey: string;\n visible: boolean;\n}\n\nexport interface FormMember {\n field_type: string;\n table?: string;\n table_columns?: TableColumn[];\n [key: string]: any;\n}\n\nexport interface FormSection {\n field_type: string;\n label: string;\n is_accordion: boolean;\n id: string;\n remove_section: boolean;\n form_switcher_label?: string;\n form_switcher_name?: string;\n is_section_field?: boolean;\n section_type?: string;\n switcher_forms?: any;\n members: FormMember[];\n}\n\nexport interface TabData {\n tab_order: number;\n data: FormSection[];\n}\n\nexport interface ProcessedData {\n tab?: TabData[];\n section?: FormSection[];\n tabsData?: TabData[];\n}\n\n// Constants for module paths\nconst MODULE_PATHS = {\n accounting: PathnameAccounting.FORMS,\n inventory: PathnameInventory.FORMS,\n manufacturing: PathnameManufacturing.FORMS,\n procurement: PathnamePurchase.FORMS,\n crm: PathnameCrm.FORMS,\n rental: PathnameRental.FORMS,\n user: PathnameUsers.FORMS,\n} as const;\n\nexport type ModuleType = keyof typeof MODULE_PATHS;\n\n// Helper function to format text (converts snake_case to Title Case)\nexport const formatText = (text: string): string => {\n return text\n .split('_')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n};\n\n// Helper function to get redirection path\nconst getRedirectionPath = (currentModule: string): string => {\n if (!isValidModule(currentModule)) {\n throw new Error(`Invalid module: ${currentModule}`);\n }\n return MODULE_PATHS[currentModule as ModuleType];\n};\n\n// Type guard for module validation\nconst isValidModule = (module: string): module is ModuleType => {\n return module in MODULE_PATHS;\n};\n\n// Helper function to create default table columns\nexport const createDefaultTableColumns = (): TableColumn[] => [\n { header: \"Column 1\", accessorKey: \"column_1\", visible: true },\n { header: \"Column 2\", accessorKey: \"column_2\", visible: true },\n];\n\n// Helper function to process table columns\nexport const processTableColumns = (\n member: FormMember,\n formBuilder: any\n): TableColumn[] => {\n // Return existing columns if they exist\n if (member.table_columns?.length) {\n return member.table_columns;\n }\n\n // Check if table exists and has fields\n if (!member.table || !formBuilder.fields?.[member.table]) {\n return createDefaultTableColumns();\n }\n\n const fields = formBuilder.fields[member.table];\n if (!Array.isArray(fields) || fields.length === 0) {\n return createDefaultTableColumns();\n }\n\n return fields.map((field: any, index: number) => ({\n header: formatText(field.field),\n accessorKey: field.field,\n visible: index <= 3, // Show first 4 columns by default\n }));\n};\n\n// Helper function to process members\nexport const processMembers = (\n sections: FormSection[],\n formBuilder: any\n): FormMember[] => {\n return sections.flatMap((section) =>\n section.members.map((member) => {\n if (member.field_type === \"table\") {\n return {\n ...member,\n table_columns: processTableColumns(member, formBuilder),\n };\n }\n return { ...member };\n })\n );\n};\n\n// Helper function to extract sections data\nexport const extractSections = (sections: FormSection[]): Omit<FormSection, 'members'>[] => {\n return sections.map(({\n field_type,\n label,\n is_accordion,\n id,\n remove_section,\n form_switcher_label,\n form_switcher_name,\n is_section_field,\n section_type,\n switcher_forms,\n }) => ({\n field_type,\n label,\n is_accordion,\n id,\n remove_section,\n form_switcher_label,\n form_switcher_name,\n is_section_field,\n section_type,\n switcher_forms,\n }));\n};\n\n// Main processing function\nconst processData = (\n data: ProcessedData,\n activeTabId: number = 0,\n formBuilder: any,\n tabsData: TabData[] | null,\n // Callback functions\n callbacks: {\n removeSection: () => void;\n remove: () => void;\n setTabsData: (data: TabData[]) => void;\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n): void => {\n const { removeSection, remove, setTabsData, append, appendSection } = callbacks;\n\n try {\n // Clear existing data\n removeSection();\n remove();\n\n if (data.tab) {\n processTabData(data.tab, activeTabId, formBuilder, callbacks);\n } else if (data.section) {\n processSectionData(data.section, formBuilder, callbacks);\n } else if (data.tabsData && tabsData) {\n processExistingTabsData(tabsData, activeTabId, callbacks);\n } else {\n throw new Error(\"Invalid data format: Missing required properties (tab, section, or tabsData)\");\n }\n } catch (error) {\n console.error(\"Error processing data:\", error);\n // You might want to show a user-friendly error message instead of alert\n alert(error instanceof Error ? error.message : \"An error occurred while processing data\");\n }\n};\n\n// Process tab data\nconst processTabData = (\n tabs: TabData[],\n activeTabId: number,\n formBuilder: any,\n callbacks: {\n setTabsData: (data: TabData[]) => void;\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n): void => {\n const { setTabsData, append, appendSection } = callbacks;\n\n setTabsData(tabs);\n\n const activeTab = tabs.find(tab => tab.tab_order === activeTabId + 1);\n if (!activeTab?.data) {\n console.warn(`No active tab found for tab order: ${activeTabId + 1}`);\n return;\n }\n\n const sections = extractSections(activeTab.data);\n const members = processMembers(activeTab.data, formBuilder);\n\n append(members);\n appendSection(sections);\n};\n\n// Process section data\nconst processSectionData = (\n sections: FormSection[],\n formBuilder: any,\n callbacks: {\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n): void => {\n const { append, appendSection } = callbacks;\n\n const extractedSections = extractSections(sections);\n const members = processMembers(sections, formBuilder);\n\n append(members);\n appendSection(extractedSections);\n};\n\n// Process existing tabs data\nconst processExistingTabsData = (\n tabsData: TabData[],\n activeTabId: number,\n callbacks: {\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n): void => {\n const { append, appendSection } = callbacks;\n\n const activeTab = tabsData.find(tab => tab.tab_order === activeTabId + 1);\n if (!activeTab?.data) {\n console.warn(`No active tab found for tab order: ${activeTabId + 1}`);\n return;\n }\n\n const sections = extractSections(activeTab.data);\n const members = activeTab.data.flatMap(section =>\n section.members.map(member => ({ ...member }))\n );\n\n if (members.length > 0) append(members);\n if (sections.length > 0) appendSection(sections);\n};\n\n// Custom hook for form data processing\nexport const useFormDataProcessor = (\n formBuilder: any,\n tabsData: TabData[],\n activeTabValue: number,\n callbacks: {\n removeSection: () => void;\n remove: () => void;\n setTabsData: (data: TabData[]) => void;\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n) => {\n const { removeSection, remove, append } = callbacks;\n\n // Memoize the serialized form data to avoid unnecessary re-renders\n const serializedFormData = useMemo(() =>\n JSON.stringify(formBuilder?.formData),\n [formBuilder?.formData]\n );\n\n // Memoize the initial data processing\n const initialData = useMemo(() => {\n if (!formBuilder?.formData?.length) return null;\n\n try {\n return formBuilderDeConversion(formBuilder.formData);\n } catch (error) {\n console.error('Error processing form data:', error);\n return null;\n }\n }, [serializedFormData]);\n\n useEffect(() => {\n // Handle case when there's no initial data\n if (!initialData) {\n removeSection();\n remove();\n append([]);\n return;\n }\n\n // Determine processing strategy based on available data\n try {\n if (tabsData.length > 0) {\n // Process existing tabs data\n processData(\n { tabsData: tabsData },\n activeTabValue,\n formBuilder,\n tabsData,\n callbacks\n );\n } else if (initialData.tab) {\n // Process new tab data\n processData(\n initialData,\n activeTabValue,\n formBuilder,\n tabsData,\n callbacks\n );\n } else if (initialData.section) {\n // Process section data\n processData(\n initialData,\n 0, // No active tab for section-only data\n formBuilder,\n tabsData,\n callbacks\n );\n } else {\n console.warn('No valid data structure found in initialData');\n removeSection();\n remove();\n append([]);\n }\n } catch (error) {\n console.error('Error in form data processing:', error);\n // Reset to clean state on error\n removeSection();\n remove();\n append([]);\n }\n }, [activeTabValue, serializedFormData, tabsData.length, initialData, callbacks, formBuilder]);\n\n return { initialData };\n};\n\n// Alternative: Direct useEffect implementation (if you prefer not to use custom hook)\nexport const useFormDataEffect = (\n formBuilder: any,\n tabsData: TabData[],\n activeTabValue: number = 0,\n callbacks: {\n removeSection: () => void;\n remove: () => void;\n setTabsData: (data: TabData[]) => void;\n append: (members: FormMember[]) => void;\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\n }\n) => {\n const { removeSection, remove, append } = callbacks;\n\n useEffect(() => {\n let initialData: ProcessedData | null = null;\n\n // Process initial data\n if (formBuilder?.formData?.length) {\n try {\n initialData = formBuilderDeConversion(formBuilder.formData);\n } catch (error) {\n console.error('Error converting form data:', error);\n }\n }\n\n // Handle empty initial data\n if (!initialData) {\n removeSection();\n remove();\n append([]);\n return;\n }\n\n // Process data based on available structure\n try {\n if (tabsData.length > 0) {\n processData(\n { tabsData: tabsData },\n activeTabValue,\n formBuilder,\n tabsData,\n callbacks\n );\n } else if (initialData.tab) {\n processData(\n initialData,\n activeTabValue,\n formBuilder,\n tabsData,\n callbacks\n );\n } else if (initialData.section) {\n processData(\n initialData,\n 0,\n formBuilder,\n tabsData,\n callbacks\n );\n } else {\n console.warn('Invalid data structure in initialData');\n removeSection();\n remove();\n append([]);\n }\n } catch (error) {\n console.error('Error processing form data:', error);\n // Reset to clean state on error\n removeSection();\n remove();\n append([]);\n }\n }, [activeTabValue, JSON.stringify(formBuilder?.formData), tabsData.length]);\n};\n\n// Usage example:\n/*\n// Option 1: Using custom hook\nconst { initialData } = useFormDataProcessor(\n formBuilder,\n tabsData,\n activeTabValue,\n {\n removeSection,\n remove,\n setTabsData,\n append,\n appendSection\n }\n);\n\n// Option 2: Using direct useEffect\nuseFormDataEffect(\n formBuilder,\n tabsData,\n activeTabValue,\n {\n removeSection,\n remove,\n setTabsData,\n append,\n appendSection\n }\n);\n*/\n\n// Path generation utility (separate from the effect)\nexport const generateModulePath = (currentModule: string): string => {\n try {\n const redirectionPath = getRedirectionPath(currentModule);\n return `/dashboard/${currentModule}${redirectionPath}`;\n } catch (error) {\n console.error('Error generating module path:', error);\n throw error;\n }\n};"],"names":["MODULE_PATHS","accounting","PathnameAccounting","FORMS","inventory","PathnameInventory","manufacturing","PathnameManufacturing","procurement","PathnamePurchase","crm","PathnameCrm","rental","PathnameRental","user","PathnameUsers","formatText","text","split","map","word","charAt","toUpperCase","slice","toLowerCase","join","processTableColumns","member","formBuilder","_a","table_columns","length","table","_b","fields","header","accessorKey","visible","Array","isArray","field","index","processMembers","sections","flatMap","section","members","field_type","extractSections","label","is_accordion","id","remove_section","form_switcher_label","form_switcher_name","is_section_field","section_type","switcher_forms","processData","data","activeTabId","tabsData","callbacks","removeSection","remove","tab","processTabData","processSectionData","Error","processExistingTabsData","error","alert","message","tabs","setTabsData","append","appendSection","activeTab","find","tab_order","extractedSections","currentModule","redirectionPath","getRedirectionPath","activeTabValue","useEffect","initialData","formData","formBuilderDeConversion","JSON","stringify","serializedFormData","useMemo"],"mappings":"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"}
|