@erpsquad/common 1.10.1-test → 1.10.2-test
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/{Tooltip-0Msd6gJs.js → Tooltip-BWIywPIG.js} +2 -2
- package/dist/{Tooltip-0Msd6gJs.js.map → Tooltip-BWIywPIG.js.map} +1 -1
- package/dist/{Tooltip-DBg9E0nY.esm.js → Tooltip-BuKMQR27.esm.js} +5 -5
- package/dist/{Tooltip-DBg9E0nY.esm.js.map → Tooltip-BuKMQR27.esm.js.map} +1 -1
- package/dist/{android-12-switch-C2yR_ny0.js → android-12-switch-Cwoy0lqC.js} +2 -2
- package/dist/{android-12-switch-C2yR_ny0.js.map → android-12-switch-Cwoy0lqC.js.map} +1 -1
- package/dist/{android-12-switch-CFHHRoXl.esm.js → android-12-switch-DIRd6Hz1.esm.js} +10 -10
- package/dist/{android-12-switch-CFHHRoXl.esm.js.map → android-12-switch-DIRd6Hz1.esm.js.map} +1 -1
- package/dist/{apiHelper-C7xLzw2l.esm.js → apiHelper-BLkPhudw.esm.js} +5 -5
- package/dist/{apiHelper-C7xLzw2l.esm.js.map → apiHelper-BLkPhudw.esm.js.map} +1 -1
- package/dist/{apiHelper-uNnzNGPt.js → apiHelper-DurABKEn.js} +2 -2
- package/dist/{apiHelper-uNnzNGPt.js.map → apiHelper-DurABKEn.js.map} +1 -1
- package/dist/{arrow-up-RDVMEaNg.esm.js → arrow-up-BYufujcs.esm.js} +47 -48
- package/dist/arrow-up-BYufujcs.esm.js.map +1 -0
- package/dist/{arrow-up-CZCTjL2a.js → arrow-up-u2i6ArLB.js} +47 -47
- package/dist/arrow-up-u2i6ArLB.js.map +1 -0
- package/dist/components/icons/create-custom-icon.d.ts +16 -0
- package/dist/components/index.esm.js +14 -14
- package/dist/components/index.js +1 -1
- package/dist/contexts/index.esm.js +3 -3
- package/dist/contexts/index.js +1 -1
- package/dist/{dashboard-BU3Ivh-m.esm.js → dashboard-BHs900IA.esm.js} +3 -3
- package/dist/dashboard-BHs900IA.esm.js.map +1 -0
- package/dist/{dashboard-DC1wsH2n.js → dashboard-ecHBMV8C.js} +3 -3
- package/dist/dashboard-ecHBMV8C.js.map +1 -0
- package/dist/{default-data-DMRyIpbS.js → default-data-kq9UR-LT.js} +2 -2
- package/dist/{default-data-DMRyIpbS.js.map → default-data-kq9UR-LT.js.map} +1 -1
- package/dist/{default-data-DZ7_2K9V.esm.js → default-data-rqQOC7ed.esm.js} +10 -10
- package/dist/{default-data-DZ7_2K9V.esm.js.map → default-data-rqQOC7ed.esm.js.map} +1 -1
- package/dist/{document-MTw-RQlt.js → document-Dat2mYKY.js} +7 -7
- package/dist/document-Dat2mYKY.js.map +1 -0
- package/dist/{document-jQDTo49w.esm.js → document-Dc0e4Wgt.esm.js} +3 -4
- package/dist/document-Dc0e4Wgt.esm.js.map +1 -0
- package/dist/{form-builder-deconversion-DUwJpbWi.js → form-builder-deconversion-Bt6_FHty.js} +2 -2
- package/dist/{form-builder-deconversion-DUwJpbWi.js.map → form-builder-deconversion-Bt6_FHty.js.map} +1 -1
- package/dist/{form-builder-deconversion-BmnMG6UA.esm.js → form-builder-deconversion-CjCls618.esm.js} +3 -3
- package/dist/{form-builder-deconversion-BmnMG6UA.esm.js.map → form-builder-deconversion-CjCls618.esm.js.map} +1 -1
- package/dist/{fullScreen-bLbPf_Sx.esm.js → fullScreen-B7NBNLnc.esm.js} +2 -2
- package/dist/{fullScreen-bLbPf_Sx.esm.js.map → fullScreen-B7NBNLnc.esm.js.map} +1 -1
- package/dist/{fullScreen-z8Ci7IBM.js → fullScreen-Bk29OQHQ.js} +2 -2
- package/dist/{fullScreen-z8Ci7IBM.js.map → fullScreen-Bk29OQHQ.js.map} +1 -1
- package/dist/hooks/index.esm.js +5 -5
- package/dist/hooks/index.js +1 -1
- package/dist/icons/index.esm.js +7 -7
- package/dist/icons/index.js +1 -1
- package/dist/{index-abVANnYO.esm.js → index-CasNCevI.esm.js} +3 -3
- package/dist/{index-abVANnYO.esm.js.map → index-CasNCevI.esm.js.map} +1 -1
- package/dist/{index-C2m4EKMw.js → index-D6O6Gc88.js} +2 -2
- package/dist/{index-C2m4EKMw.js.map → index-D6O6Gc88.js.map} +1 -1
- package/dist/index.esm.js +19 -19
- package/dist/index.js +1 -1
- package/dist/{languageContext-z0EIAM7m.esm.js → languageContext-BqGnL8Sv.esm.js} +2 -2
- package/dist/{languageContext-z0EIAM7m.esm.js.map → languageContext-BqGnL8Sv.esm.js.map} +1 -1
- package/dist/{languageContext-7DprjT6b.js → languageContext-hAPMY56Y.js} +2 -2
- package/dist/{languageContext-7DprjT6b.js.map → languageContext-hAPMY56Y.js.map} +1 -1
- package/dist/layout/index.esm.js +4 -4
- package/dist/layout/index.js +1 -1
- package/dist/{migration-utils-DRGPH-n4.js → migration-utils-Bh98qTkC.js} +2 -2
- package/dist/{migration-utils-DRGPH-n4.js.map → migration-utils-Bh98qTkC.js.map} +1 -1
- package/dist/{migration-utils-BzRKOUW0.esm.js → migration-utils-byCdwgkF.esm.js} +2 -2
- package/dist/{migration-utils-BzRKOUW0.esm.js.map → migration-utils-byCdwgkF.esm.js.map} +1 -1
- package/dist/notification-BsWK2s3n.js +7 -0
- package/dist/notification-BsWK2s3n.js.map +1 -0
- package/dist/{notification-BNeR5Dyl.esm.js → notification-Dbo3l5Vw.esm.js} +27 -5
- package/dist/notification-Dbo3l5Vw.esm.js.map +1 -0
- package/dist/{sidebar-C6-wzTTF.esm.js → sidebar-DTv1DxTn.esm.js} +5 -5
- package/dist/{sidebar-C6-wzTTF.esm.js.map → sidebar-DTv1DxTn.esm.js.map} +1 -1
- package/dist/{sidebar-BT_zTOCc.js → sidebar-U2vsFarM.js} +2 -2
- package/dist/{sidebar-BT_zTOCc.js.map → sidebar-U2vsFarM.js.map} +1 -1
- package/dist/src/components/icons/create-custom-icon.d.ts +16 -0
- package/dist/{tick-CcyPwRXL.esm.js → tick-Cogsd5aG.esm.js} +8 -9
- package/dist/tick-Cogsd5aG.esm.js.map +1 -0
- package/dist/{tick-Ct-Ir-1S.js → tick-XKXM5oTD.js} +22 -22
- package/dist/tick-XKXM5oTD.js.map +1 -0
- package/dist/{toggle-switch-FMTO6609.esm.js → toggle-switch-Day9cZg5.esm.js} +3 -4
- package/dist/toggle-switch-Day9cZg5.esm.js.map +1 -0
- package/dist/{toggle-switch-BghzgMG8.js → toggle-switch-P3dX3iMp.js} +5 -5
- package/dist/toggle-switch-P3dX3iMp.js.map +1 -0
- package/dist/{trash-BTwzTBYO.esm.js → trash-cWyby5W5.esm.js} +36 -37
- package/dist/trash-cWyby5W5.esm.js.map +1 -0
- package/dist/{trash-5CZCQE4a.js → trash-iM5WzuPQ.js} +124 -124
- package/dist/trash-iM5WzuPQ.js.map +1 -0
- package/dist/{uom-field-wrapper-6F9MCc0-.js → uom-field-wrapper-D4vafbb3.js} +2 -2
- package/dist/{uom-field-wrapper-6F9MCc0-.js.map → uom-field-wrapper-D4vafbb3.js.map} +1 -1
- package/dist/{uom-field-wrapper-3usHZZm1.esm.js → uom-field-wrapper-DHzy94__.esm.js} +12 -12
- package/dist/{uom-field-wrapper-3usHZZm1.esm.js.map → uom-field-wrapper-DHzy94__.esm.js.map} +1 -1
- package/dist/{useAccountSetting-ChWt7JwC.js → useAccountSetting-CNoWakIN.js} +2 -2
- package/dist/{useAccountSetting-ChWt7JwC.js.map → useAccountSetting-CNoWakIN.js.map} +1 -1
- package/dist/{useAccountSetting-BEKGFdbo.esm.js → useAccountSetting-D2gUGGca.esm.js} +2 -2
- package/dist/{useAccountSetting-BEKGFdbo.esm.js.map → useAccountSetting-D2gUGGca.esm.js.map} +1 -1
- package/dist/{useAuth-C18aZa1n.esm.js → useAuth-Bvid1bpz.esm.js} +2 -2
- package/dist/{useAuth-C18aZa1n.esm.js.map → useAuth-Bvid1bpz.esm.js.map} +1 -1
- package/dist/{useAuth-Dpe5kDa6.js → useAuth-CVokk6Ra.js} +2 -2
- package/dist/{useAuth-Dpe5kDa6.js.map → useAuth-CVokk6Ra.js.map} +1 -1
- package/dist/{useLangauge-DKPl4qKr.esm.js → useLangauge-BQjH-l_B.esm.js} +2 -2
- package/dist/{useLangauge-DKPl4qKr.esm.js.map → useLangauge-BQjH-l_B.esm.js.map} +1 -1
- package/dist/{useLangauge-DaCaybJt.js → useLangauge-ySJIB0GV.js} +2 -2
- package/dist/{useLangauge-DaCaybJt.js.map → useLangauge-ySJIB0GV.js.map} +1 -1
- package/dist/utils/index.esm.js +3 -3
- package/dist/utils/index.js +1 -1
- package/dist/views/index.esm.js +5 -5
- package/dist/views/index.js +1 -1
- package/package.json +1 -1
- package/dist/arrow-up-CZCTjL2a.js.map +0 -1
- package/dist/arrow-up-RDVMEaNg.esm.js.map +0 -1
- package/dist/dashboard-BU3Ivh-m.esm.js.map +0 -1
- package/dist/dashboard-DC1wsH2n.js.map +0 -1
- package/dist/document-MTw-RQlt.js.map +0 -1
- package/dist/document-jQDTo49w.esm.js.map +0 -1
- package/dist/notification-BNeR5Dyl.esm.js.map +0 -1
- package/dist/notification-BmKHaKZF.js +0 -6
- package/dist/notification-BmKHaKZF.js.map +0 -1
- package/dist/tick-CcyPwRXL.esm.js.map +0 -1
- package/dist/tick-Ct-Ir-1S.js.map +0 -1
- package/dist/toggle-switch-BghzgMG8.js.map +0 -1
- package/dist/toggle-switch-FMTO6609.esm.js.map +0 -1
- package/dist/trash-5CZCQE4a.js.map +0 -1
- package/dist/trash-BTwzTBYO.esm.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"android-12-switch-C2yR_ny0.js","sources":["../src/components/accordion/accordion.tsx","../src/components/view-modal/view-modal.tsx","../src/components/header-card/header-card.tsx","../src/components/toggle/toggle.tsx","../src/components/filter/components/combinator-select.tsx","../src/components/filter/components/remove-action.tsx","../src/components/filter/components/field-select.tsx","../src/components/filter/components/add-filter.tsx","../src/components/filter/components/add-group.tsx","../src/components/date-picker/date-picker.tsx","../src/components/checkbox/checkbox.tsx","../src/components/form-control/form-builder/form-builder-element/chip-or-placeholder.tsx","../src/components/searchable-select.tsx","../src/components/filter/components/value-editor.tsx","../src/components/filter/components/operator-select.tsx","../src/components/filter/components/delete-group.tsx","../src/components/save-filter-modal/save-filter-modal.tsx","../src/components/filter/filter.tsx","../src/components/dropdown-button/dropdown-button.tsx","../src/components/title-dropdown-button/title-dropdown-button.tsx","../src/components/loaders/modal-loader.tsx","../src/components/upload-excel/upload-excel.tsx","../src/components/action-bar/action-bar.tsx","../src/components/alert/alert.tsx","../src/components/bread-crumb/bread-crumb.tsx","../src/components/chip-generator/chip-generator.tsx","../src/components/date-time-picker/date-time-picker.tsx","../src/components/pagination/pagination.tsx","../src/components/page-navigator/components/add-page-modal.tsx","../src/components/page-navigator/components/shared-page-view.tsx","../src/components/page-navigator/components/shared-page-modal.tsx","../src/components/page-navigator/components/add-page.tsx","../src/components/share-modal/share-modal.tsx","../src/views/beforeAuth/components/share-modal-data/share-modal-data.ts","../src/components/page-navigator/components/page-action.tsx","../src/components/page-navigator/page-navigator.tsx","../src/components/footer/footer.tsx","../src/components/info-card/info-card.tsx","../src/components/tabs/tabs.tsx","../src/components/radio/radio.tsx","../src/components/form-control/form-builder/form-builder-element/radio-button.tsx","../src/components/parties-modal/utils/constant.ts","../src/components/phone-input/phone-input.tsx","../src/components/form-control/form-builder/form-builder-element/phone.tsx","../src/components/upload-media/upload-media.tsx","../src/components/material-table/components/inline-edit-fields.tsx","../src/components/material-table/material-table.tsx","../src/components/parties-modal/parties-modal.tsx","../src/components/parties-modal/validator.tsx","../src/components/form-control/form-builder/form-builder-element/select.tsx","../src/components/form-control/form-builder/form-builder-element/button.tsx","../src/components/form-control/form-builder/form-builder-element/checkbox.tsx","../src/components/form-control/form-builder/form-builder-element/date.tsx","../src/components/form-control/form-builder/form-builder-element/dynamic-currency-input.tsx","../src/components/form-control/form-builder/form-builder-element/dynamic-element-hoc.tsx","../src/components/form-control/form-builder/form-builder-element/dynamic-input-select.tsx","../src/components/form-control/form-builder/form-builder-element/dynamic-tags-input.tsx","../src/components/form-control/form-builder/form-builder-element/info.tsx","../src/components/form-control/form-builder/form-builder-element/media.tsx","../src/components/form-control/form-builder/form-builder-element/section.tsx","../src/components/form-control/form-builder/form-builder-element/table.tsx","../src/components/time-picker/time-picker.tsx","../src/components/form-control/form-builder/form-builder-element/time.tsx","../src/components/toggle-switch/toggle-switch.tsx","../src/components/form-control/form-builder/form-builder-element/toggle-button.tsx","../src/components/form-control/form-parser/form-switcher.tsx","../src/components/form-control/form-parser/form-section.tsx","../src/components/form-control/form-parser/form-parser.tsx","../src/components/team-add-modal.tsx","../src/components/department-add-modal.tsx","../src/components/form-control/form-builder/form-builder-element/location-add-modal/location-add-modal.tsx","../src/components/designation-add-modal.tsx","../src/components/form-control/form-builder/form-builder-element/fixed-asset-item-add-modal/fixed-asset-item-add-modal.tsx","../src/components/brand-add-modal.tsx","../src/components/category-add-modal.tsx","../src/components/source-type-add-modal/source-type-add-modal.tsx","../src/components/form-control/form-builder/form-builder-element/select-configuration.tsx","../src/components/industry-add-modal.tsx","../src/hooks/useSetDefaultConfig.tsx","../src/components/form-control/form-builder/form-builder-element/dynamic-select.tsx","../src/components/location-select.tsx","../src/components/module-button/module-button.tsx","../src/components/switches/android-12-switch.tsx","../src/components/color-picker-input/color-picker-input.tsx","../src/components/fallback/fallback.tsx","../src/components/form-header/form-header.tsx","../src/components/loader.tsx"],"sourcesContent":["import {\r\n AccordionDetails,\r\n Accordion as MUIAccordion,\r\n AccordionSummary,\r\n styled,\r\n AccordionProps as MUIAccordionProps,\r\n} from \"@mui/material\";\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\nimport { memo } from \"react\";\r\n\r\ninterface AccordionProps {\r\n title: string | JSX.Element;\r\n children?: React.ReactNode;\r\n accordionProps?: Partial<MUIAccordionProps>\r\n}\r\nconst Accordion = memo((props: AccordionProps) => {\r\n const { title, children, accordionProps: accordianProps } = props;\r\n\r\n return (\r\n <StyledAccordion {...accordianProps} >\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n aria-controls=\"panel1-content\"\r\n id=\"panel1-header\"\r\n >\r\n {title}\r\n </AccordionSummary>\r\n <AccordionDetails>{children}</AccordionDetails>\r\n </StyledAccordion>\r\n );\r\n});\r\n\r\n\r\nconst StyledAccordion = styled(MUIAccordion)(({ theme: { palette } }) => ({\r\n color: palette.theme?.secondary[1000],\r\n fontSize: \" 0.875rem\",\r\n boxShadow: \"none\",\r\n \".MuiAccordionSummary-root\": {\r\n padding: \"0.625rem 1.5rem\",\r\n minHeight: \"0px !important\",\r\n borderBottomWidth: \"2px\",\r\n borderBottomStyle: \"solid\",\r\n borderBottomColor: palette.theme?.secondary[200],\r\n },\r\n \".MuiAccordionSummary-content\": {\r\n margin: \"0\",\r\n \"&.Mui-expanded\": {\r\n margin: \"0rem\",\r\n },\r\n \"&.MuiButtonBase-root\": {\r\n margin: \"0\",\r\n \"&.MuiAccordionSummary-content.Mui-expanded\": {\r\n margin: \"0\",\r\n },\r\n },\r\n },\r\n \".MuiAccordionDetails-root\": {\r\n padding: \"0\",\r\n },\r\n}));\r\n\r\nexport { Accordion };\r\nexport default Accordion;\r\n","import Button from \"../button/button\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport \"./view-modal.scss\";\nimport { useState } from \"react\";\nimport Modal from \"../modal/modal\";\nimport {\n DialogActions,\n DialogTitle,\n IconButton,\n MenuItem,\n Tab,\n Tabs,\n useMediaQuery,\n useTheme,\n} from \"@mui/material\";\nimport Typography from \"../typography/typography\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport logo from \"../../assets/images\";\nimport Select from \"../select/select\";\nimport viewTypes from \"../../constants/action-bar\";\n\ninterface ActionData {\n label: string;\n position: number;\n}\ninterface ModalPropsType {\n setData: React.Dispatch<React.SetStateAction<ActionData[]>>;\n data: Array<object>;\n setActive: React.Dispatch<React.SetStateAction<string>>;\n disabledViews?: string[]\n}\n\nconst ViewModal = (props: ModalPropsType) => {\n const { data, setData, setActive, disabledViews = [] } = props;\n const [openModal, setOpenModal] = useState(false);\n const [value, setValue] = useState(\"Table\");\n const [disable, setDisable] = useState(false);\n const theme = useTheme();\n const isMdUp = useMediaQuery(theme.breakpoints.up('lg'));\n const handleTabChange = (_: React.SyntheticEvent, newValue: string) => {\n setValue(newValue);\n setDisable(\n Boolean(\n data.find(\n (item: any) => item.label.toLowerCase() === newValue.toLowerCase(),\n ),\n ),\n );\n };\n\n const TabData = [\n {\n label: \"Table\",\n icon: <logo.TableIcon />,\n desc: \"Easily manage, update, and organize your tasks with Table view.\",\n image: <img src={logo.table} />,\n },\n {\n label: \"Grid\",\n icon: <logo.GridIcon />,\n desc: \"Grid of cards, use for mood boards, index cards, and recipes\",\n image: <img src={logo.grid} />,\n },\n // {\n // label: \"Kanban\",\n // icon: <logo.KanbanIcon />,\n // desc: \"Build your perfect Board and easily drag-and-drop tasks between columns.\",\n // image: <img src={logo.kanban} />,\n // },\n // {\n // label: \"Calendar\",\n // icon: <logo.CalenderIcon />,\n // desc: \"Calendar view is your place for planning, scheduling, and resource management.\",\n // image: <img src={logo.calendar} />,\n // },\n // {\n // label: \"Gantt\",\n // icon: <logo.GanttIcon />,\n // desc: \"Plan time, manage resources, visualize dependencies and more with Gantt view.\",\n // image: <img src={logo.gantt} />,\n // },\n ];\n\n const handleSubmit = () => {\n const selectedTabData = TabData.find(\n (data) => data.label.toLowerCase() === value.toLowerCase(),\n );\n if (selectedTabData?.label) {\n if (\n !data.some(\n (item: any) => item.label.toLowerCase() === value.toLowerCase(),\n )\n ) {\n setData([\n ...(data as ActionData[]),\n { label: selectedTabData.label, position: data.length },\n ]);\n\n setActive(selectedTabData?.label);\n setOpenModal(false);\n }\n }\n };\n\n return (\n <div className=\"view-modal\">\n <div className=\"view-modal--Header\">\n |\n <Button\n variant=\"text\"\n startIcon={<AddIcon />}\n sx={isMdUp ? {} : { pr:0 }}\n onClick={() => {\n setOpenModal(true);\n setDisable(\n Boolean(\n data.find(\n (item: any) =>\n item.label.toLowerCase() === value.toLowerCase(),\n ),\n ),\n );\n }}\n >\n {isMdUp ? 'View' : ''}\n </Button>\n </div>\n <Modal\n open={openModal}\n onClose={() => setOpenModal(false)}\n className=\"view-modal\"\n >\n <DialogTitle className=\"view-modal--Head\">\n <Typography type=\"s3\" weight=\"medium\" color=\"#000\">\n Add View\n </Typography>\n <IconButton onClick={() => setOpenModal(false)}>\n <CloseIcon fontSize=\"small\"/>\n </IconButton>\n </DialogTitle>\n\n <div className=\"view-modal--TabsContent\">\n <Tabs\n orientation=\"vertical\"\n value={value}\n onChange={handleTabChange}\n className=\"view-modal--Tab\"\n >\n {TabData &&\n TabData?.map((data) => (\n <Tab\n key={data.label}\n label={`${data?.label} View`}\n iconPosition=\"start\"\n icon={data?.icon}\n value={data.label}\n className=\"view-modal--Tabs\"\n disabled={Boolean(disabledViews?.includes(data.label))}\n />\n ))}\n </Tabs>\n {TabData.map((data) => (\n <div\n key={data.label}\n hidden={value !== data.label}\n className=\"view-modal--TabData\"\n >\n {data.image}\n <div className=\"view-modal--Desc\">\n <Typography type=\"s1\" color={\"theme.secondary.1000\"}>\n {data?.label} Views\n </Typography>\n <Typography type=\"s4\" color={\"theme.secondary.800\"}>\n {data.desc}\n </Typography>\n {(data?.label === viewTypes.KANBAN ||\n data?.label === viewTypes.CALENDAR) && (\n <div className=\"view-modal--BoardContainer\">\n <Typography type=\"s4\" color=\"theme.secondary.900\">\n Group Board by\n </Typography>\n <Select\n placeholder=\"Status\"\n size={\"small\"}\n defaultValue={1}\n className=\"view-modal--Select\"\n variant=\"outlined\"\n >\n <MenuItem value={1}>option 1</MenuItem>\n <MenuItem value={2}>option 2</MenuItem>\n </Select>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n <DialogActions\n className=\"view-modal--Actions\"\n sx={{ backgroundColor: \"theme.secondary.200\" }}\n >\n <Button variant=\"text\" onClick={() => setOpenModal(false)}>\n Cancel\n </Button>\n <Button variant=\"contained\" onClick={handleSubmit} disabled={disable}>\n Add {value} View\n </Button>\n </DialogActions>\n </Modal>\n </div>\n );\n};\n\nexport { ViewModal };\nexport default ViewModal;\n","import Typography from \"../typography/typography\";\nimport \"./header-card.scss\";\nimport logo from \"../../assets/images\";\nimport viewTypes from \"../../constants/action-bar\";\nimport { useMediaQuery, useTheme } from \"@mui/material\";\n\ninterface HeaderCard {\n title: string;\n active: string;\n onClick: () => void;\n key: number;\n}\n\nconst HeaderCard = (props: HeaderCard) => {\n const { title, active, onClick, key, ...rest } = props;\n const theme = useTheme();\n const isMdUp = useMediaQuery(theme.breakpoints.up('lg'));\n\n return (\n <div\n key={key}\n className={\n active && title.includes(active)\n ? \"header-card header-card--Active\"\n : \"header-card\"\n }\n onClick={onClick}\n {...rest}\n >\n {title && title === viewTypes.TABLE ? (\n <logo.TableIcon />\n ) : title === viewTypes.GRID ? (\n <logo.GridIcon />\n ) : title === viewTypes.GANTT ? (\n <logo.GanttIcon />\n ) : title === viewTypes.CALENDAR ? (\n <logo.CalenderIcon />\n ) : title === viewTypes.KANBAN ? (\n <logo.KanbanIcon />\n ) : title === viewTypes.CHART ? (\n <logo.ChartIcon />\n ) : (\n \"\"\n )}\n {isMdUp && \n <Typography type=\"s3\" color=\"inherit\">\n {title} View\n </Typography>\n }\n </div>\n );\n};\n\nexport { HeaderCard };\nexport default HeaderCard;\n","import { Box } from \"@mui/material\";\r\nimport \"./toggle.scss\";\r\nimport { styled } from \"@mui/system\";\r\n\r\nconst ToggleWrapper = styled(Box)(({ theme: { palette } }) => ({\r\n \"& input:checked + .slider\": {\r\n backgroundColor: palette.theme.primary[700],\r\n },\r\n \"& .slider\": {\r\n backgroundColor: palette.theme.secondary[200],\r\n \":hover\": {\r\n backgroundColor: palette.theme.secondary[300],\r\n },\r\n },\r\n \"& input\": {\r\n display: \"none\",\r\n },\r\n}));\r\n\r\ninterface IToggle {\r\n checked: boolean;\r\n onChange: () => void;\r\n}\r\n\r\nconst Toggle = (props: IToggle) => {\r\n return (\r\n <ToggleWrapper>\r\n <label className=\"switch\">\r\n <input type=\"checkbox\" {...props} />\r\n <span className=\"slider round\"></span>\r\n </label>\r\n </ToggleWrapper>\r\n );\r\n};\r\n\r\nexport { Toggle };\r\nexport default Toggle;\r\n","import { MenuItem } from \"@mui/material\";\nimport Select from \"../../select/select\";\nimport Typography from \"../../typography/typography\";\n\nconst CombinatorSelect = (props: any) => {\n const { handleOnChange, value, options, ...rest } = props;\n\n const showDropdown = props.path?.[0] === 1 || props.path?.[1] === 1;\n\n return (\n <>\n {!showDropdown ? (\n <Typography\n type=\"s4\"\n color=\"theme.secondary.1000\"\n className=\"combinator-value\"\n >\n {value}\n </Typography>\n ) : (\n <Select\n value={value}\n onChange={(e: any) => handleOnChange(e.target.value)}\n {...rest}\n className=\"combinator-list\"\n >\n {options?.map(({ name, label }: { name: string; label: string }) => (\n <MenuItem key={name} value={name}>\n <Typography type=\"s4\" color=\"theme.secondary.1000\">\n {label}\n </Typography>\n </MenuItem>\n ))}\n </Select>\n )}\n </>\n );\n};\n\nexport { CombinatorSelect };\nexport default CombinatorSelect;\n","import { Box, IconButton } from \"@mui/material\";\nimport { ActionProps } from \"react-querybuilder\";\nimport { useLanguage } from \"../../../hooks/useLangauge\";\nimport { Trash } from \"../../icons\";\n\nconst RemoveAction = (props: ActionProps) => {\n const { isRtl } = useLanguage();\n const btnStyles = {\n ...(isRtl ? { marginRight:-1.5 } : {}),\n }\n const iconStyles = {\n color: 'theme.grey.600',\n '&:hover': {\n color: 'theme.error.600'\n }\n }\n return (\n <Box>\n <IconButton sx={btnStyles} size={\"small\"} onClick={props.handleOnClick} disableRipple>\n <Trash sx={{ fontSize: '1.35rem', ...iconStyles }} />\n </IconButton>\n </Box>\n );\n};\n\nexport { RemoveAction };\nexport default RemoveAction;\n","import { useEffect, useState } from \"react\";\nimport { Box, MenuItem } from \"@mui/material\";\nimport Select from \"../../select/select\";\nimport Typography from \"../../typography/typography\";\nimport { FieldSelectorProps } from \"react-querybuilder\";\nimport SearchBar from \"../../search-bar/search-bar\";\nimport \"../filter.scss\";\nimport formatText from \"../../../utils/format-text\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FieldSelect = (props: FieldSelectorProps) => {\n\n const { t } = useTranslation();\n\n const { handleOnChange, value, options, ...rest } = props;\n\n const [filteredOptions, setFilteredOptions] = useState<any[]>();\n\n const handleSearchEvent = (searchText: string) => {\n const ops = options?.filter(o => Boolean(o.label?.trim())) || []\n const filteredData = ops.filter((option: any) =>\n option.name.toLowerCase().includes(searchText.toLowerCase()),\n );\n setFilteredOptions(filteredData);\n };\n\n useEffect(() => {\n setFilteredOptions(options?.filter(o => Boolean(o.label?.trim())) || [])\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[options?.length])\n\n\n return (\n <Box width=\"100%\">\n <Select\n fullWidth\n value={value}\n onChange={(e: any) => handleOnChange(e.target.value)}\n {...rest}\n className=\"select-drps\"\n variant=\"outlined\"\n renderValue={(value: any) => formatText(t(filteredOptions?.find((opttion: any)=>opttion.name === value)?.label)?.replace(\"_id\", '')?.replaceAll(\"_\", \" \") || \"Select Default\")}\n onClose={() => setFilteredOptions(options?.filter(o => Boolean(o.label?.trim())) || [])}\n >\n <div className=\"searchbar-box-list new-searchbar\">\n <SearchBar\n placeholder={\"Search Attributes\"}\n handleSearch={(e) => handleSearchEvent(e)}\n />\n </div>\n {filteredOptions?.map((op: any) => (\n <MenuItem key={op.name} value={op.name}>\n <Typography type=\"s4\" color=\"theme.secondary.1000\">\n {formatText(t(op.label)?.replace(\"_id\", '')?.replaceAll(\"_\", \" \"))}\n </Typography>\n </MenuItem>\n ))}\n </Select>\n </Box>\n );\n};\n\nexport { FieldSelect };\nexport default FieldSelect;\n","import { ActionProps } from \"react-querybuilder\";\nimport Button from \"../../button/button\";\nimport { styled } from \"@mui/material\";\nimport { Add } from \"@mui/icons-material\";\n\nconst StyledAddButton = styled(Button)(({ theme: { palette } }) => ({\n \":hover\": {\n backgroundColor: palette.theme?.secondary[100],\n },\n \"&.MuiButton-text\": {\n \":hover\": {\n color: palette.theme?.secondary[1000],\n },\n },\n}));\n\nconst AddFilterButton = (props: ActionProps) => {\n const { handleOnClick, ...rest } = props;\n return (\n <StyledAddButton\n onClick={handleOnClick}\n {...rest}\n className=\"add-filter\"\n variant=\"text\"\n startIcon={<Add/>}\n >\n Add Filter\n </StyledAddButton>\n );\n};\n\nexport { AddFilterButton };\nexport default AddFilterButton;\n","import { styled } from \"@mui/material\";\nimport Button from \"../../button/button\";\nimport { ActionProps } from \"react-querybuilder\";\nimport { Add } from \"@mui/icons-material\";\n\nconst StyledAddButton = styled(Button)(({ theme: { palette } }) => ({\n \":hover\": {\n backgroundColor: palette.theme?.secondary[100],\n },\n \"&.MuiButton-text\": {\n \":hover\": {\n color: palette.theme?.secondary[1000],\n },\n },\n}));\n\nconst AddGroupButton = (props: ActionProps) => {\n const { handleOnClick, ...rest } = props;\n return (\n <StyledAddButton\n onClick={handleOnClick}\n {...rest}\n className=\"add-group\"\n variant=\"text\"\n startIcon={<Add/>}\n >\n Add Group\n </StyledAddButton>\n );\n};\n\nexport { AddGroupButton };\nexport default AddGroupButton;\n","import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\r\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\r\nimport { DatePicker as Date } from '@mui/x-date-pickers/DatePicker';\r\nimport Typography from '../typography/typography';\r\nimport { styled } from '@mui/material';\r\nimport logo from '../../assets/images';\r\nimport './date-picker.scss';\r\nimport dayjs from 'dayjs';\r\nimport { memo } from 'react';\r\n\r\nexport interface DatePickerProps {\r\n\tlabel: string;\r\n\tdisabled?: boolean;\r\n\terror?: boolean;\r\n\tname?: string;\r\n\tvalue?: string | number | Date;\r\n\thelperText?: string;\r\n\tdataPosition?: number;\r\n\tdataName?: string;\r\n\tdisableFutureDates?: boolean;\r\n\tplaceholder?: string;\r\n\trequired?: boolean;\r\n\tdisablePastDates?: boolean;\r\n\tdefaultValue?: string | number | Date | undefined;\r\n\ttextFieldProps?: any;\r\n\tformat?: string;\r\n\r\n}\r\n\r\nconst StyledDatePicker = styled(Date)(({ theme: { palette } }) => ({\r\n\t'& .MuiOutlinedInput-root': {\r\n\t\tpadding: '0',\r\n\t\tcolor: palette.theme?.secondary[800],\r\n\t\t'& fieldset': {\r\n\t\t\tborderColor: palette.theme?.secondary[400]\r\n\t\t},\r\n\t\t'&:hover fieldset': {\r\n\t\t\tborderColor: palette.theme?.secondary[500]\r\n\t\t},\r\n\t\t'&.Mui-focused fieldset': {\r\n\t\t\tborderWidth: '0.0625rem',\r\n\t\t\tborderStyle: 'solid',\r\n\t\t\tborderColor: palette.theme?.primary[700]\r\n\t\t},\r\n\t\t'&.Mui-error fieldset': {\r\n\t\t\tborderColor: palette.theme?.error[600]\r\n\t\t},\r\n\t\t'&.Mui-disabled': {\r\n\t\t\tbackground: palette.theme?.secondary[200],\r\n\t\t\tcolor: palette.theme?.secondary[800]\r\n\t\t},\r\n\t\t'& .MuiInputBase-input::placeholder': {\r\n\t\t\tcolor: palette.theme?.secondary[800],\r\n\t\t\topacity: 1\r\n\t\t}\r\n\t},\r\n\t'& .MuiFormHelperText-root': {\r\n\t\tmarginLeft: 0,\r\n\t\tcolor: palette.theme?.secondary[800],\r\n\t\t'&.Mui-error': {\r\n\t\t\tcolor: palette.theme?.error[600]\r\n\t\t}\r\n\t},\r\n\t'& .MuiIconButton-root': {\r\n\t\tmarginRight: 0\r\n\t},\r\n\t'& .MuiPickersCalendarHeader-labelContainer': {\r\n\t\tfontWeight: 600\r\n\t}\r\n}));\r\n\r\nconst DatePicker = memo((props: DatePickerProps) => {\r\n\tconst {\r\n\t\tlabel,\r\n\t\tdisabled,\r\n\t\terror,\r\n\t\thelperText,\r\n\t\tdataName,\r\n\t\tdataPosition,\r\n\t\tdisableFutureDates = false,\r\n\t\tplaceholder,\r\n\t\trequired = false,\r\n\t\tdisablePastDates = false,\r\n\t\tdefaultValue,\r\n\t\ttextFieldProps,\r\n\t\tformat,\r\n\t\t...rest\r\n\t} = props;\r\n\r\n\treturn (\r\n\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\r\n\t\t\t{label && (\r\n\t\t\t\t<Typography\r\n\t\t\t\t\ttype='s5'\r\n\t\t\t\t\tweight='medium'\r\n\t\t\t\t\tmb={0.5}\r\n\t\t\t\t\tcolor={error ? 'theme.error.600' : 'theme.secondary.800'}\r\n\t\t\t\t\tdata-position={dataPosition}\r\n\t\t\t\t\tdata-name={dataName}>\r\n\t\t\t\t\t{label} {required && <span className='requiredStar'>*</span>}\r\n\t\t\t\t</Typography>\r\n\t\t\t)}\r\n\t\t\t<StyledDatePicker\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tdisableFuture={disableFutureDates}\r\n\t\t\t\tdisablePast={disablePastDates}\r\n\t\t\t\tslotProps={{\r\n\t\t\t\t\ttextField: {\r\n\t\t\t\t\t\thelperText: helperText,\r\n\t\t\t\t\t\terror: error,\r\n\t\t\t\t\t\tplaceholder: placeholder || 'MM/DD/YYYY',\r\n\t\t\t\t\t\t...textFieldProps\r\n\t\t\t\t\t\t// required: required,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdesktopPaper: {\r\n\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\t'& .MuiButtonBase-root.Mui-selected': {\r\n\t\t\t\t\t\t\t\tcolor: 'theme.primary.900',\r\n\t\t\t\t\t\t\t\tbgcolor: '#B6E9D6 !important'\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t'& .MuiButtonBase-root:hover': {\r\n\t\t\t\t\t\t\t\tcolor: 'theme.primary.900',\r\n\t\t\t\t\t\t\t\tbgcolor: '#B6E9D6 !important'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}}\r\n\t\t\t\tformat={format || 'DD-MM-YYYY'}\r\n\t\t\t\tslots={{ openPickerIcon: logo.CalenderIcon }}\r\n\t\t\t\t{...rest}\r\n\t\t\t\t\r\n\t\t\t\tdefaultValue={defaultValue ? dayjs(defaultValue) : undefined}\r\n\t\t\t\tclassName='datePicker'\r\n\t\t\t/>\r\n\t\t</LocalizationProvider>\r\n\t);\r\n});\r\n\r\nexport { DatePicker };\r\nexport default DatePicker;\r\n","import { CheckboxProps, Checkbox as MUICheckbox, styled } from '@mui/material';\r\nimport { CheckBoxIcon, RecgtangleIcon } from '../icons';\r\nimport { memo } from 'react';\r\n\r\nconst StyledCheckbox = styled(MUICheckbox)(({ theme: { palette } }) => ({\r\n\tpadding: '0rem',\r\n\tcolor: palette.theme?.secondary[300],\r\n\tborderRadius: '.625rem',\r\n\t'&.Mui-checked': {\r\n\t\tcolor: palette.theme?.primary[600],\r\n\t\t'&:hover': {\r\n\t\t\tcolor: palette.theme?.primary[500]\r\n\t\t}\r\n\t},\r\n\t'&.Mui-disabled': {\r\n\t\tcolor: palette.theme?.secondary[400]\r\n\t}\r\n}));\r\n\r\nconst Checkbox = memo((props: CheckboxProps) => {\r\n\treturn (\r\n\t\t<StyledCheckbox\r\n\t\t\ticon={<RecgtangleIcon fontSize={props?.size || 'small'} />}\r\n\t\t\tcheckedIcon={<CheckBoxIcon fontSize={props?.size || 'small'} />}\r\n\t\t\tdisableRipple\r\n\t\t\t{...props}\r\n\t\t/>\r\n\t);\r\n});\r\n\r\nexport { Checkbox };\r\nexport default Checkbox;\r\n","import React from 'react';\n// import { Close } from '@mui/icons-material';\nimport { ChipProps } from '@mui/material';\nimport Chip from '../../../chip/chip';\nimport Typography from '../../../typography/typography';\n\ninterface ChipOrPlaceholderProps {\n\tdata: string[];\n\tplaceholder: string;\n\tonDelete?: () => void;\n\tchipProps?: Omit<ChipProps, 'label'>;\n\tdisabled?: boolean;\n\tselectedLabel?: string;\n}\n\nconst ChipOrPlaceholder: React.FC<ChipOrPlaceholderProps> = ({\n\tdata,\n\tplaceholder,\n\tonDelete,\n\tchipProps,\n\tdisabled,\n\tselectedLabel = 'Item'\n}) => (\n\t<>\n\t\t{data.length ? (\n\t\t\t<Chip\n\t\t\t\t// variant='outlined'\n\t\t\t\ttype='normal'\n\t\t\t\tlabel={\n\t\t\t\t\t<Typography color='theme.secondary.1000' type='s5'>\n\t\t\t\t\t\t{data.length} {selectedLabel} Selected\n\t\t\t\t\t</Typography>\n\t\t\t\t}\n\t\t\t\t// deleteIcon={<Close fontSize='large' />}\n\t\t\t\tonDelete={onDelete}\n\t\t\t\tonMouseDown={(event) => event.stopPropagation()}\n\t\t\t\tdisabled={Boolean(disabled)}\n\t\t\t\t{...chipProps}\n\t\t\t\tsx={{\n\t\t\t\t\t...chipProps?.sx,\n\t\t\t\t\t'& .MuiChip-deleteIcon': {\n\t\t\t\t\t\tcolor: 'theme.primary.800',\n\t\t\t\t\t\tfontSize: '1rem',\n\t\t\t\t\t\t'&:hover': {\n\t\t\t\t\t\t\tcolor: 'theme.primary.900'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t/>\n\t\t) : (\n\t\t\t<Typography color='inherit' type='s3'>\n\t\t\t\t{placeholder}\n\t\t\t</Typography>\n\t\t)}\n\t</>\n);\n\nexport default ChipOrPlaceholder;\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n Box,\r\n CircularProgress,\r\n Divider,\r\n IconButton,\r\n InputAdornment,\r\n MenuItem,\r\n OutlinedInput,\r\n} from \"@mui/material\";\r\nimport Select from \"./select/select\";\r\nimport Checkbox from \"./checkbox/checkbox\";\r\nimport Typography from \"./typography/typography\";\r\nimport { Close } from \"./icons\";\r\nimport { debounce, sortBy } from \"lodash\";\r\nimport { fetchApi } from \"../utils/api\";\r\nimport ChipOrPlaceholder from \"./form-control/form-builder/form-builder-element/chip-or-placeholder\";\r\nimport { Add } from \"@mui/icons-material\";\r\nimport { useLanguage } from \"../hooks/useLangauge\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface IOption {\r\n id: string | number;\r\n value: string | number;\r\n label: string | React.ReactNode;\r\n disabled?: boolean;\r\n isGroup?: boolean;\r\n options?: IOption[];\r\n searchLabel?: string;\r\n}\r\n\r\ninterface IPaginationState {\r\n page: number;\r\n hasMore: boolean;\r\n isLoadingMore: boolean;\r\n total: number;\r\n}\r\n\r\ninterface IMenuItems {\r\n options: IOption[];\r\n multiple: boolean;\r\n placeholder: string;\r\n with_checkboxes: boolean;\r\n values: string | string[];\r\n field: any;\r\n disabledIds: any[];\r\n handleClear: () => void;\r\n handleChange?: (value: string | string[]) => void;\r\n hasParent?: boolean;\r\n}\r\n\r\n// Custom API fetch function type for parent components\r\ninterface CustomFetchApiParams {\r\n search?: string;\r\n filters?: any;\r\n limit: number;\r\n skip: number;\r\n select?: string;\r\n order?: string;\r\n}\r\n\r\ninterface CustomFetchApiResponse {\r\n data: IOption[];\r\n pagination?: {\r\n totalCount: number;\r\n };\r\n}\r\n\r\ninterface SearchableSelectProps {\r\n labelId: string;\r\n label: string;\r\n value: any;\r\n onChange?: (event: any, selectedData?: any) => void;\r\n options: IOption[];\r\n multiple?: boolean;\r\n placeholder?: string;\r\n size?: \"small\" | \"medium\";\r\n searchPlaceholder?: string;\r\n CustomDropDownIcon: React.ReactNode;\r\n customStyle: any;\r\n name?: string;\r\n defaultValue?: any;\r\n apiType?: string;\r\n isInternal?: boolean;\r\n autoFocus?: any;\r\n error?: any;\r\n disabled: any;\r\n customeFilter?: string;\r\n attributes?: string;\r\n getSelectedData?: (row: any) => void;\r\n disabledIds: any[];\r\n labelKey?: string;\r\n valueKey?: string;\r\n inputStyle?: any;\r\n onChipRemove?: (value: string) => void;\r\n selectedLabel?: string;\r\n is_loading?: boolean;\r\n hasParent?: boolean;\r\n sortOrder?: string;\r\n handleChange?: (value: string | string[]) => void;\r\n enable_footer?: boolean;\r\n onFooterClick?: () => void;\r\n showCancelButton?: boolean;\r\n /** Custom API function to fetch options from parent component */\r\n customFetchApi?: (params: CustomFetchApiParams) => Promise<CustomFetchApiResponse>;\r\n}\r\n\r\nconst generateMenuItems = ({\r\n options,\r\n multiple,\r\n placeholder,\r\n with_checkboxes,\r\n values,\r\n field,\r\n disabledIds,\r\n handleClear,\r\n handleChange,\r\n hasParent = false,\r\n}: IMenuItems) => {\r\n const itemDisabled = (ls: any) => disabledIds?.includes(ls);\r\n const items: React.ReactElement[] = [];\r\n\r\n if (!multiple) {\r\n items.push(\r\n <MenuItem disabled value='' key=\"placeholder\" sx={{ opacity: `0 !important`, height: `0 !important`, p: `0 !important`, m: `0 !important` }}>\r\n <Typography type='s3' color='theme.secondary.1000'>\r\n <em>{placeholder}</em>\r\n </Typography>\r\n </MenuItem>\r\n );\r\n }\r\n\r\n const selectedValues = Array.isArray(values) ? values?.filter((value) => value) : [];\r\n\r\n // Parent selection handlers\r\n const handleParentChange = (parentValue: string, childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n\r\n const isParentSelected = valueArray.includes(parentValue);\r\n const updatedValues = isParentSelected\r\n ? valueArray.filter((value) => value !== parentValue && !childValues.includes(value))\r\n : [...new Set([...valueArray, parentValue, ...childValues])];\r\n\r\n handleChange?.(updatedValues);\r\n };\r\n\r\n const isAllOptionsSelected = (parentValue: string, childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n return childValues.every((childValue) => valueArray.includes(childValue));\r\n };\r\n\r\n const isSomeOptionsSelected = (childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n return childValues.some((childValue) => valueArray.includes(childValue));\r\n };\r\n\r\n Array.isArray(options) && options?.length > 0 && options?.forEach((option, index) => {\r\n items.push(\r\n <MenuItem\r\n value={option?.value}\r\n key={`${option?.value}-${index}`}\r\n disabled={Boolean(option?.disabled) || itemDisabled(option?.value) || (hasParent && !multiple)}\r\n className={option?.isGroup ? 'select--MenuItemHeader' : ''}\r\n onClick={() => {\r\n if (values?.length == 1) {\r\n handleClear();\r\n }\r\n }}\r\n >\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n {multiple && with_checkboxes && (\r\n <Checkbox\r\n checked={\r\n hasParent\r\n ? isAllOptionsSelected(option.value, option.options || [])\r\n : Boolean(Array.isArray(values) && values?.indexOf(option?.value) > -1)\r\n }\r\n indeterminate={\r\n hasParent && isSomeOptionsSelected(option.options || [])\r\n }\r\n onChange={() =>\r\n hasParent\r\n ? handleParentChange(option.value, option.options || [])\r\n : handleChange?.(option.value)\r\n }\r\n />\r\n )}\r\n <Typography\r\n type='s3'\r\n color='theme.secondary.1000'\r\n onClick={() => handleChange?.(option.value)}\r\n >\r\n {option?.label}\r\n </Typography>\r\n </Box>\r\n </MenuItem>\r\n );\r\n\r\n // Handle child options for grouped items\r\n if (option?.isGroup && Array.isArray(option?.options)) {\r\n option.options.forEach((opt, index) => {\r\n items.push(\r\n <MenuItem\r\n id={`${option.value}-${opt.value} ${index}`}\r\n value={opt.value}\r\n disabled={Boolean(opt.disabled) || itemDisabled(opt.value)}\r\n sx={{ pl: 5 }}\r\n onClick={() => {\r\n if (values?.length == 1) {\r\n handleClear();\r\n }\r\n }}\r\n key={`${option.value}-${opt.value} ${index}`}\r\n >\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n {multiple && with_checkboxes && (\r\n <Checkbox\r\n checked={Boolean(Array.isArray(values) && values?.indexOf(opt.value) > -1)}\r\n />\r\n )}\r\n <Typography\r\n id={`${option.value}-${opt.value} ${index}`}\r\n type='s3'\r\n color='theme.secondary.1000'\r\n onClick={() => handleChange?.(String(opt.value))}\r\n >\r\n {opt.label == \"Payment Entries\" ? \"Payment and Collection Entries\" : opt.label || opt.value}\r\n </Typography>\r\n </Box>\r\n </MenuItem>\r\n );\r\n });\r\n }\r\n });\r\n\r\n // Footer item\r\n if (field.enable_footer) {\r\n items.push(\r\n <Box key=\"footer\">\r\n <Divider flexItem />\r\n <MenuItem sx={{ gap: 1 }} onClick={field.onFooterClick}>\r\n <Add fontSize='small' />\r\n <Typography type='s4' color='theme.secondary.1000'>\r\n Create New {field.label}\r\n </Typography>\r\n </MenuItem>\r\n </Box>\r\n );\r\n }\r\n\r\n // No data fallback\r\n if (!items.length || (items.length == 1 && !multiple)) {\r\n items.push(\r\n <MenuItem disabled key=\"no-data\">\r\n No data available\r\n </MenuItem>\r\n );\r\n }\r\n\r\n return items;\r\n};\r\n\r\nconst SearchableSelect: React.FC<SearchableSelectProps> = (props) => {\r\n const {\r\n labelId,\r\n label,\r\n value,\r\n onChange,\r\n options,\r\n multiple = false,\r\n size = \"small\",\r\n searchPlaceholder,\r\n placeholder,\r\n name,\r\n defaultValue,\r\n apiType,\r\n isInternal = false,\r\n autoFocus,\r\n error,\r\n disabled,\r\n customeFilter,\r\n attributes,\r\n getSelectedData,\r\n disabledIds,\r\n onChipRemove,\r\n selectedLabel,\r\n is_loading,\r\n customStyle = {},\r\n CustomDropDownIcon,\r\n labelKey,\r\n valueKey,\r\n inputStyle,\r\n hasParent = false,\r\n sortOrder = 'id:-1',\r\n handleChange,\r\n enable_footer = false,\r\n onFooterClick,\r\n showCancelButton = true,\r\n customFetchApi\r\n } = props;\r\n\r\n const [searchQuery, setSearchQuery] = useState(\"\");\r\n const [loading, setLoading] = useState<boolean>(false);\r\n const [dynamicOptions, setOptions] = useState<IOption[]>([]);\r\n const [selectedOptions, setSelectedOptions] = useState<IOption[]>([]);\r\n const [isAlredyLoaded, setIsAlredyLoaded] = useState(false);\r\n const [initailLoading, setInitialLoading] = useState(false);\r\n const [searchInitiate, setSearchInitiate] = useState(false);\r\n const [open, setOpen] = useState(false);\r\n const [prevFilter, setPrevFilter] = useState<any>(null);\r\n const { t } = useTranslation();\r\n\r\n // Pagination state\r\n const [pagination, setPagination] = useState<IPaginationState>({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n\r\n const { isRtl } = useLanguage();\r\n const limit = 25;\r\n\r\n const isInternalOptions = useMemo(() => {\r\n return isInternal || (!apiType && !customFetchApi);\r\n }, [isInternal, apiType, customFetchApi]);\r\n\r\n // Local search function for internal options\r\n const searchOptionsLocally = useCallback((searchTerm: string, value: any): IOption[] => {\r\n if (!searchTerm) return options || [];\r\n\r\n const lowercasedSearchTerm = searchTerm.toLowerCase();\r\n\r\n const filteredOptions = hasParent\r\n ? options?.reduce((acc: IOption[], opt) => {\r\n const searchedOptions = opt.options?.filter((item) => {\r\n const label = React.isValidElement(item.label) ? item.searchLabel : String(item.label);\r\n return label?.toLowerCase().includes(lowercasedSearchTerm);\r\n });\r\n\r\n if (searchedOptions?.length) {\r\n acc.push({ ...opt, options: searchedOptions });\r\n }\r\n\r\n return acc;\r\n }, []) || []\r\n : options?.filter((opt) => {\r\n const label = React.isValidElement(opt.label) ? opt.searchLabel : String(opt.label);\r\n return label?.toLowerCase().includes(lowercasedSearchTerm);\r\n }) || [];\r\n\r\n return sortBySelectedValues(filteredOptions, value);\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [options, hasParent]);\r\n\r\n // Clear Selected Options\r\n const handleClear = () => {\r\n onChange?.({ target: { value: multiple ? [] : null } });\r\n if (getSelectedData && typeof getSelectedData === \"function\") {\r\n getSelectedData(null);\r\n }\r\n };\r\n\r\n // Get unique options\r\n const getUniqueOptions = useCallback((data: IOption[]): IOption[] => {\r\n const uniqueOptions = [\r\n ...new Map(data?.map(item => [item.value, item])).values()\r\n ];\r\n return uniqueOptions;\r\n }, []);\r\n\r\n // Sort by selected values\r\n const sortBySelectedValues = useCallback((arrayToSort: IOption[], value: any): IOption[] => {\r\n const selectedValues = Array.isArray(value) ? value : [value];\r\n const sortedValue = sortBy(arrayToSort, (item) => {\r\n const index = selectedValues.indexOf(item.id || item.value);\r\n return index === -1 ? Infinity : index;\r\n });\r\n return sortedValue;\r\n }, []);\r\n\r\n // Options with search and pagination support\r\n const filteredOptions = useMemo(() => {\r\n if (isInternalOptions) {\r\n return searchOptionsLocally(searchQuery, value);\r\n }\r\n return sortBySelectedValues(getUniqueOptions([...dynamicOptions, ...selectedOptions]), value);\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [searchQuery, dynamicOptions, options, value, isInternalOptions, selectedOptions, searchOptionsLocally, sortBySelectedValues, getUniqueOptions]);\r\n\r\n // Handle scroll pagination\r\n const handleScroll = useCallback((event: React.UIEvent<HTMLDivElement>) => {\r\n const { scrollTop, scrollHeight, clientHeight } = event.currentTarget;\r\n const isBottom = scrollHeight - scrollTop <= clientHeight + 10;\r\n\r\n if (isBottom && pagination.hasMore && !pagination.isLoadingMore && !isInternalOptions) {\r\n const nextPage = pagination.page + 1;\r\n fetchOptions(searchQuery, customeFilter, nextPage, true);\r\n }\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [pagination.hasMore, pagination.isLoadingMore, pagination.page, isInternalOptions, searchQuery, JSON.stringify(customeFilter)]);\r\n\r\n // Update Options\r\n const updateOptions = useCallback((newOptions: IOption[], append = false) => {\r\n const oldOptions = append ? dynamicOptions : selectedOptions;\r\n const uniqueOptions = getUniqueOptions([...oldOptions, ...newOptions]);\r\n setOptions(uniqueOptions);\r\n }, [dynamicOptions, selectedOptions, getUniqueOptions]);\r\n\r\n // Fetch Options with pagination support\r\n const fetchOptions = useCallback(async (searchTerm: any = '', filters = customeFilter, page = 1, append = false) => {\r\n // Skip if neither apiType nor customFetchApi is provided\r\n if (!apiType && !customFetchApi) return [];\r\n\r\n setLoading(true);\r\n if (page > 1) {\r\n setPagination(prev => ({ ...prev, isLoadingMore: true }));\r\n }\r\n\r\n try {\r\n let data: IOption[] = [];\r\n let paginationResult: { totalCount?: number } = {};\r\n\r\n // Use custom API if provided, otherwise use default fetchApi\r\n if (customFetchApi) {\r\n const response = await customFetchApi({\r\n search: searchTerm,\r\n filters,\r\n limit,\r\n skip: (page - 1) * limit,\r\n select: attributes,\r\n order: sortOrder\r\n });\r\n data = response?.data || [];\r\n paginationResult = response?.pagination || {};\r\n } else {\r\n const response = await fetchApi({\r\n apiKey: apiType!,\r\n filters: {\r\n limit,\r\n skip: (page - 1) * limit,\r\n search: searchTerm,\r\n filters,\r\n select: attributes,\r\n order: sortOrder\r\n },\r\n labelKey,\r\n valueKey\r\n });\r\n data = response?.data || [];\r\n paginationResult = response?.pagination || {};\r\n }\r\n\r\n if (data && Array.isArray(data)) {\r\n updateOptions(data, append);\r\n\r\n // Update pagination\r\n setPagination(prev => ({\r\n ...prev,\r\n page,\r\n hasMore: (paginationResult?.totalCount || 0) > (page * limit),\r\n total: paginationResult?.totalCount || 0,\r\n isLoadingMore: false\r\n }));\r\n\r\n if (data?.length > 0) {\r\n setSelectedData();\r\n }\r\n }\r\n\r\n return data || [];\r\n } catch (error) {\r\n console.error('Error fetching options:', error);\r\n setPagination(prev => ({ ...prev, isLoadingMore: false }));\r\n return [];\r\n } finally {\r\n setLoading(false);\r\n }\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [apiType, customFetchApi, attributes, sortOrder, limit, updateOptions]);\r\n\r\n // Search Options with debounce\r\n const debounceSearch = useMemo(\r\n () => debounce(async (searchTerm: string) => {\r\n if (loading) return;\r\n\r\n if (!searchTerm && !isInternalOptions && searchInitiate) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n await fetchOptions('', customeFilter, 1, false);\r\n }\r\n if (searchTerm?.length > 1 && !isInternalOptions) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n await fetchOptions(searchTerm, customeFilter, 1, false);\r\n }\r\n }, 700),\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n [isInternalOptions, searchInitiate, JSON.stringify(customeFilter)]\r\n );\r\n\r\n // Initial fetch with filter change detection\r\n const initialFetch = useCallback(async () => {\r\n const condition = JSON.stringify(customeFilter) !== JSON.stringify(prevFilter);\r\n\r\n if (condition && !isInternalOptions && !isAlredyLoaded) {\r\n setPrevFilter(customeFilter);\r\n setOptions([]);\r\n setIsAlredyLoaded(false);\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n }\r\n\r\n if (!isInternalOptions && !isAlredyLoaded) {\r\n await fetchOptions(searchQuery, customeFilter, 1, false);\r\n setIsAlredyLoaded(true);\r\n }\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [JSON.stringify(customeFilter), isInternalOptions, isAlredyLoaded]);\r\n\r\n // Set Selected Data\r\n const setSelectedData = useCallback(() => {\r\n let hasOptions = false;\r\n const isInOptions = filteredOptions?.filter((i: any) =>\r\n multiple ? value?.includes(i?.value) : i?.value == value\r\n );\r\n\r\n if ((Array.isArray(isInOptions) && isInOptions?.length > 0)) {\r\n getSelectedData?.(multiple ? isInOptions : isInOptions[0]);\r\n hasOptions = true;\r\n }\r\n\r\n return hasOptions;\r\n }, [JSON.stringify(filteredOptions), value, multiple]);\r\n\r\n // Fetch Options for Selected Id\r\n const fetchIdOptions = useCallback(async () => {\r\n if (await setSelectedData()) return;\r\n if (open) return;\r\n\r\n const fValue = multiple ? value && value?.filter(v => Boolean(Number(v))) : value ? value : null;\r\n const condition = (multiple ? fValue?.length > 0 : fValue) && !isInternalOptions;\r\n\r\n if (condition) {\r\n setInitialLoading(true);\r\n await fetchOptions('', { ...customeFilter, ...{ '&id.in': fValue } }, 1, false);\r\n setInitialLoading(false);\r\n }\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [open, value, JSON.stringify(customeFilter)]);\r\n\r\n const hasValue = multiple\r\n ? Array.isArray(value) && value.length > 0\r\n : value !== null && value !== undefined && value !== \"\";\r\n\r\n // Effects\r\n useEffect(() => {\r\n if (open) {\r\n debounceSearch(searchQuery);\r\n }\r\n return () => debounceSearch.cancel();\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [searchQuery, JSON.stringify(customeFilter), open, isAlredyLoaded, debounceSearch]);\r\n\r\n useEffect(() => {\r\n setSelectedData();\r\n }, [setSelectedData]);\r\n\r\n useEffect(() => {\r\n fetchIdOptions();\r\n }, [fetchIdOptions]);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n initialFetch();\r\n }\r\n }, [open, initialFetch]);\r\n\r\n useEffect(() => {\r\n const condition = JSON.stringify(customeFilter) !== JSON.stringify(prevFilter);\r\n if (customeFilter && condition) {\r\n setIsAlredyLoaded(false);\r\n }\r\n }, [customeFilter, prevFilter]);\r\n\r\n useEffect(() => {\r\n if (value && !open) {\r\n const selectedData = options?.filter((i: any) =>\r\n multiple ? value?.includes(i?.value) : i?.value == value\r\n ) || [];\r\n setSelectedOptions(selectedData);\r\n }\r\n setSelectedOptions(filteredOptions?.filter((i: any) =>\r\n multiple ? value?.includes(i?.value) : i?.value == value\r\n ));\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [value, open, options, multiple]);\r\n\r\n const handleOnChange = (event: any) => {\r\n const { value } = event.target;\r\n if ((multiple && Array.isArray(value) && value?.filter(v => v).length == 0) || !value) return;\r\n\r\n const isSelected = (item: any) => {\r\n return multiple ? value?.includes(item?.value) : item?.value === value;\r\n };\r\n\r\n const selected = filteredOptions?.filter(isSelected);\r\n onChange?.(event, multiple ? selected : selected?.[0]);\r\n getSelectedData?.(multiple ? selected : selected?.[0]);\r\n\r\n };\r\n\r\n const removeUndefine = (selectOptions: any[]) => {\r\n return Array.isArray(selectOptions) && selectOptions?.length > 0 && selectOptions?.filter((option) => option);\r\n };\r\n\r\n const showGroupLabel = (item: any) => {\r\n if (!item?.length) {\r\n return undefined\r\n }\r\n const mergedOptions = item?.flatMap((i: any) => i?.options)\r\n return mergedOptions?.find((option: any) => option?.value === value)?.label\r\n }\r\n\r\n return (\r\n <Select\r\n labelId={labelId}\r\n name={name}\r\n defaultValue={defaultValue || (multiple ? [] : '')}\r\n placeholder={placeholder}\r\n className=\"filter-select\"\r\n size={size}\r\n onOpen={() => setOpen(true)}\r\n onClose={() => {\r\n setOpen(false);\r\n if (searchQuery?.length > 0) {\r\n setIsAlredyLoaded(false);\r\n }\r\n setSearchInitiate(false);\r\n setSearchQuery('');\r\n }}\r\n onChange={handleOnChange}\r\n showCancelButton={showCancelButton}\r\n multiple={multiple}\r\n label={t(label)}\r\n fullWidth\r\n displayEmpty\r\n autoFocus={autoFocus}\r\n error={Boolean(error)}\r\n disabled={disabled}\r\n value={initailLoading ? (multiple ? [] : '') : value?.id || value || (multiple ? [] : '')}\r\n searchPlaceholder={searchPlaceholder}\r\n CustomDropdownIcon={CustomDropDownIcon}\r\n sx={(multiple && value?.length) ? { ...customStyle, \"& .MuiSelect-select\": { padding: '5.5px !important' } } : customStyle}\r\n MenuProps={{\r\n PaperProps: {\r\n onScroll: handleScroll,\r\n style: { maxHeight: 295, maxWidth: 250 }\r\n }\r\n }}\r\n input={\r\n !disabled ? (\r\n <OutlinedInput\r\n label=\"\"\r\n sx={inputStyle}\r\n endAdornment={\r\n <InputAdornment position=\"end\">\r\n {loading || is_loading ? (\r\n <CircularProgress\r\n size={20}\r\n sx={{ mr: 3, color: \"#4AC08C\" }}\r\n />\r\n ) : (\r\n showCancelButton && hasValue && (\r\n <IconButton\r\n aria-label=\"clear selection\"\r\n onClick={handleClear}\r\n edge=\"end\"\r\n sx={isRtl ? { ml: 2.5 } : { mr: 1.5 }}\r\n size=\"small\"\r\n >\r\n <Close fontSize=\"small\" color='theme.primary.800' />\r\n </IconButton>\r\n )\r\n )}\r\n </InputAdornment>\r\n }\r\n />\r\n ) : undefined\r\n }\r\n renderValue={(selected?: string | string[]) => {\r\n return (\r\n <>\r\n {Array.isArray(selected) ? (\r\n <ChipOrPlaceholder\r\n selectedLabel={selectedLabel}\r\n data={removeUndefine(selected)}\r\n placeholder={placeholder}\r\n onDelete={onChipRemove}\r\n disabled={disabled}\r\n chipProps={{\r\n sx: {\r\n bgcolor: 'theme.primary.100',\r\n border: 0,\r\n // borderRadius: '15px',\r\n '& .MuiTypography-body1': {\r\n color: 'theme.primary.800',\r\n fontWeight: \"500\",\r\n }\r\n }\r\n }}\r\n />\r\n ) : (\r\n hasParent ? showGroupLabel(filteredOptions) :\r\n Array.isArray(filteredOptions) && filteredOptions?.length > 0 && filteredOptions?.find(\r\n (option: any) => option?.value == value\r\n )?.label || selected || placeholder\r\n )}\r\n </>\r\n );\r\n }}\r\n handleSearch={(text) => {\r\n setSearchQuery(text);\r\n setSearchInitiate(true);\r\n }}\r\n >\r\n {generateMenuItems({\r\n options: filteredOptions,\r\n multiple: Boolean(multiple),\r\n placeholder,\r\n values: value,\r\n with_checkboxes: true,\r\n field: {\r\n ...props,\r\n enable_footer,\r\n onFooterClick,\r\n label\r\n },\r\n disabledIds,\r\n handleClear,\r\n handleChange,\r\n hasParent,\r\n t: (key: string) => key\r\n })}\r\n {pagination.isLoadingMore && (\r\n <MenuItem disabled>\r\n <Box sx={{ display: 'flex', justifyContent: 'center', width: '100%' }}>\r\n <CircularProgress size={20} />\r\n </Box>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n );\r\n};\r\n\r\nexport default SearchableSelect;","import { useMemo, useCallback } from 'react';\r\nimport { Box } from '@mui/material';\r\nimport TextField from '../../text-field/text-field';\r\nimport { ValueEditorProps } from 'react-querybuilder';\r\nimport '../filter.scss';\r\nimport DatePicker from '../../date-picker/date-picker';\r\nimport dayjs from 'dayjs';\r\n\r\nimport SearchableSelect from '../../searchable-select';\r\nimport _ from 'lodash';\r\nimport { formatLabel } from '../../../utils/format-text';\r\nimport { getToken } from '@/utils';\r\nimport { getV1FilterFilterTable } from '../../../api-client/api.system-feature/api';\r\n\r\nconst getFilterTableFields = async (\r\n\ttableName: string,\r\n\tsearchText: string,\r\n\tlimit: number,\r\n\toffset: number = 0\r\n) => {\r\n\ttry {\r\n\t\tconst tokenObj = getToken();\r\n\t\tconst response = await getV1FilterFilterTable({\r\n\t\t\ttable: tableName,\r\n\t\t\tsearch: searchText,\r\n\t\t\tlimit: limit,\r\n\t\t\toffset: offset,\r\n\t\t\t'x-token': tokenObj['x-token'],\r\n\t\t\t'x-timezone': String(tokenObj['x-timezone'])\r\n\t\t});\r\n\r\n\t\t// response could be of several types, but use optional chaining and type narrowing\r\n\t\tif ('data' in response && response.data) {\r\n\t\t\tconst result: any[] = (response.data as any)?.result ?? [];\r\n\t\t\tconst totalCount: number = (response as any)?.pagination?.totalCount ?? result.length;\r\n\t\t\tconst items = result.map((r: any) => ({ label: r.name, value: r.id }));\r\n\t\t\treturn { items, totalCount };\r\n\t\t}\r\n\t\treturn { items: [], totalCount: 0 };\r\n\t} catch {\r\n\t\treturn { items: [], totalCount: 0 };\r\n\t}\r\n};\r\n\r\nconst ValueEditor = (props: ValueEditorProps) => {\r\n\t// eslint-disable-next-line\r\n\tlet { values, value, handleOnChange, fieldData, rule, ...rest } = props;\r\n\tconsole.log(\"🚀 ~ ValueEditor ~ values:\", values)\r\n\r\n\tif (!value && fieldData.inputType == 'select') {\r\n\t\tvalue = null;\r\n\t} else if (!Array.isArray(value) && fieldData.inputType == 'select') {\r\n\t\tvalue = [];\r\n\t}\r\n\r\n\tconst isDisabled = useMemo(() => {\r\n\t\treturn rule.operator === 'null' || rule.operator === 'notNull';\r\n\t}, [rule.operator]);\r\n\r\n\tconst customFetch = useCallback(\r\n\t\tasync (params: any) => {\r\n\t\t\tconst search = params?.search || '';\r\n\t\t\tconst limit = params?.limit || 25;\r\n\t\t\tconst offset = params?.skip || 0;\r\n\t\t\tif (fieldData.table) {\r\n\t\t\t\tconst data = await getFilterTableFields(fieldData.table, search, limit, offset);\r\n\t\t\t\tconst optionData = data.items.map((r: any) => ({ id: r.value, value: r.value, label: r.label }));\r\n\t\t\t\treturn { data: optionData, pagination: { totalCount: data.totalCount } };\r\n\t\t\t} else {\r\n\t\t\t\t// const searchedOptions =\r\n\t\t\t\t// \tvalues?.filter((opt) => opt.label?.toLowerCase().includes(search.toLowerCase())) ||\r\n\t\t\t\t// \t[];\r\n\t\t\t\tconst optionData = values?.map((item: any) => ({\r\n\t\t\t\t\t...item,\r\n\t\t\t\t\tvalue: item?.name,\r\n\t\t\t\t\tlabel: item.label ? formatLabel(item.label) : ''\r\n\t\t\t\t}));\r\n\t\t\t\treturn {\r\n\t\t\t\t\tdata: optionData,\r\n\t\t\t\t\tpagination: { totalCount: optionData.length }\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t},\r\n\t\t[fieldData.table, values]\r\n\t);\r\n\r\n\tconst renderOptions = () => {\r\n\t\tswitch (fieldData.inputType) {\r\n\t\t\tcase 'select':\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<SearchableSelect\r\n\t\t\t\t\t\tkey={fieldData.name}\r\n\t\t\t\t\t\tlabel=''\r\n\t\t\t\t\t\tname='insurance_account'\r\n\t\t\t\t\t\tplaceholder='Select'\r\n\t\t\t\t\t\tonChange={(e: any, selected: any) => {\r\n\t\t\t\t\t\t\tconsole.log(\"🚀 ~ renderOptions ~ selected:\", selected)\r\n\t\t\t\t\t\t\tconst mappedValue = selected?.map((i: any) => ({\r\n\t\t\t\t\t\t\t\t...i,\r\n\t\t\t\t\t\t\t\tname: typeof i?.name === 'object' ? i?.name?.value : i?.name\r\n\t\t\t\t\t\t\t}))\r\n\t\t\t\t\t\t\thandleOnChange(mappedValue)\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tvalue={value?.map(i => i?.name)}\r\n\t\t\t\t\t\tmultiple={true}\r\n\t\t\t\t\t\tcustomFetchApi={customFetch}\r\n\t\t\t\t\t\tdisabled={isDisabled}\r\n\t\t\t\t\t\tonChipRemove={() => handleOnChange([])}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t\tcase 'date':\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<DatePicker\r\n\t\t\t\t\t\tonChange={(val) =>\r\n\t\t\t\t\t\t\thandleOnChange(\r\n\t\t\t\t\t\t\t\tdayjs(val).isValid() ? dayjs(val).format('YYYY-MM-DD') : ''\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvalue={value ? dayjs(value) : null}\r\n\t\t\t\t\t\tdisabled={isDisabled}\r\n\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\ttextField: {\r\n\t\t\t\t\t\t\t\tplaceholder: 'YYYY-MM-DD',\r\n\t\t\t\t\t\t\t\tclassName: 'select-drps'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tformat='YYYY-MM-DD'\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\r\n\t\t\tdefault:\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\tonChange={(e: any) => {\r\n\t\t\t\t\t\t\thandleOnChange(e.target.value);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t\tinputProps={{\r\n\t\t\t\t\t\t\tstyle: {\r\n\t\t\t\t\t\t\t\tfontSize: '0.8125rem'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tclassName='select-drps'\r\n\t\t\t\t\t\ttype={fieldData.inputType}\r\n\t\t\t\t\t\tdisabled={isDisabled}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\treturn <Box width='100%'>{renderOptions()}</Box>;\r\n};\r\n\r\nexport { ValueEditor };\r\nexport default ValueEditor;\r\n","import { Box, MenuItem } from \"@mui/material\";\nimport Select from \"../../select/select\";\nimport Typography from \"../../typography/typography\";\nimport { OperatorSelectorProps } from \"react-querybuilder\";\nimport formatText from \"../../../utils/format-text\";\n\nconst OperatorSelect = (props: OperatorSelectorProps) => {\n const { handleOnChange, options, ...rest } = props;\n\n\n return (\n <Box width='100%'>\n <Select\n fullWidth\n {...rest}\n onChange={(e: any) => handleOnChange(e.target.value)}\n className=\"select-drps\"\n variant=\"outlined\"\n renderValue= {(selected: string) => {\n const dValue = options?.find(o => o.name==selected)?.label\n return dValue ? formatText(dValue) : selected\n }}\n >\n {options?.filter(o => Boolean(o.label?.trim()))?.map((op: any) => (\n <MenuItem key={op.name} value={op.name}>\n <Typography type=\"s4\" color=\"theme.secondary.1000\">\n {formatText(op.label)}\n </Typography>\n </MenuItem>\n ))}\n </Select>\n </Box>\n );\n};\n\nexport { OperatorSelect };\nexport default OperatorSelect;\n","import Button from \"../../button/button\";\n// import Typography from \"../../typography/typography\";\nimport { ActionProps } from \"react-querybuilder\";\nimport { Trash } from \"../../icons\";\n\nconst RemoveGroupAction = (props: ActionProps) => {\n const { handleOnClick } = props;\n\n return (\n <Button\n className=\"filterGrp-remove-btn\"\n variant=\"outlined\"\n onClick={handleOnClick}\n sx={({palette}) => ({\n marginRight: \"0px\",\n marginLeft: \"auto\",\n color: `${palette.theme.error?.[600]} !important`\n })}\n startIcon={<Trash color=\"theme.error.600\" fontSize=\"small\"/>}\n >\n Delete Group\n </Button>\n );\n};\n\nexport { RemoveGroupAction };\nexport default RemoveGroupAction;\n","import {\n Box,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n} from \"@mui/material\";\nimport Close from \"@mui/icons-material/Close\";\nimport { useEffect, useState } from \"react\";\nimport Modal from \"../modal/modal\";\nimport Typography from \"../typography/typography\";\nimport TextField from \"../text-field/text-field\";\nimport Button from \"../button/button\";\nimport { FolderSave } from \"../icons\";\n\ninterface SaveFilter {\n open: boolean;\n onClose: () => void;\n handleSubmit: (name: string) => void;\n oldName?: string;\n}\n\nconst SaveFilterModal = ({\n open,\n onClose,\n handleSubmit,\n oldName,\n}: SaveFilter) => {\n const [name, setName] = useState<string>(\"\");\n\n useEffect(() => {\n if (oldName !== undefined) {\n setName(oldName);\n }\n }, [oldName]);\n\n const handleSave = async (name: string) => {\n if (name) {\n const saved = await handleSubmit(name);\n\n if(saved) {\n setName(\"\");\n onClose();\n }\n }\n\n };\n\n return (\n <>\n <Modal fullWidth onClose={onClose} open={open}>\n <DialogTitle>\n <Box sx={{ display: 'flex', alignItems: 'center', gap:0.5 }}>\n <FolderSave sx={{ fontSize: '1.25rem'}}/>\n <Typography type=\"s2\" weight=\"medium\" color={\"theme.secondary.1000\"}>\n Save active filters\n </Typography>\n </Box>\n <IconButton edge=\"end\" onClick={onClose} size=\"small\">\n <Close fontSize=\"inherit\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers>\n <TextField\n label=\"Name\"\n fullWidth\n placeholder=\"Name Filter\"\n value={name}\n onChange={(e: any) => setName(e.target.value)}\n />\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"outlined\"\n onClick={onClose}\n style={{\n color: \"black\",\n }}\n >\n Cancel\n </Button>\n <Button onClick={() => handleSave(name)}>\n {oldName ? \"Rename\" : \"Save\"}\n </Button>\n </DialogActions>\n </Modal>\n </>\n );\n};\n\nexport { SaveFilterModal };\nexport default SaveFilterModal;\n","/* eslint-disable */\r\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport type { RuleGroupType } from \"react-querybuilder\";\r\nimport \"react-querybuilder/dist/query-builder.scss\";\r\nimport { QueryBuilder /* , formatQuery */ } from \"react-querybuilder\";\r\nimport { QueryBuilderMaterial } from \"@react-querybuilder/material\";\r\nimport {\r\n Box,\r\n IconButton,\r\n MenuItem,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n OutlinedInput,\r\n InputAdornment,\r\n Alert,\r\n} from \"@mui/material\";\r\nimport \"./filter.scss\";\r\nimport Select from \"../select/select\";\r\nimport Typography from \"../typography/typography\";\r\nimport { Close } from \"@mui/icons-material\";\r\nimport CombinatorSelect from \"./components/combinator-select\";\r\nimport RemoveAction from \"./components/remove-action\";\r\nimport FieldSelect from \"./components/field-select\";\r\nimport AddFilterButton from \"./components/add-filter\";\r\nimport AddGroupButton from \"./components/add-group\";\r\nimport ValueEditor from \"./components/value-editor\";\r\nimport OperatorSelect from \"./components/operator-select\";\r\nimport Button from \"../button/button\";\r\nimport RemoveGroupAction from \"./components/delete-group\";\r\nimport SearchBar from \"../search-bar/search-bar\";\r\nimport SaveFilterModal from \"../save-filter-modal/save-filter-modal\";\r\n\r\nimport {\r\n putV1FilterId,\r\n deleteV1FilterId,\r\n} from \"../../api-client/api.system-feature/api\";\r\nimport type * as Types from \"../../api-client/api.system-feature/api-types\";\r\nimport { auth } from \"../../constants/auth\";\r\nimport { generateFields, generateQueryString, getErrorMessage } from \"../../utils/common\";\r\nimport { usePages } from \"../../hooks/use-pages\";\r\nimport _ from \"lodash\";\r\nimport { Edit, Trash } from \"../icons\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { IResources, routeToResourceMap } from \"../../constants/route-page-map\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { useLanguage } from \"../../hooks/useLangauge\";\r\n\r\ninterface IFilter {\r\n open: boolean;\r\n onClose: () => void;\r\n activeView?: string;\r\n savedFilters?: SavedFilter[];\r\n fetchSavedFilters?: () => Promise<void>;\r\n setFilterBar?: any;\r\n onSaveFilter?: (query: RuleGroupType) => void;\r\n onSelectedFilter?: (filterName: string) => void;\r\n fields: any;\r\n applyFilter: any;\r\n isUseFields?: boolean;\r\n}\r\n\r\ninterface SavedFilter {\r\n id: string;\r\n name: string;\r\n query: RuleGroupType;\r\n}\r\n\r\nconst initialQuery: RuleGroupType = { combinator: \"and\", rules: [] };\r\n\r\nconst Filter = ({\r\n open,\r\n onClose,\r\n // activeView,\r\n savedFilters,\r\n fetchSavedFilters,\r\n onSaveFilter,\r\n onSelectedFilter,\r\n applyFilter,\r\n fields = [],\r\n isUseFields = false\r\n}: IFilter) => {\r\n const location = useLocation();\r\n\r\n const token = localStorage.getItem(auth.storageTokenKeyName);\r\n const { updatePageInfo, activePage, schemaFields, setActivePage } = usePages()\r\n\r\n fields = isUseFields ? generateFields(fields) : (schemaFields.length ? generateFields(schemaFields) : fields)\r\n const [query, setQuery] = useState<RuleGroupType>(initialQuery);\r\n const [filteredSavedFilters, setFilteredSavedFilters] = useState<\r\n SavedFilter[]\r\n >(savedFilters ?? []);\r\n const [selectedFilter, setSelectedFilter] = useState<any>(null);\r\n const [openRenameFilter, setIsOpenRenameFilter] = useState<any>(null);\r\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\r\n const { isRtl } = useLanguage();\r\n const resources: IResources = useMemo(() => routeToResourceMap[location.pathname] || null, [location.pathname])\r\n\r\n useEffect(() => {\r\n savedFilters && setFilteredSavedFilters(savedFilters);\r\n }, [savedFilters]);\r\n\r\n\r\n const handleApplyFilter = useCallback((clear: boolean = false) => {\r\n let q = query\r\n const isInvalid = isDuplicatedFilters(q)\r\n if (isInvalid) {\r\n setErrorMessage(\"Invalid filter\")\r\n return\r\n }\r\n if (clear) {\r\n q = initialQuery\r\n setQuery(q)\r\n } else {\r\n const generatedSQLQuery = q ? generateQueryString(q) : q;\r\n updatePageInfo({ filters: q, filterQueryString: generatedSQLQuery })\r\n // applyFilter(generatedSQLQuery);\r\n onClose();\r\n }\r\n }, [query, applyFilter, onClose]);\r\n\r\n const handleQueryChange = (q: RuleGroupType) => {\r\n const updatedRules = q.rules.map((rule, i) => ({\r\n ...rule,\r\n value: rule.field !== query.rules?.[i]?.field || ['null', 'notNull'].includes(rule.operator) ? \"\" : rule.value\r\n }));\r\n let isValid = true;\r\n let errorMessage = '';\r\n\r\n // // Helper function to check for invalid aggregate usage, considering parent combinators\r\n // const checkForInvalidAggregateUsage = (rules: any[], combinator: string, parentCombinator: string | null): boolean => {\r\n // let hasAggregateField = false;\r\n // let hasNonAggregateField = false;\r\n\r\n // rules.forEach(rule => {\r\n // // Check nested groups\r\n // if (rule.rules) {\r\n // // If the current group or any parent has an 'OR', pass it down\r\n // const currentCombinator = combinator === 'or' || parentCombinator === 'or' ? 'or' : combinator;\r\n // checkForInvalidAggregateUsage(rule.rules, rule.combinator, currentCombinator);\r\n // } else {\r\n // // Find the field in the fields array and check if it's an aggregate\r\n // const field = fields.find((f: any) => f.name === rule.field);\r\n\r\n // if (field?.is_aggregate) {\r\n // hasAggregateField = true;\r\n // } else {\r\n // hasNonAggregateField = true;\r\n // }\r\n // }\r\n // });\r\n\r\n // // If any parent or current rule uses 'OR' with a mix of aggregate and non-aggregate fields, it's invalid\r\n // if ((combinator === 'or' || parentCombinator === 'or') && hasAggregateField && hasNonAggregateField) {\r\n // isValid = false;\r\n // errorMessage = 'Mixing aggregate and non-aggregate fields in OR conditions may lead to unexpected results.';\r\n // }\r\n\r\n // return isValid;\r\n // };\r\n\r\n // Start checking from the root level (no parent combinator initially)\r\n\r\n\r\n // Always set the query, regardless of validity\r\n setQuery({ ...q, rules: updatedRules });\r\n\r\n // Set error message if invalid, otherwise clear it\r\n if (!isValid) {\r\n setErrorMessage(errorMessage);\r\n } else {\r\n setErrorMessage(null);\r\n }\r\n\r\n // Always call onSaveFilter, if it exists\r\n if (onSaveFilter) {\r\n onSaveFilter(q);\r\n }\r\n };\r\n\r\n const handleFilterSwitch = (sf?: any) => {\r\n if (sf) {\r\n setSelectedFilter(sf);\r\n setQuery(sf.query);\r\n if (onSelectedFilter) {\r\n onSelectedFilter(sf);\r\n }\r\n } else {\r\n setSelectedFilter(null);\r\n setQuery(initialQuery);\r\n if (onSelectedFilter) {\r\n onSelectedFilter(null);\r\n }\r\n }\r\n };\r\n\r\n const handleSearchEvent = (searchText: string) => {\r\n const filteredFilters = savedFilters?.filter((filter: any) =>\r\n filter.name.toLowerCase().includes(searchText.toLowerCase())\r\n );\r\n if (filteredFilters) {\r\n setFilteredSavedFilters(filteredFilters);\r\n }\r\n };\r\n\r\n const handleRenameFilter = async (filterId: string, newName: string) => {\r\n const putFilterRequest: Types.PutV1FilterIdRequest = {\r\n \"x-token\": token,\r\n id: filterId,\r\n name: newName,\r\n module: resources?.fieldResource || resources?.pageResource\r\n };\r\n\r\n try {\r\n await putV1FilterId(putFilterRequest)\r\n // setSelectedFilter(newName);\r\n if (fetchSavedFilters) {\r\n fetchSavedFilters();\r\n }\r\n enqueueSnackbar('Filters renamed successfully.')\r\n } catch (error) {\r\n let m: string = 'Something went wrong on saving filters'\r\n if (error instanceof Error) {\r\n m = getErrorMessage(error.message)\r\n }\r\n enqueueSnackbar(m, { variant: 'error' })\r\n return false\r\n }\r\n return true\r\n };\r\n const handleUpdateSelectedFilterQuery = async () => {\r\n if (selectedFilter) {\r\n\r\n const putFilterRequest: Types.PutV1FilterIdRequest = {\r\n \"x-token\": token,\r\n id: selectedFilter.id,\r\n data: query,\r\n };\r\n\r\n putV1FilterId(putFilterRequest)\r\n .then((response: any) => {\r\n if (fetchSavedFilters) {\r\n fetchSavedFilters();\r\n }\r\n setActivePage((prev: any) => ({\r\n ...prev,\r\n filters: {\r\n ...prev.filters,\r\n rules: query.rules,\r\n combinator: query.combinator,\r\n name: selectedFilter.name\r\n\r\n }\r\n }));\r\n })\r\n .catch((err: any) => enqueueSnackbar(\"Error renaming saved filters:\", { variant: 'error' }));\r\n }\r\n };\r\n\r\n const handleSubmitRename = (name: string) => {\r\n if (openRenameFilter) {\r\n return handleRenameFilter(openRenameFilter.id, name);\r\n }\r\n };\r\n\r\n const handleDeleteFilter = async (filterId: string) => {\r\n const deleteFilterRequest: Types.DeleteV1FilterIdRequest = {\r\n \"x-token\": token,\r\n id: filterId,\r\n };\r\n\r\n deleteV1FilterId(deleteFilterRequest)\r\n .then((response: any) => {\r\n setSelectedFilter(null);\r\n setQuery(initialQuery);\r\n if (fetchSavedFilters) {\r\n fetchSavedFilters();\r\n }\r\n\r\n })\r\n .catch((err: any) => console.log(\"Error deleting saved filters:\", err));\r\n };\r\n\r\n useEffect(() => {\r\n let q = initialQuery\r\n if (!_.isEmpty(activePage.filters)) {\r\n q = activePage.filters\r\n }\r\n setQuery(q)\r\n const selectedFilter = savedFilters?.find((f: any) => f.name === activePage?.filters?.name);\r\n setSelectedFilter(selectedFilter || null);\r\n }, [activePage?.filters, savedFilters]);\r\n\r\n const isDuplicatedFilters = (rule) => {\r\n let uniques: string[] = []\r\n rule?.rules?.forEach((r: any) => {\r\n if (uniques.includes(r.field) && rule.combinator == 'and') {\r\n return true\r\n }\r\n uniques.push(r.field)\r\n })\r\n return uniques.length !== rule?.rules?.length\r\n }\r\n\r\n\r\n const isRuleInvalid = (rule: any): boolean => {\r\n // If it's a group (has nested rules), recurse\r\n if (Array.isArray(rule.rules)) {\r\n return rule.rules.length ? rule.rules.some(isRuleInvalid) : !rule.rules.length;\r\n }\r\n\r\n // Otherwise, validate individual rule\r\n return (\r\n !rule.field ||\r\n (_.isEmpty(rule.value) && !['null', 'notNull'].includes(rule.operator))\r\n );\r\n };\r\n\r\n const disabled = useMemo(() => isRuleInvalid(query) || errorMessage, [query, errorMessage])\r\n // const disabled = isRuleInvalid(query) || errorMessage;\r\n\r\n return (\r\n <div>\r\n <Dialog\r\n open={open}\r\n onClose={onClose}\r\n maxWidth='md'\r\n fullWidth={true}\r\n PaperProps={{\r\n sx: { borderRadius: 2 }\r\n }}\r\n >\r\n <DialogTitle className=\"filter-header\">\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n Filters\r\n </Typography>\r\n <Box gap={1} display={\"flex\"}>\r\n <Select\r\n fullWidth\r\n size=\"small\"\r\n className=\"filter-dropdown\"\r\n value={selectedFilter ? selectedFilter.name : \"Saved Filters\"}\r\n onChange={(event: any) => {\r\n const sf = savedFilters?.find(f => f.name == event.target.value)\r\n handleFilterSwitch(sf)\r\n }}\r\n variant=\"outlined\"\r\n onClose={() => {\r\n setTimeout(() => {\r\n handleSearchEvent(\"\")\r\n }, 500);\r\n }}\r\n input={\r\n selectedFilter ? (\r\n <OutlinedInput\r\n label=''\r\n endAdornment={\r\n <InputAdornment position='end'>\r\n <IconButton\r\n aria-label='clear selection'\r\n onClick={() => {\r\n handleFilterSwitch()\r\n }}\r\n edge='end'\r\n sx={{ mr: 1.5 }}\r\n size='small'>\r\n <Close sx={{ fontSize: '1rem' }} />\r\n </IconButton>\r\n </InputAdornment>\r\n }\r\n />\r\n ) : undefined\r\n }\r\n >\r\n <div className=\"searchbar-box-list\">\r\n <SearchBar\r\n placeholder={\"Search Filters\"}\r\n handleSearch={(e) => handleSearchEvent(e)}\r\n />\r\n </div>\r\n {/* <Typography\r\n color=\"theme.secondary.1000\"\r\n type=\"s4\"\r\n className=\"filter-title\"\r\n >\r\n Saved Filters\r\n </Typography> */}\r\n {filteredSavedFilters?.map((savedFilter: SavedFilter) => (\r\n <MenuItem\r\n key={savedFilter.id}\r\n value={savedFilter?.name}\r\n className=\"menu-list\"\r\n selected={selectedFilter?.name == savedFilter?.name}\r\n >\r\n <Typography color=\"theme.secondary.1000\" type=\"s3\">\r\n {savedFilter?.name}\r\n </Typography>\r\n\r\n <div className=\"icon-list\">\r\n <IconButton size=\"small\" onClick={(e) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n setIsOpenRenameFilter(savedFilter)\r\n }}>\r\n <Edit fontSize=\"small\" color={selectedFilter?.name == savedFilter?.name ? \"theme.primary.800\" : 'inherit'} />\r\n </IconButton>\r\n <IconButton size=\"small\" onClick={(e) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n handleDeleteFilter(savedFilter.id)\r\n }} color=\"error\">\r\n <Trash fontSize=\"small\" color=\"theme.error.600\" />\r\n </IconButton>\r\n </div>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n <SaveFilterModal\r\n open={openRenameFilter !== null}\r\n onClose={() => setIsOpenRenameFilter(null)}\r\n handleSubmit={(name) => handleSubmitRename(name)}\r\n oldName={openRenameFilter?.name}\r\n />\r\n <Box>\r\n <IconButton size=\"small\" onClick={onClose}>\r\n <Close fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n </Box>\r\n </DialogTitle>\r\n <DialogContent className=\"content\">\r\n {/* Display error message */}\r\n {errorMessage && (\r\n <Alert severity=\"error\" sx={{ px: 1, pt: 0.5, mb: 1 }}>\r\n <Typography\r\n color=\"error\"\r\n type=\"s4\"\r\n >\r\n {errorMessage}\r\n </Typography>\r\n </Alert>\r\n )}\r\n <QueryBuilderMaterial>\r\n <QueryBuilder\r\n fields={fields || []}\r\n query={query}\r\n onQueryChange={handleQueryChange}\r\n showCombinatorsBetweenRules={true}\r\n controlClassnames={{\r\n header: \"actions\",\r\n }}\r\n controlElements={{\r\n addRuleAction: AddFilterButton,\r\n addGroupAction: AddGroupButton,\r\n combinatorSelector: CombinatorSelect,\r\n fieldSelector: FieldSelect,\r\n operatorSelector: OperatorSelect,\r\n removeRuleAction: RemoveAction,\r\n valueEditor: ValueEditor,\r\n removeGroupAction: RemoveGroupAction,\r\n }}\r\n />\r\n <Button\r\n variant=\"text\"\r\n className={isRtl ? 'remove-filters_rtl' : 'remove-filters'}\r\n onClick={() => {\r\n handleApplyFilter(true)\r\n }}\r\n disabled={disabled}\r\n >\r\n Clear all filters\r\n </Button>\r\n </QueryBuilderMaterial>\r\n </DialogContent>\r\n <DialogActions className=\"filter-footer\">\r\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: selectedFilter ? 'space-between' : 'flex-end', width: '100%' }}>\r\n {selectedFilter &&\r\n <Box>\r\n <Button onClick={handleUpdateSelectedFilterQuery}>\r\n Update Seleted filter\r\n </Button>\r\n </Box>\r\n }\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n <Button className=\"cancel-filter-btn\" onClick={onClose}>\r\n Cancel\r\n </Button>\r\n <Button\r\n disabled={disabled}\r\n onClick={() => handleApplyFilter()}\r\n >\r\n Apply\r\n </Button>\r\n </Box>\r\n </Box>\r\n </DialogActions>\r\n </Dialog>\r\n </div>\r\n );\r\n};\r\n\r\nexport { Filter };\r\nexport default Filter;\r\n","import * as React from 'react';\nimport ButtonGroup, { ButtonGroupProps } from '@mui/material/ButtonGroup';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport Grow from '@mui/material/Grow';\nimport Paper from '@mui/material/Paper';\nimport Popper from '@mui/material/Popper';\nimport MenuItem from '@mui/material/MenuItem';\nimport MenuList from '@mui/material/MenuList';\nimport Button from '../button/button';\nimport { ArrowDownTwo } from '../icons';\nimport Typography from '../typography/typography';\nimport { ButtonProps, CircularProgress, SxProps } from '@mui/material';\nimport { useLanguage } from '../../hooks/useLangauge';\n\nexport interface IDropdownMenuOption {\n\tlabel: string | JSX.Element;\n\tcallback: (event?: any, index?: number) => void;\n\tcolor?: string;\n\tdisableToggle?: boolean;\n}\n\ninterface DropdownButtonProps extends ButtonProps {\n\tchildren?: React.ReactNode;\n\toptions: IDropdownMenuOption[];\n\tisMenuThirdItemDisabled?: boolean;\n\tisOnlyDropDownButton?: boolean;\n\tonlyDropDownButtonProps?: {\n\t\tstyle?: SxProps;\n\t};\n\tbuttonGroupProps?: ButtonGroupProps;\n\tdropdownButtonProps?: ButtonGroupProps;\n\ttoggleCallback?: (e?: boolean) => void;\n\tloading?: boolean;\n}\n\nconst DropdownButton: React.FC<DropdownButtonProps> = ({\n\tchildren,\n\toptions,\n\tisMenuThirdItemDisabled,\n\tisOnlyDropDownButton = false,\n\tonlyDropDownButtonProps = null,\n\tbuttonGroupProps = null,\n\tdropdownButtonProps=null,\n\ttoggleCallback,\n\tloading = false,\n\t...rest\n}) => {\n\tconst [open, setOpen] = React.useState(false);\n\tconst anchorRef = React.useRef<HTMLDivElement>(null);\n const {isRtl}=useLanguage();\n\tconst handleToggle = () => {\n\t\tsetOpen((prevOpen) => !prevOpen);\n\t};\n\n\tconst handleClose = (event: Event) => {\n\t\tif (\n\t\t\tanchorRef.current &&\n\t\t\tanchorRef.current.contains(event.target as HTMLElement)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetOpen(false);\n\t};\n\n\tReact.useEffect(() => {\n\t\ttoggleCallback?.(open);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [open]);\n\n\treturn (\n\t\t<React.Fragment>\n\t\t\t<ButtonGroup\n\t\t\t\tsx={loading ? { boxShadow: 'none' } : isRtl?{flexDirection:'row-reverse'}:{}}\n\t\t\t\t{...buttonGroupProps}\n\t\t\t\tref={anchorRef}\n\t\t\t\tdisabled={loading}>\n\t\t\t\t{isOnlyDropDownButton ? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tborderRightColor: '#ffffff20 !important',\n\t\t\t\t\t\t\t...onlyDropDownButtonProps?.style\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonClick={handleToggle}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</Button>\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\t\tsx={(theme) => ({\n\t\t\t\t\t\t\t\tborderRightColor: `${theme.palette.theme?.secondary[100]} !important`,\n\t\t\t\t\t\t\t\tborderRight: '1px solid',\n\t\t\t\t\t\t\t\tborderTopRightRadius: 0,\n\t\t\t\t\t\t\t\tborderBottomRightRadius: 0,\n\t\t\t\t\t\t\t\t...(typeof rest?.sx === 'function'\n\t\t\t\t\t\t\t\t\t? rest.sx(theme)\n\t\t\t\t\t\t\t\t\t: rest?.sx || {})\n\t\t\t\t\t\t\t})}>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\taria-controls={open ? 'split-button-menu' : undefined}\n\t\t\t\t\t\t\taria-expanded={open ? 'true' : undefined}\n\t\t\t\t\t\t\taria-label='select merge strategy'\n\t\t\t\t\t\t\taria-haspopup='menu'\n\t\t\t\t\t\t\t{...dropdownButtonProps}\n\t\t\t\t\t\t\tsx={(theme) => ({\n\t\t\t\t\t\t\t\tp: 1,\n\t\t\t\t\t\t\t\tminWidth: 'unset !important',\n\t\t\t\t\t\t\t\tborderTopLeftRadius: 0,\n\t\t\t\t\t\t\t\tborderBottomLeftRadius: 0,\n\t\t\t\t\t\t\t\t...(typeof dropdownButtonProps?.sx === 'function'\n\t\t\t\t\t\t\t\t\t? dropdownButtonProps.sx(theme)\n\t\t\t\t\t\t\t\t\t: dropdownButtonProps?.sx || {})\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\tonClick={handleToggle}>\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t<CircularProgress size={15} color='inherit' />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ArrowDownTwo fontSize='small' />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</ButtonGroup>\n\t\t\t<Popper\n\t\t\t\tsx={{\n\t\t\t\t\tzIndex: 1\n\t\t\t\t}}\n\t\t\t\topen={open}\n\t\t\t\tanchorEl={anchorRef.current}\n\t\t\t\trole={undefined}\n\t\t\t\ttransition\n\t\t\t\tdisablePortal>\n\t\t\t\t{({ TransitionProps, placement }) => (\n\t\t\t\t\t<Grow\n\t\t\t\t\t\t{...TransitionProps}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransformOrigin:\n\t\t\t\t\t\t\t\tplacement === 'bottom' ? 'center top' : 'center bottom'\n\t\t\t\t\t\t}}>\n\t\t\t\t\t\t<Paper elevation={0} sx={{ border: '1px solid', borderColor: 'grey.300', borderRadius: '8px', mt:0.25}}>\n\t\t\t\t\t\t\t<ClickAwayListener onClickAway={handleClose}>\n\t\t\t\t\t\t\t\t<MenuList id='split-button-menu' autoFocusItem>\n\t\t\t\t\t\t\t\t\t{options.map((option, index) => (\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isMenuThirdItemDisabled ? false : index === 2}\n\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\toption.callback(event, index);\n\t\t\t\t\t\t\t\t\t\t\t\tif (!option?.disableToggle) {\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleToggle();\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}} >\n\t\t\t\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\t\t\t\t\t\t\toption.color ? option.color : 'theme.secondary.1000'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: '100%'\n\t\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</MenuList>\n\t\t\t\t\t\t\t</ClickAwayListener>\n\t\t\t\t\t\t</Paper>\n\t\t\t\t\t</Grow>\n\t\t\t\t)}\n\t\t\t</Popper>\n\t\t</React.Fragment>\n\t);\n};\n\nexport default DropdownButton;\n","import * as React from 'react';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport Grow from '@mui/material/Grow';\nimport Paper from '@mui/material/Paper';\nimport Popper from '@mui/material/Popper';\nimport MenuItem from '@mui/material/MenuItem';\nimport MenuList from '@mui/material/MenuList';\nimport { ArrowDownTwo } from '../icons';\nimport Typography from '../typography/typography';\nimport { ButtonProps } from '@mui/material';\n\nexport interface ITitleDropdownMenuOption {\n\tlabel: string | JSX.Element;\n\tcallback: (event?: any, index?: number) => void;\n\tcolor?: string;\n}\n\ninterface TitleDropdownButtonProps extends ButtonProps {\n\tchildren: React.ReactNode;\n\toptions: ITitleDropdownMenuOption[];\n\tisMenuThirdItemDisabled: boolean;\n\tcurrentTitle: string;\n}\n\nconst TitleDropdownButton: React.FC<TitleDropdownButtonProps> = ({\n\tchildren,\n\toptions,\n\tisMenuThirdItemDisabled,\n\tcurrentTitle = '',\n}) => {\n\tconst [open, setOpen] = React.useState(false);\n\tconst anchorRef = React.useRef<HTMLDivElement>(null);\n\n\tconst handleToggle = () => {\n\t\tsetOpen((prevOpen) => !prevOpen);\n\t};\n\n\tconst handleClose = (event: Event) => {\n\t\tif (\n\t\t\tanchorRef.current &&\n\t\t\tanchorRef.current.contains(event.target as HTMLElement)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetOpen(false);\n\t};\n\n\treturn (\n\t\t<React.Fragment>\n\t\t\t<div style={{ display: 'flex', alignItems: 'flex-end', gap: '10px' }} ref={anchorRef}>\n\t\t\t\t<Typography type=\"h3\" weight=\"medium\" color=\"theme.secondary.1000\">\n\t\t\t\t\t{children}\n\t\t\t\t</Typography>\n\t\t\t\t<div\n\t\t\t\t\taria-controls={open ? 'split-button-menu' : undefined}\n\t\t\t\t\taria-expanded={open ? 'true' : undefined}\n\t\t\t\t\taria-label='select merge strategy'\n\t\t\t\t\taria-haspopup='menu'\n\t\t\t\t\tstyle={{ minWidth: 'unset !important', cursor: 'pointer' }}\n\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t>\n\t\t\t\t\t<ArrowDownTwo fontSize='small' />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<Popper\n\t\t\t\tsx={{\n\t\t\t\t\tzIndex: 1\n\t\t\t\t}}\n\t\t\t\topen={open}\n\t\t\t\tanchorEl={anchorRef.current}\n\t\t\t\trole={undefined}\n\t\t\t\ttransition\n\t\t\t\tdisablePortal>\n\t\t\t\t{({ TransitionProps, placement }) => (\n\t\t\t\t\t<Grow\n\t\t\t\t\t\t{...TransitionProps}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransformOrigin:\n\t\t\t\t\t\t\t\tplacement === 'bottom' ? 'center top' : 'center bottom'\n\t\t\t\t\t\t}}>\n\t\t\t\t\t\t<Paper elevation={0} sx={{ border: '1px solid', borderRadius: 2, borderColor: 'theme.grey.200'}}>\n\t\t\t\t\t\t\t<ClickAwayListener onClickAway={handleClose}>\n\t\t\t\t\t\t\t\t<MenuList autoFocusItem>\n\t\t\t\t\t\t\t\t\t{options.map((option, index) => (\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isMenuThirdItemDisabled ? false : (index === 2)}\n\t\t\t\t\t\t\t\t\t\t\tselected={currentTitle?.trim() === option.label?.trim()}\n\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\toption.callback(event, index);\n\t\t\t\t\t\t\t\t\t\t\t\thandleToggle();\n\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\t\t\t\t\t\t\toption.color ? option.color : 'theme.secondary.1000'\n\t\t\t\t\t\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</MenuList>\n\t\t\t\t\t\t\t</ClickAwayListener>\n\t\t\t\t\t\t</Paper>\n\t\t\t\t\t</Grow>\n\t\t\t\t)}\n\t\t\t</Popper>\n\t\t</React.Fragment>\n\t);\n};\n\nexport default TitleDropdownButton;\n","import React from 'react';\r\nimport { Box, CircularProgress, CircularProgressProps } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\n\r\nconst Loader = styled(CircularProgress)(({ theme }) => ({\r\n\tcolor: theme.palette?.theme.primary[500]\r\n}));\r\n\r\nconst LoaderContainer = styled(Box)(() => ({\r\n\tposition: 'absolute',\r\n\tdisplay: 'flex',\r\n\twidth: '100%',\r\n\theight: '100%',\r\n\tjustifyContent: 'center',\r\n\talignItems: 'center',\r\n\tbackgroundColor: '#ffffff96',\r\n\tzIndex: 3,\r\n\tleft: 0,\r\n\ttop: 0\r\n}));\r\n\r\nconst ModalLoader = (props: CircularProgressProps) => {\r\n\treturn (\r\n\t\t<LoaderContainer>\r\n\t\t\t<Loader size={50} {...props} />\r\n\t\t</LoaderContainer>\r\n\t);\r\n};\r\n\r\nexport { ModalLoader };\r\nexport default ModalLoader;\r\n","import React from \"react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\n\r\n\r\nimport Typography from \"../typography/typography\";\r\nimport Box from \"@mui/material/Box\";\r\nimport \"./upload-excel.scss\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport {\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Divider,\r\n Grow,\r\n IconButton,\r\n \r\n} from \"@mui/material\";\r\nimport RemoveIcon from \"@mui/icons-material/Remove\";\r\n// import Checkbox from \"../checkbox/checkbox\";\r\nimport Avatar from \"../avatar/avatar\";\r\nimport images from \"../../assets/images\";\r\nimport ModalLoader from '../loaders/modal-loader';\r\nimport {Trash} from '../icons';\r\n\r\nimport { KeyboardArrowDown, KeyboardArrowUp, Upload } from \"@mui/icons-material\";\r\nimport { postImportSheet } from \"../../utils/common\";\r\nimport Button from \"../button/button\";\r\n\r\n\r\ninterface UploadProps {\r\n open: boolean;\r\n title: string;\r\n multiple?: boolean;\r\n accept?: string;\r\n showCameraButton?: boolean;\r\n onClose: () => void;\r\n onConfirm: () => void;\r\n onSubmit?: (files: any[]) => void;\r\n existingDriveData?: any;\r\n importModuleName?: any;\r\n pageName?: any;\r\n handleSuccessImport?: (e?: any) => void;\r\n\r\n}\r\n\r\nconst formatBytes = (bytes: number, decimals = 2) => {\r\n if (bytes === 0) return \"0 Bytes\";\r\n const k = 1024;\r\n const dm = decimals < 0 ? 0 : decimals;\r\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + \" \" + sizes[i];\r\n};\r\n\r\nconst UploadExcel = (props: UploadProps) => {\r\n const {\r\n open,\r\n title,\r\n onClose,\r\n onConfirm,\r\n onSubmit,\r\n accept = \"*\",\r\n multiple = false,\r\n importModuleName,\r\n pageName,\r\n handleSuccessImport\r\n } = props;\r\n const [files, setFiles] = useState<\r\n {\r\n file: File;\r\n isPrivate: boolean;\r\n checkboxDisabled: boolean;\r\n status: string;\r\n uploadProgress: number;\r\n fileSize: number;\r\n fileName: string;\r\n fileType: string;\r\n location: string;\r\n message: string;\r\n }[]\r\n >([]);\r\n\r\n const [isCollapsed, setIsCollapsed] = useState(false);\r\n const [isDialogMinimized, setIsDialogMinimized] = useState(false);\r\n const [isDragOver, setIsDragOver] = useState(false);\r\n const [dataResult, setDataResult] = useState<any>(null);\r\n const [isLoading, setIsLoading] = useState<boolean>(false);\r\n \r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDropAccepted: (newFiles) => {\r\n setFiles([\r\n ...files,\r\n ...newFiles.map((file) => ({\r\n file,\r\n isPrivate: false,\r\n checkboxDisabled: false,\r\n status: \"pending\",\r\n uploadProgress: 0,\r\n fileSize: file.size,\r\n fileName: file.name,\r\n fileType: file.type,\r\n location: \"\",\r\n message: \"\",\r\n })),\r\n ]);\r\n setIsDragOver(false);\r\n },\r\n onDragEnter: () => {\r\n setIsDragOver(true);\r\n },\r\n onDragLeave: () => {\r\n setIsDragOver(false);\r\n },\r\n noClick: true,\r\n noKeyboard: true,\r\n multiple: multiple,\r\n accept: accept ? convertAcceptObject(accept) : accept,\r\n });\r\n\r\n const handleClose = () => {\r\n onClose()\r\n setDataResult(null);\r\n }\r\n\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n\r\n // useEffect(() => {\r\n // const driveTitles = existingDriveData.map(item => item['title'])\r\n // setAllDriveData(driveTitles);\r\n // }, [existingDriveData]);\r\n\r\n\r\n useEffect(() => {\r\n const handleBeforeUnload = (event: any) => {\r\n \r\n const message =\r\n \"Are you sure you want to leave? Your uploads are not complete.\";\r\n event.returnValue = message; // Standard for most browsers\r\n return message; // For some older browsers\r\n \r\n };\r\n if (fileInputRef.current) {\r\n fileInputRef.current.multiple = multiple;\r\n }\r\n\r\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\r\n\r\n return () => {\r\n // Clean up the event listener when the component unmounts\r\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\r\n };\r\n }, [ multiple]);\r\n\r\n \r\n\r\n function convertAcceptObject(types: string) {\r\n const accepts = types.split(\",\").map((item) => item.trim());\r\n const acceptObject = accepts.reduce((acc: any, type: string) => {\r\n acc[type] = [];\r\n return acc;\r\n }, {});\r\n return acceptObject;\r\n }\r\n\r\n const renderFileIcon = (file: any) => {\r\n const fileType = file?.type.split(\"/\")[0];\r\n switch (fileType) {\r\n case \"image\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#FFEBEB\" }}\r\n >\r\n <Avatar size={20} src={images.upload.documentPDF}></Avatar>\r\n </div>\r\n );\r\n case \"application\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#FFEBEB\" }}\r\n >\r\n <Avatar size={150} src={images.upload.documentPDF} alt={\"PDF\"}></Avatar>\r\n <Typography color=\"theme.secondary.1000\" weight=\"bold\" type=\"s2\">{file.name}</Typography>\r\n <Typography color=\"theme.secondary.800\" type=\"s5\">{formatBytes(file.size)}</Typography>\r\n </div>\r\n );\r\n case \"text\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#EBF9F2\" }}\r\n >\r\n <Avatar size={20} src={images.upload.docFile}></Avatar>\r\n </div>\r\n );\r\n default:\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#EBF9F2\" }}\r\n >\r\n <Avatar size={20} src={images.upload.docFile}></Avatar>\r\n </div>\r\n );\r\n }\r\n };\r\n\r\n \r\n\r\n const handleChipClick = () => {\r\n if (fileInputRef.current) {\r\n // If multiple is true, set input for multiple files\r\n if (props.multiple) {\r\n fileInputRef.current.setAttribute(\"multiple\", \"true\");\r\n } else {\r\n // If multiple is false, set input for a single file\r\n fileInputRef.current.removeAttribute(\"multiple\");\r\n }\r\n fileInputRef.current.click();\r\n }\r\n };\r\n\r\n const handleFileChange = (e: any) => {\r\n // importData(e.target.files[0]);\r\n const file = e.target.files?.[0] || null;\r\n const f = {\r\n file,\r\n isPrivate: false,\r\n checkboxDisabled: false,\r\n status: \"pending\",\r\n uploadProgress: 0,\r\n fileSize: file.size,\r\n fileName: file.name,\r\n fileType: file.type,\r\n location: \"\",\r\n message: \"\",\r\n }\r\n\r\n \r\n setFiles([\r\n ...files,\r\n ...[f],\r\n ]);\r\n };\r\n\r\n const removeFile = (indexToRemove: number) => {\r\n\r\n setFiles((prevFiles) =>\r\n prevFiles.filter((file, index) =>index !== indexToRemove\r\n ),\r\n );\r\n };\r\n\r\n // const toggleIsPrivate = (index: number) => {\r\n // setFiles((prevFiles) =>\r\n // prevFiles.map((item, i) =>\r\n // i === index ? { ...item, isPrivate: !item.isPrivate } : item,\r\n // ),\r\n // );\r\n // };\r\n\r\n const toggleCollapse = () => {\r\n setIsCollapsed((prevIsCollapsed) => !prevIsCollapsed);\r\n };\r\n\r\n const handleMinimizeClick = () => {\r\n setIsDialogMinimized(!isDialogMinimized);\r\n isDialogMinimized ? onConfirm() : onClose();\r\n };\r\n\r\n const importData = async () => {\r\n const file = files[0].file\r\n\t\tconst formData = new FormData();\r\n\t\tformData.append('file', file); // Ensure the field name is correct.\r\n\t\tsetIsLoading(true)\r\n\t\ttry {\r\n\t\t\tconst response = await postImportSheet(formData, importModuleName, pageName);\r\n\t\t\tif(response) {\r\n\t\t\t\tsetDataResult(response.data)\r\n setIsLoading(false)\r\n if(response?.data?.failed?.length == 0){\r\n handleClose()\r\n handleSuccessImport(response?.data);\r\n }\r\n\t\t\t} \r\n\t\t} catch (error) {\r\n setIsLoading(false)\r\n\t\t}\r\n\r\n\t}\r\n\r\n useEffect(() => {\r\n open && setFiles([]);\r\n }, [open]);\r\n\r\n\r\n\r\n return (\r\n <>\r\n <Dialog open={open} onClose={handleClose} className=\"upload\">\r\n <DialogTitle className=\"upload--head\">\r\n <Box className=\"upload--title\">\r\n <Typography\r\n type=\"s3\"\r\n ml={1}\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n {title}\r\n </Typography>\r\n </Box>\r\n \r\n </DialogTitle>\r\n <Divider />\r\n <DialogContent className=\"upload--content\">\r\n {isLoading && <ModalLoader />}\r\n \r\n {files.length === 0 ? (\r\n <div\r\n className={`upload--fileContent ${isDragActive ? \"drag-active\" : \"\"\r\n }`}\r\n >\r\n <div {...getRootProps()} className=\"drop-view\">\r\n {!isDragOver ? (\r\n <>\r\n <input {...getInputProps()} ref={fileInputRef} />\r\n <p className=\"upload--text\">\r\n Drag and Drop files here or upload from\r\n </p>\r\n\r\n <div className=\"device-wrap\">\r\n <div className=\"select-button\" onClick={handleChipClick}>\r\n <img src={images.upload.monitor} />\r\n <Typography type=\"s5\">My Device</Typography>\r\n <input\r\n type=\"file\"\r\n {...getInputProps({ multiple: true })}\r\n ref={fileInputRef}\r\n style={{ display: \"none\" }}\r\n onChange={handleFileChange}\r\n accept={accept}\r\n />\r\n </div>\r\n \r\n </div>\r\n\r\n {dataResult?.successful?.length || dataResult?.failed?.length ? (\r\n <div className =\"mt-2\">\r\n {dataResult?.failed.length == 0 ? (\r\n <Typography type=\"s3\">\r\n All data imported successfully.\r\n </Typography> ) : (\r\n <Typography type=\"s4\" word-break=\"break-word\" color=\"theme.error.600\" weight=\"medium\">\r\n Failed to import the following records with IDs: {dataResult.failed?.map((item:any)=>item?.id).join(\", \")}\r\n </Typography> )\r\n } \r\n </div>\r\n ) : (\r\n \"\"\r\n )}\r\n </>\r\n ) : (\r\n <div className=\"after-drop\">\r\n <img src={images.upload.documentUpload} />\r\n <Typography type=\"s3\">\r\n Drag & Drop your files here\r\n </Typography>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <Grow in={Boolean(files?.length)} timeout={500}>\r\n <Box>\r\n {files.map((file: any, index: number) => (\r\n <Box key={file?.file?.name} display='flex' width='100%' justifyContent='center' alignItems='center' flexDirection='column'>\r\n <Box className=\"icon-BG\">\r\n <IconButton onClick={() => removeFile(index)} className=\"remove-button\"><Trash fontSize='small' /> </IconButton>\r\n <Avatar size={150} src={images.upload.docFile} alt={\"PDF\"}></Avatar>\r\n </Box>\r\n <Typography type=\"s2\" weight=\"bold\" color='theme.secondary.1000'>{file?.file?.name}</Typography>\r\n <Typography type=\"s4\" color='theme.secondary.800'>{formatBytes(file?.file?.size)}</Typography>\r\n </Box>\r\n ))}\r\n {dataResult?.successful?.length || dataResult?.failed?.length ? (\r\n <div className =\"mt-2\">\r\n {dataResult?.failed.length == 0 ? (\r\n <Typography type=\"s3\">\r\n All data imported successfully.\r\n </Typography> ) : (\r\n <Typography type=\"s4\" word-break=\"break-word\" color=\"theme.error.600\" weight=\"medium\">\r\n Failed to import the following records with IDs: {dataResult?.failed?.map((item:any)=>item.id).join(\", \")}\r\n </Typography> )\r\n } \r\n </div>\r\n ) : (\r\n \"\"\r\n )}\r\n </Box>\r\n </Grow>\r\n )}\r\n </DialogContent>\r\n <DialogActions className=\"uploadActions\">\r\n <Button onClick={onSubmit ? ()=>{\r\n onSubmit(files)\r\n } : importData} startIcon={<Upload />}>Upload</Button>\r\n </DialogActions>\r\n </Dialog>\r\n {isDialogMinimized && (\r\n <div className=\"bottom-corner-box\">\r\n <div className=\"top-section\">\r\n <div className=\"top-text\">\r\n Uploading {files.length} Item{files.length !== 1 ? \"s\" : \"\"}\r\n </div>\r\n <div className=\"top-options\">\r\n <div className=\"btn\" onClick={handleMinimizeClick}>\r\n <RemoveIcon />\r\n </div>\r\n <div className=\"btn\" onClick={toggleCollapse}>\r\n <div className=\"arrow-btn\">\r\n {isCollapsed ? <KeyboardArrowUp /> : <KeyboardArrowDown />}\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div className=\"box-list\">\r\n {!isCollapsed &&\r\n files.map((file: any, index: number) => (\r\n <div className=\"bottom-section\">\r\n <div className=\"doc-icon\">{renderFileIcon(file?.file)}</div>\r\n <div className=\"file-detail\">\r\n <div className=\"file-name\">\r\n <div className=\"file-text\">\r\n {file?.file?.name}\r\n {index}\r\n </div>\r\n </div>\r\n <div className=\"file-status\">\r\n {file?.status !== \"canceled\" ? (\r\n <>\r\n {file.uploadProgress === 0 && (\r\n <div className=\"avatar-container\">\r\n <Avatar\r\n size={20}\r\n className=\"avatar\"\r\n src={images.upload.empty}\r\n ></Avatar>\r\n <Avatar\r\n size={20}\r\n onClick={() => removeFile(index)}\r\n src={images.upload.close}\r\n className=\"close-icon\"\r\n ></Avatar>\r\n </div>\r\n )}\r\n {file?.uploadProgress > 0 &&\r\n file?.uploadProgress < 100 && (\r\n <CircularProgress\r\n color=\"success\"\r\n variant=\"determinate\"\r\n value={file?.uploadProgress}\r\n />\r\n )}\r\n {file?.uploadProgress === 100 && (\r\n <div className=\"avatar-container\">\r\n <Avatar\r\n size={20}\r\n className=\"avatar\"\r\n src={images.upload.tick}\r\n ></Avatar>\r\n <Avatar\r\n size={20}\r\n src={images.upload.folder}\r\n className=\"close-icon\"\r\n ></Avatar>\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <Typography type=\"s4\" className=\"canceled-text\">\r\n Upload Canceled\r\n </Typography>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport { UploadExcel };\r\nexport default UploadExcel;\r\n","import Button from '../button/button';\r\nimport Typography from '../typography/typography';\r\n/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport './action-bar.scss';\r\nimport {\r\n\t/* IconButton, */ Box,\r\n\tDivider,\r\n\tIconButton,\r\n\tMenu,\r\n\tMenuItem,\r\n\tuseMediaQuery,\r\n\tuseTheme\r\n} from '@mui/material';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport ViewModal from '../view-modal/view-modal';\r\nimport HeaderCard from '../header-card/header-card';\r\nimport SearchBar from '../search-bar/search-bar';\r\nimport { useEffect, useMemo, useState } from 'react';\r\nimport images from '../../assets/images';\r\nimport Toggle from '../toggle/toggle';\r\nimport Filter from '../filter/filter';\r\nimport Select from '../select/select';\r\nimport { RuleGroupType } from 'react-querybuilder';\r\nimport SaveFilterModal from '../save-filter-modal/save-filter-modal';\r\nimport {\r\n\tsetBaseUrl,\r\n\tpostV1Filter,\r\n\tgetV1FilterResource\r\n} from '../../api-client/api.system-feature/api';\r\nimport type * as Types from '../../api-client/api.system-feature/api-types';\r\nimport { auth } from '../../constants/auth';\r\nimport DropdownButton from '../dropdown-button/dropdown-button';\r\nimport TitleDropdownButton from '../title-dropdown-button/title-dropdown-button';\r\nimport { useAppDispatch, useAppSelector } from '../../redux/hooks';\r\nimport { getToken } from '../../utils/common';\r\nimport React from 'react';\r\nimport UploadExcel from '../upload-excel/upload-excel';\r\nimport { generateQueryString, getErrorMessage, getExcelTemplateGenerateTemplate, getOperatorLabel, getExcelExportTemplate, getPdfExportTemplate } from '../../utils/common';\r\nimport { initialFilter, ViewType } from '../../contexts/page-context';\r\nimport { usePages } from '../../hooks/use-pages';\r\nimport Chip from '../chip/chip';\r\nimport formatText, { formatLabel } from '../../utils/format-text';\r\nimport { Cancel } from '@mui/icons-material';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { IResources, routeToResourceMap } from '../../constants/route-page-map';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { FilterRemove, Filter as FilterIcon, Search, FolderSave, Export, Import, DocumentDownload } from '../icons';\r\nimport { co } from 'node_modules/@fullcalendar/core/internal-common';\r\n\r\ninterface ActionData {\r\n\tlabel: string;\r\n\tposition: number;\r\n}\r\ninterface ActionBarPropsType {\r\n\ttitle: string;\r\n\tdata: ActionData[];\r\n\tsetData: React.Dispatch<React.SetStateAction<ActionData[]>>;\r\n\tactive: string;\r\n\tsetActive: (view: ViewType) => void;\r\n\thandleAddButton?: (e?: any) => void;\r\n\tbutton?: boolean;\r\n\thandleSearch?: (value: string) => void;\r\n\tfilters?: string;\r\n\tdisabledViews?: string[];\r\n\tisDropdownMenuButton?: boolean;\r\n\titemListingDropdownOptions?: any;\r\n\tisTitleMenu?: boolean;\r\n\ttitleMenus?: any;\r\n\tfolderData?: any;\r\n\ttype?: any;\r\n\tfields?: any;\r\n\tapplyFilter?: any;\r\n\tsavedFilters?: SavedFilter;\r\n\tsetSavedFilters?: (view: SavedFilter) => void;\r\n\tisToggleButton?: boolean;\r\n\thandleToggleButton?: (e?: any) => void;\r\n\tshowView?: boolean;\r\n\tshowSearch?: boolean;\r\n\tshowFilter?: boolean;\r\n\tcustomButtons?: React.ReactNode[] | JSX.Element[];\r\n\tactionBtn?: React.ReactNode[] | JSX.Element[];\r\n\tpageName?: string;\r\n\timportModuleName?: string;\r\n\tsearchText?: string;\r\n\tselectedIds?: any;\r\n\tisUseFields?: boolean;\r\n\thandleSuccessImport?: (e?: any) => void;\r\n}\r\n\r\ninterface SavedFilter {\r\n\tid: string;\r\n\tname: string;\r\n\tquery: RuleGroupType;\r\n}\r\n\r\nconst ActionBar = React.memo((props: ActionBarPropsType) => {\r\n\tconst token = localStorage.getItem(auth.storageTokenKeyName) || undefined;\r\n\tconst location = useLocation();\r\n\r\n\tconst {\r\n\t\ttitle,\r\n\t\tdata,\r\n\t\tsetData,\r\n\t\tactive,\r\n\t\tsetActive,\r\n\t\thandleAddButton,\r\n\t\thandleSearch,\r\n\t\tbutton = true,\r\n\t\tdisabledViews,\r\n\t\tisDropdownMenuButton = false,\r\n\t\titemListingDropdownOptions = [],\r\n\t\tisTitleMenu = false,\r\n\t\ttitleMenus = [],\r\n\t\ttype,\r\n\t\tfields = [],\r\n\t\tapplyFilter,\r\n\t\t// setSavedFilters,\r\n\t\t// savedFilters,\r\n\t\tisToggleButton = false,\r\n\t\thandleToggleButton,\r\n\t\tshowSearch = true,\r\n\t\tshowFilter = true,\r\n\t\tshowView = true,\r\n\t\tcustomButtons,\r\n\t\tpageName,\r\n\t\tactionBtn,\r\n\t\timportModuleName,\r\n\t\tselectedIds,\r\n\t\tsearchText,\r\n\t\tisUseFields,\r\n\t\thandleSuccessImport\r\n\t} = props;\r\n\tconst dispatch = useAppDispatch();\r\n\tconst [isToggled, setIsToggled] = useState<boolean>(false);\r\n\tconst [isToggledForItem, setIsToggledForItem] = useState<boolean>(false);\r\n\tconst [openFilterPopup, setOpenFilterPopup] = useState<boolean>(false);\r\n\tconst [status, setStatus] = useState<string>('');\r\n\tconst [openSaveFilter, setIsOpenSaveFilter] = useState<boolean>(false);\r\n\tconst [rowAnchorEl, setRowAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [isUploadModalOpen, setIsUploadModalOpen] = useState(false);\r\n\tconst [savedFilters, setSavedFilters] = useState<any[]>([]);\r\n\t// const [selectedSavedFilter, setSelectedSavedFilter] = useState<any>(null);\r\n\tconst [searchedText, setSearchedText] = useState<string>(\"\");\r\n\tconst { t } = useTranslation();\r\n\tconst theme = useTheme();\r\n\tconst isLgUp = useMediaQuery(theme.breakpoints.up('xl'));\r\n\tconst { activePage, updatePageInfo, schemaFields, setActivePage } = usePages();\r\n\tconst { filters } = activePage;\r\n\r\n\tconst resources: IResources = useMemo(() => routeToResourceMap[location.pathname] || null, [location.pathname])\r\n\r\n\t// const { filterBar, filterQuery } = useAppSelector((store) => {\r\n\t// \treturn store?.drive;\r\n\t// });\r\n\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tfetchSavedFilters();\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, []);\r\n\r\n\tconst fetchSavedFilters = async (): Promise<void> => {\r\n\t\tif (resources?.pageResource || resources?.fieldResource) {\r\n\t\t\tgetV1FilterResource({ ...getToken(), resource: resources?.pageResource || resources?.fieldResource })\r\n\t\t\t\t.then((response: any) => {\r\n\t\t\t\t\tconst savedFilters = response.data.result.map((e: any) => {\r\n\t\t\t\t\t\treturn { id: e._id, name: e.name, query: e.data };\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tsetSavedFilters?.(savedFilters);\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err: any) => console.log('Error fetching saved filters:', err));\r\n\t\t} else {\r\n\t\t\tsetSavedFilters([])\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tconst handleFilterHide = () => {\r\n\t\t// dispatch(setFilterBar(false));\r\n\t\treturn\r\n\t};\r\n\r\n\tconst handleStatusChange = (event: any) => {\r\n\t\tsetStatus(event.target.value);\r\n\t};\r\n\r\n\tconst handleSaveFilterClick = () => {\r\n\t\tif (filters?.rules) {\r\n\t\t\tsetIsOpenSaveFilter(true);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleImportClick = (event: any) => {\r\n\t\tsetRowAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleActionsClose = () => {\r\n\t\tsetRowAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleSaveFilter = (query: RuleGroupType) => {\r\n\t\t// dispatch(setFilterQuery(query));\r\n\t\treturn\r\n\t};\r\n\r\n\tconst handleSave = async (name: string, filterQuery: RuleGroupType) => {\r\n\r\n\t\t// dispatch(setFilterBar(false));\r\n\r\n\t\tconst postFilterRequest: Types.PostV1FilterRequest = {\r\n\t\t\t'x-token': token,\r\n\t\t\tmodule: resources?.pageResource || resources?.fieldResource || 'erp-common',\r\n\t\t\tname: name,\r\n\t\t\tis_applied: true,\r\n\t\t\tdata: filterQuery\r\n\t\t};\r\n\t\ttry {\r\n\t\t\tawait postV1Filter(postFilterRequest)\r\n\t\t\tenqueueSnackbar('Filters saved successfully.')\r\n\t\t\tsetActivePage((prev: any) => ({\r\n\t\t\t\t...prev,\r\n\t\t\t\tfilters: {\r\n\t\t\t\t\t...prev.filters,\r\n\t\t\t\t\tname,\r\n\t\t\t\t\trules: filterQuery.rules\r\n\t\t\t\t},\r\n\t\t\t\tfilterQueryString: generateQueryString(filterQuery)\r\n\t\t\t}));\r\n\t\t\tsetIsOpenSaveFilter(false);\r\n\t\t} catch (error) {\r\n\t\t\tlet m: string = 'Something went wrong on saving filters'\r\n\t\t\tif (error instanceof Error) {\r\n\t\t\t\tm = getErrorMessage(error.message)\r\n\t\t\t}\r\n\t\t\tenqueueSnackbar(m, { variant: 'error' })\r\n\t\t\treturn false\r\n\t\t}\r\n\t\treturn true\r\n\t};\r\n\r\n\tconst handleToggle = () => {\r\n\t\tsetIsToggled((prev) => !prev);\r\n\t\talert('Toggled');\r\n\t};\r\n\r\n\tconst handleChangeToggleButton = () => {\r\n\t\tsetIsToggledForItem((prev) => !prev);\r\n\t\thandleToggleButton?.();\r\n\t};\r\n\r\n\tconst handleCloseFilter = () => {\r\n\t\tsetOpenFilterPopup(false);\r\n\t};\r\n\r\n\tconst handleActiveHeaderCard = (data: ActionData) => {\r\n\t\tsetActive(data?.label);\r\n\t};\r\n\r\n\tconst downloadTemplate = async (moduleName: string) => {\r\n\t\tconst templateURL: any = await getExcelTemplateGenerateTemplate({\r\n\t\t\t'x-token': token,\r\n\t\t\tresource: moduleName\r\n\t\t});\r\n\t\tif (templateURL) {\r\n\t\t\tconst blob = await templateURL.blob();\r\n\r\n\t\t\tconst link = document.createElement('a');\r\n\r\n\t\t\tconst url = window.URL.createObjectURL(blob);\r\n\r\n\t\t\tlink.href = url;\r\n\t\t\tlink.download = `${moduleName}.xlsx`;\r\n\r\n\t\t\tdocument.body.appendChild(link);\r\n\t\t\tlink.click();\r\n\t\t\tdocument.body.removeChild(link);\r\n\t\t\twindow.URL.revokeObjectURL(url);\r\n\t\t}\r\n\t};\r\n\r\n\tconst exportExcel = async (moduleName: string, filterQueryString: string, selectedIds: any, title: string) => {\r\n\t\tconst templateURL: any = await getExcelExportTemplate({\r\n\t\t\t'x-token': token,\r\n\t\t\tactivePage: activePage,\r\n\t\t\tfilterQueryString: filterQueryString,\r\n\t\t\tselectedIds: selectedIds,\r\n\t\t\ttitle: title\r\n\t\t});\r\n\t\tif (templateURL) {\r\n\t\t\tconst blob = await templateURL.blob();\r\n\r\n\t\t\tconst link = document.createElement('a');\r\n\r\n\t\t\tconst url = window.URL.createObjectURL(blob);\r\n\r\n\t\t\tlink.href = url;\r\n\t\t\tlink.download = `${moduleName}.xlsx`;\r\n\r\n\t\t\tdocument.body.appendChild(link);\r\n\t\t\tlink.click();\r\n\t\t\tdocument.body.removeChild(link);\r\n\t\t\twindow.URL.revokeObjectURL(url);\r\n\t\t}\r\n\t};\r\n\r\n\tconst exportPdf = async (moduleName: string, filterQueryString: string, selectedIds: any, title: string) => {\r\n\t\tconst columns = activePage.visible_columns.map((col: any) => ({\r\n\t\t\t...col,\r\n\t\t\theader: t(col.header) \r\n\t\t}));\r\n\t\tconst templateURL: any = await getPdfExportTemplate({\r\n\t\t\t'x-token': token,\r\n\t\t\tactivePage: activePage,\r\n\t\t\tfilterQueryString: filterQueryString,\r\n\t\t\tselectedIds: selectedIds,\r\n\t\t\ttitle: title,\r\n\t\t\tcolumns: columns\r\n\t\t});\r\n\t\tif (templateURL) {\r\n\t\t\tconst blob = await templateURL.blob();\r\n\r\n\t\t\tconst link = document.createElement('a');\r\n\r\n\t\t\tconst url = window.URL.createObjectURL(blob);\r\n\r\n\t\t\tlink.href = url;\r\n\t\t\tlink.download = `${moduleName}.pdf`;\r\n\r\n\t\t\tdocument.body.appendChild(link);\r\n\t\t\tlink.click();\r\n\t\t\tdocument.body.removeChild(link);\r\n\t\t\twindow.URL.revokeObjectURL(url);\r\n\t\t}\r\n\t};\r\n\r\n\tconst openImportTemplate = () => {\r\n\t\tsetIsUploadModalOpen(true);\r\n\t};\r\n\tconst rowActionMenu = [];\r\n\tif (pageName && (!importModuleName || selectedIds)) {\r\n\t\trowActionMenu.push({\r\n\t\t\tlabel: 'Export Excel',\r\n\t\t\thandleAction: (moduleName: string) => exportExcel(moduleName, activePage.filterQueryString, selectedIds, title),\r\n\t\t\ticon: <Export fontSize='small' />\r\n\t\t})\r\n\t}\r\n\tif(pageName && (!importModuleName || selectedIds)){\r\n\t\trowActionMenu.push({\r\n\t\t\tlabel: 'Export PDF',\r\n\t\t\thandleAction: (moduleName: string) => exportPdf(moduleName, activePage.filterQueryString, selectedIds, title),\r\n\t\t\ticon: <Export fontSize='small'/>\r\n\t\t})\r\n\t}\r\n\tif (pageName && importModuleName) {\r\n\t\t{\r\n\t\t\trowActionMenu.push({\r\n\t\t\t\tlabel: 'Download Template ',\r\n\t\t\t\thandleAction: (moduleName: string) => downloadTemplate(moduleName),\r\n\t\t\t\ticon: <DocumentDownload fontSize='small' />\r\n\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tlabel: 'Import Template',\r\n\t\t\t\t\thandleAction: (moduleName: string) => openImportTemplate(moduleName),\r\n\t\t\t\t\ticon: <Import fontSize='small' />\r\n\t\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tconst getFilterChipLabels = (rule: any) => {\r\n\t\trule = { ...rule, field: rule.field?.replace(\"__replaceKey\", '') }\r\n\t\tlet label = schemaFields.find((f: any) => f.key === rule.field)?.label || rule.field;\r\n\t\tlabel = formatLabel(label?.replace('_id', ' '));\r\n\t\tconst opLabel = getOperatorLabel(rule, schemaFields);\r\n\r\n\t\tlet value = rule.value;\r\n\t\tif (Array.isArray(rule.value)) {\r\n\t\t\trule.value = rule.value.map(rv => formatLabel(typeof rv === 'object' ? (rv.label) : rv))\r\n\t\t\tvalue = rule.value.join(', ');\r\n\t\t}\r\n\r\n\t\treturn <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n\t\t\t<Typography type='s5' color='theme.secondary.800' weight='medium'>{label}</Typography>\r\n\t\t\t<Divider orientation='vertical' flexItem />\r\n\t\t\t<Typography type='s5' color='theme.primary.800' weight='medium'>{formatText(opLabel)} {value}</Typography>\r\n\t\t</Box>\r\n\t\t// `${label}: ${value}`;\r\n\t};\r\n\r\n\tconst getFilterChip = (rr: any, index: any) => {\r\n\t\treturn (\r\n\t\t\t<Chip\r\n\t\t\t\tlabel={getFilterChipLabels(rr)}\r\n\t\t\t\tvariant='outlined'\r\n\t\t\t\tactive\r\n\t\t\t\tsx={({ palette }) => ({\r\n\t\t\t\t\tbackgroundColor: 'grey.200',\r\n\t\t\t\t\tborderColor: `${palette.grey[300]} !important`,\r\n\t\t\t\t\topacity: 0.8,\r\n\t\t\t\t\t'&:hover': { backgroundColor: `${palette.grey[200]} !important` },\r\n\t\t\t\t\tflexDirection: 'row-reverse',\r\n\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\tgap: 0.75,\r\n\t\t\t\t\tcursor: 'unset'\r\n\t\t\t\t})}\r\n\t\t\t\tdeleteIcon={\r\n\t\t\t\t\t<Cancel\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tfontSize: '1rem !important',\r\n\t\t\t\t\t\t\tcolor: '#919294 !important',\r\n\t\t\t\t\t\t\tmarginRight: 'auto !important',\r\n\t\t\t\t\t\t\tmarginLeft: `0 !important`,\r\n\t\t\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\t\t\tcolor: 'inherit !important'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t}\r\n\t\t\t\tonDelete={() => removeSignleFilter(index)}\r\n\t\t\t\tclickable={false}\r\n\t\t\t/>\r\n\t\t)\r\n\t}\r\n\r\n\tconst removeSignleFilter = (ruleIndex: number) => {\r\n\t\tconst uRules: any[] = filters.rules.filter(\r\n\t\t\t(_, index) => index !== ruleIndex\r\n\t\t);\r\n\t\tconst uFilters = { ...filters, rules: uRules };\r\n\t\tconst filterQueryString = generateQueryString(uFilters);\r\n\r\n\t\tupdatePageInfo({\r\n\t\t\tfilters: uFilters,\r\n\t\t\tfilterQueryString\r\n\t\t});\r\n\t};\r\n\r\n\tconst isFilterApplied = (flt: any): boolean => Boolean(flt?.rules?.length);\r\n\tconst [searchAnchorEl, setSearchAnchorEl] = useState<HTMLElement | null>(null);\r\n\t// useEffect(() => {\r\n\t// \tif(activePage?.active_view ){\r\n\t// \t\tconst updateViews=activePage?.views?.length?activePage.views:[{\r\n\t// \t\t\tlabel:activePage?.active_view,\r\n\t// \t\t\tposition:0\r\n\t// \t\t}]\r\n\t// \t\tsetData(updateViews)\r\n\t// \t}\t\t\r\n\t// \t//eslint-disable-next-line\r\n\t// },[isCreatePage,activePage?.active_view])\r\n\r\n\tuseEffect(() => {\r\n\t\tif (activePage?.search) {\r\n\t\t\tsetSearchedText(activePage?.search)\r\n\t\t}\r\n\t}, [activePage?.search])\r\n\r\n\tuseEffect(() => {\r\n\t\tif (searchedText) {\r\n\t\t\thandleSearch?.(searchedText);\r\n\t\t\tupdatePageInfo({ search: searchedText });\r\n\t\t}\r\n\t\t//eslint-disable-next-line\r\n\t}, [searchedText])\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<div className='action-bar'>\r\n\t\t\t\t<div className='action-bar--LeftContent'>\r\n\t\t\t\t\t{isTitleMenu ? (\r\n\t\t\t\t\t\t<div style={{ zIndex: 999 }}>\r\n\t\t\t\t\t\t\t<TitleDropdownButton\r\n\t\t\t\t\t\t\t\tonClick={handleAddButton}\r\n\t\t\t\t\t\t\t\toptions={titleMenus}\r\n\t\t\t\t\t\t\t\tisMenuThirdItemDisabled={true}\r\n\t\t\t\t\t\t\t\tcurrentTitle={title}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t\t</TitleDropdownButton>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<Typography type='h3' weight='medium' color='theme.secondary.1000'>\r\n\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<div className='action-bar--HeaderCard'>\r\n\t\t\t\t\t\t{Boolean(data) &&\r\n\t\t\t\t\t\t\tdata\r\n\t\t\t\t\t\t\t\t.map((ele) => ele)\r\n\t\t\t\t\t\t\t\t.sort((a, b) => a.position - b.position)\r\n\t\t\t\t\t\t\t\t.map((item: ActionData) => (\r\n\t\t\t\t\t\t\t\t\t<HeaderCard\r\n\t\t\t\t\t\t\t\t\t\tkey={item?.position}\r\n\t\t\t\t\t\t\t\t\t\ttitle={item?.label}\r\n\t\t\t\t\t\t\t\t\t\tactive={active}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => handleActiveHeaderCard(item)}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t{showView && (\r\n\t\t\t\t\t\t\t<ViewModal\r\n\t\t\t\t\t\t\t\tsetData={setData}\r\n\t\t\t\t\t\t\t\tdata={data}\r\n\t\t\t\t\t\t\t\tsetActive={setActive}\r\n\t\t\t\t\t\t\t\tdisabledViews={disabledViews}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div className='action-bar--RightContent' style={{ gap: isLgUp ? `1rem` : `0.5rem` }}>\r\n\t\t\t\t\t{isToggleButton && (\r\n\t\t\t\t\t\t<div className='item--VariantDisplay'>\r\n\t\t\t\t\t\t\t<div className='item--VariantHeading'>Variant:</div>\r\n\t\t\t\t\t\t\t<div className='item--VariantToggal'>\r\n\t\t\t\t\t\t\t\t<Toggle\r\n\t\t\t\t\t\t\t\t\tchecked={isToggledForItem}\r\n\t\t\t\t\t\t\t\t\tonChange={handleChangeToggleButton}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showSearch && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t{isLgUp ?\r\n\t\t\t\t\t\t\t\t<SearchBar\r\n\t\t\t\t\t\t\t\t\tplaceholder='Search'\r\n\t\t\t\t\t\t\t\t\thandleSearch={(e) => {\r\n\t\t\t\t\t\t\t\t\t\tsetSearchedText(e);\r\n\t\t\t\t\t\t\t\t\t\thandleSearch?.(e);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tdebounceTime={1000}\r\n\t\t\t\t\t\t\t\t\tisDrivePage={true}\r\n\t\t\t\t\t\t\t\t\tsearchText={searchedText}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t<IconButton size='small' onClick={(e) => setSearchAnchorEl(e.currentTarget)}><Search fontSize='small' color='grey.1000' /> </IconButton>\r\n\t\t\t\t\t\t\t\t\t<Menu\r\n\t\t\t\t\t\t\t\t\t\tanchorEl={searchAnchorEl}\r\n\t\t\t\t\t\t\t\t\t\topen={Boolean(searchAnchorEl)}\r\n\t\t\t\t\t\t\t\t\t\tonClose={() => setSearchAnchorEl(null)}\r\n\t\t\t\t\t\t\t\t\t\tanchorOrigin={{\r\n\t\t\t\t\t\t\t\t\t\t\tvertical: 'top',\r\n\t\t\t\t\t\t\t\t\t\t\thorizontal: 'right',\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\ttransformOrigin={{\r\n\t\t\t\t\t\t\t\t\t\t\tvertical: 'top',\r\n\t\t\t\t\t\t\t\t\t\t\thorizontal: 'right',\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={{ '& ul': { p: 0 }, '& .MuiMenu-paper': { boxShadow: `0px 4px 6px rgba(0, 0, 0, 0.1), 0px 1px 3px rgba(0, 0, 0, 0.06);` } }}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<SearchBar\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder='Search'\r\n\t\t\t\t\t\t\t\t\t\t\thandleSearch={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tsetSearchedText(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleSearch?.(e);\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tdebounceTime={1000}\r\n\t\t\t\t\t\t\t\t\t\t\tisDrivePage={true}\r\n\t\t\t\t\t\t\t\t\t\t\tsearchText={searchText || searchedText}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</Menu>\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showFilter && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t{isLgUp ?\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t// sx={{display:\"none\"}}\r\n\t\t\t\t\t\t\t\t\tvariant='text'\r\n\t\t\t\t\t\t\t\t\tstartIcon={<FilterIcon fontSize='small' />}\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\tsetOpenFilterPopup(true);\r\n\t\t\t\t\t\t\t\t\t\tfetchSavedFilters();\r\n\t\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t{t('common.filter')}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t<IconButton onClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetOpenFilterPopup(true);\r\n\t\t\t\t\t\t\t\t\tfetchSavedFilters();\r\n\t\t\t\t\t\t\t\t}} size='small'>\r\n\t\t\t\t\t\t\t\t\t<FilterIcon fontSize='small' color='grey.1000' />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{customButtons}\r\n\t\t\t\t\t{actionBtn}\r\n\t\t\t\t\t{button && (\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='contained'\r\n\t\t\t\t\t\t\tstartIcon={<AddIcon />}\r\n\t\t\t\t\t\t\tonClick={handleAddButton}>\r\n\t\t\t\t\t\t\t{t('common.add')}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{isDropdownMenuButton && (\r\n\t\t\t\t\t\t<div style={{ zIndex: 999 }}>\r\n\t\t\t\t\t\t\t<DropdownButton\r\n\t\t\t\t\t\t\t\tonClick={handleAddButton}\r\n\t\t\t\t\t\t\t\toptions={itemListingDropdownOptions}\r\n\t\t\t\t\t\t\t\tstartIcon={<AddIcon />}\r\n\t\t\t\t\t\t\t\tisMenuThirdItemDisabled={true}>\r\n\t\t\t\t\t\t\t\t{t('common.add')}\r\n\t\t\t\t\t\t\t</DropdownButton>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{pageName ? (\r\n\t\t\t\t\t\t<IconButton onClick={(e) => handleImportClick(e)}>\r\n\t\t\t\t\t\t\t<img src={images.more} alt='More Icon' />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t''\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t<Menu\r\n\t\t\t\t\t\tanchorEl={rowAnchorEl}\r\n\t\t\t\t\t\topen={Boolean(rowAnchorEl)}\r\n\t\t\t\t\t\tonClose={handleActionsClose}>\r\n\t\t\t\t\t\t{rowActionMenu?.map((option: any) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\toption.handleAction(pageName);\r\n\t\t\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tsx={{ alignItems: 'center', gap: 0.5 }}\r\n\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\ttypeof option.disabled === 'function'\r\n\t\t\t\t\t\t\t\t\t\t\t? option.disabled()\r\n\t\t\t\t\t\t\t\t\t\t\t: Boolean(option.disabled)\r\n\t\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t{option?.icon}\r\n\t\t\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\r\n\t\t\t\t\t\t\t\t\t\t{option.label}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</Menu>\r\n\r\n\t\t\t\t\t<Filter\r\n\t\t\t\t\t\topen={openFilterPopup}\r\n\t\t\t\t\t\tonClose={handleCloseFilter}\r\n\t\t\t\t\t\tactiveView={active}\r\n\t\t\t\t\t\tsavedFilters={savedFilters}\r\n\t\t\t\t\t\tfetchSavedFilters={fetchSavedFilters}\r\n\t\t\t\t\t\tonSaveFilter={handleSaveFilter}\r\n\t\t\t\t\t\ttype={type}\r\n\t\t\t\t\t\tisUseFields={isUseFields}\r\n\t\t\t\t\t\tfields={fields}\r\n\t\t\t\t\t\tonSelectedFilter={f => setSelectedSavedFilter(f)}\r\n\t\t\t\t\t\tapplyFilter={applyFilter}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t{/* Applied Filters view (Start) */}\r\n\t\t\t{isFilterApplied(filters) && (\r\n\t\t\t\t<Box\r\n\t\t\t\t\tmb={1}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\t\tjustifyContent: 'space-between'\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tmb={1}\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\tmaxWidth: 400\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\r\n\t\t\t\t\t\t\t{t('common.filters')}:{' '}\r\n\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t{filters?.rules?.map((r, rIndex) => (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t{r?.rules?.length ? (\r\n\t\t\t\t\t\t\t\t\tr?.rules?.map((rr, rrIndex) => (\r\n\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t{getFilterChip(rr, rrIndex)}\r\n\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t) : <>\r\n\t\t\t\t\t\t\t\t\t{getFilterChip(r, rIndex)}\r\n\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='text'\r\n\t\t\t\t\t\t\tclassName='enable-filter-btn'\r\n\t\t\t\t\t\t\tstartIcon={<FolderSave fontSize='small' />}\r\n\t\t\t\t\t\t\tonClick={handleSaveFilterClick}>\r\n\t\t\t\t\t\t\t<span> {t('common.saveFilter')}</span>\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t{/* {selectedSavedFilter && \r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='text'\r\n\t\t\t\t\t\t\tclassName='enable-filter-btn'\r\n\t\t\t\t\t\t\tstartIcon={<img src={images.common.saveFilterIcon} alt='Add Icon' />}\r\n\t\t\t\t\t\t\tonClick={handleSaveFilterClick}>\r\n\t\t\t\t\t\t\t\t<Typography type='s3' color=\"theme.secondary.1000\" weight='medium'>\r\n\t\t\t\t\t\t\t\t\tUpdate Filter <Typography type='s3' weight='medium'>{`(${selectedSavedFilter.name})`}</Typography>\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t} */}\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='text'\r\n\t\t\t\t\t\t\tstartIcon={<FilterRemove fontSize='small' />}\r\n\t\t\t\t\t\t\tonClick={() =>\r\n\t\t\t\t\t\t\t\tupdatePageInfo({\r\n\t\t\t\t\t\t\t\t\tfilters: initialFilter,\r\n\t\t\t\t\t\t\t\t\tfilterQueryString: ''\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t{t('common.clearFilter')}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t{/* Applied Filters view (End) */}\r\n\r\n\t\t\t{/* {filterBar && (\r\n\t\t\t\t<div className='filter-bar'>\r\n\t\t\t\t\t<div className='filter-bar--LeftContent'>\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tplaceholder='Placeholder'\r\n\t\t\t\t\t\t\t\tsize={'small'}\r\n\t\t\t\t\t\t\t\tclassName='status-changes-drp'\r\n\t\t\t\t\t\t\t\tvalue={status}\r\n\t\t\t\t\t\t\t\tonChange={handleStatusChange}\r\n\t\t\t\t\t\t\t\tvariant='outlined'>\r\n\t\t\t\t\t\t\t\t<MenuItem value={'Status'}>{t('common.status')}</MenuItem>\r\n\t\t\t\t\t\t\t\t<MenuItem value={'Show'}>{t('common.show')}</MenuItem>\r\n\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<Typography className='subtask-switch' variant='h6'>\r\n\t\t\t\t\t\t\t{t('common.subtask')}\r\n\t\t\t\t\t\t\t<Toggle checked={isToggled} onChange={handleToggle} />\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t|\r\n\t\t\t\t\t\t<Button className='hide-btn' onClick={handleFilterHide}>\r\n\t\t\t\t\t\t\t{t('common.hide')}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className='filter-bar--RightContent'>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='text'\r\n\t\t\t\t\t\t\tclassName='enable-filter-btn'\r\n\t\t\t\t\t\t\tonClick={handleSaveFilterClick}>\r\n\t\t\t\t\t\t\t<img src={images.common.saveFilterIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t<span>{t('common.saveFilter')}</span>\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t)} */}\r\n\t\t\t<SaveFilterModal\r\n\t\t\t\topen={openSaveFilter}\r\n\t\t\t\tonClose={() => setIsOpenSaveFilter(false)}\r\n\t\t\t\thandleSubmit={(name: any) =>\r\n\t\t\t\t\thandleSave(name, filters as RuleGroupType)\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\t\t\t<UploadExcel\r\n\t\t\t\topen={isUploadModalOpen}\r\n\t\t\t\tshowCameraButton={false}\r\n\t\t\t\tonClose={() => setIsUploadModalOpen(false)}\r\n\t\t\t\tonConfirm={() => setIsUploadModalOpen(true)}\r\n\t\t\t\ttitle='Upload'\r\n\t\t\t\tmultiple={false}\r\n\t\t\t\timportModuleName={importModuleName}\r\n\t\t\t\tpageName={importModuleName}\r\n\t\t\t\thandleSuccessImport={handleSuccessImport}\r\n\t\t\t\taccept='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\r\n\t\t\t/>\r\n\t\t</div>\r\n\t);\r\n});\r\n\r\nexport { ActionBar };\r\nexport default ActionBar;\r\n","import { AlertProps, Alert as MUIAlert, styled } from \"@mui/material\";\r\n\r\nconst StyledAlert = styled(MUIAlert)(({ theme: { palette } }) => ({\r\n \"&.MuiAlert-root\": {\r\n fontSize: \"0.75rem\",\r\n fontWeight: \"500\",\r\n letterSpacing: \"-0.24px\",\r\n padding: \"0rem 0.75rem\",\r\n },\r\n \"&.MuiAlert-standardInfo\": {\r\n color: palette.theme?.secondary[900],\r\n backgroundColor: palette.theme?.secondary[200],\r\n },\r\n \"&.MuiAlert-standardSuccess\": {\r\n color: palette.theme?.primary[900],\r\n backgroundColor: palette.theme?.primary[100],\r\n },\r\n \"&.MuiAlert-standardError\": {\r\n color: palette.theme?.tertiary6[900],\r\n backgroundColor: palette.theme?.tertiary6[100],\r\n \"& .MuiAlert-icon\" : {\r\n color: palette.theme?.tertiary6[900],\r\n }\r\n },\r\n\r\n \".MuiAlert-action\": {\r\n svg: {\r\n fontSize: \"1rem\",\r\n },\r\n },\r\n}));\r\n\r\nconst Alert = (props: AlertProps) => {\r\n const { children, icon = false, ...rest } = props;\r\n\r\n return (\r\n <StyledAlert icon={icon} {...rest}>\r\n {children}\r\n </StyledAlert>\r\n );\r\n};\r\n\r\nexport { Alert };\r\nexport default Alert;\r\n","import { Box, Breadcrumbs, BreadcrumbsProps } from '@mui/material';\nimport Typography from '../typography/typography';\nimport { Link } from 'react-router-dom';\n\ninterface BreadCrumbSlot {\n\tlink?: string;\n\tlabel: string | JSX.Element;\n\tlinkState?: any;\n\tonClick?: () => void;\n}\n\ninterface PropsType extends BreadcrumbsProps {\n\tpath: BreadCrumbSlot[];\n}\n\nconst BreadCrumb = (props: PropsType) => {\n\tconst { path } = props;\n\n\treturn (\n\t\t<>\n\t\t\t<Breadcrumbs\n\t\t\t\tsx={{\n\t\t\t\t\t'& .MuiBreadcrumbs-separator': {\n\t\t\t\t\t\tcolor: 'theme.secondary.600'\n\t\t\t\t\t}\n\t\t\t\t}}>\n\t\t\t\t{path?.map((slot, index) => (\n\t\t\t\t\t<Box key={index}>\n\t\t\t\t\t\t{index < path?.length - 1 ? (\n\t\t\t\t\t\t\t// <Link\n\t\t\t\t\t\t\t// \tto={String(slot?.link) ?? undefined}\n\t\t\t\t\t\t\t// \tstyle={{ display: 'block' }}>\n\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\t\tcolor='theme.secondary.600'\n\t\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\t\tcomponent={slot?.link ? Link : undefined}\n\t\t\t\t\t\t\t\t\tto={String(slot?.link) ?? undefined}\n\t\t\t\t\t\t\t\t\tstate={slot?.linkState}\n\t\t\t\t\t\t\t\t\tonClick={slot?.onClick} style={{ display: 'block' }}>\n\t\t\t\t\t\t\t\t\t{slot?.label}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t// </Link>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\tcolor='theme.secondary.1000'>\n\t\t\t\t\t\t\t\t{slot?.label}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Box>\n\t\t\t\t))}\n\t\t\t</Breadcrumbs>\n\t\t</>\n\t);\n};\n\nexport { BreadCrumb };\nexport default BreadCrumb;\n","//eslint-disable @typescript-eslint/no-explicit-any\r\nimport React, { useState, useRef, KeyboardEvent, memo } from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { \r\n Chip, \r\n Box, \r\n FormControl, \r\n FormHelperText,\r\n InputAdornment,\r\n styled\r\n} from '@mui/material';\r\nimport Typography from '../typography/typography';\r\n\r\n// interface ValidationRule {\r\n// type: 'email' | 'url' | 'phone' | 'custom';\r\n// pattern?: RegExp;\r\n// message: string;\r\n// validator?: (value: string) => boolean;\r\n// }\r\n\r\ninterface ChipGeneratorProps {\r\n name: string;\r\n control: any;\r\n label?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n validation?: any[];\r\n maxChips?: number;\r\n allowDuplicates?: boolean;\r\n fieldArrayName?: string;\r\n endIcon?: React.ReactNode;\r\n helperText?: string;\r\n error?: boolean;\r\n onChipAdd?: (chip: string) => void;\r\n onChipRemove?: (chip: string, index: number) => void;\r\n customChipProps?: any;\r\n textFieldProps?: any;\r\n allowMultipleAdd?: boolean;\r\n delimiters?: string[];\r\n // New props for data type handling\r\n dataType?: 'array' | 'string';\r\n separator?: string;\r\n}\r\n\r\n// Styled components for inline chips\r\nconst ChipContainer = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n gap: theme.spacing(0.5),\r\n minHeight: '1.4375em',\r\n border: `1px solid #D3D3D4`,\r\n borderRadius: '0.25rem',\r\n cursor: 'text',\r\n fontSize: '0.875rem',\r\n// '&:hover': {\r\n// borderColor: theme.palette.text.primary,\r\n// },\r\n '&.focused': {\r\n borderColor:'#54CC96',\r\n borderWidth: '1px',\r\n },\r\n '&.error': {\r\n borderColor: theme.palette.error.main,\r\n },\r\n '&.disabled': {\r\n backgroundColor: theme.palette.action.disabledBackground,\r\n cursor: 'default',\r\n },\r\n paddingLeft: 3 \r\n}));\r\n\r\nconst InlineInput = styled('input')(({ theme }) => ({\r\n border: 'none',\r\n outline: 'none',\r\n backgroundColor: 'transparent',\r\n flexGrow: 1,\r\n minWidth: '120px',\r\n padding: '0.5rem',\r\n fontSize: '0.875rem',\r\n fontFamily: theme.typography.fontFamily,\r\n '&::placeholder': {\r\n color: theme.palette.text.secondary,\r\n opacity: 1,\r\n },\r\n '&:disabled': {\r\n cursor: 'default',\r\n }\r\n}));\r\n\r\nconst InlineChip = styled(Chip)(({theme: { palette }}) => ({\r\n height: '24px',\r\n fontSize: '0.875rem',\r\n borderColor:' #54CC96',\r\n backgroundColor: palette.theme.primary[50],\r\n color:'#2EB273',\r\n margin: '1px',\r\n '& .MuiChip-deleteIcon': {\r\n fontSize: '16px',\r\n color:'#2EB273',\r\n '&:hover': {\r\n color: '#2EB273',\r\n },\r\n },\r\n}));\r\n\r\nconst ChipGenerator: React.FC<ChipGeneratorProps> = memo(({\r\n name,\r\n control,\r\n label,\r\n placeholder = \"Type and press space to add\",\r\n required = false,\r\n disabled = false,\r\n validation,\r\n maxChips,\r\n allowDuplicates = false,\r\n fieldArrayName,\r\n endIcon,\r\n helperText,\r\n error: externalError,\r\n onChipAdd,\r\n onChipRemove,\r\n customChipProps = {},\r\n allowMultipleAdd = true,\r\n delimiters = [',', ';', '\\n', '\\t'],\r\n dataType = 'string',\r\n separator = ',',\r\n}) => {\r\n const [inputValue, setInputValue] = useState('');\r\n const [validationError, setValidationError] = useState('');\r\n const [focused, setFocused] = useState(false);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n const validateChip = (value: string,validation: any): { isValid: boolean; error: string } => {\r\n if (!validation) return { isValid: true, error: '' };\r\n\r\n const trimmedValue = value.trim();\r\n if (!trimmedValue) return { isValid: false, error: 'Empty values are not allowed' };\r\n\r\n switch (validation.type) {\r\n case 'email': {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n const isValidEmail = emailRegex.test(trimmedValue);\r\n return {\r\n isValid: isValidEmail,\r\n error: isValidEmail ? '' : validation.message || 'Please enter a valid email address'\r\n };\r\n }\r\n\r\n // case 'url': {\r\n // const urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\r\n // const isValidUrl = urlRegex.test(trimmedValue);\r\n // return {\r\n // isValid: isValidUrl,\r\n // error: isValidUrl ? '' : validation.message || 'Please enter a valid URL'\r\n // };\r\n // }\r\n\r\n case 'phone': {\r\n const phoneRegex = /^[+]?[1-9][\\d]{0,15}$/;\r\n const isValidPhone = phoneRegex.test(trimmedValue.replace(/[\\s()-]/g, ''));\r\n return {\r\n isValid: isValidPhone,\r\n error: isValidPhone ? '' : validation.message || 'Please enter a valid phone number'\r\n };\r\n }\r\n\r\n case 'custom': {\r\n if (validation.pattern) {\r\n const isValid = validation.pattern.test(trimmedValue);\r\n return {\r\n isValid,\r\n error: isValid ? '' : validation.message\r\n };\r\n }\r\n if (validation.validator) {\r\n const isValid = validation.validator(trimmedValue);\r\n return {\r\n isValid,\r\n error: isValid ? '' : validation.message\r\n };\r\n }\r\n return { isValid: true, error: '' };\r\n }\r\n\r\n default:\r\n return { isValid: true, error: '' };\r\n }\r\n };\r\n\r\n // Convert between string and array formats\r\n const stringToArray = (str: string): string[] => {\r\n if (!str || typeof str !== 'string') return [];\r\n return str.split(separator).map(item => item.trim()).filter(Boolean);\r\n };\r\n\r\n const arrayToString = (arr: string[]): string => {\r\n return arr.join(separator + ' ');\r\n };\r\n\r\n // Parse input value by delimiters\r\n const parseMultipleValues = (inputStr: string): string[] => {\r\n if (!allowMultipleAdd) {\r\n return [inputStr.trim()].filter(Boolean);\r\n }\r\n\r\n const delimiterPattern = delimiters.map(d => \r\n d.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\r\n ).join('|');\r\n \r\n const regex = new RegExp(`[${delimiterPattern}]`);\r\n \r\n return inputStr\r\n .split(regex)\r\n .map(val => val.trim())\r\n .filter(Boolean);\r\n };\r\n\r\n const addChips = (inputStr: string, currentChips: string[]): { \r\n newChips: string[]; \r\n errors: string[]; \r\n addedCount: number;\r\n } => {\r\n const valuesToAdd = parseMultipleValues(inputStr);\r\n if (valuesToAdd.length === 0) {\r\n return { newChips: currentChips, errors: [], addedCount: 0 };\r\n }\r\n\r\n const newChips = [...currentChips];\r\n const errors: string[] = [];\r\n let addedCount = 0;\r\n\r\n for (const value of valuesToAdd) {\r\n if (maxChips && newChips.length >= maxChips) {\r\n errors.push(`Maximum ${maxChips} items allowed`);\r\n break;\r\n }\r\n \r\n if (validation?.length > 0) {\r\n const errorMessages = validation\r\n .map(val => validateChip(value, val))\r\n .filter(result => !result.isValid)\r\n .map(result => result.error);\r\n\r\n if (errorMessages.length > 0) {\r\n errors.push(`\"${value}\": ${errorMessages.join(', ')}`);\r\n continue;\r\n }\r\n }\r\n \r\n\r\n if (!allowDuplicates && newChips.includes(value)) {\r\n errors.push(`\"${value}\": Duplicate values are not allowed`);\r\n continue;\r\n }\r\n\r\n newChips.push(value);\r\n addedCount++;\r\n onChipAdd?.(value);\r\n }\r\n\r\n return { newChips, errors, addedCount };\r\n };\r\n\r\n const removeChip = (chipToRemove: string, index: number, currentChips: string[]) => {\r\n const newChips = currentChips.filter((_, i) => i !== index);\r\n onChipRemove?.(chipToRemove, index);\r\n setValidationError('');\r\n return newChips;\r\n };\r\n\r\n const processInput = (\r\n inputStr: string,\r\n onChange: (value: string[] | string) => void,\r\n currentValue: string[] | string\r\n ) => {\r\n const currentChips = Array.isArray(currentValue) ? currentValue : stringToArray(currentValue);\r\n const { newChips, errors } = addChips(inputStr, currentChips);\r\n \r\n if (errors.length > 0) {\r\n setValidationError(errors.join('; '));\r\n } else {\r\n setValidationError('');\r\n }\r\n \r\n if (newChips.length !== currentChips.length) {\r\n const outputValue = dataType === 'string' ? arrayToString(newChips) : newChips;\r\n onChange(outputValue);\r\n setInputValue('');\r\n }\r\n };\r\n\r\n const handleKeyPress = (\r\n event: KeyboardEvent<HTMLInputElement>,\r\n onChange: (value: string[] | string) => void,\r\n currentValue: string[] | string\r\n ) => {\r\n if (event.key === ' ' || event.key === 'Enter') {\r\n event.preventDefault();\r\n if (inputValue.trim()) {\r\n processInput(inputValue, onChange, currentValue);\r\n }\r\n } else if (event.key === 'Backspace' && !inputValue) {\r\n const currentChips = Array.isArray(currentValue) ? currentValue : stringToArray(currentValue);\r\n if (currentChips.length > 0) {\r\n const lastIndex = currentChips.length - 1;\r\n const newChips = removeChip(currentChips[lastIndex], lastIndex, currentChips);\r\n const outputValue = dataType === 'string' ? arrayToString(newChips) : newChips;\r\n onChange(outputValue);\r\n }\r\n }\r\n };\r\n\r\n const handleBlur = (\r\n onChange: (value: string[] | string) => void,\r\n currentValue: string[] | string\r\n ) => {\r\n setFocused(false);\r\n if (inputValue.trim()) {\r\n processInput(inputValue, onChange, currentValue);\r\n }\r\n };\r\n\r\n const handlePaste = (\r\n event: React.ClipboardEvent<HTMLInputElement>,\r\n onChange: (value: string[] | string) => void,\r\n currentValue: string[] | string\r\n ) => {\r\n if (allowMultipleAdd) {\r\n event.preventDefault();\r\n const pastedText = event.clipboardData.getData('text');\r\n const combinedInput = inputValue + pastedText;\r\n processInput(combinedInput, onChange, currentValue);\r\n }\r\n };\r\n\r\n const handleContainerClick = () => {\r\n if (!disabled && inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n };\r\n\r\n const fieldName = fieldArrayName ? `${fieldArrayName}.${name}` : name;\r\n\r\n return (\r\n <Controller\r\n name={fieldName}\r\n control={control}\r\n defaultValue={dataType === 'string' ? '' : []}\r\n render={({ field: { onChange, value, ...field }, fieldState: { error } }) => {\r\n const currentChips = Array.isArray(value) ? value : stringToArray(value || '');\r\n const hasError = !!error || !!validationError || externalError;\r\n\r\n return (\r\n <FormControl fullWidth error={hasError}>\r\n {label && (\r\n <Typography\r\n type=\"s5\"\r\n weight={\"medium\"}\r\n mb={0.5}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n >\r\n {label} {required && <span className=\"requiredStar\">*</span>}\r\n </Typography>\r\n )}\r\n\r\n <ChipContainer\r\n ref={containerRef}\r\n className={`${focused ? 'focused' : ''} ${hasError ? 'error' : ''} ${disabled ? 'disabled' : ''}`}\r\n onClick={handleContainerClick}\r\n >\r\n {currentChips.map((chip: string, index: number) => (\r\n <InlineChip\r\n key={`${chip}-${index}`}\r\n label={chip}\r\n onDelete={\r\n disabled\r\n ? undefined\r\n : (event) => {\r\n event.stopPropagation();\r\n const newChips = removeChip(chip, index, currentChips);\r\n const outputValue = dataType === 'string' ? arrayToString(newChips) : newChips;\r\n onChange(outputValue);\r\n }\r\n }\r\n size=\"small\"\r\n // color=\"primary\"\r\n // variant=\"outlined\"\r\n {...customChipProps}\r\n />\r\n ))}\r\n \r\n <InlineInput\r\n {...field}\r\n ref={inputRef}\r\n value={inputValue}\r\n onChange={(e) => setInputValue(e.target.value)}\r\n onKeyDown={(e) => handleKeyPress(e, onChange, value)}\r\n onFocus={() => setFocused(true)}\r\n onBlur={() => handleBlur(onChange, value)}\r\n onPaste={(e) => handlePaste(e, onChange, value)}\r\n placeholder={currentChips.length === 0 ? placeholder : ''}\r\n disabled={disabled}\r\n style={{ \r\n width: inputValue ? `${Math.max(inputValue.length * 8, 120)}px` : '120px',\r\n }}\r\n />\r\n \r\n {endIcon && (\r\n <InputAdornment position=\"end\" sx={{ ml: 1 }}>\r\n {endIcon}\r\n </InputAdornment>\r\n )}\r\n </ChipContainer>\r\n\r\n {(helperText || error?.message || validationError) && (\r\n <FormHelperText>\r\n {error?.message || validationError || helperText}\r\n </FormHelperText>\r\n )}\r\n\r\n {maxChips && (\r\n <FormHelperText>\r\n {currentChips.length} / {maxChips} items\r\n </FormHelperText>\r\n )}\r\n\r\n \r\n </FormControl>\r\n );\r\n }}\r\n />\r\n );\r\n});\r\n\r\nexport default ChipGenerator;","import React from 'react';\r\n\r\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\r\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\r\nimport { DateTimePicker as Date } from '@mui/x-date-pickers/DateTimePicker';\r\nimport Typography from '../typography/typography';\r\nimport { styled } from '@mui/material';\r\nimport logo from '../../assets/images';\r\nimport dayjs from 'dayjs';\r\nimport './date-time-picker.scss'\r\n\r\nexport interface DatePickerProps {\r\n\tlabel: string;\r\n\tdisabled?: boolean;\r\n\terror?: boolean;\r\n\tname?: string;\r\n\tvalue?: string | number | Date;\r\n\thelperText?: string;\r\n\tdataPosition?: number;\r\n\tdataName?: string;\r\n\tdisableFutureDates?: boolean;\r\n\tplaceholder?: string;\r\n\trequired?: boolean;\r\n\tdisablePastDates?: boolean;\r\n\tdefaultValue?: string | number | Date | undefined;\r\n\ttextFieldProps?: any;\r\n\tformat?: string;\r\n}\r\n\r\nconst StyledDatePicker = styled(Date)(({ theme: { palette } }) => ({\r\n\t'& .MuiOutlinedInput-root': {\r\n\t\tpadding: '0',\r\n\t\tcolor: palette.theme?.secondary[800],\r\n\t\t'& fieldset': {\r\n\t\t\tborderColor: palette.theme?.secondary[400]\r\n\t\t},\r\n\t\t'&:hover fieldset': {\r\n\t\t\tborderColor: palette.theme?.secondary[500]\r\n\t\t},\r\n\t\t'&.Mui-focused fieldset': {\r\n\t\t\tborderWidth: '0.0625rem',\r\n\t\t\tborderStyle: 'solid',\r\n\t\t\tborderColor: palette.theme?.primary[700]\r\n\t\t},\r\n\t\t'&.Mui-error fieldset': {\r\n\t\t\tborderColor: palette.theme?.error[600]\r\n\t\t},\r\n\t\t'&.Mui-disabled': {\r\n\t\t\tbackground: palette.theme?.secondary[200],\r\n\t\t\tcolor: palette.theme?.secondary[800]\r\n\t\t},\r\n\t\t'& .MuiInputBase-input::placeholder': {\r\n\t\t\tcolor: palette.theme?.secondary[800],\r\n\t\t\topacity: 1\r\n\t\t}\r\n\t},\r\n\t'& .MuiFormHelperText-root': {\r\n\t\tmarginLeft: 0,\r\n\t\tcolor: palette.theme?.secondary[800],\r\n\t\t'&.Mui-error': {\r\n\t\t\tcolor: palette.theme?.error[600]\r\n\t\t}\r\n\t},\r\n\t'& .MuiIconButton-root': {\r\n\t\tmarginRight: 0\r\n\t},\r\n\t'& .MuiPickersCalendarHeader-labelContainer': {\r\n\t\tfontWeight: 600\r\n\t}\r\n}));\r\n\r\nconst DateTimePicker = (props: DatePickerProps) => {\r\n\tconst {\r\n\t\tlabel,\r\n\t\tdisabled,\r\n\t\terror,\r\n\t\thelperText,\r\n\t\tdataName,\r\n\t\tdataPosition,\r\n\t\tdisableFutureDates = false,\r\n\t\tplaceholder,\r\n\t\trequired = false,\r\n\t\tdisablePastDates = false,\r\n\t\tdefaultValue,\r\n\t\ttextFieldProps,\r\n\t\tformat,\r\n\t\t...rest\r\n\t} = props;\r\n\r\n\treturn (\r\n\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\r\n\t\t\t{label && (\r\n\t\t\t\t<Typography\r\n\t\t\t\t\ttype='s5'\r\n\t\t\t\t\tweight='medium'\r\n\t\t\t\t\tmb={0.5}\r\n\t\t\t\t\tcolor={error ? 'theme.error.600' : 'theme.secondary.800'}\r\n\t\t\t\t\tdata-position={dataPosition}\r\n\t\t\t\t\tdata-name={dataName}>\r\n\t\t\t\t\t{label} {required && <span className='requiredStar'>*</span>}\r\n\t\t\t\t</Typography>\r\n\t\t\t)}\r\n\t\t\t<StyledDatePicker\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tdisableFuture={disableFutureDates}\r\n\t\t\t\tdisablePast={disablePastDates}\r\n\t\t\t\tslotProps={{\r\n\t\t\t\t\ttextField: {\r\n\t\t\t\t\t\thelperText: helperText,\r\n\t\t\t\t\t\terror: error,\r\n\t\t\t\t\t\tplaceholder: placeholder || 'MM/DD/YYYY HH:mm:ss',\r\n\t\t\t\t\t\t...textFieldProps\r\n\t\t\t\t\t\t// required: required,\r\n\t\t\t\t\t}\r\n\t\t\t\t}}\r\n\t\t\t\tformat={format || 'MM/DD/YYYY HH:mm:ss'}\r\n\t\t\t\tslots={{ openPickerIcon: logo.CalenderIcon }}\r\n\t\t\t\t{...rest}\r\n\t\t\t\tdefaultValue={defaultValue ? dayjs(defaultValue) : undefined}\r\n\t\t\t\tclassName='datePicker'\r\n\t\t\t/>\r\n\t\t</LocalizationProvider>\r\n\t);\r\n};\r\n\r\nexport { DateTimePicker };\r\nexport default DateTimePicker;\r\n","import { Box, IconButton, MenuItem, SelectChangeEvent, TextField } from \"@mui/material\";\r\nimport Typography from \"../typography/typography\";\r\nimport Select from \"../select/select\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\nimport ChevronRightICon from \"@mui/icons-material/ChevronRight\";\r\nimport \"./pagination.scss\";\r\nimport { IPaginationModel } from \"../../@types/pagination-model\";\r\nimport { useLanguage } from \"../../hooks/useLangauge\";\r\nimport { usePages } from \"../../hooks/use-pages\";\r\nimport { useEffect } from \"react\";\r\n\r\ninterface IPagination {\r\n paginationModel: IPaginationModel;\r\n handlePaginationModel: (model: IPaginationModel) => void;\r\n totalPages: number;\r\n}\r\n\r\nconst Pagination = ({\r\n paginationModel,\r\n totalPages,\r\n handlePaginationModel,\r\n}: IPagination) => {\r\n const { pageNo, limit } = paginationModel;\r\n const skip=limit*(pageNo-1)\r\n const pageSizeOptions = [10, 20, 50];\r\n const {isRtl}=useLanguage();\r\n const {setIsChanged,setActivePage,activePage}=usePages();\r\n const handleLimitChange = (e: SelectChangeEvent<unknown>) => {\r\n const newModel = {\r\n ...paginationModel,\r\n page: 1,\r\n pageNo: 1,\r\n limit: e?.target?.value as number,\r\n };\r\n handlePaginationModel(newModel);\r\n };\r\n\r\n const handleNextPage = () => {\r\n if (pageNo < totalPages) {\r\n const newModel = {\r\n ...paginationModel,\r\n pageNo: parseInt(pageNo) + 1,\r\n };\r\n handlePaginationModel(newModel);\r\n setIsChanged(true)\r\n }\r\n };\r\n const handlePrevPage = () => {\r\n if (pageNo > 1) {\r\n const newModel = {\r\n ...paginationModel,\r\n pageNo: parseInt(pageNo) - 1,\r\n };\r\n handlePaginationModel(newModel);\r\n setIsChanged(true)\r\n }\r\n };\r\n\r\n const handleEnterKey = (event) => {\r\n if (event.key === 'Enter') {\r\n const value = event.target.value;\r\n if (parseInt(value) > 0 && parseInt(value) <= totalPages) {\r\n const newModel = {\r\n ...paginationModel,\r\n pageNo: parseInt(value),\r\n }; \r\n handlePaginationModel(newModel);\r\n setIsChanged(true)\r\n }\r\n \r\n }\r\n };\r\n\r\n useEffect(()=>{\r\n setActivePage({...activePage,skip,pageNo})\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[pageNo])\r\n\r\n\r\n\r\n return (\r\n <Box className=\"pagination\" borderTop={\"2px solid theme.secondary.200\"}>\r\n <Typography color=\"theme.secondary.800\" type=\"s4\">\r\n Items per page :\r\n </Typography>\r\n <Select\r\n value={limit}\r\n size=\"small\"\r\n className=\"page-size-select page-size-select-pagination\"\r\n onChange={handleLimitChange}\r\n variant=\"outlined\"\r\n MenuProps={{\r\n sx:{\r\n maxWidth:\"unset\"\r\n }\r\n }}\r\n >\r\n {pageSizeOptions?.map((size) => (\r\n <MenuItem key={size} value={size}>\r\n {size}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n\r\n <Typography color=\"theme.secondary.800\" type=\"s4\">\r\n Go To :\r\n </Typography>\r\n\r\n <TextField\r\n type=\"number\"\r\n className=\"goto-box\"\r\n id=\"outlined-required\"\r\n defaultValue=\"\"\r\n onKeyDown={handleEnterKey}\r\n />\r\n\r\n <IconButton onClick={handlePrevPage} size=\"small\" disabled={paginationModel.pageNo === 1}>\r\n {isRtl ? <ChevronRightICon /> : <ChevronLeftIcon />} \r\n </IconButton>\r\n <Typography\r\n sx={{\r\n ...(isRtl ? { ml: 0.5 } : { mr: 0.5 })\r\n }}\r\n type=\"s4\"\r\n weight=\"normal\"\r\n color=\"theme.secondary.700\"\r\n >\r\n Page{\" \"}\r\n </Typography>\r\n {/* <input value={pageNo} type=\"number\" className=\"page-input\" />{\" \"} */}\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {pageNo}{\" \"}\r\n </Typography>\r\n <Typography\r\n mx={0.5}\r\n type=\"s4\"\r\n weight=\"normal\"\r\n color=\"theme.secondary.700\"\r\n >\r\n of{\" \"}\r\n </Typography>\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {totalPages || 1}\r\n </Typography>\r\n {/* </Box> */}\r\n <IconButton onClick={handleNextPage} size=\"small\" disabled={paginationModel.pageNo === totalPages}>\r\n {isRtl ? <ChevronLeftIcon /> :<ChevronRightICon />}\r\n </IconButton>\r\n </Box>\r\n );\r\n};\r\n\r\nexport { Pagination };\r\nexport default Pagination;\r\n","import {\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n IconButton,\r\n} from \"@mui/material\";\r\nimport Close from \"@mui/icons-material/Close\";\r\nimport Typography from \"../../typography/typography\";\r\nimport TextField from \"../../text-field/text-field\";\r\nimport Button from \"../../button/button\";\r\nimport Modal from \"../../modal/modal\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { IPage } from \"../../../@types/page\";\r\n\r\ninterface IAddPage {\r\n open: boolean;\r\n onClose: () => void;\r\n page?: IPage;\r\n handleSubmit: (page: IPage) => void;\r\n pages?: IPage[];\r\n}\r\n\r\nconst AddPageModal = ({ open, onClose, page, handleSubmit, pages }: IAddPage) => {\r\n const [name, setName] = useState<string>();\r\n const [error, setError] = useState<string>(\"\");\r\n const pageNames = useMemo(() => pages?.map((page) => page?.name || \"\"), [pages])\r\n\r\n useEffect(() => {\r\n setName(page?.name);\r\n }, [page]);\r\n\r\n useEffect(() => {\r\n setError(\"\")\r\n }, []);\r\n\r\n const handleSave = () => {\r\n let newPage: any = {};\r\n if (page) {\r\n newPage = {\r\n ...page,\r\n };\r\n }\r\n newPage[\"name\"] = name;\r\n\r\n handleSubmit(newPage);\r\n setName(\"\");\r\n onClose();\r\n };\r\n\r\n const handleInputChange = (e: any) => {\r\n const value = e.target.value\r\n\r\n setName(value)\r\n if (pageNames?.includes(value.trim())) {\r\n setError(\"Page name already in use\")\r\n } else if (!value.trim()) {\r\n setError(\"Page name can not be empty\")\r\n } else {\r\n setError(\"\")\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <Modal fullWidth onClose={onClose} open={open}>\r\n <DialogTitle>\r\n <Typography type=\"s3\" weight=\"medium\" color={\"theme.secondary.1000\"}>\r\n {page ? \"Edit\" : \"Add\"} New View\r\n </Typography>\r\n <IconButton edge=\"end\" onClick={onClose} size=\"small\">\r\n <Close fontSize=\"inherit\" />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent dividers>\r\n <TextField\r\n label=\"View Name\"\r\n fullWidth\r\n placeholder=\"Enter view name\"\r\n error={error}\r\n helperText={error}\r\n value={name}\r\n onChange={handleInputChange}\r\n />\r\n </DialogContent>\r\n <DialogActions>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={()=>{\r\n onClose();\r\n setName(\"\");\r\n }}\r\n style={{\r\n color: \"black\",\r\n }}\r\n >\r\n Cancel\r\n </Button>\r\n <Button disabled={error || !name} onClick={handleSave}>Save</Button>\r\n </DialogActions>\r\n </Modal>\r\n </>\r\n );\r\n};\r\n\r\nexport { AddPageModal };\r\nexport default AddPageModal;\r\n","import Typography from \"../../typography/typography\";\nimport images from \"../../../assets/images\";\nimport { Box, Tab, Tabs } from \"@mui/material\";\nimport { SyntheticEvent, useState } from \"react\";\n\nfunction SharedPageView(props: any) {\n const { pageValue, pages, onChange } = props;\n const [value, setValue] = useState(pages[pageValue]?.viewStyle - 1);\n\n const handleChange = (_event: SyntheticEvent, newValue: number) => {\n setValue(newValue);\n onChange(newValue + 1);\n };\n\n const renderContentView = () => {\n switch (value) {\n case 0:\n return (\n <img\n className=\"shared-img\"\n src={images.sharedPage.kanbanView}\n alt=\"Kanban View\"\n />\n );\n case 1:\n return (\n <img\n className=\"shared-img\"\n src={images.sharedPage.calendarView}\n alt=\"Gantt View\"\n />\n );\n case 2:\n return (\n <img\n className=\"shared-img\"\n src={images.sharedPage.tableView}\n alt=\"Grid View\"\n />\n );\n case 3:\n return (\n <img\n className=\"shared-img\"\n src={images.sharedPage.ganttView}\n alt=\"Table View\"\n />\n );\n case 4:\n return (\n <img\n className=\"shared-img\"\n src={images.sharedPage.gridView}\n alt=\"Calendar View\"\n />\n );\n default:\n return null;\n }\n };\n\n const renderViewName = (index: number) => {\n switch (index) {\n case 0:\n return value === 0 ? \"Kanban View\" : \"1\";\n case 1:\n return value === 1 ? \"Calendar View\" : \"2\";\n case 2:\n return value === 2 ? \"List View\" : \"3\";\n case 3:\n return value === 3 ? \"Timeline View\" : \"4\";\n case 4:\n return value === 4 ? \"Grid\" : \"5\";\n default:\n return \"\";\n }\n };\n\n return (\n <>\n <div className=\"shared-img-wrap\">\n <Typography>{renderContentView()}</Typography>\n <div className=\"shared-img-tab\">\n <Box sx={{ width: \"100%\" }}>\n <Tabs value={value} onChange={handleChange} centered>\n <Tab key={0} label={renderViewName(0)} />\n <Tab key={1} label={renderViewName(1)} />\n <Tab key={2} label={renderViewName(2)} />\n <Tab key={3} label={renderViewName(3)} />\n <Tab key={4} label={renderViewName(4)} />\n </Tabs>\n </Box>\n </div>\n </div>\n </>\n );\n}\n\nexport { SharedPageView };\nexport default SharedPageView;\n","import {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n FormControlLabel,\r\n Grid,\r\n IconButton,\r\n Tab,\r\n Tabs,\r\n} from \"@mui/material\";\r\nimport Close from \"@mui/icons-material/Close\";\r\nimport Typography from \"../../typography/typography\";\r\nimport Button from \"../../button/button\";\r\nimport Modal from \"../../modal/modal\";\r\nimport \"./shared-page-modal.scss\";\r\nimport { useEffect, useState } from \"react\";\r\nimport SearchBar from \"../../search-bar/search-bar\";\r\nimport Toggle from \"../../toggle/toggle\";\r\nimport SharedPageView from \"./shared-page-view\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { setSharedPage } from \"../../../views/afterAuth/dashboard/redux/reducer\";\r\n\r\ninterface IAddPage {\r\n open: boolean;\r\n onClose: () => void;\r\n pages?: any;\r\n handleSubmit: (page: any) => void;\r\n}\r\n\r\ninterface TabPanelProps {\r\n children?: React.ReactNode;\r\n index: number;\r\n value: number;\r\n}\r\n\r\nfunction TabPanel(props: TabPanelProps) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n <div\r\n className=\"shared-tab\"\r\n role=\"tabpanel\"\r\n hidden={value !== index}\r\n id={`vertical-tabpanel-${index}`}\r\n aria-labelledby={`vertical-tab-${index}`}\r\n {...other}\r\n >\r\n {value === index && (\r\n <Box sx={{ p: 3 }}>\r\n <Typography>{children}</Typography>\r\n </Box>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nfunction a11yProps(index: number) {\r\n return {\r\n id: `vertical-tab-${index}`,\r\n \"aria-controls\": `vertical-tabpanel-${index}`,\r\n };\r\n}\r\n\r\nconst SharedPageModal = ({ open, onClose, pages, handleSubmit }: IAddPage) => {\r\n const [value, setValue] = useState(0);\r\n const [sharedPages, setSharedPages] = useState(pages);\r\n const [searchQuery, setSearchQuery] = useState(\"\");\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(setSharedPage(sharedPages));\r\n }, [dispatch, sharedPages]);\r\n\r\n const handleChange = (_event: React.SyntheticEvent, newValue: number) => {\r\n setValue(newValue);\r\n };\r\n\r\n const handleSave = () => {\r\n handleSubmit(pages[value]);\r\n };\r\n\r\n const renderTabs = () => {\r\n const filteredPages = sharedPages.filter((page: any) =>\r\n page.name.toLowerCase().includes(searchQuery.toLowerCase()),\r\n );\r\n\r\n return filteredPages.map((page: any, index: number) => (\r\n <Tab key={index} label={page.name} {...a11yProps(index)} />\r\n ));\r\n };\r\n\r\n const PageDescription = ({ page }: { page: any }) => {\r\n let viewsMessage = \"\",\r\n filtersMessage = \"\";\r\n\r\n if (page?.details?.views?.length === 1) {\r\n viewsMessage = `This page has 1 view, you can customize it`;\r\n } else if (page?.details?.views?.length) {\r\n viewsMessage = `This page has ${page?.details?.views?.length} different views, you can customize them`;\r\n } else {\r\n viewsMessage = `In this page you can add different views and customize them`;\r\n }\r\n\r\n if (page?.details?.filters?.length === 1) {\r\n filtersMessage = `, and it also have a saved filters to make things easier for you.`;\r\n } else if (page?.details?.filters?.length) {\r\n filtersMessage = `, and there are also ${page?.details?.filters?.length} saved filters to make things easier for you.`;\r\n } else {\r\n filtersMessage = `, and you can also add filters to make things easier for you`;\r\n }\r\n\r\n return <p>{viewsMessage + filtersMessage}</p>;\r\n };\r\n\r\n const handleToggle = () => {\r\n setSharedPages((prevPages: any) => {\r\n const updatedPages = prevPages.map((page: any, index: any) => {\r\n if (index === value) {\r\n return {\r\n ...page,\r\n isPinToDashboard: !page.isPinToDashboard,\r\n };\r\n }\r\n return page;\r\n });\r\n return updatedPages;\r\n });\r\n };\r\n\r\n const handleSharedView = (viewStyle: number) => {\r\n setSharedPages((prevPages: any) => {\r\n const updatedPages = prevPages.map((page: any, index: any) => {\r\n if (index === value) {\r\n return {\r\n ...page,\r\n viewStyle: viewStyle,\r\n };\r\n }\r\n return page;\r\n });\r\n return updatedPages;\r\n });\r\n };\r\n\r\n const handleSearchBar = (value: string) => {\r\n setSearchQuery(value);\r\n setValue(0);\r\n };\r\n return (\r\n <>\r\n <Modal\r\n fullWidth\r\n onClose={onClose}\r\n open={open}\r\n className=\"shared-pages-modal\"\r\n >\r\n <DialogTitle>\r\n <Typography type=\"s3\" weight=\"medium\" color={\"theme.secondary.1000\"}>\r\n Shared Views\r\n </Typography>\r\n <IconButton edge=\"end\" onClick={onClose} size=\"small\">\r\n <Close fontSize=\"inherit\" />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent dividers>\r\n {sharedPages?.length ?\r\n <Box>\r\n <Grid container spacing={2}>\r\n <Grid item xs={4} className=\"tab-title-wrap\">\r\n <div className=\"tab-search-wrap\">\r\n <SearchBar\r\n placeholder={\"Search User\"}\r\n handleSearch={handleSearchBar}\r\n />\r\n </div>\r\n <Tabs\r\n orientation=\"vertical\"\r\n variant=\"scrollable\"\r\n value={value}\r\n onChange={handleChange}\r\n aria-label=\"Vertical tabs example\"\r\n sx={{ borderRight: 1, borderColor: \"divider\" }}\r\n >\r\n {renderTabs()}\r\n </Tabs>\r\n </Grid>\r\n <Grid className=\"shared-grid-wrap\" item xs={8}>\r\n {sharedPages\r\n .filter((page: any) =>\r\n page.name.toLowerCase().includes(searchQuery.toLowerCase()),\r\n )\r\n .map((page: any, index: number) => (\r\n <TabPanel value={value} index={index} key={index}>\r\n <div className=\"shared-pages-main\">\r\n <SharedPageView\r\n pageValue={index}\r\n pages={sharedPages}\r\n onChange={handleSharedView}\r\n />\r\n </div>\r\n <div className=\"tab-info-wrap\">\r\n <div className=\"tab-inner-info\">\r\n <div>\r\n <h1>{page.name}</h1>\r\n </div>\r\n <div className=\"tab-toggle\">\r\n <div>\r\n <FormControlLabel\r\n control={\r\n <Toggle\r\n checked={page.isPinToDashboard}\r\n onChange={handleToggle}\r\n />\r\n }\r\n label=\"Pined to dashboard\"\r\n labelPlacement=\"start\"\r\n />\r\n </div>\r\n <div className=\"owner-name-wrap\">\r\n <p>\r\n <span>Owner:</span> {page.owner}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"tab-content\">\r\n <PageDescription page={page} />\r\n </div>\r\n </div>\r\n </TabPanel>\r\n ))}\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n : <Box display='flex' width='100%' height='100%' alignItems='center' justifyContent='center'><Typography type=\"s1\" color='theme.secondary.800'>No Views has been shared with you</Typography></Box>}\r\n </DialogContent>\r\n <DialogActions>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={onClose}\r\n style={{\r\n color: \"black\",\r\n }}\r\n disabled={!sharedPages?.length}\r\n >\r\n Cancel\r\n </Button>\r\n <Button onClick={handleSave} disabled={!sharedPages?.length}>Duplicate</Button>\r\n </DialogActions>\r\n </Modal>\r\n </>\r\n );\r\n};\r\n\r\nexport { SharedPageModal };\r\nexport default SharedPageModal;\r\n","import React from \"react\";\r\nimport { IconButton, Menu, MenuItem } from \"@mui/material\";\r\nimport AddCircleOutlineRoundedIcon from \"@mui/icons-material/AddCircleOutlineRounded\";\r\nimport Typography from \"../../typography/typography\";\r\nimport AddPageModal from \"./add-page-modal\";\r\nimport KeyboardArrowRightIcon from \"@mui/icons-material/KeyboardArrowRight\";\r\nimport { IPage } from \"../../../@types/page\";\r\nimport SharedPageModal from \"./shared-page-modal\";\r\n\r\ninterface IAddPage {\r\n sharedPages: any;\r\n handleAddPage: (view: IPage) => void;\r\n pages?: IPage[];\r\n}\r\n\r\nconst AddPage = ({ sharedPages, handleAddPage, pages }: IAddPage) => {\r\n const [isAddMenuOpen, setIsAddMenuOpen] = React.useState<null | HTMLElement>(\r\n null,\r\n );\r\n const [isAddPageModalOpen, setIsAddPageModalOpen] = React.useState(false);\r\n const [isSharedPageModalOpen, setIsSharedPageModalOpen] =\r\n React.useState(false);\r\n\r\n const handleAddMenuOpen = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n event.stopPropagation();\r\n setIsAddMenuOpen(event.currentTarget);\r\n };\r\n const handleAddMenuClose = () => setIsAddMenuOpen(null);\r\n\r\n const handleOpenAddPageModal = () => {\r\n handleAddMenuClose();\r\n setIsAddPageModalOpen(true);\r\n };\r\n const handleCloseAddPageModal = () => setIsAddPageModalOpen(false);\r\n\r\n const handleCloseSharedModal = () => {\r\n setIsSharedPageModalOpen(false);\r\n };\r\n const handleOpenSharedPageModal = () => {\r\n setIsSharedPageModalOpen(true);\r\n setIsAddMenuOpen(null);\r\n };\r\n const handleShared = (page: any) => {\r\n const newPage: any = { ...page.details, name: page.name };\r\n handleAddPage(newPage);\r\n setIsSharedPageModalOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n <IconButton size=\"small\" sx={{ ml: 1 }} onClick={handleAddMenuOpen}>\r\n <AddCircleOutlineRoundedIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n <Menu\r\n open={Boolean(isAddMenuOpen)}\r\n anchorEl={isAddMenuOpen}\r\n onClose={handleAddMenuClose}\r\n >\r\n <MenuItem onClick={handleOpenAddPageModal}>\r\n <Typography color=\"theme.secondary.1000\" type=\"s4\">\r\n Create New View\r\n </Typography>\r\n </MenuItem>\r\n <MenuItem onClick={handleOpenSharedPageModal}>\r\n <Typography color=\"theme.secondary.1000\" type=\"s4\">\r\n Shared Views\r\n </Typography>\r\n <KeyboardArrowRightIcon fontSize=\"small\" />\r\n </MenuItem>\r\n </Menu>\r\n\r\n <AddPageModal\r\n pages={pages}\r\n open={isAddPageModalOpen}\r\n onClose={handleCloseAddPageModal}\r\n handleSubmit={handleAddPage}\r\n />\r\n <SharedPageModal\r\n open={isSharedPageModalOpen}\r\n pages={sharedPages || []}\r\n onClose={handleCloseSharedModal}\r\n handleSubmit={handleShared}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport { AddPage };\r\nexport default AddPage;\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable unused-imports/no-unused-vars */\nimport {\n Box,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n IconButton,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n List,\n ListItem,\n ListItemText,\n ListItemAvatar,\n MenuItem,\n FormControlLabel,\n} from \"@mui/material\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport Typography from \"../typography/typography\";\n\nimport Button from \"../button/button\";\nimport Avatar from \"../avatar/avatar\";\nimport Select from \"../select/select\";\nimport \"./share-modal.scss\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useAppDispatch, useAppSelector } from \"../../redux/hooks\";\nimport { getAllUserAndDepartmentDropdown } from \"./redux/actionCreator\";\nimport React from \"react\";\nimport Toggle from \"../toggle/toggle\";\nimport SearchableSelect from \"../searchable-select\";\nimport { flatMap } from \"lodash\";\nimport Checkbox from \"../checkbox/checkbox\";\n\ninterface SharePopUpProps {\n open: boolean;\n title: string;\n onClose: () => void;\n roles?: any;\n toggleSwitch: boolean;\n onSubmit: (selectedUsers: any) => void;\n value?: any;\n isPeopleAccessVisible?: boolean;\n}\ninterface UserDropdownData {\n isRoleVisible: boolean;\n selectedUsers: any[];\n}\n\nconst SharePopUp = (props: SharePopUpProps) => {\n const {\n open,\n title,\n onClose,\n roles,\n toggleSwitch,\n onSubmit,\n value = {},\n isPeopleAccessVisible = false,\n } = props;\n\n const { share } = useAppSelector((store) => store);\n\n const dispatch = useAppDispatch();\n\n const [isPublic, setIsPublic] = useState(value.isPublic || false);\n const [selectedOptions, setSelectedOptions] = useState(\n value.selectedUsers || [],\n );\n const [roleValue, setRoleValue] = useState([]);\n const [availableRole, setAvailableRole] = useState([]);\n\n const [userDropdownData, setUserDropdownData] = useState<UserDropdownData>({\n isRoleVisible: false,\n selectedUsers: [],\n });\n\nconst filteredOptions=useMemo(()=>userDropdownData?.isRoleVisible ? share.departments : share.users,[share,userDropdownData?.isRoleVisible])\nconst [selectedUsers, setSelectedUsers] = useState<any[]>([]);\n useEffect(() => {\n const role: any = [];\n const selRole: any = [];\n roles &&\n roles.map((item: any) => {\n const userRole: any = {};\n if (item.role !== \"Owner\") {\n role.push(item.role);\n userRole.id = item.id;\n userRole.role = item.role;\n selRole.push(userRole);\n }\n setAvailableRole(role);\n setRoleValue(selRole);\n });\n }, [roles]);\n\nuseEffect(()=>{\n if(!value?.selectedUsers?.length && !value?.role_id){\n resetOptions()\nreturn\n }\n userDropdownData.isRoleVisible=value.is_role\n setUserDropdownData(userDropdownData)\n setSelectedOptions({\n ...value,\n selectedUsers:value.is_role?value?.role_id:value?.selectedUsers\n })\n //eslint-disable-next-line\n},[value?.selectedUsers,open])\n\n const handleShareSubmit = () => {\n if(!selectedUsers?.length) return\n const uIds = flatMap(selectedUsers, 'userIds').filter(i=>i);\n let sOptions = selectedUsers\n if( Array.isArray(uIds) && uIds?.length) {\n sOptions = share.users?.filter(u => uIds.includes(u.id))\n \n }\n const sharedData = {\n is_private: !isPublic,\n selectedUsers: [...new Set(sOptions)],\n is_role:userDropdownData?.isRoleVisible,\n role_id:userDropdownData?.isRoleVisible?selectedUsers?.map((u: any) => u?.id):[],\n };\n onSubmit(sharedData);\n \n };\n\n const resetOptions=()=> {\n setSelectedOptions({\n ...value\n });\n setUserDropdownData((prevData) => ({\n ...prevData,\n selectedUsers: [],\n }));\n };\n\n\n\n const handleRoleChange = (event: any, id: any, user: any) => {\n const changeRole: any = roleValue.map((item: any) => {\n if (item.id === id) {\n item.role = event.target.value;\n }\n return item;\n });\n setRoleValue(changeRole);\n };\n\n const handleToggleChange = () => {\n setUserDropdownData((prevSettings) => ({\n ...prevSettings,\n isRoleVisible: !prevSettings.isRoleVisible,\n }));\n setSelectedOptions([]);\n setSelectedUsers(value.selectedUsers || []);\n };\n\n const handleChage=(value:any)=>{\n if(userDropdownData.isRoleVisible){\n setSelectedOptions({...selectedOptions,role_id:value})\n }\n setSelectedOptions({...selectedOptions,selectedUsers:value})\n }\n\n const toggleMakeItPublic = () => {\n setIsPublic(!isPublic);\n }\n \n useEffect(() => {\n if(!open)resetOptions()\n if (open) {\n dispatch(getAllUserAndDepartmentDropdown());\n }\n // eslint-disable-next-line\n }, [open]);\n\n\n\n return (\n <div>\n <Dialog open={open} onClose={onClose} className=\"share\">\n <DialogTitle className=\"share--head\">\n <Box className=\"share--title\">\n <Typography type=\"s3\" ml={1} className=\"dialog-box-title\">\n {title}\n </Typography>\n </Box>\n <IconButton disableRipple onClick={onClose}>\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n\n <Divider />\n\n <DialogContent className=\"share--content\">\n <Box m={1} display={'flex'} alignItems={'center'} justifyContent={'space-between'}>\n <Typography type=\"s3\" className=\"input-label\">\n Add users\n </Typography>\n <FormControlLabel\n control={<Box mb={0.5} mr={0.5}><Toggle checked={userDropdownData?.isRoleVisible} onChange={handleToggleChange} /></Box>}\n label={\n <Typography type=\"s3\" className=\"input-label\">Show only Roles</Typography>\n }\n />\n </Box>\n \n\n {toggleSwitch && (\n <>\n \n <Box mb={4} className=\"d-flex\">\n \n <SearchableSelect \n options={filteredOptions}\n multiple\n value={selectedOptions?.selectedUsers}\n onChange={(e) =>handleChage(e.target.value)}\n placeholder={\n selectedOptions && selectedOptions.length\n ? \"\"\n : \"Add people and roles\"\n }\n getSelectedData={row=>setSelectedUsers(row)}\n />\n </Box>\n </>\n )}\n \n {isPeopleAccessVisible && (\n <div className={ \"share--blurClass\"}>\n <Accordion className=\"people-access-accordion\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography>People with access</Typography>\n </AccordionSummary>\n <AccordionDetails className=\"user-accordion-details\">\n <List className=\"accordion-list\">\n {roles &&\n roles.map((user: any) => {\n const userRole: any =\n roleValue?.length > 0 &&\n roleValue?.filter((item: any) => item.id === user.id);\n return (\n <ListItem alignItems=\"flex-start\">\n <ListItemAvatar>\n <Avatar size={40} alt=\"Person\" icon />\n </ListItemAvatar>\n <ListItemText\n className=\"primary-user-name\"\n primary={user.name}\n secondary={\n <Typography\n component=\"span\"\n variant=\"body2\"\n className=\"secondary-email-text\"\n >\n {user.email}\n </Typography>\n }\n />\n {user.role == \"Owner\" ? (\n <p className=\"owner-role-badge\">{user.role}</p>\n ) : (\n <div>\n <Select\n className=\"role-edit-select-box\"\n value={\n userRole?.length > 0 ? userRole[0].role : \"\"\n }\n onChange={(e: any) =>\n handleRoleChange(e, user.id, user)\n }\n variant=\"outlined\"\n >\n {availableRole.map((role: any) => (\n <MenuItem\n className=\"select-menu-items\"\n value={role}\n >\n {role}\n </MenuItem>\n ))}\n </Select>\n </div>\n )}\n </ListItem>\n );\n })}\n </List>\n </AccordionDetails>\n </Accordion>\n </div>\n )}\n\n <div className=\"checkbox\">\n <Checkbox\n checked={isPublic}\n onChange={toggleMakeItPublic}\n />\n <div className=\"checkbox-text\">Make it public</div>\n </div>\n </DialogContent>\n\n <Divider />\n\n <DialogActions className=\"share--actions\">\n <Button className=\"cancel-btn\" variant=\"text\" onClick={onClose}>\n Cancel\n </Button>\n <Button className=\"success-btn\" onClick={handleShareSubmit}>\n Save and Share\n </Button>\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n\nexport { SharePopUp };\nexport default SharePopUp;\n","export const userRoles = [\r\n {\r\n id: 1,\r\n name: \"Prasun Singh\",\r\n email: \"prasun@goldenflitch.com\",\r\n role: \"Owner\",\r\n },\r\n {\r\n id: 2,\r\n name: \"Sidhant Chandel\",\r\n email: \"sidhant@goldenflitch.com\",\r\n role: \"Editor\",\r\n },\r\n {\r\n id: 3,\r\n name: \"Amrit Sonar\",\r\n email: \"amrit@goldenflitch.com\",\r\n role: \"Viewer\",\r\n },\r\n];\r\n","import { Divider, MenuItem } from \"@mui/material\";\nimport Menu from \"../../menu/menu\";\nimport Typography from \"../../typography/typography\";\nimport { useEffect, useState } from \"react\";\nimport AddPageModal from \"./add-page-modal\";\nimport { IPage } from \"../../../@types/page\";\nimport SharePopUp from \"../../share-modal/share-modal\";\nimport { userRoles } from \"../../../views/beforeAuth/components/share-modal-data/share-modal-data\";\nimport ConfirmPopUp from \"../../confirm-modal/confirm-modal\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { pinToDashboardList } from \"../../../views/afterAuth/dashboard/redux/reducer\";\nimport {\n // deleteV1DashboardId,\n // putV1DashboardId,\n} from \"../../../api-client/api.system-feature/api\";\n// import type * as Types from \"../../api-client/api.system-feature/api-types\";\nimport { sharePage } from \"../../share-modal/redux/actionCreator\";\nimport { useAppDispatch } from \"../../../redux/hooks\";\nimport { generateRandomId } from \"../../../utils/common\";\nimport { usePages } from \"../../../hooks/use-pages\";\n\ninterface IPageAction {\n open: null | HTMLElement;\n onClose: () => void;\n page?: IPage;\n pages: IPage[];\n setCurrentPage: React.Dispatch<React.SetStateAction<number>>;\n setPages: React.Dispatch<React.SetStateAction<IPage[]>>;\n resource: string;\n handlePageDelete: (pages: any[]) => void;\n}\n\nconst moveLeft = (arr: IPage[], pageValue: number) => {\n const updatedArray = [...arr];\n if (updatedArray.length <= 1) return;\n\n const index = updatedArray.findIndex((item) => item._id === pageValue);\n\n if (index === 0) return;\n\n const elementToShift = updatedArray.splice(index, 1)[0];\n updatedArray.splice(index - 1, 0, elementToShift);\n return updatedArray;\n};\n\nconst moveRight = (arr: IPage[], pageValue: number) => {\n const updatedArray = [...arr];\n if (updatedArray.length <= 1) return;\n\n const index = updatedArray.findIndex((item) => item._id === pageValue);\n\n if (index === updatedArray.length - 1) return;\n\n const elementToShift = updatedArray.splice(index, 1)[0];\n updatedArray.splice(index + 1, 0, elementToShift);\n return updatedArray;\n};\n\nconst deletePage = (arr: IPage[], pageValue: number) => {\n const updatedArray = [...arr];\n if (updatedArray.length <= 1) return;\n\n const index = updatedArray.findIndex((item) => item._id === pageValue);\n\n updatedArray.splice(index, 1);\n return updatedArray;\n};\n\nconst PageAction = ({\n open,\n onClose,\n page,\n pages,\n setCurrentPage,\n setPages,\n resource,\n handlePageDelete,\n}: IPageAction) => {\n \n const [isEditPageModalOpen, setIsEditPageModalOpen] = useState(false);\n const [isShareModalOpen, setIsShareModalOpen] = useState(false);\n const [isConfirmOpen, setIsConfirmOpen] = useState(false);\n const [deletePageNo, setDeletePageNo] = useState<any>({});\n const [defaultSharedData, setDefaultSharedData] = useState<any>({});\n const [pageSharedData, setPageSharedData] = useState<any>([]);\n const pinToDashboardStore = useSelector((state: any) => state);\n const [pinToDashboardData, setPinToDashboardData] = useState<any>(\n pinToDashboardStore?.dashboard?.pinToDashboardList || [],\n );\n\n\n const appDispatch = useAppDispatch();\n const dispatch = useDispatch();\n const {setIsCreatePage}=usePages()\n // const token = zI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6OSwiaWF0IjoxNzA2NDcwNzQwfQ.6dtxBVGl4hF0TrNDanSBTiFtV_TUshjaiaYe9XT2Ld8\";\n useEffect(() => {\n dispatch(pinToDashboardList(pinToDashboardData));\n }, [dispatch, pageSharedData, pinToDashboardData]);\n\n useEffect(()=>{\n \n if(page){\n setPageSharedData([...pageSharedData,{\n page:{\n ...page,\n value:page?._id\n },\n isPublic: true,\n shareUsers:page?.selectedUsers,\n }])\n }\n //eslint-disable-next-line\n },[page])\n \n\n const handleOpenEditModal = () => {\n onClose();\n setIsEditPageModalOpen(true);\n };\n\n const handleCloseEditModal = () => {\n setIsEditPageModalOpen(false);\n };\n\n const handleShare = (pageData: any) => {\n pageData.pages = pages;\n appDispatch(sharePage(pageData)).then((res) => {\n if (res?.payload?.data?.pages?.length) {\n setPages(res?.payload?.data?.pages);\n }\n setIsShareModalOpen(false);\n });\n };\n\n const handleSharePage = (page: any) => {\n const defaultData = pageSharedData.find(\n (item: any) => item.page?.value === page?.value,\n );\n if (defaultData) {\n setDefaultSharedData({\n isPublic: defaultData.isPublic,\n selectedUsers: defaultData.shareUsers,\n \n });\n } else {\n setDefaultSharedData({\n isPublic: page?.selectedUsers?.length>0,\n ...page,\n });\n }\n setIsShareModalOpen(true);\n setIsShareModalOpen(true);\n };\n\n const handleDuplicatePage = (page: any) => {\n const labelExists = (label: string) =>\n pages.some((item) => item.name === label);\n const { uniqueNumberId: _id } = generateRandomId();\n let newLabel = page.name;\n\n if (labelExists(newLabel)) {\n let counter = 1;\n while (labelExists(`${page.name} ${counter}`)) {\n counter++;\n }\n newLabel = `${page.name} ${counter}`;\n }\n const updatedPage = [\n ...pages,\n { ...page, name: newLabel, _id, data: page.data, isShared: false },\n ];\n\n setPages(updatedPage);\n setIsCreatePage(true)\n };\n\n const handleEdit = (newPage: IPage) => {\n const updatedPages = pages.map((page) => {\n if (page._id === newPage._id) {\n return {\n ...page,\n name: newPage.name\n }\n }\n return page\n })\n\n setPages(updatedPages);\n setIsCreatePage(true)\n // const putDashboardRequest: Types.PutV1DashboardIdRequest = {\n // \"x-token\": token,\n // module: \"user\",\n // user_id: \"1\",\n // name: newPage.name,\n // id: newPage._id,\n // };\n // putV1DashboardId(putDashboardRequest)\n // .then((response: any) => {\n // const prevPages = [...pages];\n // const updatedPages = prevPages.map((page) =>\n // page._id === newPage._id ? newPage : page,\n // );\n // setPages(updatedPages);\n // updatePinToDashboardPage(updatedPages);\n // })\n // .catch((err: any) => console.log(\"Error in adding page\", err));\n };\n\n // const updatePinToDashboardPage = (updatedPages: any) => {\n // const currentPageLabel = updatedPages.find(\n // (item: any) => item.value === page?._id,\n // )?.label;\n\n // const updatedPinToDashboardData = pinToDashboardData.map((data: any) => ({\n // ...data,\n // label: data.value === page?._id ? currentPageLabel : data.label,\n // }));\n\n // setPinToDashboardData(updatedPinToDashboardData);\n // };\n\n const handleMoveLeft = (pageValue: any) => {\n const updatedArray = moveLeft(pages, pageValue?._id);\n if (updatedArray) setPages(updatedArray);\n };\n\n const handleMoveRight = (pageValue: any) => {\n const updatedArray = moveRight(pages, pageValue?._id);\n if (updatedArray) setPages(updatedArray);\n };\n\n const handleDeletePage = (pageValue: any) => {\n setIsConfirmOpen(true);\n setDeletePageNo(pageValue);\n };\n\n const handleConfirmDelete = () => {\n // if (!isNaN(deletePageNo._id)) {\n // const deleteDashboardRequest: Types.DeleteV1DashboardIdRequest = {\n // \"x-token\": token,\n // id: deletePageNo._id,\n // };\n // deleteV1DashboardId(deleteDashboardRequest)\n // .then((response: any) => {\n // })\n // .catch((err: any) => console.log(\"Error in deleting page\", err));\n // }\n \n const updatedArray = deletePage(pages, deletePageNo?._id);\n deletePinToDashboardPage();\n setDeletePageNo({});\n setIsConfirmOpen(false);\n if (updatedArray) {\n setCurrentPage(updatedArray[0]);\n setPages(updatedArray);\n handlePageDelete(updatedArray);\n } else {\n handlePageDelete([]);\n setPages([]);\n }\n };\n\n const deletePinToDashboardPage = () => {\n const updatedPinToDashboardData = pinToDashboardData.filter(\n (data: any) => data.value !== page?._id,\n );\n setPinToDashboardData(updatedPinToDashboardData);\n };\n\n const handleShareModal = (selectedUsers: any) => {\n\n let updatedData: any[] = [];\n const existingItem = pageSharedData.find(\n (item: any) => item.page.value === page?._id,\n );\n\n if (existingItem) {\n updatedData = pageSharedData.map((item: any) => {\n if (item.page.value === page?._id) {\n return {\n ...item,\n isPublic: selectedUsers.isPublic,\n shareUsers: selectedUsers.selectedUsers,\n };\n }\n return item;\n });\n } else {\n updatedData = [\n ...pageSharedData,\n {\n page: page,\n isPublic: selectedUsers.isPublic,\n shareUsers: selectedUsers.selectedUsers,\n viewStyle: 1,\n owner: 0,\n },\n ];\n }\n setPageSharedData(updatedData);\n handleShare({ ...selectedUsers, page: page, resource });\n };\n\n const handlePinToDashboard = () => {\n const index = pinToDashboardData.findIndex(\n (item: any) => item.value === page?._id,\n );\n\n if (index !== -1) {\n setPinToDashboardData((prevData: any) => {\n const updatedData = [...prevData];\n updatedData[index] = { ...updatedData[index], label: page?.name };\n return updatedData;\n });\n } else {\n setPinToDashboardData((prevData: any) => [...prevData, page]);\n }\n };\n\n const actions = [\n {\n label: \"Rename\",\n func: handleOpenEditModal,\n disabled: Boolean(page?.isShared)\n },\n {\n label: \"Duplicate\",\n func: handleDuplicatePage,\n },\n {\n label: \"Share\",\n func: handleSharePage,\n disabled: Boolean(page?.isShared)\n },\n {\n label: \"Pin to dashboard\",\n func: handlePinToDashboard,\n disabled: Boolean(page?.isShared)\n },\n {\n label: \"Move Right\",\n func: handleMoveRight,\n disabled: (pages?.length <= 1) || Boolean(page?.isShared)\n },\n {\n label: \"Move Left\",\n func: handleMoveLeft,\n disabled: (pages?.length <= 1) || Boolean(page?.isShared)\n },\n ];\n\n const handleAction = (func: any) => {\n func(page);\n onClose();\n };\n\n return (\n <>\n <Menu open={Boolean(open)} anchorEl={open} onClose={onClose}>\n {actions?.map((action) => (\n <MenuItem\n key={action?.label}\n onClick={() => handleAction(action.func)}\n disabled={Boolean(action?.disabled)}\n >\n <Typography color=\"theme.secondary.1000\" type=\"s4\">\n {action?.label}\n </Typography>\n </MenuItem>\n ))}\n <Divider sx={{ mt: `4px !important`, mb: `4px !important` }}/>\n <MenuItem onClick={() => handleAction(handleDeletePage)} disabled={Boolean(page?.isShared)}\n sx={{\n '&:hover': {\n backgroundColor: 'theme.error.100'\n }\n }}\n >\n <Typography color=\"theme.error.500\" type=\"s4\">\n Delete\n </Typography>\n </MenuItem>\n </Menu>\n\n <AddPageModal\n open={isEditPageModalOpen}\n page={page}\n pages={pages}\n onClose={handleCloseEditModal}\n handleSubmit={handleEdit}\n />\n\n <ConfirmPopUp\n open={isConfirmOpen}\n onClose={() => setIsConfirmOpen(false)}\n onConfirm={handleConfirmDelete}\n title=\"Delete Confirmation?\"\n description=\"Are you sure you want to delete this page ?\"\n />\n <SharePopUp\n open={isShareModalOpen}\n onClose={() => setIsShareModalOpen(false)}\n title={`Share page ${page?.name}`}\n roles={userRoles}\n toggleSwitch={true}\n value={defaultSharedData}\n onSubmit={handleShareModal}\n />\n </>\n );\n};\n\nexport { PageAction };\nexport default PageAction;\n","/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport {\r\n\tTabs,\r\n\tTab as MUITab,\r\n\tstyled,\r\n\tIconButton,\r\n\tMenuItem,\r\n\tDivider,\r\n\tBox,\r\n\tCircularProgress\r\n} from '@mui/material';\r\nimport MenuIcon from '@mui/icons-material/Menu';\r\nimport KeyboardArrowDown from '@mui/icons-material/KeyboardArrowDown';\r\nimport Typography from '../typography/typography';\r\nimport Menu from '../menu/menu';\r\nimport AddPage from './components/add-page';\r\nimport PageAction from './components/page-action';\r\nimport Tooltip from '../tooltip/Tooltip';\r\nimport { IPage } from '../../@types/page';\r\nimport { defaultPageState } from '../../contexts/page-context';\r\nimport { usePages } from '../../hooks/use-pages';\r\nimport Button from '../button/button';\r\nimport _ from 'lodash';\r\nimport { Save, Share } from '@mui/icons-material';\r\nimport './page-navigator.scss';\r\nimport React from 'react';\r\n\r\nconst StyledTabs = styled(Tabs)(() => ({\r\n\tminHeight: 'fit-content',\r\n\r\n\t'.MuiTabs-indicator': {\r\n\t\theight: '0px !important'\r\n\t},\r\n\t'& .MuiTabs-flexContainer': {\r\n\t\tgap: '4px'\r\n\t}\r\n}));\r\n\r\nconst StyledTab = styled(MUITab)(({ theme: { palette } }) => ({\r\n\tminHeight: '2rem',\r\n\ttextTransform: 'none',\r\n\tpadding: '0rem 1rem',\r\n\tminWidth: 'fit-content',\r\n\tborderRadius: 4,\r\n\t'&.Mui-selected': {\r\n\t\tbackground: palette.theme?.primary[100],\r\n\t\tcolor: palette.theme?.primary[700],\r\n\t\tborderTop: `2px solid ${palette.theme?.primary[700]}`\r\n\t},\r\n\t'.MuiIconButton-root': {\r\n\t\tpadding: '0rem'\r\n\t},\r\n\t\"&:hover\": {\r\n\t\tbackground: palette.theme?.primary[100]\r\n\t}\r\n}));\r\n\r\nconst title = `successfully created, complete with your saved filters, sorting options, and views.`;\r\n\r\nexport interface IPageNavigator {\r\n\tpages: IPage[];\r\n\tsetPages: React.Dispatch<React.SetStateAction<IPage[]>>;\r\n\tcurrentPage: string | number;\r\n\tsetCurrentPage: React.Dispatch<React.SetStateAction<number>>;\r\n\tsharedPages: any;\r\n\tresource: string;\r\n\thandlePageDelete: (pages: any[]) => void;\r\n\tisPageSaving?: boolean;\r\n}\r\n\r\nexport const PageNavigator = ({\r\n\t// sharedPages,\r\n\tresource,\r\n\t// handlePageDelete\r\n}: IPageNavigator) => {\r\n\tconst { pages, setPages, setActivePage, activePage, savePages,setIsChanged, isSaving, generatedColumns, sharedPages, isChanged,deletePage,isCreatePage,setIsCreatePage ,addOrDeletePage} = usePages();\r\n\tconst shareTitle = (owner) => `shared by ${owner}`;\r\n\tconst [isActionsMenuOpen, setIsActionsMenuOpen] =\r\n\t\tuseState<null | HTMLElement>(null);\r\n\tconst [page, setPage] = useState<IPage>();\r\n\r\n\tconst [isAllPagesMenuOpen, setIsAllPagesMenuOpen] =\r\n\t\tuseState<null | HTMLElement>(null);\r\n\r\n\tconst handleChangePage = (_: React.SyntheticEvent, newValue: number) => {\r\n\t\tconst pg = pages.find((p) => p?._id == newValue);\r\n\t\tsetActivePage(pg);\r\n\t};\r\n\r\n\tconst handleOpenActionsMenu = (\r\n\t\tevent: React.MouseEvent<HTMLButtonElement>,\r\n\t\tclickedPage: IPage\r\n\t) => {\r\n\t\tevent.stopPropagation();\r\n\t\tsetPage(clickedPage);\r\n\t\tsetIsActionsMenuOpen(event.currentTarget);\r\n\t};\r\n\tconst handleCloseActionsMenu = () => setIsActionsMenuOpen(null);\r\n\r\n\tconst handleOpenAllPagesMenu = (\r\n\t\tevent: React.MouseEvent<HTMLButtonElement>\r\n\t) => {\r\n\t\tevent.stopPropagation();\r\n\t\tsetIsAllPagesMenuOpen(event.currentTarget);\r\n\t};\r\n\tconst handleCloseAllPagesMenu = () => setIsAllPagesMenuOpen(null);\r\n\r\n\tconst handleChangePageFromMenu = (val: number) => {\r\n\t\tsetActivePage(val);\r\n\t\thandleCloseAllPagesMenu();\r\n\t};\r\n\r\n\tconst handleAddPage = (newPage: IPage) => {\r\n\t\tconst nPage = {\r\n\t\t\t...defaultPageState,\r\n\t\t\t...newPage,\r\n\t\t\tname: newPage.name,\r\n\t\t\tvisible_columns: generatedColumns.columns,\r\n\t\t\tcolumn_order: _.uniq(generatedColumns.orderKeys),\r\n\t\t\t_id: pages.length + 1,\r\n\t\t\tactive_view:'Table',\r\n\t\t\tviews:[{\r\n\t\t\t\tlabel:'Table',\r\n\t\t\t\tposition:0\r\n\t\t\t}]\r\n\t\t};\r\n\t\tconst updatedPages: any = [\r\n\t\t\t...pages,\r\n\t\t\t...[nPage]\r\n\t\t];\r\n\t\tsetActivePage({...nPage});\r\n\t\tsetPages([...updatedPages]);\r\n\t\tsetIsCreatePage(true)\r\n\t\t\r\n\t};\r\n\r\n\tconst handlePageDeleteFunction=(pages:any[])=>{\r\n\t\t\r\n\t\tdeletePage(pages)\r\n\t}\r\n\r\n\r\n\tconst handleAddOrdeletePage =useCallback(async\t () => {\r\n\t\tif(isCreatePage){\r\n\t\t\tconst res=await addOrDeletePage();\r\n\t\t\tif(res.status_code===200){\r\n\t\t\t\tsetPages(res?.data?.pages);\r\n\t\t\t\tsetIsChanged(false)\r\n\t\t\t}}\r\n\t\tsetTimeout(()=>{\r\n\t\t\tsetIsCreatePage(false);\r\n\t\t\t\r\n\t\t},2000)\r\n\t\t//eslint-disable-next-line\r\n\t},[isCreatePage])\r\n\r\n\tuseEffect(()=>{\r\n\t\thandleAddOrdeletePage()\r\n\t\t//eslint-disable-next-line\r\n\t},[handleAddOrdeletePage])\r\n\r\n\treturn (\r\n\t\t<Box display=\"flex\" gap={2} alignItems={'center'} className='page-navigator-container'>\r\n\t\t\t<Box\r\n\t\t\t\tdisplay={'flex'}\r\n\t\t\t\tclassName='page-navigator'\r\n\t\t\t\tsx={{ display: 'flex', opacity: isSaving ? 0.5 : 1 }}>\r\n\t\t\t\t<IconButton\r\n\t\t\t\t\t// size='small'\r\n\t\t\t\t\tonClick={handleOpenAllPagesMenu}\r\n\t\t\t\t\tdisabled={isSaving}>\r\n\t\t\t\t\t<MenuIcon fontSize='small' />\r\n\t\t\t\t</IconButton>\r\n\t\t\t\t<StyledTabs\r\n\t\t\t\t\tvalue={activePage?._id}\r\n\t\t\t\t\tvariant='scrollable'\r\n\t\t\t\t\tonChange={handleChangePage}\r\n\t\t\t\t\taria-label='basic tabs example'>\r\n\t\t\t\t\t{pages?.map((page) => (\r\n\t\t\t\t\t\t<StyledTab\r\n\t\t\t\t\t\t\ticonPosition='end'\r\n\t\t\t\t\t\t\tdisableRipple\r\n\t\t\t\t\t\t\tkey={page}\r\n\t\t\t\t\t\t\ticon={\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tsize='small'\r\n\t\t\t\t\t\t\t\t\tedge='end'\r\n\t\t\t\t\t\t\t\t\tonClick={(e) => handleOpenActionsMenu(e, page)}\r\n\t\t\t\t\t\t\t\t\tdisabled={isSaving}>\r\n\t\t\t\t\t\t\t\t\t<KeyboardArrowDown fontSize='small' color={activePage?._id === page?._id ? 'primary' : undefined}/>\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tlabel={\r\n\t\t\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\t\t\ttitle={`The '${page.name}' page has been ${page?.isShared ? shareTitle(page?.owner) : title}`}\r\n\t\t\t\t\t\t\t\t\tkey={page._id}\r\n\t\t\t\t\t\t\t\t\tplacement='top'\r\n\t\t\t\t\t\t\t\t\tarrow>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', alignItems: 'center', gap:1 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{page?.isShared && <Share sx={{fontSize:'20px',color:'#4AC08C'}}/>}\r\n\t\t\t\t\t\t\t\t\t\t\t<span>{page.name}</span>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvalue={page?._id}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</StyledTabs>\r\n\r\n\t\t\t\t<Divider\r\n\t\t\t\t\torientation='vertical'\r\n\t\t\t\t\tvariant='middle'\r\n\t\t\t\t\tflexItem\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tml: 2,\r\n\t\t\t\t\t\tborderWidth: '1px'\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t\t<Box display=\"flex\" alignItems={'center'}>\r\n\t\t\t\t\t<AddPage\r\n\t\t\t\t\t\tpages={pages}\r\n\t\t\t\t\t\thandleAddPage={handleAddPage}\r\n\t\t\t\t\t\tsharedPages={sharedPages}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t<PageAction\r\n\t\t\t\t\topen={isActionsMenuOpen}\r\n\t\t\t\t\tonClose={handleCloseActionsMenu}\r\n\t\t\t\t\tpage={page}\r\n\t\t\t\t\tsetPages={setPages}\r\n\t\t\t\t\tsetCurrentPage={setActivePage}\r\n\t\t\t\t\tpages={pages}\r\n\t\t\t\t\tresource={resource}\r\n\t\t\t\t\thandlePageDelete={handlePageDeleteFunction}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t<Menu\r\n\t\t\t\t\topen={Boolean(isAllPagesMenuOpen)}\r\n\t\t\t\t\tanchorEl={isAllPagesMenuOpen}\r\n\t\t\t\t\tonClose={handleCloseAllPagesMenu}>\r\n\t\t\t\t\t{pages?.map((page) => (\r\n\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\tselected={page._id === activePage?._id}\r\n\t\t\t\t\t\t\tkey={page._id}\r\n\t\t\t\t\t\t\tonClick={() => handleChangePageFromMenu(page)}>\r\n\t\t\t\t\t\t\t<Typography color='theme.secondary.1000' type='s4'>\r\n\t\t\t\t\t\t\t\t{page.name}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Menu>\r\n\t\t\t</Box>\r\n\t\t\t<Box display=\"flex\" alignItems={'center'}>\r\n\t\t\t\t<Button\r\n\t\t\t\t\tsize='small'\r\n\t\t\t\t\tvariant='contained'\r\n\t\t\t\t\tonClick={() => savePages()}\r\n\t\t\t\t\t// sx={{fontWeight:600, marginBottom:'2px',px:3}}\r\n\t\t\t\t\tendIcon={\r\n\t\t\t\t\t\tisSaving ? <CircularProgress size={15} color='inherit' /> : <Save fontSize='small'/>\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdisabled={!isChanged || isSaving}>\r\n\t\t\t\t\tSave\r\n\t\t\t\t</Button>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n};\r\n\r\nexport default PageNavigator;\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable unused-imports/no-unused-vars */\nimport { Box } from \"@mui/material\";\nimport Pagination from \"../pagination/pagination\";\nimport PageNavigator from \"../page-navigator/page-navigator\";\nimport \"./footer.scss\";\nimport { IPaginationModel } from \"../../@types/pagination-model\";\nimport React, { useEffect, useState } from \"react\";\n\ninterface IFooter {\n pages: any;\n setPages: any;\n currentPage: string | number;\n setCurrentPage: any;\n total: number;\n paginationModel: IPaginationModel;\n handlePaginationModel: (model: IPaginationModel) => void;\n sharedPages: any;\n resource: string;\n savePageConfiguration: () => void;\n handlePageDelete: (pages: any[]) => void;\n enablePages: boolean\n isPaginationDisplayed?: boolean\n isPageSaving?: boolean\n}\n\nconst Footer = React.memo(({\n pages,\n setPages,\n currentPage,\n setCurrentPage,\n total, // total number of pages in footer pagination\n paginationModel,\n handlePaginationModel,\n sharedPages,\n resource,\n savePageConfiguration,\n handlePageDelete,\n enablePages,\n isPaginationDisplayed = true,\n isPageSaving = false\n}: IFooter) => {\n const [isDrawerOpen, setIsDrawerOpen] = useState(\n window.localStorage.getItem('_is_drawer_open') === 'true'\n );\n\n useEffect(() => {\n const handleStorageChange = () => {\n setIsDrawerOpen(window.localStorage.getItem('_is_drawer_open') === 'true');\n };\n\n window.addEventListener('storage', handleStorageChange);\n\n const interval = setInterval(handleStorageChange, 10); \n\n return () => {\n window.removeEventListener('storage', handleStorageChange);\n clearInterval(interval);\n };\n }, []);\n\n // useEffect(()=>{\n // handlePaginationModel({...paginationModel,pageNo:activePage?.pageNo})\n // //eslint-disable-next-line react-hooks/exhaustive-deps\n // },[activePage?.pageNo])\n\n return (\n <Box className={`${!isDrawerOpen?'footer--drawerContainer':'footer--Container'}`} sx={{justifyContent: enablePages? 'space-between': 'flex-end'}}>\n \n \n {Boolean(enablePages) && <PageNavigator\n pages={pages}\n setPages={setPages}\n currentPage={currentPage}\n setCurrentPage={setCurrentPage}\n resource={resource}\n sharedPages={sharedPages}\n handlePageDelete={handlePageDelete}\n />}\n <Box>\n {isPaginationDisplayed && (\n <Pagination\n paginationModel={paginationModel}\n handlePaginationModel={handlePaginationModel}\n totalPages={total}\n />\n )}\n </Box>\n </Box>\n );\n});\n\nexport { Footer };\nexport default Footer;\n","import Typography from \"../typography/typography\";\nimport logo from \"../../assets/images\";\nimport \"./info-card.scss\";\n\nexport interface InfoCardProps {\n label: string;\n dataPosition?: number;\n dataName?: string;\n value?: string;\n}\n\nconst InfoCard = (props: InfoCardProps) => {\n const { label, dataPosition, dataName, value } = props;\n return (\n <>\n <Typography\n type=\"s5\"\n weight=\"medium\"\n mb={0.5}\n color={\"theme.secondary.800\"}\n data-position={dataPosition}\n data-name={dataName}\n className=\"infoCard\"\n >\n {label}\n <img src={logo.info} />\n </Typography>\n <Typography color={\"theme.secondary.1000\"}>{value ?? \"Info\"}</Typography>\n </>\n );\n};\n\nexport { InfoCard };\nexport default InfoCard;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React, { ReactNode, useEffect, useState } from \"react\";\nimport { Box, IconButton } from \"@mui/material\";\nimport Tab from \"@mui/material/Tab\";\nimport TabContext from \"@mui/lab/TabContext\";\nimport TabList from \"@mui/lab/TabList\";\nimport TabPanel from \"@mui/lab/TabPanel\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\nimport \"./tabs.scss\";\nimport TextField from \"../text-field/text-field\";\nimport { useTranslation } from \"react-i18next\";\nimport Typography from \"../typography/typography\";\n\ninterface TabItem {\n tab_order: number;\n title: string;\n content?: string | ReactNode;\n data?: any;\n remove_tab?: boolean;\n}\nexport interface TabProps {\n tabs: TabItem[];\n activeValue?: number;\n setActiveValue?: React.Dispatch<React.SetStateAction<number | undefined>>;\n onEditTabTitle?: (tabId: number, newTitle: string) => void;\n handleTabChange?: () => void;\n handleRemoveTab?: (tabId: number) => void;\n isFormTabValid?: boolean ;\n isTabViewOnly?: boolean;\n activeTabs?: any[] ;\n setActiveTabs?: React.Dispatch<React.SetStateAction<number | undefined>>;\n containerProps?: any;\n}\n\nexport const TabBar = (props: TabProps) => {\n const { t } = useTranslation();\n const {\n tabs,\n onEditTabTitle,\n activeValue,\n setActiveValue,\n handleTabChange,\n handleRemoveTab,\n // isFormTabValid , \n isTabViewOnly,\n activeTabs, \n containerProps\n } = props; \n \n const [value, setValue] = useState<number>(activeValue || 0);\n const [editableTabId, setEditableTabId] = useState<number | null>(null);\n useEffect(()=>{\n activeValue && setValue(activeValue);\n\t} , [activeValue])\n\n const handleChange = (_event: React.SyntheticEvent, newValue: number) => {\n setValue(newValue);\n setActiveValue && setActiveValue(newValue);\n handleTabChange && handleTabChange();\n };\n\n const handleTabDoubleClick = (tabId: number) => {\n setEditableTabId(tabId);\n };\n\n const handleEditTabTitle = (\n event: React.ChangeEvent<HTMLInputElement>,\n tabId: number,\n ) => {\n onEditTabTitle && onEditTabTitle(tabId, event.target.value);\n };\n\n // useEffect(() => {\n // if (setActiveValue && Boolean(tabs?.length)) setActiveValue(value);\n // // eslint-disable-next-line\n // }, [tabs]);\n\n return (\n <Box mb={2} {...containerProps}>\n <TabContext value={activeValue ?? value }>\n <Box>\n <TabList className=\"account-payble-tabs-wrap\" onChange={handleChange} variant=\"scrollable\" scrollButtons=\"auto\" aria-label=\"scrollable tabs\" sx={{ overflowX: 'auto', maxWidth: '100%' }}>\n {tabs.map((tab: TabItem, index: any) => (\n <Tab\n className=\"account-payble-tab-items\"\n key={tab.tab_order}\n \n label={\n <Box display='flex' alignItems='center'>\n {\n onEditTabTitle && editableTabId === tab.tab_order ? (\n <TextField\n value={tab.title}\n autoFocus\n onBlur={() => setEditableTabId(null)}\n onChange={(e: any) =>\n handleEditTabTitle(e, tab.tab_order)\n }\n />\n ) : handleRemoveTab ? (\n <div className=\"Tabs--Title\">\n <Typography color='theme.secondary.1000' type='s3'>{t(tab.title)}</Typography>\n {!tab.remove_tab && (\n <IconButton size=\"small\" onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleRemoveTab(tab.tab_order);\n }}>\n <CloseIcon style={{ fontSize: \"15px\", cursor: \"pointer\" }}/>\n </IconButton>\n )}\n </div>\n ) : (\n <Typography color='theme.secondary.1000' type='s3'>{t(tab.title)}</Typography>\n )\n }\n </Box>\n }\n wrapped\n onDoubleClick={() => handleTabDoubleClick(tab.tab_order)}\n />\n ))}\n </TabList>\n </Box>\n {tabs.map(\n (tab: TabItem, index: number) =>\n tab.content && (\n <TabPanel value={index.toString()} key={tab.tab_order}>\n {value === index && tab.content}\n </TabPanel>\n ),\n )}\n </TabContext>\n </Box>\n );\n}\n\nexport default TabBar;","import { Radio as MUIRadio, RadioProps } from '@mui/material';\nimport { BlankCircle, FilledCircle } from '../icons';\nimport { memo } from 'react';\n\nconst Radio = memo((props: RadioProps) => {\n\tconst { color, ...rest } = props;\n\n\treturn (\n\t\t<>\n\t\t\t<MUIRadio\n\t\t\t\tdisableRipple\n\t\t\t\tsx={{\n\t\t\t\t\t'&, &.Mui-checked': {\n\t\t\t\t\t\tcolor: color || 'theme.primary.700'\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\ticon={<BlankCircle color='theme.secondary.300' fontSize='large'/>}\n\t\t\t\tcheckedIcon={<FilledCircle fontSize='large'/>}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t</>\n\t);\n});\n\nexport { Radio };\nexport default Radio;\n","import React, { memo } from 'react';\r\nimport { Control, Controller } from 'react-hook-form';\r\nimport Typography from '../../../typography/typography';\r\nimport Radio from '../../../radio/radio';\r\nimport { FormControlLabel, RadioGroup, Box } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\n\r\ninterface IDynamicRadioButton {\r\n\tformControl: Control<any>;\r\n\tfieldArrayName: string;\r\n\tname: string;\r\n\tlabel: string;\r\n\ttitlePosition?: string;\r\n\tposition: number;\r\n\toptions: {\r\n\t\tlabel: string;\r\n\t\tvalue: string;\r\n\t}[];\r\n\tdisabled?: boolean;\r\n\ttypeOfField?: string;\r\n\tdisplay?: 'row' | 'column';\r\n\ttitle?: string;\r\n\tbordered?: boolean;\r\n\tdefaultValue?: string; // Optional defaultValue prop\r\n}\r\n\r\nconst BorderedOption = styled(Box, {\r\n\tshouldForwardProp: (prop) => prop !== 'bordered' && prop !== 'isSelected'\r\n})<{ bordered?: boolean; isSelected: boolean }>(({ theme, bordered }) => ({\r\n\tdisplay: 'flex',\r\n\talignItems: 'center',\r\n\tpadding: 0,\r\n\tmargin: 0,\r\n\t...(bordered && {\r\n\t\tborder: `1px solid ${theme.palette.divider}`,\r\n\t\tborderRadius: theme.shape.borderRadius,\r\n\t\tmargin: theme.spacing(0, 3, 0, 0),\r\n\t\tpadding: theme.spacing(0, 5, 0, 1),\r\n\t\theight: '36px',\r\n\t\talignContent: 'left',\r\n\t\t'&:hover': {\r\n\t\t\tbackgroundColor: theme.palette.action.hover\r\n\t\t}\r\n\t})\r\n}));\r\n\r\nexport const DynamicRadioButton: React.FC<IDynamicRadioButton> = memo(\r\n\t({\r\n\t\tformControl,\r\n\t\tfieldArrayName,\r\n\t\tname,\r\n\t\toptions,\r\n\t\tdisplay,\r\n\t\tlabel,\r\n\t\tposition,\r\n\t\tdisabled,\r\n\t\ttitle,\r\n\t\ttitlePosition,\r\n\t\tbordered = false,\r\n\t\tdefaultValue = ''\r\n\t}) => {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<Typography\r\n\t\t\t\t\ttype='s5'\r\n\t\t\t\t\tweight='medium'\r\n\t\t\t\t\tcolor='theme.secondary.800'\r\n\t\t\t\t\tdata-position={position}\r\n\t\t\t\t\tsx={{ mb: 0.5 }}>\r\n\t\t\t\t\t{label}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<Controller\r\n\t\t\t\t\tcontrol={formControl}\r\n\t\t\t\t\tname={`${fieldArrayName}.${name}`}\r\n\t\t\t\t\t// disabled={disabled}\r\n\t\t\t\t\tdefaultValue={defaultValue} // Set defaultValue to 'item' if none provided\r\n\t\t\t\t\trender={({ field, fieldState: { error } }) => (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<RadioGroup\r\n\t\t\t\t\t\t\t\tvalue={field.value ?? defaultValue} // Ensure 'item' if value is undefined\r\n\t\t\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\r\n\t\t\t\t\t\t\t\trow={display === 'row'}\r\n\t\t\t\t\t\t\t\tsx={{ alignItems: 'center', gap: 1 }}>\r\n\t\t\t\t\t\t\t\t{title && titlePosition === 'start' && (\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\ttype='s4'\r\n\t\t\t\t\t\t\t\t\t\tcolor='theme.secondary.800'\r\n\t\t\t\t\t\t\t\t\t\tweight='medium'>\r\n\t\t\t\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{options.map((option) => (\r\n\t\t\t\t\t\t\t\t\t<BorderedOption\r\n\t\t\t\t\t\t\t\t\t\tkey={option.value}\r\n\t\t\t\t\t\t\t\t\t\tbordered={bordered}\r\n\t\t\t\t\t\t\t\t\t\tisSelected={field.value == option.value}>\r\n\t\t\t\t\t\t\t\t\t\t<FormControlLabel\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ margin: 0, opacity: disabled ? 0.5 : 1 }}\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={option.value}\r\n\t\t\t\t\t\t\t\t\t\t\tcontrol={<Radio checked={field.value == option.value} />}\r\n\t\t\t\t\t\t\t\t\t\t\tlabel={\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype='s5'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tweight='medium'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor='theme.secondary.800'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{option.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</BorderedOption>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t{title && titlePosition === 'end' && (\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\ttype='s4'\r\n\t\t\t\t\t\t\t\t\t\tcolor='theme.secondary.800'\r\n\t\t\t\t\t\t\t\t\t\tweight='medium'>\r\n\t\t\t\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</RadioGroup>\r\n\t\t\t\t\t\t\t{error && (\r\n\t\t\t\t\t\t\t\t<Typography type='s5' color='theme.error.600'>\r\n\t\t\t\t\t\t\t\t\t{error.message}\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t/>\r\n\t\t\t</>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nexport default DynamicRadioButton;\r\n","import _ from \"lodash\";\r\nimport { MaterialTableColumnProps } from \"../../material-table/material-table\";\r\n\r\nexport const PARTIES_FORM_ARRAY_NAME = 'parties';\r\n\r\nexport const PARTIES_FIELDS = {\r\n TYPE: 'account_type',\r\n\r\n FIRST_NAME: 'first_name',\r\n LAST_NAME: 'last_name',\r\n\r\n COMPANY_NAME: 'company_name',\r\n VAT_NUMBER: 'vat_number',\r\n CRN: 'crn',\r\n\r\n // COMPANY: 'company_id',\r\n COMPANY: 'companies',\r\n CURRENCY: 'currencies',\r\n CONTACT_NO: 'contact_no',\r\n EMAIL_IDS: 'email_ids',\r\n\r\n ADDRESS: 'addresses',\r\n CONTACTS: 'contacts',\r\n\r\n RECEIVABLE_ACCOUNT: 'account_id',\r\n TAX_TEMPLATE: 'default_tax_template'\r\n}\r\n\r\nexport const partyType = [\r\n { label: 'Individual', value: 'Individual' },\r\n { label: 'Company', value: 'Company' }\r\n];\r\n\r\nexport const addressPayload = {\r\n parties_id: null,\r\n address_type: null,\r\n contact_name: null,\r\n street_1: null,\r\n street_2: null,\r\n city: null,\r\n zip_code: null,\r\n state: null,\r\n country: null,\r\n email: null,\r\n mobile: null,\r\n phone: null,\r\n street_3: null,\r\n summary: null,\r\n default_shipping_address: 0,\r\n default_billing_address: 0,\r\n country_code: null\r\n};\r\nexport const contactPayload = {\r\n parties_id: null,\r\n name: null,\r\n country_code: null,\r\n contact_no: null,\r\n email: null\r\n};\r\n\r\n/* Address columns & rows */\r\nexport const addressColumns: MaterialTableColumnProps[] = [\r\n {\r\n header: 'common.party.table.addressType_header',\r\n accessorKey: 'address_type',\r\n visible: true,\r\n type: 'string',\r\n editVariant: 'select',\r\n editProperties: {\r\n placeholder: 'Select Address Type',\r\n field_name: 'address_type',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'Address Type is required',\r\n msg_ar: 'Address Type is required'\r\n }\r\n ]\r\n },\r\n editSelectOptions: [\r\n { label: 'Delivery', value: 'Delivery' },\r\n { label: 'Shipping', value: 'Shipping' },\r\n { label: 'Office', value: 'Office' }\r\n ]\r\n },\r\n {\r\n header: 'common.party.table.addressee_header',\r\n accessorKey: 'contact_name',\r\n visible: true,\r\n type: 'custom_link',\r\n editProperties: {\r\n placeholder: 'Enter Addressee',\r\n field_name: 'contact_name',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: false,\r\n msg_en: 'Contact name is required',\r\n msg_ar: 'Contact name is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.defaultShippingAddress_header',\r\n accessorKey: 'default_shipping_address',\r\n visible: true,\r\n type: 'custom_link',\r\n editVariant: 'checkbox',\r\n editProperties: {\r\n field_name: 'default_shipping_address'\r\n }\r\n },\r\n {\r\n header: 'common.party.table.defaultBillingAddress_header',\r\n accessorKey: 'default_billing_address',\r\n visible: true,\r\n type: 'custom_link',\r\n editVariant: 'checkbox',\r\n editProperties: {\r\n field_name: 'default_billing_address'\r\n }\r\n },\r\n {\r\n header: 'common.party.table.countryCode_header',\r\n accessorKey: 'country_code',\r\n visible: true,\r\n type: 'custom_link',\r\n enableEditing: false\r\n },\r\n {\r\n header: 'common.party.table.contactNumber_header',\r\n accessorKey: 'phone',\r\n visible: true,\r\n type: 'custom_link',\r\n editVariant: 'phone',\r\n editProperties: {\r\n field_name: 'phone'\r\n }\r\n },\r\n {\r\n header: 'common.party.table.addrressOne_header',\r\n accessorKey: 'street_1',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter Address',\r\n field_name: 'street_1',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: false,\r\n msg_en: 'Address is required',\r\n msg_ar: 'Address is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.addressTwo_header',\r\n accessorKey: 'street_2',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter Address',\r\n field_name: 'street_2',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: false,\r\n msg_en: 'Address is required',\r\n msg_ar: 'Address is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.addressThree_header',\r\n accessorKey: 'street_3',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter Address',\r\n field_name: 'street_3',\r\n }\r\n },\r\n {\r\n header: 'common.party.table.zipCode_header',\r\n accessorKey: 'zip_code',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n field_name: 'zip_code',\r\n placeholder: 'Enter Zip Code',\r\n }\r\n },\r\n {\r\n header: 'common.party.table.country_header',\r\n accessorKey: 'country_name',\r\n visible: true,\r\n type: 'string',\r\n editVariant: 'select',\r\n editProperties: {\r\n field_name: 'country',\r\n placeholder: 'Select country',\r\n valueKey: 'country_id',\r\n apiType: 'countries',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'Country is required',\r\n msg_ar: 'Country is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.state_header',\r\n accessorKey: 'state_name',\r\n visible: true,\r\n type: 'string',\r\n editVariant: 'select',\r\n editProperties: {\r\n field_name: 'state',\r\n placeholder: 'Select state',\r\n valueKey: 'state_id',\r\n apiType: 'states',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'State is required',\r\n msg_ar: 'State is required'\r\n }\r\n ],\r\n customeFilter: (row: any, values) => {\r\n const filter = values?.country_name ? { '&country_id.eq': values?.country_name } : null\r\n return filter\r\n }\r\n }\r\n },\r\n {\r\n header: 'common.party.table.city_header',\r\n accessorKey: 'city',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter City',\r\n field_name: 'city',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'City is required',\r\n msg_ar: 'City is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.summary_header',\r\n accessorKey: 'summary',\r\n visible: true,\r\n type: 'string',\r\n enableEditing: false\r\n // editProperties: {\r\n // \tplaceholder: 'Populated after filling address',\r\n // \tfield_name: 'summary'\r\n // \tdisabled\r\n // }\r\n }\r\n];\r\n\r\n/* contact columns & rows */\r\nexport const contactColumns: MaterialTableColumnProps[] = [\r\n {\r\n header: 'common.party.table.name_header',\r\n accessorKey: 'name',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter Name',\r\n field_name: 'name',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'Name is required',\r\n msg_ar: 'Name is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.email_header',\r\n accessorKey: 'email',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter Email',\r\n field_name: 'email',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'Email is required',\r\n msg_ar: 'Email is required'\r\n },\r\n {\r\n type: 'email',\r\n value: true,\r\n msg_en: 'Invalid Email',\r\n msg_ar: 'Invalid Email'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.countryCode_header',\r\n accessorKey: 'country_code',\r\n visible: true,\r\n type: 'custom_link',\r\n enableEditing: false\r\n },\r\n {\r\n header: 'common.party.table.contactNumber_header',\r\n accessorKey: 'contact_no',\r\n visible: true,\r\n type: 'custom_link',\r\n editVariant: 'phone',\r\n editProperties: {\r\n field_name: 'contact_no'\r\n }\r\n }\r\n];\r\n\r\nexport const addressOmitKeys = [\r\n 'id',\r\n 'state_id',\r\n 'country_id',\r\n 'country_name',\r\n 'state_name',\r\n 'parties_id',\r\n 'state_data',\r\n 'country_data',\r\n 'summary'\r\n];\r\nexport const contactOmitKeys = ['id', 'summary'];\r\n\r\n\r\nexport const processPartiesPayload = (payload: any) => {\r\n const { addresses = [], contacts = [], ...rest } = payload || {}\r\n const addressPayload = addresses.map(address => (_.omit(address, ...addressOmitKeys)))\r\n const contactPayload = contacts.map(contact => (_.omit(contact, ...contactOmitKeys)))\r\n return {\r\n ...rest,\r\n addresses: addressPayload,\r\n contacts: contactPayload\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport { styled } from \"@mui/material\";\r\nimport Typography from \"../typography/typography\";\r\nimport ReactPhoneInput, { CountryData } from \"react-phone-input-2\";\r\nimport \"react-phone-input-2/lib/material.css\";\r\nimport { images } from \"../../assets/images\";\r\nimport { useLanguage } from \"../../hooks/useLangauge\";\r\nimport { memo, useEffect } from \"react\";\r\n\r\nconst StyledInput = styled(ReactPhoneInput)<{ isRtl: boolean }>(({ theme: { palette }, isRtl }) => ({\r\n \"&:hover\": {\r\n border: \"none\",\r\n },\r\n \"&.react-tel-input\": {\r\n \".form-control\": {\r\n borderRadius: \"0.25rem\",\r\n padding: \"8px 8px 8px 55px\", // Ensure space for flag on the left\r\n border: `1px solid ${palette.theme?.secondary[300]}`,\r\n fontSize: \"0.875rem\",\r\n width: \"100%\",\r\n maxHeight: \"36.13px\",\r\n direction: \"ltr\", // Force LTR direction for input to start from left\r\n textAlign: \"left\", // Force left alignment for input value\r\n\r\n \":hover\": {\r\n border: `1px solid ${palette.theme?.secondary[400]}`,\r\n },\r\n\r\n \":focus\": {\r\n border: `1px solid ${palette.theme?.primary[600]}`,\r\n boxShadow: \"none\",\r\n },\r\n \":disabled\": {\r\n background: palette.theme?.secondary[200],\r\n color: palette.theme?.secondary[800],\r\n },\r\n\r\n \"&.invalid-number\": {\r\n border: `1px solid ${palette.theme?.error[600]}`,\r\n \":focus\": {\r\n boxShadow: \"none\",\r\n },\r\n },\r\n },\r\n\r\n \".flag-dropdown\": {\r\n left: \"0\",\r\n right: \"auto\",\r\n borderRadius: \"0.25rem 0 0 0.25rem\",\r\n\r\n \".selected-flag\": {\r\n borderRadius: \"0.25rem 0 0 0.25rem\",\r\n\r\n \"&:hover\": {\r\n backgroundColor: palette.theme?.secondary[100],\r\n },\r\n },\r\n },\r\n\r\n \".country-list\": {\r\n left: isRtl ? \"auto\" : \"0\",\r\n right: isRtl ? \"0\" : \"auto\",\r\n\r\n \".search\": {\r\n padding: \"0.5rem 0.5rem 0.5rem 0.75rem\",\r\n borderBottom: \"1px solid #F3F2F2\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n direction: isRtl ? \"rtl\" : \"ltr\",\r\n\r\n \".search-emoji\": {\r\n position: \"absolute\",\r\n left: isRtl ? \"auto\" : \"1.25rem\",\r\n right: isRtl ? \"1.25rem\" : \"auto\",\r\n\r\n \":first-child\": {\r\n display: \"block\",\r\n color: \"transparent\",\r\n background: `url(${images.search})`,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"center\",\r\n },\r\n },\r\n\r\n \".search-box\": {\r\n width: \"100%\",\r\n marginLeft: \"0rem\",\r\n border: `1px solid ${palette.theme?.secondary[200]}`,\r\n backgroundColor: palette.theme?.secondary[100],\r\n borderRadius: \"0.5rem\",\r\n padding: \"0.4rem\",\r\n paddingLeft: isRtl ? \"0.4rem\" : \"2rem\",\r\n paddingRight: isRtl ? \"2rem\" : \"0.4rem\",\r\n fontSize: \"0.8125rem\",\r\n direction: isRtl ? \"rtl\" : \"ltr\",\r\n textAlign: isRtl ? \"right\" : \"left\",\r\n\r\n \":hover\": {\r\n border: `1px solid ${palette.theme?.secondary[300]}`,\r\n },\r\n\r\n \":focus\": {\r\n border: `1px solid ${palette.theme?.primary[600]}`,\r\n },\r\n },\r\n },\r\n\r\n \".country\": {\r\n fontSize: \"0.8125rem\",\r\n direction: isRtl ? \"rtl\" : \"ltr\",\r\n textAlign: isRtl ? \"right\" : \"left\",\r\n\r\n \".dial-code\": {\r\n fontSize: \"0.75rem\",\r\n position: \"absolute\",\r\n right: isRtl ? \"auto\" : \"0.5rem\",\r\n left: isRtl ? \"0.5rem\" : \"auto\",\r\n },\r\n },\r\n },\r\n },\r\n}));\r\n\r\ninterface IPhoneInput {\r\n error?: boolean;\r\n name?: string;\r\n dataPosition?: number;\r\n dataName?: string;\r\n label: string;\r\n required?: boolean;\r\n placeholder?: string;\r\n default_value?: string;\r\n onChange?: (e: any) => void;\r\n disabled?: boolean;\r\n setCountryCodeField?: (country: CountryData) => void;\r\n helperText?: string;\r\n isInlineEditing?: boolean\r\n}\r\n\r\nfunction fixPhoneDropdown() {\r\n let dropdown, input;\r\n\r\n const positionDropdown = () => {\r\n if (!dropdown || !input) return;\r\n const rect = input.getBoundingClientRect();\r\n\r\n dropdown.style.position = \"fixed\";\r\n dropdown.style.top = rect.bottom + \"px\";\r\n dropdown.style.left = rect.left + \"px\";\r\n dropdown.style.zIndex = \"2000\";\r\n };\r\n\r\n document.addEventListener(\"click\", () => {\r\n dropdown = document.querySelector(\".react-tel-input .country-list\");\r\n input = document.querySelector(\".react-tel-input input\");\r\n\r\n if (dropdown && input && !document.body.contains(dropdown)) {\r\n document.body.appendChild(dropdown);\r\n }\r\n\r\n positionDropdown();\r\n });\r\n\r\n // reposition on scroll (any container) and resize\r\n window.addEventListener(\"scroll\", positionDropdown, true); // true = capture all scrolls\r\n window.addEventListener(\"resize\", positionDropdown);\r\n}\r\n\r\n\r\nconst HelperTextWrapper = styled('div')(() => ({\r\n marginTop: '0.4rem',\r\n}));\r\n\r\nconst PhoneInput = memo(({\r\n name,\r\n error = false,\r\n dataName,\r\n dataPosition,\r\n label,\r\n required = false,\r\n placeholder,\r\n default_value,\r\n onChange,\r\n disabled,\r\n setCountryCodeField,\r\n helperText,\r\n isInlineEditing = false,\r\n ...rest\r\n}: IPhoneInput) => {\r\n const { isRtl } = useLanguage();\r\n\r\n useEffect(() => {\r\n if (isInlineEditing) {\r\n fixPhoneDropdown(isInlineEditing)\r\n }\r\n }, [isInlineEditing])\r\n\r\n useEffect(() => {\r\n if (typeof setCountryCodeField === \"function\") {\r\n setCountryCodeField?.({ dialCode: \"971\" } as CountryData);\r\n }\r\n }, [])\r\n\r\n return (\r\n <>\r\n <Typography\r\n type=\"s5\"\r\n weight=\"medium\"\r\n mb={0.5}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n data-position={dataPosition}\r\n data-name={dataName}\r\n >\r\n {label} {required && <span className=\"requiredStar\">*</span>}\r\n </Typography>\r\n <StyledInput\r\n dropdownContainer={document.body}\r\n isRtl={isRtl}\r\n specialLabel={\"\"}\r\n enableSearch\r\n searchPlaceholder=\"Search Country\"\r\n isValid={!error}\r\n country={\"ae\"}\r\n searchNotFound=\"Not Found!\"\r\n inputProps={{\r\n name: name,\r\n required: required,\r\n }}\r\n placeholder={placeholder}\r\n value={default_value || rest?.value}\r\n onChange={(value, country) => {\r\n setCountryCodeField?.(country as CountryData);\r\n onChange?.(value);\r\n }}\r\n disabled={disabled}\r\n />\r\n {helperText && (\r\n <HelperTextWrapper>\r\n <Typography\r\n type=\"s5\"\r\n color={error ? \"theme.error.600\" : \"theme.secondary.600\"}\r\n >\r\n {helperText}\r\n </Typography>\r\n </HelperTextWrapper>\r\n )}\r\n </>\r\n );\r\n});\r\n\r\nexport { PhoneInput };\r\nexport default PhoneInput;","import { Controller } from \"react-hook-form\";\nimport PropTypes from \"prop-types\";\n\nimport \"./element.scss\";\nimport PhoneInput from \"../../../phone-input/phone-input\";\nimport { memo } from \"react\";\n\nconst DynamicPhone = memo((props: any) => {\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field,fieldState }) => (\n <PhoneInput\n {...field}\n dataPosition={props.position}\n dataName={`${props.fieldArrayName}.${props.name}`}\n label={props.label}\n required={props.formType === \"builder\" ? false : props.required}\n placeholder={props.placeholder}\n default_value={props.default_value}\n onChange={(val) => field.onChange(val)}\n error={Boolean(fieldState.error?.message)}\n disabled={props.disabled}\n helperText={fieldState.error?.message || \"\"}\n setCountryCodeField={props.setCountryCodeField}\n />\n )}\n />\n );\n});\n\nDynamicPhone.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n position: PropTypes.number,\n formType: PropTypes.string,\n placeholder: PropTypes.string,\n default_value: PropTypes.string,\n type: PropTypes.string,\n typeOfField: PropTypes.string,\n disabled: PropTypes.bool,\n setCountryCodeField: PropTypes.func,\n};\n\nexport { DynamicPhone };\nexport default DynamicPhone;\n","import { Box, styled } from \"@mui/material\";\nimport logo from \"../../assets/images\";\nimport Button from \"../button/button\";\nimport Typography from \"../typography/typography\";\n// import { useEffect, useState } from \"react\";\nimport { Document } from \"../icons\";\nimport { enqueueSnackbar } from \"notistack\";\nimport { memo } from \"react\";\n// import Avatar from \"../avatar/avatar\";\n\nexport interface UploadImageProps {\n type?: string;\n label: string;\n disabled?: boolean;\n error?: boolean;\n dataPosition?: number;\n dataName?: string;\n required?: boolean;\n max_size?: number;\n name: string;\n value: string;\n onChange: (e: any) => any;\n multiple: boolean\n}\nconst UploadMedia = memo((props: UploadImageProps) => {\n const {\n type,\n label,\n disabled,\n error,\n dataName,\n dataPosition,\n required,\n max_size = 20,\n onChange,\n name,\n value,\n multiple,\n ...rest\n } = props;\n\n const VisuallyHiddenInput = styled(\"input\")({\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: 1,\n overflow: \"hidden\",\n position: \"absolute\",\n bottom: 0,\n left: 0,\n whiteSpace: \"nowrap\",\n width: 1,\n });\n\n // const [selectedFile, setSelectedFile] = useState<string | null>(null);\n const StyledButton = styled(Button)(({ theme: { palette } }) => ({\n marginBottom: 8,\n \"&.MuiButton-outlined\": {\n color: palette.theme?.primary[1000],\n },\n \"&.Mui-disabled\": {\n background: palette.theme?.secondary[200],\n color: palette.theme?.secondary[800],\n borderWidth: \"0.0625rem\",\n borderStyle: \"solid\",\n borderColor: palette.theme?.secondary[400],\n },\n }));\n\n const allowedImageTypes = [\n \"image/jpeg\", // JPG, JPEG\n \"image/png\", // PNG\n \"image/gif\", // GIF\n \"image/bmp\", // BMP\n \"image/webp\", // WebP\n \"image/svg+xml\", // SVG\n \"image/tiff\", // TIFF\n \"image/x-icon\", // ICO (icon files)\n \"image/heic\", // HEIC (High Efficiency Image Format)\n \"image/heif\"\n ]\n const allowedFileTypes = [\n \"application/pdf\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n 'application/vnd.ms-powerpoint',\n 'application/vnd.oasis.opendocument.text',\n 'text/csv',\n 'text/plain',\n 'application/rtf',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.oasis.opendocument.spreadsheet',\n 'application/vnd.oasis.opendocument.presentation',\n \"image/jpeg\", // JPG, JPEG\n \"image/png\", // PNG\n \"image/gif\", // GIF\n \"image/bmp\", // BMP\n \"image/webp\", // WebP\n \"image/svg+xml\", // SVG\n \"image/tiff\", // TIFF\n \"image/x-icon\", // ICO (icon files)\n \"image/heic\", // HEIC (High Efficiency Image Format)\n \"image/heif\"\n ];\n\n const isValidFileType = (file: any) => {\n if (type === \"image\") {\n return allowedImageTypes.includes(file.type);\n } else if (type === 'file') {\n return allowedFileTypes.includes(file.type);\n }\n };\n\n\n const handleUpload = (e: any) => {\n const files = [...e.target.files];\n const filterredFiles = files.map(file => {\n if (file && file.size <= max_size * 1024 * 1024) {\n if (isValidFileType(file)) {\n return file\n } else {\n enqueueSnackbar(`Invalid file type for ${file.name}. Please upload a valid document.`, { variant: 'error' })\n return null\n }\n }\n })?.filter(Boolean)\n onChange(multiple ? (value?.length ? [...value, ...filterredFiles] : filterredFiles) : filterredFiles[0]);\n };\n\n const getFileName = (file) => {\n if (!file) return \"\"\n if (file instanceof File) {\n return file.name\n } else if(typeof file === 'string') { \n const parts = file?.split('/');\n return parts?.[parts?.length - 1];\n } else if(Array.isArray(file) && file?.length > 0) {\n return file.map(f => {\n const parts = f?.split('/');\n return parts?.[parts?.length - 1];\n }).join(', ')\n }\n }\n // const getImagePreview = (file) => {\n // if (!file) return \"\"\n // if (file instanceof File) {\n // let previewUrl:any = ''\n // const reader = new FileReader();\n // reader.onload = () => {\n // previewUrl = reader.result;\n // };\n // reader.readAsDataURL(file);\n\n // return previewUrl\n // } else {\n // return file.includes(S3_BUCKET_URL) ? file : S3_BUCKET_URL + file\n // }\n // }\n\n const getSelectedFiles = (files: any) => {\n\n if (files) {\n if (Array.isArray(files)) {\n return files.map(file => (\n <Box display=\"flex\" gap={1} mb={1} alignItems='center'>\n {type === 'file' && <Document fontSize=\"small\" />}\n {/* {type === 'image' && <Avatar src={getImagePreview(file)} />} */}\n <Typography\n type=\"s5\"\n weight=\"medium\"\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\n data-position={dataPosition}\n data-name={dataName}\n noWrap\n >\n {getFileName(file)}\n </Typography>\n </Box>\n ))\n } else {\n return (\n <Box display=\"flex\" gap={1} alignItems='center'>\n {type === 'file' && <Document fontSize=\"small\" />}\n {/* {type === 'image' && <Avatar src={getImagePreview(files)} />} */}\n <Typography\n type=\"s5\"\n weight={\"medium\"}\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\n data-position={dataPosition}\n data-name={dataName}\n noWrap\n >\n {getFileName(files)}\n </Typography>\n </Box>\n )\n }\n }\n }\n\n // useEffect(() => {\n // if(!multiple) {\n // const parts = value?.split('/');\n // // const documentPath = parts?.slice(3, parts.length - 1).join('/');\n // const filename = parts?.[parts?.length - 1];\n\n \n // if (value) setSelectedFile(filename)\n // }\n // }, [multiple, value])\n\n return (\n <>\n <Typography\n type=\"s5\"\n weight={\"medium\"}\n mb={0.5}\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\n data-position={dataPosition}\n data-name={dataName}\n >\n {label} {required && \" *\"}\n </Typography>\n <div style={{ display: \"flex\" }}>\n <StyledButton\n component=\"label\"\n startIcon={\n <img\n src={type === \"image\" ? logo.uploadImage : logo.uploadDocument}\n />\n }\n variant=\"outlined\"\n disabled={disabled}\n >\n <Typography type='s5' weight=\"medium\" color=\"theme.secondary.1000\">Upload</Typography>\n <VisuallyHiddenInput\n type=\"file\"\n accept={type === \"file\" ? allowedFileTypes.join(\",\") : (type === 'image' ? allowedImageTypes.join(\",\") : undefined)}\n // required={required}\n onChange={handleUpload}\n name={name}\n multiple={multiple}\n {...rest}\n />\n </StyledButton>\n </div >\n {getSelectedFiles(value)}\n\n </>\n );\n})\n\nexport { UploadMedia };\nexport default UploadMedia;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nimport { Box } from '@mui/material';\r\n\r\nimport Typography from '../../typography/typography';\r\nimport DatePicker from '../../date-picker/date-picker';\r\nimport DateTimePicker from '../../date-time-picker/date-time-picker';\r\nimport TextField from '../../text-field/text-field';\r\nimport UploadMedia from '../../upload-media/upload-media';\r\n\r\nimport * as yup from 'yup';\r\nimport _ from 'lodash';\r\nimport dayjs from 'dayjs';\r\nimport PhoneInput from '../../phone-input/phone-input';\r\nimport Checkbox from '../../checkbox/checkbox';\r\nimport SearchableSelect from '../../searchable-select';\r\n\r\ninterface IInlineEditFields {\r\n\tcell: any;\r\n\tcolumn: any;\r\n\trow: any;\r\n\ttable: any;\r\n\tcol: any;\r\n\tcallback: (value: any, column: any, rowId: any) => any;\r\n\terrors: any;\r\n\tvalidationSchema: any;\r\n\tsetValidationErrors: any;\r\n\tonChangeRowField?: (e: any, type: string, row: any) => any;\r\n\tgetSelectedData: any\r\n}\r\nconst InlineEditFields: React.FC<IInlineEditFields> = ({\r\n\t// cell,\r\n\tcolumn,\r\n\trow,\r\n\t// table,\r\n\tcol,\r\n\t// callback,\r\n\terrors,\r\n\tvalidationSchema,\r\n\tsetValidationErrors,\r\n\tonChangeRowField,\r\n\tgetSelectedData\r\n}) => {\r\n\r\n\tconst [inputValue, setInputValue] = useState<any>();\r\n\tconst [isInitialSet, setIsInitialSet] = useState<any>(false);\r\n\tconst customFilter = useRef(null)\r\n\t// ** Getting only editing enabled fields.\r\n\tconst editCols = row\r\n\t\t.getAllCells()\r\n\t\t.map((col: any) => col.column.columnDef)\r\n\t\t.filter(\r\n\t\t\t(col: any) =>\r\n\t\t\t\tcol?.enableEditing === undefined || col?.enableEditing === true\r\n\t\t);\r\n\r\n\tconst editVariant = col.editVariant;\r\n\tconst fieldProperties = column.columnDef?.editProperties || {};\r\n\r\n\t// ** Default and Dynamic disbaling a field with row data\r\n\tlet fieldDisbled = false;\r\n\tif (fieldProperties?.disable) {\r\n\t\tif (typeof fieldProperties.disable === 'function') {\r\n\t\t\tfieldDisbled = Boolean(fieldProperties?.disable(row, row._valuesCache));\r\n\t\t} else {\r\n\t\t\tfieldDisbled = Boolean(fieldProperties.disable);\r\n\t\t}\r\n\t}\r\n\r\n\tconst handleCustomFilter = useCallback(async (row, values) => {\r\n\r\n\t\ttry {\r\n\t\t\tif (typeof fieldProperties.customeFilter === 'function') {\r\n\t\t\t\tconst filter = await fieldProperties.customeFilter(row, values);\r\n\t\t\t\tcustomFilter.current = filter;\r\n\t\t\t\treturn filter;\r\n\t\t\t} else {\r\n\t\t\t\tcustomFilter.current = fieldProperties?.customeFilter;\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [fieldProperties, row, row._valuesCache]);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\thandleCustomFilter(row, row._valuesCache)\r\n\t}, [handleCustomFilter, row, row._valuesCache]);\r\n\t// ** Setting a default value for edit mode.\r\n\tconst valueKey = fieldProperties?.valueKey;\r\n\tlet defaultValue: any = '';\r\n\r\n\tif (editVariant === 'select' && fieldProperties?.is_multiple) {\r\n\t\tdefaultValue = valueKey ? _.get(row.original, valueKey, []) : [];\r\n\t} else {\r\n\t\tdefaultValue = valueKey\r\n\t\t\t? _.get(row.original, valueKey, row.original[column.id])\r\n\t\t\t: row.original[column.id];\r\n\t}\r\n\r\n\t// ** Validate a field with Material Table Validation Schema.\r\n\tconst validate = async (value: any) => {\r\n\t\ttry {\r\n\t\t\t// const v = await validationSchema.validateAt( // * * This line has commented for rerendering purpose\r\n\t\t\tawait validationSchema.validateAt(\r\n\t\t\t\tcolumn.id,\r\n\t\t\t\t{\r\n\t\t\t\t\t[column.id]: value\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tabortEarly: false\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t\t// if (v) { // * * The if condition has commented for rerendering purpose\r\n\t\t\tconst fe: any = {}; // field error\r\n\t\t\tfor (const e in errors) {\r\n\t\t\t\tif (e != column.id) {\r\n\t\t\t\t\tfe[e] = errors[e];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tsetValidationErrors(fe);\r\n\t\t\t// }\r\n\t\t} catch (err) {\r\n\t\t\tif (err instanceof yup.ValidationError) {\r\n\t\t\t\tconst e: Record<string, string> = {};\r\n\t\t\t\terr.inner.forEach((error) => {\r\n\t\t\t\t\tif (error.path) {\r\n\t\t\t\t\t\te[error.path] = error.message;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tconst em = { ...errors, ...e };\r\n\t\t\t\tsetValidationErrors(em);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\r\n\r\n\t// ** Detect onChnage to perform the action on an input change.\r\n\tconst onChange = async (e: any, type: string, selectedData: any) => {\r\n\t\tconst data = selectedData\r\n\t\tlet value;\r\n\t\tswitch (type) {\r\n\t\t\tcase 'date':\r\n\t\t\tcase 'file':\r\n\t\t\tcase 'image':\r\n\t\t\tcase 'phone':\r\n\t\t\t\tvalue = e;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: e });\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'text':\r\n\t\t\tcase 'number':\r\n\t\t\t\tvalue = e.target.value;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: value });\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'checkbox':\r\n\t\t\t\tvalue = e.target.checked;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: value });\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tvalue = e.target.value;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tsetInputValue({ ...inputValue, [column.id]: value });\r\n\r\n\t\tif (onChangeRowField) {\r\n\t\t\tconst v = await onChangeRowField(e, type, row, col, data);\r\n\t\t\tif (v) {\r\n\t\t\t\trow._valuesCache = { ...row._valuesCache, ...v };\r\n\t\t\t\tsetInputValue({ ...inputValue, ...v });\r\n\t\t\t}\r\n\t\t}\r\n\t\tsetInputValue({ ...inputValue, [column.id]: value });\r\n\t\trow._valuesCache = { ...row._valuesCache, [column.id]: value };\r\n\r\n\t\tawait validate(value);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetInputValue({ ...inputValue, ...row._valuesCache });\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [row._valuesCache]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!isInitialSet) {\r\n\t\t\tconst editFields = Object.keys(row._valuesCache || {});\r\n\t\t\tconst dValues: any = {};\r\n\r\n\t\t\trow.getAllCells().forEach((cell) => {\r\n\t\t\t\tif (\r\n\t\t\t\t\tcell.column.columnDef?.enableEditing === undefined ||\r\n\t\t\t\t\tcell.column.columnDef?.enableEditing === true\r\n\t\t\t\t) {\r\n\t\t\t\t\tconst { is_multiple, valueKey } =\r\n\t\t\t\t\t\tcell.column.columnDef?.editProperties || {};\r\n\t\t\t\t\tif (editFields.includes(cell.column.id)) {\r\n\t\t\t\t\t\tconst vl = _.get(row.original, valueKey);\r\n\t\t\t\t\t\tif (editVariant === 'select' && is_multiple) {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = vl\r\n\t\t\t\t\t\t\t\t? Array.isArray(vl)\r\n\t\t\t\t\t\t\t\t\t? vl\r\n\t\t\t\t\t\t\t\t\t: [vl]\r\n\t\t\t\t\t\t\t\t: [];\r\n\t\t\t\t\t\t} else if (editVariant === 'date' || editVariant === 'date_time') {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = vl\r\n\t\t\t\t\t\t\t\t? dayjs(vl).isValid()\r\n\t\t\t\t\t\t\t\t\t? dayjs(vl)\r\n\t\t\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t\t\t\t: dayjs(row.original[cell.column.id]).isValid()\r\n\t\t\t\t\t\t\t\t\t? dayjs(row.original[cell.column.id])\r\n\t\t\t\t\t\t\t\t\t: undefined;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = _.get(\r\n\t\t\t\t\t\t\t\trow.original,\r\n\t\t\t\t\t\t\t\tvalueKey,\r\n\t\t\t\t\t\t\t\trow.original[cell.column.id]\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t// setFieldsValues(dValues);\r\n\t\t\trow._valuesCache = dValues;\r\n\t\t\tsetInputValue(dValues);\r\n\t\t\tsetIsInitialSet(true);\r\n\t\t}\r\n\t}, [row, editVariant, isInitialSet]);\r\n\r\n\tconst handleMinDate = (state) => typeof state == 'function' ? state(row) : state\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{(!editVariant || editVariant === 'number') && (\r\n\t\t\t\t<TextField\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t// onBlur={(e) => onBlur(e)}\r\n\t\t\t\t\t// onKeyDown={onKeyDown}\r\n\t\t\t\t\tonChange={(e) => onChange(e, editVariant)}\r\n\t\t\t\t\tvalue={inputValue?.[column.id]}\r\n\t\t\t\t\tautoFocus={editCols?.[0]?.accessorKey === column.id}\r\n\t\t\t\t\ttype={editVariant || 'text'}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tplaceholder={fieldProperties?.placeholder || ''}\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'select' && (\r\n\t\t\t\t<Box display='flex' flexDirection='column' width='100%'>\r\n\t\t\t\t\t<SearchableSelect\r\n\t\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t\tplaceholder={fieldProperties?.placeholder || ''}\r\n\t\t\t\t\t\tsearchPlaceholder={`Search ${col.header}`}\r\n\t\t\t\t\t\tonChange={(e, row) => onChange(e, 'select', row)}\r\n\t\t\t\t\t\tapiType={fieldProperties?.apiType}\r\n\t\t\t\t\t\tautoFocus={editCols?.[0]?.accessorKey === column.id}\r\n\t\t\t\t\t\toptions={col?.editSelectOptions}\r\n\t\t\t\t\t\tcustomeFilter={customFilter.current}\r\n\t\t\t\t\t\tfilterKey={fieldProperties?.filterKey}\r\n\t\t\t\t\t\tlabelKey={fieldProperties?.labelKey}\r\n\t\t\t\t\t\tvalueKey={fieldProperties?.bindingKey}\r\n\t\t\t\t\t\tattributes={fieldProperties.attributes}\r\n\t\t\t\t\t\tisInternal={fieldProperties?.isInternal || !fieldProperties?.apiType}\r\n\t\t\t\t\t\tmultiple={fieldProperties?.is_multiple}\r\n\t\t\t\t\t\tvalue={\r\n\t\t\t\t\t\t\tfieldProperties?.is_multiple\r\n\t\t\t\t\t\t\t\t? Array.isArray(inputValue?.[column.id])\r\n\t\t\t\t\t\t\t\t\t? inputValue?.[column.id]\r\n\t\t\t\t\t\t\t\t\t: []\r\n\t\t\t\t\t\t\t\t: inputValue?.[column.id]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgetSelectedData={(row) => getSelectedData(fieldProperties?.field_name, row)}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{errors?.[column.id] && (\r\n\t\t\t\t\t\t<Typography color='theme.error.600' type='s5'>\r\n\t\t\t\t\t\t\t{errors?.[column.id]}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'date' && (\r\n\t\t\t\t<DatePicker\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'date')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={\r\n\t\t\t\t\t\tdayjs(row._valuesCache[column.id]).isValid()\r\n\t\t\t\t\t\t\t? dayjs(row._valuesCache[column.id])\r\n\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t\tminDate={() => handleMinDate(fieldProperties?.min_date)}\r\n\t\t\t\t\tmaxDate={() => handleMinDate(fieldProperties?.min_date)}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'date_time' && (\r\n\t\t\t\t<DateTimePicker\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'date')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={\r\n\t\t\t\t\t\tdayjs(row._valuesCache[column.id]).isValid()\r\n\t\t\t\t\t\t\t? dayjs(row._valuesCache[column.id])\r\n\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{(editVariant === 'file' || editVariant === 'image') && (\r\n\t\t\t\t<Box display='flex' flexDirection='column'>\r\n\t\t\t\t\t<UploadMedia\r\n\t\t\t\t\t\tname={fieldProperties?.field_name || 'table_file'}\r\n\t\t\t\t\t\tdataPosition={0}\r\n\t\t\t\t\t\tdataName='table_file'\r\n\t\t\t\t\t\tlabel=''\r\n\t\t\t\t\t\ttype={editVariant}\r\n\t\t\t\t\t\tmax_size={10}\r\n\t\t\t\t\t\tonChange={(v) => onChange(v, 'file')}\r\n\t\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\t\tmultiple={Boolean(column?.is_multiple)}\r\n\t\t\t\t\t\tvalue={row._valuesCache[column.id]}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{errors?.[column.id] && (\r\n\t\t\t\t\t\t<Typography color='theme.error.600' type='s5'>\r\n\t\t\t\t\t\t\t{errors?.[column.id]}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'phone' && (\r\n\t\t\t\t<PhoneInput\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefault_value={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'phone')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={row._valuesCache?.[column.id]}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t\tisInlineEditing={true}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'checkbox' && (\r\n\t\t\t\t<Checkbox\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultChecked={Boolean(defaultValue)}\r\n\t\t\t\t\t// checked={Boolean(defaultValue)}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'checkbox')}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={row._valuesCache?.[column.id]}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default InlineEditFields;\r\n","/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport React, { cloneElement, useCallback, useEffect, useState } from 'react';\r\nimport {\r\n\tMRT_ColumnDef,\r\n\tMRT_ColumnSizingInfoState,\r\n\tMRT_ColumnSizingState,\r\n\tMRT_Header,\r\n\tMRT_Row,\r\n\tMRT_RowData,\r\n\tMRT_RowSelectionState,\r\n\tMRT_SortingState,\r\n\tMRT_TableInstance,\r\n\tMRT_TableState,\r\n\tMaterialReactTable,\r\n\tMaterialReactTableProps,\r\n\tuseMaterialReactTable,\r\n\t// Cell\r\n} from 'material-react-table';\r\nimport { IPaginationModel } from '../../@types/pagination-model';\r\nimport {\r\n\tBox,\r\n\tstyled,\r\n\tMenuItem,\r\n\tIconButton,\r\n\tListItemIcon,\r\n\tListItemText,\r\n\tSvgIconProps,\r\n\tDivider\r\n} from '@mui/material';\r\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\r\nimport Menu from '../menu/menu';\r\nimport Typography from '../typography/typography';\r\nimport SearchBar from '../search-bar/search-bar';\r\nimport images from '../../assets/images';\r\n// import DeleteIcon from \"@mui/icons-material/Delete\";\r\n// import UpdateIcon from \"@mui/icons-material/Update\";\r\n// import PlayIcon from \"@mui/icons-material/PlayArrow\";\r\n\r\nimport './material-table.scss';\r\nimport {\r\n\tArrowUpDown,\r\n\tCheckBoxIcon,\r\n\tClose,\r\n\tEdit,\r\n\tRecgtangleIcon,\r\n\tSave,\r\n\tTrash\r\n} from '../icons';\r\n// import {\r\n// \tArrowDropDown /* , SaveOutlined */,\r\n// \tArrowDropUp\r\n// } from '@mui/icons-material';\r\nimport InlineEditFields from './components/inline-edit-fields';\r\nimport Tooltip from '../tooltip/Tooltip';\r\nimport Button from '../button/button';\r\nimport Add from '@mui/icons-material/Add';\r\nimport dayjs from 'dayjs';\r\nimport * as yup from 'yup';\r\nimport ConfirmPopUp from '../confirm-modal/confirm-modal';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { usePages } from '../../hooks/use-pages';\r\nimport { useNavigate } from 'react-router-dom';\r\n// Module-specific pathname imports removed - should be passed as props or configured by consuming app\r\n// import { PathnameAccounting } from 'accounting/src/pathname.accounting';\r\n// import { PathnameInventory } from 'inventory/src/pathname.inventory';\r\n// import { PathnameManufacturing } from 'manufacturing/src/pathname.manufacturing';\r\n// import { PathnamePurchase } from 'procurement/src/pathname.procurement';\r\n// import { PathnameCrm } from 'crm/src/pathname.crm';\r\n// import { PathnameUsers } from 'user/src/pathname.user';\r\n// import { PathnameRental } from '../../../../rental/src/pathname.rental';\r\nimport { PathnameDocument } from '../../constants/pathnames/pathname.document';\r\nimport { PathnameAccounting } from '../../constants/pathnames/pathname.accounting';\r\nimport { PathnameInventory } from '../../constants/pathnames/pathname.inventory';\r\nimport { PathnameManufacturing } from '../../constants/pathnames/pathname.manufacturing';\r\nimport { PathnamePurchase } from '../../constants/pathnames/pathname.procurement';\r\nimport { PathnameCrm } from '../../constants/pathnames/pathname.crm';\r\nimport { PathnameUsers } from '../../constants/pathnames/pathname.user';\r\nimport { PathnameRental } from '../../constants/pathnames/pathname.rental';\r\nimport useDeepMemo from '../../hooks/use-deep-memo';\r\nimport { PageState } from '../../contexts/page-context';\r\n\r\ntype ExtraEditVariants =\r\n\t| 'file'\r\n\t| 'image'\r\n\t| 'date'\r\n\t| 'number'\r\n\t| 'time'\r\n\t| 'date_time'\r\n\t| 'phone'\r\n\t| 'checkbox';\r\n\r\ntype DisableFunction = (row: any, virtualRow?: any) => boolean;\r\n\r\nexport type TypeBooleanLabels = { 1: string; 0: string; true: string; false: string }\r\n\r\nexport interface MaterialTableColumnProps\r\n\textends Omit<MRT_ColumnDef<MRT_RowData>, 'editVariant'> {\r\n\tvisible?: boolean;\r\n\ttype?: string;\r\n\tshowDefaultCurrency?:boolean,\r\n\tvalueGet?: string;\r\n\tcustom_class?:string;\r\n\ttypeArrayAccessorKey?: string; //when type is an array of object\r\n\ttypeBooleanLabels?: TypeBooleanLabels; //when type is an boolean\r\n\teditVariant?: MRT_ColumnDef<MRT_RowData>['editVariant'] | ExtraEditVariants;\r\n\teditProperties?: {\r\n\t\tfield_name?: string;\r\n\t\tvalueKey?: string;\r\n\t\tplaceholder?: string;\r\n\t\tdateFormat?: string;\r\n\t\tvalidations?: any[];\r\n\t\tis_multiple?: boolean;\r\n\t\tis_multiline?: boolean;\r\n\t\tdisable?: boolean | DisableFunction;\r\n\t};\r\n\tredirectionPathWithId?: string;\r\n\thandleRowClick?: (row: any) => void;\r\n\tidField?: string;\r\n}\r\n\r\n\r\n\r\nexport interface MaterialTableColumnHeaderProps {\r\n\tcolumn: MRT_ColumnDef<any, any>;\r\n\theader: MRT_Header<any>;\r\n\ttable: MRT_TableInstance<any>;\r\n}\r\n\r\ntype rowSelectionCallback = (row: MRT_Row<any>) => boolean\r\n\r\ninterface MaterialTablePropsType {\r\n\tenablePagination?: boolean;\r\n\tdisableMaxHeight?: boolean;\r\n\trows: any;\r\n\ttotalPages: number;\r\n\tcolumns: any;\r\n\tpaginationModel: IPaginationModel;\r\n\tcolumnOrder?: string[];\r\n\tupdateData?: any;\r\n\thandleColumnOrdering?: (colOrder: any) => void;\r\n\tenableEditing?: boolean;\r\n\tenableColumnDragging?: boolean;\r\n\trowActionMenu?: any;\r\n\tdestructiveActionMenu?: any;\r\n\tgetRowId?: any;\r\n\tstates?: Partial<MRT_TableState<any>>;\r\n\tonSortingChange?: any;\r\n\tdisableDefaultActionColumn?: boolean;\r\n\tenableRowSelection?: boolean | rowSelectionCallback;\r\n\tdefaultActionColumnItems?: React.ReactElement[];\r\n\tenableBottomToolbar?: boolean;\r\n\tSetSelectedRowId?: any;\r\n\tisResetRow?: boolean;\r\n\tonCreateRow?: (data: any) => Promise<unknown>;\r\n\tonEditRow?: (data: any) => Promise<unknown>;\r\n\tonDeleteRow?: (data: any) => Promise<unknown>;\r\n\teditDisplayMode?: MaterialReactTableProps<any>['editDisplayMode'];\r\n\tenableRowCreate?: boolean;\r\n\tonChangeRowField?: (e: any, type: string, row: any) => void;\r\n\tonSelectRow?: (rows: any, prevSelected?:any) => any;\r\n\tenableColumnResizing?: boolean;\r\n\tselectedRowIds?: any[];\r\n\tonColumnVisibility?:(columns:MaterialTableColumnProps[]) => void\r\n\tgetSelectedData:any;\r\n\tenableAddCustomField?:boolean;\r\n\tdisabledDefaultActionColumnIcon?:boolean\r\n\tenableRowDragging?:boolean\r\n\thandleColumnResizing?: (sizes: MRT_ColumnSizingState) => void,\r\n\tcolumnSizes?: MRT_ColumnSizingState,\r\n\tshowPreview?: boolean;\r\n\thandlePreview?: (row: MRT_RowData) => void;\r\n}\r\n\r\nconst TableWrapper = styled(Box, {\r\n\tshouldForwardProp: (prop) => prop !== 'disableMaxHeight',\r\n})<{ disableMaxHeight?: boolean }>(({ theme: { palette }, disableMaxHeight }) => ({\r\n\t'.MuiTableCell-root': {\r\n\t\tborder: '1px solid #efefef',\r\n\t\tborderBottom: 0,\r\n\t\tborderLeft: 0,\r\n\t\tpadding: '0 0.5rem',\r\n\t\tlineHeight: '19px',\r\n\t\tfontSize: '14px',\r\n\t\tminHeight: 32,\r\n\t\t// '&:first-child': {\r\n\t\t// \tborderLeft: '1px solid #efefef'\r\n\t\t// },\r\n\t\t// '&:last-child': {\r\n\t\t// \tborderBottom: '1px solid #efefef'\r\n\t\t// }\r\n\r\n\t},\r\n\t'.MuiTableCell-head': {\r\n\t\tbackgroundColor: palette.theme?.secondary[100]\r\n\t},\r\n\t'.MuiTableContainer-root': {\r\n\t\t...(!disableMaxHeight && { maxHeight: 'clamp(350px, 100vh - 200px, 9999px) !important' }),\r\n\t\t},\r\n\r\n\t'.MuiPaper-root': {\r\n\t\tboxShadow: 'none',\r\n\r\n\t},\r\n\t'.MuiPaginationItem-root': {\r\n\t\t'&.Mui-selected': {\r\n\t\t\tbackgroundColor: palette?.theme?.primary[700],\r\n\t\t\tcolor: 'white'\r\n\t\t}\r\n\t},\r\n\t'.MuiTableRow-root': {\r\n\t\t'&.Mui-selected': {\r\n\t\t\tbackgroundColor: `${palette?.theme?.primary[100]} !important`,\r\n\t\t\tcolor: 'white'\r\n\t\t}\r\n\t},\r\n\t'.MuiCheckbox-indeterminate': {\r\n\t\tcolor: `${palette?.theme?.primary[700]} !important`,\r\n\t\t\"& svg\" : {\r\n\t\t\theight: `20px !important`,\r\n\t\t\twidth: `20px !important`,\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport const MaterialTable = React.memo(({\r\n\tenablePagination = false,\r\n\trows,\r\n\tcolumns,\r\n\ttotalPages,\r\n\tpaginationModel,\r\n\tcolumnOrder,\r\n\tupdateData,\r\n\thandleColumnOrdering,\r\n\tenableEditing,\r\n\tenableColumnDragging,\r\n\tstates,\r\n\trowActionMenu,\r\n\tdestructiveActionMenu,\r\n\tdisableDefaultActionColumn,\r\n\tenableRowSelection,\r\n\tdefaultActionColumnItems = [],\r\n\tenableBottomToolbar,\r\n\tSetSelectedRowId,\r\n\tisResetRow,\r\n\tonCreateRow,\r\n\tonEditRow,\r\n\tonDeleteRow,\r\n\teditDisplayMode,\r\n\tenableRowCreate,\r\n\tonChangeRowField,\r\n\tonSelectRow,\r\n\tenableColumnResizing = true,\r\n\tselectedRowIds = [],\r\n\tonColumnVisibility,\r\n\tonSortingChange,\r\n\tgetSelectedData,\r\n\tdisabledDefaultActionColumnIcon = false,\r\n\tenableAddCustomField=true,\r\n\tenableRowDragging = false,\r\n\thandleColumnResizing = () => {},\r\n\tcolumnSizes = {},\r\n\tdisableMaxHeight = false,\r\n\tshowPreview = false,\r\n\thandlePreview=()=>{},\r\n\t// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n\t// getRowId,\r\n\t// onDelete,\r\n\t// onUpdate,\r\n\t...rest\r\n}: MaterialTablePropsType) => {\r\n\tconst { t } = useTranslation();\r\n\tconst { formData = null, updatePageInfo, activePage: aPage } = usePages()\r\n\tconst activePage = useDeepMemo<PageState>(aPage);\r\n\tconst { pageNo } = paginationModel;\r\n\tconst [row, setRow] = useState({});\r\n\tconst [tableColumns, setTableColumns] = useState(columns);\r\n\tconst [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [popUpShow, setPopupShow] = useState<boolean>(false);\r\n\tconst [rowAnchorEl, setRowAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst visibleColumns = tableColumns.filter((column: any) => column.visible);\r\n\tconst hiddenColumns = tableColumns.filter((column: any) => !column.visible);\r\n\tconst [filteredOptions, setFilteredOptions] = useState(hiddenColumns);\r\n\tconst [selectedRow, setSelectedRow] = useState<number | null>(null);\r\n\tconst [validationErrors, setValidationErrors] = useState<any>({});\r\n\tconst [validationSchema, setValidationSchema] = useState<any>([]);\r\n\tconst [isCreatingRow, setIsCreatingRow] = useState<boolean>(false);\r\n\tconst [isEditingRow, setIsEditingRow] = useState<boolean>(false);\r\n\tconst [isDeletingRow, setIsDeletingRow] = useState<boolean>(false);\r\n\tconst [rowToDelete, setRowToDelete] = useState<any>(null);\r\n\tconst [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});\r\n\tconst [isChecked, setIsChecked] = useState(false)\r\n\tconst [sorting, setSorting] = useState<MRT_SortingState>([]);\r\n\tconst [disableNextEdit, setDisableNextEdit] = useState(false);\r\n\tconst [columnSizing, setColumnSizing] = useState<MRT_ColumnSizingState>(activePage.column_sizes);\r\n\tconst [columnSizingInfo, setColumnSizingInfo] = useState<MRT_ColumnSizingInfoState>({\r\n\t\tcolumnSizingStart: [],\r\n deltaOffset: null,\r\n deltaPercentage: null,\r\n isResizingColumn: false,\r\n startOffset: null,\r\n startSize: null\r\n\t});\r\n\r\n\tconst navigate=useNavigate();\r\n\t const currentModule = location.pathname.split('/')[2]\r\n\t\r\n\t let redirectionPath = ''\r\n\t switch (currentModule) {\r\n\t\tcase 'accounting':\r\n\t\t redirectionPath = PathnameAccounting.CUSTOM_FORM\r\n\t\t break;\r\n\t\tcase 'inventory':\r\n\t\t redirectionPath = PathnameInventory.CUSTOM_FORM\r\n\t\t break;\r\n\t\tcase 'manufacturing':\r\n\t\r\n\t\t redirectionPath = PathnameManufacturing.CUSTOM_FORM\r\n\t\t break;\r\n\t\tcase 'procurement':\r\n\t\t redirectionPath = PathnamePurchase.CUSTOM_FORM\r\n\t\t break;\r\n\t\tcase 'crm':\r\n\t\t redirectionPath = PathnameCrm.CUSTOM_FORM\r\n\t\t break;\r\n\t\t case 'user':\r\n\t\t redirectionPath = PathnameUsers.CUSTOM_FORM\r\n\t\t break;\r\n\tcase 'rental':\r\n\t\t redirectionPath = PathnameRental.CUSTOM_FORM\r\n\t\t break;\r\n\t\t case 'drive':\r\n\t\t redirectionPath = PathnameDocument.ADD_CUSTOM_FIELDS\r\n\t\t break;\r\n\t }\r\n\t const path = `/dashboard/${currentModule}${redirectionPath}`\r\n\tconst getValidationType = (column: any) => {\r\n\t\tswitch (column.editVariant) {\r\n\t\t\tcase 'select':\r\n\t\t\t\treturn column?.editProperties?.is_multiple ? yup.array() : yup.string();\r\n\r\n\t\t\tcase 'number':\r\n\t\t\t\treturn yup.number().nullable().transform((value, originalValue) => (originalValue === \"\" ? null : value));\r\n\r\n\t\t\tcase 'url':\r\n\t\t\t\treturn yup\r\n\t\t\t\t\t.string()\r\n\t\t\t\t\t.matches(\r\n\t\t\t\t\t\t/^(https?:\\/\\/)?((([a-zA-Z0-9_-]+\\.)+[a-zA-Z]{2,})|localhost)(:\\d{2,5})?(\\/[a-zA-Z0-9#_-]+\\/?)*(\\?[a-zA-Z0-9&=_-]+)?(#\\S+)?$/,\r\n\t\t\t\t\t\t{ excludeEmptyString: true, message: 'Please enter valid URL.' }\r\n\t\t\t\t\t);\r\n\r\n\t\t\tdefault:\r\n\t\t\t\treturn yup.string()\r\n\t\t}\r\n\t};\r\n\r\n\tconst validationReducer = (\r\n\t\tvalidations: any,\r\n\t\tvalidation: any,\r\n\t\tcolumn: any\r\n\t) => {\r\n\t\tlet vld = validations\r\n\t\tswitch (validation.type) {\r\n\t\t\tcase 'required':\r\n\t\t\t\tvld = validation.value\r\n\t\t\t\t\t? validations.required(validation.msg_en).typeError(validation.msg_en)\r\n\t\t\t\t\t: column?.editProperties?.is_multiple\r\n\t\t\t\t\t\t? validations.min(1, validation.msg_en)\r\n\t\t\t\t\t\t: validations;\r\n\t\t\t\t\t\tbreak\r\n\t\t\tcase 'min':\r\n\t\t\t\tvld = validations.min(validation.value, validation.msg_en);\r\n\t\t\t\tbreak\r\n\t\t\tcase 'email':\r\n\t\t\t\tvld = validations.email(validation.value, validation.msg_en);\r\n\t\t\t\tbreak\r\n\t\t\tcase 'max':\r\n\t\t\t\tvld = validations.max(validation.value, validation.msg_en);\r\n\t\t\t\tbreak\r\n\t\t\tcase 'positive':\r\n\t\t\t\tvld = validation.value === true ? validations.test('is-positive-number', 'Value must be a positive number', (value) => !value || value >= 0) : validations;\r\n\t\t\t\tbreak\r\n\t\t\tcase 'when':\r\n\t\t\t\treturn validations.when(validation.relation, {\r\n\t\t\t\t\tis: (val: any) => val === validation.values,\r\n\t\t\t\t\tthen: () =>\r\n\t\t\t\t\t\tvalidation?.thenValidations?.reduce(\r\n\t\t\t\t\t\t\t(validations: any, validation: any) =>\r\n\t\t\t\t\t\t\t\tvalidationReducer(validations, validation, column),\r\n\t\t\t\t\t\t\tvalidations\r\n\t\t\t\t\t\t) || validations,\r\n\t\t\t\t\totherwise: () =>\r\n\t\t\t\t\t\tvalidation?.otherWiseValidations?.reduce(\r\n\t\t\t\t\t\t\t(validations: any, validation: any) =>\r\n\t\t\t\t\t\t\t\tvalidationReducer(validations, validation, column),\r\n\t\t\t\t\t\t\tvalidations\r\n\t\t\t\t\t\t) || validations\r\n\t\t\t\t});\r\n\t\t\t// Add more cases for other validation types as needed\r\n\t\t\tdefault:\r\n\t\t\t\tvld = validations;\r\n\t\t\t\tbreak\r\n\t\t}\r\n\r\n\t\tif(validation.type == 'required' && validation.value && (!column?.editVariant || column?.editVariant == 'text')) {\r\n\t\t\tvld = validations.test('no-blank-spaces', 'Blank space is not allowed', (value) => {\r\n\t\t\t\treturn value && value.trim()?.length > 0;\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\treturn vld\r\n\t\t\r\n\t};\r\n\r\n\r\n\tconst generateValidationSchema = (columns: any[]) => {\r\n\t\tconst schema: any = {};\r\n\t\tcolumns.forEach((clm) => {\r\n\t\t\tif (clm?.editProperties?.validations?.length) {\r\n\t\t\t\tconst fieldValidations = clm?.editProperties?.validations.reduce(\r\n\t\t\t\t\t(validations: any, validation: any) =>\r\n\t\t\t\t\t\tvalidationReducer(validations, validation, clm),\r\n\t\t\t\t\tgetValidationType(clm)\r\n\t\t\t\t);\r\n\t\t\t\tschema[clm.accessorKey] = fieldValidations;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn schema;\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetTableColumns(columns);\r\n\r\n\t\tconst schema: any = generateValidationSchema(columns);\r\n\t\tsetValidationSchema(yup.object().shape(schema));\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [columns]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif(!columnSizingInfo?.isResizingColumn) {\r\n\t\t\tupdatePageInfo({ column_sizes: {...activePage.column_sizes, ...columnSizing} })\r\n\t\t\thandleColumnResizing?.(columnSizing)\r\n\t\t}\r\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [columnSizingInfo?.isResizingColumn, columnSizing])\r\n\r\n\tconst handleHeaderClick = (event: any) => {\r\n\t\tsetAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleHeaderClose = () => {\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleVisibleColumn = (column: any) => {\r\n\t\tconst updatedColumns = tableColumns.map((col: any) => ({\r\n\t\t\t...col,\r\n\t\t\tvisible: col.accessorKey === column.accessorKey ? false : col.visible\r\n\t\t}));\r\n\t\tsetTableColumns(updatedColumns);\r\n\t\tonColumnVisibility?.(JSON.parse(JSON.stringify(updatedColumns)))\r\n\t\tsetFilteredOptions([...filteredOptions, column]);\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleAddButtonClick = () => {\r\n\t\tsetPopupShow(true);\r\n\t};\r\n\r\n\tconst handleBackButtonClick = () => {\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleAddColumn = (column: any) => {\r\n\t\tconst updatedColumns = tableColumns.map((col: any) => ({\r\n\t\t\t...col,\r\n\t\t\tvisible: col.accessorKey === column.accessorKey ? true : col.visible\r\n\t\t}));\r\n\t\tonColumnVisibility?.(JSON.parse(JSON.stringify(updatedColumns)))\r\n\t\tsetTableColumns(updatedColumns);\r\n\r\n\t\tconst updatedFilteredOptions = filteredOptions.filter(\r\n\t\t\t(option: any) => option.accessorKey !== column.accessorKey\r\n\t\t);\r\n\t\tsetFilteredOptions(updatedFilteredOptions);\r\n\t\tsetAnchorEl(null);\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleSearchEvent = (searchQuery: string) => {\r\n\t\tconst filteredColumns = hiddenColumns.filter((option: any) =>\r\n\t\t\toption.header.toLowerCase().includes(searchQuery.toLowerCase())\r\n\t\t);\r\n\t\tsetFilteredOptions(filteredColumns);\r\n\t};\r\n\r\n\tconst handleCustomAddColumn = () => {\r\n\t\tnavigate(path, { state: formData })\r\n\t\tsetAnchorEl(null);\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleRowClick = (rowId: number) => {\r\n\t\tsetSelectedRow(rowId); // Update selected row ID when a row is clicked\r\n\t};\r\n\r\n\tconst handlePreviewClick = (row: MRT_RowData) => {\r\n\t\thandlePreview?.(row);\r\n\t};\r\n\r\n\t// const handleDeleteClick = (event: any, data: any) => {\r\n\t// onDelete?.(data.id);\r\n\t// };\r\n\t// const handleUpdateClick = (event: any, data: any) => {\r\n\t// onUpdate?.(data.id);\r\n\t// };\r\n\r\n\tconst handleActionsClick = (event: any, data: any) => {\r\n\t\tsetRow(data);\r\n\t\tsetRowAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleActionsClose = () => {\r\n\t\tsetRowAnchorEl(null);\r\n\t};\r\n\r\n\tconst formtValues = (values: any, cells: any[]) => {\r\n\t\tconst v: any = {};\r\n\t\tObject.keys(values).forEach((vl) => {\r\n\t\t\tconst val = values[vl];\r\n\t\t\tv[vl] = val;\r\n\t\t\tconst cell = cells.find((c) => c.accessorKey == vl);\r\n\t\t\tif (val) {\r\n\t\t\t\tif (val instanceof File) {\r\n\t\t\t\t\tv[vl] = val.name;\r\n\t\t\t\t}\r\n\t\t\t\tif (cell && cell?.editVariant == 'date') {\r\n\t\t\t\t\tv[vl] = dayjs(val).format(cell?.dateFormat || 'DD-MM-YYYY');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn v;\r\n\t};\r\n\r\n\tconst handleRowDelete = async () => {\r\n\t\tsetIsDeletingRow(true);\r\n\t\tif (rowToDelete) {\r\n\t\t\tawait onDeleteRow?.(rowToDelete);\r\n\t\t\tsetRowToDelete(null);\r\n\t\t}\r\n\t\tsetIsDeletingRow(false);\r\n\t};\r\n\r\n\tconst checkRequired=useCallback((editProperties:any)=>{\r\n\t\treturn editProperties?.validations?.some((validation:any)=>validation.type === 'required')\r\n\t},[])\r\n\tuseEffect(() => {\r\n\t\tconst selectedRows = {};\r\n\t\t// Build the selectedRows object\r\n\t\tif (!isChecked && selectedRowIds.length) {\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif (selectedRowIds.includes(row.id)) {\r\n\t\t\t\t\tselectedRows[row.id] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tsetRowSelection(selectedRows);\r\n\t\t\tsetIsChecked(true)\r\n\t\t}\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [rows, selectedRowIds]); // Dependency only on rows and selectedRowIds\r\n\r\n\tuseEffect(() => {\r\n\t\tif(onSortingChange instanceof Function) {\r\n\t\t const sortingArray = Array.isArray(sorting) ? sorting : [];\r\n onSortingChange(sortingArray[0] || null)\r\n\t\t}\r\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t},[sorting])\r\n\r\n\r\n\tconst resetRowSelection = () => {\r\n\t\tsetRowSelection({});\r\n\t\tsetDisableNextEdit(false)\r\n\t}\r\n\tconst getTextWidth = (text: string) => {\r\n\tconst canvas = document.createElement(\"canvas\");\r\n\tconst ctx = canvas.getContext(\"2d\");\r\n\tif (!ctx) return 50;\r\n\treturn ctx.measureText(text).width + 5; // padding\r\n\t}\r\n\tconst table = useMaterialReactTable({\r\n\t\t// options:{\r\n\t\t// \ttableLayout: \"auto\", // 👈 important\r\n\t\t// \tpadding: \"dense\",\r\n\t\t// },\r\n\t\t// columns: visibleColumns,\r\n\t\tdefaultColumn:{\r\n minSize: 0, // 👈 remove default min width\r\n size: undefined, // 👈 optional, default size\r\n },\r\n\t\tcolumns: [\r\n\t\t\t...visibleColumns.map((c: any) => {\r\n\t\t\t\tconst headerWidth = getTextWidth(c.header || '');\r\n\t\t\t\tconst maxCellWidth = Math.max(\r\n\t\t\t\t...rows.map(row => getTextWidth(String(row[c.accessorKey] ?? '')))\r\n\t\t\t\t);\r\n\t\t\t\tconst finalWidth = Math.max(headerWidth, maxCellWidth);\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...c,\r\n\t\t\t\t\t...(editDisplayMode === 'row'\r\n\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\tEdit: ({ cell, row, table, column }) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<InlineEditFields\r\n\t\t\t\t\t\t\t\t\t\tcell={cell}\r\n\t\t\t\t\t\t\t\t\t\tcolumn={column}\r\n\t\t\t\t\t\t\t\t\t\tcol={c}\r\n\t\t\t\t\t\t\t\t\t\trow={row}\r\n\t\t\t\t\t\t\t\t\t\ttable={table}\r\n\t\t\t\t\t\t\t\t\t\tcallback={(s) => console.log('Save', s)}\r\n\t\t\t\t\t\t\t\t\t\terrors={validationErrors}\r\n\t\t\t\t\t\t\t\t\t\tvalidationSchema={validationSchema}\r\n\t\t\t\t\t\t\t\t\t\tsetValidationErrors={setValidationErrors}\r\n\t\t\t\t\t\t\t\t\t\tonChangeRowField={onChangeRowField}\r\n\t\t\t\t\t\t\t\t\t\tgetSelectedData={(name,row)=>getSelectedData?.(name,row)}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t: {}),\r\n\t\t\t\t\t\tHeader: (\r\n\t\t\t\t\t\t\t<Box display='flex' alignItems='center'>\r\n\t\t\t\t\t\t\t\t{c.header}\r\n\t\t\t\t\t\t\t\t{c?.required ||checkRequired(c?.editProperties) && (\r\n\t\t\t\t\t\t\t\t\t<Typography type='s5' color='theme.error.600'>\r\n\t\t\t\t\t\t\t\t\t\t*\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\tenableColumnDragging: c.id !== 'actions',\r\n\t\t\t\t\t// cellStyle: { ...c.cellStyle, width: finalWidth },\r\n \t\t\t\t// headerStyle: { ...c.headerStyle, width: finalWidth },\r\n\t\t\t\t\t// size: finalWidth\r\n\t\t\t\t\tsize: undefined,\r\n\t\t\t\t\t// minSize: 40,\r\n\t\t\t\t\tmaxSize: 800,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\t...(showPreview ? [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 'preview',\r\n\t\t\t\t\tenableEditing: false,\r\n\t\t\t\t\tsize: 70,\r\n\t\t\t\t\theader: (\r\n\t\t\t\t\t\t<IconButton size=\"small\" sx={{ ml: '20px', '&:hover': { backgroundColor: 'transparent' } }}>\r\n\t\t\t\t\t\t\t<img src={images.common.eyeIcon} alt='Eye Icon' />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t),\r\n\t\t\t\t\tenableColumnDragging: false,\r\n\t\t\t\t\tvisible: true,\r\n\t\t\t\t\tmuiTableHeadCellProps: {\r\n\t\t\t\t\t\tclassName: 'pinned-column'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmuiTableBodyCellProps: {\r\n\t\t\t\t\t\tclassName: 'pinned-column',\r\n\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\twhiteSpace: 'pre-wrap'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tCell: (props) =>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tonClick={() => handlePreviewClick(props.row.original)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tPreview\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t}\r\n\t\t\t] : []),\r\n\t\t\t...(!disableDefaultActionColumn\r\n\t\t\t\t? [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tid: 'actions',\r\n\t\t\t\t\t\tenableEditing: false,\r\n\t\t\t\t\t\tsize: defaultActionColumnItems?.length > 1 ? 80 : 50,\r\n\t\t\t\t\t\theader: (\r\n\t\t\t\t\t\t\t<IconButton size=\"small\" sx={{ p: 0.5, '&:hover': { backgroundColor: 'transparent' } }} onClick={handleHeaderClick}>\r\n\t\t\t\t\t\t\t\t<img src={images.common.arrowIcon} alt='Arrow Icon' />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t\tenableColumnDragging: false,\r\n\t\t\t\t\t\tvisible: true,\r\n\t\t\t\t\t\tmuiTableHeadCellProps: {\r\n\t\t\t\t\t\t\tclassName: 'pinned-column'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmuiTableBodyCellProps: {\r\n\t\t\t\t\t\t\tclassName: 'pinned-column'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tCell: (props) =>\r\n\t\t\t\t\t\t\tdefaultActionColumnItems?.length ? (\r\n\t\t\t\t\t\t\t\tdefaultActionColumnItems.map((item) => {\r\n\t\t\t\t\t\t\t\t\tconst updatedProps = {\r\n\t\t\t\t\t\t\t\t\t\t...item.props,\r\n\t\t\t\t\t\t\t\t\t\tonClick: () => item.props.onClick(props)\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\treturn cloneElement(item, updatedProps);\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t) : !disabledDefaultActionColumnIcon && (\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tonClick={(e) => handleActionsClick(e, props.row.original)} disabled={!rowActionMenu?.length && !destructiveActionMenu?.length}>\r\n\t\t\t\t\t\t\t\t\t<img src={images.more} alt='More Icon' />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t\t: [])\r\n\t\t],\r\n\t\tdata: rows,\r\n\t\tmuiTableContainerProps: {\r\n\t\t\tsx: {\r\n\t\t\t\t...(disableMaxHeight && { maxHeight: 'none !important' }),\r\n\t\t\t},\r\n\t\t},\r\n\t\tmuiTablePaperProps: {\r\n\t\t\tsx: {\r\n\t\t\t\ttableLayout: 'auto', // lets columns shrink to fit content\r\n\t\t\t\t},\r\n\t\t},\r\n\t\tcolumnResizeMode: 'onChange',\r\n\t\tonEditingRowSave: async (data) => {\r\n\t\t\ttry {\r\n\t\t\t\tawait validationSchema.validate(data.values, {\r\n\t\t\t\t\tabortEarly: false\r\n\t\t\t\t});\r\n\t\t\t\tsetValidationErrors({});\r\n\t\t\t\tsetIsEditingRow(true);\r\n\t\t\t\tsetDisableNextEdit(false)\r\n\t\t\t\tconst cells = data.row.getAllCells().map((c) => c.column.columnDef);\r\n\t\t\t\tdata.row._valuesCache = formtValues(data.values, cells);\r\n\t\t\t\t\r\n\t\t\t\tif (onEditRow) {\r\n\t\t\t\t\tawait onEditRow(data, 'edit');\r\n\t\t\t\t}\r\n\t\t\t\tsetIsEditingRow(false);\r\n\t\t\t\tdata.table.setEditingRow(null);\r\n\t\t\t} catch (err) {\r\n\t\t\t\tsetIsEditingRow(false);\r\n\t\t\t\tif (err instanceof yup.ValidationError) {\r\n\t\t\t\t\tconst errors: Record<string, string> = {};\r\n\r\n\t\t\t\t\terr.inner.forEach((error) => {\r\n\t\t\t\t\t\tif (error.path) {\r\n\t\t\t\t\t\t\terrors[error.path] = error.message;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tsetValidationErrors(errors);\r\n\t\t\t\t} else if(err instanceof Error) {\r\n\t\t\t\t\tenqueueSnackbar(err.message, {variant: 'error'})\r\n\t\t\t\t} else{\r\n\t\t\t\t\tenqueueSnackbar('Something went wrong', {variant: 'error'})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonCreatingRowSave: async (data) => {\r\n\t\t\ttry {\r\n\t\t\t\tawait validationSchema.validate(data.values, {\r\n\t\t\t\t\tabortEarly: false\r\n\t\t\t\t});\r\n\t\t\t\tsetValidationErrors({});\r\n\t\t\t\tsetIsCreatingRow(true);\r\n\t\t\t\tsetDisableNextEdit(false)\r\n\t\t\t\tconst cells = data.row.getAllCells().map((c) => c.column.columnDef);\r\n \r\n\t\t\t\tdata.row._valuesCache = formtValues(data.values, cells);\r\n\t\t\t\t\r\n\t\t\t\tif (onCreateRow) {\r\n\t\t\t\t\tawait onCreateRow(data);\r\n\t\t\t\t}\r\n\t\t\t\tsetIsCreatingRow(false);\r\n\t\t\t\tdata.table.setCreatingRow(null);\r\n\t\t\t} catch (err) {\r\n\t\t\t\tsetIsCreatingRow(false);\r\n\t\t\t\tif (err instanceof yup.ValidationError) {\r\n\t\t\t\t\tconst errors: Record<string, string> = {};\r\n\r\n\t\t\t\t\terr.inner.forEach((error) => {\r\n\t\t\t\t\t\tif (error.path) {\r\n\t\t\t\t\t\t\terrors[error.path] = error.message;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tsetValidationErrors(errors);\r\n\t\t\t\t} else if(err instanceof Error) {\r\n\t\t\t\t\tenqueueSnackbar(err.message, {variant: 'error'})\r\n\t\t\t\t} else{\r\n\t\t\t\t\tenqueueSnackbar('Something went wrong', {variant: 'error'})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonCreatingRowCancel: () => resetRowSelection(),\r\n\t\tonEditingRowCancel: () => resetRowSelection(),\r\n\t\tonSortingChange:states?.sorting ? onSortingChange : setSorting,\r\n\r\n\t\tdisplayColumnDefOptions: {\r\n\t\t\t'mrt-row-actions': {\r\n\t\t\t\t// size: onDeleteRow ? 80 : 50,\r\n\t\t\t\t\r\n\t\t\t\tHeader: (\r\n\t\t\t\t\t<IconButton onClick={handleHeaderClick} size='small'>\r\n\t\t\t\t\t\t<img src={images.common.arrowIcon} alt='Arrow Icon' />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t),\r\n\t\t\t\tmuiTableBodyCellProps: {\r\n\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t'& .MuiBox-root': {\r\n\t\t\t\t\t\t\tgap: 0\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tbackgroundColor: '#fff'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonKeyUp: (e) => console.log(e)\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t'mrt-row-expand': {\r\n\t\t\t\tsize: 70, // Set the size of the expand-collapse arrow column here\r\n\t\t\t},\r\n\t\t\t'mrt-row-select': {\r\n size: 50, // Set the width of the checkbox column here\r\n },\r\n\t\t},\r\n\t\trenderRowActions: ({ row, table }) => (\r\n\t\t\t<>\r\n\t\t\t\t{rest?.enableExpanding ? (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{row?.parentId && (\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0 }}>\r\n\t\t\t\t\t\t\t\t<Tooltip title='Edit'>\r\n\t\t\t\t\t\t\t\t\t<IconButton disabled={disableNextEdit} onClick={() => {\r\n\t\t\t\t\t\t\t\t\t\ttable.setEditingRow(row)\r\n\t\t\t\t\t\t\t\t\t\tsetDisableNextEdit(true)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t} size='small'>\r\n\t\t\t\t\t\t\t\t\t\t<Edit fontSize='small' sx={{ color: 'theme.secondary.1000' }}/>\r\n\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t{onDeleteRow && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title='Delete'>\r\n\t\t\t\t\t\t\t\t\t\t<IconButton disabled={disableNextEdit} onClick={() => setRowToDelete(row)} size='small'>\r\n\t\t\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0 }}>\r\n\t\t\t\t\t\t<Tooltip title='Edit'>\r\n\t\t\t\t\t\t\t<IconButton disabled={disableNextEdit} onClick={() => {\r\n\t\t\t\t\t\t\t\t\t\ttable.setEditingRow(row)\r\n\t\t\t\t\t\t\t\t\t\tsetDisableNextEdit(true)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t<Edit fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t{onDeleteRow && (\r\n\t\t\t\t\t\t\t<Tooltip title='Delete'>\r\n\t\t\t\t\t\t\t\t<IconButton onClick={() => setRowToDelete(row)}>\r\n\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</>\r\n\t\t),\r\n\r\n\t\t...(Boolean(enableRowCreate) && {\r\n\t\t\trenderBottomToolbarCustomActions: ({ table }) => (\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant='outlined'\t\r\n\t\t\t\t\tstartIcon={<Add />}\r\n\t\t\t\t\tclassName='add-row-btn'\r\n\t\t\t\t\tdisabled={disableNextEdit}\r\n\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\ttable.setCreatingRow(true); //simplest way to open the create row modal with no default values\r\n\t\t\t\t\t\tsetDisableNextEdit(true)\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t{t('common.add')}\r\n\t\t\t\t</Button>\r\n\t\t\t)\r\n\t\t}),\r\n\t\tonRowSelectionChange: setRowSelection,\r\n\t\tenableColumnOrdering: true,\r\n\t\tenableRowSelection: enableRowSelection ?? true,\r\n\t\tenableEditing: enableEditing instanceof Function ? enableEditing() :enableEditing ?? true,\r\n\t\teditDisplayMode: editDisplayMode ?? 'cell',\r\n\t\tcreateDisplayMode: 'row',\r\n\t\tenableColumnResizing: enableColumnResizing,\r\n\t\tenableRowDragging: enableRowDragging,\r\n\t\tenableTopToolbar: false,\r\n\t\tenableColumnActions: false,\r\n\t\tenableSorting: true,\r\n\t\tenableGrouping: true,\r\n\t\tenableBottomToolbar: enableBottomToolbar ?? false,\r\n\t\tenableColumnDragging: enableColumnDragging ?? true,\r\n\t\tenableStickyHeader: true,\r\n\t\tenableSortingRemoval: false,\r\n\t\t// column ordering\r\n\t\tstate: {\r\n\t\t\t// columnOrder: (!columnOrder || columnOrder.length <= 1) \r\n\t\t\t// ? [...internalColumnOrder] \r\n\t\t\t// : [...columnOrder],\r\n\t\t\tcolumnOrder:columnOrder,\r\n\t\t\tcolumnPinning: { left: ['actions', 'mrt-row-actions'] },\r\n\t\t\tisSaving: isCreatingRow || isEditingRow,\r\n\t\t\tshowProgressBars: false,\r\n\t\t\trowSelection,\r\n\t\t\t...states,\r\n\t\t\tsorting: Array.isArray(states?.sorting) ? states?.sorting : \r\n Array.isArray(sorting) ? sorting : [],\r\n\t\t\tcolumnSizing\r\n\r\n\t\t},\r\n\t\tgetRowId:(row) => row?.id,\r\n\t\t// table.getState().editingRow\r\n\t\tmuiTableBodyRowProps: ({ row }) => {\r\n\t\t\tconst editingRowId =\r\n\t\t\t\ttable.getState()?.editingRow?.id ||\r\n\t\t\t\ttable.getState()?.creatingRow?.id ||\r\n\t\t\t\tnull;\r\n\t\t\tconst isErrorRow = Boolean(row?.original?.has_error)\r\n\t\t\treturn {\r\n\t\t\t\tonClick: () => handleRowClick(row.id),\r\n\t\t\t\tsx: {\r\n\t\t\t\t\tcursor: 'pointer',\r\n\t\t\t\t\t// backgroundColor: !editingRowId\r\n\t\t\t\t\t// \t? (selectedRow === row.id\r\n\t\t\t\t\t// \t\t? '#e8e8e8'\r\n\t\t\t\t\t// \t\t: (isErrorRow ? 'theme.error.100' : 'inherit'))\r\n\t\t\t\t\t// \t: 'inherit',\r\n\t\t\t\t\tbackgroundColor: !editingRowId\r\n\t\t\t\t\t\t? (isErrorRow ? 'theme.error.100' : 'inherit')\r\n\t\t\t\t\t\t: 'inherit',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tbackgroundColor: editingRowId ? 'transparent' : (isErrorRow ? 'theme.error.200' : '#e8e8e8') // Removes hover effect globally\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'&:hover td:after': {\r\n\t\t\t\t\t\tbackgroundColor: 'transparent' // Removes the grey background applied via :after\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tonColumnOrderChange: (colOrder: any) => {\r\n\t\t\tif (handleColumnOrdering) handleColumnOrdering(colOrder);\r\n\t\t},\r\n\t\tonColumnSizingChange: setColumnSizing,\r\n onColumnSizingInfoChange: setColumnSizingInfo,\r\n\r\n\t\trenderEmptyRowsFallback: () => (\r\n\t\t\t<Box className='no-data'>\r\n\t\t\t\t<img src={images.common.tableNoData} />\r\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\r\n\t\t\t\t\t{/* sx={{ textAlign: 'center', pb: 4.75, pt: 4.75 }}> */}\r\n\t\t\t\t\t{t('common.noData')}\r\n\t\t\t\t</Typography>\r\n\t\t\t</Box>\r\n\t\t),\r\n\r\n\t\t// pagination\r\n\t\tenablePagination: enablePagination,\r\n\t\tpaginationDisplayMode: 'pages',\r\n\t\tmuiPaginationProps: {\r\n\t\t\tshape: 'rounded',\r\n\t\t\tpage: pageNo, // current page number\r\n\t\t\tcount: totalPages, // total pages\r\n\t\t\tshowRowsPerPage: false, // Hide rows per page options\r\n\t\t\tboundaryCount: 3\r\n\t\t},\r\n\r\n\t\tmuiEditTextFieldProps: ({ row, column }) => ({\r\n\t\t\tInputProps: {\r\n\t\t\t\tdisableUnderline: true\r\n\t\t\t},\r\n\t\t\tonBlur: (e) => {\r\n\t\t\t\tupdateData(e.target.value, column, row.id);\r\n\t\t\t},\r\n\t\t\t// onChange: (e) => {\r\n\t\t\t// \tupdateData(e.target.value, column, row.id);\r\n\t\t\t// },\r\n\t\t\tvariant: 'outlined',\r\n\t\t\tsx: ({ palette }) => ({\r\n\t\t\t\t'& .MuiOutlinedInput-root': {\r\n\t\t\t\t\t'& fieldset': {\r\n\t\t\t\t\t\tborderColor: `${palette.theme?.primary[700]} !important`\r\n\t\t\t\t\t\t// backgroundColor: palette.theme?.primary[700]\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}),\r\n\r\n\t\t/* Table loader style */\r\n\t\tmuiCircularProgressProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: '#289B64'\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Table header cell default styles\r\n\t\tmuiTableHeadCellProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tlineHeight: '140%',\r\n\t\t\t\tletterSpacing: '-0.28px',\r\n\t\t\t\tfontWeight: '500',\r\n\t\t\t\tfontSize: '0.875rem',\r\n\t\t\t\t'& .Mui-TableHeadCell-Content': {\r\n\t\t\t\t\theight: '100%'\r\n\t\t\t\t},\r\n\t\t\t\t'& .Mui-TableHeadCell-Content-Labels': {\r\n\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\tjustifyContent: 'space-between'\r\n\t\t\t\t},\r\n\t\t\t\t'&.pinned-column': {\r\n\t\t\t\t\tbackgroundColor: '#fff'\r\n\t\t\t\t},\r\n\t\t\t\t'& .Mui-TableHeadCell-ResizeHandle-Wrapper': {\r\n\t\t\t\t\tpadding: 0,\r\n\t\t\t\t\tmargin: 0,\r\n\t\t\t\t\tright: '-5px',\r\n\t\t\t\t\topacity: 0\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Table body cell default styles\r\n\t\tmuiTableBodyProps: {\r\n\t\t\tsx:{\r\n\t\t\t\tzIndex: 500\r\n\t\t\t}\r\n\t\t},\r\n\t\tmuiTableHeadProps: {\r\n\t\t\tsx:{\r\n\t\t\t\tzIndex: 600\r\n\t\t\t}\r\n\t\t},\r\n\t\tmuiTableBodyCellProps: (/* { cell, column, table , row } */) => ({\r\n\t\t\tsx: {\r\n\t\t\t\tlineHeight: '140%',\r\n\t\t\t\tletterSpacing: '-0.26px',\r\n\t\t\t\tfontWeight: '400',\r\n\t\t\t\tfontSize: '0.8125rem',\r\n\t\t\t\t'&.pinned-column': {\r\n\t\t\t\t\tbackgroundColor: '#fff'\r\n\t\t\t\t},\r\n\t\t\t\t'&:hover': {\r\n\t\t\t\t\tbackgroundColor: 'transparent' // Removes hover effect globally\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// onClick: () => {\r\n\t\t\t// \ttable.setEditingCell(cell); //set editing cell\r\n\t\t\t// \tqueueMicrotask(() => {\r\n\t\t\t// \t\tconst textField = table.refs.editInputRefs.current[column.id];\r\n\t\t\t// \t\tif (textField) {\r\n\t\t\t// \t\t\ttextField.focus();\r\n\t\t\t// \t\t\ttextField.select?.();\r\n\t\t\t// \t\t}\r\n\t\t\t// \t});\r\n\t\t\t// }\r\n\t\t\t// onKeyDown: (event) => {\r\n\t\t\t// \tif (event.key === 'Tab') {\r\n\t\t\t// \t\ttry {\r\n\t\t\t// \t\t\t\t// if (column.columnDef.editVariant === 'select') {\r\n\t\t\t// \t\t\t\t// \ttable.refs.editInputRefs.current[column.id]?.node?.blur();\r\n\t\t\t// \t\t\t\t// } else {\r\n\t\t\t// \t\t\t\t// \ttable.refs.editInputRefs.current[column.id].blur();\r\n\t\t\t// \t\t\t\t// }\r\n\r\n\t\t\t// \t\t\tconst rowIdx = row.index;\r\n\t\t\t// \t\t\tconst colIdx = columns.findIndex(\r\n\t\t\t// \t\t\t\t(col) => col.accessorKey === column.id\r\n\t\t\t// \t\t\t);\r\n\t\t\t// \t\t\tconst newColIdx = colIdx + 1;\r\n\t\t\t// \t\t\tconst clm = columns[newColIdx];\r\n\t\t\t// \t\t\tconst nextCell = row\r\n\t\t\t// \t\t\t\t.getAllCells()\r\n\t\t\t// \t\t\t\t.find((cl) => (cl.id = `${rowIdx}_${clm.accessorKey}`));\r\n\r\n\t\t\t// \t\t\tif (nextCell) {\r\n\t\t\t// \t\t\t\t// updateData(event.target.value, column, row.id);\r\n\t\t\t// \t\t\t\ttable.setEditingCell(nextCell);\r\n\t\t\t// \t\t\t\tqueueMicrotask(() => {\r\n\t\t\t// \t\t\t\t\tconst textField = table.refs.editInputRefs.current[column.id];\r\n\t\t\t// \t\t\t\t\tif (textField) {\r\n\t\t\t// \t\t\t\t\t\ttextField.focus();\r\n\t\t\t// \t\t\t\t\t\ttextField.select?.();\r\n\t\t\t// \t\t\t\t\t}\r\n\t\t\t// \t\t\t\t});\r\n\t\t\t// \t\t\t}\r\n\t\t\t// \t\t} catch (error) {\r\n\t\t\t// \t\t}\r\n\t\t\t// \t}\r\n\t\t\t// },\r\n\t\t\t// onBlur: () => {\r\n\t\t\t// \ttable.setEditingCell(null);\r\n\t\t\t// }\r\n\t\t}),\r\n\r\n\t\t// Checkbox styling\r\n\t\tmuiSelectCheckboxProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: 'theme.secondary.300',\r\n\t\t\t\t'&.Mui-checked': {\r\n\t\t\t\t\tcolor: 'theme.primary.600',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: 'theme.primary.500'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t'&.Mui-disabled': {\r\n\t\t\t\t\tcolor: 'theme.secondary.200'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ticon: <RecgtangleIcon sx={{ width: 20, height: 20 }} />,\r\n\t\t\tcheckedIcon: <CheckBoxIcon sx={{ width: 20, height: 20 }} />\r\n\t\t},\r\n\t\tmuiSelectAllCheckboxProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: 'theme.secondary.300',\r\n\t\t\t\t'&.Mui-checked': {\r\n\t\t\t\t\tcolor: 'theme.primary.600',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: 'theme.primary.500'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t'&.Mui-disabled': {\r\n\t\t\t\t\tcolor: 'theme.secondary.600'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ticon: <RecgtangleIcon sx={{ width: 20, height: 20 }} />,\r\n\t\t\tcheckedIcon: <CheckBoxIcon sx={{ width: 20, height: 20 }} />\r\n\t\t},\r\n\t\tmuiBottomToolbarProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tboxShadow: 'none',\r\n\t\t\t\t'& .MuiBox-root': {\r\n\t\t\t\t\tpaddingLeft: 0\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tlayoutMode: 'grid',\r\n\t\ticons: {\r\n\t\t\tArrowDownwardIcon: (props: SvgIconProps) => (\r\n\t\t\t\t<ArrowUpDown fontSize='medium' {...props} />\r\n\t\t\t),\r\n\t\t\tSortIcon: (props: SvgIconProps) => (\r\n\t\t\t\t<ArrowUpDown fontSize='medium' {...props} />\r\n\t\t\t),\r\n\t\t\tSyncAltIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tCancelIcon: (props: SvgIconProps) => (\r\n\t\t\t\t<Close fontSize='small' {...props} sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t),\r\n\t\t\tSaveIcon: (props: SvgIconProps) => (\r\n\t\t\t\t<Save {...props} fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t)\r\n\t\t},\r\n\t\t\r\n\t\t...rest\r\n\t});\r\n\r\n\tuseEffect(() => {\r\n\t\tif (enableRowSelection) {\r\n\t\t\tif (table?.getSelectedRowModel()?.rows) {\r\n\t\t\t\tSetSelectedRowId?.(table?.getSelectedRowModel()?.rows);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [enableRowSelection]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onSelectRow) {\r\n\t\t\tif(rest?.enableExpanding) {\r\n\t\t\t\tconst selectedRowModels: any[] = [];\r\n\t\t\t\tconst selection = table.getState().rowSelection; // e.g., { 0.0: true }\r\n\t\t\t\tconst traverseRows = (rows, parentKey = '') => {\r\n\t\t\t\t\trows.forEach((row, index) => {\r\n\t\t\t\t\t\tconst rowKey = parentKey ? `${parentKey}.${index}` : `${row.id}`;\r\n\t\t\t\t\t\tif (selection[rowKey]) {\r\n\t\t\t\t\t\t\tselectedRowModels.push(row);\r\n\t\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\t\t// Check for sub-rows and traverse further\r\n\t\t\t\t\t\tif (row.subRows?.length) {\r\n\t\t\t\t\t\t\ttraverseRows(row.subRows, rowKey);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\t\r\n\t\t\t\ttraverseRows(table.getRowModel().rows);\r\n\t\t\t\tonSelectRow(selectedRowModels, rowSelection);\r\n\t\t\t} else{\r\n\t\t\t\tonSelectRow(table.getSelectedRowModel().rows, rowSelection);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [rowSelection, table]);\r\n\r\n\t// useEffect(() => {\r\n\t// \tconst relativeContainer = document.getElementsByClassName(\r\n\t// \t\t'MuiTableContainer-root'\r\n\t// \t)[0];\r\n\t// \tconst fixedElement = document.getElementsByClassName('no-data')[0];\r\n\t// \trelativeContainer.addEventListener('scroll', () => {\r\n\t// \t\tconst scrollLeft = relativeContainer.scrollLeft;\r\n\t// \t\tfixedElement.style.left = `${scrollLeft + 100}px`;\r\n\t// \t});\r\n\t// }, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (isResetRow) {\r\n\t\t\ttable?.resetRowSelection();\r\n\t\t}\r\n\t}, [isResetRow, table]);\r\n\treturn (\r\n\t\t<TableWrapper className='MRT-TableWrapper custom-table' disableMaxHeight={disableMaxHeight}>\r\n\t\t\t<MaterialReactTable table={table} />\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={anchorEl}\r\n\t\t\t\topen={Boolean(anchorEl)}\r\n\t\t\t\tonClose={handleHeaderClose}\r\n\t\t\t\tclassName='add-role-drp'>\r\n\t\t\t\t{popUpShow ? (\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\tonClick={handleBackButtonClick}\r\n\t\t\t\t\t\t\tclassName='role-drp-list add-column-title'>\r\n\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t<ChevronLeftIcon />\r\n\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t{t('common.addColumn_label')}\r\n\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important'}}/>\r\n\t\t\t\t\t\t<div className='searchbar-box-list'>\r\n\t\t\t\t\t\t\t<SearchBar\r\n\t\t\t\t\t\t\t\tplaceholder={'Search User'}\r\n\t\t\t\t\t\t\t\thandleSearch={(e) => handleSearchEvent(e)}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div className='all-attribute-title'>\r\n\t\t\t\t\t\t\t<Typography variant='body2' color='text.secondary'>\r\n\t\t\t\t\t\t\t\t{t('common.allAttributes_label')}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{filteredOptions.map((column: any) => (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={column.accessorKey}\r\n\t\t\t\t\t\t\t\tonClick={() => handleAddColumn(column)}>\r\n\t\t\t\t\t\t\t\t<Typography color='theme.secondary.1000' type='s3'>\r\n\t\t\t\t\t\t\t\t\t{column.header}\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important'}}/>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\tenableAddCustomField &&<MenuItem onClick={handleCustomAddColumn} className='role-drp-list'>\r\n\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t<img src={images.common.addIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t{t('common.addCustomField_label')}\r\n\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t</MenuItem>\r\n }\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{visibleColumns.map((column: any) => (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={column.accessorKey}\r\n\t\t\t\t\t\t\t\tonClick={() => handleVisibleColumn(column)}\r\n\t\t\t\t\t\t\t\tclassName='role-drp-list'>\r\n\t\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t\t<img src={images.common.dotsIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t\t<ListItemText className='title'>{column.header}</ListItemText>\r\n\t\t\t\t\t\t\t\t<ListItemIcon className='eye-icon'>\r\n\t\t\t\t\t\t\t\t\t<img src={images.common.eyeIcon} alt='Eye Icon' />\r\n\t\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important'}}/>\r\n\t\t\t\t\t\t<MenuItem onClick={handleAddButtonClick} className='role-drp-list'>\r\n\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t<img src={images.common.addIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t{t('common.addColumn_label')}\r\n\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\tvariant='body2'\r\n\t\t\t\t\t\t\t\tcolor='text.secondary'\r\n\t\t\t\t\t\t\t\tclassName='eye-icon'>\r\n\t\t\t\t\t\t\t\t<ChevronRightIcon sx={{ fontSize: '1.25rem !important'}}/>\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={rowAnchorEl}\r\n\t\t\t\topen={Boolean(rowAnchorEl)}\r\n\t\t\t\tonClose={handleActionsClose}>\r\n\t\t\t\t{rowActionMenu?.map((option: any) => {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t(option.label === 'Move' &&\r\n\t\t\t\t\t\t\t(row?.is_directory === true || row?.is_directory === 1)) ||\r\n\t\t\t\t\t\t(option.label === 'Download' &&\r\n\t\t\t\t\t\t\t(row?.is_directory === true ||\r\n\t\t\t\t\t\t\t\trow?.is_directory === 1 ||\r\n\t\t\t\t\t\t\t\trow?.drive?.is_directory === true ||\r\n\t\t\t\t\t\t\t\trow?.drive?.is_directory === 1))\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t// return null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\tonClick={async () => {\r\n\t\t\t\t\t\t\t\tawait option.handleAction(row);\r\n\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\ttypeof option.disabled === 'function'\r\n\t\t\t\t\t\t\t\t\t? option.disabled(row)\r\n\t\t\t\t\t\t\t\t\t: Boolean(option.disabled)\r\n\t\t\t\t\t\t\t} \r\n\t\t\t\t\t\t\tsx={{ alignItems:'center', gap: 0.5 }} \r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{option?.icon}\r\n\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\r\n\t\t\t\t\t\t\t\t{typeof option.label === 'function'?option.label(row):option.label}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t\t{destructiveActionMenu?.length > 0 &&\r\n\t\t\t\t<>\r\n\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important'}}/>\r\n\t\t\t\t\t<div className='dropdown-inner--DestructiveHeader'>\r\n\t\t\t\t\t\t{destructiveActionMenu?.map((option: any) => (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\toption.handleAction(row);\r\n\t\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tclassName='dropdown-inner--DestructiveActions'\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\ttypeof option.disabled === 'function'\r\n\t\t\t\t\t\t\t\t\t\t? option.disabled(row)\r\n\t\t\t\t\t\t\t\t\t\t: Boolean(option.disabled)\r\n\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\r\n\t\t\t\t\t\t\t\t{typeof option.label === 'function'?option.label(row):option.label}\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</>\r\n\t\t\t\t}\r\n\t\t\t</Menu>\r\n\t\t\t<ConfirmPopUp\r\n\t\t\t\topen={Boolean(rowToDelete)}\r\n\t\t\t\tonClose={() => setRowToDelete(null)}\r\n\t\t\t\tonConfirm={() => handleRowDelete()}\r\n\t\t\t\ttitle='Delete Item'\r\n\t\t\t\tdescription={`Are you sure you want to delete entry ?`}\r\n\t\t\t\tloading={isDeletingRow}\r\n\t\t\t/>\r\n\t\t</TableWrapper>\r\n\t);\r\n});\r\n\r\nexport default MaterialTable;","import { Box, DialogActions, DialogContent, DialogTitle, Divider, Grid, IconButton } from \"@mui/material\";\r\nimport Modal from '../modal/modal';\r\nimport Typography from \"../typography/typography\";\r\nimport DynamicInput from '../form-control/form-builder/form-builder-element/text';\r\nimport DynamicRadioButton from '../form-control/form-builder/form-builder-element/radio-button';\r\nimport { useForm, useWatch } from \"react-hook-form\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { generateValidationSchema, generateValidationSchema1 } from \"./validator\";\r\nimport DynamicSearchSelect from \"../form-control/form-builder/form-builder-element/dynamic-select\";\r\nimport DynamicPhone from '@/components/form-control/form-builder/form-builder-element/phone';\r\nimport Accordion from \"../accordion/accordion\";\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport _ from \"lodash\";\r\nimport './parties-modal.scss';\r\nimport { useAccountingSetting } from \"../../hooks/useAccountSetting\";\r\nimport {\r\n addressColumns,\r\n addressOmitKeys,\r\n addressPayload,\r\n contactColumns,\r\n contactOmitKeys,\r\n contactPayload,\r\n PARTIES_FIELDS,\r\n PARTIES_FORM_ARRAY_NAME,\r\n partyType,\r\n processPartiesPayload\r\n} from \"./utils/constant\";\r\nimport MaterialTable from \"../material-table/material-table\";\r\nimport parsePhoneNumberFromString from \"libphonenumber-js\";\r\nimport Checkbox from \"../checkbox/checkbox\";\r\nimport { transformTableColumns } from \"../../utils/common-utility\";\r\nimport { createParties } from \"../../redux/actionCreator\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { getErrorMessage } from \"../../utils/common\";\r\nimport ModalLoader from \"../loaders/modal-loader\";\r\nimport Button from \"../button/button\";\r\nimport { Close } from \"@mui/icons-material\";\r\n\r\ninterface CustomerVendorModalProps {\r\n isOpen: boolean;\r\n handleModalClose?: () => void;\r\n modalProps?: any;\r\n type?: string;\r\n partyCreated?: () => void;\r\n isLoading?: boolean;\r\n onSave?: (payload: any) => Promise<void>;\r\n setIsOpen?: (value: boolean) => void;\r\n}\r\n\r\ninterface LocationState {\r\n state: any;\r\n country: any;\r\n}\r\n\r\nconst defaultLocationState: LocationState = { state: '', country: '' };\r\n\r\nexport default function CustomerVendorModal({\r\n isOpen,\r\n handleModalClose,\r\n modalProps,\r\n type,\r\n partyCreated,\r\n isLoading,\r\n onSave,\r\n setIsOpen\r\n}: CustomerVendorModalProps) {\r\n\r\n //Hooks\r\n const { t } = useTranslation();\r\n const dispatch = useDispatch();\r\n\r\n //Refs\r\n const locationRef = useRef<LocationState>(defaultLocationState);\r\n\r\n //Local states\r\n const [addressRows, setAddressRows] = useState<any[]>([]);\r\n const [contactRows, setContactRows] = useState<any[]>([]);\r\n const [isCreating, setIsCreating] = useState(false);\r\n\r\n //Form\r\n const {\r\n control,\r\n formState: { errors },\r\n trigger,\r\n getValues,\r\n handleSubmit,\r\n setValue,\r\n resetField,\r\n reset,\r\n watch,\r\n getFieldState\r\n\r\n } = useForm({\r\n defaultValues: {\r\n status: true,\r\n parties: {\r\n account_type: 'Company',\r\n },\r\n },\r\n mode: 'all',\r\n resolver: generateValidationSchema1()\r\n });\r\n\r\n const fieldToUpdate = {\r\n [PARTIES_FIELDS.RECEIVABLE_ACCOUNT]: 'receivable_account',\r\n [PARTIES_FIELDS.TAX_TEMPLATE]: 'default_tax',\r\n };\r\n\r\n useAccountingSetting({\r\n fieldToUpdate,\r\n companyField: PARTIES_FIELDS.COMPANY,\r\n fieldArrayName: PARTIES_FORM_ARRAY_NAME,\r\n formMethods: { control, setValue, watch, getFieldState },\r\n ...({ isUpdateAccount: true } as any),\r\n });\r\n\r\n\r\n const selectedType = useWatch({\r\n control,\r\n name: 'parties.account_type',\r\n });\r\n\r\n //Call Back functions\r\n const tableColumns = useCallback(\r\n (columns: any, tableRows: any) => {\r\n const phoneNumberCache = new Map();\r\n\r\n return transformTableColumns({\r\n columns,\r\n currencySymbol: undefined,\r\n translationFn: t,\r\n enableFooter: false,\r\n redirectionLink: undefined,\r\n redirectionLinkState: undefined,\r\n rows: tableRows,\r\n statusClasses: undefined,\r\n customizeValue: (row, columnAccessorKey, value) => {\r\n switch (columnAccessorKey) {\r\n case 'default_shipping_address':\r\n case 'default_billing_address': {\r\n return (\r\n <Box sx={{ display: \"flex\", gap: 1 }}>\r\n <Checkbox\r\n checked={Boolean(value)}\r\n sx={{ pointerEvents: 'none' }}\r\n />\r\n </Box>\r\n );\r\n }\r\n\r\n case 'phone':\r\n case 'contact_no': {\r\n if (!value) return '';\r\n const phoneKey = `phone-${value}`;\r\n if (!phoneNumberCache.has(phoneKey)) {\r\n const parsed = parsePhoneNumberFromString(`+${value}`);\r\n phoneNumberCache.set(phoneKey, parsed?.nationalNumber || '');\r\n }\r\n return phoneNumberCache.get(phoneKey);\r\n }\r\n\r\n case 'country_code': {\r\n const phone = row?.original?.phone || row?.original?.contact_no;\r\n if (!phone) return '';\r\n const countryCodeKey = `country-${phone}`;\r\n if (!phoneNumberCache.has(countryCodeKey)) {\r\n const parsed = parsePhoneNumberFromString(`+${phone}`);\r\n phoneNumberCache.set(countryCodeKey,\r\n parsed?.countryCallingCode ? `+${parsed.countryCallingCode}` : ''\r\n );\r\n }\r\n return phoneNumberCache.get(countryCodeKey);\r\n }\r\n\r\n default:\r\n return value;\r\n }\r\n }\r\n });\r\n },\r\n [t]\r\n );\r\n\r\n //Methods\r\n\r\n const handleRowOperation = async (\r\n eData: any,\r\n state: any[],\r\n setState: React.Dispatch<React.SetStateAction<any[]>>,\r\n isAddress: boolean\r\n ) => {\r\n try {\r\n const { values, row } = eData;\r\n const editRow = row.index >= 0;\r\n const payload = isAddress ? addressPayload : contactPayload;\r\n\r\n const processedValues: any = {};\r\n for (const key in payload) {\r\n if (_.has(values, key)) {\r\n processedValues[key] = values?.[key] ? values[key] : null;\r\n }\r\n }\r\n\r\n if (isAddress) {\r\n const dropdowns = {\r\n c: locationRef.current?.country,\r\n s: locationRef.current?.state,\r\n };\r\n\r\n const validatedValues = await validateAddressDefaults(processedValues, state, row.index);\r\n const addressValues = {\r\n ...validatedValues,\r\n country_name: dropdowns.c?.name,\r\n country: dropdowns.c?.id,\r\n state_name: dropdowns.s?.name,\r\n state: dropdowns.s?.id,\r\n country_data: dropdowns.c,\r\n state_data: dropdowns.s,\r\n country_id: dropdowns.c?.id,\r\n state_id: dropdowns.s?.id,\r\n };\r\n\r\n if (editRow) {\r\n return setState(state.map((ar, i) => i === row.index ? { ...ar, ...addressValues } : ar));\r\n }\r\n return setState([...state, addressValues]);\r\n }\r\n\r\n if (editRow) {\r\n return setState(state.map((ar, i) => i === row.index ? { ...ar, ...processedValues } : ar));\r\n }\r\n return setState([...state, processedValues]);\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n };\r\n\r\n const validateAddressDefaults = async (values: any, state: any[], index: number) => {\r\n let updatedValues = { ...values };\r\n const validate = (type: \"shipping\" | \"billing\") => {\r\n const u_data = [...state];\r\n const field = type === 'shipping' ? 'default_shipping_address' : 'default_billing_address';\r\n if (index >= 0) {\r\n u_data.splice(index, 1);\r\n }\r\n const hasDefault = u_data.some((d: any) => d?.[field]);\r\n\r\n if (hasDefault && values?.[field]) {\r\n throw new Error(\r\n `Another address is already marked as the default ${type} address. Please uncheck that before selecting this one`\r\n );\r\n }\r\n else if (!hasDefault) {\r\n updatedValues = {\r\n ...updatedValues,\r\n [field]: values?.[field] || state?.length == 0 ? 1 : 0,\r\n };\r\n }\r\n\r\n };\r\n\r\n await validate(\"shipping\");\r\n await validate(\"billing\");\r\n\r\n return updatedValues;\r\n };\r\n\r\n const deleteRow = async (\r\n state: any[],\r\n setState: React.Dispatch<React.SetStateAction<any[]>>,\r\n row: any\r\n ) => {\r\n const rowIndex = row.index;\r\n const updatedData = state.filter((_, i) => i !== rowIndex);\r\n setState(updatedData);\r\n return Promise.resolve();\r\n };\r\n\r\n const onChangeAddressTableField = async (e: any, t: any, r: any, col: any, selectedData: any) => {\r\n const fieldName = e?.target?.name;\r\n let updatedValues: any = null;\r\n\r\n if (col?.editProperties?.field_name) {\r\n locationRef.current = {\r\n ...locationRef.current,\r\n [col.editProperties.field_name]: selectedData,\r\n };\r\n }\r\n\r\n if (fieldName === 'country') {\r\n updatedValues = {\r\n ...r._valuesCache,\r\n country: selectedData.id,\r\n country_id: selectedData.id,\r\n state: null,\r\n state_id: null,\r\n state_name: null,\r\n };\r\n } else if (fieldName === 'state') {\r\n updatedValues = {\r\n ...r._valuesCache,\r\n state: selectedData.id,\r\n state_id: selectedData.id\r\n };\r\n } else if (fieldName === 'phone') {\r\n const p = parsePhoneNumberFromString(`+${e}`);\r\n updatedValues = {\r\n ...r._valuesCache,\r\n country_code: p?.countryCallingCode ? `+${p.countryCallingCode}` : '',\r\n };\r\n }\r\n\r\n const summaryFields = [\r\n 'contact_name',\r\n 'street_1',\r\n 'street_2',\r\n 'street_3',\r\n 'zip_code',\r\n 'city',\r\n 'state',\r\n 'country'\r\n ];\r\n\r\n if (r._valuesCache) {\r\n const fieldValues = summaryFields.map(field => {\r\n if (field === 'country') {\r\n return locationRef.current?.country?.name || '';\r\n } else if (field === 'state') {\r\n return locationRef.current?.state?.name || '';\r\n } else if (field === fieldName) {\r\n return e.target?.value || '';\r\n }\r\n return r._valuesCache?.[field] || '';\r\n });\r\n\r\n const summary = fieldValues.reduce((acc, val, idx) => {\r\n if (!val) return acc;\r\n if (!acc) return val;\r\n\r\n val = val?.name || val;\r\n acc = acc?.name || acc;\r\n\r\n return [2, 3].includes(idx) ? `${acc} ${val}` : `${acc}, \\n${val}`;\r\n }, '');\r\n\r\n r._valuesCache.summary = summary;\r\n }\r\n\r\n if (updatedValues) {\r\n r.getAllCells().forEach((c: any) => {\r\n if (_.has(updatedValues, c.column.id)) {\r\n r._valuesCache[c.column.id] = updatedValues[c.column.id];\r\n }\r\n });\r\n }\r\n\r\n return r._valuesCache;\r\n };\r\n\r\n\r\n\r\n const EMAIL_REGEX =\r\n /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\r\n const onSubmit = async () => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n\r\n const values = getValues();\r\n const formValues = values?.[PARTIES_FORM_ARRAY_NAME];\r\n let emailArray: string[] = [];\r\n\r\n if (formValues?.email_ids) {\r\n emailArray = formValues?.email_ids\r\n ?.split(/\\s*,\\s*/)\r\n .map((email_id: any) => email_id?.replaceAll(',', '')?.trim())\r\n .filter((email_id: any) => email_id.match(EMAIL_REGEX));\r\n }\r\n\r\n const payload = {\r\n party: {\r\n ...processPartiesPayload(formValues),\r\n email_ids: emailArray,\r\n account_type: selectedType,\r\n status: 1,\r\n type,\r\n company_id: formValues?.[PARTIES_FIELDS.COMPANY]?.[0] || null\r\n \r\n }\r\n };\r\n if (typeof onSave == 'function') {\r\n onSave?.(payload);\r\n return;\r\n }\r\n setIsCreating(true);\r\n try {\r\n\r\n const res = await dispatch(createParties(payload));\r\n\r\n if (res?.meta?.requestStatus === 'fulfilled') {\r\n enqueueSnackbar(`${type} ${t('common.party.msg.success')}`);\r\n closeModal();\r\n partyCreated();\r\n } else if (res?.meta?.requestStatus === 'rejected') {\r\n const errorMessage = getErrorMessage(res?.error?.message);\r\n enqueueSnackbar(errorMessage, { variant: 'error' });\r\n }\r\n } finally {\r\n setIsCreating(false);\r\n }\r\n };\r\n\r\n const closeModal = () => {\r\n resetForm()\r\n setAddressRows([]);\r\n setContactRows([]);\r\n handleModalClose?.();\r\n setIsOpen?.(false);\r\n }\r\n const resetForm = () => {\r\n reset({ [PARTIES_FORM_ARRAY_NAME]: {} });\r\n }\r\n\r\n //Use Effect\r\n useEffect(() => {\r\n const addressData = addressRows.map(a => _.omit(a, addressOmitKeys));\r\n setValue(`${PARTIES_FORM_ARRAY_NAME}.${PARTIES_FIELDS.ADDRESS}`, addressData);\r\n }, [addressRows, setValue]);\r\n\r\n useEffect(() => {\r\n const contactData = contactRows.map(c => _.omit(c, contactOmitKeys));\r\n setValue(`${PARTIES_FORM_ARRAY_NAME}.${PARTIES_FIELDS.CONTACTS}`, contactData);\r\n }, [contactRows, setValue]);\r\n\r\n useEffect(() => {\r\n setIsCreating(isLoading)\r\n }, [isLoading]);\r\n\r\n\r\n useEffect(() => {\r\n if (selectedType === 'Individual') {\r\n // Clear Company fields\r\n resetField('parties.company_name');\r\n resetField('parties.vat_number');\r\n resetField('parties.crn');\r\n }\r\n\r\n if (selectedType === 'Company') {\r\n // Clear Individual fields\r\n resetField('parties.first_name');\r\n resetField('parties.last_name');\r\n }\r\n }, [selectedType, resetField]);\r\n\r\n const basicDetailsSection = useMemo(() => (\r\n <Accordion\r\n title={\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {t(\"common.party.sections.basic_details\")}\r\n </Typography>\r\n }\r\n accordionProps={{\r\n defaultExpanded: true,\r\n className: \"form--Accordion\",\r\n }}\r\n >\r\n <Grid container spacing={2}>\r\n\r\n <Grid item xs={12} sm={12}>\r\n <DynamicRadioButton\r\n label=''\r\n name={PARTIES_FIELDS.TYPE}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n options={partyType}\r\n display='row'\r\n title={t(t('common.party.fields.type'))}\r\n titlePosition='start'\r\n position={2} />\r\n </Grid>\r\n\r\n {selectedType === \"Individual\" && (\r\n <>\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.firstName_label')}\r\n name={PARTIES_FIELDS.FIRST_NAME}\r\n placeholder={t('common.party.fields.firstName_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.lastName_label')}\r\n name={PARTIES_FIELDS.LAST_NAME}\r\n placeholder={t('common.party.fields.lastName_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n </>\r\n )}\r\n\r\n\r\n {selectedType === \"Company\" && (\r\n <>\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.company_name_label')}\r\n name={PARTIES_FIELDS.COMPANY_NAME}\r\n placeholder={t('common.party.fields.company_name_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n\r\n\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.vat_number_label')}\r\n name={PARTIES_FIELDS.VAT_NUMBER}\r\n placeholder={t('common.party.fields.vat_number_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.crn_label')}\r\n name={PARTIES_FIELDS.CRN}\r\n placeholder={t('common.party.fields.crn_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n </>\r\n )}\r\n\r\n <Grid item xs={12} sm={6}>\r\n <DynamicPhone\r\n type=\"text\"\r\n label={t('common.party.fields.contact_label')}\r\n name={PARTIES_FIELDS.CONTACT_NO}\r\n placeholder={t('common.party.fields.contact_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.email_label')}\r\n name={PARTIES_FIELDS.EMAIL_IDS}\r\n placeholder={t('common.party.fields.email_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/*Entity Name */}\r\n <Grid item xs={12} sm={6}>\r\n <DynamicSearchSelect\r\n label={t('common.party.fields.company_label')}\r\n apiType=\"company\"\r\n selectedLabel='Companies'\r\n name={PARTIES_FIELDS.COMPANY}\r\n placeholder={t('common.party.fields.company_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n is_multiselect\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6}>\r\n <DynamicSearchSelect\r\n label={t('common.party.fields.currency_label')}\r\n apiType='currency'\r\n selectedLabel='Currency'\r\n name={PARTIES_FIELDS.CURRENCY}\r\n placeholder={t('common.party.fields.currency_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n is_multiselect\r\n />\r\n </Grid>\r\n\r\n </Grid>\r\n </Accordion>\r\n ), [t, control, selectedType]);\r\n\r\n const accountingSection = useMemo(() => (\r\n <Accordion\r\n title={\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {t(\"common.party.sections.accounting\")}\r\n </Typography>\r\n }\r\n accordionProps={{\r\n defaultExpanded: true,\r\n className: \"form--Accordion\",\r\n }}\r\n >\r\n <Grid container spacing={2}>\r\n <Grid item xs={12} sm={6}>\r\n <DynamicSearchSelect\r\n label={t('common.party.fields.receivable_account_label')}\r\n apiType=\"accounts\"\r\n selectedLabel='Account'\r\n name={PARTIES_FIELDS.RECEIVABLE_ACCOUNT}\r\n placeholder={t('common.party.fields.receivable_account_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n customeFilter={{ '&account_type.eq': 'Receivable' }}\r\n options={[]}\r\n />\r\n </Grid>\r\n <Grid item xs={12} sm={6}>\r\n <DynamicSearchSelect\r\n label={t('common.party.fields.tax_template_label')}\r\n apiType=\"taxTemplate\"\r\n selectedLabel='Tax Template'\r\n name={PARTIES_FIELDS.TAX_TEMPLATE}\r\n placeholder={t('common.party.fields.tax_template_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n options={[]}\r\n />\r\n </Grid>\r\n </Grid>\r\n </Accordion>\r\n ), [t, control]);\r\n\r\n const addressSection = useMemo(() => (\r\n <Accordion\r\n title={\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {t(\"common.party.sections.address\")}\r\n <span className='errorIndicator'>*</span>\r\n {errors?.[PARTIES_FORM_ARRAY_NAME]?.[PARTIES_FIELDS.ADDRESS] && (\r\n <span className='error'>\r\n {errors?.[PARTIES_FORM_ARRAY_NAME]?.[PARTIES_FIELDS.ADDRESS]?.message}\r\n </span>\r\n )}\r\n </Typography>\r\n }\r\n accordionProps={{\r\n defaultExpanded: true,\r\n className: \"form--Accordion\",\r\n }}\r\n >\r\n <Grid spacing={4}>\r\n <Grid item xs={12}>\r\n <MaterialTable\r\n rows={[...addressRows]}\r\n columns={tableColumns(addressColumns)}\r\n paginationModel={{ pageNo: 1, limit: 10 }}\r\n totalPages={20}\r\n enableColumnDragging={false}\r\n isResetRow={false}\r\n columnOrder={['mrt-row-select']}\r\n enableRowSelection={false}\r\n enableBottomToolbar\r\n disableDefaultActionColumn\r\n editDisplayMode='row'\r\n enableRowCreate\r\n onCreateRow={(data) => handleRowOperation(data, addressRows, setAddressRows, true)}\r\n onEditRow={(data) => handleRowOperation(data, addressRows, setAddressRows, true)}\r\n onDeleteRow={(row) => deleteRow(addressRows, setAddressRows, row)}\r\n onChangeRowField={onChangeAddressTableField}\r\n />\r\n </Grid>\r\n </Grid>\r\n </Accordion>\r\n // eslint-disable-next-line\r\n ), [t, addressRows, tableColumns, errors]);\r\n\r\n const contactSection = useMemo(() => (\r\n <Accordion\r\n title={\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {t(\"common.party.sections.contact\")}\r\n <span className='errorIndicator'>*</span>\r\n {errors?.[PARTIES_FORM_ARRAY_NAME]?.[PARTIES_FIELDS.CONTACTS] && (\r\n <span className='error'>\r\n {errors?.[PARTIES_FORM_ARRAY_NAME]?.[PARTIES_FIELDS.CONTACTS]?.message}\r\n </span>\r\n )}\r\n </Typography>\r\n }\r\n accordionProps={{\r\n defaultExpanded: true,\r\n className: \"form--Accordion\",\r\n }}\r\n >\r\n <Grid spacing={4}>\r\n <Grid item xs={12}>\r\n\r\n <MaterialTable\r\n rows={[...contactRows]}\r\n columns={tableColumns(contactColumns)}\r\n paginationModel={{ pageNo: 1, limit: 10 }}\r\n totalPages={20}\r\n enableColumnDragging={false}\r\n isResetRow={false}\r\n columnOrder={['mrt-row-select']}\r\n enableRowSelection={false}\r\n enableBottomToolbar\r\n disableDefaultActionColumn\r\n editDisplayMode='row'\r\n enableRowCreate\r\n onCreateRow={(data) => handleRowOperation(data, contactRows, setContactRows, false)}\r\n onEditRow={(data) => handleRowOperation(data, contactRows, setContactRows, false)}\r\n onDeleteRow={(row) => deleteRow(contactRows, setContactRows, row)}\r\n onChangeRowField={onChangeAddressTableField}\r\n />\r\n </Grid>\r\n </Grid>\r\n </Accordion>\r\n // eslint-disable-next-line\r\n ), [t, contactRows, tableColumns, errors]);\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={closeModal}\r\n maxWidth='lg'\r\n fullWidth\r\n sx={{ overflowY: 'hidden' }}\r\n {...modalProps}\r\n >\r\n {isCreating && <ModalLoader />}\r\n <form onSubmit={handleSubmit(onSubmit)} className=\"scroll-container\" style={{ position: 'relative', overflow: 'auto' }}>\r\n <DialogTitle className='itemEntryModal--DialogTitle'\r\n >\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {`Add ${type}`}\r\n </Typography>\r\n <IconButton onClick={closeModal}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n\r\n <DialogContent>\r\n {basicDetailsSection}\r\n <Divider className='form--SectionDivider' />\r\n {addressSection}\r\n <Divider className='form--SectionDivider' />\r\n {contactSection}\r\n <Divider className='form--SectionDivider' />\r\n {accountingSection}\r\n </DialogContent>\r\n\r\n <DialogActions className='itemEntryModal--DialogAction' sx={{\r\n position: 'sticky',\r\n bottom: 0,\r\n backgroundColor: 'white',\r\n zIndex: 1,\r\n padding: '8px 24px',\r\n justifyContent: 'end'\r\n }}>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='itemEntryModal--DialogAction--WhiteBtn'\r\n onClick={closeModal}\r\n >\r\n {t('common.cancel')}\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n onClick={handleSubmit(onSubmit)}\r\n >\r\n {t('common.save')}\r\n </Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </Modal>\r\n );\r\n};\r\n","import * as Yup from 'yup';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport { PARTIES_FIELDS, PARTIES_FORM_ARRAY_NAME } from './utils/constant';\r\n\r\nexport const generateValidationSchema = () => {\r\n\treturn yupResolver(\r\n\t\tYup.object().shape({\r\n\t\t\t[PARTIES_FORM_ARRAY_NAME]: Yup.object().shape({\r\n\t\t\t\t[PARTIES_FIELDS.FIRST_NAME]: Yup.string().required('First name is required'),\r\n\t\t\t\t[PARTIES_FIELDS.LAST_NAME]: Yup.string().required('Last name is required'),\r\n\t\t\t\t[PARTIES_FIELDS.COMPANY]: Yup.array().required('Company is required'),\r\n\t\t\t\t[PARTIES_FIELDS.CURRENCY]: Yup.array().required('Currency is required'),\r\n\t\t\t\t[PARTIES_FIELDS.ADDRESS]: Yup.array()\r\n\t\t\t\t\t.required('Please add atleast one address')\r\n\t\t\t\t\t.min(1, 'Please add atleast one address'),\r\n\t\t\t\t[PARTIES_FIELDS.CONTACTS]: Yup.array()\r\n\t\t\t\t\t.required('Please add atleast one Contact')\r\n\t\t\t\t\t.min(1, 'Please add atleast one Contact')\r\n\t\t\t})\r\n\t\t})\r\n\t);\r\n};\r\n\r\nexport const generateValidationSchema1 = () => {\r\n\treturn yupResolver(\r\n\t\tYup.object().shape({\r\n\t\t\t[PARTIES_FORM_ARRAY_NAME]: Yup.object().shape({\r\n\t\t\t\t[PARTIES_FIELDS.TYPE]: Yup.string().required('Customer type is required'),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.FIRST_NAME]: Yup.string().when('account_type', {\r\n\t\t\t\t\tis: (val: any) => val === 'Individual',\r\n\t\t\t\t\tthen: () => Yup.string().required('First name is required'),\r\n\t\t\t\t\totherwise: () => Yup.string().optional().nullable()\r\n\t\t\t\t}),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.LAST_NAME]: Yup.string().when('account_type', {\r\n\t\t\t\t\tis: (val: any) => val === 'Individual',\r\n\t\t\t\t\tthen: () => Yup.string().required('Last name is required'),\r\n\t\t\t\t\totherwise: () => Yup.string().optional().nullable()\r\n\t\t\t\t}),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.COMPANY_NAME]: Yup.string().when('account_type', {\r\n\t\t\t\t\tis: (val: any) => val === 'Company',\r\n\t\t\t\t\tthen: () => Yup.string().required('Company is required'),\r\n\t\t\t\t\totherwise: () => Yup.string().optional().nullable()\r\n\t\t\t\t}),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.VAT_NUMBER]: Yup.string().when('account_type', {\r\n\t\t\t\t\tis: (val: any) => val === 'Company',\r\n\t\t\t\t\tthen: () => Yup.string().required('vat_number is required for type Company'),\r\n\t\t\t\t\totherwise: () => Yup.string().optional().nullable()\r\n\t\t\t\t}),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.CRN]: Yup.string().when('account_type', {\r\n\t\t\t\t\tis: (val: any) => val === 'Company',\r\n\t\t\t\t\tthen: () => Yup.string().required('crn is required for type Company'),\r\n\t\t\t\t\totherwise: () => Yup.string().optional().nullable()\r\n\t\t\t\t}),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.COMPANY]: Yup.array().required('Company is required'),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.CURRENCY]: Yup.array().required('Currency is required'),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.ADDRESS]: Yup.array().nullable().notRequired(),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.CONTACTS]: Yup.array()\r\n\t\t\t\t\t.required('Please add atleast one Contact')\r\n\t\t\t\t\t.min(1, 'Please add atleast one Contact'),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.RECEIVABLE_ACCOUNT]: Yup.number().required('Receivable account is required'),\r\n\t\t\t\t[PARTIES_FIELDS.TAX_TEMPLATE]: Yup.number().required('Tax template is required')\r\n\t\t\t})\r\n\r\n\t\t})\r\n\t);\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { Controller } from 'react-hook-form';\nimport {\n\tBox,\n\tDivider,\n\tIconButton,\n\tInputAdornment,\n\tMenuItem,\n\tMenuItemProps,\n\tOutlinedInput\n} from '@mui/material';\nimport PropTypes from 'prop-types';\n\nimport Select from '../../../select/select';\nimport ChipOrPlaceholder from './chip-or-placeholder';\nimport Checkbox from '../../../checkbox/checkbox';\nimport Typography from '../../../typography/typography';\nimport Chip from '../../../chip/chip';\nimport { MoreIcon } from '../../../icons';\nimport './element.scss';\nimport { Add, Close } from '@mui/icons-material';\nimport { useTranslation } from \"react-i18next\";\n\ninterface IMenuItems extends MenuItemProps {\n\toptions: any[];\n\tmultiple: boolean;\n\tplaceholder: string;\n\twith_checkboxes: boolean;\n\tvalues: string | string[];\n\tfield: any;\n}\n\nconst generateMenuItems = ({\n\toptions,\n\tmultiple,\n\tplaceholder,\n\twith_checkboxes,\n\tvalues,\n\tfield\n}: IMenuItems) => {\n\tconst items: React.ReactElement[] = [];\n\tif (!multiple) {\n\t\titems.push(\n\t\t\t<MenuItem disabled value='' sx={{ opacity: `0 !important`, height: `0 !important`, p: `0 !important`, m: `0 !important` }}>\n\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t<em>{placeholder}</em>\n\t\t\t\t</Typography>\n\t\t\t</MenuItem>\n\t\t);\n\t}\n\toptions?.forEach((option, index) => {\n\t\titems.push(\n\t\t\t<MenuItem\n\t\t\t\tvalue={option.value}\n\t\t\t\tkey={index}\n\t\t\t\tdisabled={Boolean(option.disabled)}\n\t\t\t\tclassName={option?.isGroup ? 'select--MenuItemHeader' : ''}>\n\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tchecked={Boolean(values && values?.indexOf(option.value) > -1)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</MenuItem>\n\t\t);\n\t\tif (option?.isGroup && Array.isArray(option?.options)) {\n\t\t\toption.options.forEach((opt) => {\n\t\t\t\titems.push(\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tvalue={opt.value}\n\t\t\t\t\t\tdisabled={Boolean(opt.disabled)}\n\t\t\t\t\t\tsx={{ pl: 5 }}\n\t\t\t\t\t\tkey={`${option.value}-${opt.value}`}>\n\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\tchecked={Boolean(values && values?.indexOf(opt.value) > -1)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n\tif (field.enable_footer) {\n\t\titems.push(\n\t\t\t<Box>\n\t\t\t\t<Divider flexItem />\n\t\t\t\t<MenuItem sx={{ gap: 1 }} onClick={field.onFooterClick}>\n\t\t\t\t\t<Add fontSize='small' />\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>\n\t\t\t\t\t\tCreate New {field.label}\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuItem>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn items;\n};\nconst SelectedItems = ({\n\tdata,\n\toptions\n}: {\n\tdata: string[];\n\toptions: any[];\n}) => {\n\tconst displayTitle = data.map(\n\t\t(selectedItem) =>\n\t\t\toptions?.find((option: any) => option.value === selectedItem)?.label ||\n\t\t\tselectedItem\n\t);\n\tconst fDisplayTitle = displayTitle.filter(Boolean)\n\treturn (\n\t\t<Typography\n\t\t\ttype='s4'\n\t\t\tcolor='inherit'\n\t\t\tsx={{ display: 'flex', gap: 1, alignItems: 'center', mt: 0.5 }}>\n\t\t\t{fDisplayTitle.slice(0.4).join(', ')}\n\t\t\t{data.length > 4 && (\n\t\t\t\t<Chip variant='outlined' type='normal' label={<MoreIcon />} />\n\t\t\t)}\n\t\t</Typography>\n\t);\n};\n\nconst DynamicSelect = React.memo((props: any) => {\n\tconst [options, setOptions] = useState([]);\n\tconst [selectedValue, setSelectedValue] = useState(null);\n\tconst { handleOptions } = props;\n\tuseEffect(() => {\n\t\tif (handleOptions) {\n\t\t\thandleOptions(selectedValue);\n\t\t}\n\t}, [handleOptions, selectedValue]);\n\tconst handleSearch = (search: string) => {\n\t\tif (props.options?.length && search) {\n\t\t\tconst searchedOptions = props.options.filter((opt) =>\n\t\t\t\tReact.isValidElement(opt.label)\n\t\t\t\t\t? opt?.searchLabel?.toLowerCase()?.includes(search.toLowerCase())\n\t\t\t\t\t: opt.label.toLowerCase().includes(search.toLowerCase())\n\t\t\t);\n\t\t\tsetOptions(searchedOptions);\n\t\t} else {\n\t\t\tsetOptions(props.options);\n\t\t}\n\t};\n\n\tconst removeUndefine = (selectOptions: any[]) => {\n\t\treturn selectOptions?.filter((option) => option);\n\t};\n\tconst handleSetOptions = useCallback(() => {\n\t\tsetOptions(props.options);\n\t}, [props.options]);\n\n\tuseEffect(() => {\n\t\thandleSetOptions();\n\t}, [handleSetOptions]);\n\t\tconst { t } = useTranslation();\n\t\n\treturn (\n\t\t<Controller\n\t\t\tcontrol={props.formControl}\n\t\t\tname={`${props.fieldArrayName}.${props.name}`}\n\t\t\trender={({ field, fieldState }) => (\n\t\t\t\t<>\n\t\t\t\t\t{props.placeholder === 'Select Currency'\n\t\t\t\t\t\t? setSelectedValue(field.value)\n\t\t\t\t\t\t: setSelectedValue(null)}\n\t\t\t\t\t<Select\n\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t// onFocus={() => {\n\t\t\t\t\t\t// \tsetOptions(props.options);\n\t\t\t\t\t\t// }}\n\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\tdataPosition={props.position}\n\t\t\t\t\t\tdataName={`${props.fieldArrayName}.${props.name}`}\n\t\t\t\t\t\tplaceholder={props.placeholder}\n\t\t\t\t\t\tlabel={props.label}\n\t\t\t\t\t\tvalue={\n\t\t\t\t\t\t\tfield.value?.id || field.value?.label || field.value || (props.is_multiselect ? [] : '')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefaultValue={\n\t\t\t\t\t\t\tprops.defaultValue || (props.is_multiselect ? [] : '')\n\t\t\t\t\t\t}\n\t\t\t\t\t\trequired={props.formType === 'builder' ? false : props.required}\n\t\t\t\t\t\tsize={props.size || 'small'}\n\t\t\t\t\t\tmultiple={props.is_multiselect || false}\n\t\t\t\t\t\tdisabled={props.disabled}\n\t\t\t\t\t\tvariant='outlined'\n\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\tprops.is_multiselect && removeUndefine(field.value)?.length\n\t\t\t\t\t\t\t\t? 'MultiSelect'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\trenderValue={(selected: string | string[]) => (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{Array.isArray(selected) ? (\n\t\t\t\t\t\t\t\t\t<ChipOrPlaceholder\n\t\t\t\t\t\t\t\t\t\tselectedLabel={props.selectedLabel}\n\t\t\t\t\t\t\t\t\t\tdata={removeUndefine(selected)}\n\t\t\t\t\t\t\t\t\t\tplaceholder={props.placeholder}\n\t\t\t\t\t\t\t\t\t\tonDelete={props?.onChipRemove}\n\t\t\t\t\t\t\t\t\t\tdisabled={props.disabled}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\toptions?.find(\n\t\t\t\t\t\t\t\t\t\t(option: any) =>\n\t\t\t\t\t\t\t\t\t\t\t(option.value?.id || option.value) === selected\n\t\t\t\t\t\t\t\t\t)?.label ||\n\t\t\t\t\t\t\t\t\tselected ||\n\t\t\t\t\t\t\t\t\tprops.placeholder\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tsearchPlaceholder={`${t('common.search')} ${props.label}`}\n\t\t\t\t\t\thandleSearch={handleSearch}\n\t\t\t\t\t\terror={Boolean(fieldState.error?.message)}\n\t\t\t\t\t\thelperText={fieldState.error?.message || ''}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\tinput={\n\t\t\t\t\t\t\t!props?.is_multiselect && !props.disabled && field?.value ? (\n\t\t\t\t\t\t\t\t<OutlinedInput\n\t\t\t\t\t\t\t\t\tlabel=''\n\t\t\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t\t\t<InputAdornment position='end'>\n\t\t\t\t\t\t\t\t\t\t\t{field.value && (\n\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label='clear selection'\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => field.onChange(null)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tedge='end'\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ mr: 1.5 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize='small'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Close sx={{ fontSize: '1rem' }} />\n\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\tloading={props?.is_loading}>\n\t\t\t\t\t\t{generateMenuItems({\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\tmultiple: Boolean(props.is_multiselect),\n\t\t\t\t\t\t\tplaceholder: props.placeholder,\n\t\t\t\t\t\t\tvalues: field.value,\n\t\t\t\t\t\t\twith_checkboxes: true,\n\t\t\t\t\t\t\tfield: props\n\t\t\t\t\t\t})}\n\t\t\t\t\t</Select>\n\t\t\t\t\t{props.is_multiselect && Array.isArray(field?.value) && (\n\t\t\t\t\t\t<SelectedItems data={field.value} options={options} />\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t/>\n\t);\n});\n\nDynamicSelect.propTypes = {\n\tname: PropTypes.string.isRequired,\n\tplaceholder: PropTypes.string.isRequired,\n\tlabel: PropTypes.string.isRequired,\n\tsize: PropTypes.string,\n\toptions: PropTypes.arrayOf(\n\t\tPropTypes.shape({\n\t\t\tlabel: PropTypes.string,\n\t\t\tvalue: PropTypes.string\n\t\t})\n\t).isRequired,\n\tformControl: PropTypes.shape({\n\t\tregister: PropTypes.func.isRequired,\n\t\tsetValue: PropTypes.func\n\t}).isRequired,\n\tdefaultValue: PropTypes.string,\n\tfieldArrayName: PropTypes.string,\n\tid: PropTypes.string,\n\trequired: PropTypes.bool,\n\tis_multiselect: PropTypes.bool,\n\tposition: PropTypes.number,\n\tformType: PropTypes.string,\n\ttypeOfField: PropTypes.string,\n\tdisabled: PropTypes.bool,\n\tonChipRemove: PropTypes.func,\n\tenable_footer: PropTypes.bool,\n\tfooter_action: PropTypes.string,\n\tonFooterClick: PropTypes.any,\n\tis_loading: PropTypes.bool,\n\tselectedLabel: PropTypes.string\n};\n\nexport { DynamicSelect };\nexport default DynamicSelect;\n","// import { Controller } from 'react-hook-form';\nimport PropTypes from \"prop-types\";\nimport Button from \"../../../button/button\";\n\n// { control, index }\n\nconst DynamicButton = (props: any) => {\n const { type, onClick, className, disable, ...rest } = props;\n\n return (\n <Button\n type={type}\n onClick={onClick}\n className={className}\n {...rest}\n disabled={disable}\n >\n {props.text}\n </Button>\n );\n};\n\nDynamicButton.propTypes = {\n text: PropTypes.string.isRequired,\n onClick: PropTypes.func,\n type: PropTypes.string,\n style: PropTypes.object,\n variant: PropTypes.string,\n className: PropTypes.string,\n disable: PropTypes.bool,\n startIcon: PropTypes.node,\n};\n\nexport { DynamicButton };\nexport default DynamicButton;\n","import React from 'react';\nimport { Control, Controller } from 'react-hook-form';\nimport Checkbox from '../../../checkbox/checkbox';\nimport Typography from '../../../typography/typography';\nimport { CheckboxProps, Stack, StackProps } from '@mui/material';\nimport { useLanguage } from '../../../../hooks/useLangauge';\n\ninterface IDynamicCheckbox {\n\tformControl: Control<any>;\n\tfieldArrayName: string;\n\tname: string;\n\tlabel?: string;\n\tposition?: number;\n\tdisabled?: boolean;\n\ttitlePosition?: 'start' | 'end';\n\ttypeOfField?: string;\n\ttitle: string;\n\ttitleColor?: string; // New prop for title color\n\tcheckboxProps?: CheckboxProps;\n\tstackProps?: StackProps;\n}\n\nconst DynamicCheckBox: React.FC<IDynamicCheckbox> = ({\n\tformControl,\n\tfieldArrayName,\n\tname,\n\tlabel,\n\tposition,\n\tdisabled,\n\ttitlePosition = 'end',\n\ttitle,\n\ttitleColor = 'theme.secondary.800', // Default color\n\tcheckboxProps,\n\tstackProps,\n}) => {\n\tconst {isRtl}=useLanguage();\n\treturn (\n\t\t<Controller\n\t\t\tcontrol={formControl}\n\t\t\tname={`${fieldArrayName}.${name}`}\n\t\t\trender={({ field }) => (\n\t\t\t\t<>\n\t\t\t\t\t{label && (\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\ttype='s5'\n\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\tcolor='theme.secondary.800'\n\t\t\t\t\t\t\tdata-position={position}\n\t\t\t\t\t\t\tsx={{ mb: 0.5 }}>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<Stack direction='row' spacing={isRtl?'':0.25} alignItems='center' {...stackProps}>\n\t\t\t\t\t\t{titlePosition === 'start' && (\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\tcolor={titleColor}> {/* Use titleColor prop here */}\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tchecked={Boolean(field.value)}\n\t\t\t\t\t\t\tonChange={field.onChange}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\tsx={{ m: 1 }}\n\t\t\t\t\t\t\t{...checkboxProps}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{titlePosition === 'end' && (\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\tcolor={titleColor}> {/* Use titleColor prop here */}\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</>\n\t\t\t)}\n\t\t/>\n\t);\n};\n\nexport default DynamicCheckBox;","/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport { Controller/* , useFormContext */ } from 'react-hook-form';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useMemo } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport './element.scss';\r\nimport DatePicker from '../../../date-picker/date-picker';\r\n\r\ninterface DynamicDateProps {\r\n formControl: any;\r\n name: string;\r\n label: string;\r\n fieldArrayName?: string;\r\n required?: boolean;\r\n position?: number;\r\n formType?: string;\r\n placeholder?: string;\r\n defaultValue?: any;\r\n is_future_dates_allowed?: boolean;\r\n is_past_dates_allowed?: boolean;\r\n typeOfField?: string;\r\n disabled?: boolean;\r\n min_date?: any;\r\n max_date?: any;\r\n}\r\n\r\nconst DynamicDate = React.memo<DynamicDateProps>((props) => {\r\n // const formContext = useFormContext();\r\n\r\n // Memoize field name to prevent unnecessary recalculations\r\n const fieldName = useMemo(() =>\r\n `${props.fieldArrayName}.${props.name}`,\r\n [props.fieldArrayName, props.name]\r\n );\r\n\r\n // Memoize date calculations to prevent recalculation on every render\r\n const { minDate, maxDate } = useMemo(() => {\r\n const min = dayjs(props.min_date || null).isValid()\r\n ? dayjs(props.min_date)\r\n : null;\r\n\r\n const max = dayjs(props.max_date || null).isValid()\r\n ? dayjs(props.max_date)\r\n : null;\r\n\r\n return { minDate: min, maxDate: max };\r\n }, [props.min_date, props.max_date]);\r\n\r\n // Memoize required prop calculation\r\n const isRequired = useMemo(() =>\r\n props.formType === 'builder' ? false : props.required,\r\n [props.formType, props.required]\r\n );\r\n\r\n return (\r\n <Controller\r\n control={props.formControl}\r\n name={fieldName}\r\n render={({ field, fieldState }) => (\r\n <DatePicker\r\n {...field}\r\n // {...props}\r\n dataPosition={props.position}\r\n dataName={fieldName}\r\n label={props.label}\r\n placeholder={props.placeholder}\r\n required={isRequired}\r\n defaultValue={props.defaultValue}\r\n disableFutureDates={props.is_future_dates_allowed}\r\n disablePastDates={props.is_past_dates_allowed}\r\n helperText={fieldState.error?.message}\r\n error={Boolean(fieldState.error)}\r\n disabled={props.disabled}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n {...(props?.views && { views: props?.views })}\r\n />\r\n )}\r\n />\r\n );\r\n});\r\n\r\nDynamicDate.displayName = 'DynamicDate';\r\n\r\nDynamicDate.propTypes = {\r\n formControl: PropTypes.shape({\r\n register: PropTypes.func.isRequired,\r\n setValue: PropTypes.func\r\n }).isRequired,\r\n name: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n fieldArrayName: PropTypes.string,\r\n required: PropTypes.bool,\r\n position: PropTypes.number,\r\n formType: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n defaultValue: PropTypes.any,\r\n is_future_dates_allowed: PropTypes.bool,\r\n is_past_dates_allowed: PropTypes.bool,\r\n typeOfField: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n min_date: PropTypes.any,\r\n max_date: PropTypes.any\r\n};\r\n\r\nexport { DynamicDate };\r\nexport default DynamicDate;","import { Controller } from \"react-hook-form\";\nimport TextField from \"../../../text-field/text-field\";\nimport PropTypes from \"prop-types\"\nimport { InputAdornment } from \"@mui/material\";\nconst DynamicCurrency = (props: any) => {\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field, fieldState }) => (\n <TextField\n {...field}\n name={`${props.fieldArrayName}.${props.name}`}\n fullWidth\n label={props.label}\n defaultValue={props.default_value.replace(/[^0-9]/g, \"\")}\n placeholder={props.placeholder}\n multiline={props.is_multiline || false}\n disabled={props.disabled}\n required={props.is_required}\n inputProps={{\n step: props?.float_step || \"0\" , \n min : props.min_length || 0 , \n max : props.max_length || 1000 ,\n inputMode: 'numeric',\n pattern : `${props.is_negative}` ? '-?[0-9]*' : '[0-9]*' , \n \n }}\n InputProps={{\n startAdornment: (\n <InputAdornment\n position=\"start\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRight: '1px solid rgba(0, 0, 0, 0.23)',\n width: 50,\n height: '100%',\n borderBottomLeftRadius: 4, \n borderTopLeftRadius: 4,\n }}\n >\n {(props.currencyType !== null ? props.currencyType : \"-\")}\n </InputAdornment>\n )\n\n }}\n\n error={Boolean(fieldState.error?.message)}\n helperText={fieldState.error?.message || \"\"}\n onBlur = {field.onBlur}\n onChange ={(e : any) => {\n const numericValue = e.target.value.replace(/[^0-9]/g , \"\");\n field.onChange(numericValue)\n }}\n />\n )}\n />\n )\n}\nDynamicCurrency.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n _formState: PropTypes.object.isRequired\n }).isRequired,\n defaultValue: PropTypes.string,\n name: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n is_multiline: PropTypes.bool,\n min: PropTypes.number,\n max: PropTypes.number,\n min_length: PropTypes.number,\n max_length: PropTypes.number,\n float_step: PropTypes.string,\n position: PropTypes.number,\n formType: PropTypes.string,\n disabled: PropTypes.bool,\n InputProps: PropTypes.object,\n placeholder : PropTypes.string , \n currencyType :PropTypes.string ,\n \n}\nexport { DynamicCurrency };\nexport default DynamicCurrency;\n\n\n\n","import PropTypes from \"prop-types\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Grid, Box } from \"@mui/material\";\nimport { useDrag, useDrop } from \"react-dnd\";\n\nimport \"./element.scss\";\nimport images from \"../../../../assets/images\";\n\nconst DynamicElementHOC = (props: any) => {\n const [, ref] = useDrag({\n type: \"element\",\n item: { index: props.index },\n });\n const [, drop] = useDrop({\n accept: \"element\",\n hover: (draggedElement: any) => {\n const draggedIndex = draggedElement.index;\n const dropIndex = props.index;\n if (dropIndex === draggedIndex) {\n return;\n }\n\n props.swap(draggedIndex, dropIndex);\n },\n drop: () => {\n props.elementSwap();\n },\n });\n\n \n const activeClassName = `${\n props.activeIndex\n ? \"form-element-wrapper--Active\"\n : \"form-element-wrapper--Element\"\n }`;\n const defaultClassName = `${\n props?.children?.props?.typeOfField === \"custom\"\n ? \"\"\n : \"form-element-wrapper--Default\"\n }`;\n\n return (\n <Grid\n item\n xs={props?.element === \"table\" ? 12 : 12}\n className={`${activeClassName} ${defaultClassName}`}\n ref={(node) => drop(ref(node))}\n >\n <Box sx={{ width: \"100%\" }} onClick={props.onClick}>\n {props.children}\n </Box>\n <div className=\"form-element-wrapper--Actions\">\n <img\n src={images.duplicate}\n onClick={() => props.handleDuplicate(props.index)}\n />\n {props?.children?.props?.typeOfField === \"custom\" && (\n <CloseIcon\n style={{ fontSize: \"1rem\", color: \"#656669\" }}\n onClick={() => {\n props.removeElement(props.index);\n props.setElementHoc();\n }}\n />\n )}\n </div>\n </Grid>\n );\n};\n\nDynamicElementHOC.propTypes = {\n removeElement: PropTypes.func.isRequired,\n index: PropTypes.number.isRequired,\n onClick: PropTypes.func,\n children: PropTypes.node.isRequired,\n swap: PropTypes.func,\n elementSwap: PropTypes.func,\n activeIndex: PropTypes.bool,\n handleDuplicate: PropTypes.func,\n setElementHoc: PropTypes.func,\n element: PropTypes.string,\n elementPerRow : PropTypes.number \n};\n\nexport { DynamicElementHOC };\nexport default DynamicElementHOC;\n","import { Controller } from \"react-hook-form\";\nimport TextField from \"../../../text-field/text-field\";\nimport PropTypes from \"prop-types\"\nimport { InputAdornment, Select, MenuItem } from \"@mui/material\";\nimport { useState } from \"react\";\nimport KeyboardArrowDownOutlinedIcon from '@mui/icons-material/KeyboardArrowDownOutlined';\nconst DynamicInputSelect = (props: any) => {\n const [defaultOption, setSelectOption] = useState(props.options[0].value); //need to be update \n const handleOptionChange = (event: any) => {\n setSelectOption(event.target.value);\n };\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field, fieldState }) => (\n <TextField\n {...field}\n name={`${props.fieldArrayName}.${props.name}`}\n fullWidth\n label={props.label}\n placeholder={props.placeholder}\n multiline={props.is_multiline || false}\n disabled={props.disabled}\n required={props.is_required}\n inputProps={{\n step: props?.float_step || \"0\",\n min: props.min_length || 0,\n max: props.max_length || 1000,\n inputMode: 'string',\n\n\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment\n position=\"start\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderLeft: '1px solid rgba(0, 0, 0, 0.23)',\n padding: 1,\n height: '100%',\n borderBottomLeftRadius: 4,\n borderTopLeftRadius: 4,\n backgroundColor: 'rgba(245 , 245 , 245 )',\n margin: 0,\n boxSizing: 'border-box',\n borderRadius: 0,\n\n }}\n\n >\n <Select\n value={defaultOption}\n onChange={handleOptionChange}\n sx={{\n height: '100%',\n '&:focus': {\n backgroundColor: 'rgba(245 , 245 , 245 )' , // Prevent background color change on focus\n },\n '&:hover': {\n backgroundColor: 'rgba(245 , 245 , 245 )', // Prevent background color change on hover\n },\n '&:active': {\n backgroundColor: 'rgba(245 , 245 , 245)', // Prevent background color change on active\n },\n '&.Mui-focused': {\n backgroundColor: '#fff', // Override the focus background color\n },\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: '#fff', // Prevent border color change on focus\n },\n }}\n variant=\"standard\"\n disableUnderline\n\n IconComponent={KeyboardArrowDownOutlinedIcon}\n\n >\n {props.options?.map((item: any, index: any) => (\n <MenuItem\n key={index}\n value={item.value}\n sx={{\n '&:hover': {\n backgroundColor: 'rgba(245 , 245 , 245 )', // Prevent background color change on hover\n },\n '&.Mui-selected': {\n backgroundColor: 'rgba(245 , 245 , 245)', // Prevent background color change on selection\n },\n '&.Mui-selected:hover': {\n backgroundColor: 'rgba(245 , 245 , 245)', // Prevent background color change on selection hover\n },\n }}\n >\n {item.label}\n </MenuItem>\n ))}\n </Select>\n\n </InputAdornment>\n )\n\n }}\n\n error={Boolean(fieldState.error?.message)}\n helperText={fieldState.error?.message || \"\"}\n onBlur={field.onBlur}\n onChange={(e: any) => {\n field.onChange(e.target.value)\n }}\n />\n )}\n />\n )\n}\nDynamicInputSelect.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n _formState: PropTypes.object.isRequired\n }).isRequired,\n defaultValue: PropTypes.string,\n name: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n is_multiline: PropTypes.bool,\n min: PropTypes.number,\n max: PropTypes.number,\n min_length: PropTypes.number,\n max_length: PropTypes.number,\n float_step: PropTypes.string,\n position: PropTypes.number,\n formType: PropTypes.string,\n disabled: PropTypes.bool,\n InputProps: PropTypes.object,\n placeholder: PropTypes.string,\n\n\n}\nexport { DynamicInputSelect };\nexport default DynamicInputSelect;\n","import React, { useState } from 'react';\nimport { Controller, Control, FieldValues } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport { Autocomplete } from '@mui/material';\nimport TextField from '../../../text-field/text-field';\nimport Chip from '../../../chip/chip';\n// import { Close } from '@mui/icons-material';\nimport Typography from '../../../typography/typography';\nimport './element.scss';\n\n// Define the type for props\ninterface DynamicTagsInputProps<TFieldValues extends FieldValues> {\n formControl: Control<TFieldValues>;\n name: string;\n fieldArrayName?: string;\n label: React.ReactNode;\n}\n\n// Define the component using generic type TFieldValues\nconst DynamicTagsInput = <TFieldValues extends FieldValues>({\n formControl,\n name,\n fieldArrayName = '',\n label,\n}: DynamicTagsInputProps<TFieldValues>) => {\n // Local state for managing the input value\n const [inputValue, setInputValue] = useState<string>('');\n\n return (\n <Controller\n control={formControl}\n name={`${fieldArrayName}.${name}`}\n render={({ field: { value = '', onChange } }) => {\n const tags = value ? value.split(',').map((tag: string) => tag.trim()) : [];\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Tab') {\n // Get the trimmed input value\n const trimmedInputValue = inputValue.trim();\n \n // Check if input is not empty and not already a tag\n if (trimmedInputValue && !tags.includes(trimmedInputValue)) {\n event.preventDefault(); // Prevent default tab action\n\n // Add new tag\n const newTags = [...tags, trimmedInputValue];\n const newValueString = newTags.join(', ');\n onChange(newValueString);\n setInputValue(''); // Clear the input field\n }\n }\n };\n\n return (\n <Autocomplete\n clearIcon={false}\n options={[]}\n freeSolo\n multiple\n fullWidth\n value={tags}\n onChange={(event: React.ChangeEvent<unknown>, newValue: string[] | null) => {\n const newValueString = newValue?.join(', ') || '';\n onChange(newValueString);\n }}\n renderTags={(value: string[], renderTagProps) =>\n value.map((option, index) => (\n <Chip\n key={index}\n // deleteIcon={<Close fontSize='large' />}\n // variant='outlined'\n type='normal'\n label={\n <Typography color='theme.secondary.1000' type='s4'>\n {option}\n </Typography>\n }\n {...renderTagProps({ index })}\n />\n ))\n }\n renderInput={(params) => (\n <TextField\n label={label}\n type=\"text\"\n {...params}\n value={inputValue}\n onChange={(event:any) => setInputValue(event.target.value)}\n onKeyDown={handleKeyDown}\n />\n )}\n />\n );\n }}\n />\n );\n};\n\n// Define PropTypes for runtime validation (optional)\nDynamicTagsInput.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n _formState: PropTypes.object.isRequired,\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n fieldArrayName: PropTypes.string,\n};\n\nexport { DynamicTagsInput };\nexport default DynamicTagsInput;\n\n","import { Controller } from \"react-hook-form\";\nimport PropTypes from \"prop-types\";\n\nimport \"./element.scss\";\nimport InfoCard from \"../../../info-card/info-card\";\n\nconst DynamicInfo = (props: any) => {\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field }) => (\n <InfoCard\n {...field}\n dataPosition={props.position}\n dataName={`${props.fieldArrayName}.${props.name}`}\n label={props.label}\n value={props.defaultValue || \"Info\"}\n />\n )}\n />\n );\n};\n\nDynamicInfo.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n fieldArrayName: PropTypes.string,\n position: PropTypes.number,\n formType: PropTypes.string,\n defaultValue: PropTypes.string,\n typeOfField: PropTypes.string,\n disabled: PropTypes.bool,\n};\n\nexport { DynamicInfo };\nexport default DynamicInfo;\n","import React from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport PropTypes from \"prop-types\";\n\nimport \"./element.scss\";\nimport UploadMedia from \"../../../upload-media/upload-media\";\nimport Typography from \"../../../typography/typography\";\n\nconst DynamicMedia = React.memo((props: any) => {\n\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field, fieldState: { error } }) => (\n <>\n <UploadMedia\n // {...field}\n dataPosition={props.position}\n dataName={`${props.fieldArrayName}.${props.name}`}\n label={props.label}\n required={props.formType === \"builder\" ? false : props.required}\n type={props.field_type}\n max_size={props?.max_size}\n disabled={props?.disabled}\n onChange={field?.onChange}\n name={props.name}\n value={field?.value || props?.value}\n multiple={Boolean(props?.is_multiple)}\n />\n {error &&\n <Typography color=\"theme.error.600\" type=\"s5\">{error.message}</Typography>\n }\n </>\n )}\n />\n );\n});\n\nDynamicMedia.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n is_multiple: PropTypes.bool,\n position: PropTypes.number,\n formType: PropTypes.string,\n placeholder: PropTypes.string,\n default_value: PropTypes.string,\n type: PropTypes.string,\n field_type: PropTypes.string,\n max_size: PropTypes.number,\n typeOfField: PropTypes.string,\n disabled: PropTypes.bool,\n};\n\nexport { DynamicMedia };\nexport default DynamicMedia;\n","import PropTypes from \"prop-types\";\nimport { Grid, /* Box, */ IconButton, Menu, MenuItem } from \"@mui/material\";\n\nimport \"./element.scss\";\nimport Typography from \"../../../typography/typography\";\nimport images from \"../../../../assets/images\";\nimport React from \"react\";\nimport Button from \"../../../button/button\";\nimport AddIcon from \"@mui/icons-material/Add\";\n\nconst DynamicSectionHOC = (props: any) => {\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n\n const handleActionClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n return (\n <Grid\n className={\n props.className ? `formBuilder ${props.className}` : \"formBuilder\"\n }\n >\n <div className=\"formBuilder--Header\">\n <Typography\n type=\"s4\"\n fontWeight={\"medium\"}\n mb={0.5}\n color={\"theme.secondary.800\"}\n sx={{ cursor: \"pointer\", ...(!props.label?.trim() ? { fontStyle: 'italic' } : {}) }}\n onClick={props.onClick}\n data-position={props.position}\n data-name={`${props.fieldArrayName}.${props.name}`}\n >\n {props.label || \"(Unnamed Section)\"}\n </Typography>\n <div>\n <IconButton color=\"inherit\" size=\"small\" onClick={handleActionClick}>\n <img src={images.more} alt=\"more icon\" />\n </IconButton>\n <Menu\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={() => setAnchorEl(null)}\n >\n <MenuItem\n onClick={() => {\n props.handleAccordion();\n setAnchorEl(null);\n }}\n >\n Make this section accordion\n </MenuItem>\n {!props.remove_section && (\n <MenuItem\n sx={{ color: \"#F86060\" }}\n onClick={() => {\n props.removeSection();\n setAnchorEl(null);\n }}\n >\n Remove Section\n </MenuItem>\n )}\n </Menu>\n </div>\n </div>\n <div\n className={`${\n props.activeIndex ? \"formBuilder--Active\" : \"formBuilder--Section\"\n }`}\n >\n {/* <Box sx={{ width: \"100%\" }} className=\"formBuilder--GridLayout\">\n {props.children}\n </Box> */}\n <Grid container sx={{ mb: 2 }}>\n {props.children}\n </Grid>\n {!props.isFormSwitcher ? (\n <Button\n variant=\"outlined\"\n style={{ color: \"#292D32\", marginBottom: \"0.375rem\" }}\n startIcon={<AddIcon />}\n data-position={props.position}\n data-name={`${props.fieldArrayName}.${props.name}`}\n onClick={props.handleAddButton}\n >\n Add\n </Button>\n ) : null}\n </div>\n </Grid>\n );\n};\n\nDynamicSectionHOC.propTypes = {\n index: PropTypes.number.isRequired,\n onClick: PropTypes.func,\n children: PropTypes.node.isRequired,\n label: PropTypes.string,\n position: PropTypes.number,\n fieldArrayName: PropTypes.string,\n className: PropTypes.string,\n removeSection: PropTypes.func.isRequired,\n handleAccordion: PropTypes.func,\n activeIndex: PropTypes.bool,\n handleAddButton: PropTypes.func,\n remove_section: PropTypes.bool,\n isFormSwitcher: PropTypes.bool,\n};\n\nexport { DynamicSectionHOC };\nexport default DynamicSectionHOC;\n","// import { MRT_ColumnDef, MRT_RowData } from 'material-react-table';\r\nimport { Add } from '@mui/icons-material';\r\nimport Button from '../../../button/button';\r\nimport MaterialTable, { MaterialTableColumnProps } from '../../../material-table/material-table';\r\nimport Typography from '../../../typography/typography';\r\nimport { Box } from '@mui/material';\r\nimport './element.scss';\r\nimport { parse, stringify } from 'flatted';\r\nimport React, { useCallback } from 'react';\r\nimport { useAuth } from '../../../../hooks/useAuth';\r\nimport { formatDate } from '../../../../utils/dateFormat';\r\nimport Chip from '../../../chip/chip';\r\nimport Checkbox from '../../../checkbox/checkbox';\r\nimport { MRT_Row } from 'material-react-table';\r\nimport _ from 'lodash';\r\nimport { formatAmount, getFileName, toFixedWithNumbers } from \"../../../../utils/common\";\r\nimport { useTranslation } from 'react-i18next';\r\nimport { formatLabel } from '../../../../utils/format-text';\r\nexport interface ICellChangeParam {\r\n\tvalue: any,\r\n\tdata: any,\r\n\tcol: MaterialTableColumnProps,\r\n\trow: MRT_Row<any>,\r\n\tname: string,\r\n\tuRows: any[]\r\n}\r\n\r\ninterface IDynamicTable {\r\n\tcolumns: any[];\r\n\trows?: any[];\r\n\tposition: number;\r\n\tlabel: string;\r\n\tdisabled?: boolean;\r\n\ttypeOfField?: string;\r\n\tonAddClick?: (name?: string) => void;\r\n\tname?: string;\r\n\tis_button?: boolean;\r\n\tdisableTableAddButton?: boolean;\r\n\totherButtons?: React.ReactNode[];\r\n\tdefaultActionColumnItems?: React.ReactElement[];\r\n\tonTableCellChange: ({ value, data, col, row }: ICellChangeParam) => void;\r\n\tcurrencySymbol?: string;\r\n}\r\n\r\nconst DynamicTable: React.FC<IDynamicTable> = React.memo(({\r\n\tcolumns,\r\n\tposition,\r\n\tlabel,\r\n\trows = [],\r\n\tonAddClick,\r\n\tname,\r\n\tis_button = true,\r\n\tdisableTableAddButton,\r\n\totherButtons,\r\n\tdefaultActionColumnItems,\r\n\tonTableCellChange,\r\n\tcurrencySymbol = '',\r\n\t...rest\r\n\t// disabled\r\n}) => {\r\n\tconst { t } = useTranslation();\r\n\tconst { user } = useAuth();\r\n\tconst cs = currencySymbol || user?.currency_data?.symbol || '';\r\n\tconst currencyFormat = user?.currency_data?.number_format || '';\r\n\tconst symbolPosition = user?.currency_data?.position || 'before';\r\n\tconst takeCurencyOrPercentage = useCallback((type: string, value: any) => {\r\n\t\tswitch (type) {\r\n\t\t\tcase 'Percentage':\r\n\t\t\t\treturn `${value}%`;\r\n\t\t\tcase 'Fixed Amount':\r\n\t\t\t\treturn `${cs}${value}`;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\treturn value;\r\n\t\t}\r\n\t}, [cs]);\r\n\r\n\tconst isCellChangeAFunc = onTableCellChange instanceof Function\r\n\r\n\tconst tableColumns = useCallback(\r\n\t\t(columns: MaterialTableColumnProps[]) => {\r\n\t\t\treturn columns.map((column) => ({\r\n\t\t\t\t...column,\r\n\t\t\t\theader: t(column.header),\r\n\t\t\t\tCell: ({ renderedCellValue, row }: any) => {\r\n\t\t\t\t\tlet v = renderedCellValue;\r\n\t\t\t\t\tif (typeof v === 'number' && v && String(v)?.includes('.')) {\r\n\t\t\t\t\t\treturn v = toFixedWithNumbers(v)\r\n\t\t\t\t\t}\r\n\t\t\t\t\tswitch (column.type) {\r\n\t\t\t\t\t\tcase 'formattedString':\r\n\t\t\t\t\t\t\tv = formatLabel(renderedCellValue) || '-';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'date':\r\n\t\t\t\t\t\t\tv = formatDate(\r\n\t\t\t\t\t\t\t\trenderedCellValue,\r\n\t\t\t\t\t\t\t\tcolumn.editProperties?.dateFormat || 'DD-MM-YYYY'\r\n\t\t\t\t\t\t\t) || '-';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'currency':\r\n\t\t\t\t\t\t\tv = renderedCellValue ? `${formatAmount(renderedCellValue, currencyFormat, symbolPosition, cs)}` : '-';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'stringOrArray': {\r\n\t\t\t\t\t\t\tconst type = row.original?.promotion_map_data?.type;\r\n\t\t\t\t\t\t\tv = Array.isArray(renderedCellValue)\r\n\t\t\t\t\t\t\t\t? renderedCellValue.map((rcv) => (\r\n\t\t\t\t\t\t\t\t\trcv ? <Chip label={takeCurencyOrPercentage(type, rcv)} /> : null\r\n\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t: takeCurencyOrPercentage(type, renderedCellValue);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcase \"checkbox\": {\r\n\t\t\t\t\t\t\tv = <Checkbox\r\n\t\t\t\t\t\t\t\tchecked={Boolean(renderedCellValue)}\r\n\t\t\t\t\t\t\t\tonClick={isCellChangeAFunc\r\n\t\t\t\t\t\t\t\t\t? (e) => onTableCellChange({\r\n\t\t\t\t\t\t\t\t\t\tvalue: e.target.checked,\r\n\t\t\t\t\t\t\t\t\t\tdata: row.original,\r\n\t\t\t\t\t\t\t\t\t\tcol: column,\r\n\t\t\t\t\t\t\t\t\t\trow: row,\r\n\t\t\t\t\t\t\t\t\t\tname: name,\r\n\t\t\t\t\t\t\t\t\t\tuRows: rows\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/>;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcase \"array\": {\r\n\t\t\t\t\t\t\tv = Array.isArray(renderedCellValue) && renderedCellValue.length ?\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0.5, alignItems: 'center', flexWrap: 'wrap' }}>\r\n\t\t\t\t\t\t\t\t\t{renderedCellValue.map(r => (<Chip type='normal' label={_.get(r, column?.valueGet, '')} active />))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t: '-';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcase \"file\": {\r\n\t\t\t\t\t\t\tv = getFileName(renderedCellValue) || '-';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn v;\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t},\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t[cs, takeCurencyOrPercentage, currencySymbol, rows]\r\n\t);\r\n\treturn (\r\n\t\t<Box data-position={position}>\r\n\t\t\t<Typography\r\n\t\t\t\ttype='s5'\r\n\t\t\t\tweight='medium'\r\n\t\t\t\tcolor='theme.secondary.800'\r\n\t\t\t\tdata-position={position}\r\n\t\t\t\tsx={{ mb: 0.5 }}>\r\n\t\t\t\t{t(label)}\r\n\t\t\t</Typography>\r\n\t\t\t<Box /* sx={disabled ? { pointerEvents: 'none' } : {}} */>\r\n\t\t\t\t<MaterialTable\r\n\t\t\t\t\tcolumnOrder={['mrt-row-select']}\r\n\t\t\t\t\t// rows={parse(stringify(rows))}\r\n\t\t\t\t\trows={rows}\r\n\t\t\t\t\tcolumns={tableColumns(parse(stringify(columns)))}\r\n\t\t\t\t\ttotalPages={20}\r\n\t\t\t\t\tpaginationModel={{ pageNo: 1, limit: 10 }}\r\n\t\t\t\t\tenableEditing={false}\r\n\t\t\t\t\tenableColumnDragging={false}\r\n\t\t\t\t\tenableBottomToolbar={false}\r\n\t\t\t\t\tdefaultActionColumnItems={defaultActionColumnItems}\r\n\t\t\t\t\t{...rest}\r\n\t\t\t\t/>\r\n\t\t\t\t{is_button && !disableTableAddButton && (\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\t\t\tjustifyContent: 'space-between',\r\n\t\t\t\t\t\t\tmt: 1\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='outlined'\r\n\t\t\t\t\t\t\tonClick={() => onAddClick?.(name)}\r\n\t\t\t\t\t\t\tstartIcon={<Add />}\r\n\t\t\t\t\t\t\tclassName='table--AddButton'>\r\n\t\t\t\t\t\t\tAdd\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t{Boolean(otherButtons?.length) && otherButtons}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\nexport default DynamicTable;\r\n","import { styled } from \"@mui/material\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { TimePicker as Time } from \"@mui/x-date-pickers/TimePicker\";\r\nimport Typography from \"../typography/typography\";\r\nimport \"./time-picker.scss\";\r\nimport { memo } from \"react\";\r\n\r\nexport interface TimePickerProps {\r\n label: string;\r\n disabled?: boolean;\r\n error?: boolean;\r\n name?: string;\r\n value?: string | number | Date;\r\n helperText?: string;\r\n dataPosition?: number;\r\n dataName?: string;\r\n is24hrFormat?: boolean;\r\n placeholder?: string;\r\n required?: boolean;\r\n}\r\n\r\nconst StyledTimePicker = styled(Time)(({ theme: { palette } }) => ({\r\n \"& .MuiOutlinedInput-root\": {\r\n padding: \"0\",\r\n color: palette.theme?.secondary[800],\r\n \"& fieldset\": {\r\n borderColor: palette.theme?.secondary[400],\r\n },\r\n \"&:hover fieldset\": {\r\n borderColor: palette.theme?.secondary[500],\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n borderWidth: \"0.0625rem\",\r\n borderStyle: \"solid\",\r\n borderColor: palette.theme?.primary[700],\r\n },\r\n \"&.Mui-error fieldset\": {\r\n borderColor: palette.theme?.error[600],\r\n },\r\n \"&.Mui-disabled\": {\r\n background: palette.theme?.secondary[200],\r\n color: palette.theme?.secondary[800],\r\n },\r\n \"& .MuiInputBase-input::placeholder\": {\r\n color: palette.theme?.secondary[800],\r\n opacity: 1,\r\n },\r\n },\r\n \"& .MuiFormHelperText-root\": {\r\n marginLeft: 0,\r\n color: palette.theme?.secondary[800],\r\n \"&.Mui-error\": {\r\n color: palette.theme?.error[600],\r\n },\r\n },\r\n \"& .MuiIconButton-root\": {\r\n marginRight: 0,\r\n },\r\n \"& .MuiPickersCalendarHeader-labelContainer\": {\r\n fontWeight: 600,\r\n },\r\n}));\r\n\r\nconst TimePicker = memo((props: TimePickerProps) => {\r\n const {\r\n label,\r\n disabled,\r\n error,\r\n helperText,\r\n dataName,\r\n dataPosition,\r\n is24hrFormat = false,\r\n placeholder,\r\n required = false,\r\n ...rest\r\n } = props;\r\n return (\r\n <div>\r\n <LocalizationProvider dateAdapter={AdapterDayjs}>\r\n {label && (\r\n <Typography\r\n type=\"s4\"\r\n fontWeight={\"medium\"}\r\n mb={0.5}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n data-position={dataPosition}\r\n data-name={dataName}\r\n >\r\n {label} {required && <span className=\"requiredStar\">*</span>}\r\n </Typography>\r\n )}\r\n <StyledTimePicker\r\n {...rest}\r\n disabled={disabled}\r\n slotProps={{\r\n textField: {\r\n helperText: helperText,\r\n error: error,\r\n placeholder: placeholder || \"HH:mm A\",\r\n // required: required,\r\n },\r\n }}\r\n format={is24hrFormat ? \"HH:MM\" : \"hh:mm a\"}\r\n className=\"timePicker\"\r\n />\r\n </LocalizationProvider>\r\n </div>\r\n );\r\n});\r\n\r\nexport { TimePicker };\r\nexport default TimePicker;\r\n","import { Controller } from 'react-hook-form';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport './element.scss';\r\nimport TimePicker from '../../../time-picker/time-picker';\r\nimport React from 'react';\r\n\r\nconst DynamicTime = React.memo((props: any) => {\r\n\r\n\treturn (\r\n\t\t<Controller\r\n\t\t\tcontrol={props.formControl}\r\n\t\t\tname={`${props.fieldArrayName}.${props.name}`}\r\n\t\t\trender={({ field, fieldState }) => (\r\n\t\t\t\t<TimePicker\r\n\t\t\t\t\t{...field}\r\n\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\tprops?.onChange(e);\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tdataPosition={props.position}\r\n\t\t\t\t\tdataName={`${props.fieldArrayName}.${props.name}`}\r\n\t\t\t\t\tlabel={props.label}\r\n\t\t\t\t\tplaceholder={props.placeholder}\r\n\t\t\t\t\trequired={props.formType === 'builder' ? false : props.required}\r\n\t\t\t\t\tis24hrFormat={props.options === '24hr'}\r\n\t\t\t\t\tdisabled={props.disabled}\r\n\t\t\t\t\thelperText={fieldState.error?.message}\r\n\t\t\t\t\terror={Boolean(fieldState.error)}\r\n\t\t\t\t\t{...(props?.rest || {})}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t/>\r\n\t);\r\n});\r\n\r\n\r\nDynamicTime.propTypes = {\r\n\tformControl: PropTypes.shape({\r\n\t\tregister: PropTypes.func.isRequired,\r\n\t\tsetValue: PropTypes.func\r\n\t}).isRequired,\r\n\tname: PropTypes.string.isRequired,\r\n\tlabel: PropTypes.string.isRequired,\r\n\tfieldArrayName: PropTypes.string,\r\n\trequired: PropTypes.bool,\r\n\tposition: PropTypes.number,\r\n\tformType: PropTypes.string,\r\n\toption: PropTypes.string,\r\n\tplaceholder: PropTypes.string,\r\n\ttypeOfField: PropTypes.string,\r\n\tdisabled: PropTypes.bool,\r\n\tonChange: PropTypes.func,\r\n\trest: PropTypes.object,\r\n};\r\n\r\nexport { DynamicTime };\r\nexport default DynamicTime;\r\n","import { styled } from \"@mui/material/styles\";\nimport Switch, { SwitchProps } from \"@mui/material/Switch\";\nimport Stack from \"@mui/material/Stack\";\nimport Typography, { ITypography } from \"../typography/typography\";\nimport { useLanguage } from \"../../hooks/useLangauge\";\nimport { memo } from \"react\";\n\nexport interface ISwitchProps extends SwitchProps {\n label?: string;\n labelPosition?: \"start\" | \"end\";\n typographyProps?: ITypography;\n}\n\nconst CustomisedSwitch = styled((props: ISwitchProps) => (\n <Switch focusVisibleClassName=\".Mui-focusVisible\" disableRipple {...props} />\n))(({ theme, size, checked }) => ({\n width: 24,\n height: 16,\n padding: 0,\n \"& .MuiSwitch-switchBase\": {\n padding: 0,\n margin: size === \"medium\" ? 2 : 1,\n transitionDuration: \"300ms\",\n \"&.Mui-checked\": {\n transform: size === \"medium\" ? \"translateX(16px)\" : \"translateX(8px)\",\n color: \"#fff\",\n \"& + .MuiSwitch-track\": {\n backgroundColor: theme.palette.mode === \"dark\" ? \"#2ECA45\" : \"#65C466\",\n opacity: 1,\n border: 0,\n },\n \"&.Mui-disabled + .MuiSwitch-track\": {\n opacity: 0.5,\n },\n },\n \"&.Mui-focusVisible .MuiSwitch-thumb\": {\n color: \"#33cf4d\",\n border: \"6px solid #fff\",\n },\n \"&.Mui-disabled .MuiSwitch-thumb\": {\n color:\n theme.palette.mode === \"light\"\n ? theme.palette.grey[100]\n : theme.palette.grey[600],\n },\n \"&.Mui-disabled + .MuiSwitch-track\": {\n opacity: theme.palette.mode === \"light\" ? 0.7 : 0.3,\n },\n },\n \"& .MuiSwitch-thumb\": {\n boxSizing: \"border-box\",\n width: 14,\n height: 14,\n border: checked ? 0 : `1px solid ${theme.palette.theme?.secondary[300]}`,\n },\n \"& .MuiSwitch-track\": {\n borderRadius: 26 / 2,\n backgroundColor: theme.palette.theme?.secondary[200],\n opacity: 1,\n transition: theme.transitions.create([\"background-color\"], {\n duration: 500,\n }),\n },\n ...(size === \"medium\" && {\n width: 42,\n height: 26,\n \"& .MuiSwitch-thumb\": {\n boxSizing: \"border-box\",\n width: 22,\n height: 22,\n border: checked ? 0 : `1px solid ${theme.palette.theme?.secondary[300]}`,\n },\n }),\n}));\n\nconst ToggleSwitch: React.FC<ISwitchProps> = memo(({\n label,\n labelPosition = \"end\",\n typographyProps,\n ...rest\n}) => {\n const {isRtl}=useLanguage();\n return (\n <Stack direction=\"row\" spacing={isRtl ? '' : 0.5} alignItems=\"center\">\n {labelPosition === \"start\" && (\n <Typography type=\"s3\" color=\"theme.secondary.1000\" {...typographyProps}>\n {label}\n </Typography>\n )}\n <CustomisedSwitch sx={{ m: 1 }} {...rest} />\n {labelPosition === \"end\" && (\n <Typography type=\"s3\" color=\"theme.secondary.1000\" {...typographyProps}>\n {label}\n </Typography>\n )}\n </Stack>\n );\n});\n\nexport default ToggleSwitch;\n","import { Control, Controller } from \"react-hook-form\";\nimport Typography from \"../../../typography/typography\";\nimport ToggleSwitch, {\n ISwitchProps,\n} from \"../../../toggle-switch/toggle-switch\";\nimport { memo } from \"react\";\n\ninterface IDynamicToggleButton {\n formControl: Control<any>;\n fieldArrayName: string;\n name: string;\n label: string;\n position: number;\n disabled?: boolean;\n titlePosition?: \"start\" | \"end\";\n typeOfField?: string;\n title: string;\n toggleSwitchProps?: ISwitchProps;\n}\n\nconst DynamicToggleButton: React.FC<IDynamicToggleButton> = memo(({\n formControl,\n fieldArrayName,\n name,\n label,\n position,\n disabled,\n titlePosition,\n title,\n toggleSwitchProps,\n}) => {\n\treturn (\n\t\t<Controller\n\t\t\tcontrol={formControl}\n\t\t\tname={`${fieldArrayName}.${name}`}\n\t\t\trender={({ field }) => (\n\t\t\t\t<>\n\t\t\t\t\t<Typography\n\t\t\t\t\t\ttype='s5'\n\t\t\t\t\t\tcolor='theme.secondary.800'\n\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\tdata-position={position}\n\t\t\t\t\t\tsx={{ mb: 0.5 }}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<ToggleSwitch\n\t\t\t\t\t\t{...toggleSwitchProps}\n\t\t\t\t\t\tname={name}\n\t\t\t\t\t\tchecked={field.value}\n\t\t\t\t\t\tonChange={field.onChange}\n\t\t\t\t\t\tlabel={title}\n\t\t\t\t\t\tdisabled={Boolean(disabled)}\n\t\t\t\t\t\tlabelPosition={titlePosition}\t\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t/>\n\t);\n});\n\nexport default DynamicToggleButton;\n","// import React from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport { RadioGroup } from \"@mui/material\";\nimport Typography from \"../../typography/typography\";\nimport { memo } from \"react\";\n\nconst FormSwitcher = memo(({\n children,\n isFormSwitcher,\n control,\n fieldArrayName,\n formSwitcherName,\n label,\n resetForm,\n}: any) => {\n if (isFormSwitcher) {\n return (\n <Controller\n control={control}\n name={`${fieldArrayName}.${formSwitcherName}`}\n render={({ field }) => (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"24px\",\n }}\n >\n {label ? (\n <Typography\n type=\"s5\"\n style={{ fontWeight: 500 }}\n color={\"theme.secondary.900\"}\n >\n {label}\n </Typography>\n ) : null}\n <RadioGroup\n value={field.value}\n onChange={(e) => {\n resetForm(e.target.value)\n field.onChange(e.target.value)\n }}\n row={true}\n >\n {children}\n </RadioGroup>\n </div>\n )}\n />\n );\n }\n return null;\n});\n\nexport { FormSwitcher };\nexport default FormSwitcher;\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { memo, useMemo, useCallback } from 'react';\r\nimport { Grid, Divider, FormControlLabel, Radio } from '@mui/material';\r\nimport DynamicInput from '../form-builder/form-builder-element/text';\r\nimport DynamicDate from '../form-builder/form-builder-element/date';\r\nimport DynamicTime from '../form-builder/form-builder-element/time';\r\nimport DynamicPhone from '../form-builder/form-builder-element/phone';\r\nimport DynamicSearchSelect from '../form-builder/form-builder-element/dynamic-select';\r\nimport DynamicMedia from '../form-builder/form-builder-element/media';\r\nimport DynamicInfo from '../form-builder/form-builder-element/info';\r\nimport DynamicToggleButton from '../form-builder/form-builder-element/toggle-button';\r\nimport DynamicCheckBox from '../form-builder/form-builder-element/checkbox';\r\nimport DynamicTable from '../form-builder/form-builder-element/table';\r\nimport DynamicRadioButton from '../form-builder/form-builder-element/radio-button';\r\nimport DynamicTagsInput from '../form-builder/form-builder-element/dynamic-tags-input';\r\nimport DynamicCurrency from '../form-builder/form-builder-element/dynamic-currency-input';\r\nimport DynamicInputSelect from '../form-builder/form-builder-element/dynamic-input-select';\r\nimport ChipGenerator from '../../chip-generator/chip-generator';\r\nimport { LocationSearchSelect } from '../../location-select';\r\nimport FormSwitcher from './form-switcher';\r\nimport Typography from '../../typography/typography';\r\nimport Accordion from '../../accordion/accordion';\r\n\r\n// Types for better type safety\r\ninterface Field {\r\n name?: string;\r\n label: string;\r\n field_type: string;\r\n is_fullwidth?: boolean;\r\n custom_width?: number;\r\n is_hidden?: boolean;\r\n is_required?: boolean;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n value?: any;\r\n default_value?: any;\r\n title?: string;\r\n title_position?: string;\r\n table_columns?: any[];\r\n table_rows?: any[];\r\n component?: React.ReactNode;\r\n field_properties?: {\r\n apiType?: string;\r\n customeFilter?: any;\r\n attributes?: any;\r\n disabledIds?: any[];\r\n sortOrder?: string;\r\n maxChips?: number;\r\n allowDuplicates?: boolean;\r\n };\r\n validation?: any;\r\n filterField?: string;\r\n}\r\n\r\ninterface Section {\r\n label?: string;\r\n is_accordion?: boolean;\r\n disabled?: boolean;\r\n form_switcher_label?: string;\r\n}\r\n\r\ninterface FormSectionProps {\r\n section: Section;\r\n index: number;\r\n members?: Field[];\r\n switchForms?: any[];\r\n isFormSwitcher: boolean;\r\n control: any;\r\n fieldArrayName: string;\r\n formSwitcherName: string;\r\n displayAvtar?: boolean;\r\n isButton?: boolean;\r\n currencyOption?: any;\r\n values: any;\r\n onBlur?: (e: any, fieldName?: string) => void;\r\n setValue: (name: string, value: any) => void;\r\n onSelectFooterClick?: (field: Field) => void;\r\n getSelectedData?: (row: any, key: any) => void;\r\n setCurrencyOptions: (options: any) => void;\r\n refreshOptions: any;\r\n handleFieldCleanUp: (forms: any[]) => void;\r\n handleSetCountryCodeField: (country: any, field: Field, fieldArrayName: string, values: any) => void;\r\n handleTableAddClick: (field: Field) => void;\r\n onTableCellChange?: (data: any) => void;\r\n // setDetailsData: (data: any) => void;\r\n t: (key: string) => string;\r\n images: any;\r\n}\r\n\r\n// Memoized field component to prevent unnecessary re-renders\r\nconst MemoizedField = memo(({\r\n field,\r\n fieldName,\r\n sectionLabel,\r\n index,\r\n ...props\r\n}: {\r\n field: Field;\r\n fieldName: string;\r\n sectionLabel?: string;\r\n index: number;\r\n [key: string]: any;\r\n}) => {\r\n const gridSize = useMemo(() =>\r\n field.is_fullwidth ? 12 : (field.custom_width ?? 6),\r\n [field.is_fullwidth, field.custom_width]\r\n );\r\n\r\n const fieldKey = useMemo(() =>\r\n `${sectionLabel}-${fieldName}-${index}`,\r\n [sectionLabel, fieldName, index]\r\n );\r\n\r\n const commonProps = useMemo(() => ({\r\n ...field,\r\n key: fieldKey,\r\n name: fieldName,\r\n position: index,\r\n formControl: props.control,\r\n fieldArrayName: props.fieldArrayName,\r\n required: field.is_required,\r\n label: props.t(field.label),\r\n placeholder: props.t(field.placeholder),\r\n defaultValue: field.value || field.default_value,\r\n disabled: field.disabled\r\n }), [field, fieldName, index, fieldKey, props.control, props.fieldArrayName, props.t]);\r\n\r\n const handleBlur = useCallback((e: any) => {\r\n if (props.onBlur && typeof props.onBlur === 'function') {\r\n props.onBlur(e, fieldName);\r\n }\r\n }, [props.onBlur, fieldName]);\r\n\r\n const endIcon = useMemo(() => {\r\n const iconMap: Record<string, string> = {\r\n email: props.images.sms,\r\n url: props.images.url,\r\n currency: props.images.dollar,\r\n geoLocation: props.images.location\r\n };\r\n\r\n const iconSrc = iconMap[field.field_type];\r\n return iconSrc ? <img src={iconSrc} alt={field.field_type} /> : null;\r\n }, [field.field_type, props.images]);\r\n\r\n const relationLabel = useMemo(() => (\r\n field.field_type === \"relation\" ? (\r\n <span className=\"formSection--Relation\">\r\n {props.t(field.label)}\r\n <img src={props.images.relation} alt=\"relation\" />\r\n </span>\r\n ) : props.t(field.label)\r\n ), [field.field_type, field.label, props.t, props.images.relation]);\r\n\r\n // Render field based on type\r\n const renderField = () => {\r\n switch (field.field_type) {\r\n case \"text\":\r\n case \"email\":\r\n case \"url\":\r\n case \"currency\":\r\n case \"number\":\r\n case \"geoLocation\":\r\n case \"relation\":\r\n return (\r\n <DynamicInput\r\n {...commonProps}\r\n key={commonProps.key}\r\n label={relationLabel}\r\n onBlur={handleBlur}\r\n type={field.field_type}\r\n endIcon={endIcon}\r\n disabled={field.disabled || field.field_type === \"relation\"}\r\n />\r\n );\r\n\r\n case \"date\":\r\n return <DynamicDate {...commonProps} key={commonProps.key} />;\r\n\r\n case \"time\":\r\n return <DynamicTime {...commonProps} key={commonProps.key} />;\r\n\r\n case \"phone\":\r\n return (\r\n <DynamicPhone\r\n {...commonProps}\r\n key={commonProps.key}\r\n setCountryCodeField={(country: any) =>\r\n props.handleSetCountryCodeField(country, field, props.fieldArrayName, props.values)\r\n }\r\n />\r\n );\r\n\r\n case \"select\":\r\n return (\r\n <DynamicSearchSelect\r\n {...commonProps}\r\n key={commonProps.key}\r\n apiType={field.field_properties?.apiType}\r\n customeFilter={field.field_properties?.customeFilter}\r\n attributes={field.field_properties?.attributes}\r\n disabledIds={field.field_properties?.disabledIds}\r\n onChipRemove={() => props.setValue(`${props.fieldArrayName}.${fieldName}`, [])}\r\n {\r\n ...(!field?.addType || !field?.field_properties?.addType\r\n ? { onFooterClick: () => props.onSelectFooterClick?.(field) }\r\n : {})\r\n }\r\n handleOptions={props.setCurrencyOptions}\r\n getSelectedData={props.getSelectedData}\r\n refresh={props.refreshOptions}\r\n sortOrder={field.field_properties?.sortOrder}\r\n showCancelButton={field.field_properties?.showCancelButton}\r\n addType={field?.addType || field?.field_properties?.addType}\r\n modalComponentProps={field?.field_properties?.modalComponentProps}\r\n />\r\n );\r\n\r\n case \"file\":\r\n case \"image\":\r\n return <DynamicMedia {...commonProps} key={commonProps.key} />;\r\n\r\n case \"info\":\r\n return <DynamicInfo {...commonProps} key={commonProps.key} />;\r\n\r\n case \"toggleButton\":\r\n return (\r\n <DynamicToggleButton\r\n {...commonProps}\r\n key={commonProps.key}\r\n titlePosition={field.title_position}\r\n title={props.t(field.title)}\r\n />\r\n );\r\n\r\n case \"checkbox\":\r\n return (\r\n <DynamicCheckBox\r\n {...commonProps}\r\n key={commonProps.key}\r\n titlePosition={field.title_position}\r\n title={props.t(field.title)}\r\n />\r\n );\r\n\r\n case \"table\":\r\n return (\r\n <DynamicTable\r\n {...commonProps}\r\n key={commonProps.key}\r\n columns={field.table_columns}\r\n rows={field.table_rows}\r\n onAddClick={() => props.handleTableAddClick(field)}\r\n disableTableAddButton={Boolean(field.disableTableAddButton)}\r\n is_button={props.isButton}\r\n onTableCellChange={props.onTableCellChange}\r\n />\r\n );\r\n\r\n case \"radioButton\":\r\n return (\r\n <DynamicRadioButton\r\n {...commonProps}\r\n key={commonProps.key}\r\n titlePosition={field.title_position}\r\n title={props.t(field.title)}\r\n />\r\n );\r\n\r\n case \"customComponent\":\r\n return field.component;\r\n\r\n case \"tagsInput\":\r\n return (\r\n <DynamicTagsInput\r\n {...commonProps}\r\n key={commonProps.key}\r\n label={relationLabel}\r\n type={field.field_type}\r\n endIcon={endIcon}\r\n />\r\n );\r\n\r\n case \"currency_with_amount\":\r\n return (\r\n <DynamicCurrency\r\n {...commonProps}\r\n key={commonProps.key}\r\n currencyType={props.currencyOption}\r\n />\r\n );\r\n\r\n case \"select_with_input\":\r\n return (\r\n <DynamicInputSelect\r\n {...commonProps}\r\n currencyType={props.currencyOption}\r\n />\r\n );\r\n\r\n case \"chipInput\":\r\n return (\r\n <ChipGenerator\r\n {...commonProps}\r\n key={commonProps.key}\r\n maxChips={field.field_properties?.maxChips}\r\n allowDuplicates={field.field_properties?.allowDuplicates}\r\n validation={field.validation}\r\n endIcon={endIcon}\r\n onChipAdd={(chip: any) => console.log('Chip added:', chip)}\r\n onChipRemove={(chip: any, index: number) => console.log('Chip removed:', chip, 'at index:', index)}\r\n />\r\n );\r\n\r\n case \"location_select\":\r\n return (\r\n <LocationSearchSelect\r\n fieldArrayName={props.fieldArrayName}\r\n filterField={field.filterField}\r\n getSelectedData={(row: any[]) => props.getSelectedData(row)}\r\n locationFieldName={field.name}\r\n addType=\"location\"\r\n enable_footer={true}\r\n />\r\n );\r\n\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n // For table fields, use full width\r\n if (field.field_type === \"table\" || field.field_type === \"customComponent\") {\r\n return (\r\n <Grid item xs={12}>\r\n {renderField()}\r\n </Grid>\r\n );\r\n }\r\n\r\n return (\r\n <Grid item xs={gridSize}>\r\n {renderField()}\r\n </Grid>\r\n );\r\n});\r\n\r\nMemoizedField.displayName = 'MemoizedField';\r\n\r\n// Memoized FormSwitcher component\r\nconst MemoizedFormSwitcher = memo(({\r\n section,\r\n switchForms,\r\n isFormSwitcher,\r\n control,\r\n fieldArrayName,\r\n formSwitcherName,\r\n handleFieldCleanUp,\r\n t\r\n}: {\r\n section: Section;\r\n switchForms?: any[];\r\n isFormSwitcher: boolean;\r\n control: any;\r\n fieldArrayName: string;\r\n formSwitcherName: string;\r\n handleFieldCleanUp: (forms: any[]) => void;\r\n t: (key: string) => string;\r\n}) => {\r\n const resetForm = useCallback(() => {\r\n handleFieldCleanUp(switchForms || []);\r\n }, [handleFieldCleanUp, switchForms]);\r\n\r\n if (!isFormSwitcher || !switchForms?.length) return null;\r\n\r\n return (\r\n <FormSwitcher\r\n {...section}\r\n isFormSwitcher={isFormSwitcher}\r\n control={control}\r\n fieldArrayName={fieldArrayName}\r\n formSwitcherName={formSwitcherName}\r\n label={t(section.form_switcher_label || '')}\r\n resetForm={resetForm}\r\n >\r\n {switchForms.map((forms: any) => (\r\n <FormControlLabel\r\n key={forms.id}\r\n value={forms.value || forms.name}\r\n control={<Radio />}\r\n slotProps={{ typography: { variant: \"body2\" } }}\r\n label={t(forms.name)}\r\n disabled={Boolean(section.disabled)}\r\n />\r\n ))}\r\n </FormSwitcher>\r\n );\r\n});\r\n\r\nMemoizedFormSwitcher.displayName = 'MemoizedFormSwitcher';\r\n\r\n// Main component\r\nconst FormSection = memo<FormSectionProps>(({\r\n section,\r\n index,\r\n members,\r\n switchForms,\r\n isFormSwitcher,\r\n control,\r\n fieldArrayName,\r\n formSwitcherName,\r\n displayAvtar,\r\n isButton,\r\n currencyOption,\r\n values,\r\n onBlur,\r\n setValue,\r\n onSelectFooterClick,\r\n getSelectedData,\r\n setCurrencyOptions,\r\n refreshOptions,\r\n handleFieldCleanUp,\r\n handleSetCountryCodeField,\r\n handleTableAddClick,\r\n onTableCellChange,\r\n setDetailsData,\r\n t,\r\n images\r\n}) => {\r\n // Memoize visible members to prevent recalculation\r\n const visibleMembers = useMemo(() =>\r\n members?.filter(f => !f.is_hidden) || [],\r\n [members]\r\n );\r\n\r\n // Memoize field names to prevent recalculation\r\n const fieldsWithNames = useMemo(() =>\r\n visibleMembers.map(field => ({\r\n ...field,\r\n fieldName: field.name || field.label.toLowerCase().split(\" \").join(\"_\")\r\n })),\r\n [visibleMembers]\r\n );\r\n\r\n // Memoize section header\r\n const sectionHeader = useMemo(() => {\r\n if (!section.label) return null;\r\n\r\n return (\r\n <div style={{ minHeight: \"16px\" }}>\r\n {index !== 0 && <Divider className='formParser--Section--SectionDivider' />}\r\n <Typography\r\n type=\"s3\"\r\n weight=\"medium\"\r\n mb={2}\r\n mt={4}\r\n color=\"theme.secondary.1000\"\r\n className='formParser--Section--SectionTitle'\r\n >\r\n {t(section.label)}\r\n </Typography>\r\n </div>\r\n );\r\n }, [section.label, index, t]);\r\n\r\n // Avatar component\r\n const avatarDisplay = useMemo(() =>\r\n displayAvtar ? <div className='avtarDisplay'>ERP</div> : null,\r\n [displayAvtar]\r\n );\r\n\r\n // Common props for field rendering\r\n const fieldProps = useMemo(() => ({\r\n control,\r\n fieldArrayName,\r\n isButton,\r\n currencyOption,\r\n values,\r\n onBlur,\r\n setValue,\r\n onSelectFooterClick,\r\n getSelectedData,\r\n setCurrencyOptions,\r\n refreshOptions,\r\n handleSetCountryCodeField,\r\n handleTableAddClick,\r\n onTableCellChange,\r\n setDetailsData,\r\n t,\r\n images\r\n }), [\r\n control, fieldArrayName, isButton, currencyOption, values,\r\n onBlur, setValue, onSelectFooterClick, getSelectedData,\r\n setCurrencyOptions, refreshOptions, handleSetCountryCodeField,\r\n handleTableAddClick, onTableCellChange, setDetailsData, t, images\r\n ]);\r\n\r\n if (section.is_accordion) {\r\n return (\r\n <section key={index} className='formParser--Section'>\r\n <div style={{ marginTop: '20px' }}>\r\n <Accordion title={t(section.label || '')}>\r\n <div className=\"formParser--Grid formParser--Accordion\">\r\n <MemoizedFormSwitcher\r\n section={section}\r\n switchForms={switchForms}\r\n isFormSwitcher={isFormSwitcher}\r\n control={control}\r\n fieldArrayName={fieldArrayName}\r\n formSwitcherName={formSwitcherName}\r\n handleFieldCleanUp={handleFieldCleanUp}\r\n t={t}\r\n />\r\n {fieldsWithNames.map((field, fieldIndex) => (\r\n <MemoizedField\r\n key={`${section.label}-${field.fieldName}-${fieldIndex}`}\r\n field={field}\r\n fieldName={field.fieldName}\r\n sectionLabel={section.label}\r\n index={fieldIndex}\r\n {...fieldProps}\r\n />\r\n ))}\r\n </div>\r\n </Accordion>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <section key={index} className='formParser--Section'>\r\n {sectionHeader}\r\n\r\n <MemoizedFormSwitcher\r\n section={section}\r\n switchForms={switchForms}\r\n isFormSwitcher={isFormSwitcher}\r\n control={control}\r\n fieldArrayName={fieldArrayName}\r\n formSwitcherName={formSwitcherName}\r\n handleFieldCleanUp={handleFieldCleanUp}\r\n t={t}\r\n />\r\n\r\n <Grid container spacing={2}>\r\n {avatarDisplay}\r\n {fieldsWithNames.map((field, fieldIndex) => (\r\n <MemoizedField\r\n key={`${section.label}-${field.fieldName}-${fieldIndex}`}\r\n field={field}\r\n fieldName={field.fieldName}\r\n sectionLabel={section.label}\r\n index={fieldIndex}\r\n {...fieldProps}\r\n />\r\n ))}\r\n </Grid>\r\n </section>\r\n );\r\n});\r\n\r\nFormSection.displayName = 'FormSection';\r\n\r\nexport { FormSection };\r\nexport default FormSection;","import { FormProvider, useForm, useWatch } from \"react-hook-form\";\r\n// import { useLocation } from \"react-router-dom\";\r\nimport { Box } from \"@mui/material\";\r\n\r\n// import FullScreenLayout from \"../../../layout/fullScreen/fullScreen\";\r\n\r\nimport { useState, useEffect, useCallback } from \"react\";\r\nimport images from \"../../../assets/images\";\r\nimport \"./form-parser.scss\";\r\nimport TabBar from \"../../tabs/tabs\";\r\nimport formBuilderDeConversion from \"../../../utils/form-builder-deconversion\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport * as yup from \"yup\";\r\nimport dayjs from \"dayjs\";\r\nimport { SECTION_TYPES } from '../../../utils/constant';\r\nimport { CountryData } from 'react-phone-input-2';\r\nimport Alert from '../../alert/alert';\r\nimport _ from \"lodash\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport FormSection from \"./form-section\";\r\nconst validationReducer = (validations: any, validation: any, field: any, translationFn: any) => {\r\n switch (validation.type) {\r\n case \"required\":\r\n return (field.field_properties?.is_multiselect ? validations.required(translationFn(validation.msg_en)).min(1, translationFn(validation.msg_en)) : validation.value\r\n ? validations.required(translationFn(validation.msg_en)).test('not-empty', translationFn(validation.msg_en), value => typeof value === 'string' ? value && value?.trim()?.length > 0 : true) : validations.nullable());\r\n case \"min_length\":\r\n return validations.min(validation.value, translationFn(validation.msg_en));\r\n case \"max_length\":\r\n return validations.max(validation.value, translationFn(validation.msg_en));\r\n case \"min_val\":\r\n return validations.min(validation.value, translationFn(validation.msg_en));\r\n case \"max_val\":\r\n return validations.max(validation.value, translationFn(validation.msg_en));\r\n case \"postive_number\":\r\n return validations.test('is-positive-number', translationFn(validation.msg_en), (value) => value >= 0)\r\n case 'email':\r\n return validations.email(validation.msg_en);\r\n case \"no_special_char\":\r\n return validations.test(\r\n \"no-special-char\",\r\n translationFn(validation.msg_en),\r\n value =>\r\n typeof value === \"string\"\r\n ? /^[^.\\-\\W_]+$/u.test(value) // allow letters/digits only\r\n : true\r\n );\r\n case \"when\":\r\n return validations.when(validation.relation, {\r\n is: (val: any) => val === validation.values,\r\n then: () => validation?.thenValidations?.reduce(\r\n (validations: any, validation: any) => validationReducer(validations, validation, field, translationFn),\r\n validations\r\n ) || validations,\r\n otherwise: () => validation?.otherWiseValidations?.reduce(\r\n (validations: any, validation: any) => validationReducer(validations, validation, field, translationFn),\r\n validations\r\n ) || validations,\r\n });\r\n // Add more cases for other validation types as needed\r\n default:\r\n return validations;\r\n }\r\n}\r\n\r\nconst FormParser = ({\r\n data,\r\n defaultValues,\r\n handleFormSubmit,\r\n fieldArrayName,\r\n mode,\r\n displayAvtar = false,\r\n onTableAddClick,\r\n handleFormValues,\r\n getFormMethods,\r\n setFields,\r\n onSelectFooterClick,\r\n setActiveTabValue,\r\n activeTab = 0,\r\n recieveTabDataLenght,\r\n recieveIsValidForm,\r\n activeTabs,\r\n onTableCellChange,\r\n containerStyles = undefined,\r\n isButton = true,\r\n getSelectedData,\r\n refreshOptions = false,\r\n onBlur,\r\n}: any) => {\r\n\r\n const { t } = useTranslation();\r\n\r\n function convertToNestedObject(dotNotationString: string, field: any, existingObject: any = {}) {\r\n const keys = dotNotationString.split('.');\r\n let currentLevel = existingObject;\r\n\r\n keys.forEach((key, index) => {\r\n if (index === keys.length - 1) {\r\n if (!currentLevel[key]) {\r\n const fieldValidations = field.validation.reduce(\r\n (validations: any, validation: any) => {\r\n switch (validation.type) {\r\n case \"required\":\r\n return validation.value\r\n ? validations.required(t(validation.msg_en)).test('not-empty', t(validation.msg_en), value => typeof value === 'string' ? value && value?.trim()?.length > 0 : true)\r\n : (field.field_properties?.is_multiselect ? validations.min(1, t(validation.msg_en)) : validations.nullable());\r\n case \"min_length\":\r\n return validations.min(validation.value, t(validation.msg_en));\r\n case \"max_length\":\r\n return validations.max(validation.value, t(validation.msg_en));\r\n case \"min_val\":\r\n return validations.min(validation.value, t(validation.msg_en));\r\n case \"max_val\":\r\n return validations.max(validation.value, t(validation.msg_en));\r\n // Add more cases for other validation types as needed\r\n default:\r\n return validations;\r\n }\r\n },\r\n getValidationType(field)\r\n );\r\n currentLevel[key] = fieldValidations;\r\n } else if (typeof currentLevel[key] !== 'object' || Array.isArray(currentLevel[key])) {\r\n throw new Error(`Conflict: The key \"${key}\" already exists and is not an object.`);\r\n }\r\n } else {\r\n if (!currentLevel[key]) {\r\n currentLevel[key] = {};\r\n } else if (typeof currentLevel[key] !== 'object' || Array.isArray(currentLevel[key])) {\r\n throw new Error(`Conflict: The key \"${key}\" already exists and is not an object.`);\r\n }\r\n currentLevel = currentLevel[key];\r\n\r\n }\r\n });\r\n\r\n return existingObject;\r\n }\r\n\r\n const getValidationType = (field: any) => {\r\n switch (field.field_type) {\r\n case 'select':\r\n return field.field_properties?.is_multiselect\r\n ? yup.array()\r\n : yup.string()\r\n\r\n case 'number':\r\n case 'currency':\r\n return yup.number().transform((value, originalValue) => (originalValue === '' ? undefined : value)).typeError('Please enter valid number').nullable()\r\n case 'currency_with_amount':\r\n return yup.number()\r\n case 'url':\r\n return yup.string().matches(/^(https?:\\/\\/)?((([a-zA-Z0-9_-]+\\.)+[a-zA-Z]{2,})|localhost)(:\\d{2,5})?(\\/[a-zA-Z0-9#_-]+\\/?)*(\\?[a-zA-Z0-9&=_-]+)?(#\\S+)?$/, { excludeEmptyString: true, message: \"Please enter valid URL.\" })\r\n\r\n default:\r\n return yup.string()\r\n }\r\n }\r\n\r\n const convertNestedFieldSchemaObject = (nestedFields: any) => {\r\n const schema: any = {};\r\n\r\n for (const key in nestedFields) {\r\n if (typeof nestedFields[key] === 'object' && !Object.hasOwn(nestedFields[key], 'tests')) {\r\n schema[key] = yup.object().shape(convertNestedFieldSchemaObject(nestedFields[key]));\r\n } else {\r\n schema[key] = nestedFields[key]\r\n }\r\n }\r\n return schema;\r\n }\r\n\r\n\r\n const generateValidationSchema = (data: any[]) => {\r\n const yupSchemaObject: any = {};\r\n let nestedFielvalidations: any = {},\r\n nestedYupSchemaObj: any = {};\r\n\r\n data &&\r\n data?.forEach((field: any) => {\r\n let fieldValidations: any;\r\n if (field.validation && field.validation.length > 0) {\r\n if (field.name?.includes(\".\")) {\r\n nestedFielvalidations = convertToNestedObject(field.name, field, nestedFielvalidations);\r\n } else {\r\n fieldValidations = field.validation.reduce((validations: any, validation: any) => validationReducer(validations, validation, field, t),\r\n getValidationType(field)\r\n );\r\n yupSchemaObject[field.name] = fieldValidations;\r\n }\r\n\r\n nestedYupSchemaObj = convertNestedFieldSchemaObject(nestedFielvalidations)\r\n }\r\n\r\n });\r\n\r\n return yup.object().shape({\r\n [fieldArrayName]: yup.object().shape({ ...yupSchemaObject, ...nestedYupSchemaObj }),\r\n });\r\n };\r\n\r\n const {\r\n control,\r\n handleSubmit,\r\n formState: { errors },\r\n setValue,\r\n reset,\r\n getValues,\r\n watch,\r\n resetField,\r\n unregister,\r\n trigger,\r\n getFieldState,\r\n ...rest\r\n } = useForm({\r\n ...(defaultValues && typeof defaultValues === 'object' ? { defaultValues } : {}),\r\n resolver: yupResolver(generateValidationSchema(data)),\r\n mode: \"all\",\r\n });\r\n\r\n const watchedValues = useWatch({\r\n control,\r\n name: fieldArrayName,\r\n });\r\n\r\n // Local States\r\n const [schema, setSchema] = useState<[]>([]);\r\n const [tabsData, setTabsData] = useState<any[]>([]);\r\n const [errorAlert, setErrorAlert] = useState<boolean>(false);\r\n const [currencyOption, setCurrencyOptions] = useState<string>('');\r\n const [isTabFormValid, setTabFormValid] = useState<boolean>(false);\r\n const [validateRequiredFields, setValidRequiredFields] = useState<any[]>([]);\r\n\r\n // Local Functions\r\n const handleTableAddClick = (tableName?: string) => {\r\n onTableAddClick?.(tableName)\r\n }\r\n\r\n const getSectionData = useCallback((section: any) => {\r\n const sectionMembers = section?.members?.map((ele: any) => ele) || []\r\n const values = getValues(fieldArrayName)\r\n const isFormSwitcher = section.section_type === SECTION_TYPES.FORM_SWITCH_SECTION\r\n const formSwitcherName =\r\n section?.form_switcher_name ||\r\n section?.form_switcher_label?.toLowerCase().split(\" \").join(\"_\");\r\n const switchForms = section?.switcher_forms?.map((form: any) => ({\r\n ...form,\r\n formMembers: sectionMembers.filter(\r\n (member: any) => member.section_form_id === form.id,\r\n )\r\n }));\r\n const selectedSectionForm =\r\n values?.[formSwitcherName] ?\r\n switchForms.find((ele: any) =>\r\n ele.name === values?.[formSwitcherName]\r\n ) : {};\r\n\r\n // When form switcher is active, include:\r\n // 1. Common fields (fields without section_form_id or is_form_switcher_section)\r\n // 2. Form-specific fields (fields with section_form_id matching the selected form)\r\n let members;\r\n if (isFormSwitcher) {\r\n const commonFields = sectionMembers.filter(\r\n (member: any) => !member.section_form_id && !member.is_form_switcher_section\r\n );\r\n const formSpecificFields = selectedSectionForm?.formMembers || [];\r\n members = [...commonFields, ...formSpecificFields];\r\n } else {\r\n members = section?.members;\r\n }\r\n\r\n return {\r\n isFormSwitcher,\r\n formSwitcherName,\r\n switchForms,\r\n selectedSectionForm,\r\n members,\r\n values\r\n }\r\n }, [fieldArrayName, getValues])\r\n\r\n const handleSetCountryCodeField = useCallback((country: CountryData, field: any, fieldArrayName: any, values: any) => {\r\n const oldVal = values?.[fieldArrayName]?.[field?.country_code_field_name]\r\n const newVal = `+${country.dialCode}`\r\n if (\r\n field?.is_country_code_separate &&\r\n field?.country_code_field_name &&\r\n oldVal !== newVal\r\n ) {\r\n setValue(\r\n `${fieldArrayName}.${field?.country_code_field_name}` as never,\r\n newVal as never\r\n )\r\n }\r\n }, [setValue])\r\n\r\n const handleFieldCleanUp = useCallback((switchForms: any) => {\r\n switchForms.forEach((form: any) => {\r\n form?.formMembers.forEach((member: any) => {\r\n const memberName = member?.name || member.label.toLowerCase().split(\" \").join(\"_\")\r\n const v = _.get(defaultValues, `${fieldArrayName}.${memberName}`, null)\r\n const newData = data.map((ele: any) => {\r\n if (member?.section_form_id === ele?.section_form_id) {\r\n delete ele.value\r\n }\r\n return ({\r\n ...ele,\r\n ...(v ? { value: v } : {}),\r\n })\r\n })\r\n if (!v) {\r\n resetField(`${fieldArrayName}.${memberName}` as never)\r\n unregister(`${fieldArrayName}.${memberName}` as never)\r\n }\r\n setFields?.(newData)\r\n })\r\n\r\n })\r\n }, [data, defaultValues, fieldArrayName, resetField, setFields, unregister])\r\n\r\n const createNestedObjectFromDot = useCallback((dotNotationString: string, field: any, existingObject: any = {}) => {\r\n const keys = dotNotationString.split('.');\r\n let currentLevel = existingObject;\r\n\r\n keys.forEach((key, index) => {\r\n if (index === keys.length - 1) {\r\n if (!currentLevel[key]) {\r\n let fieldValue = field.value\r\n if (fieldValue && (field.field_type !== 'image' || field.field_type !== 'file')) {\r\n if (field.field_type === 'date') {\r\n fieldValue = dayjs(fieldValue)\r\n } else if (field.field_type === 'time') {\r\n const [hours, minutes, seconds] = fieldValue.split(\":\").map(Number);\r\n fieldValue = dayjs().set('hour', hours).set('minute', minutes).set('second', seconds).set('millisecond', 0)\r\n } else if (field.name.includes('_id') && !Array.isArray(field?.value)) {\r\n fieldValue = Number(fieldValue)\r\n }\r\n }\r\n currentLevel[key] = fieldValue;\r\n } else if (typeof currentLevel[key] !== 'object' || Array.isArray(currentLevel[key])) {\r\n throw new Error(`Conflict: The key \"${key}\" already exists and is not an object.`);\r\n }\r\n } else {\r\n if (!currentLevel[key]) {\r\n currentLevel[key] = {};\r\n } else if (typeof currentLevel[key] !== 'object' || Array.isArray(currentLevel[key])) {\r\n throw new Error(`Conflict: The key \"${key}\" already exists and is not an object.`);\r\n }\r\n currentLevel = currentLevel[key];\r\n\r\n }\r\n });\r\n\r\n return existingObject;\r\n }, [])\r\n\r\n const removeMatchingKeyValuePairs = useCallback((obj1, obj2) => {\r\n _.forOwn(obj1, (value, key) => {\r\n if (_.has(obj2, key) && _.isEqual(value, obj2[key])) {\r\n delete obj1[key];\r\n }\r\n });\r\n return obj1;\r\n }, [])\r\n\r\n const validateRequiredSwitchFormData = useCallback((switchData: any) => {\r\n const requiredFields: string[] = [];\r\n if (switchData) {\r\n switchData && switchData[0]?.formMembers.forEach((member: any) => {\r\n if (member?.validation && Array.isArray(member?.validation)) {\r\n member?.validation.forEach((validation: any) => {\r\n if (validation?.thenValidations && Array.isArray(validation?.thenValidations)) {\r\n validation?.thenValidations.forEach((thenValidation: any) => {\r\n if (thenValidation?.type === \"required\" && thenValidation?.value === true) {\r\n if (member?.name) {\r\n requiredFields.push(member.name);\r\n }\r\n }\r\n });\r\n } else {\r\n const hasRequiredValidation = member.validation.some(\r\n (validation: any) => validation.type === 'required' && validation.value === true\r\n )\r\n if (hasRequiredValidation) {\r\n requiredFields.push(member.name);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n }\r\n if (requiredFields) {\r\n setValidRequiredFields(_.uniq(requiredFields))\r\n }\r\n\r\n }, [])\r\n\r\n const isEmpty = useCallback((value: any): boolean => {\r\n return (\r\n value === null ||\r\n value === undefined ||\r\n (Array.isArray(value) && value.length === 0) ||\r\n (typeof value === 'object' && Object.keys(value).length === 0)\r\n );\r\n }, [])\r\n\r\n const getMissingFields = useCallback((watchedFields: any, validationReqFields: string[]): string[] => {\r\n const missingFields: string[] = [];\r\n\r\n validationReqFields.forEach((fieldPath) => {\r\n const keys = fieldPath.split(\".\");\r\n let currentLevel = watchedFields;\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n\r\n if (!currentLevel?.[key] && currentLevel?.[key] !== 0) {\r\n // If any key in the path is missing, mark the field as missing\r\n missingFields.push(fieldPath);\r\n return;\r\n }\r\n\r\n // Move deeper into the object\r\n currentLevel = currentLevel[key];\r\n }\r\n\r\n // After navigating the full path, check if the final value is empty\r\n if (isEmpty(currentLevel)) {\r\n missingFields.push(fieldPath);\r\n }\r\n });\r\n\r\n\r\n return missingFields;\r\n }, [isEmpty])\r\n\r\n // Use Effects\r\n useEffect(() => {\r\n if (recieveTabDataLenght) {\r\n recieveTabDataLenght(tabsData.length)\r\n }\r\n }, [recieveTabDataLenght, tabsData])\r\n\r\n useEffect(() => {\r\n const handleMessage = (event: MessageEvent) => {\r\n if (event.origin !== window.origin) {\r\n return;\r\n }\r\n const { state } = event.data;\r\n\r\n if (state?.length) {\r\n const data: any = formBuilderDeConversion(state);\r\n\r\n if (data.tab) {\r\n setTabsData(data.tab);\r\n } else if (data.section) {\r\n setSchema(data.section);\r\n }\r\n }\r\n };\r\n\r\n window.addEventListener(\"message\", handleMessage);\r\n\r\n return () => {\r\n window.removeEventListener(\"message\", handleMessage);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (data) {\r\n const formData = formBuilderDeConversion(data)\r\n if (formData?.tab) {\r\n // setSchema([])\r\n setTabsData(formData.tab);\r\n if (activeTab !== undefined) {\r\n setSchema(formData.tab[activeTab]?.data || []);\r\n }\r\n } else {\r\n setSchema(formData.section);\r\n // setTabsData([])\r\n }\r\n const dVals = _.get(defaultValues, fieldArrayName, {})\r\n const wVals = removeMatchingKeyValuePairs((watchedValues || {}), (dVals || {}))\r\n if (mode === 'edit' && !Object.keys(wVals)?.length) {\r\n let formValues: any = {};\r\n let nestedFormValues: any = {};\r\n data.forEach((field: any) => {\r\n const fieldValue = field.value\r\n if (field.name?.includes(\".\")) {\r\n nestedFormValues = createNestedObjectFromDot(field.name, field, nestedFormValues)\r\n } else {\r\n if (fieldValue && (field.field_type !== 'image' || field.field_type !== 'file')) {\r\n if (field?.is_section_field) {\r\n const fieldName = field?.form_switcher_name || field?.form_switcher_label;\r\n formValues = { ...formValues, [fieldName]: fieldValue }\r\n } else if (\r\n field?.name &&\r\n ['company_id', 'email_ids'].includes(field?.name) &&\r\n ['edit_customer', 'add_customer', 'edit_vendor', 'add_vendor'].includes(fieldArrayName)\r\n ) {\r\n formValues = { ...formValues, [field.name]: fieldValue }\r\n } else if (field.field_type === 'date') {\r\n formValues = { ...formValues, [field.name]: dayjs(fieldValue) }\r\n } else if (field.field_type === 'time') {\r\n const [hours, minutes, seconds] = fieldValue.split(\":\").map(Number);\r\n formValues = { ...formValues, [field.name]: dayjs().set('hour', hours).set('minute', minutes).set('second', seconds).set('millisecond', 0) }\r\n } else if (field.name.includes('_id') && !Array.isArray(field?.value)) {\r\n if (fieldArrayName === \"edit_user\" && field.name === \"role_id\") {\r\n formValues = { ...formValues, [field.name]: fieldValue }\r\n } else {\r\n formValues = { ...formValues, [field.name]: Number(fieldValue) }\r\n }\r\n } else {\r\n formValues = { ...formValues, [field.name]: fieldValue }\r\n }\r\n }\r\n }\r\n })\r\n const finalFormValues = { ...formValues, ...nestedFormValues }\r\n reset({ [fieldArrayName]: { ...finalFormValues } })\r\n }\r\n getFormMethods?.({ control, handleSubmit, setValue, reset, resetField, getValues, unregister, trigger, watch, getFieldState, errors, ...rest })\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [data])\r\n\r\n useEffect(() => {\r\n if (activeTab?.toString()) {\r\n if (tabsData && tabsData[activeTab]) {\r\n setSchema(tabsData[activeTab].data);\r\n }\r\n }\r\n }, [activeTab, tabsData]);\r\n\r\n useEffect(() => {\r\n if (watchedValues && handleFormValues) {\r\n handleFormValues?.(watchedValues);\r\n }\r\n }, [handleFormValues, watchedValues])\r\n\r\n useEffect(() => {\r\n if (errors?.[fieldArrayName]) {\r\n setErrorAlert(true)\r\n } else {\r\n setErrorAlert(false)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [fieldArrayName, JSON.stringify(errors)])\r\n\r\n useEffect(() => {\r\n const validatedFields: string[] = [];\r\n if (activeTab != undefined) {\r\n tabsData[activeTab]?.data.forEach((section: any) => {\r\n\r\n if (section.members && Array.isArray(section.members)) {\r\n\r\n section.members.forEach((member: any) => {\r\n if (member.validation && Array.isArray(member.validation)) {\r\n const hasRequiredValidation = member.validation.some(\r\n (validation: any) => validation.type === 'required' && validation.value === true\r\n )\r\n if (hasRequiredValidation) {\r\n // validatedFields.push(fieldArrayName + '.' + member.name);\r\n validatedFields.push(member.name);\r\n }\r\n }\r\n });\r\n }\r\n })\r\n setValidRequiredFields(validatedFields);\r\n }\r\n }, [tabsData, activeTab]);\r\n\r\n useEffect(() => {\r\n if (watchedValues?.account_type) {\r\n\r\n const switchFormData: any[] = [];\r\n schema && schema.forEach((section: any) => {\r\n const sectionMembers = schema && section?.members?.map((ele: any) => ele) || [];\r\n\r\n const switchForms = schema && section?.switcher_forms?.map((form: any) => ({\r\n ...form,\r\n formMembers: sectionMembers.filter(\r\n (member: any) => member.section_form_id === form.id,\r\n ),\r\n }));\r\n if (switchForms) {\r\n switchFormData.push(switchForms)\r\n }\r\n })\r\n\r\n const selectValue = watchedValues?.account_type || \"Individual\";\r\n const switchData = switchFormData && Array.isArray(switchFormData[0])\r\n ? switchFormData[0].filter((form: any) => form.name === selectValue)\r\n : [];\r\n\r\n if (switchData) {\r\n validateRequiredSwitchFormData(switchData)\r\n }\r\n\r\n }\r\n }, [watchedValues?.account_type, schema, validateRequiredSwitchFormData]);\r\n\r\n useEffect(() => {\r\n if (validateRequiredFields.length > 0) {\r\n const updatedRequiredFields = getMissingFields(watchedValues, validateRequiredFields)\r\n\r\n // const updatedRequiredFields = validateRequiredFields.filter((fieldPath) => {\r\n // const watchedValue = watchedFields[fieldPath] ;\r\n // return watchedValue === undefined || watchedValue === null || watchedValue === 0 ;\r\n // });\r\n\r\n updatedRequiredFields.length === 0 ? setTabFormValid(true) : setTabFormValid(false);\r\n } else {\r\n setTabFormValid(true)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [validateRequiredFields, watchedValues, activeTab])\r\n\r\n useEffect(() => {\r\n if (recieveIsValidForm) {\r\n recieveIsValidForm(isTabFormValid)\r\n }\r\n }, [recieveIsValidForm, isTabFormValid])\r\n\r\n\r\n return (\r\n // <FullScreenLayout>\r\n <Box sx={{ width: \"100%\", padding: \"2rem\", ...containerStyles }}>\r\n <FormProvider {...{ control, handleSubmit, setValue, reset, resetField, getValues, unregister, trigger, watch, errors, ...rest }}>\r\n <form id={fieldArrayName} name={fieldArrayName} onSubmit={handleSubmit(handleFormSubmit)}>\r\n {Boolean(tabsData?.length) && (\r\n <>\r\n {errorAlert &&\r\n <Alert severity='error' onClose={() => setErrorAlert(false)}>\r\n Please fill all the required fields.\r\n </Alert>\r\n }\r\n <TabBar\r\n tabs={tabsData}\r\n activeTabs={activeTabs}\r\n activeValue={activeTab}\r\n setActiveValue={setActiveTabValue}\r\n isFormTabValid={isTabFormValid}\r\n />\r\n </>\r\n )}\r\n {schema &&\r\n schema.map((section: any, index: number) => {\r\n const {\r\n isFormSwitcher,\r\n formSwitcherName,\r\n switchForms,\r\n members,\r\n values,\r\n } = getSectionData(section)\r\n\r\n return (\r\n <FormSection\r\n section={section}\r\n index={index}\r\n members={members}\r\n switchForms={switchForms}\r\n isFormSwitcher={isFormSwitcher}\r\n control={control}\r\n fieldArrayName={fieldArrayName}\r\n formSwitcherName={formSwitcherName}\r\n displayAvtar={displayAvtar}\r\n isButton={isButton}\r\n currencyOption={currencyOption}\r\n values={values}\r\n onBlur={onBlur}\r\n setValue={setValue}\r\n onSelectFooterClick={onSelectFooterClick}\r\n getSelectedData={getSelectedData}\r\n setCurrencyOptions={setCurrencyOptions}\r\n refreshOptions={refreshOptions}\r\n handleFieldCleanUp={handleFieldCleanUp}\r\n handleSetCountryCodeField={handleSetCountryCodeField}\r\n handleTableAddClick={handleTableAddClick}\r\n onTableCellChange={onTableCellChange}\r\n // setDetailsData={setDetailsData}\r\n t={t}\r\n images={images}\r\n />\r\n );\r\n })}\r\n </form>\r\n </FormProvider>\r\n </Box>\r\n // </FullScreenLayout>\r\n );\r\n};\r\n\r\nexport default FormParser;","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { useMemo } from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, DynamicSearchSelect, IModalComponentProps } from './form-control';\r\n\r\ninterface IFormValues {\r\n team: {\r\n name: string;\r\n department_id: string | null;\r\n team_lead_id: string | null;\r\n member_ids: string[] | null;\r\n description: string;\r\n };\r\n}\r\n\r\nconst teamValidationSchema = Yup.object().shape({\r\n team: Yup.object().shape({\r\n name: Yup.string().required('Team Name is required'),\r\n department_id: Yup.string().nullable(),\r\n team_lead_id: Yup.string().nullable().required('Team Lead is required'),\r\n member_ids: Yup.array().nullable(),\r\n description: Yup.string(),\r\n })\r\n});\r\n\r\nconst DEFAULT_VALUES = {\r\n team: {\r\n name: '',\r\n department_id: null,\r\n team_lead_id: null,\r\n member_ids: null,\r\n description: '',\r\n }\r\n};\r\n\r\nexport const TeamAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n onSave,\r\n isLoading,\r\n modalProps,\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n const { control, handleSubmit, reset, watch } = useForm<IFormValues>({\r\n mode: 'all',\r\n resolver: yupResolver(teamValidationSchema),\r\n defaultValues: DEFAULT_VALUES\r\n });\r\n\r\n const selectedDepartmentId = watch('team.department_id');\r\n const selectedTeamLeadId = watch('team.team_lead_id');\r\n\r\n const handleModalClose = () => {\r\n reset(DEFAULT_VALUES);\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n await onSave(values);\r\n handleModalClose();\r\n };\r\n\r\n // Memoize filters to prevent unnecessary re-renders of DynamicSearchSelect\r\n const leadFilter = useMemo(() => ({\r\n '&department_id.eq': selectedDepartmentId || 0\r\n }), [selectedDepartmentId]);\r\n\r\n const membersFilter = useMemo(() => ({\r\n '&department_id.eq': selectedDepartmentId || 0,\r\n ...(selectedTeamLeadId ? { '&id.ne': selectedTeamLeadId } : {})\r\n }), [selectedDepartmentId, selectedTeamLeadId]);\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='sm'\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && <ModalLoader />}\r\n <DialogTitle className='brandAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t('hrms.organization_structure.teamModal.title', 'Add Team')}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='brandAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n {/* Team Name - Required */}\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.teamModal.name_label', 'Team Name')}\r\n name='name'\r\n fieldArrayName='team'\r\n placeholder={t('hrms.organization_structure.teamModal.name_placeholder', 'Enter Team Name')}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/* Department - Optional */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.teamModal.department_label', 'Department')}\r\n name='department_id'\r\n placeholder={t('hrms.organization_structure.teamModal.department_placeholder', 'Select Department')}\r\n fieldArrayName='team'\r\n formControl={control as any}\r\n apiType='department'\r\n required={false}\r\n options={[]}\r\n />\r\n </Grid>\r\n\r\n {/* Team Lead - Required */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.teamModal.team_lead_label', 'Team Lead')}\r\n name='team_lead_id'\r\n placeholder={t('hrms.organization_structure.teamModal.team_lead_placeholder', 'Select Team Lead')}\r\n fieldArrayName='team'\r\n formControl={control as any}\r\n apiType='employees'\r\n required\r\n options={[]}\r\n customeFilter={leadFilter}\r\n />\r\n </Grid>\r\n\r\n {/* Members - Optional, multi-select */}\r\n <Grid item sm={12}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.teamModal.members_label', 'Members')}\r\n name='member_ids'\r\n placeholder={t('hrms.organization_structure.teamModal.members_placeholder', 'Select Members')}\r\n fieldArrayName='team'\r\n formControl={control as any}\r\n apiType='employees'\r\n required={false}\r\n options={[]}\r\n is_multiselect\r\n customeFilter={membersFilter}\r\n />\r\n </Grid>\r\n\r\n {/* Description - Optional, full width */}\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='textarea'\r\n formControl={control}\r\n label={t('hrms.organization_structure.teamModal.description_label', 'Description')}\r\n name='description'\r\n fieldArrayName='team'\r\n placeholder={t('hrms.organization_structure.teamModal.description_placeholder', 'Enter Description')}\r\n is_multiline\r\n rows={3}\r\n />\r\n </Grid>\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='brandAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='brandAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}\r\n >\r\n {t('common.cancel')}\r\n </Button>\r\n <Button type='submit'>\r\n {t('common.save')}\r\n </Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </Modal>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, DynamicSearchSelect, DynamicToggleButton, IModalComponentProps } from './form-control';\r\n\r\ninterface IFormValues {\r\n department: {\r\n company_id: string | null;\r\n department_code: string;\r\n name: string;\r\n parent_department_id: string | null;\r\n department_head_id: string | null;\r\n cost_code: string;\r\n status: boolean;\r\n description: string;\r\n };\r\n}\r\n\r\nconst departmentValidationSchema = Yup.object().shape({\r\n department: Yup.object().shape({\r\n company_id: Yup.string().nullable().required('Company is required'),\r\n department_code: Yup.string().required('Department Code is required'),\r\n name: Yup.string().required('Department Name is required'),\r\n parent_department_id: Yup.string().nullable(),\r\n department_head_id: Yup.string().nullable(),\r\n cost_code: Yup.string(),\r\n status: Yup.boolean(),\r\n description: Yup.string(),\r\n })\r\n});\r\n\r\nexport const DepartmentAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n onSave,\r\n isLoading,\r\n modalProps,\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n const { control, handleSubmit, reset, trigger, watch } = useForm<any>({\r\n mode: 'all',\r\n resolver: yupResolver(departmentValidationSchema),\r\n defaultValues: {\r\n department: {\r\n company_id: null,\r\n department_code: '',\r\n name: '',\r\n parent_department_id: null,\r\n department_head_id: null,\r\n cost_code: '',\r\n status: true,\r\n description: '',\r\n }\r\n }\r\n });\r\n\r\n const rootCompanyId = watch('department.company_id');\r\n\r\n const handleModalClose = () => {\r\n reset({\r\n department: {\r\n company_id: null,\r\n department_code: '',\r\n name: '',\r\n parent_department_id: null,\r\n department_head_id: null,\r\n cost_code: '',\r\n status: true,\r\n description: '',\r\n }\r\n });\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await onSave(values as any);\r\n handleModalClose();\r\n };\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='sm'\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && <ModalLoader />}\r\n <DialogTitle className='brandAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t('hrms.organization_structure.departmentModal.title', 'Add Department')}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='brandAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n {/* Company - Required */}\r\n <Grid item sm={12}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.departmentModal.company_label', 'Company')}\r\n name='company_id'\r\n placeholder={t('hrms.organization_structure.departmentModal.company_placeholder', 'Select Company')}\r\n fieldArrayName='department'\r\n formControl={control as any}\r\n apiType='company'\r\n required\r\n options={[]}\r\n />\r\n </Grid>\r\n\r\n {/* Department Code - Required */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.departmentModal.code_label', 'Department Code')}\r\n name='department_code'\r\n fieldArrayName='department'\r\n placeholder={t('hrms.organization_structure.departmentModal.code_placeholder', 'Enter Department Code')}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/* Department Name - Required */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.departmentModal.name_label', 'Department Name')}\r\n name='name'\r\n fieldArrayName='department'\r\n placeholder={t('hrms.organization_structure.departmentModal.name_placeholder', 'Enter Department Name')}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/* Parent Department - Optional */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.departmentModal.parent_department_label', 'Parent Department')}\r\n name='parent_department_id'\r\n placeholder={t('hrms.organization_structure.departmentModal.parent_department_placeholder', 'Select Parent Department')}\r\n fieldArrayName='department'\r\n formControl={control as any}\r\n apiType='department'\r\n required={false}\r\n options={[]}\r\n customeFilter={{\r\n 'is_parent.eq': true,\r\n '&company_id.eq': rootCompanyId || 0\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Department Head - Optional */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.departmentModal.department_head_label', 'Department Head')}\r\n name='department_head_id'\r\n placeholder={t('hrms.organization_structure.departmentModal.department_head_placeholder', 'Select Department Head')}\r\n fieldArrayName='department'\r\n formControl={control as any}\r\n apiType='employees'\r\n required={false}\r\n options={[]}\r\n customeFilter={{\r\n '&company_id.eq': rootCompanyId || 0\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Cost Code - Optional */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.departmentModal.cost_code_label', 'Cost Code')}\r\n name='cost_code'\r\n fieldArrayName='department'\r\n placeholder={t('hrms.organization_structure.departmentModal.cost_code_placeholder', 'Enter Cost Code')}\r\n />\r\n </Grid>\r\n\r\n {/* Status Toggle */}\r\n <Grid item sm={6}>\r\n <DynamicToggleButton\r\n formControl={control as any}\r\n name='status'\r\n fieldArrayName='department'\r\n label={t('hrms.organization_structure.departmentModal.status_label', 'Status')}\r\n title={t('common.active', 'Active')}\r\n titlePosition='end'\r\n position={3}\r\n />\r\n </Grid>\r\n\r\n {/* Description - Optional, full width */}\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='textarea'\r\n formControl={control}\r\n label={t('hrms.organization_structure.departmentModal.description_label', 'Description')}\r\n name='description'\r\n fieldArrayName='department'\r\n placeholder={t('hrms.organization_structure.departmentModal.description_placeholder', 'Enter Description')}\r\n is_multiline\r\n rows={3}\r\n />\r\n </Grid>\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='brandAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='brandAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}\r\n >\r\n {t('common.cancel')}\r\n </Button>\r\n <Button type='button' onClick={handleSubmit(onSubmit)}>\r\n {t('common.save')}\r\n </Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </>\r\n </Modal>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useState } from 'react';\n\nimport Modal from '../../../../modal/modal';\nimport Typography from '../../../../typography/typography';\nimport DynamicInput from '../text';\nimport Button from '../../../../button/button';\nimport ModalLoader from '../../../../loaders/modal-loader';\nimport Toast from '../../../../toast/toast';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n Box,\n DialogActions,\n DialogContent,\n DialogProps,\n DialogTitle,\n Grid,\n IconButton\n} from '@mui/material';\nimport Close from '@mui/icons-material/Close';\n\nimport { useForm } from 'react-hook-form';\nimport * as Yup from 'yup';\nimport { yupResolver } from '@hookform/resolvers/yup';\n\nimport './location-add-modal.scss';\nimport DynamicSearchSelect from '../dynamic-select';\ninterface BrandAddModalProps {\n isOpen: boolean;\n setIsOpen: () => void;\n modalProps?: DialogProps;\n onSave: (data: string) => void;\n isLoading?: boolean;\n}\n\ninterface IFormValues {\n location_data: {\n name: string;\n };\n}\n\ninterface IToast {\n type: 'normal' | 'alert';\n message: string;\n}\n\nconst validationSchema = Yup.object().shape({\n location_data: Yup.object().shape({\n name: Yup.string().required('Name is required')\n })\n});\n\nconst LocationAddModal: React.FC<BrandAddModalProps> = ({\n isOpen,\n setIsOpen,\n modalProps,\n onSave,\n isLoading\n}) => {\n const { t } = useTranslation();\n const [toast, setToast] = useState<IToast | null>(null);\n const { control, handleSubmit, reset } = useForm<any>({\n mode: 'all',\n resolver: yupResolver(validationSchema)\n });\n const handleModalClose = () => {\n reset({ location_data: undefined });\n setIsOpen();\n };\n\n const onSubmit = async (values: IFormValues) => {\n // handleModalClose();\n onSave(values?.location_data)\n };\n\n return (\n <Modal\n open={isOpen}\n onClose={handleModalClose}\n maxWidth='sm'\n fullWidth\n {...modalProps}>\n <>\n \n <form onSubmit={handleSubmit(onSubmit)}>\n {isLoading && (\n <ModalLoader />\n )}\n <DialogTitle className='brandAddModal--DialogTitle'>\n <Typography type='s3' color='inherit' weight='medium'>\n {t(\"inventory.item.locationModal.title\")}\n </Typography>\n <IconButton onClick={handleModalClose}>\n <Close fontSize='small' />\n </IconButton>\n </DialogTitle>\n <DialogContent className='brandAddModal--DialogContents'>\n \n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\n <Grid item sm={6}>\n <DynamicInput\n type='text'\n formControl={control}\n label={t(\"inventory.item.locationModal.location_name_label\")}\n name='name'\n fieldArrayName='location_data'\n placeholder={t(\"inventory.item.locationModal.location_name_placeholder\")}\n required\n />\n </Grid>\n <Grid item sm={6}>\n <DynamicInput\n type='text'\n formControl={control}\n label={t(\"inventory.item.locationModal.location_code_label\")}\n name='short_name'\n fieldArrayName='location_data'\n placeholder={t(\"inventory.item.locationModal.location_code_placeholder\")}\n required\n />\n </Grid>\n <Grid item sm={6}>\n <DynamicSearchSelect\n label={t(\n \"accounting.authorize_commission.fields.company_label\"\n )}\n name=\"company_id\"\n placeholder={t(\n \"accounting.authorize_commission.fields.company_placeholder\"\n )}\n fieldArrayName='location_data'\n formControl={control}\n apiType='company'\n getSelectedData={(data: any) =>\n // setSelectedData(name, data)\n console.log(\"data\", data)\n }\n required={true}\n />\n </Grid>\n </Grid>\n \n </DialogContent>\n <DialogActions className='brandAddModal--DialogAction'>\n <span></span>\n <Box display='flex' gap={1.5}>\n <Button\n className='brandAddModal--DialogAction--WhiteBtn'\n onClick={handleModalClose}>\n {t(\"common.cancel\")}\n </Button>\n <Button type='button' onClick={handleSubmit(onSubmit)}>{t(\"common.save\")}</Button>\n </Box>\n </DialogActions>\n </form>\n </>\n <Toast\n open={Boolean(toast)}\n type={toast?.type}\n message={toast?.message}\n handleClose={() => setToast(null)}\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\n />\n </Modal>\n );\n};\n\nexport default LocationAddModal;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, DynamicSearchSelect, DynamicToggleButton, IModalComponentProps } from './form-control';\r\n\r\ninterface IFormValues {\r\n designation: {\r\n company_id: string | null;\r\n designation_code: string;\r\n name: string;\r\n reports_to: string | null;\r\n level: string;\r\n status: boolean;\r\n description: string;\r\n };\r\n}\r\n\r\nconst designationValidationSchema = Yup.object().shape({\r\n designation: Yup.object().shape({\r\n company_id: Yup.string().nullable().required('Company is required'),\r\n designation_code: Yup.string(),\r\n name: Yup.string().required('Designation Name is required'),\r\n reports_to: Yup.string().nullable(),\r\n level: Yup.number().nullable().typeError('Level must be a number'),\r\n status: Yup.boolean(),\r\n description: Yup.string(),\r\n })\r\n});\r\n\r\nexport const DesignationAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n onSave,\r\n isLoading,\r\n modalProps,\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n const { control, handleSubmit, reset, trigger, watch } = useForm<any>({\r\n mode: 'all',\r\n resolver: yupResolver(designationValidationSchema),\r\n defaultValues: {\r\n designation: {\r\n company_id: null,\r\n designation_code: '',\r\n name: '',\r\n reports_to: null,\r\n level: null,\r\n status: true,\r\n description: '',\r\n }\r\n }\r\n });\r\n\r\n const rootCompanyId = watch('designation.company_id');\r\n\r\n const handleModalClose = () => {\r\n reset({\r\n designation: {\r\n company_id: null,\r\n designation_code: '',\r\n name: '',\r\n reports_to: null,\r\n level: null,\r\n status: true,\r\n description: '',\r\n }\r\n });\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await onSave(values as any);\r\n handleModalClose();\r\n };\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='sm'\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && <ModalLoader />}\r\n <DialogTitle className='brandAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t('hrms.organization_structure.designationModal.title', 'Add Designation')}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='brandAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n {/* Company - Required */}\r\n <Grid item sm={12}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.designationModal.company_label', 'Company')}\r\n name='company_id'\r\n placeholder={t('hrms.organization_structure.designationModal.company_placeholder', 'Select Company')}\r\n fieldArrayName='designation'\r\n formControl={control as any}\r\n apiType='company'\r\n required\r\n options={[]}\r\n />\r\n </Grid>\r\n\r\n {/* Designation Code */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.designationModal.code_label', 'Designation Code')}\r\n name='designation_code'\r\n fieldArrayName='designation'\r\n placeholder={t('hrms.organization_structure.designationModal.code_placeholder', 'Enter Designation Code')}\r\n />\r\n </Grid>\r\n\r\n {/* Designation Name - Required */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.designationModal.name_label', 'Designation Name')}\r\n name='name'\r\n fieldArrayName='designation'\r\n placeholder={t('hrms.organization_structure.designationModal.name_placeholder', 'Enter Designation Name')}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/* Reports To - Optional (employees) */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.designationModal.reports_to_label', 'Reports To')}\r\n name='reports_to'\r\n placeholder={t('hrms.organization_structure.designationModal.reports_to_placeholder', 'Select Reports To')}\r\n fieldArrayName='designation'\r\n formControl={control as any}\r\n apiType='employees'\r\n required={false}\r\n options={[]}\r\n customeFilter={{\r\n '&company_id.eq': rootCompanyId || 0\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Level - Optional */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='number'\r\n formControl={control}\r\n label={t('hrms.organization_structure.designationModal.level_label', 'Level')}\r\n name='level'\r\n fieldArrayName='designation'\r\n placeholder={t('hrms.organization_structure.designationModal.level_placeholder', 'Enter Level')}\r\n />\r\n </Grid>\r\n\r\n {/* Status Toggle */}\r\n <Grid item sm={6}>\r\n <DynamicToggleButton\r\n formControl={control as any}\r\n name='status'\r\n fieldArrayName='designation'\r\n label={t('hrms.organization_structure.designationModal.status_label', 'Status')}\r\n title={t('common.active', 'Active')}\r\n titlePosition='end'\r\n position={3}\r\n />\r\n </Grid>\r\n\r\n {/* Description - Optional, full width */}\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='textarea'\r\n formControl={control}\r\n label={t('hrms.organization_structure.designationModal.description_label', 'Description')}\r\n name='description'\r\n fieldArrayName='designation'\r\n placeholder={t('hrms.organization_structure.designationModal.description_placeholder', 'Enter Description')}\r\n is_multiline\r\n rows={3}\r\n />\r\n </Grid>\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='brandAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='brandAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}\r\n >\r\n {t('common.cancel')}\r\n </Button>\r\n <Button type='button' onClick={handleSubmit(onSubmit)}>\r\n {t('common.save')}\r\n </Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </>\r\n </Modal>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useState, useEffect, useCallback } from 'react';\r\n\r\nimport Modal from '../../../../modal/modal';\r\nimport Typography from '../../../../typography/typography';\r\nimport DynamicInput from '../text';\r\nimport Button from '../../../../button/button';\r\nimport ModalLoader from '../../../../loaders/modal-loader';\r\nimport Toast from '../../../../toast/toast';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\n\r\nimport { FormProvider, useForm, useWatch } from 'react-hook-form';\r\nimport * as Yup from 'yup';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\n\r\nimport DynamicSearchSelect from '../dynamic-select';\r\nimport DynamicSelect from '../select';\r\nimport { IModalComponentProps } from '../../index';\r\nimport { fetchOptions, skuGenerator } from '../../../../../utils/common';\r\n\r\nimport './fixed-asset-item-add-modal.scss';\r\n\r\ninterface IFormValues {\r\n inventory_fixed_asset_item: {\r\n name: string;\r\n sku: string;\r\n category: number | null;\r\n base_unit: number | null;\r\n company: number[];\r\n unit_of_measurement: number | null;\r\n stock_unit: number | null;\r\n purchase_unit: number | null;\r\n sales_unit: number | null;\r\n costing_method: string;\r\n depreciation_method: string;\r\n computation_method: string;\r\n default_tax_id: number | null;\r\n income_account_id: number | null;\r\n asset_account_id: number | null;\r\n cogs_account_id: number | null;\r\n fixed_asset_account_id: number | null;\r\n depreciation_account_id: number | null;\r\n declining_factor: number | null;\r\n };\r\n}\r\n\r\ninterface IToast {\r\n type: 'normal' | 'alert';\r\n message: string;\r\n}\r\n\r\nconst COSTING_METHODS = [\r\n { label: 'FIFO', value: 'FIFO' },\r\n { label: 'LIFO', value: 'LIFO' },\r\n { label: 'Weighted Average Cost', value: 'Weighted Average Cost' }\r\n];\r\n\r\nconst DEPRECIATION_METHODS = [\r\n { label: 'Straight line', value: 'Straight line' },\r\n { label: 'Declining', value: 'Declining' }\r\n];\r\n\r\nconst COMPUTATION_METHODS = [\r\n { label: 'Constant periods', value: 'Constant periods' },\r\n { label: 'Based on days per period', value: 'Based on days per period' }\r\n];\r\n\r\nconst validationSchema = Yup.object().shape({\r\n inventory_fixed_asset_item: Yup.object().shape({\r\n name: Yup.string().required('Name is required'),\r\n sku: Yup.string().required('SKU is required'),\r\n category: Yup.mixed().required('Category is required'),\r\n base_unit: Yup.mixed().required('Base Unit is required'),\r\n company: Yup.array().min(1, 'At least one company is required').required('Company is required'),\r\n unit_of_measurement: Yup.mixed().required('Unit of Measurement is required'),\r\n stock_unit: Yup.mixed().nullable(),\r\n purchase_unit: Yup.mixed().nullable(),\r\n sales_unit: Yup.mixed().nullable(),\r\n costing_method: Yup.string().required('Costing Method is required'),\r\n depreciation_method: Yup.string().required('Depreciation Method is required'),\r\n computation_method: Yup.string().required('Computation Method is required'),\r\n default_tax_id: Yup.mixed().required('Default Tax is required'),\r\n income_account_id: Yup.mixed().required('Income Account is required'),\r\n asset_account_id: Yup.mixed().required('Asset Account is required'),\r\n cogs_account_id: Yup.mixed().required('COGS Account is required'),\r\n fixed_asset_account_id: Yup.mixed().required('Fixed Asset Account is required'),\r\n depreciation_account_id: Yup.mixed().required('Depreciation Account is required'),\r\n declining_factor: Yup.number()\r\n .nullable()\r\n .when('depreciation_method', {\r\n is: 'Declining',\r\n then: (schema) => schema.required('Declining Factor is required').min(0, 'Must be positive'),\r\n otherwise: (schema) => schema.nullable(),\r\n }),\r\n })\r\n});\r\n\r\nconst FixedAssetItemAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n modalProps,\r\n onSave,\r\n isLoading\r\n}) => {\r\n const { t } = useTranslation();\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n const [selectedCategoryData, setSelectedCategoryData] = useState<any>(null);\r\n const unitFields = ['stock_unit', 'purchase_unit', 'sales_unit', 'consumption_unit', 'base_unit'];\r\n const defaultValues = {\r\n inventory_fixed_asset_item: {\r\n name: '',\r\n sku: '',\r\n category: null,\r\n base_unit: null,\r\n company: [],\r\n unit_of_measurement: null,\r\n stock_unit: null,\r\n purchase_unit: null,\r\n sales_unit: null,\r\n costing_method: '',\r\n depreciation_method: '',\r\n computation_method: '',\r\n default_tax_id: null,\r\n income_account_id: null,\r\n asset_account_id: null,\r\n cogs_account_id: null,\r\n fixed_asset_account_id: null,\r\n depreciation_account_id: null,\r\n declining_factor: null,\r\n status: 1\r\n }\r\n }\r\n\r\n const methods = useForm<any>({\r\n mode: 'all',\r\n resolver: yupResolver(validationSchema),\r\n defaultValues: defaultValues,\r\n });\r\n const { control, handleSubmit, reset, setValue, trigger } = methods || {};\r\n\r\n // Watch name and category for auto-generating SKU\r\n const [watchedName, watchedCategory, watchedUom, watchedDepreciationMethod] = useWatch({\r\n control, name:\r\n ['inventory_fixed_asset_item.name',\r\n 'inventory_fixed_asset_item.category',\r\n 'inventory_fixed_asset_item.unit_of_measurement',\r\n 'inventory_fixed_asset_item.depreciation_method']\r\n });\r\n\r\n\r\n // Auto-generate SKU when name or category changes\r\n useEffect(() => {\r\n if (watchedName && selectedCategoryData?.category_name) {\r\n const generatedSku = skuGenerator({\r\n name: watchedName,\r\n category: selectedCategoryData.category_name\r\n });\r\n setValue('inventory_fixed_asset_item.sku', generatedSku);\r\n }\r\n }, [watchedName, selectedCategoryData, setValue]);\r\n\r\n const handleModalClose = () => {\r\n reset(defaultValues);\r\n setSelectedCategoryData(null);\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await onSave({\r\n ...values.inventory_fixed_asset_item as any,\r\n type: 'inventory-fixed-asset',\r\n status: 1\r\n });\r\n handleModalClose();\r\n };\r\n\r\n const handleCategorySelect = useCallback((data: any) => {\r\n setSelectedCategoryData(data);\r\n }, []);\r\n\r\n const updateUomFields = useCallback(async () => {\r\n if (!watchedUom) return\r\n const filter = {\r\n '&template_id.eq': watchedUom,\r\n '&is_base_unit.eq': 1\r\n }\r\n const uomData = await fetchOptions('uom', filter, [], false)\r\n unitFields.forEach((item) => {\r\n setValue(`inventory_fixed_asset_item.${item}`, uomData?.id)\r\n })\r\n }, [watchedUom])\r\n useEffect(() => {\r\n updateUomFields()\r\n }, [updateUomFields])\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='md'\r\n fullWidth\r\n {...modalProps}>\r\n <>\r\n <FormProvider {...methods}>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && (\r\n <ModalLoader />\r\n )}\r\n <DialogTitle className='fixedAssetItemAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t(\"inventory.fixed_asset_items.modal.title\", \"Add Fixed Asset Item\")}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='fixedAssetItemAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n {/* Name */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.fixed_asset_items.modal.name_label\", \"Name\")}\r\n name='name'\r\n fieldArrayName='inventory_fixed_asset_item'\r\n placeholder={t(\"inventory.fixed_asset_items.modal.name_placeholder\", \"Enter Name\")}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/* SKU - Auto-generated */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.fixed_asset_items.modal.sku_label\", \"SKU\")}\r\n name='sku'\r\n fieldArrayName='inventory_fixed_asset_item'\r\n placeholder={t(\"inventory.fixed_asset_items.modal.sku_placeholder\", \"Auto-generated\")}\r\n required\r\n disabled\r\n />\r\n </Grid>\r\n\r\n {/* Category */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.category_label\", \"Category\")}\r\n name=\"category\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.category_placeholder\", \"Select Category\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='categoryItems'\r\n options={[]}\r\n required={true}\r\n getSelectedData={handleCategorySelect}\r\n />\r\n </Grid>\r\n\r\n\r\n {/* Company */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.company_label\", \"Company\")}\r\n name=\"company\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.company_placeholder\", \"Select Company\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='company'\r\n options={[]}\r\n is_multiselect={true}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Costing Method */}\r\n <Grid item sm={6}>\r\n <DynamicSelect\r\n label={t(\"inventory.fixed_asset_items.modal.costing_method_label\", \"Costing Method\")}\r\n name=\"costing_method\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.costing_method_placeholder\", \"Select Costing Method\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n options={COSTING_METHODS}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Unit of Measurement Section Header */}\r\n <Grid item xs={12} pt={2}>\r\n <Typography type='s3' weight='medium' color='theme.neutral.900'>\r\n {t(\"inventory.fixed_asset_items.modal.uom_section\", \"Unit of Measurement\")}\r\n </Typography>\r\n </Grid>\r\n\r\n {/* UOM Template */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.unit_of_measurement_label\", \"UOM Template\")}\r\n name=\"unit_of_measurement\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.unit_of_measurement_placeholder\", \"Select UOM Template\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='uom_templates'\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Stock Unit */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.stock_unit_label\", \"Stock Unit\")}\r\n name=\"stock_unit\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.stock_unit_placeholder\", \"Select Stock Unit\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='uom'\r\n customFilter={{\r\n '&template_id.eq': watchedUom || 0\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Purchase Unit */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.purchase_unit_label\", \"Purchase Unit\")}\r\n name=\"purchase_unit\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.purchase_unit_placeholder\", \"Select Purchase Unit\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='uom'\r\n customFilter={{\r\n '&template_id.eq': watchedUom || 0\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Sales Unit */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.sales_unit_label\", \"Consumption Unit\")}\r\n name=\"sales_unit\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.sales_unit_placeholder\", \"Select Sales Unit\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='uom'\r\n customFilter={{\r\n '&template_id.eq': watchedUom || 0\r\n }}\r\n />\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.sales_unit_label\", \"Consumption Unit\")}\r\n name=\"consumption_unit\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.sales_unit_placeholder\", \"Select Sales Unit\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='uom'\r\n customFilter={{\r\n '&template_id.eq': watchedUom || 0\r\n }}\r\n />\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.base_unit_label\", \"Base Unit\")}\r\n name=\"base_unit\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.base_unit_placeholder\", \"Select Base Unit\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n disabled\r\n apiType='uom'\r\n customFilter={{\r\n '&template_id.eq': watchedUom || 0,\r\n '&is_base_unit.eq': 1\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Depreciation Method */}\r\n <Grid item sm={6}>\r\n <DynamicSelect\r\n label={t(\"inventory.fixed_asset_items.modal.depreciation_method_label\", \"Depreciation Method\")}\r\n name=\"depreciation_method\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.depreciation_method_placeholder\", \"Select Depreciation Method\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n options={DEPRECIATION_METHODS}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Declining Factor */}\r\n {watchedDepreciationMethod === 'Declining' && (\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='number'\r\n formControl={control}\r\n label={t(\"inventory.fixed_asset_items.modal.declining_factor_label\", \"Declining Factor\")}\r\n name='declining_factor'\r\n fieldArrayName='inventory_fixed_asset_item'\r\n placeholder={t(\"inventory.fixed_asset_items.modal.declining_factor_placeholder\", \"Enter Declining Factor\")}\r\n required\r\n />\r\n </Grid>\r\n )}\r\n\r\n {/* Computation Method */}\r\n <Grid item sm={6}>\r\n <DynamicSelect\r\n label={t(\"inventory.fixed_asset_items.modal.computation_method_label\", \"Computation Method\")}\r\n name=\"computation_method\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.computation_method_placeholder\", \"Select Computation Method\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n options={COMPUTATION_METHODS}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Accounting Section Header */}\r\n <Grid item xs={12} pt={2}>\r\n <Typography type='s3' weight='medium' color='theme.neutral.900'>\r\n {t(\"inventory.fixed_asset_items.modal.accounting_section\", \"Accounting\")}\r\n </Typography>\r\n </Grid>\r\n\r\n {/* Default Tax */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.default_tax_label\", \"Default Tax\")}\r\n name=\"default_tax_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.default_tax_placeholder\", \"Select Default Tax\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='taxTemplate'\r\n options={[]}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Income Account */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.income_account_label\", \"Income Account\")}\r\n name=\"income_account_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.income_account_placeholder\", \"Select Income Account\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='accounts'\r\n options={[]}\r\n required={true}\r\n customeFilter={{ '&account_parent_type.in': ['Income', 'Assets'] }}\r\n />\r\n </Grid>\r\n\r\n {/* Asset Account */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.asset_account_label\", \"Asset Account\")}\r\n name=\"asset_account_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.asset_account_placeholder\", \"Select Asset Account\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='accounts'\r\n options={[]}\r\n required={true}\r\n customeFilter={{ '&account_parent_type.eq': 'Assets' }}\r\n />\r\n </Grid>\r\n\r\n {/* COGS Account */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.cogs_account_label\", \"COGS Account\")}\r\n name=\"cogs_account_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.cogs_account_placeholder\", \"Select COGS Account\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='accounts'\r\n options={[]}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Fixed Asset Account */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.fixed_asset_account_label\", \"Fixed Asset Account\")}\r\n name=\"fixed_asset_account_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.fixed_asset_account_placeholder\", \"Select Fixed Asset Account\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='accounts'\r\n options={[]}\r\n required={true}\r\n customeFilter={{ '&account_parent_type.eq': 'Assets' }}\r\n />\r\n </Grid>\r\n\r\n {/* Depreciation Account */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.depreciation_account_label\", \"Depreciation Account\")}\r\n name=\"depreciation_account_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.depreciation_account_placeholder\", \"Select Depreciation Account\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='accounts'\r\n options={[]}\r\n required={true}\r\n customeFilter={{ '&account_parent_type.eq': 'Assets' }}\r\n />\r\n </Grid>\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='fixedAssetItemAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='fixedAssetItemAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}>\r\n {t(\"common.cancel\")}\r\n </Button>\r\n <Button type=\"button\" onClick={handleSubmit(onSubmit)}>{t(\"common.save\")}</Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </FormProvider>\r\n </>\r\n <Toast\r\n open={Boolean(toast)}\r\n type={toast?.type}\r\n message={toast?.message}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\r\n />\r\n </Modal>\r\n );\r\n};\r\n\r\nexport default FixedAssetItemAddModal;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, IModalComponentProps } from './form-control';\r\n\r\ninterface IFormValues {\r\n brand_data: {\r\n name: string;\r\n };\r\n}\r\n\r\nconst brandValidationSchema = Yup.object().shape({\r\n brand_data: Yup.object().shape({\r\n name: Yup.string().required('Name is required')\r\n })\r\n});\r\n\r\nexport const BrandAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n onSave,\r\n isLoading,\r\n modalProps,\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n const { control, handleSubmit, reset, trigger } = useForm<any>({\r\n mode: 'all',\r\n resolver: yupResolver(brandValidationSchema),\r\n defaultValues: {\r\n brand_data: {\r\n name: '',\r\n }\r\n }\r\n });\r\n\r\n const handleModalClose = () => {\r\n reset({ brand_data: { name: '' } });\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await onSave(values?.brand_data as any);\r\n handleModalClose();\r\n };\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='sm'\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && <ModalLoader />}\r\n <DialogTitle className='brandAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t(\"inventory.item.brandModal.title\")}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='brandAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.item.brandModal.brand_name_label\")}\r\n name='name'\r\n fieldArrayName='brand_data'\r\n placeholder={t(\"inventory.item.brandModal.brand_name_placeholder\")}\r\n required\r\n />\r\n </Grid>\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='brandAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='brandAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}\r\n >\r\n {t(\"common.cancel\")}\r\n </Button>\r\n <Button type='button' onClick={handleSubmit(onSubmit)}>{t(\"common.save\")}</Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </>\r\n </Modal>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, IModalComponentProps } from './form-control';\r\n\r\ninterface IFormValues {\r\n category_data: {\r\n category_name: string;\r\n };\r\n}\r\n\r\nconst categoryValidationSchema = Yup.object().shape({\r\n category_data: Yup.object().shape({\r\n category_name: Yup.string().required('Category Name is required'),\r\n })\r\n});\r\n\r\nexport const CategoryAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n onSave,\r\n isLoading,\r\n modalProps,\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n const { control, handleSubmit, reset, trigger } = useForm<any>({\r\n mode: 'all',\r\n resolver: yupResolver(categoryValidationSchema),\r\n defaultValues: {\r\n category_data: {\r\n category_name: '',\r\n }\r\n }\r\n });\r\n\r\n const handleModalClose = () => {\r\n reset({ category_data: { category_name: '' } });\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await onSave({\r\n category_data: {\r\n category_name: values.category_data.category_name,\r\n sku_prefix : values.category_data.sku_prefix,\r\n unique_items : values.category_data.unique_items,\r\n status: true,\r\n },\r\n attribute_data: [],\r\n } as any);\r\n handleModalClose();\r\n };\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='sm'\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && <ModalLoader />}\r\n <DialogTitle className='categoryAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t(\"inventory.item.categoryModal.title\")}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='categoryAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.item.categoryModal.category_name_label\")}\r\n name='category_name'\r\n fieldArrayName='category_data'\r\n placeholder={t(\"inventory.item.categoryModal.category_name_placeholder\")}\r\n required\r\n />\r\n </Grid> \r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.item.categoryModal.sku_prefix_label\")}\r\n name='sku_prefix'\r\n fieldArrayName='category_data'\r\n placeholder={t(\"inventory.item.categoryModal.sku_prefix_placeholder\")}\r\n />\r\n </Grid> \r\n\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.item.categoryModal.unique_items_label\")}\r\n name='unique_items'\r\n fieldArrayName='category_data'\r\n placeholder={t(\"inventory.item.categoryModal.unique_items_placeholder\")}\r\n />\r\n </Grid> \r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='categoryAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='categoryAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}\r\n >\r\n {t(\"common.cancel\")}\r\n </Button>\r\n <Button type='button' onClick={handleSubmit(onSubmit)}>{t(\"common.save\")}</Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </>\r\n </Modal>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { useState } from 'react';\r\nimport {\r\n\tBox,\r\n\tDialogActions,\r\n\tDialogContent,\r\n\tDialogTitle,\r\n\tGrid,\r\n\tIconButton,\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Button from '../button/button';\r\nimport { DynamicInput } from '../form-control';\r\nimport Modal from '../modal/modal';\r\nimport ModalLoader from '../loaders/modal-loader';\r\nimport Typography from '../typography/typography';\r\n\r\ninterface SourceTypeAddModalProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: (isOpen?: boolean) => void;\r\n\tisLoading?: boolean;\r\n\tonSave: (data: any) => Promise<void> | void;\r\n\tmodalProps?: any;\r\n}\r\n\r\ninterface SourceTypeFormValues {\r\n\tsource_type: {\r\n\t\tname: string;\r\n\t\tdescription: string;\r\n\t};\r\n}\r\n\r\nconst validationSchema = Yup.object().shape({\r\n\tsource_type: Yup.object().shape({\r\n\t\tname: Yup.string()\r\n\t\t\t.trim()\r\n\t\t\t.required('common.source_type.source_type_name_required')\r\n\t\t\t.max(255, 'common.source_type.source_type_name_max'),\r\n\t\tdescription: Yup.string()\r\n\t\t\t.nullable()\r\n\t\t\t.max(1000, 'common.source_type.description_max'),\r\n\t}),\r\n});\r\n\r\nconst defaultValues: SourceTypeFormValues = {\r\n\tsource_type: {\r\n\t\tname: '',\r\n\t\tdescription: '',\r\n\t},\r\n};\r\n\r\nconst SourceTypeAddModal: React.FC<SourceTypeAddModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tisLoading = false,\r\n\tonSave,\r\n\tmodalProps,\r\n}) => {\r\n\tconst { t } = useTranslation();\r\n\tconst [isSubmitting, setIsSubmitting] = useState(false);\r\n\r\n\tconst { control, handleSubmit, reset } = useForm<SourceTypeFormValues>({\r\n\t\tmode: 'all',\r\n\t\tresolver: yupResolver(validationSchema),\r\n\t\tdefaultValues,\r\n\t});\r\n\r\n\tconst handleClose = () => {\r\n\t\treset(defaultValues);\r\n\t\tsetIsOpen(false);\r\n\t};\r\n\r\n\tconst onSubmit = async (values: SourceTypeFormValues) => {\r\n\t\tsetIsSubmitting(true);\r\n\t\ttry {\r\n\t\t\tawait onSave({\r\n\t\t\t\t...values.source_type,\r\n\t\t\t\tdescription: values.source_type.description?.trim() || null,\r\n\t\t\t});\r\n\t\t\thandleClose();\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(t('common.source_type.error_creating_source_type'), error);\r\n\t\t} finally {\r\n\t\t\tsetIsSubmitting(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleSubmitForm = (e: React.FormEvent<HTMLFormElement>) => {\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t\thandleSubmit(onSubmit)(e);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\topen={isOpen}\r\n\t\t\tonClose={handleClose}\r\n\t\t\tmaxWidth={modalProps?.maxWidth || 'sm'}\r\n\t\t\tfullWidth={modalProps?.fullWidth ?? true}\r\n\t\t\t{...modalProps}\r\n\t\t>\r\n\t\t\t<form onSubmit={handleSubmitForm}>\r\n\t\t\t\t{(isSubmitting || isLoading) && <ModalLoader />}\r\n\t\t\t\t<DialogTitle className=\"brandAddModal--DialogTitle\">\r\n\t\t\t\t\t<Typography type=\"s3\" color=\"inherit\" weight=\"medium\">\r\n\t\t\t\t\t\t{t('common.source_type.create_new_source_type')}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t<IconButton onClick={(e) => {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\thandleClose();\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Close fontSize=\"small\" />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</DialogTitle>\r\n\t\t\t\t<DialogContent dividers>\r\n\t\t\t\t\t<Grid container spacing={2}>\r\n\t\t\t\t\t\t<Grid item xs={12}>\r\n\t\t\t\t\t\t\t<DynamicInput\r\n\t\t\t\t\t\t\t\tlabel={t('common.source_type.source_type_name')}\r\n\t\t\t\t\t\t\t\tname=\"name\"\r\n\t\t\t\t\t\t\t\tfieldArrayName=\"source_type\"\r\n\t\t\t\t\t\t\t\tplaceholder={t('common.source_type.enter_source_type_name')}\r\n\t\t\t\t\t\t\t\tformControl={control}\r\n\t\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t\t<Grid item xs={12}>\r\n\t\t\t\t\t\t\t<DynamicInput\r\n\t\t\t\t\t\t\t\tlabel={t('common.source_type.description')}\r\n\t\t\t\t\t\t\t\tname=\"description\"\r\n\t\t\t\t\t\t\t\tfieldArrayName=\"source_type\"\r\n\t\t\t\t\t\t\t\tplaceholder={t('common.source_type.enter_description_optional')}\r\n\t\t\t\t\t\t\t\tformControl={control}\r\n\t\t\t\t\t\t\t\tis_multiline\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</DialogContent>\r\n\t\t\t\t<DialogActions>\r\n\t\t\t\t\t<Box display=\"flex\" gap={1.5} width=\"100%\" justifyContent=\"flex-end\">\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\thandleClose();\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tdisabled={isSubmitting || isLoading}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{t('common.cancel')}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"contained\"\r\n\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\t\t\t\tloading={isSubmitting || isLoading}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{t('common.source_type.create_source_type')}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</DialogActions>\r\n\t\t\t</form>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n\r\nexport { SourceTypeAddModal };\r\n","import { getErrorMessage, getToken } from '../../../../utils/common';\r\nimport { postV1WarehouseLocation, postV1InventoryFixedAssetItems, postV1CategoryItems, postV1Brand } from '../../../../api-client/api.inventory/api';\r\nimport { PostV1WarehouseLocationRequest } from '../../../../api-client/api.inventory/api-types';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { postV1Parties, postV1PartiesIndustry } from '../../../../api-client/api.accounting/api';\r\nimport { postV1Teams, postV1Designation, postV1Departments, postV1DepartmentsTeams } from '../../../../api-client/api.hrms/api';\r\nimport { postV1SourceTypes } from '../../../../api-client/api.sales/api';\r\nimport { CustomerVendorModal } from '@/components/parties-modal';\r\nimport { TeamAddModal } from '../../../team-add-modal';\r\nimport { DepartmentAddModal } from '@/components/department-add-modal';\r\nimport { LocationAddModal } from './location-add-modal';\r\nimport { DesignationAddModal } from '@/components/designation-add-modal';\r\nimport { FixedAssetItemAddModal } from './fixed-asset-item-add-modal';\r\nimport { DialogProps } from '@mui/material';\r\nimport { BrandAddModal } from '@/components/brand-add-modal';\r\nimport { CategoryAddModal } from '@/components/category-add-modal';\r\nimport { IndustryAddModal } from '@/components/industry-add-modal';\r\nimport { SourceTypeAddModal } from '@/components/source-type-add-modal/source-type-add-modal';\r\n\r\nexport const createApiThunk = async (api: (payload: any) => Promise<any>, payload: any) => {\r\n\ttry {\r\n\t\treturn await api({ ...payload, ...getToken() })\r\n\t} catch (error) {\r\n\t\tenqueueSnackbar(getErrorMessage(error?.message), { variant: 'error' });\r\n\t\tthrow error;\r\n\t}\r\n}\r\n\r\nexport interface IAddConfig {\r\n\tapi: (payload: any) => Promise<any>;\r\n\tcomponent: any;\r\n}\r\n\r\nexport interface IModalComponentProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: () => void;\r\n\tmodalProps?: DialogProps;\r\n\tonSave: (data: string) => void;\r\n\tisLoading?: boolean;\r\n}\r\n\r\nconst addMapper: Record<string, IAddConfig> = {\r\n\tlocation: {\r\n\t\tapi: (payload: PostV1WarehouseLocationRequest) => createApiThunk(postV1WarehouseLocation, payload),\r\n\t\tcomponent: LocationAddModal,\r\n\t},\r\n\tparty: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1Parties, payload),\r\n\t\tcomponent: CustomerVendorModal,\r\n\t},\r\n\tdepartment: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1Departments, payload),\r\n\t\tcomponent: DepartmentAddModal,\r\n\t},\r\n\tteam: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1DepartmentsTeams, payload),\r\n\t\tcomponent: TeamAddModal,\r\n\t},\r\n\tdesignation: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1Designation, payload),\r\n\t\tcomponent: DesignationAddModal,\r\n\t},\r\n\tfixedAssetItem: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1InventoryFixedAssetItems, payload),\r\n\t\tcomponent: FixedAssetItemAddModal,\r\n\t},\r\n\tbrand: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1Brand, payload),\r\n\t\tcomponent: BrandAddModal,\r\n\t},\r\n\tcategory: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1CategoryItems, payload),\r\n\t\tcomponent: CategoryAddModal,\r\n\t},\r\n\tindustry: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1PartiesIndustry, payload),\r\n\t\tcomponent: IndustryAddModal,\r\n\t},\r\n\tsourceType: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1SourceTypes, payload),\r\n\t\tcomponent: SourceTypeAddModal,\r\n\t},\r\n};\r\n\r\nexport const dynamicSelectAdd = (addType: string): IAddConfig | null => {\r\n\tconst config = addMapper[addType];\r\n\r\n\tif (!config) {\r\n\t\tconsole.warn(`No configuration found for addType: ${addType}`);\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn {\r\n\t\t...config\r\n\t};\r\n};","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, IModalComponentProps } from './form-control';\r\n\r\ninterface IndustryFormValues {\r\n\tindustry: {\r\n\t\tname: string;\r\n\t};\r\n}\r\n\r\ninterface IndustryAddModalProps extends IModalComponentProps {\r\n\ttype?: string;\r\n}\r\n\r\nexport const IndustryAddModal: React.FC<IndustryAddModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tonSave,\r\n\tisLoading,\r\n\tmodalProps,\r\n}) => {\r\n\tconst { t } = useTranslation();\r\n\r\n\tconst validationSchema = Yup.object().shape({\r\n\t\tindustry: Yup.object().shape({\r\n\t\t\tname: Yup.string()\r\n\t\t\t\t.required('Industry name is required')\r\n\t\t\t\t.max(255, 'Industry name must be at most 255 characters'),\r\n\t\t}),\r\n\t});\r\n\r\n\tconst { control, handleSubmit, reset } = useForm<IndustryFormValues>({\r\n\t\tresolver: yupResolver(validationSchema),\r\n\t\tmode: 'all',\r\n\t\tdefaultValues: {\r\n\t\t\tindustry: {\r\n\t\t\t\tname: '',\r\n\t\t\t},\r\n\t\t},\r\n\t});\r\n\r\n\tconst handleClose = () => {\r\n\t\treset({\r\n\t\t\tindustry: {\r\n\t\t\t\tname: '',\r\n\t\t\t},\r\n\t\t});\r\n\t\tsetIsOpen(false);\r\n\t};\r\n\r\n\tconst handleFormSubmit = (event?: React.BaseSyntheticEvent) => {\r\n\t\tevent?.preventDefault();\r\n\t\tevent?.stopPropagation();\r\n\r\n\t\treturn handleSubmit(onSubmit)(event);\r\n\t};\r\n\r\n\tconst onSubmit = async (data: IndustryFormValues) => {\r\n\t\ttry {\r\n\t\t\tawait onSave(data.industry as any);\r\n\t\t\thandleClose();\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('❌ ~ Error saving industry:', error);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\topen={isOpen}\r\n\t\t\tonClose={handleClose}\r\n\t\t\tmaxWidth={modalProps?.maxWidth || 'sm'}\r\n\t\t\tfullWidth={modalProps?.fullWidth || true}\r\n\t\t\tclassName=\"industry-add-modal\"\r\n\t\t>\r\n\t\t\t<DialogTitle>\r\n\t\t\t\t<Typography type=\"h5\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n\t\t\t\t\t{t('crm.leads.fields.create_industry_label', 'Create New Industry')}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t<Close fontSize='small' />\r\n\t\t\t\t</IconButton>\r\n\t\t\t</DialogTitle>\r\n\r\n\t\t\t<form onSubmit={handleFormSubmit}>\r\n\t\t\t\t<DialogContent>\r\n\t\t\t\t\t{isLoading ? (\r\n\t\t\t\t\t\t<ModalLoader />\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<Grid container spacing={3}>\r\n\t\t\t\t\t\t\t<Grid item xs={12}>\r\n\t\t\t\t\t\t\t\t<DynamicInput\r\n\t\t\t\t\t\t\t\t\tlabel={t('crm.leads.fields.industry_name_label', 'Industry Name')}\r\n\t\t\t\t\t\t\t\t\tname=\"name\"\r\n\t\t\t\t\t\t\t\t\tplaceholder={t('crm.leads.fields.industry_name_placeholder', 'Enter Industry Name')}\r\n\t\t\t\t\t\t\t\t\tfieldArrayName=\"industry\"\r\n\t\t\t\t\t\t\t\t\tformControl={control}\r\n\t\t\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</DialogContent>\r\n\r\n\t\t\t\t<DialogActions>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tonClick={handleClose}\r\n\t\t\t\t\t\tdisabled={isLoading}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{t('common.cancel', 'Cancel')}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\tvariant=\"contained\"\r\n\t\t\t\t\t\tdisabled={isLoading}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{t('common.save', 'Save')}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</DialogActions>\r\n\t\t\t</form>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n","import { useEffect, useState } from 'react';\r\nimport { useAuth } from './useAuth';\r\n\r\nconst setCompany = (user: any) => {\r\n return {\r\n value: user?.company_id,\r\n options: [{\r\n label: user?.company_data?.name,\r\n value: user?.company_id\r\n }]\r\n }\r\n}\r\n\r\n// const setCurrency = (user: any) => {\r\n// return {\r\n// value: user?.currency_id,\r\n// options: [{\r\n// label: user?.currency_data?.name,\r\n// value: user?.currency_id\r\n// }]\r\n// }\r\n// }\r\n\r\n// const setLocation = (user: any) => {\r\n// return {\r\n// value: user?.location_id,\r\n// options: user?.location_id ? [{\r\n// label: user?.location_data?.name,\r\n// value: user?.location_id\r\n// }] : []\r\n// }\r\n// }\r\n\r\n// const setDepartment = (user: any) => {\r\n// return {\r\n// value: user?.department_id,\r\n// options: user?.department_id ? [{\r\n// label: user?.department_data?.name,\r\n// value: user?.department_id\r\n// }] : []\r\n// }\r\n// }\r\n\r\nexport const configMapper: Record<string, any> = {\r\n 'company': {\r\n callBack: setCompany,\r\n },\r\n 'company_id': {\r\n callBack: setCompany,\r\n },\r\n // 'currency': {\r\n // callBack: setCurrency,\r\n // },\r\n // 'currency_id': {\r\n // callBack: setCurrency,\r\n // },\r\n // 'location': {\r\n // callBack: setLocation,\r\n // },\r\n // 'location_id': {\r\n // callBack: setLocation,\r\n // },\r\n // 'department': {\r\n // callBack: setDepartment,\r\n // },\r\n // 'department_id': {\r\n // callBack: setDepartment,\r\n // }\r\n}\r\n\r\nexport const getDefaultConfig = (props: any, user: any) => {\r\n const { apiType, name } = props;\r\n const config = configMapper[apiType || name];\r\n if (config) {\r\n return config.callBack(user)\r\n }\r\n return {\r\n value: null,\r\n options: []\r\n }\r\n}\r\n\r\nexport const useDefaultConfig = ({\r\n props,\r\n setValue,\r\n isInternalOptions\r\n}: {\r\n props: any;\r\n setValue?: any;\r\n isInternalOptions: boolean;\r\n}) => {\r\n const { user } = useAuth();\r\n const [defaultOptions, setDefaultOptions] = useState<any>([]);\r\n useEffect(() => {\r\n const { value, options } = getDefaultConfig(props, user);\r\n if (value === null || value === undefined) return;\r\n if (typeof setValue === 'function') {\r\n setValue(`${props.fieldArrayName}.${props.name}`, props?.is_multiselect ? [value] : value);\r\n }\r\n if (!isInternalOptions) {\r\n setDefaultOptions(options);\r\n }\r\n }, [props?.name, user, setValue]);\r\n\r\n return {\r\n defaultOptions\r\n }\r\n}","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { Controller, useFormContext, useWatch, Control } from 'react-hook-form';\r\nimport { dynamicSelectAdd } from './select-configuration';\r\nimport {\r\n Box,\r\n CircularProgress,\r\n Divider,\r\n IconButton,\r\n InputAdornment,\r\n MenuItem,\r\n MenuItemProps,\r\n OutlinedInput,\r\n Tooltip\r\n} from '@mui/material';\r\nimport PropTypes from 'prop-types';\r\nimport { debounce } from 'lodash';\r\nimport { sortBy } from \"lodash\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Add, Close } from '@mui/icons-material';\r\n\r\nimport Select from '../../../select/select';\r\nimport ChipOrPlaceholder from './chip-or-placeholder';\r\nimport Checkbox from '../../../checkbox/checkbox';\r\nimport Typography from '../../../typography/typography';\r\nimport Chip from '../../../chip/chip';\r\nimport { MoreIcon } from '../../../icons';\r\nimport { fetchApi } from '../../../../utils/api';\r\nimport './element.scss';\r\nimport { useLanguage } from '@/hooks';\r\nimport { useDefaultConfig } from '@/hooks/useSetDefaultConfig';\r\n\r\n// Types\r\ninterface IOption {\r\n id: string | number;\r\n value: string | number;\r\n label: string | React.ReactNode;\r\n disabled?: boolean;\r\n isGroup?: boolean;\r\n options?: IOption[];\r\n searchLabel?: string;\r\n}\r\n\r\n// Custom API fetch function type for parent components\r\ninterface CustomFetchApiParams {\r\n search?: string;\r\n filters?: any;\r\n limit: number;\r\n skip: number;\r\n select?: string;\r\n order?: string;\r\n}\r\n\r\ninterface CustomFetchApiResponse {\r\n data: IOption[];\r\n pagination?: {\r\n totalCount: number;\r\n };\r\n}\r\n\r\ninterface IMenuItemsProps extends MenuItemProps {\r\n options: IOption[];\r\n multiple: boolean;\r\n placeholder: string;\r\n with_checkboxes: boolean;\r\n values: string | string[];\r\n field: IDynamicSearchSelectProps;\r\n disabledIds: (string | number)[];\r\n onChange: (value: string | string[]) => void;\r\n handleChange?: (value: string | string[]) => void;\r\n hasParent: boolean;\r\n t: (key: string) => string;\r\n // onFooterClick?: () => void;\r\n}\r\n\r\ninterface IDynamicSearchSelectProps {\r\n name: string;\r\n placeholder: string;\r\n label: string;\r\n size?: 'small' | 'medium';\r\n options: IOption[];\r\n formControl: Control<any>;\r\n defaultValue?: string | string[];\r\n fieldArrayName: string;\r\n id?: string;\r\n required?: boolean;\r\n is_multiselect?: boolean;\r\n position?: number;\r\n formType?: string;\r\n typeOfField?: string;\r\n disabled?: boolean;\r\n onChipRemove?: (value: string) => void;\r\n enable_footer?: boolean;\r\n footer_action?: string;\r\n onFooterClick?: () => void;\r\n is_loading?: boolean;\r\n selectedLabel?: string;\r\n isInternal?: boolean;\r\n disabledIds?: (string | number)[];\r\n getSelectedData?: (data: IOption | IOption[] | null, name: string) => void;\r\n attributes?: string[];\r\n handleChange?: (value: string | string[]) => void;\r\n hasParent?: boolean;\r\n sortOrder?: string;\r\n apiType?: string;\r\n handleOptions?: (value: any) => void;\r\n filterKey?: string;\r\n customeFilter?: Record<string, any>;\r\n refresh?: boolean;\r\n addType?: string;\r\n showCancelButton?: boolean;\r\n /** Custom API function to fetch options from parent component */\r\n customFetchApi?: (params: CustomFetchApiParams) => Promise<CustomFetchApiResponse>;\r\n isMergeOptions?: boolean;\r\n showItemTooltip?: boolean;\r\n}\r\n\r\ninterface IPaginationState {\r\n page: number;\r\n hasMore: boolean;\r\n isLoadingMore: boolean;\r\n total: number;\r\n}\r\n\r\n// Helper function to generate menu items\r\nconst generateMenuItems = ({\r\n options,\r\n multiple,\r\n placeholder,\r\n with_checkboxes,\r\n values,\r\n // field,\r\n disabledIds,\r\n onChange,\r\n handleChange,\r\n hasParent,\r\n t,\r\n // onFooterClick\r\n}: IMenuItemsProps): React.ReactElement[] => {\r\n const itemDisabled = (id: string | number) => disabledIds?.includes(id);\r\n const items: React.ReactElement[] = [];\r\n\r\n if (!multiple) {\r\n items.push(\r\n <MenuItem disabled value='' key=\"placeholder\" sx={{ opacity: `0 !important`, height: `0 !important`, p: `0 !important`, m: `0 !important` }}>\r\n <Typography type='s3' color='theme.secondary.1000'>\r\n <em>{t(placeholder)}</em>\r\n </Typography>\r\n </MenuItem>\r\n );\r\n }\r\n const selectedValues = (Array.isArray(values) && values?.length > 0) ? values?.filter((value) => value) : values;\r\n\r\n const handleParentChange = (parentValue: string, childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n\r\n const isParentSelected = valueArray.includes(parentValue);\r\n const updatedValues = isParentSelected\r\n ? valueArray.filter((value) => value !== parentValue && !childValues.includes(value))\r\n : [...new Set([...valueArray, parentValue, ...childValues])];\r\n\r\n onChange(updatedValues);\r\n handleChange?.(updatedValues);\r\n };\r\n\r\n const isAllOptionsSelected = (parentValue: string, childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n return childValues.every((childValue) => valueArray.includes(childValue));\r\n };\r\n\r\n const isSomeOptionsSelected = (childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n return childValues.some((childValue) => valueArray.includes(childValue));\r\n };\r\n\r\n if (Array.isArray(options) && options.length > 0) {\r\n options.forEach((option) => {\r\n items.push(\r\n <MenuItem\r\n value={option.value}\r\n key={option.value}\r\n disabled={Boolean(option.disabled) || itemDisabled(option.id || option.value)}\r\n className={option.isGroup ? 'select--MenuItemHeader' : ''}\r\n >\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n {multiple && with_checkboxes && (\r\n <Checkbox\r\n checked={\r\n hasParent\r\n ? isAllOptionsSelected(option.value, option.options || [])\r\n : Boolean(Array.isArray(selectedValues) ? selectedValues.includes(option.value) : selectedValues == option.value)\r\n }\r\n indeterminate={\r\n hasParent && isSomeOptionsSelected(option.options || [])\r\n }\r\n onChange={() => hasParent ? handleParentChange(option.value, option.options || []) : handleChange?.(option.value)}\r\n />\r\n )}\r\n <Typography\r\n type='s3'\r\n color='theme.secondary.1000'\r\n onClick={() => handleChange?.(option.value)}\r\n >\r\n {option.label}\r\n </Typography>\r\n </Box>\r\n </MenuItem>\r\n );\r\n\r\n if (option.isGroup && Array.isArray(option.options)) {\r\n option.options.forEach((opt) => {\r\n items.push(\r\n <MenuItem\r\n value={opt.value}\r\n disabled={Boolean(opt.disabled) || itemDisabled(opt.id || opt.value)}\r\n sx={{ pl: 5 }}\r\n key={`${option.value}-${opt.value}`}\r\n >\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n {multiple && with_checkboxes && (\r\n <Checkbox\r\n checked={Boolean(Array.isArray(values) && values.includes(opt.value))}\r\n />\r\n )}\r\n <Typography\r\n type='s3'\r\n color='theme.secondary.1000'\r\n onClick={() => handleChange?.(String(opt.value))}\r\n >\r\n {opt.label == \"Payment Entries\" ? \"Payment and Collection Entries\" : opt.label || opt.value}\r\n </Typography>\r\n </Box>\r\n </MenuItem>\r\n );\r\n });\r\n }\r\n });\r\n }\r\n\r\n // if (field.enable_footer) {\r\n\r\n // }\r\n\r\n if (!items.length || (items.length == 1 && !multiple)) {\r\n items.push(\r\n <MenuItem disabled key=\"no-data\">\r\n No data available\r\n </MenuItem>\r\n );\r\n }\r\n\r\n return items;\r\n};\r\n\r\n// Selected items component\r\nconst SelectedItems: React.FC<{\r\n data: (string | number)[];\r\n options: IOption[];\r\n}> = ({ data, options }) => {\r\n const displayTitle = data.map(\r\n (selectedItem) =>\r\n options?.find((option) => option.value == selectedItem)?.label || ''\r\n );\r\n const filteredDisplayTitle = displayTitle.filter(Boolean);\r\n\r\n return (\r\n <Typography\r\n type='s4'\r\n color='inherit'\r\n sx={{ display: 'flex', gap: 1, alignItems: 'center', mt: 0.5 }}\r\n >\r\n {filteredDisplayTitle.slice(0, 4).join(', ')}\r\n {data.length > 4 && (\r\n <Chip variant='outlined' type='normal' label={<MoreIcon />} />\r\n )}\r\n </Typography>\r\n );\r\n};\r\n\r\nconst Loading = () => (\r\n <Typography fontStyle='italic' color='inherit' type='s3'>Loading...</Typography>\r\n)\r\n\r\nconst DynamicSearchSelect: React.FC<IDynamicSearchSelectProps> = React.memo((props) => {\r\n const watchedValue = useWatch({\r\n control: props.formControl,\r\n name: `${props.fieldArrayName}.${props.name}`\r\n });\r\n\r\n const formContext = useFormContext();\r\n const { setValue } = formContext || {};\r\n const { t } = useTranslation();\r\n const { isRtl } = useLanguage();\r\n const selectRef = useRef<HTMLDivElement>(null);\r\n\r\n // State management\r\n const [options, setOptions] = useState<IOption[]>([]);\r\n const [selectedValue, setSelectedValue] = useState<any>(null);\r\n const [selectedOptions, setSelectedOptions] = useState<IOption[]>([]);\r\n const [loading, setLoading] = useState<boolean>(false);\r\n const [open, setOpen] = useState<boolean>(false);\r\n const [isAlreadyLoaded, setIsAlreadyLoaded] = useState<boolean>(false);\r\n const [prevFilter, setPrevFilter] = useState<any>(null);\r\n const [initialLoading, setInitialLoading] = useState<boolean>(false);\r\n const [searchQuery, setSearchQuery] = useState<string>(\"\");\r\n const [searchInitiate, setSearchInitiate] = useState<boolean>(false);\r\n const [addConfig, setAddConfig] = useState<any>(null);\r\n\r\n // Modal states\r\n const [isModalOpen, setIsModalOpen] = useState<boolean>(false);\r\n const [isAddLoading, setIsAddLoading] = useState<boolean>(false);\r\n\r\n\r\n // Pagination state\r\n const [pagination, setPagination] = useState<IPaginationState>({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n\r\n // Props destructuring with defaults\r\n const {\r\n handleOptions,\r\n isInternal = false,\r\n disabledIds = [],\r\n getSelectedData,\r\n attributes = [],\r\n filterKey = 'id',\r\n customeFilter = {},\r\n refresh,\r\n handleChange,\r\n hasParent = false,\r\n sortOrder = 'id:-1',\r\n apiType,\r\n addType,\r\n showCancelButton = true,\r\n customFetchApi,\r\n isMergeOptions = false,\r\n } = props;\r\n\r\n const showItemTooltip = props.showItemTooltip ?? (apiType === 'salesItems');\r\n\r\n const limit = 25;\r\n\r\n // Memoized values\r\n // Memoized values\r\n const isInternalOptions = useMemo(() => {\r\n if (isMergeOptions && (apiType || customFetchApi)) return false;\r\n return (!apiType && !customFetchApi) || (isInternal ? (apiType || customFetchApi) && props.options?.length == 0 ? false : true : false);\r\n }, [isInternal, apiType, customFetchApi, props.options?.length, isMergeOptions]);\r\n\r\n\r\n //eslint-disable-next-line\r\n const cf = useMemo(() => customeFilter, [JSON.stringify(customeFilter)]);\r\n\r\n\r\n\r\n\r\n const { defaultOptions = [] } = useDefaultConfig({\r\n props,\r\n setValue,\r\n isInternalOptions\r\n });\r\n\r\n\r\n // Local search function\r\n const searchOptionsLocally = useCallback((searchTerm: string, value: any): IOption[] => {\r\n const currentOptions: IOption[] = (props.options && props.options.length > 0) ? props.options : (defaultOptions || []);\r\n if (!searchTerm) return currentOptions;\r\n\r\n const lowercasedSearchTerm = searchTerm.toLowerCase();\r\n\r\n const filteredOptions = hasParent\r\n ? currentOptions?.reduce((acc: IOption[], opt: IOption) => {\r\n const searchedOptions = opt.options?.filter((item: IOption) => {\r\n const label = React.isValidElement(item.label) ? item.searchLabel : String(item.label);\r\n return label?.toLowerCase().includes(lowercasedSearchTerm);\r\n });\r\n\r\n if (searchedOptions?.length) {\r\n acc.push({ ...opt, options: searchedOptions });\r\n }\r\n\r\n return acc;\r\n }, []) || []\r\n : currentOptions?.filter((opt: IOption) => {\r\n const label = React.isValidElement(opt.label) ? opt.searchLabel : String(opt.label);\r\n return label?.toLowerCase().includes(lowercasedSearchTerm);\r\n }) || [];\r\n\r\n //eslint-disable-next-line\r\n return sortBySelectedValues(filteredOptions, value);\r\n //eslint-disable-next-line\r\n }, [props.options, hasParent, defaultOptions]);\r\n\r\n // Get unique options\r\n const getUniqueOptions = useCallback((data: IOption[]): IOption[] => {\r\n const uniqueOptions = [\r\n ...new Map(data?.map(item => [item.value, item])).values()\r\n ];\r\n return uniqueOptions;\r\n }, []);\r\n\r\n // Sort by selected values\r\n const sortBySelectedValues = useCallback((arrayToSort: IOption[], value: any): IOption[] => {\r\n let selectedValues = Array.isArray(value) ? value : [value];\r\n selectedValues = selectedValues.map((item) => Number(item));\r\n const sortedValue = sortBy(arrayToSort, (item) => {\r\n const index = selectedValues.indexOf(item.id || item.value);\r\n return index == -1 ? Infinity : index;\r\n });\r\n return sortedValue;\r\n }, []);\r\n\r\n // Filtered options with pagination support\r\n const filteredOptions = useMemo(() => {\r\n if (isInternalOptions) {\r\n return searchOptionsLocally(searchQuery, watchedValue);\r\n }\r\n const apiOptions = sortBySelectedValues(getUniqueOptions([...options, ...selectedOptions]), watchedValue);\r\n if (isMergeOptions) {\r\n const localOptions = searchOptionsLocally(searchQuery, watchedValue);\r\n return getUniqueOptions([...localOptions, ...apiOptions]);\r\n }\r\n return apiOptions;\r\n //eslint-disable-next-line\r\n }, [options, selectedOptions, isInternalOptions, props.options, watchedValue, searchQuery, searchOptionsLocally, sortBySelectedValues, getUniqueOptions, isMergeOptions]);\r\n\r\n // Helper to get selected item data for tooltip\r\n const getSelectedDataOptions = useMemo(() => {\r\n if (!watchedValue || !filteredOptions.length) return null;\r\n const selected = filteredOptions.find(opt => \r\n opt.id === watchedValue || opt.value === watchedValue\r\n );\r\n return selected || null;\r\n }, [watchedValue, filteredOptions]);\r\n\r\n // API Functions\r\n const fetchOptions = useCallback(async (searchTerm = '', flt = cf, page = 1, append = false) => {\r\n // Skip if neither apiType nor customFetchApi is provided\r\n if (!apiType && !customFetchApi) return [];\r\n\r\n setLoading(true);\r\n if (page > 1) {\r\n setPagination(prev => ({ ...prev, isLoadingMore: true }));\r\n }\r\n\r\n try {\r\n let data: IOption[] = [];\r\n let paginationResult: { totalCount?: number } = {};\r\n\r\n // Use custom API if provided, otherwise use default fetchApi\r\n if (customFetchApi) {\r\n const response = await customFetchApi({\r\n search: searchTerm,\r\n filters: flt,\r\n limit,\r\n skip: (page - 1) * limit,\r\n select: attributes?.join(','),\r\n order: sortOrder\r\n });\r\n data = response?.data || [];\r\n paginationResult = response?.pagination || {};\r\n } else {\r\n const response = await fetchApi({\r\n apiKey: apiType!,\r\n filters: {\r\n limit,\r\n skip: (page - 1) * limit,\r\n search: searchTerm,\r\n filters: flt,\r\n select: attributes,\r\n order: sortOrder\r\n }\r\n });\r\n data = response?.data || [];\r\n paginationResult = response?.pagination || {};\r\n }\r\n\r\n if (data && Array.isArray(data)) {\r\n const newOptions = append ? [...options, ...data] : data;\r\n\r\n updateOptions(newOptions, append);\r\n handleSelectedValue(data);\r\n // Update pagination\r\n setPagination(prev => ({\r\n ...prev,\r\n page,\r\n hasMore: (paginationResult?.totalCount || 0) > (page * limit),\r\n total: paginationResult?.totalCount || 0,\r\n isLoadingMore: false\r\n }));\r\n }\r\n\r\n return data || [];\r\n } catch (error) {\r\n console.error('Error fetching options:', error);\r\n setPagination(prev => ({ ...prev, isLoadingMore: false }));\r\n return [];\r\n } finally {\r\n setLoading(false);\r\n }\r\n //eslint-disable-next-line\r\n }, [apiType, customFetchApi, options, attributes, sortOrder, limit, cf]);\r\n\r\n // Handle scroll pagination\r\n const handleScroll = useCallback((event: React.UIEvent<HTMLDivElement>) => {\r\n const { scrollTop, scrollHeight, clientHeight } = event.currentTarget;\r\n const isBottom = scrollHeight - scrollTop <= clientHeight + 10;\r\n\r\n if (isBottom && pagination.hasMore && !pagination.isLoadingMore && !isInternalOptions) {\r\n const nextPage = pagination.page + 1;\r\n fetchOptions(searchQuery, cf, nextPage, true);\r\n }\r\n }, [pagination.hasMore, pagination.isLoadingMore, pagination.page, isInternalOptions, searchQuery, cf, fetchOptions]);\r\n\r\n // Update options\r\n const updateOptions = useCallback((newOptions: IOption[], append = false) => {\r\n const oldOptions = append ? options : selectedOptions;\r\n const uniqueOptions = getUniqueOptions([...oldOptions, ...newOptions]);\r\n setOptions(uniqueOptions);\r\n }, [options, selectedOptions, getUniqueOptions]);\r\n\r\n // Handle selected value\r\n const handleSelectedValue = useCallback(async (updateOptions: IOption[]) => {\r\n if (!watchedValue) return;\r\n let filterValue = props.is_multiselect ? watchedValue : [watchedValue];\r\n filterValue = Array.isArray(filterValue) ? filterValue?.filter(i => i) : [];\r\n filterValue = Array.isArray(filterValue) ? filterValue?.map((item) => Number(item)) : [];\r\n const isInOptions = updateOptions?.filter((item) =>\r\n Array.isArray(filterValue) ? filterValue.includes(item.id || item.value) : (item[filterKey] || item.value || item.id) == filterValue\r\n );\r\n\r\n if (Array.isArray(isInOptions) && isInOptions.length > 0) {\r\n getSelectedData?.(props.is_multiselect ? isInOptions : isInOptions[0], props.name);\r\n return true;\r\n }\r\n return false;\r\n //eslint-disable-next-line\r\n }, [props.is_multiselect, props.name, watchedValue, filterKey, getSelectedData, filteredOptions]);\r\n\r\n // Fetch options by ID\r\n const fetchIdOptions = useCallback(async () => {\r\n if (open) return;\r\n if (await handleSelectedValue(filteredOptions)) return;\r\n\r\n const condition = props.is_multiselect ?\r\n Array.isArray(watchedValue) && watchedValue.length > 0 :\r\n Boolean(watchedValue);\r\n\r\n if (condition) {\r\n setInitialLoading(true);\r\n const response = await fetchOptions('', { ...cf, '&id.in': watchedValue }, 1, false);\r\n setInitialLoading(false);\r\n\r\n if (response.length == 0 && setValue && !isInternalOptions) {\r\n // setValue(`${props.fieldArrayName}.${props.name}`, props.is_multiselect ? [] : null);\r\n }\r\n }\r\n //eslint-disable-next-line\r\n }, [open, watchedValue, JSON.stringify(cf)]);\r\n\r\n // Initial fetch\r\n const initialFetch = useCallback(async () => {\r\n const condition = JSON.stringify(cf) !== JSON.stringify(prevFilter);\r\n\r\n if (condition) {\r\n setPrevFilter(cf);\r\n setOptions([]);\r\n setIsAlreadyLoaded(false);\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n }\r\n\r\n if (!isInternalOptions && !isAlreadyLoaded) {\r\n await fetchOptions(searchQuery, cf, 1, false);\r\n setIsAlreadyLoaded(true);\r\n }\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [cf, isInternalOptions, isAlreadyLoaded]);\r\n\r\n // Debounced search\r\n const debouncedSearch = useMemo(\r\n () => debounce(async (searchTerm: string) => {\r\n if (loading) return;\r\n\r\n if (!searchTerm && !isInternalOptions && searchInitiate) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n await fetchOptions('', cf, 1, false);\r\n }\r\n if (searchTerm.length > 1 && !isInternalOptions) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n await fetchOptions(searchTerm, cf, 1, false);\r\n }\r\n }, 700),\r\n //eslint-disable-next-line\r\n [isInternalOptions, searchInitiate, cf]\r\n );\r\n\r\n // Reset value function\r\n const resetValue = useCallback((field: any) => {\r\n field.onChange(props.is_multiselect ? [] : null);\r\n if (getSelectedData) {\r\n getSelectedData(null, props.name);\r\n }\r\n }, [props.is_multiselect, props.name, getSelectedData]);\r\n\r\n // Handle close\r\n const handleClose = useCallback(() => {\r\n setOpen(false);\r\n if (searchQuery.length > 0) {\r\n setIsAlreadyLoaded(false);\r\n }\r\n setSearchInitiate(false);\r\n setSearchQuery('');\r\n }, [searchQuery]);\r\n\r\n const handleModalOpen = useCallback(() => {\r\n setIsModalOpen(true);\r\n }, []);\r\n\r\n\r\n\r\n // Handle modal save\r\n const handleModalSave = useCallback(async (payload: any) => {\r\n if (!addConfig || !addConfig.api) {\r\n console.error('Add configuration is not properly set');\r\n return;\r\n }\r\n\r\n setIsAddLoading(true);\r\n try {\r\n const result = await addConfig.api(payload);\r\n setIsAddLoading(false);\r\n setIsModalOpen(false);\r\n if (!isInternalOptions) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n setIsAlreadyLoaded(false);\r\n await fetchOptions('', cf, 1, false);\r\n }\r\n if (result && result.data) {\r\n const newValue = props.is_multiselect\r\n ? [...(watchedValue || []), result.data.id]\r\n : result.data.id;\r\n\r\n if (setValue) {\r\n setValue(`${props.fieldArrayName}.${props.name}`, newValue);\r\n }\r\n }\r\n } catch (error) {\r\n console.log(\"error\", error);\r\n setIsAddLoading(false);\r\n }\r\n\r\n\r\n }, [addConfig, isInternalOptions, fetchOptions, cf, props.is_multiselect, props.fieldArrayName, props.name, watchedValue, setValue]);\r\n\r\n // Effects\r\n useEffect(() => {\r\n if (handleOptions) {\r\n handleOptions(selectedValue);\r\n }\r\n }, [handleOptions, selectedValue]);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n initialFetch();\r\n }\r\n }, [open, initialFetch]);\r\n\r\n useEffect(() => {\r\n fetchIdOptions();\r\n }, [fetchIdOptions]);\r\n\r\n useEffect(() => {\r\n if (refresh) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n fetchOptions('', cf, 1, false);\r\n }\r\n }, [refresh, fetchOptions, cf]);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n debouncedSearch(searchQuery);\r\n }\r\n return () => debouncedSearch.cancel();\r\n }, [searchQuery, open, debouncedSearch]);\r\n\r\n useEffect(() => {\r\n if (watchedValue && !open) {\r\n const selectedData = options?.filter((item) =>\r\n props.is_multiselect ?\r\n Array.isArray(watchedValue) && watchedValue.includes(item.id || item.value) :\r\n (item.id || item.value) == watchedValue\r\n );\r\n setSelectedOptions(selectedData || []);\r\n }\r\n }, [watchedValue, options, props.is_multiselect]);\r\n\r\n const removeUndefined = useCallback((selectOptions: any[]) => {\r\n return Array.isArray(selectOptions) ? selectOptions.filter(Boolean) : [];\r\n }, []);\r\n\r\n useEffect(() => {\r\n const config = dynamicSelectAdd(addType);\r\n console.log(\"🚀 ~ config:\", config)\r\n setAddConfig(config);\r\n }, [addType])\r\n\r\n\r\n\r\n return (\r\n <Controller\r\n control={props.formControl}\r\n name={`${props.fieldArrayName}.${props.name}`}\r\n render={({ field, fieldState }) => (\r\n <>\r\n {props.placeholder == 'Select Currency' && setSelectedValue(field.value)}\r\n {showItemTooltip ? (\r\n <Tooltip\r\n title={getSelectedDataOptions?.label ? String(getSelectedDataOptions.label) : ''}\r\n placement='top'\r\n arrow\r\n slotProps={{\r\n popper: {\r\n modifiers: [{ name: 'offset', options: { offset: [0, -25] } }],\r\n },\r\n tooltip: {\r\n sx: { maxWidth: 500 },\r\n },\r\n }}\r\n >\r\n <span>\r\n <Select\r\n {...field}\r\n ref={selectRef}\r\n open={open}\r\n onOpen={() => {\r\n setOpen(true);\r\n setTimeout(() => {\r\n const searchInput = document.querySelector(\r\n `input[placeholder=\"Search ${props.label}\"]`\r\n ) as HTMLInputElement;\r\n console.log('Active Search input:', searchInput);\r\n searchInput?.focus();\r\n }, 150);\r\n }}\r\n onClose={handleClose}\r\n fullWidth\r\n dataPosition={props.position}\r\n dataName={`${props.fieldArrayName}.${props.name}`}\r\n placeholder={props.placeholder}\r\n label={props.label}\r\n defaultValue={props.defaultValue || (props.is_multiselect ? [] : '')}\r\n searchValue={searchQuery}\r\n required={props.formType == 'builder' ? false : props.required}\r\n size={props.size || 'small'}\r\n multiple={props.is_multiselect || false}\r\n disabled={props.disabled}\r\n sx={(props.is_multiselect && field?.value?.length) ? { \"& .MuiSelect-select\": { padding: '5.5px !important' } } : {}}\r\n variant='outlined'\r\n value={\r\n initialLoading\r\n ? (props.is_multiselect ? [] : '')\r\n : (field.value?.id || field.value || (props.is_multiselect ? [] : ''))\r\n }\r\n className={\r\n props.is_multiselect && removeUndefined(field.value)?.length\r\n ? 'MultiSelect filter-select'\r\n : ''\r\n }\r\n MenuProps={{\r\n PaperProps: {\r\n onScroll: handleScroll,\r\n style: { maxHeight: 300 }\r\n }\r\n }}\r\n\r\n renderValue={(selected: any) => {\r\n if (Array.isArray(selected)) {\r\n return (\r\n <ChipOrPlaceholder\r\n selectedLabel={props.selectedLabel}\r\n data={removeUndefined(selected)}\r\n placeholder={(loading || props.is_loading) ? <Loading /> : `${t('common.search')} ${props.label}`}\r\n onDelete={props.onChipRemove}\r\n disabled={props.disabled}\r\n chipProps={{\r\n sx: {\r\n background: '#ebf9f2',\r\n border: 0,\r\n // borderRadius: '15px',\r\n '& .MuiTypography-body1': {\r\n color: '#289b64',\r\n fontWeight: \"500\",\r\n }\r\n }\r\n }}\r\n />\r\n );\r\n } else {\r\n const selectedOption = filteredOptions.find(\r\n (option) => (option.value?.id || option.value) == selected\r\n );\r\n return (loading || props.is_loading) ? <Loading /> : selectedOption?.label ||\r\n (typeof props.label == 'string' ?\r\n `${t('common.search')} ${props.label}` :\r\n props.placeholder);\r\n }\r\n }}\r\n searchPlaceholder={`${t('common.search')} ${props.label}`}\r\n handleSearch={(text: string) => {\r\n setSearchQuery(text);\r\n setSearchInitiate(true);\r\n }}\r\n error={Boolean(fieldState.error?.message)}\r\n helperText={fieldState.error?.message || ''}\r\n onBlur={field.onBlur}\r\n input={\r\n <OutlinedInput\r\n label=''\r\n endAdornment={\r\n <InputAdornment position='end'>\r\n {(loading || props.is_loading) ? (\r\n <CircularProgress\r\n size={20}\r\n sx={{ mr: 3, color: \"#4AC08C\" }}\r\n />\r\n ) : (\r\n !props.disabled &&\r\n (props.is_multiselect ?\r\n (Array.isArray(field.value) && field.value.length > 0) :\r\n Boolean(field.value)) && showCancelButton && (\r\n <IconButton\r\n aria-label='clear selection'\r\n onClick={() => resetValue(field)}\r\n edge='end'\r\n sx={isRtl ? { ml: 2.5 } : { mr: 1.5 }}\r\n size='small'\r\n >\r\n <Close sx={{ fontSize: '1rem' }} />\r\n </IconButton>\r\n )\r\n )}\r\n </InputAdornment>\r\n }\r\n />\r\n }\r\n >\r\n {generateMenuItems({\r\n options: filteredOptions,\r\n multiple: Boolean(props.is_multiselect),\r\n placeholder: props.placeholder,\r\n values: field.value,\r\n with_checkboxes: true,\r\n field: props,\r\n disabledIds,\r\n onChange: field.onChange,\r\n handleChange,\r\n hasParent,\r\n t,\r\n // onFooterClick: () => {\r\n // if (props?.onFooterClick) {\r\n // props?.onFooterClick();\r\n // } else {\r\n // handleModalOpen();\r\n // }\r\n // }\r\n })}\r\n {props?.enable_footer &&\r\n <Box key=\"footer\" sx={{ position: 'sticky', bottom: 0, background: '#fff', zIndex: 1 }}>\r\n <Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n <MenuItem sx={{ gap: 1 }} onClick={\r\n () => {\r\n if (props?.onFooterClick) {\r\n props?.onFooterClick();\r\n } else {\r\n handleModalOpen();\r\n }\r\n }\r\n\r\n }>\r\n <Add fontSize='small' />\r\n <Typography type='s4' color='theme.secondary.1000'>\r\n Create New {props.label}\r\n </Typography>\r\n </MenuItem>\r\n </Box>}\r\n {pagination.isLoadingMore && (\r\n <MenuItem disabled>\r\n <Box sx={{ display: 'flex', justifyContent: 'center', width: '100%' }}>\r\n <CircularProgress size={20} />\r\n </Box>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n </span>\r\n </Tooltip>\r\n ) : (\r\n <Select\r\n {...field}\r\n ref={selectRef}\r\n open={open}\r\n onOpen={() => {\r\n setOpen(true);\r\n setTimeout(() => {\r\n const searchInput = document.querySelector(\r\n `input[placeholder=\"Search ${props.label}\"]`\r\n ) as HTMLInputElement;\r\n console.log('Active Search input:', searchInput);\r\n searchInput?.focus();\r\n }, 150);\r\n }}\r\n onClose={handleClose}\r\n fullWidth\r\n dataPosition={props.position}\r\n dataName={`${props.fieldArrayName}.${props.name}`}\r\n placeholder={props.placeholder}\r\n label={props.label}\r\n defaultValue={props.defaultValue || (props.is_multiselect ? [] : '')}\r\n searchValue={searchQuery}\r\n required={props.formType == 'builder' ? false : props.required}\r\n size={props.size || 'small'}\r\n multiple={props.is_multiselect || false}\r\n disabled={props.disabled}\r\n sx={(props.is_multiselect && field?.value?.length) ? { \"& .MuiSelect-select\": { padding: '5.5px !important' } } : {}}\r\n variant='outlined'\r\n value={\r\n initialLoading\r\n ? (props.is_multiselect ? [] : '')\r\n : (field.value?.id || field.value || (props.is_multiselect ? [] : ''))\r\n }\r\n className={\r\n props.is_multiselect && removeUndefined(field.value)?.length\r\n ? 'MultiSelect filter-select'\r\n : ''\r\n }\r\n MenuProps={{\r\n PaperProps: {\r\n onScroll: handleScroll,\r\n style: { maxHeight: 300 }\r\n }\r\n }}\r\n\r\n renderValue={(selected: any) => {\r\n if (Array.isArray(selected)) {\r\n return (\r\n <ChipOrPlaceholder\r\n selectedLabel={props.selectedLabel}\r\n data={removeUndefined(selected)}\r\n placeholder={(loading || props.is_loading) ? <Loading /> : `${t('common.search')} ${props.label}`}\r\n onDelete={props.onChipRemove}\r\n disabled={props.disabled}\r\n chipProps={{\r\n sx: {\r\n background: '#ebf9f2',\r\n border: 0,\r\n // borderRadius: '15px',\r\n '& .MuiTypography-body1': {\r\n color: '#289b64',\r\n fontWeight: \"500\",\r\n }\r\n }\r\n }}\r\n />\r\n );\r\n } else {\r\n const selectedOption = filteredOptions.find(\r\n (option) => (option.value?.id || option.value) == selected\r\n );\r\n return (loading || props.is_loading) ? <Loading /> : selectedOption?.label ||\r\n (typeof props.label == 'string' ?\r\n `${t('common.search')} ${props.label}` :\r\n props.placeholder);\r\n }\r\n }}\r\n searchPlaceholder={`${t('common.search')} ${props.label}`}\r\n handleSearch={(text: string) => {\r\n setSearchQuery(text);\r\n setSearchInitiate(true);\r\n }}\r\n error={Boolean(fieldState.error?.message)}\r\n helperText={fieldState.error?.message || ''}\r\n onBlur={field.onBlur}\r\n input={\r\n <OutlinedInput\r\n label=''\r\n endAdornment={\r\n <InputAdornment position='end'>\r\n {(loading || props.is_loading) ? (\r\n <CircularProgress\r\n size={20}\r\n sx={{ mr: 3, color: \"#4AC08C\" }}\r\n />\r\n ) : (\r\n !props.disabled &&\r\n (props.is_multiselect ?\r\n (Array.isArray(field.value) && field.value.length > 0) :\r\n Boolean(field.value)) && showCancelButton && (\r\n <IconButton\r\n aria-label='clear selection'\r\n onClick={() => resetValue(field)}\r\n edge='end'\r\n sx={isRtl ? { ml: 2.5 } : { mr: 1.5 }}\r\n size='small'\r\n >\r\n <Close sx={{ fontSize: '1rem' }} />\r\n </IconButton>\r\n )\r\n )}\r\n </InputAdornment>\r\n }\r\n />\r\n }\r\n >\r\n {generateMenuItems({\r\n options: filteredOptions,\r\n multiple: Boolean(props.is_multiselect),\r\n placeholder: props.placeholder,\r\n values: field.value,\r\n with_checkboxes: true,\r\n field: props,\r\n disabledIds,\r\n onChange: field.onChange,\r\n handleChange,\r\n hasParent,\r\n t,\r\n // onFooterClick: () => {\r\n // if (props?.onFooterClick) {\r\n // props?.onFooterClick();\r\n // } else {\r\n // handleModalOpen();\r\n // }\r\n // }\r\n })}\r\n {props?.enable_footer &&\r\n <Box key=\"footer\" sx={{ position: 'sticky', bottom: 0, background: '#fff', zIndex: 1 }}>\r\n <Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n <MenuItem sx={{ gap: 1 }} onClick={\r\n () => {\r\n if (props?.onFooterClick) {\r\n props?.onFooterClick();\r\n } else {\r\n handleModalOpen();\r\n }\r\n }\r\n\r\n }>\r\n <Add fontSize='small' />\r\n <Typography type='s4' color='theme.secondary.1000'>\r\n Create New {props.label}\r\n </Typography>\r\n </MenuItem>\r\n </Box>}\r\n {pagination.isLoadingMore && (\r\n <MenuItem disabled>\r\n <Box sx={{ display: 'flex', justifyContent: 'center', width: '100%' }}>\r\n <CircularProgress size={20} />\r\n </Box>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n )}\r\n\r\n {/* Modal for adding new items */}\r\n {addConfig && addConfig.component && (\r\n <>\r\n {React.createElement(addConfig.component, {\r\n isOpen: isModalOpen,\r\n setIsOpen: setIsModalOpen,\r\n isLoading: isAddLoading,\r\n onSave: handleModalSave,\r\n modalProps: {\r\n maxWidth: 'md',\r\n fullWidth: true\r\n },\r\n ...props?.modalComponentProps\r\n })}\r\n </>\r\n )}\r\n\r\n {props.is_multiselect && Array.isArray(field.value) && (\r\n <SelectedItems\r\n data={field.value}\r\n options={filteredOptions}\r\n />\r\n )}\r\n </>\r\n )}\r\n />\r\n );\r\n});\r\n\r\nDynamicSearchSelect.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n placeholder: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n options: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n value: PropTypes.any\r\n })\r\n ).isRequired,\r\n formControl: PropTypes.object.isRequired,\r\n defaultValue: PropTypes.any,\r\n fieldArrayName: PropTypes.string.isRequired,\r\n id: PropTypes.string,\r\n required: PropTypes.bool,\r\n is_multiselect: PropTypes.bool,\r\n position: PropTypes.number,\r\n formType: PropTypes.string,\r\n typeOfField: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n onChipRemove: PropTypes.func,\r\n enable_footer: PropTypes.bool,\r\n footer_action: PropTypes.string,\r\n onFooterClick: PropTypes.func,\r\n is_loading: PropTypes.bool,\r\n selectedLabel: PropTypes.string,\r\n isInternal: PropTypes.bool,\r\n disabledIds: PropTypes.array,\r\n getSelectedData: PropTypes.func,\r\n attributes: PropTypes.array,\r\n handleChange: PropTypes.func,\r\n hasParent: PropTypes.bool,\r\n sortOrder: PropTypes.string,\r\n apiType: PropTypes.string,\r\n handleOptions: PropTypes.func,\r\n filterKey: PropTypes.string,\r\n customeFilter: PropTypes.object,\r\n refresh: PropTypes.bool,\r\n addType: PropTypes.string,\r\n modalComponentProps: PropTypes.object,\r\n showCancelButton: PropTypes.bool,\r\n customFetchApi: PropTypes.func\r\n};\r\n\r\nexport default DynamicSearchSelect;","import {\r\n\tUseFormSetValue,\r\n\tFieldValues,\r\n\tuseFormContext,\r\n\tUseFormWatch,\r\n\tUseFormGetFieldState,\r\n\tControl\r\n} from 'react-hook-form';\r\nimport { useLocationFilter } from '../hooks/useLocationFilter';\r\nimport DynamicSearchSelect from './form-control/form-builder/form-builder-element/dynamic-select';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { memo, useEffect, useMemo, useRef } from 'react';\r\nimport _ from 'lodash';\r\n\r\n\r\nexport interface LocationSearchSelectProps<\r\n\tT extends FieldValues = FieldValues\r\n> {\r\n\tselectedCompany?: string[] | string | number | null | undefined;\r\n\tcontrol?: Control<T>;\r\n\tsetValue?: UseFormSetValue<T>;\r\n\tfieldArrayName: string;\r\n\tlocationFieldName?: string;\r\n\tlabel?: string;\r\n\tplaceholder?: string;\r\n\tresetValue?: any;\r\n\tfilterKey?: string;\r\n\t[key: string]: any;\r\n}\r\n\r\nexport interface LocationFilterType {\r\n\t[key: string]: string[] | string | number;\r\n}\r\n\r\nexport const LocationSearchSelect = memo(\r\n\t<T extends FieldValues = FieldValues>({\r\n\t\tselectedCompany,\r\n\t\tcontrol: propControl,\r\n\t\tsetValue: propSetValue,\r\n\t\tfieldArrayName,\r\n\t\tlocationFieldName = 'location_id',\r\n\t\tlabel,\r\n\t\tplaceholder,\r\n\t\tresetValue = undefined,\r\n\t\tfilterKey = '&company_id.in',\r\n\t\tfilterField = 'company_id',\r\n\t\t...dynamicSearchSelectProps\r\n\t}: LocationSearchSelectProps<T>): JSX.Element => {\r\n\t\tconst formContext = useFormContext();\r\n\t\tconst {\r\n\t\t\tcontrol: contextControl,\r\n\t\t\twatch: contextWatch,\r\n\t\t\tsetValue: contextSetValue,\r\n\t\t\tgetFieldState: contextGetFieldState\r\n\t\t} = formContext || {};\r\n\r\n\t\tconst controlToUse = propControl || contextControl;\r\n\t\tconst setValueToUse = propSetValue || contextSetValue;\r\n\t\tconst watchToUse: UseFormWatch<T> = contextWatch || (() => undefined);\r\n\t\tconst getFieldStateToUse: UseFormGetFieldState<T> =\r\n\t\t\tcontextGetFieldState || (() => ({}));\r\n\r\n\t\tconst filterFieldValue = watchToUse(`${fieldArrayName}.${filterField}`);\r\n\t\tconst isDirty = getFieldStateToUse(\r\n\t\t\t`${fieldArrayName}.${filterField}`\r\n\t\t)?.isDirty;\r\n\r\n\t\tconst prevFilterFieldValue = useRef<any>();\r\n\r\n\t\tconst { t } = useTranslation();\r\n\r\n\t\tconst isValueChanged = useMemo(() => {\r\n\t\t\treturn filterFieldValue && prevFilterFieldValue.current\r\n\t\t\t\t? !_.isEqual(prevFilterFieldValue.current, filterFieldValue)\r\n\t\t\t\t: false;\r\n\t\t}, [filterFieldValue]);\r\n\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (filterFieldValue) {\r\n\t\t\t\tprevFilterFieldValue.current = filterFieldValue;\r\n\t\t\t}\r\n\t\t}, [filterFieldValue]);\r\n\r\n\t\tconst locationFilter: LocationFilterType = useLocationFilter({\r\n\t\t\tselectedCompany: filterFieldValue || selectedCompany,\r\n\t\t\tsetValue: setValueToUse,\r\n\t\t\tfieldArrayName,\r\n\t\t\tlocationFieldName,\r\n\t\t\tresetValue,\r\n\t\t\tfilterKey,\r\n\t\t\tisDirty: isValueChanged || isDirty\r\n\t\t});\r\n\r\n\t\t// Now safely do the conditional render\r\n\t\tif (!controlToUse) {\r\n\t\t\tconsole.warn('LocationSearchSelect: No form control available.');\r\n\t\t\treturn <div>Location Search Select</div>;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<DynamicSearchSelect\r\n\t\t\t\tlabel={t(label) || t('crm.salesOrder.fields.location_label')}\r\n\t\t\t\tapiType='location'\r\n\t\t\t\taddType='location'\r\n\t\t\t\tenable_footer={true}\r\n\t\t\t\tname={locationFieldName}\r\n\t\t\t\tplaceholder={\r\n\t\t\t\t\tt(placeholder) || t('crm.salesOrder.fields.location_placeholder')\r\n\t\t\t\t}\r\n\t\t\t\tfieldArrayName={fieldArrayName}\r\n\t\t\t\tformControl={controlToUse}\r\n\t\t\t\tcustomeFilter={locationFilter}\r\n\t\t\t\t{...dynamicSearchSelectProps}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nLocationSearchSelect.defaultProps = {\r\n\tlocationFieldName: 'location_id',\r\n\tresetValue: undefined,\r\n\tfilterKey: '&company_id.in'\r\n};\r\n\r\nexport default LocationSearchSelect","import { Link } from \"react-router-dom\";\nimport CardMedia from \"@mui/material/CardMedia\";\nimport Box from \"@mui/material/Box\";\nimport Typography from \"../typography/typography\";\nimport \"./module-button.scss\"; // Import the external CSS file\n\nexport interface IModuleTile {\n module: {\n bg: string;\n icon: string;\n label: string;\n link: string;\n };\n}\n\nexport const ModuleTile = (props: IModuleTile) => {\n const bgClass = props.module.bg === \"transparent\" ? \"transparent\" : \"\";\n\n return (\n <Link to={props.module.link}>\n <Box className=\"module-tile-container\">\n <Box\n className={`module-box ${bgClass}`}\n style={{ background: props.module.bg }}\n >\n <CardMedia\n component=\"img\"\n image={props.module.icon}\n alt={`${props.module.label} logo`}\n />\n </Box>\n <Typography type=\"s3\" className=\"module-label\">\n {props.module.label}\n </Typography>\n </Box>\n </Link>\n );\n}\n\nexport default ModuleTile;","import { Switch, styled } from \"@mui/material\";\r\n\r\nconst Android12Switch = styled(Switch)(({ theme }) => ({\r\n padding: 8,\r\n '& .MuiSwitch-track': {\r\n borderRadius: 22 / 2,\r\n '&::before, &::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n width: 16,\r\n height: 16,\r\n },\r\n '&::before': {\r\n backgroundImage: `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16\" width=\"16\" viewBox=\"0 0 24 24\"><path fill=\"${encodeURIComponent(\r\n theme.palette.getContrastText(theme.palette.primary.main),\r\n )}\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"/></svg>')`,\r\n left: 12,\r\n },\r\n '&::after': {\r\n backgroundImage: `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16\" width=\"16\" viewBox=\"0 0 24 24\"><path fill=\"${encodeURIComponent(\r\n theme.palette.getContrastText(theme.palette.primary.main),\r\n )}\" d=\"M19,13H5V11H19V13Z\" /></svg>')`,\r\n right: 12,\r\n },\r\n },\r\n '& .MuiSwitch-thumb': {\r\n boxShadow: 'none',\r\n width: 16,\r\n height: 16,\r\n margin: 2,\r\n // color: theme.palette.theme.primary[800]\r\n },\r\n '& .Mui-checked': {\r\n color: `${theme.palette.theme.primary[800]} !important`,\r\n },\r\n '& .Mui-checked+.MuiSwitch-track': {\r\n backgroundColor: `${theme.palette.theme.primary[800]} !important`,\r\n },\r\n}));\r\n\r\nexport { Android12Switch };\r\nexport default Android12Switch;","import { InputAdornment } from \"@mui/material\";\nimport TextField from \"../text-field/text-field\";\nimport ColorLensIcon from '@mui/icons-material/ColorLens';\nimport _ from \"lodash\";\nimport React from \"react\";\n\nconst ColorPickerInput = ({value, onChange, label, ...props}) => {\n\n // Debounced function to update text\n const debouncedSetColor = (\n _.debounce((value) => {\n onChange(value)\n }, 500)\n );\n\n const handleColorChange = (e) => {\n debouncedSetColor(e.target.value);\n };\n\n return (\n <TextField\n label={label || ''}\n variant='outlined'\n type=\"color\"\n value={value}\n onChange={handleColorChange}\n size=\"small\"\n fullWidth\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <ColorLensIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n {...props}\n />\n );\n}\n \nexport { ColorPickerInput };\nexport default ColorPickerInput;","import Typography from \"../typography/typography\";\nimport { Box } from \"@mui/material\";\nimport \"./fallback.scss\";\n\ninterface FallbackProps {\n heading: string;\n subHeading: string;\n icon: React.ReactNode;\n children?: React.ReactNode;\n}\n\nconst Fallback = (props: FallbackProps) => {\n const { heading, subHeading, icon, children, ...rest } = props;\n return (\n <Box className=\"fallback\" {...rest}>\n {icon}\n <Typography\n type=\"h5\"\n weight=\"medium\"\n color=\"theme.secondary.1000\"\n className=\"fallback--Text\"\n >\n {heading}\n </Typography>\n <Typography\n type=\"s3\"\n weight=\"medium\"\n color=\"theme.secondary.800\"\n className=\"fallback--Text\"\n >\n {subHeading}\n </Typography>\n <div>{children}</div>\n </Box>\n );\n};\n\nexport { Fallback };\nexport default Fallback;\n","import React from \"react\";\nimport BreadCrumb from \"../bread-crumb/bread-crumb\";\nimport \"./form-header.scss\";\n\ninterface BreadCrumbSlot {\n link: string;\n label: string | JSX.Element;\n linkState?: any;\n}\n\ninterface FormHeaderProps {\n breadCrumbPath: BreadCrumbSlot[];\n children?: React.ReactNode;\n containerProps?:any;\n}\nconst FormHeader = (props: FormHeaderProps) => {\n const { breadCrumbPath, children, containerProps } = props;\n return (\n <div className=\"formHeader--Header\" {...containerProps}>\n <BreadCrumb path={breadCrumbPath} />\n <div>{children}</div>\n </div>\n );\n};\n\nexport { FormHeader };\nexport default FormHeader;\n","const Loader = () => {\n return (\n <div className=\"loader loader--style1\" title=\"0\">\n <svg\n version=\"1.1\"\n id=\"loader-1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n x=\"0px\"\n y=\"0px\"\n width=\"80px\"\n height=\"80px\"\n viewBox=\"0 0 40 40\"\n enableBackground=\"new 0 0 40 40\"\n >\n <path\n opacity=\"0.2\"\n fill=\"#333\"\n d=\"M20.201,5.169c-8.254,0-14.946,6.692-14.946,14.946c0,8.255,6.692,14.946,14.946,14.946\n s14.946-6.691,14.946-14.946C35.146,11.861,28.455,5.169,20.201,5.169z M20.201,31.749c-6.425,0-11.634-5.208-11.634-11.634\n c0-6.425,5.209-11.634,11.634-11.634c6.425,0,11.633,5.209,11.633,11.634C31.834,26.541,26.626,31.749,20.201,31.749z\"\n />\n <path\n fill=\"#333\"\n d=\"M26.013,10.047l1.654-2.866c-2.198-1.272-4.743-2.012-7.466-2.012h0v3.312h0\n C22.32,8.481,24.301,9.057,26.013,10.047z\"\n >\n <animateTransform\n attributeType=\"xml\"\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 20 20\"\n to=\"360 20 20\"\n dur=\"0.9s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </svg>\n </div>\n );\n};\n\nexport { Loader };\nexport default Loader;\n"],"names":["Accordion","memo","props","title","children","accordionProps","accordianProps","jsxs","StyledAccordion","jsx","AccordionSummary","expandIcon","ExpandMoreIcon","id","AccordionDetails","styled","MUIAccordion","theme","palette","color","_a","secondary","fontSize","boxShadow","padding","minHeight","borderBottomWidth","borderBottomStyle","borderBottomColor","_b","margin","ViewModal","data","setData","setActive","disabledViews","openModal","setOpenModal","useState","value","setValue","disable","setDisable","useTheme","isMdUp","useMediaQuery","breakpoints","up","TabData","label","icon","logo","TableIcon","desc","image","src","table","GridIcon","grid","className","Button","variant","startIcon","AddIcon","sx","pr","onClick","Boolean","find","item","toLowerCase","Modal","open","onClose","DialogTitle","Typography","type","weight","IconButton","CloseIcon","Tabs","orientation","onChange","_","newValue","map","Tab","iconPosition","disabled","includes","hidden","viewTypes","KANBAN","CALENDAR","Select","placeholder","size","defaultValue","MenuItem","DialogActions","backgroundColor","selectedTabData","some","position","length","HeaderCard","active","key","rest","TABLE","GRID","GANTT","GanttIcon","CalenderIcon","KanbanIcon","CHART","ChartIcon","ToggleWrapper","Box","primary","display","Toggle","CombinatorSelect","handleOnChange","options","showDropdown","path","Fragment","e","target","name","RemoveAction","isRtl","useLanguage","btnStyles","marginRight","handleOnClick","disableRipple","Trash","FieldSelect","t","useTranslation","filteredOptions","setFilteredOptions","useEffect","filter","o","trim","width","fullWidth","renderValue","formatText","_c","opttion","replace","replaceAll","SearchBar","handleSearch","searchText","filteredData","option","handleSearchEvent","op","StyledAddButton","AddFilterButton","Add","AddGroupButton","StyledDatePicker","Date","borderColor","borderWidth","borderStyle","_d","_e","error","background","_f","_g","_h","opacity","marginLeft","_i","_j","fontWeight","DatePicker","helperText","dataName","dataPosition","disableFutureDates","required","disablePastDates","textFieldProps","format","LocalizationProvider","dateAdapter","AdapterDayjs","mb","disableFuture","disablePast","slotProps","textField","desktopPaper","bgcolor","slots","openPickerIcon","dayjs","StyledCheckbox","MUICheckbox","borderRadius","Checkbox","RecgtangleIcon","checkedIcon","CheckBoxIcon","ChipOrPlaceholder","onDelete","chipProps","selectedLabel","Chip","onMouseDown","event","stopPropagation","generateMenuItems","multiple","with_checkboxes","values","field","disabledIds","handleClear","handleChange","hasParent","itemDisabled","ls","items","push","height","p","m","selectedValues","Array","isArray","isAllOptionsSelected","parentValue","childOptions","childValues","child","valueArray","every","childValue","isSomeOptionsSelected","forEach","index","isGroup","gap","checked","indexOf","indeterminate","updatedValues","Set","handleParentChange","opt","pl","String","enable_footer","Divider","flexItem","onFooterClick","SearchableSelect","labelId","searchPlaceholder","apiType","isInternal","autoFocus","customeFilter","attributes","getSelectedData","onChipRemove","is_loading","customStyle","CustomDropDownIcon","labelKey","valueKey","inputStyle","sortOrder","showCancelButton","customFetchApi","searchQuery","setSearchQuery","loading","setLoading","dynamicOptions","setOptions","selectedOptions","setSelectedOptions","isAlredyLoaded","setIsAlredyLoaded","initailLoading","setInitialLoading","searchInitiate","setSearchInitiate","setOpen","prevFilter","setPrevFilter","pagination","setPagination","page","hasMore","isLoadingMore","total","limit","isInternalOptions","useMemo","searchOptionsLocally","useCallback","searchTerm","lowercasedSearchTerm","reduce","acc","searchedOptions","React","isValidElement","searchLabel","sortBySelectedValues","getUniqueOptions","Map","arrayToSort","sortBy","Infinity","handleScroll","scrollTop","scrollHeight","clientHeight","currentTarget","nextPage","fetchOptions","JSON","stringify","updateOptions","newOptions","append","uniqueOptions","async","filters","prev","paginationResult","response","search","skip","select","order","fetchApi","apiKey","totalCount","setSelectedData","debounceSearch","debounce","initialFetch","hasOptions","isInOptions","i","fetchIdOptions","fValue","v","Number","hasValue","cancel","condition","selectedData","showGroupLabel","mergedOptions","flatMap","onOpen","selected","displayEmpty","CustomDropdownIcon","MenuProps","PaperProps","onScroll","style","maxHeight","maxWidth","input","OutlinedInput","endAdornment","InputAdornment","CircularProgress","mr","edge","ml","Close","selectOptions","border","text","justifyContent","ValueEditor","fieldData","rule","inputType","isDisabled","operator","customFetch","params","offset","tableName","tokenObj","getToken","getV1FilterFilterTable","result","r","getFilterTableFields","optionData","formatLabel","mappedValue","val","isValid","TextField","inputProps","OperatorSelect","dValue","RemoveGroupAction","SaveFilterModal","handleSubmit","oldName","setName","alignItems","FolderSave","DialogContent","dividers","handleSave","initialQuery","combinator","rules","Filter","savedFilters","fetchSavedFilters","onSaveFilter","onSelectedFilter","applyFilter","fields","isUseFields","location","useLocation","token","localStorage","getItem","auth","storageTokenKeyName","updatePageInfo","activePage","schemaFields","setActivePage","usePages","generateFields","query","setQuery","filteredSavedFilters","setFilteredSavedFilters","selectedFilter","setSelectedFilter","openRenameFilter","setIsOpenRenameFilter","errorMessage","setErrorMessage","resources","routeToResourceMap","pathname","handleApplyFilter","clear","q","isDuplicatedFilters","generatedSQLQuery","generateQueryString","filterQueryString","handleFilterSwitch","sf","filteredFilters","handleSubmitRename","filterId","newName","putFilterRequest","module","fieldResource","pageResource","putV1FilterId","enqueueSnackbar","Error","getErrorMessage","message","handleRenameFilter","isEmpty","f","uniques","isRuleInvalid","Dialog","setTimeout","savedFilter","preventDefault","Edit","deleteFilterRequest","deleteV1FilterId","then","catch","err","handleDeleteFilter","Alert","severity","px","pt","QueryBuilderMaterial","QueryBuilder","onQueryChange","updatedRules","showCombinatorsBetweenRules","controlClassnames","header","controlElements","addRuleAction","addGroupAction","combinatorSelector","fieldSelector","operatorSelector","removeRuleAction","valueEditor","removeGroupAction","DropdownButton","isMenuThirdItemDisabled","isOnlyDropDownButton","onlyDropDownButtonProps","buttonGroupProps","dropdownButtonProps","toggleCallback","anchorRef","useRef","handleToggle","prevOpen","handleClose","current","contains","ButtonGroup","flexDirection","ref","borderRightColor","borderRight","borderTopRightRadius","borderBottomRightRadius","minWidth","borderTopLeftRadius","borderBottomLeftRadius","ArrowDownTwo","Popper","zIndex","anchorEl","role","transition","disablePortal","TransitionProps","placement","Grow","transformOrigin","Paper","elevation","mt","ClickAwayListener","onClickAway","MenuList","autoFocusItem","callback","disableToggle","TitleDropdownButton","currentTitle","cursor","Loader","LoaderContainer","left","top","ModalLoader","formatBytes","bytes","decimals","dm","Math","floor","log","parseFloat","pow","toFixed","UploadExcel","onConfirm","onSubmit","accept","importModuleName","handleSuccessImport","files","setFiles","isCollapsed","setIsCollapsed","isDialogMinimized","setIsDialogMinimized","isDragOver","setIsDragOver","dataResult","setDataResult","isLoading","setIsLoading","getRootProps","getInputProps","isDragActive","useDropzone","onDropAccepted","newFiles","file","isPrivate","checkboxDisabled","status","uploadProgress","fileSize","fileName","fileType","onDragEnter","onDragLeave","noClick","noKeyboard","types","accepts","split","convertAcceptObject","fileInputRef","handleBeforeUnload","returnValue","window","addEventListener","removeEventListener","renderFileIcon","Avatar","images","upload","documentPDF","alt","docFile","removeFile","indexToRemove","prevFiles","documentUpload","setAttribute","removeAttribute","click","monitor","successful","failed","join","in","timeout","formData","FormData","postImportSheet","Upload","RemoveIcon","prevIsCollapsed","KeyboardArrowUp","KeyboardArrowDown","empty","close","tick","folder","ActionBar","handleAddButton","button","isDropdownMenuButton","itemListingDropdownOptions","isTitleMenu","titleMenus","isToggleButton","handleToggleButton","showSearch","showFilter","showView","customButtons","pageName","actionBtn","selectedIds","useAppDispatch","isToggledForItem","setIsToggledForItem","openFilterPopup","setOpenFilterPopup","openSaveFilter","setIsOpenSaveFilter","rowAnchorEl","setRowAnchorEl","isUploadModalOpen","setIsUploadModalOpen","setSavedFilters","searchedText","setSearchedText","isLgUp","getV1FilterResource","resource","_id","rowActionMenu","handleAction","moduleName","templateURL","getExcelExportTemplate","blob","link","document","createElement","url","URL","createObjectURL","href","download","body","appendChild","removeChild","revokeObjectURL","exportExcel","Export","columns","visible_columns","col","getPdfExportTemplate","exportPdf","getExcelTemplateGenerateTemplate","downloadTemplate","DocumentDownload","Import","getFilterChipLabels","opLabel","getOperatorLabel","rv","getFilterChip","rr","grey","deleteIcon","Cancel","removeSignleFilter","clickable","ruleIndex","uRules","uFilters","searchAnchorEl","setSearchAnchorEl","ele","sort","a","b","debounceTime","isDrivePage","Search","Menu","anchorOrigin","vertical","horizontal","FilterIcon","more","activeView","setSelectedSavedFilter","flt","isFilterApplied","rIndex","rrIndex","FilterRemove","initialFilter","filterQuery","postFilterRequest","is_applied","postV1Filter","showCameraButton","StyledAlert","MUIAlert","letterSpacing","tertiary6","svg","BreadCrumb","Breadcrumbs","slot","component","Link","to","state","linkState","ChipContainer","flexWrap","spacing","main","action","disabledBackground","paddingLeft","InlineInput","outline","flexGrow","fontFamily","typography","InlineChip","ChipGenerator","control","validation","maxChips","allowDuplicates","fieldArrayName","endIcon","externalError","onChipAdd","customChipProps","allowMultipleAdd","delimiters","dataType","separator","inputValue","setInputValue","validationError","setValidationError","focused","setFocused","inputRef","containerRef","validateChip","trimmedValue","isValidEmail","test","isValidPhone","pattern","validator","stringToArray","str","arrayToString","arr","addChips","inputStr","currentChips","valuesToAdd","delimiterPattern","d","regex","RegExp","parseMultipleValues","newChips","errors","addedCount","errorMessages","removeChip","chipToRemove","processInput","currentValue","handleContainerClick","focus","fieldName","Controller","render","fieldState","hasError","FormControl","chip","outputValue","onKeyDown","lastIndex","handleKeyPress","onFocus","onBlur","handleBlur","onPaste","pastedText","clipboardData","getData","handlePaste","max","FormHelperText","DateTimePicker","Pagination","paginationModel","totalPages","handlePaginationModel","pageNo","pageSizeOptions","setIsChanged","borderTop","newModel","parseInt","ChevronRightICon","ChevronLeftIcon","mx","AddPageModal","pages","setError","pageNames","newPage","SharedPageView","pageValue","viewStyle","renderViewName","sharedPage","kanbanView","calendarView","tableView","ganttView","gridView","_event","centered","TabPanel","other","a11yProps","SharedPageModal","sharedPages","setSharedPages","dispatch","useDispatch","setSharedPage","PageDescription","viewsMessage","filtersMessage","details","views","_l","_k","prevPages","isPinToDashboard","handleSharedView","Grid","container","xs","FormControlLabel","labelPlacement","owner","AddPage","handleAddPage","isAddMenuOpen","setIsAddMenuOpen","isAddPageModalOpen","setIsAddPageModalOpen","isSharedPageModalOpen","setIsSharedPageModalOpen","handleAddMenuClose","AddCircleOutlineRoundedIcon","KeyboardArrowRightIcon","SharePopUp","roles","toggleSwitch","isPeopleAccessVisible","share","useAppSelector","store","isPublic","setIsPublic","selectedUsers","roleValue","setRoleValue","availableRole","setAvailableRole","userDropdownData","setUserDropdownData","isRoleVisible","departments","users","setSelectedUsers","selRole","userRole","role_id","is_role","resetOptions","prevData","getAllUserAndDepartmentDropdown","prevSettings","handleChage","row","List","user","ListItem","ListItemAvatar","ListItemText","email","changeRole","handleRoleChange","uIds","sOptions","u","sharedData","is_private","userRoles","PageAction","setCurrentPage","setPages","handlePageDelete","isEditPageModalOpen","setIsEditPageModalOpen","isShareModalOpen","setIsShareModalOpen","isConfirmOpen","setIsConfirmOpen","deletePageNo","setDeletePageNo","defaultSharedData","setDefaultSharedData","pageSharedData","setPageSharedData","pinToDashboardStore","useSelector","pinToDashboardData","setPinToDashboardData","dashboard","pinToDashboardList","appDispatch","setIsCreatePage","shareUsers","handleDeletePage","deletePinToDashboardPage","updatedPinToDashboardData","actions","func","isShared","labelExists","uniqueNumberId","generateRandomId","newLabel","counter","updatedPage","defaultData","findIndex","updatedData","updatedArray","elementToShift","splice","moveRight","moveLeft","updatedPages","ConfirmPopUp","deletePage","description","pageData","sharePage","res","payload","StyledTabs","StyledTab","MUITab","textTransform","PageNavigator","savePages","isSaving","generatedColumns","isChanged","isCreatePage","addOrDeletePage","isActionsMenuOpen","setIsActionsMenuOpen","setPage","isAllPagesMenuOpen","setIsAllPagesMenuOpen","handleCloseAllPagesMenu","handleAddOrdeletePage","status_code","MenuIcon","pg","handleOpenActionsMenu","clickedPage","Tooltip","arrow","Share","nPage","defaultPageState","column_order","uniq","orderKeys","active_view","Save","Footer","currentPage","savePageConfiguration","enablePages","isPaginationDisplayed","isPageSaving","isDrawerOpen","setIsDrawerOpen","handleStorageChange","interval","setInterval","clearInterval","InfoCard","info","TabBar","tabs","onEditTabTitle","activeValue","setActiveValue","handleTabChange","handleRemoveTab","containerProps","editableTabId","setEditableTabId","TabContext","TabList","scrollButtons","overflowX","tab","tab_order","handleEditTabTitle","tabId","remove_tab","wrapped","onDoubleClick","handleTabDoubleClick","content","toString","Radio","MUIRadio","BlankCircle","FilledCircle","BorderedOption","shouldForwardProp","prop","bordered","divider","shape","alignContent","hover","DynamicRadioButton","formControl","titlePosition","RadioGroup","isSelected","PARTIES_FORM_ARRAY_NAME","PARTIES_FIELDS","partyType","addressPayload","parties_id","address_type","contact_name","street_1","street_2","city","zip_code","country","mobile","phone","street_3","summary","default_shipping_address","default_billing_address","country_code","contactPayload","contact_no","addressColumns","accessorKey","visible","editVariant","editProperties","field_name","validations","msg_en","msg_ar","editSelectOptions","enableEditing","country_name","contactColumns","addressOmitKeys","contactOmitKeys","processPartiesPayload","addresses","contacts","address","omit","contact","StyledInput","ReactPhoneInput","direction","textAlign","right","borderBottom","backgroundRepeat","backgroundPosition","paddingRight","HelperTextWrapper","marginTop","PhoneInput","default_value","setCountryCodeField","isInlineEditing","dropdown","positionDropdown","rect","getBoundingClientRect","bottom","querySelector","fixPhoneDropdown","dialCode","dropdownContainer","specialLabel","enableSearch","searchNotFound","DynamicPhone","formType","propTypes","PropTypes","register","isRequired","string","bool","number","typeOfField","UploadMedia","max_size","VisuallyHiddenInput","clip","clipPath","overflow","whiteSpace","StyledButton","marginBottom","allowedImageTypes","allowedFileTypes","getFileName","File","parts","uploadImage","uploadDocument","filterredFiles","isValidFileType","Document","noWrap","getSelectedFiles","InlineEditFields","column","validationSchema","setValidationErrors","onChangeRowField","isInitialSet","setIsInitialSet","customFilter","editCols","getAllCells","columnDef","fieldProperties","fieldDisbled","_valuesCache","handleCustomFilter","is_multiple","get","original","validateAt","abortEarly","fe","yup","ValidationError","inner","em","validate","editFields","Object","keys","dValues","cell","vl","handleMinDate","filterKey","bindingKey","dateFormat","minDate","min_date","maxDate","defaultChecked","TableWrapper","disableMaxHeight","borderLeft","lineHeight","MaterialTable","enablePagination","rows","columnOrder","updateData","handleColumnOrdering","enableColumnDragging","states","destructiveActionMenu","disableDefaultActionColumn","enableRowSelection","defaultActionColumnItems","enableBottomToolbar","SetSelectedRowId","isResetRow","onCreateRow","onEditRow","onDeleteRow","editDisplayMode","enableRowCreate","onSelectRow","enableColumnResizing","selectedRowIds","onColumnVisibility","onSortingChange","disabledDefaultActionColumnIcon","enableAddCustomField","enableRowDragging","handleColumnResizing","columnSizes","showPreview","handlePreview","aPage","useDeepMemo","setRow","tableColumns","setTableColumns","setAnchorEl","popUpShow","setPopupShow","visibleColumns","hiddenColumns","selectedRow","setSelectedRow","validationErrors","setValidationSchema","isCreatingRow","setIsCreatingRow","isEditingRow","setIsEditingRow","isDeletingRow","setIsDeletingRow","rowToDelete","setRowToDelete","rowSelection","setRowSelection","isChecked","setIsChecked","sorting","setSorting","disableNextEdit","setDisableNextEdit","columnSizing","setColumnSizing","column_sizes","columnSizingInfo","setColumnSizingInfo","columnSizingStart","deltaOffset","deltaPercentage","isResizingColumn","startOffset","startSize","navigate","useNavigate","currentModule","redirectionPath","PathnameAccounting","CUSTOM_FORM","PathnameInventory","PathnameManufacturing","PathnamePurchase","PathnameCrm","PathnameUsers","PathnameRental","PathnameDocument","ADD_CUSTOM_FIELDS","validationReducer","vld","typeError","min","when","relation","is","thenValidations","otherwise","otherWiseValidations","generateValidationSchema","schema","clm","fieldValidations","array","nullable","transform","originalValue","matches","excludeEmptyString","getValidationType","object","handleHeaderClick","formtValues","cells","c","checkRequired","selectedRows","Function","sortingArray","resetRowSelection","getTextWidth","ctx","getContext","measureText","useMaterialReactTable","defaultColumn","minSize","s","Header","maxSize","common","eyeIcon","muiTableHeadCellProps","muiTableBodyCellProps","Cell","handlePreviewClick","arrowIcon","updatedProps","cloneElement","handleActionsClick","muiTableContainerProps","muiTablePaperProps","tableLayout","columnResizeMode","onEditingRowSave","setEditingRow","onCreatingRowSave","setCreatingRow","onCreatingRowCancel","onEditingRowCancel","displayColumnDefOptions","onKeyUp","renderRowActions","enableExpanding","parentId","renderBottomToolbarCustomActions","onRowSelectionChange","enableColumnOrdering","createDisplayMode","enableTopToolbar","enableColumnActions","enableSorting","enableGrouping","enableStickyHeader","enableSortingRemoval","columnPinning","showProgressBars","getRowId","muiTableBodyRowProps","editingRowId","getState","editingRow","creatingRow","isErrorRow","has_error","handleRowClick","rowId","onColumnOrderChange","colOrder","onColumnSizingChange","onColumnSizingInfoChange","renderEmptyRowsFallback","tableNoData","paginationDisplayMode","muiPaginationProps","count","showRowsPerPage","boundaryCount","muiEditTextFieldProps","InputProps","disableUnderline","muiCircularProgressProps","muiTableBodyProps","muiTableHeadProps","muiSelectCheckboxProps","muiSelectAllCheckboxProps","muiBottomToolbarProps","layoutMode","icons","ArrowDownwardIcon","ArrowUpDown","SortIcon","SyncAltIcon","CancelIcon","SaveIcon","getSelectedRowModel","selectedRowModels","selection","traverseRows","parentKey","rowKey","subRows","getRowModel","MaterialReactTable","ListItemIcon","filteredColumns","updatedColumns","parse","updatedFilteredOptions","handleAddColumn","addIcon","handleVisibleColumn","dotsIcon","ChevronRightIcon","handleRowDelete","defaultLocationState","CustomerVendorModal","isOpen","handleModalClose","modalProps","partyCreated","onSave","setIsOpen","locationRef","addressRows","setAddressRows","contactRows","setContactRows","isCreating","setIsCreating","formState","trigger","getValues","resetField","reset","watch","getFieldState","useForm","defaultValues","parties","account_type","mode","resolver","yupResolver","Yup","PARTIES_FIELDS_TYPE","PARTIES_FIELDS_FIRST_NAME","optional","PARTIES_FIELDS_LAST_NAME","PARTIES_FIELDS_COMPANY_NAME","PARTIES_FIELDS_VAT_NUMBER","PARTIES_FIELDS_CRN","PARTIES_FIELDS_COMPANY","PARTIES_FIELDS_CURRENCY","PARTIES_FIELDS_ADDRESS","notRequired","PARTIES_FIELDS_CONTACTS","PARTIES_FIELDS_RECEIVABLE_ACCOUNT","PARTIES_FIELDS_TAX_TEMPLATE","fieldToUpdate","useAccountingSetting","companyField","formMethods","isUpdateAccount","selectedType","useWatch","tableRows","phoneNumberCache","transformTableColumns","currencySymbol","translationFn","enableFooter","redirectionLink","redirectionLinkState","statusClasses","customizeValue","columnAccessorKey","pointerEvents","phoneKey","has","parsed","parsePhoneNumberFromString","set","nationalNumber","countryCodeKey","countryCallingCode","handleRowOperation","eData","setState","isAddress","editRow","processedValues","dropdowns","addressValues","validateAddressDefaults","state_name","country_data","state_data","country_id","state_id","ar","Promise","reject","u_data","hasDefault","deleteRow","rowIndex","resolve","onChangeAddressTableField","summaryFields","idx","EMAIL_REGEX","formValues","emailArray","email_ids","email_id","match","party","company_id","createParties","meta","requestStatus","closeModal","resetForm","addressData","contactData","basicDetailsSection","defaultExpanded","sm","DynamicInput","DynamicSearchSelect","is_multiselect","accountingSection","addressSection","contactSection","overflowY","SelectedItems","fDisplayTitle","selectedItem","slice","MoreIcon","DynamicSelect","selectedValue","setSelectedValue","handleOptions","removeUndefine","handleSetOptions","arrayOf","footer_action","any","DynamicButton","node","DynamicCheckBox","titleColor","checkboxProps","stackProps","Stack","DynamicDate","max_date","is_future_dates_allowed","is_past_dates_allowed","displayName","DynamicCurrency","multiline","is_multiline","is_required","step","float_step","min_length","max_length","inputMode","is_negative","startAdornment","currencyType","numericValue","_formState","DynamicElementHOC","useDrag","drop","useDrop","draggedElement","draggedIndex","dropIndex","swap","elementSwap","activeClassName","activeIndex","defaultClassName","element","duplicate","handleDuplicate","removeElement","setElementHoc","elementPerRow","DynamicInputSelect","defaultOption","setSelectOption","handleOptionChange","boxSizing","IconComponent","KeyboardArrowDownOutlinedIcon","DynamicTagsInput","tags","tag","handleKeyDown","trimmedInputValue","newValueString","Autocomplete","clearIcon","freeSolo","renderTags","renderTagProps","renderInput","DynamicInfo","DynamicMedia","field_type","DynamicSectionHOC","fontStyle","handleAccordion","remove_section","removeSection","isFormSwitcher","DynamicTable","onAddClick","is_button","disableTableAddButton","otherButtons","onTableCellChange","useAuth","cs","currency_data","symbol","currencyFormat","number_format","symbolPosition","takeCurencyOrPercentage","isCellChangeAFunc","renderedCellValue","toFixedWithNumbers","formatDate","formatAmount","promotion_map_data","rcv","uRows","valueGet","StyledTimePicker","Time","TimePicker","is24hrFormat","DynamicTime","CustomisedSwitch","Switch","focusVisibleClassName","transitionDuration","transitions","create","duration","ToggleSwitch","labelPosition","typographyProps","DynamicToggleButton","toggleSwitchProps","FormSwitcher","formSwitcherName","MemoizedField","sectionLabel","gridSize","is_fullwidth","custom_width","fieldKey","commonProps","iconSrc","sms","currency","dollar","geoLocation","relationLabel","renderField","handleSetCountryCodeField","field_properties","addType","onSelectFooterClick","call","setCurrencyOptions","refresh","refreshOptions","modalComponentProps","title_position","table_columns","table_rows","handleTableAddClick","isButton","currencyOption","LocationSearchSelect","filterField","locationFieldName","MemoizedFormSwitcher","section","switchForms","handleFieldCleanUp","form_switcher_label","forms","FormSection","members","displayAvtar","setDetailsData","visibleMembers","is_hidden","fieldsWithNames","sectionHeader","avatarDisplay","fieldProps","is_accordion","fieldIndex","teamValidationSchema","team","department_id","team_lead_id","member_ids","DEFAULT_VALUES","departmentValidationSchema","department","department_code","parent_department_id","department_head_id","cost_code","boolean","location_data","designationValidationSchema","designation","designation_code","reports_to","level","COSTING_METHODS","DEPRECIATION_METHODS","COMPUTATION_METHODS","inventory_fixed_asset_item","sku","category","mixed","base_unit","company","unit_of_measurement","stock_unit","purchase_unit","sales_unit","costing_method","depreciation_method","computation_method","default_tax_id","income_account_id","asset_account_id","cogs_account_id","fixed_asset_account_id","depreciation_account_id","declining_factor","brandValidationSchema","brand_data","categoryValidationSchema","category_data","category_name","source_type","SourceTypeAddModal","isSubmitting","setIsSubmitting","createApiThunk","api","addMapper","postV1WarehouseLocation","toast","setToast","rowGap","columnSpacing","Toast","postV1Parties","postV1Departments","rootCompanyId","postV1DepartmentsTeams","selectedDepartmentId","selectedTeamLeadId","leadFilter","membersFilter","postV1Designation","fixedAssetItem","postV1InventoryFixedAssetItems","selectedCategoryData","setSelectedCategoryData","unitFields","methods","watchedName","watchedCategory","watchedUom","watchedDepreciationMethod","generatedSku","skuGenerator","handleCategorySelect","updateUomFields","uomData","FormProvider","brand","postV1Brand","postV1CategoryItems","sku_prefix","unique_items","attribute_data","industry","postV1PartiesIndustry","sourceType","postV1SourceTypes","dynamicSelectAdd","config","setCompany","company_data","configMapper","callBack","useDefaultConfig","defaultOptions","setDefaultOptions","getDefaultConfig","filteredDisplayTitle","Loading","watchedValue","formContext","useFormContext","selectRef","isAlreadyLoaded","setIsAlreadyLoaded","initialLoading","addConfig","setAddConfig","isModalOpen","setIsModalOpen","isAddLoading","setIsAddLoading","isMergeOptions","showItemTooltip","cf","currentOptions","apiOptions","localOptions","getSelectedDataOptions","handleSelectedValue","filterValue","debouncedSearch","resetValue","handleModalOpen","handleModalSave","removeUndefined","popper","modifiers","tooltip","searchInput","searchValue","selectedOption","oneOfType","selectedCompany","propControl","propSetValue","dynamicSearchSelectProps","contextControl","contextWatch","contextSetValue","contextGetFieldState","controlToUse","setValueToUse","getFieldStateToUse","filterFieldValue","isDirty","prevFilterFieldValue","isValueChanged","isEqual","locationFilter","useLocationFilter","defaultProps","Android12Switch","backgroundImage","encodeURIComponent","getContrastText","debouncedSetColor","ColorLensIcon","heading","subHeading","breadCrumbPath","handleFormSubmit","onTableAddClick","handleFormValues","getFormMethods","setFields","setActiveTabValue","activeTab","recieveTabDataLenght","recieveIsValidForm","activeTabs","containerStyles","convertNestedFieldSchemaObject","nestedFields","hasOwn","unregister","yupSchemaObject","nestedFielvalidations","nestedYupSchemaObj","dotNotationString","existingObject","currentLevel","convertToNestedObject","watchedValues","setSchema","tabsData","setTabsData","errorAlert","setErrorAlert","isTabFormValid","setTabFormValid","validateRequiredFields","setValidRequiredFields","getSectionData","sectionMembers","section_type","SECTION_TYPES","FORM_SWITCH_SECTION","form_switcher_name","switcher_forms","form","formMembers","member","section_form_id","selectedSectionForm","is_form_switcher_section","oldVal","country_code_field_name","newVal","is_country_code_separate","memberName","newData","createNestedObjectFromDot","fieldValue","hours","minutes","seconds","removeMatchingKeyValuePairs","obj1","obj2","forOwn","validateRequiredSwitchFormData","switchData","requiredFields","thenValidation","getMissingFields","watchedFields","validationReqFields","missingFields","fieldPath","handleMessage","origin","formBuilderDeConversion","dVals","wVals","nestedFormValues","is_section_field","finalFormValues","validatedFields","switchFormData","selectValue","isFormTabValid","version","xmlns","x","y","viewBox","enableBackground","fill","attributeType","attributeName","from","dur","repeatCount","bgClass","bg","CardMedia"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"android-12-switch-Cwoy0lqC.js","sources":["../src/components/accordion/accordion.tsx","../src/components/view-modal/view-modal.tsx","../src/components/header-card/header-card.tsx","../src/components/toggle/toggle.tsx","../src/components/filter/components/combinator-select.tsx","../src/components/filter/components/remove-action.tsx","../src/components/filter/components/field-select.tsx","../src/components/filter/components/add-filter.tsx","../src/components/filter/components/add-group.tsx","../src/components/date-picker/date-picker.tsx","../src/components/checkbox/checkbox.tsx","../src/components/form-control/form-builder/form-builder-element/chip-or-placeholder.tsx","../src/components/searchable-select.tsx","../src/components/filter/components/value-editor.tsx","../src/components/filter/components/operator-select.tsx","../src/components/filter/components/delete-group.tsx","../src/components/save-filter-modal/save-filter-modal.tsx","../src/components/filter/filter.tsx","../src/components/dropdown-button/dropdown-button.tsx","../src/components/title-dropdown-button/title-dropdown-button.tsx","../src/components/loaders/modal-loader.tsx","../src/components/upload-excel/upload-excel.tsx","../src/components/action-bar/action-bar.tsx","../src/components/alert/alert.tsx","../src/components/bread-crumb/bread-crumb.tsx","../src/components/chip-generator/chip-generator.tsx","../src/components/date-time-picker/date-time-picker.tsx","../src/components/pagination/pagination.tsx","../src/components/page-navigator/components/add-page-modal.tsx","../src/components/page-navigator/components/shared-page-view.tsx","../src/components/page-navigator/components/shared-page-modal.tsx","../src/components/page-navigator/components/add-page.tsx","../src/components/share-modal/share-modal.tsx","../src/views/beforeAuth/components/share-modal-data/share-modal-data.ts","../src/components/page-navigator/components/page-action.tsx","../src/components/page-navigator/page-navigator.tsx","../src/components/footer/footer.tsx","../src/components/info-card/info-card.tsx","../src/components/tabs/tabs.tsx","../src/components/radio/radio.tsx","../src/components/form-control/form-builder/form-builder-element/radio-button.tsx","../src/components/parties-modal/utils/constant.ts","../src/components/phone-input/phone-input.tsx","../src/components/form-control/form-builder/form-builder-element/phone.tsx","../src/components/upload-media/upload-media.tsx","../src/components/material-table/components/inline-edit-fields.tsx","../src/components/material-table/material-table.tsx","../src/components/parties-modal/parties-modal.tsx","../src/components/parties-modal/validator.tsx","../src/components/form-control/form-builder/form-builder-element/select.tsx","../src/components/form-control/form-builder/form-builder-element/button.tsx","../src/components/form-control/form-builder/form-builder-element/checkbox.tsx","../src/components/form-control/form-builder/form-builder-element/date.tsx","../src/components/form-control/form-builder/form-builder-element/dynamic-currency-input.tsx","../src/components/form-control/form-builder/form-builder-element/dynamic-element-hoc.tsx","../src/components/form-control/form-builder/form-builder-element/dynamic-input-select.tsx","../src/components/form-control/form-builder/form-builder-element/dynamic-tags-input.tsx","../src/components/form-control/form-builder/form-builder-element/info.tsx","../src/components/form-control/form-builder/form-builder-element/media.tsx","../src/components/form-control/form-builder/form-builder-element/section.tsx","../src/components/form-control/form-builder/form-builder-element/table.tsx","../src/components/time-picker/time-picker.tsx","../src/components/form-control/form-builder/form-builder-element/time.tsx","../src/components/toggle-switch/toggle-switch.tsx","../src/components/form-control/form-builder/form-builder-element/toggle-button.tsx","../src/components/form-control/form-parser/form-switcher.tsx","../src/components/form-control/form-parser/form-section.tsx","../src/components/form-control/form-parser/form-parser.tsx","../src/components/team-add-modal.tsx","../src/components/department-add-modal.tsx","../src/components/form-control/form-builder/form-builder-element/location-add-modal/location-add-modal.tsx","../src/components/designation-add-modal.tsx","../src/components/form-control/form-builder/form-builder-element/fixed-asset-item-add-modal/fixed-asset-item-add-modal.tsx","../src/components/brand-add-modal.tsx","../src/components/category-add-modal.tsx","../src/components/source-type-add-modal/source-type-add-modal.tsx","../src/components/form-control/form-builder/form-builder-element/select-configuration.tsx","../src/components/industry-add-modal.tsx","../src/hooks/useSetDefaultConfig.tsx","../src/components/form-control/form-builder/form-builder-element/dynamic-select.tsx","../src/components/location-select.tsx","../src/components/module-button/module-button.tsx","../src/components/switches/android-12-switch.tsx","../src/components/color-picker-input/color-picker-input.tsx","../src/components/fallback/fallback.tsx","../src/components/form-header/form-header.tsx","../src/components/loader.tsx"],"sourcesContent":["import {\r\n AccordionDetails,\r\n Accordion as MUIAccordion,\r\n AccordionSummary,\r\n styled,\r\n AccordionProps as MUIAccordionProps,\r\n} from \"@mui/material\";\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\nimport { memo } from \"react\";\r\n\r\ninterface AccordionProps {\r\n title: string | JSX.Element;\r\n children?: React.ReactNode;\r\n accordionProps?: Partial<MUIAccordionProps>\r\n}\r\nconst Accordion = memo((props: AccordionProps) => {\r\n const { title, children, accordionProps: accordianProps } = props;\r\n\r\n return (\r\n <StyledAccordion {...accordianProps} >\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n aria-controls=\"panel1-content\"\r\n id=\"panel1-header\"\r\n >\r\n {title}\r\n </AccordionSummary>\r\n <AccordionDetails>{children}</AccordionDetails>\r\n </StyledAccordion>\r\n );\r\n});\r\n\r\n\r\nconst StyledAccordion = styled(MUIAccordion)(({ theme: { palette } }) => ({\r\n color: palette.theme?.secondary[1000],\r\n fontSize: \" 0.875rem\",\r\n boxShadow: \"none\",\r\n \".MuiAccordionSummary-root\": {\r\n padding: \"0.625rem 1.5rem\",\r\n minHeight: \"0px !important\",\r\n borderBottomWidth: \"2px\",\r\n borderBottomStyle: \"solid\",\r\n borderBottomColor: palette.theme?.secondary[200],\r\n },\r\n \".MuiAccordionSummary-content\": {\r\n margin: \"0\",\r\n \"&.Mui-expanded\": {\r\n margin: \"0rem\",\r\n },\r\n \"&.MuiButtonBase-root\": {\r\n margin: \"0\",\r\n \"&.MuiAccordionSummary-content.Mui-expanded\": {\r\n margin: \"0\",\r\n },\r\n },\r\n },\r\n \".MuiAccordionDetails-root\": {\r\n padding: \"0\",\r\n },\r\n}));\r\n\r\nexport { Accordion };\r\nexport default Accordion;\r\n","import Button from \"../button/button\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport \"./view-modal.scss\";\nimport { useState } from \"react\";\nimport Modal from \"../modal/modal\";\nimport {\n DialogActions,\n DialogTitle,\n IconButton,\n MenuItem,\n Tab,\n Tabs,\n useMediaQuery,\n useTheme,\n} from \"@mui/material\";\nimport Typography from \"../typography/typography\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport logo from \"../../assets/images\";\nimport Select from \"../select/select\";\nimport viewTypes from \"../../constants/action-bar\";\n\ninterface ActionData {\n label: string;\n position: number;\n}\ninterface ModalPropsType {\n setData: React.Dispatch<React.SetStateAction<ActionData[]>>;\n data: Array<object>;\n setActive: React.Dispatch<React.SetStateAction<string>>;\n disabledViews?: string[]\n}\n\nconst ViewModal = (props: ModalPropsType) => {\n const { data, setData, setActive, disabledViews = [] } = props;\n const [openModal, setOpenModal] = useState(false);\n const [value, setValue] = useState(\"Table\");\n const [disable, setDisable] = useState(false);\n const theme = useTheme();\n const isMdUp = useMediaQuery(theme.breakpoints.up('lg'));\n const handleTabChange = (_: React.SyntheticEvent, newValue: string) => {\n setValue(newValue);\n setDisable(\n Boolean(\n data.find(\n (item: any) => item.label.toLowerCase() === newValue.toLowerCase(),\n ),\n ),\n );\n };\n\n const TabData = [\n {\n label: \"Table\",\n icon: <logo.TableIcon />,\n desc: \"Easily manage, update, and organize your tasks with Table view.\",\n image: <img src={logo.table} />,\n },\n {\n label: \"Grid\",\n icon: <logo.GridIcon />,\n desc: \"Grid of cards, use for mood boards, index cards, and recipes\",\n image: <img src={logo.grid} />,\n },\n // {\n // label: \"Kanban\",\n // icon: <logo.KanbanIcon />,\n // desc: \"Build your perfect Board and easily drag-and-drop tasks between columns.\",\n // image: <img src={logo.kanban} />,\n // },\n // {\n // label: \"Calendar\",\n // icon: <logo.CalenderIcon />,\n // desc: \"Calendar view is your place for planning, scheduling, and resource management.\",\n // image: <img src={logo.calendar} />,\n // },\n // {\n // label: \"Gantt\",\n // icon: <logo.GanttIcon />,\n // desc: \"Plan time, manage resources, visualize dependencies and more with Gantt view.\",\n // image: <img src={logo.gantt} />,\n // },\n ];\n\n const handleSubmit = () => {\n const selectedTabData = TabData.find(\n (data) => data.label.toLowerCase() === value.toLowerCase(),\n );\n if (selectedTabData?.label) {\n if (\n !data.some(\n (item: any) => item.label.toLowerCase() === value.toLowerCase(),\n )\n ) {\n setData([\n ...(data as ActionData[]),\n { label: selectedTabData.label, position: data.length },\n ]);\n\n setActive(selectedTabData?.label);\n setOpenModal(false);\n }\n }\n };\n\n return (\n <div className=\"view-modal\">\n <div className=\"view-modal--Header\">\n |\n <Button\n variant=\"text\"\n startIcon={<AddIcon />}\n sx={isMdUp ? {} : { pr:0 }}\n onClick={() => {\n setOpenModal(true);\n setDisable(\n Boolean(\n data.find(\n (item: any) =>\n item.label.toLowerCase() === value.toLowerCase(),\n ),\n ),\n );\n }}\n >\n {isMdUp ? 'View' : ''}\n </Button>\n </div>\n <Modal\n open={openModal}\n onClose={() => setOpenModal(false)}\n className=\"view-modal\"\n >\n <DialogTitle className=\"view-modal--Head\">\n <Typography type=\"s3\" weight=\"medium\" color=\"#000\">\n Add View\n </Typography>\n <IconButton onClick={() => setOpenModal(false)}>\n <CloseIcon fontSize=\"small\"/>\n </IconButton>\n </DialogTitle>\n\n <div className=\"view-modal--TabsContent\">\n <Tabs\n orientation=\"vertical\"\n value={value}\n onChange={handleTabChange}\n className=\"view-modal--Tab\"\n >\n {TabData &&\n TabData?.map((data) => (\n <Tab\n key={data.label}\n label={`${data?.label} View`}\n iconPosition=\"start\"\n icon={data?.icon}\n value={data.label}\n className=\"view-modal--Tabs\"\n disabled={Boolean(disabledViews?.includes(data.label))}\n />\n ))}\n </Tabs>\n {TabData.map((data) => (\n <div\n key={data.label}\n hidden={value !== data.label}\n className=\"view-modal--TabData\"\n >\n {data.image}\n <div className=\"view-modal--Desc\">\n <Typography type=\"s1\" color={\"theme.secondary.1000\"}>\n {data?.label} Views\n </Typography>\n <Typography type=\"s4\" color={\"theme.secondary.800\"}>\n {data.desc}\n </Typography>\n {(data?.label === viewTypes.KANBAN ||\n data?.label === viewTypes.CALENDAR) && (\n <div className=\"view-modal--BoardContainer\">\n <Typography type=\"s4\" color=\"theme.secondary.900\">\n Group Board by\n </Typography>\n <Select\n placeholder=\"Status\"\n size={\"small\"}\n defaultValue={1}\n className=\"view-modal--Select\"\n variant=\"outlined\"\n >\n <MenuItem value={1}>option 1</MenuItem>\n <MenuItem value={2}>option 2</MenuItem>\n </Select>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n <DialogActions\n className=\"view-modal--Actions\"\n sx={{ backgroundColor: \"theme.secondary.200\" }}\n >\n <Button variant=\"text\" onClick={() => setOpenModal(false)}>\n Cancel\n </Button>\n <Button variant=\"contained\" onClick={handleSubmit} disabled={disable}>\n Add {value} View\n </Button>\n </DialogActions>\n </Modal>\n </div>\n );\n};\n\nexport { ViewModal };\nexport default ViewModal;\n","import Typography from \"../typography/typography\";\nimport \"./header-card.scss\";\nimport logo from \"../../assets/images\";\nimport viewTypes from \"../../constants/action-bar\";\nimport { useMediaQuery, useTheme } from \"@mui/material\";\n\ninterface HeaderCard {\n title: string;\n active: string;\n onClick: () => void;\n key: number;\n}\n\nconst HeaderCard = (props: HeaderCard) => {\n const { title, active, onClick, key, ...rest } = props;\n const theme = useTheme();\n const isMdUp = useMediaQuery(theme.breakpoints.up('lg'));\n\n return (\n <div\n key={key}\n className={\n active && title.includes(active)\n ? \"header-card header-card--Active\"\n : \"header-card\"\n }\n onClick={onClick}\n {...rest}\n >\n {title && title === viewTypes.TABLE ? (\n <logo.TableIcon />\n ) : title === viewTypes.GRID ? (\n <logo.GridIcon />\n ) : title === viewTypes.GANTT ? (\n <logo.GanttIcon />\n ) : title === viewTypes.CALENDAR ? (\n <logo.CalenderIcon />\n ) : title === viewTypes.KANBAN ? (\n <logo.KanbanIcon />\n ) : title === viewTypes.CHART ? (\n <logo.ChartIcon />\n ) : (\n \"\"\n )}\n {isMdUp && \n <Typography type=\"s3\" color=\"inherit\">\n {title} View\n </Typography>\n }\n </div>\n );\n};\n\nexport { HeaderCard };\nexport default HeaderCard;\n","import { Box } from \"@mui/material\";\r\nimport \"./toggle.scss\";\r\nimport { styled } from \"@mui/system\";\r\n\r\nconst ToggleWrapper = styled(Box)(({ theme: { palette } }) => ({\r\n \"& input:checked + .slider\": {\r\n backgroundColor: palette.theme.primary[700],\r\n },\r\n \"& .slider\": {\r\n backgroundColor: palette.theme.secondary[200],\r\n \":hover\": {\r\n backgroundColor: palette.theme.secondary[300],\r\n },\r\n },\r\n \"& input\": {\r\n display: \"none\",\r\n },\r\n}));\r\n\r\ninterface IToggle {\r\n checked: boolean;\r\n onChange: () => void;\r\n}\r\n\r\nconst Toggle = (props: IToggle) => {\r\n return (\r\n <ToggleWrapper>\r\n <label className=\"switch\">\r\n <input type=\"checkbox\" {...props} />\r\n <span className=\"slider round\"></span>\r\n </label>\r\n </ToggleWrapper>\r\n );\r\n};\r\n\r\nexport { Toggle };\r\nexport default Toggle;\r\n","import { MenuItem } from \"@mui/material\";\nimport Select from \"../../select/select\";\nimport Typography from \"../../typography/typography\";\n\nconst CombinatorSelect = (props: any) => {\n const { handleOnChange, value, options, ...rest } = props;\n\n const showDropdown = props.path?.[0] === 1 || props.path?.[1] === 1;\n\n return (\n <>\n {!showDropdown ? (\n <Typography\n type=\"s4\"\n color=\"theme.secondary.1000\"\n className=\"combinator-value\"\n >\n {value}\n </Typography>\n ) : (\n <Select\n value={value}\n onChange={(e: any) => handleOnChange(e.target.value)}\n {...rest}\n className=\"combinator-list\"\n >\n {options?.map(({ name, label }: { name: string; label: string }) => (\n <MenuItem key={name} value={name}>\n <Typography type=\"s4\" color=\"theme.secondary.1000\">\n {label}\n </Typography>\n </MenuItem>\n ))}\n </Select>\n )}\n </>\n );\n};\n\nexport { CombinatorSelect };\nexport default CombinatorSelect;\n","import { Box, IconButton } from \"@mui/material\";\nimport { ActionProps } from \"react-querybuilder\";\nimport { useLanguage } from \"../../../hooks/useLangauge\";\nimport { Trash } from \"../../icons\";\n\nconst RemoveAction = (props: ActionProps) => {\n const { isRtl } = useLanguage();\n const btnStyles = {\n ...(isRtl ? { marginRight:-1.5 } : {}),\n }\n const iconStyles = {\n color: 'theme.grey.600',\n '&:hover': {\n color: 'theme.error.600'\n }\n }\n return (\n <Box>\n <IconButton sx={btnStyles} size={\"small\"} onClick={props.handleOnClick} disableRipple>\n <Trash sx={{ fontSize: '1.35rem', ...iconStyles }} />\n </IconButton>\n </Box>\n );\n};\n\nexport { RemoveAction };\nexport default RemoveAction;\n","import { useEffect, useState } from \"react\";\nimport { Box, MenuItem } from \"@mui/material\";\nimport Select from \"../../select/select\";\nimport Typography from \"../../typography/typography\";\nimport { FieldSelectorProps } from \"react-querybuilder\";\nimport SearchBar from \"../../search-bar/search-bar\";\nimport \"../filter.scss\";\nimport formatText from \"../../../utils/format-text\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FieldSelect = (props: FieldSelectorProps) => {\n\n const { t } = useTranslation();\n\n const { handleOnChange, value, options, ...rest } = props;\n\n const [filteredOptions, setFilteredOptions] = useState<any[]>();\n\n const handleSearchEvent = (searchText: string) => {\n const ops = options?.filter(o => Boolean(o.label?.trim())) || []\n const filteredData = ops.filter((option: any) =>\n option.name.toLowerCase().includes(searchText.toLowerCase()),\n );\n setFilteredOptions(filteredData);\n };\n\n useEffect(() => {\n setFilteredOptions(options?.filter(o => Boolean(o.label?.trim())) || [])\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[options?.length])\n\n\n return (\n <Box width=\"100%\">\n <Select\n fullWidth\n value={value}\n onChange={(e: any) => handleOnChange(e.target.value)}\n {...rest}\n className=\"select-drps\"\n variant=\"outlined\"\n renderValue={(value: any) => formatText(t(filteredOptions?.find((opttion: any)=>opttion.name === value)?.label)?.replace(\"_id\", '')?.replaceAll(\"_\", \" \") || \"Select Default\")}\n onClose={() => setFilteredOptions(options?.filter(o => Boolean(o.label?.trim())) || [])}\n >\n <div className=\"searchbar-box-list new-searchbar\">\n <SearchBar\n placeholder={\"Search Attributes\"}\n handleSearch={(e) => handleSearchEvent(e)}\n />\n </div>\n {filteredOptions?.map((op: any) => (\n <MenuItem key={op.name} value={op.name}>\n <Typography type=\"s4\" color=\"theme.secondary.1000\">\n {formatText(t(op.label)?.replace(\"_id\", '')?.replaceAll(\"_\", \" \"))}\n </Typography>\n </MenuItem>\n ))}\n </Select>\n </Box>\n );\n};\n\nexport { FieldSelect };\nexport default FieldSelect;\n","import { ActionProps } from \"react-querybuilder\";\nimport Button from \"../../button/button\";\nimport { styled } from \"@mui/material\";\nimport { Add } from \"@mui/icons-material\";\n\nconst StyledAddButton = styled(Button)(({ theme: { palette } }) => ({\n \":hover\": {\n backgroundColor: palette.theme?.secondary[100],\n },\n \"&.MuiButton-text\": {\n \":hover\": {\n color: palette.theme?.secondary[1000],\n },\n },\n}));\n\nconst AddFilterButton = (props: ActionProps) => {\n const { handleOnClick, ...rest } = props;\n return (\n <StyledAddButton\n onClick={handleOnClick}\n {...rest}\n className=\"add-filter\"\n variant=\"text\"\n startIcon={<Add/>}\n >\n Add Filter\n </StyledAddButton>\n );\n};\n\nexport { AddFilterButton };\nexport default AddFilterButton;\n","import { styled } from \"@mui/material\";\nimport Button from \"../../button/button\";\nimport { ActionProps } from \"react-querybuilder\";\nimport { Add } from \"@mui/icons-material\";\n\nconst StyledAddButton = styled(Button)(({ theme: { palette } }) => ({\n \":hover\": {\n backgroundColor: palette.theme?.secondary[100],\n },\n \"&.MuiButton-text\": {\n \":hover\": {\n color: palette.theme?.secondary[1000],\n },\n },\n}));\n\nconst AddGroupButton = (props: ActionProps) => {\n const { handleOnClick, ...rest } = props;\n return (\n <StyledAddButton\n onClick={handleOnClick}\n {...rest}\n className=\"add-group\"\n variant=\"text\"\n startIcon={<Add/>}\n >\n Add Group\n </StyledAddButton>\n );\n};\n\nexport { AddGroupButton };\nexport default AddGroupButton;\n","import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\r\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\r\nimport { DatePicker as Date } from '@mui/x-date-pickers/DatePicker';\r\nimport Typography from '../typography/typography';\r\nimport { styled } from '@mui/material';\r\nimport logo from '../../assets/images';\r\nimport './date-picker.scss';\r\nimport dayjs from 'dayjs';\r\nimport { memo } from 'react';\r\n\r\nexport interface DatePickerProps {\r\n\tlabel: string;\r\n\tdisabled?: boolean;\r\n\terror?: boolean;\r\n\tname?: string;\r\n\tvalue?: string | number | Date;\r\n\thelperText?: string;\r\n\tdataPosition?: number;\r\n\tdataName?: string;\r\n\tdisableFutureDates?: boolean;\r\n\tplaceholder?: string;\r\n\trequired?: boolean;\r\n\tdisablePastDates?: boolean;\r\n\tdefaultValue?: string | number | Date | undefined;\r\n\ttextFieldProps?: any;\r\n\tformat?: string;\r\n\r\n}\r\n\r\nconst StyledDatePicker = styled(Date)(({ theme: { palette } }) => ({\r\n\t'& .MuiOutlinedInput-root': {\r\n\t\tpadding: '0',\r\n\t\tcolor: palette.theme?.secondary[800],\r\n\t\t'& fieldset': {\r\n\t\t\tborderColor: palette.theme?.secondary[400]\r\n\t\t},\r\n\t\t'&:hover fieldset': {\r\n\t\t\tborderColor: palette.theme?.secondary[500]\r\n\t\t},\r\n\t\t'&.Mui-focused fieldset': {\r\n\t\t\tborderWidth: '0.0625rem',\r\n\t\t\tborderStyle: 'solid',\r\n\t\t\tborderColor: palette.theme?.primary[700]\r\n\t\t},\r\n\t\t'&.Mui-error fieldset': {\r\n\t\t\tborderColor: palette.theme?.error[600]\r\n\t\t},\r\n\t\t'&.Mui-disabled': {\r\n\t\t\tbackground: palette.theme?.secondary[200],\r\n\t\t\tcolor: palette.theme?.secondary[800]\r\n\t\t},\r\n\t\t'& .MuiInputBase-input::placeholder': {\r\n\t\t\tcolor: palette.theme?.secondary[800],\r\n\t\t\topacity: 1\r\n\t\t}\r\n\t},\r\n\t'& .MuiFormHelperText-root': {\r\n\t\tmarginLeft: 0,\r\n\t\tcolor: palette.theme?.secondary[800],\r\n\t\t'&.Mui-error': {\r\n\t\t\tcolor: palette.theme?.error[600]\r\n\t\t}\r\n\t},\r\n\t'& .MuiIconButton-root': {\r\n\t\tmarginRight: 0\r\n\t},\r\n\t'& .MuiPickersCalendarHeader-labelContainer': {\r\n\t\tfontWeight: 600\r\n\t}\r\n}));\r\n\r\nconst DatePicker = memo((props: DatePickerProps) => {\r\n\tconst {\r\n\t\tlabel,\r\n\t\tdisabled,\r\n\t\terror,\r\n\t\thelperText,\r\n\t\tdataName,\r\n\t\tdataPosition,\r\n\t\tdisableFutureDates = false,\r\n\t\tplaceholder,\r\n\t\trequired = false,\r\n\t\tdisablePastDates = false,\r\n\t\tdefaultValue,\r\n\t\ttextFieldProps,\r\n\t\tformat,\r\n\t\t...rest\r\n\t} = props;\r\n\r\n\treturn (\r\n\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\r\n\t\t\t{label && (\r\n\t\t\t\t<Typography\r\n\t\t\t\t\ttype='s5'\r\n\t\t\t\t\tweight='medium'\r\n\t\t\t\t\tmb={0.5}\r\n\t\t\t\t\tcolor={error ? 'theme.error.600' : 'theme.secondary.800'}\r\n\t\t\t\t\tdata-position={dataPosition}\r\n\t\t\t\t\tdata-name={dataName}>\r\n\t\t\t\t\t{label} {required && <span className='requiredStar'>*</span>}\r\n\t\t\t\t</Typography>\r\n\t\t\t)}\r\n\t\t\t<StyledDatePicker\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tdisableFuture={disableFutureDates}\r\n\t\t\t\tdisablePast={disablePastDates}\r\n\t\t\t\tslotProps={{\r\n\t\t\t\t\ttextField: {\r\n\t\t\t\t\t\thelperText: helperText,\r\n\t\t\t\t\t\terror: error,\r\n\t\t\t\t\t\tplaceholder: placeholder || 'MM/DD/YYYY',\r\n\t\t\t\t\t\t...textFieldProps\r\n\t\t\t\t\t\t// required: required,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdesktopPaper: {\r\n\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\t'& .MuiButtonBase-root.Mui-selected': {\r\n\t\t\t\t\t\t\t\tcolor: 'theme.primary.900',\r\n\t\t\t\t\t\t\t\tbgcolor: '#B6E9D6 !important'\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t'& .MuiButtonBase-root:hover': {\r\n\t\t\t\t\t\t\t\tcolor: 'theme.primary.900',\r\n\t\t\t\t\t\t\t\tbgcolor: '#B6E9D6 !important'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}}\r\n\t\t\t\tformat={format || 'DD-MM-YYYY'}\r\n\t\t\t\tslots={{ openPickerIcon: logo.CalenderIcon }}\r\n\t\t\t\t{...rest}\r\n\t\t\t\t\r\n\t\t\t\tdefaultValue={defaultValue ? dayjs(defaultValue) : undefined}\r\n\t\t\t\tclassName='datePicker'\r\n\t\t\t/>\r\n\t\t</LocalizationProvider>\r\n\t);\r\n});\r\n\r\nexport { DatePicker };\r\nexport default DatePicker;\r\n","import { CheckboxProps, Checkbox as MUICheckbox, styled } from '@mui/material';\r\nimport { CheckBoxIcon, RecgtangleIcon } from '../icons';\r\nimport { memo } from 'react';\r\n\r\nconst StyledCheckbox = styled(MUICheckbox)(({ theme: { palette } }) => ({\r\n\tpadding: '0rem',\r\n\tcolor: palette.theme?.secondary[300],\r\n\tborderRadius: '.625rem',\r\n\t'&.Mui-checked': {\r\n\t\tcolor: palette.theme?.primary[600],\r\n\t\t'&:hover': {\r\n\t\t\tcolor: palette.theme?.primary[500]\r\n\t\t}\r\n\t},\r\n\t'&.Mui-disabled': {\r\n\t\tcolor: palette.theme?.secondary[400]\r\n\t}\r\n}));\r\n\r\nconst Checkbox = memo((props: CheckboxProps) => {\r\n\treturn (\r\n\t\t<StyledCheckbox\r\n\t\t\ticon={<RecgtangleIcon fontSize={props?.size || 'small'} />}\r\n\t\t\tcheckedIcon={<CheckBoxIcon fontSize={props?.size || 'small'} />}\r\n\t\t\tdisableRipple\r\n\t\t\t{...props}\r\n\t\t/>\r\n\t);\r\n});\r\n\r\nexport { Checkbox };\r\nexport default Checkbox;\r\n","import React from 'react';\n// import { Close } from '@mui/icons-material';\nimport { ChipProps } from '@mui/material';\nimport Chip from '../../../chip/chip';\nimport Typography from '../../../typography/typography';\n\ninterface ChipOrPlaceholderProps {\n\tdata: string[];\n\tplaceholder: string;\n\tonDelete?: () => void;\n\tchipProps?: Omit<ChipProps, 'label'>;\n\tdisabled?: boolean;\n\tselectedLabel?: string;\n}\n\nconst ChipOrPlaceholder: React.FC<ChipOrPlaceholderProps> = ({\n\tdata,\n\tplaceholder,\n\tonDelete,\n\tchipProps,\n\tdisabled,\n\tselectedLabel = 'Item'\n}) => (\n\t<>\n\t\t{data.length ? (\n\t\t\t<Chip\n\t\t\t\t// variant='outlined'\n\t\t\t\ttype='normal'\n\t\t\t\tlabel={\n\t\t\t\t\t<Typography color='theme.secondary.1000' type='s5'>\n\t\t\t\t\t\t{data.length} {selectedLabel} Selected\n\t\t\t\t\t</Typography>\n\t\t\t\t}\n\t\t\t\t// deleteIcon={<Close fontSize='large' />}\n\t\t\t\tonDelete={onDelete}\n\t\t\t\tonMouseDown={(event) => event.stopPropagation()}\n\t\t\t\tdisabled={Boolean(disabled)}\n\t\t\t\t{...chipProps}\n\t\t\t\tsx={{\n\t\t\t\t\t...chipProps?.sx,\n\t\t\t\t\t'& .MuiChip-deleteIcon': {\n\t\t\t\t\t\tcolor: 'theme.primary.800',\n\t\t\t\t\t\tfontSize: '1rem',\n\t\t\t\t\t\t'&:hover': {\n\t\t\t\t\t\t\tcolor: 'theme.primary.900'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t/>\n\t\t) : (\n\t\t\t<Typography color='inherit' type='s3'>\n\t\t\t\t{placeholder}\n\t\t\t</Typography>\n\t\t)}\n\t</>\n);\n\nexport default ChipOrPlaceholder;\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n Box,\r\n CircularProgress,\r\n Divider,\r\n IconButton,\r\n InputAdornment,\r\n MenuItem,\r\n OutlinedInput,\r\n} from \"@mui/material\";\r\nimport Select from \"./select/select\";\r\nimport Checkbox from \"./checkbox/checkbox\";\r\nimport Typography from \"./typography/typography\";\r\nimport { Close } from \"./icons\";\r\nimport { debounce, sortBy } from \"lodash\";\r\nimport { fetchApi } from \"../utils/api\";\r\nimport ChipOrPlaceholder from \"./form-control/form-builder/form-builder-element/chip-or-placeholder\";\r\nimport { Add } from \"@mui/icons-material\";\r\nimport { useLanguage } from \"../hooks/useLangauge\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface IOption {\r\n id: string | number;\r\n value: string | number;\r\n label: string | React.ReactNode;\r\n disabled?: boolean;\r\n isGroup?: boolean;\r\n options?: IOption[];\r\n searchLabel?: string;\r\n}\r\n\r\ninterface IPaginationState {\r\n page: number;\r\n hasMore: boolean;\r\n isLoadingMore: boolean;\r\n total: number;\r\n}\r\n\r\ninterface IMenuItems {\r\n options: IOption[];\r\n multiple: boolean;\r\n placeholder: string;\r\n with_checkboxes: boolean;\r\n values: string | string[];\r\n field: any;\r\n disabledIds: any[];\r\n handleClear: () => void;\r\n handleChange?: (value: string | string[]) => void;\r\n hasParent?: boolean;\r\n}\r\n\r\n// Custom API fetch function type for parent components\r\ninterface CustomFetchApiParams {\r\n search?: string;\r\n filters?: any;\r\n limit: number;\r\n skip: number;\r\n select?: string;\r\n order?: string;\r\n}\r\n\r\ninterface CustomFetchApiResponse {\r\n data: IOption[];\r\n pagination?: {\r\n totalCount: number;\r\n };\r\n}\r\n\r\ninterface SearchableSelectProps {\r\n labelId: string;\r\n label: string;\r\n value: any;\r\n onChange?: (event: any, selectedData?: any) => void;\r\n options: IOption[];\r\n multiple?: boolean;\r\n placeholder?: string;\r\n size?: \"small\" | \"medium\";\r\n searchPlaceholder?: string;\r\n CustomDropDownIcon: React.ReactNode;\r\n customStyle: any;\r\n name?: string;\r\n defaultValue?: any;\r\n apiType?: string;\r\n isInternal?: boolean;\r\n autoFocus?: any;\r\n error?: any;\r\n disabled: any;\r\n customeFilter?: string;\r\n attributes?: string;\r\n getSelectedData?: (row: any) => void;\r\n disabledIds: any[];\r\n labelKey?: string;\r\n valueKey?: string;\r\n inputStyle?: any;\r\n onChipRemove?: (value: string) => void;\r\n selectedLabel?: string;\r\n is_loading?: boolean;\r\n hasParent?: boolean;\r\n sortOrder?: string;\r\n handleChange?: (value: string | string[]) => void;\r\n enable_footer?: boolean;\r\n onFooterClick?: () => void;\r\n showCancelButton?: boolean;\r\n /** Custom API function to fetch options from parent component */\r\n customFetchApi?: (params: CustomFetchApiParams) => Promise<CustomFetchApiResponse>;\r\n}\r\n\r\nconst generateMenuItems = ({\r\n options,\r\n multiple,\r\n placeholder,\r\n with_checkboxes,\r\n values,\r\n field,\r\n disabledIds,\r\n handleClear,\r\n handleChange,\r\n hasParent = false,\r\n}: IMenuItems) => {\r\n const itemDisabled = (ls: any) => disabledIds?.includes(ls);\r\n const items: React.ReactElement[] = [];\r\n\r\n if (!multiple) {\r\n items.push(\r\n <MenuItem disabled value='' key=\"placeholder\" sx={{ opacity: `0 !important`, height: `0 !important`, p: `0 !important`, m: `0 !important` }}>\r\n <Typography type='s3' color='theme.secondary.1000'>\r\n <em>{placeholder}</em>\r\n </Typography>\r\n </MenuItem>\r\n );\r\n }\r\n\r\n const selectedValues = Array.isArray(values) ? values?.filter((value) => value) : [];\r\n\r\n // Parent selection handlers\r\n const handleParentChange = (parentValue: string, childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n\r\n const isParentSelected = valueArray.includes(parentValue);\r\n const updatedValues = isParentSelected\r\n ? valueArray.filter((value) => value !== parentValue && !childValues.includes(value))\r\n : [...new Set([...valueArray, parentValue, ...childValues])];\r\n\r\n handleChange?.(updatedValues);\r\n };\r\n\r\n const isAllOptionsSelected = (parentValue: string, childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n return childValues.every((childValue) => valueArray.includes(childValue));\r\n };\r\n\r\n const isSomeOptionsSelected = (childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n return childValues.some((childValue) => valueArray.includes(childValue));\r\n };\r\n\r\n Array.isArray(options) && options?.length > 0 && options?.forEach((option, index) => {\r\n items.push(\r\n <MenuItem\r\n value={option?.value}\r\n key={`${option?.value}-${index}`}\r\n disabled={Boolean(option?.disabled) || itemDisabled(option?.value) || (hasParent && !multiple)}\r\n className={option?.isGroup ? 'select--MenuItemHeader' : ''}\r\n onClick={() => {\r\n if (values?.length == 1) {\r\n handleClear();\r\n }\r\n }}\r\n >\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n {multiple && with_checkboxes && (\r\n <Checkbox\r\n checked={\r\n hasParent\r\n ? isAllOptionsSelected(option.value, option.options || [])\r\n : Boolean(Array.isArray(values) && values?.indexOf(option?.value) > -1)\r\n }\r\n indeterminate={\r\n hasParent && isSomeOptionsSelected(option.options || [])\r\n }\r\n onChange={() =>\r\n hasParent\r\n ? handleParentChange(option.value, option.options || [])\r\n : handleChange?.(option.value)\r\n }\r\n />\r\n )}\r\n <Typography\r\n type='s3'\r\n color='theme.secondary.1000'\r\n onClick={() => handleChange?.(option.value)}\r\n >\r\n {option?.label}\r\n </Typography>\r\n </Box>\r\n </MenuItem>\r\n );\r\n\r\n // Handle child options for grouped items\r\n if (option?.isGroup && Array.isArray(option?.options)) {\r\n option.options.forEach((opt, index) => {\r\n items.push(\r\n <MenuItem\r\n id={`${option.value}-${opt.value} ${index}`}\r\n value={opt.value}\r\n disabled={Boolean(opt.disabled) || itemDisabled(opt.value)}\r\n sx={{ pl: 5 }}\r\n onClick={() => {\r\n if (values?.length == 1) {\r\n handleClear();\r\n }\r\n }}\r\n key={`${option.value}-${opt.value} ${index}`}\r\n >\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n {multiple && with_checkboxes && (\r\n <Checkbox\r\n checked={Boolean(Array.isArray(values) && values?.indexOf(opt.value) > -1)}\r\n />\r\n )}\r\n <Typography\r\n id={`${option.value}-${opt.value} ${index}`}\r\n type='s3'\r\n color='theme.secondary.1000'\r\n onClick={() => handleChange?.(String(opt.value))}\r\n >\r\n {opt.label == \"Payment Entries\" ? \"Payment and Collection Entries\" : opt.label || opt.value}\r\n </Typography>\r\n </Box>\r\n </MenuItem>\r\n );\r\n });\r\n }\r\n });\r\n\r\n // Footer item\r\n if (field.enable_footer) {\r\n items.push(\r\n <Box key=\"footer\">\r\n <Divider flexItem />\r\n <MenuItem sx={{ gap: 1 }} onClick={field.onFooterClick}>\r\n <Add fontSize='small' />\r\n <Typography type='s4' color='theme.secondary.1000'>\r\n Create New {field.label}\r\n </Typography>\r\n </MenuItem>\r\n </Box>\r\n );\r\n }\r\n\r\n // No data fallback\r\n if (!items.length || (items.length == 1 && !multiple)) {\r\n items.push(\r\n <MenuItem disabled key=\"no-data\">\r\n No data available\r\n </MenuItem>\r\n );\r\n }\r\n\r\n return items;\r\n};\r\n\r\nconst SearchableSelect: React.FC<SearchableSelectProps> = (props) => {\r\n const {\r\n labelId,\r\n label,\r\n value,\r\n onChange,\r\n options,\r\n multiple = false,\r\n size = \"small\",\r\n searchPlaceholder,\r\n placeholder,\r\n name,\r\n defaultValue,\r\n apiType,\r\n isInternal = false,\r\n autoFocus,\r\n error,\r\n disabled,\r\n customeFilter,\r\n attributes,\r\n getSelectedData,\r\n disabledIds,\r\n onChipRemove,\r\n selectedLabel,\r\n is_loading,\r\n customStyle = {},\r\n CustomDropDownIcon,\r\n labelKey,\r\n valueKey,\r\n inputStyle,\r\n hasParent = false,\r\n sortOrder = 'id:-1',\r\n handleChange,\r\n enable_footer = false,\r\n onFooterClick,\r\n showCancelButton = true,\r\n customFetchApi\r\n } = props;\r\n\r\n const [searchQuery, setSearchQuery] = useState(\"\");\r\n const [loading, setLoading] = useState<boolean>(false);\r\n const [dynamicOptions, setOptions] = useState<IOption[]>([]);\r\n const [selectedOptions, setSelectedOptions] = useState<IOption[]>([]);\r\n const [isAlredyLoaded, setIsAlredyLoaded] = useState(false);\r\n const [initailLoading, setInitialLoading] = useState(false);\r\n const [searchInitiate, setSearchInitiate] = useState(false);\r\n const [open, setOpen] = useState(false);\r\n const [prevFilter, setPrevFilter] = useState<any>(null);\r\n const { t } = useTranslation();\r\n\r\n // Pagination state\r\n const [pagination, setPagination] = useState<IPaginationState>({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n\r\n const { isRtl } = useLanguage();\r\n const limit = 25;\r\n\r\n const isInternalOptions = useMemo(() => {\r\n return isInternal || (!apiType && !customFetchApi);\r\n }, [isInternal, apiType, customFetchApi]);\r\n\r\n // Local search function for internal options\r\n const searchOptionsLocally = useCallback((searchTerm: string, value: any): IOption[] => {\r\n if (!searchTerm) return options || [];\r\n\r\n const lowercasedSearchTerm = searchTerm.toLowerCase();\r\n\r\n const filteredOptions = hasParent\r\n ? options?.reduce((acc: IOption[], opt) => {\r\n const searchedOptions = opt.options?.filter((item) => {\r\n const label = React.isValidElement(item.label) ? item.searchLabel : String(item.label);\r\n return label?.toLowerCase().includes(lowercasedSearchTerm);\r\n });\r\n\r\n if (searchedOptions?.length) {\r\n acc.push({ ...opt, options: searchedOptions });\r\n }\r\n\r\n return acc;\r\n }, []) || []\r\n : options?.filter((opt) => {\r\n const label = React.isValidElement(opt.label) ? opt.searchLabel : String(opt.label);\r\n return label?.toLowerCase().includes(lowercasedSearchTerm);\r\n }) || [];\r\n\r\n return sortBySelectedValues(filteredOptions, value);\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [options, hasParent]);\r\n\r\n // Clear Selected Options\r\n const handleClear = () => {\r\n onChange?.({ target: { value: multiple ? [] : null } });\r\n if (getSelectedData && typeof getSelectedData === \"function\") {\r\n getSelectedData(null);\r\n }\r\n };\r\n\r\n // Get unique options\r\n const getUniqueOptions = useCallback((data: IOption[]): IOption[] => {\r\n const uniqueOptions = [\r\n ...new Map(data?.map(item => [item.value, item])).values()\r\n ];\r\n return uniqueOptions;\r\n }, []);\r\n\r\n // Sort by selected values\r\n const sortBySelectedValues = useCallback((arrayToSort: IOption[], value: any): IOption[] => {\r\n const selectedValues = Array.isArray(value) ? value : [value];\r\n const sortedValue = sortBy(arrayToSort, (item) => {\r\n const index = selectedValues.indexOf(item.id || item.value);\r\n return index === -1 ? Infinity : index;\r\n });\r\n return sortedValue;\r\n }, []);\r\n\r\n // Options with search and pagination support\r\n const filteredOptions = useMemo(() => {\r\n if (isInternalOptions) {\r\n return searchOptionsLocally(searchQuery, value);\r\n }\r\n return sortBySelectedValues(getUniqueOptions([...dynamicOptions, ...selectedOptions]), value);\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [searchQuery, dynamicOptions, options, value, isInternalOptions, selectedOptions, searchOptionsLocally, sortBySelectedValues, getUniqueOptions]);\r\n\r\n // Handle scroll pagination\r\n const handleScroll = useCallback((event: React.UIEvent<HTMLDivElement>) => {\r\n const { scrollTop, scrollHeight, clientHeight } = event.currentTarget;\r\n const isBottom = scrollHeight - scrollTop <= clientHeight + 10;\r\n\r\n if (isBottom && pagination.hasMore && !pagination.isLoadingMore && !isInternalOptions) {\r\n const nextPage = pagination.page + 1;\r\n fetchOptions(searchQuery, customeFilter, nextPage, true);\r\n }\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [pagination.hasMore, pagination.isLoadingMore, pagination.page, isInternalOptions, searchQuery, JSON.stringify(customeFilter)]);\r\n\r\n // Update Options\r\n const updateOptions = useCallback((newOptions: IOption[], append = false) => {\r\n const oldOptions = append ? dynamicOptions : selectedOptions;\r\n const uniqueOptions = getUniqueOptions([...oldOptions, ...newOptions]);\r\n setOptions(uniqueOptions);\r\n }, [dynamicOptions, selectedOptions, getUniqueOptions]);\r\n\r\n // Fetch Options with pagination support\r\n const fetchOptions = useCallback(async (searchTerm: any = '', filters = customeFilter, page = 1, append = false) => {\r\n // Skip if neither apiType nor customFetchApi is provided\r\n if (!apiType && !customFetchApi) return [];\r\n\r\n setLoading(true);\r\n if (page > 1) {\r\n setPagination(prev => ({ ...prev, isLoadingMore: true }));\r\n }\r\n\r\n try {\r\n let data: IOption[] = [];\r\n let paginationResult: { totalCount?: number } = {};\r\n\r\n // Use custom API if provided, otherwise use default fetchApi\r\n if (customFetchApi) {\r\n const response = await customFetchApi({\r\n search: searchTerm,\r\n filters,\r\n limit,\r\n skip: (page - 1) * limit,\r\n select: attributes,\r\n order: sortOrder\r\n });\r\n data = response?.data || [];\r\n paginationResult = response?.pagination || {};\r\n } else {\r\n const response = await fetchApi({\r\n apiKey: apiType!,\r\n filters: {\r\n limit,\r\n skip: (page - 1) * limit,\r\n search: searchTerm,\r\n filters,\r\n select: attributes,\r\n order: sortOrder\r\n },\r\n labelKey,\r\n valueKey\r\n });\r\n data = response?.data || [];\r\n paginationResult = response?.pagination || {};\r\n }\r\n\r\n if (data && Array.isArray(data)) {\r\n updateOptions(data, append);\r\n\r\n // Update pagination\r\n setPagination(prev => ({\r\n ...prev,\r\n page,\r\n hasMore: (paginationResult?.totalCount || 0) > (page * limit),\r\n total: paginationResult?.totalCount || 0,\r\n isLoadingMore: false\r\n }));\r\n\r\n if (data?.length > 0) {\r\n setSelectedData();\r\n }\r\n }\r\n\r\n return data || [];\r\n } catch (error) {\r\n console.error('Error fetching options:', error);\r\n setPagination(prev => ({ ...prev, isLoadingMore: false }));\r\n return [];\r\n } finally {\r\n setLoading(false);\r\n }\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [apiType, customFetchApi, attributes, sortOrder, limit, updateOptions]);\r\n\r\n // Search Options with debounce\r\n const debounceSearch = useMemo(\r\n () => debounce(async (searchTerm: string) => {\r\n if (loading) return;\r\n\r\n if (!searchTerm && !isInternalOptions && searchInitiate) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n await fetchOptions('', customeFilter, 1, false);\r\n }\r\n if (searchTerm?.length > 1 && !isInternalOptions) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n await fetchOptions(searchTerm, customeFilter, 1, false);\r\n }\r\n }, 700),\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n [isInternalOptions, searchInitiate, JSON.stringify(customeFilter)]\r\n );\r\n\r\n // Initial fetch with filter change detection\r\n const initialFetch = useCallback(async () => {\r\n const condition = JSON.stringify(customeFilter) !== JSON.stringify(prevFilter);\r\n\r\n if (condition && !isInternalOptions && !isAlredyLoaded) {\r\n setPrevFilter(customeFilter);\r\n setOptions([]);\r\n setIsAlredyLoaded(false);\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n }\r\n\r\n if (!isInternalOptions && !isAlredyLoaded) {\r\n await fetchOptions(searchQuery, customeFilter, 1, false);\r\n setIsAlredyLoaded(true);\r\n }\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [JSON.stringify(customeFilter), isInternalOptions, isAlredyLoaded]);\r\n\r\n // Set Selected Data\r\n const setSelectedData = useCallback(() => {\r\n let hasOptions = false;\r\n const isInOptions = filteredOptions?.filter((i: any) =>\r\n multiple ? value?.includes(i?.value) : i?.value == value\r\n );\r\n\r\n if ((Array.isArray(isInOptions) && isInOptions?.length > 0)) {\r\n getSelectedData?.(multiple ? isInOptions : isInOptions[0]);\r\n hasOptions = true;\r\n }\r\n\r\n return hasOptions;\r\n }, [JSON.stringify(filteredOptions), value, multiple]);\r\n\r\n // Fetch Options for Selected Id\r\n const fetchIdOptions = useCallback(async () => {\r\n if (await setSelectedData()) return;\r\n if (open) return;\r\n\r\n const fValue = multiple ? value && value?.filter(v => Boolean(Number(v))) : value ? value : null;\r\n const condition = (multiple ? fValue?.length > 0 : fValue) && !isInternalOptions;\r\n\r\n if (condition) {\r\n setInitialLoading(true);\r\n await fetchOptions('', { ...customeFilter, ...{ '&id.in': fValue } }, 1, false);\r\n setInitialLoading(false);\r\n }\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [open, value, JSON.stringify(customeFilter)]);\r\n\r\n const hasValue = multiple\r\n ? Array.isArray(value) && value.length > 0\r\n : value !== null && value !== undefined && value !== \"\";\r\n\r\n // Effects\r\n useEffect(() => {\r\n if (open) {\r\n debounceSearch(searchQuery);\r\n }\r\n return () => debounceSearch.cancel();\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [searchQuery, JSON.stringify(customeFilter), open, isAlredyLoaded, debounceSearch]);\r\n\r\n useEffect(() => {\r\n setSelectedData();\r\n }, [setSelectedData]);\r\n\r\n useEffect(() => {\r\n fetchIdOptions();\r\n }, [fetchIdOptions]);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n initialFetch();\r\n }\r\n }, [open, initialFetch]);\r\n\r\n useEffect(() => {\r\n const condition = JSON.stringify(customeFilter) !== JSON.stringify(prevFilter);\r\n if (customeFilter && condition) {\r\n setIsAlredyLoaded(false);\r\n }\r\n }, [customeFilter, prevFilter]);\r\n\r\n useEffect(() => {\r\n if (value && !open) {\r\n const selectedData = options?.filter((i: any) =>\r\n multiple ? value?.includes(i?.value) : i?.value == value\r\n ) || [];\r\n setSelectedOptions(selectedData);\r\n }\r\n setSelectedOptions(filteredOptions?.filter((i: any) =>\r\n multiple ? value?.includes(i?.value) : i?.value == value\r\n ));\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [value, open, options, multiple]);\r\n\r\n const handleOnChange = (event: any) => {\r\n const { value } = event.target;\r\n if ((multiple && Array.isArray(value) && value?.filter(v => v).length == 0) || !value) return;\r\n\r\n const isSelected = (item: any) => {\r\n return multiple ? value?.includes(item?.value) : item?.value === value;\r\n };\r\n\r\n const selected = filteredOptions?.filter(isSelected);\r\n onChange?.(event, multiple ? selected : selected?.[0]);\r\n getSelectedData?.(multiple ? selected : selected?.[0]);\r\n\r\n };\r\n\r\n const removeUndefine = (selectOptions: any[]) => {\r\n return Array.isArray(selectOptions) && selectOptions?.length > 0 && selectOptions?.filter((option) => option);\r\n };\r\n\r\n const showGroupLabel = (item: any) => {\r\n if (!item?.length) {\r\n return undefined\r\n }\r\n const mergedOptions = item?.flatMap((i: any) => i?.options)\r\n return mergedOptions?.find((option: any) => option?.value === value)?.label\r\n }\r\n\r\n return (\r\n <Select\r\n labelId={labelId}\r\n name={name}\r\n defaultValue={defaultValue || (multiple ? [] : '')}\r\n placeholder={placeholder}\r\n className=\"filter-select\"\r\n size={size}\r\n onOpen={() => setOpen(true)}\r\n onClose={() => {\r\n setOpen(false);\r\n if (searchQuery?.length > 0) {\r\n setIsAlredyLoaded(false);\r\n }\r\n setSearchInitiate(false);\r\n setSearchQuery('');\r\n }}\r\n onChange={handleOnChange}\r\n showCancelButton={showCancelButton}\r\n multiple={multiple}\r\n label={t(label)}\r\n fullWidth\r\n displayEmpty\r\n autoFocus={autoFocus}\r\n error={Boolean(error)}\r\n disabled={disabled}\r\n value={initailLoading ? (multiple ? [] : '') : value?.id || value || (multiple ? [] : '')}\r\n searchPlaceholder={searchPlaceholder}\r\n CustomDropdownIcon={CustomDropDownIcon}\r\n sx={(multiple && value?.length) ? { ...customStyle, \"& .MuiSelect-select\": { padding: '5.5px !important' } } : customStyle}\r\n MenuProps={{\r\n PaperProps: {\r\n onScroll: handleScroll,\r\n style: { maxHeight: 295, maxWidth: 250 }\r\n }\r\n }}\r\n input={\r\n !disabled ? (\r\n <OutlinedInput\r\n label=\"\"\r\n sx={inputStyle}\r\n endAdornment={\r\n <InputAdornment position=\"end\">\r\n {loading || is_loading ? (\r\n <CircularProgress\r\n size={20}\r\n sx={{ mr: 3, color: \"#4AC08C\" }}\r\n />\r\n ) : (\r\n showCancelButton && hasValue && (\r\n <IconButton\r\n aria-label=\"clear selection\"\r\n onClick={handleClear}\r\n edge=\"end\"\r\n sx={isRtl ? { ml: 2.5 } : { mr: 1.5 }}\r\n size=\"small\"\r\n >\r\n <Close fontSize=\"small\" color='theme.primary.800' />\r\n </IconButton>\r\n )\r\n )}\r\n </InputAdornment>\r\n }\r\n />\r\n ) : undefined\r\n }\r\n renderValue={(selected?: string | string[]) => {\r\n return (\r\n <>\r\n {Array.isArray(selected) ? (\r\n <ChipOrPlaceholder\r\n selectedLabel={selectedLabel}\r\n data={removeUndefine(selected)}\r\n placeholder={placeholder}\r\n onDelete={onChipRemove}\r\n disabled={disabled}\r\n chipProps={{\r\n sx: {\r\n bgcolor: 'theme.primary.100',\r\n border: 0,\r\n // borderRadius: '15px',\r\n '& .MuiTypography-body1': {\r\n color: 'theme.primary.800',\r\n fontWeight: \"500\",\r\n }\r\n }\r\n }}\r\n />\r\n ) : (\r\n hasParent ? showGroupLabel(filteredOptions) :\r\n Array.isArray(filteredOptions) && filteredOptions?.length > 0 && filteredOptions?.find(\r\n (option: any) => option?.value == value\r\n )?.label || selected || placeholder\r\n )}\r\n </>\r\n );\r\n }}\r\n handleSearch={(text) => {\r\n setSearchQuery(text);\r\n setSearchInitiate(true);\r\n }}\r\n >\r\n {generateMenuItems({\r\n options: filteredOptions,\r\n multiple: Boolean(multiple),\r\n placeholder,\r\n values: value,\r\n with_checkboxes: true,\r\n field: {\r\n ...props,\r\n enable_footer,\r\n onFooterClick,\r\n label\r\n },\r\n disabledIds,\r\n handleClear,\r\n handleChange,\r\n hasParent,\r\n t: (key: string) => key\r\n })}\r\n {pagination.isLoadingMore && (\r\n <MenuItem disabled>\r\n <Box sx={{ display: 'flex', justifyContent: 'center', width: '100%' }}>\r\n <CircularProgress size={20} />\r\n </Box>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n );\r\n};\r\n\r\nexport default SearchableSelect;","import { useMemo, useCallback } from 'react';\r\nimport { Box } from '@mui/material';\r\nimport TextField from '../../text-field/text-field';\r\nimport { ValueEditorProps } from 'react-querybuilder';\r\nimport '../filter.scss';\r\nimport DatePicker from '../../date-picker/date-picker';\r\nimport dayjs from 'dayjs';\r\n\r\nimport SearchableSelect from '../../searchable-select';\r\nimport _ from 'lodash';\r\nimport { formatLabel } from '../../../utils/format-text';\r\nimport { getToken } from '@/utils';\r\nimport { getV1FilterFilterTable } from '../../../api-client/api.system-feature/api';\r\n\r\nconst getFilterTableFields = async (\r\n\ttableName: string,\r\n\tsearchText: string,\r\n\tlimit: number,\r\n\toffset: number = 0\r\n) => {\r\n\ttry {\r\n\t\tconst tokenObj = getToken();\r\n\t\tconst response = await getV1FilterFilterTable({\r\n\t\t\ttable: tableName,\r\n\t\t\tsearch: searchText,\r\n\t\t\tlimit: limit,\r\n\t\t\toffset: offset,\r\n\t\t\t'x-token': tokenObj['x-token'],\r\n\t\t\t'x-timezone': String(tokenObj['x-timezone'])\r\n\t\t});\r\n\r\n\t\t// response could be of several types, but use optional chaining and type narrowing\r\n\t\tif ('data' in response && response.data) {\r\n\t\t\tconst result: any[] = (response.data as any)?.result ?? [];\r\n\t\t\tconst totalCount: number = (response as any)?.pagination?.totalCount ?? result.length;\r\n\t\t\tconst items = result.map((r: any) => ({ label: r.name, value: r.id }));\r\n\t\t\treturn { items, totalCount };\r\n\t\t}\r\n\t\treturn { items: [], totalCount: 0 };\r\n\t} catch {\r\n\t\treturn { items: [], totalCount: 0 };\r\n\t}\r\n};\r\n\r\nconst ValueEditor = (props: ValueEditorProps) => {\r\n\t// eslint-disable-next-line\r\n\tlet { values, value, handleOnChange, fieldData, rule, ...rest } = props;\r\n\tconsole.log(\"🚀 ~ ValueEditor ~ values:\", values)\r\n\r\n\tif (!value && fieldData.inputType == 'select') {\r\n\t\tvalue = null;\r\n\t} else if (!Array.isArray(value) && fieldData.inputType == 'select') {\r\n\t\tvalue = [];\r\n\t}\r\n\r\n\tconst isDisabled = useMemo(() => {\r\n\t\treturn rule.operator === 'null' || rule.operator === 'notNull';\r\n\t}, [rule.operator]);\r\n\r\n\tconst customFetch = useCallback(\r\n\t\tasync (params: any) => {\r\n\t\t\tconst search = params?.search || '';\r\n\t\t\tconst limit = params?.limit || 25;\r\n\t\t\tconst offset = params?.skip || 0;\r\n\t\t\tif (fieldData.table) {\r\n\t\t\t\tconst data = await getFilterTableFields(fieldData.table, search, limit, offset);\r\n\t\t\t\tconst optionData = data.items.map((r: any) => ({ id: r.value, value: r.value, label: r.label }));\r\n\t\t\t\treturn { data: optionData, pagination: { totalCount: data.totalCount } };\r\n\t\t\t} else {\r\n\t\t\t\t// const searchedOptions =\r\n\t\t\t\t// \tvalues?.filter((opt) => opt.label?.toLowerCase().includes(search.toLowerCase())) ||\r\n\t\t\t\t// \t[];\r\n\t\t\t\tconst optionData = values?.map((item: any) => ({\r\n\t\t\t\t\t...item,\r\n\t\t\t\t\tvalue: item?.name,\r\n\t\t\t\t\tlabel: item.label ? formatLabel(item.label) : ''\r\n\t\t\t\t}));\r\n\t\t\t\treturn {\r\n\t\t\t\t\tdata: optionData,\r\n\t\t\t\t\tpagination: { totalCount: optionData.length }\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t},\r\n\t\t[fieldData.table, values]\r\n\t);\r\n\r\n\tconst renderOptions = () => {\r\n\t\tswitch (fieldData.inputType) {\r\n\t\t\tcase 'select':\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<SearchableSelect\r\n\t\t\t\t\t\tkey={fieldData.name}\r\n\t\t\t\t\t\tlabel=''\r\n\t\t\t\t\t\tname='insurance_account'\r\n\t\t\t\t\t\tplaceholder='Select'\r\n\t\t\t\t\t\tonChange={(e: any, selected: any) => {\r\n\t\t\t\t\t\t\tconsole.log(\"🚀 ~ renderOptions ~ selected:\", selected)\r\n\t\t\t\t\t\t\tconst mappedValue = selected?.map((i: any) => ({\r\n\t\t\t\t\t\t\t\t...i,\r\n\t\t\t\t\t\t\t\tname: typeof i?.name === 'object' ? i?.name?.value : i?.name\r\n\t\t\t\t\t\t\t}))\r\n\t\t\t\t\t\t\thandleOnChange(mappedValue)\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tvalue={value?.map(i => i?.name)}\r\n\t\t\t\t\t\tmultiple={true}\r\n\t\t\t\t\t\tcustomFetchApi={customFetch}\r\n\t\t\t\t\t\tdisabled={isDisabled}\r\n\t\t\t\t\t\tonChipRemove={() => handleOnChange([])}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t\tcase 'date':\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<DatePicker\r\n\t\t\t\t\t\tonChange={(val) =>\r\n\t\t\t\t\t\t\thandleOnChange(\r\n\t\t\t\t\t\t\t\tdayjs(val).isValid() ? dayjs(val).format('YYYY-MM-DD') : ''\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvalue={value ? dayjs(value) : null}\r\n\t\t\t\t\t\tdisabled={isDisabled}\r\n\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\ttextField: {\r\n\t\t\t\t\t\t\t\tplaceholder: 'YYYY-MM-DD',\r\n\t\t\t\t\t\t\t\tclassName: 'select-drps'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tformat='YYYY-MM-DD'\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\r\n\t\t\tdefault:\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\tonChange={(e: any) => {\r\n\t\t\t\t\t\t\thandleOnChange(e.target.value);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t{...rest}\r\n\t\t\t\t\t\tinputProps={{\r\n\t\t\t\t\t\t\tstyle: {\r\n\t\t\t\t\t\t\t\tfontSize: '0.8125rem'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tclassName='select-drps'\r\n\t\t\t\t\t\ttype={fieldData.inputType}\r\n\t\t\t\t\t\tdisabled={isDisabled}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\treturn <Box width='100%'>{renderOptions()}</Box>;\r\n};\r\n\r\nexport { ValueEditor };\r\nexport default ValueEditor;\r\n","import { Box, MenuItem } from \"@mui/material\";\nimport Select from \"../../select/select\";\nimport Typography from \"../../typography/typography\";\nimport { OperatorSelectorProps } from \"react-querybuilder\";\nimport formatText from \"../../../utils/format-text\";\n\nconst OperatorSelect = (props: OperatorSelectorProps) => {\n const { handleOnChange, options, ...rest } = props;\n\n\n return (\n <Box width='100%'>\n <Select\n fullWidth\n {...rest}\n onChange={(e: any) => handleOnChange(e.target.value)}\n className=\"select-drps\"\n variant=\"outlined\"\n renderValue= {(selected: string) => {\n const dValue = options?.find(o => o.name==selected)?.label\n return dValue ? formatText(dValue) : selected\n }}\n >\n {options?.filter(o => Boolean(o.label?.trim()))?.map((op: any) => (\n <MenuItem key={op.name} value={op.name}>\n <Typography type=\"s4\" color=\"theme.secondary.1000\">\n {formatText(op.label)}\n </Typography>\n </MenuItem>\n ))}\n </Select>\n </Box>\n );\n};\n\nexport { OperatorSelect };\nexport default OperatorSelect;\n","import Button from \"../../button/button\";\n// import Typography from \"../../typography/typography\";\nimport { ActionProps } from \"react-querybuilder\";\nimport { Trash } from \"../../icons\";\n\nconst RemoveGroupAction = (props: ActionProps) => {\n const { handleOnClick } = props;\n\n return (\n <Button\n className=\"filterGrp-remove-btn\"\n variant=\"outlined\"\n onClick={handleOnClick}\n sx={({palette}) => ({\n marginRight: \"0px\",\n marginLeft: \"auto\",\n color: `${palette.theme.error?.[600]} !important`\n })}\n startIcon={<Trash color=\"theme.error.600\" fontSize=\"small\"/>}\n >\n Delete Group\n </Button>\n );\n};\n\nexport { RemoveGroupAction };\nexport default RemoveGroupAction;\n","import {\n Box,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n} from \"@mui/material\";\nimport Close from \"@mui/icons-material/Close\";\nimport { useEffect, useState } from \"react\";\nimport Modal from \"../modal/modal\";\nimport Typography from \"../typography/typography\";\nimport TextField from \"../text-field/text-field\";\nimport Button from \"../button/button\";\nimport { FolderSave } from \"../icons\";\n\ninterface SaveFilter {\n open: boolean;\n onClose: () => void;\n handleSubmit: (name: string) => void;\n oldName?: string;\n}\n\nconst SaveFilterModal = ({\n open,\n onClose,\n handleSubmit,\n oldName,\n}: SaveFilter) => {\n const [name, setName] = useState<string>(\"\");\n\n useEffect(() => {\n if (oldName !== undefined) {\n setName(oldName);\n }\n }, [oldName]);\n\n const handleSave = async (name: string) => {\n if (name) {\n const saved = await handleSubmit(name);\n\n if(saved) {\n setName(\"\");\n onClose();\n }\n }\n\n };\n\n return (\n <>\n <Modal fullWidth onClose={onClose} open={open}>\n <DialogTitle>\n <Box sx={{ display: 'flex', alignItems: 'center', gap:0.5 }}>\n <FolderSave sx={{ fontSize: '1.25rem'}}/>\n <Typography type=\"s2\" weight=\"medium\" color={\"theme.secondary.1000\"}>\n Save active filters\n </Typography>\n </Box>\n <IconButton edge=\"end\" onClick={onClose} size=\"small\">\n <Close fontSize=\"inherit\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers>\n <TextField\n label=\"Name\"\n fullWidth\n placeholder=\"Name Filter\"\n value={name}\n onChange={(e: any) => setName(e.target.value)}\n />\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"outlined\"\n onClick={onClose}\n style={{\n color: \"black\",\n }}\n >\n Cancel\n </Button>\n <Button onClick={() => handleSave(name)}>\n {oldName ? \"Rename\" : \"Save\"}\n </Button>\n </DialogActions>\n </Modal>\n </>\n );\n};\n\nexport { SaveFilterModal };\nexport default SaveFilterModal;\n","/* eslint-disable */\r\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport type { RuleGroupType } from \"react-querybuilder\";\r\nimport \"react-querybuilder/dist/query-builder.scss\";\r\nimport { QueryBuilder /* , formatQuery */ } from \"react-querybuilder\";\r\nimport { QueryBuilderMaterial } from \"@react-querybuilder/material\";\r\nimport {\r\n Box,\r\n IconButton,\r\n MenuItem,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n OutlinedInput,\r\n InputAdornment,\r\n Alert,\r\n} from \"@mui/material\";\r\nimport \"./filter.scss\";\r\nimport Select from \"../select/select\";\r\nimport Typography from \"../typography/typography\";\r\nimport { Close } from \"@mui/icons-material\";\r\nimport CombinatorSelect from \"./components/combinator-select\";\r\nimport RemoveAction from \"./components/remove-action\";\r\nimport FieldSelect from \"./components/field-select\";\r\nimport AddFilterButton from \"./components/add-filter\";\r\nimport AddGroupButton from \"./components/add-group\";\r\nimport ValueEditor from \"./components/value-editor\";\r\nimport OperatorSelect from \"./components/operator-select\";\r\nimport Button from \"../button/button\";\r\nimport RemoveGroupAction from \"./components/delete-group\";\r\nimport SearchBar from \"../search-bar/search-bar\";\r\nimport SaveFilterModal from \"../save-filter-modal/save-filter-modal\";\r\n\r\nimport {\r\n putV1FilterId,\r\n deleteV1FilterId,\r\n} from \"../../api-client/api.system-feature/api\";\r\nimport type * as Types from \"../../api-client/api.system-feature/api-types\";\r\nimport { auth } from \"../../constants/auth\";\r\nimport { generateFields, generateQueryString, getErrorMessage } from \"../../utils/common\";\r\nimport { usePages } from \"../../hooks/use-pages\";\r\nimport _ from \"lodash\";\r\nimport { Edit, Trash } from \"../icons\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { IResources, routeToResourceMap } from \"../../constants/route-page-map\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { useLanguage } from \"../../hooks/useLangauge\";\r\n\r\ninterface IFilter {\r\n open: boolean;\r\n onClose: () => void;\r\n activeView?: string;\r\n savedFilters?: SavedFilter[];\r\n fetchSavedFilters?: () => Promise<void>;\r\n setFilterBar?: any;\r\n onSaveFilter?: (query: RuleGroupType) => void;\r\n onSelectedFilter?: (filterName: string) => void;\r\n fields: any;\r\n applyFilter: any;\r\n isUseFields?: boolean;\r\n}\r\n\r\ninterface SavedFilter {\r\n id: string;\r\n name: string;\r\n query: RuleGroupType;\r\n}\r\n\r\nconst initialQuery: RuleGroupType = { combinator: \"and\", rules: [] };\r\n\r\nconst Filter = ({\r\n open,\r\n onClose,\r\n // activeView,\r\n savedFilters,\r\n fetchSavedFilters,\r\n onSaveFilter,\r\n onSelectedFilter,\r\n applyFilter,\r\n fields = [],\r\n isUseFields = false\r\n}: IFilter) => {\r\n const location = useLocation();\r\n\r\n const token = localStorage.getItem(auth.storageTokenKeyName);\r\n const { updatePageInfo, activePage, schemaFields, setActivePage } = usePages()\r\n\r\n fields = isUseFields ? generateFields(fields) : (schemaFields.length ? generateFields(schemaFields) : fields)\r\n const [query, setQuery] = useState<RuleGroupType>(initialQuery);\r\n const [filteredSavedFilters, setFilteredSavedFilters] = useState<\r\n SavedFilter[]\r\n >(savedFilters ?? []);\r\n const [selectedFilter, setSelectedFilter] = useState<any>(null);\r\n const [openRenameFilter, setIsOpenRenameFilter] = useState<any>(null);\r\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\r\n const { isRtl } = useLanguage();\r\n const resources: IResources = useMemo(() => routeToResourceMap[location.pathname] || null, [location.pathname])\r\n\r\n useEffect(() => {\r\n savedFilters && setFilteredSavedFilters(savedFilters);\r\n }, [savedFilters]);\r\n\r\n\r\n const handleApplyFilter = useCallback((clear: boolean = false) => {\r\n let q = query\r\n const isInvalid = isDuplicatedFilters(q)\r\n if (isInvalid) {\r\n setErrorMessage(\"Invalid filter\")\r\n return\r\n }\r\n if (clear) {\r\n q = initialQuery\r\n setQuery(q)\r\n } else {\r\n const generatedSQLQuery = q ? generateQueryString(q) : q;\r\n updatePageInfo({ filters: q, filterQueryString: generatedSQLQuery })\r\n // applyFilter(generatedSQLQuery);\r\n onClose();\r\n }\r\n }, [query, applyFilter, onClose]);\r\n\r\n const handleQueryChange = (q: RuleGroupType) => {\r\n const updatedRules = q.rules.map((rule, i) => ({\r\n ...rule,\r\n value: rule.field !== query.rules?.[i]?.field || ['null', 'notNull'].includes(rule.operator) ? \"\" : rule.value\r\n }));\r\n let isValid = true;\r\n let errorMessage = '';\r\n\r\n // // Helper function to check for invalid aggregate usage, considering parent combinators\r\n // const checkForInvalidAggregateUsage = (rules: any[], combinator: string, parentCombinator: string | null): boolean => {\r\n // let hasAggregateField = false;\r\n // let hasNonAggregateField = false;\r\n\r\n // rules.forEach(rule => {\r\n // // Check nested groups\r\n // if (rule.rules) {\r\n // // If the current group or any parent has an 'OR', pass it down\r\n // const currentCombinator = combinator === 'or' || parentCombinator === 'or' ? 'or' : combinator;\r\n // checkForInvalidAggregateUsage(rule.rules, rule.combinator, currentCombinator);\r\n // } else {\r\n // // Find the field in the fields array and check if it's an aggregate\r\n // const field = fields.find((f: any) => f.name === rule.field);\r\n\r\n // if (field?.is_aggregate) {\r\n // hasAggregateField = true;\r\n // } else {\r\n // hasNonAggregateField = true;\r\n // }\r\n // }\r\n // });\r\n\r\n // // If any parent or current rule uses 'OR' with a mix of aggregate and non-aggregate fields, it's invalid\r\n // if ((combinator === 'or' || parentCombinator === 'or') && hasAggregateField && hasNonAggregateField) {\r\n // isValid = false;\r\n // errorMessage = 'Mixing aggregate and non-aggregate fields in OR conditions may lead to unexpected results.';\r\n // }\r\n\r\n // return isValid;\r\n // };\r\n\r\n // Start checking from the root level (no parent combinator initially)\r\n\r\n\r\n // Always set the query, regardless of validity\r\n setQuery({ ...q, rules: updatedRules });\r\n\r\n // Set error message if invalid, otherwise clear it\r\n if (!isValid) {\r\n setErrorMessage(errorMessage);\r\n } else {\r\n setErrorMessage(null);\r\n }\r\n\r\n // Always call onSaveFilter, if it exists\r\n if (onSaveFilter) {\r\n onSaveFilter(q);\r\n }\r\n };\r\n\r\n const handleFilterSwitch = (sf?: any) => {\r\n if (sf) {\r\n setSelectedFilter(sf);\r\n setQuery(sf.query);\r\n if (onSelectedFilter) {\r\n onSelectedFilter(sf);\r\n }\r\n } else {\r\n setSelectedFilter(null);\r\n setQuery(initialQuery);\r\n if (onSelectedFilter) {\r\n onSelectedFilter(null);\r\n }\r\n }\r\n };\r\n\r\n const handleSearchEvent = (searchText: string) => {\r\n const filteredFilters = savedFilters?.filter((filter: any) =>\r\n filter.name.toLowerCase().includes(searchText.toLowerCase())\r\n );\r\n if (filteredFilters) {\r\n setFilteredSavedFilters(filteredFilters);\r\n }\r\n };\r\n\r\n const handleRenameFilter = async (filterId: string, newName: string) => {\r\n const putFilterRequest: Types.PutV1FilterIdRequest = {\r\n \"x-token\": token,\r\n id: filterId,\r\n name: newName,\r\n module: resources?.fieldResource || resources?.pageResource\r\n };\r\n\r\n try {\r\n await putV1FilterId(putFilterRequest)\r\n // setSelectedFilter(newName);\r\n if (fetchSavedFilters) {\r\n fetchSavedFilters();\r\n }\r\n enqueueSnackbar('Filters renamed successfully.')\r\n } catch (error) {\r\n let m: string = 'Something went wrong on saving filters'\r\n if (error instanceof Error) {\r\n m = getErrorMessage(error.message)\r\n }\r\n enqueueSnackbar(m, { variant: 'error' })\r\n return false\r\n }\r\n return true\r\n };\r\n const handleUpdateSelectedFilterQuery = async () => {\r\n if (selectedFilter) {\r\n\r\n const putFilterRequest: Types.PutV1FilterIdRequest = {\r\n \"x-token\": token,\r\n id: selectedFilter.id,\r\n data: query,\r\n };\r\n\r\n putV1FilterId(putFilterRequest)\r\n .then((response: any) => {\r\n if (fetchSavedFilters) {\r\n fetchSavedFilters();\r\n }\r\n setActivePage((prev: any) => ({\r\n ...prev,\r\n filters: {\r\n ...prev.filters,\r\n rules: query.rules,\r\n combinator: query.combinator,\r\n name: selectedFilter.name\r\n\r\n }\r\n }));\r\n })\r\n .catch((err: any) => enqueueSnackbar(\"Error renaming saved filters:\", { variant: 'error' }));\r\n }\r\n };\r\n\r\n const handleSubmitRename = (name: string) => {\r\n if (openRenameFilter) {\r\n return handleRenameFilter(openRenameFilter.id, name);\r\n }\r\n };\r\n\r\n const handleDeleteFilter = async (filterId: string) => {\r\n const deleteFilterRequest: Types.DeleteV1FilterIdRequest = {\r\n \"x-token\": token,\r\n id: filterId,\r\n };\r\n\r\n deleteV1FilterId(deleteFilterRequest)\r\n .then((response: any) => {\r\n setSelectedFilter(null);\r\n setQuery(initialQuery);\r\n if (fetchSavedFilters) {\r\n fetchSavedFilters();\r\n }\r\n\r\n })\r\n .catch((err: any) => console.log(\"Error deleting saved filters:\", err));\r\n };\r\n\r\n useEffect(() => {\r\n let q = initialQuery\r\n if (!_.isEmpty(activePage.filters)) {\r\n q = activePage.filters\r\n }\r\n setQuery(q)\r\n const selectedFilter = savedFilters?.find((f: any) => f.name === activePage?.filters?.name);\r\n setSelectedFilter(selectedFilter || null);\r\n }, [activePage?.filters, savedFilters]);\r\n\r\n const isDuplicatedFilters = (rule) => {\r\n let uniques: string[] = []\r\n rule?.rules?.forEach((r: any) => {\r\n if (uniques.includes(r.field) && rule.combinator == 'and') {\r\n return true\r\n }\r\n uniques.push(r.field)\r\n })\r\n return uniques.length !== rule?.rules?.length\r\n }\r\n\r\n\r\n const isRuleInvalid = (rule: any): boolean => {\r\n // If it's a group (has nested rules), recurse\r\n if (Array.isArray(rule.rules)) {\r\n return rule.rules.length ? rule.rules.some(isRuleInvalid) : !rule.rules.length;\r\n }\r\n\r\n // Otherwise, validate individual rule\r\n return (\r\n !rule.field ||\r\n (_.isEmpty(rule.value) && !['null', 'notNull'].includes(rule.operator))\r\n );\r\n };\r\n\r\n const disabled = useMemo(() => isRuleInvalid(query) || errorMessage, [query, errorMessage])\r\n // const disabled = isRuleInvalid(query) || errorMessage;\r\n\r\n return (\r\n <div>\r\n <Dialog\r\n open={open}\r\n onClose={onClose}\r\n maxWidth='md'\r\n fullWidth={true}\r\n PaperProps={{\r\n sx: { borderRadius: 2 }\r\n }}\r\n >\r\n <DialogTitle className=\"filter-header\">\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n Filters\r\n </Typography>\r\n <Box gap={1} display={\"flex\"}>\r\n <Select\r\n fullWidth\r\n size=\"small\"\r\n className=\"filter-dropdown\"\r\n value={selectedFilter ? selectedFilter.name : \"Saved Filters\"}\r\n onChange={(event: any) => {\r\n const sf = savedFilters?.find(f => f.name == event.target.value)\r\n handleFilterSwitch(sf)\r\n }}\r\n variant=\"outlined\"\r\n onClose={() => {\r\n setTimeout(() => {\r\n handleSearchEvent(\"\")\r\n }, 500);\r\n }}\r\n input={\r\n selectedFilter ? (\r\n <OutlinedInput\r\n label=''\r\n endAdornment={\r\n <InputAdornment position='end'>\r\n <IconButton\r\n aria-label='clear selection'\r\n onClick={() => {\r\n handleFilterSwitch()\r\n }}\r\n edge='end'\r\n sx={{ mr: 1.5 }}\r\n size='small'>\r\n <Close sx={{ fontSize: '1rem' }} />\r\n </IconButton>\r\n </InputAdornment>\r\n }\r\n />\r\n ) : undefined\r\n }\r\n >\r\n <div className=\"searchbar-box-list\">\r\n <SearchBar\r\n placeholder={\"Search Filters\"}\r\n handleSearch={(e) => handleSearchEvent(e)}\r\n />\r\n </div>\r\n {/* <Typography\r\n color=\"theme.secondary.1000\"\r\n type=\"s4\"\r\n className=\"filter-title\"\r\n >\r\n Saved Filters\r\n </Typography> */}\r\n {filteredSavedFilters?.map((savedFilter: SavedFilter) => (\r\n <MenuItem\r\n key={savedFilter.id}\r\n value={savedFilter?.name}\r\n className=\"menu-list\"\r\n selected={selectedFilter?.name == savedFilter?.name}\r\n >\r\n <Typography color=\"theme.secondary.1000\" type=\"s3\">\r\n {savedFilter?.name}\r\n </Typography>\r\n\r\n <div className=\"icon-list\">\r\n <IconButton size=\"small\" onClick={(e) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n setIsOpenRenameFilter(savedFilter)\r\n }}>\r\n <Edit fontSize=\"small\" color={selectedFilter?.name == savedFilter?.name ? \"theme.primary.800\" : 'inherit'} />\r\n </IconButton>\r\n <IconButton size=\"small\" onClick={(e) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n handleDeleteFilter(savedFilter.id)\r\n }} color=\"error\">\r\n <Trash fontSize=\"small\" color=\"theme.error.600\" />\r\n </IconButton>\r\n </div>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n <SaveFilterModal\r\n open={openRenameFilter !== null}\r\n onClose={() => setIsOpenRenameFilter(null)}\r\n handleSubmit={(name) => handleSubmitRename(name)}\r\n oldName={openRenameFilter?.name}\r\n />\r\n <Box>\r\n <IconButton size=\"small\" onClick={onClose}>\r\n <Close fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n </Box>\r\n </DialogTitle>\r\n <DialogContent className=\"content\">\r\n {/* Display error message */}\r\n {errorMessage && (\r\n <Alert severity=\"error\" sx={{ px: 1, pt: 0.5, mb: 1 }}>\r\n <Typography\r\n color=\"error\"\r\n type=\"s4\"\r\n >\r\n {errorMessage}\r\n </Typography>\r\n </Alert>\r\n )}\r\n <QueryBuilderMaterial>\r\n <QueryBuilder\r\n fields={fields || []}\r\n query={query}\r\n onQueryChange={handleQueryChange}\r\n showCombinatorsBetweenRules={true}\r\n controlClassnames={{\r\n header: \"actions\",\r\n }}\r\n controlElements={{\r\n addRuleAction: AddFilterButton,\r\n addGroupAction: AddGroupButton,\r\n combinatorSelector: CombinatorSelect,\r\n fieldSelector: FieldSelect,\r\n operatorSelector: OperatorSelect,\r\n removeRuleAction: RemoveAction,\r\n valueEditor: ValueEditor,\r\n removeGroupAction: RemoveGroupAction,\r\n }}\r\n />\r\n <Button\r\n variant=\"text\"\r\n className={isRtl ? 'remove-filters_rtl' : 'remove-filters'}\r\n onClick={() => {\r\n handleApplyFilter(true)\r\n }}\r\n disabled={disabled}\r\n >\r\n Clear all filters\r\n </Button>\r\n </QueryBuilderMaterial>\r\n </DialogContent>\r\n <DialogActions className=\"filter-footer\">\r\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: selectedFilter ? 'space-between' : 'flex-end', width: '100%' }}>\r\n {selectedFilter &&\r\n <Box>\r\n <Button onClick={handleUpdateSelectedFilterQuery}>\r\n Update Seleted filter\r\n </Button>\r\n </Box>\r\n }\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n <Button className=\"cancel-filter-btn\" onClick={onClose}>\r\n Cancel\r\n </Button>\r\n <Button\r\n disabled={disabled}\r\n onClick={() => handleApplyFilter()}\r\n >\r\n Apply\r\n </Button>\r\n </Box>\r\n </Box>\r\n </DialogActions>\r\n </Dialog>\r\n </div>\r\n );\r\n};\r\n\r\nexport { Filter };\r\nexport default Filter;\r\n","import * as React from 'react';\nimport ButtonGroup, { ButtonGroupProps } from '@mui/material/ButtonGroup';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport Grow from '@mui/material/Grow';\nimport Paper from '@mui/material/Paper';\nimport Popper from '@mui/material/Popper';\nimport MenuItem from '@mui/material/MenuItem';\nimport MenuList from '@mui/material/MenuList';\nimport Button from '../button/button';\nimport { ArrowDownTwo } from '../icons';\nimport Typography from '../typography/typography';\nimport { ButtonProps, CircularProgress, SxProps } from '@mui/material';\nimport { useLanguage } from '../../hooks/useLangauge';\n\nexport interface IDropdownMenuOption {\n\tlabel: string | JSX.Element;\n\tcallback: (event?: any, index?: number) => void;\n\tcolor?: string;\n\tdisableToggle?: boolean;\n}\n\ninterface DropdownButtonProps extends ButtonProps {\n\tchildren?: React.ReactNode;\n\toptions: IDropdownMenuOption[];\n\tisMenuThirdItemDisabled?: boolean;\n\tisOnlyDropDownButton?: boolean;\n\tonlyDropDownButtonProps?: {\n\t\tstyle?: SxProps;\n\t};\n\tbuttonGroupProps?: ButtonGroupProps;\n\tdropdownButtonProps?: ButtonGroupProps;\n\ttoggleCallback?: (e?: boolean) => void;\n\tloading?: boolean;\n}\n\nconst DropdownButton: React.FC<DropdownButtonProps> = ({\n\tchildren,\n\toptions,\n\tisMenuThirdItemDisabled,\n\tisOnlyDropDownButton = false,\n\tonlyDropDownButtonProps = null,\n\tbuttonGroupProps = null,\n\tdropdownButtonProps=null,\n\ttoggleCallback,\n\tloading = false,\n\t...rest\n}) => {\n\tconst [open, setOpen] = React.useState(false);\n\tconst anchorRef = React.useRef<HTMLDivElement>(null);\n const {isRtl}=useLanguage();\n\tconst handleToggle = () => {\n\t\tsetOpen((prevOpen) => !prevOpen);\n\t};\n\n\tconst handleClose = (event: Event) => {\n\t\tif (\n\t\t\tanchorRef.current &&\n\t\t\tanchorRef.current.contains(event.target as HTMLElement)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetOpen(false);\n\t};\n\n\tReact.useEffect(() => {\n\t\ttoggleCallback?.(open);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [open]);\n\n\treturn (\n\t\t<React.Fragment>\n\t\t\t<ButtonGroup\n\t\t\t\tsx={loading ? { boxShadow: 'none' } : isRtl?{flexDirection:'row-reverse'}:{}}\n\t\t\t\t{...buttonGroupProps}\n\t\t\t\tref={anchorRef}\n\t\t\t\tdisabled={loading}>\n\t\t\t\t{isOnlyDropDownButton ? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tborderRightColor: '#ffffff20 !important',\n\t\t\t\t\t\t\t...onlyDropDownButtonProps?.style\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonClick={handleToggle}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</Button>\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\t\tsx={(theme) => ({\n\t\t\t\t\t\t\t\tborderRightColor: `${theme.palette.theme?.secondary[100]} !important`,\n\t\t\t\t\t\t\t\tborderRight: '1px solid',\n\t\t\t\t\t\t\t\tborderTopRightRadius: 0,\n\t\t\t\t\t\t\t\tborderBottomRightRadius: 0,\n\t\t\t\t\t\t\t\t...(typeof rest?.sx === 'function'\n\t\t\t\t\t\t\t\t\t? rest.sx(theme)\n\t\t\t\t\t\t\t\t\t: rest?.sx || {})\n\t\t\t\t\t\t\t})}>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\taria-controls={open ? 'split-button-menu' : undefined}\n\t\t\t\t\t\t\taria-expanded={open ? 'true' : undefined}\n\t\t\t\t\t\t\taria-label='select merge strategy'\n\t\t\t\t\t\t\taria-haspopup='menu'\n\t\t\t\t\t\t\t{...dropdownButtonProps}\n\t\t\t\t\t\t\tsx={(theme) => ({\n\t\t\t\t\t\t\t\tp: 1,\n\t\t\t\t\t\t\t\tminWidth: 'unset !important',\n\t\t\t\t\t\t\t\tborderTopLeftRadius: 0,\n\t\t\t\t\t\t\t\tborderBottomLeftRadius: 0,\n\t\t\t\t\t\t\t\t...(typeof dropdownButtonProps?.sx === 'function'\n\t\t\t\t\t\t\t\t\t? dropdownButtonProps.sx(theme)\n\t\t\t\t\t\t\t\t\t: dropdownButtonProps?.sx || {})\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\tonClick={handleToggle}>\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t<CircularProgress size={15} color='inherit' />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ArrowDownTwo fontSize='small' />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</ButtonGroup>\n\t\t\t<Popper\n\t\t\t\tsx={{\n\t\t\t\t\tzIndex: 1\n\t\t\t\t}}\n\t\t\t\topen={open}\n\t\t\t\tanchorEl={anchorRef.current}\n\t\t\t\trole={undefined}\n\t\t\t\ttransition\n\t\t\t\tdisablePortal>\n\t\t\t\t{({ TransitionProps, placement }) => (\n\t\t\t\t\t<Grow\n\t\t\t\t\t\t{...TransitionProps}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransformOrigin:\n\t\t\t\t\t\t\t\tplacement === 'bottom' ? 'center top' : 'center bottom'\n\t\t\t\t\t\t}}>\n\t\t\t\t\t\t<Paper elevation={0} sx={{ border: '1px solid', borderColor: 'grey.300', borderRadius: '8px', mt:0.25}}>\n\t\t\t\t\t\t\t<ClickAwayListener onClickAway={handleClose}>\n\t\t\t\t\t\t\t\t<MenuList id='split-button-menu' autoFocusItem>\n\t\t\t\t\t\t\t\t\t{options.map((option, index) => (\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isMenuThirdItemDisabled ? false : index === 2}\n\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\toption.callback(event, index);\n\t\t\t\t\t\t\t\t\t\t\t\tif (!option?.disableToggle) {\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleToggle();\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}} >\n\t\t\t\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\t\t\t\t\t\t\toption.color ? option.color : 'theme.secondary.1000'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: '100%'\n\t\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</MenuList>\n\t\t\t\t\t\t\t</ClickAwayListener>\n\t\t\t\t\t\t</Paper>\n\t\t\t\t\t</Grow>\n\t\t\t\t)}\n\t\t\t</Popper>\n\t\t</React.Fragment>\n\t);\n};\n\nexport default DropdownButton;\n","import * as React from 'react';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport Grow from '@mui/material/Grow';\nimport Paper from '@mui/material/Paper';\nimport Popper from '@mui/material/Popper';\nimport MenuItem from '@mui/material/MenuItem';\nimport MenuList from '@mui/material/MenuList';\nimport { ArrowDownTwo } from '../icons';\nimport Typography from '../typography/typography';\nimport { ButtonProps } from '@mui/material';\n\nexport interface ITitleDropdownMenuOption {\n\tlabel: string | JSX.Element;\n\tcallback: (event?: any, index?: number) => void;\n\tcolor?: string;\n}\n\ninterface TitleDropdownButtonProps extends ButtonProps {\n\tchildren: React.ReactNode;\n\toptions: ITitleDropdownMenuOption[];\n\tisMenuThirdItemDisabled: boolean;\n\tcurrentTitle: string;\n}\n\nconst TitleDropdownButton: React.FC<TitleDropdownButtonProps> = ({\n\tchildren,\n\toptions,\n\tisMenuThirdItemDisabled,\n\tcurrentTitle = '',\n}) => {\n\tconst [open, setOpen] = React.useState(false);\n\tconst anchorRef = React.useRef<HTMLDivElement>(null);\n\n\tconst handleToggle = () => {\n\t\tsetOpen((prevOpen) => !prevOpen);\n\t};\n\n\tconst handleClose = (event: Event) => {\n\t\tif (\n\t\t\tanchorRef.current &&\n\t\t\tanchorRef.current.contains(event.target as HTMLElement)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetOpen(false);\n\t};\n\n\treturn (\n\t\t<React.Fragment>\n\t\t\t<div style={{ display: 'flex', alignItems: 'flex-end', gap: '10px' }} ref={anchorRef}>\n\t\t\t\t<Typography type=\"h3\" weight=\"medium\" color=\"theme.secondary.1000\">\n\t\t\t\t\t{children}\n\t\t\t\t</Typography>\n\t\t\t\t<div\n\t\t\t\t\taria-controls={open ? 'split-button-menu' : undefined}\n\t\t\t\t\taria-expanded={open ? 'true' : undefined}\n\t\t\t\t\taria-label='select merge strategy'\n\t\t\t\t\taria-haspopup='menu'\n\t\t\t\t\tstyle={{ minWidth: 'unset !important', cursor: 'pointer' }}\n\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t>\n\t\t\t\t\t<ArrowDownTwo fontSize='small' />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<Popper\n\t\t\t\tsx={{\n\t\t\t\t\tzIndex: 1\n\t\t\t\t}}\n\t\t\t\topen={open}\n\t\t\t\tanchorEl={anchorRef.current}\n\t\t\t\trole={undefined}\n\t\t\t\ttransition\n\t\t\t\tdisablePortal>\n\t\t\t\t{({ TransitionProps, placement }) => (\n\t\t\t\t\t<Grow\n\t\t\t\t\t\t{...TransitionProps}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransformOrigin:\n\t\t\t\t\t\t\t\tplacement === 'bottom' ? 'center top' : 'center bottom'\n\t\t\t\t\t\t}}>\n\t\t\t\t\t\t<Paper elevation={0} sx={{ border: '1px solid', borderRadius: 2, borderColor: 'theme.grey.200'}}>\n\t\t\t\t\t\t\t<ClickAwayListener onClickAway={handleClose}>\n\t\t\t\t\t\t\t\t<MenuList autoFocusItem>\n\t\t\t\t\t\t\t\t\t{options.map((option, index) => (\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isMenuThirdItemDisabled ? false : (index === 2)}\n\t\t\t\t\t\t\t\t\t\t\tselected={currentTitle?.trim() === option.label?.trim()}\n\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\toption.callback(event, index);\n\t\t\t\t\t\t\t\t\t\t\t\thandleToggle();\n\t\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\t\t\t\t\t\t\toption.color ? option.color : 'theme.secondary.1000'\n\t\t\t\t\t\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</MenuList>\n\t\t\t\t\t\t\t</ClickAwayListener>\n\t\t\t\t\t\t</Paper>\n\t\t\t\t\t</Grow>\n\t\t\t\t)}\n\t\t\t</Popper>\n\t\t</React.Fragment>\n\t);\n};\n\nexport default TitleDropdownButton;\n","import React from 'react';\r\nimport { Box, CircularProgress, CircularProgressProps } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\n\r\nconst Loader = styled(CircularProgress)(({ theme }) => ({\r\n\tcolor: theme.palette?.theme.primary[500]\r\n}));\r\n\r\nconst LoaderContainer = styled(Box)(() => ({\r\n\tposition: 'absolute',\r\n\tdisplay: 'flex',\r\n\twidth: '100%',\r\n\theight: '100%',\r\n\tjustifyContent: 'center',\r\n\talignItems: 'center',\r\n\tbackgroundColor: '#ffffff96',\r\n\tzIndex: 3,\r\n\tleft: 0,\r\n\ttop: 0\r\n}));\r\n\r\nconst ModalLoader = (props: CircularProgressProps) => {\r\n\treturn (\r\n\t\t<LoaderContainer>\r\n\t\t\t<Loader size={50} {...props} />\r\n\t\t</LoaderContainer>\r\n\t);\r\n};\r\n\r\nexport { ModalLoader };\r\nexport default ModalLoader;\r\n","import React from \"react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\n\r\n\r\nimport Typography from \"../typography/typography\";\r\nimport Box from \"@mui/material/Box\";\r\nimport \"./upload-excel.scss\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport {\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Divider,\r\n Grow,\r\n IconButton,\r\n \r\n} from \"@mui/material\";\r\nimport RemoveIcon from \"@mui/icons-material/Remove\";\r\n// import Checkbox from \"../checkbox/checkbox\";\r\nimport Avatar from \"../avatar/avatar\";\r\nimport images from \"../../assets/images\";\r\nimport ModalLoader from '../loaders/modal-loader';\r\nimport {Trash} from '../icons';\r\n\r\nimport { KeyboardArrowDown, KeyboardArrowUp, Upload } from \"@mui/icons-material\";\r\nimport { postImportSheet } from \"../../utils/common\";\r\nimport Button from \"../button/button\";\r\n\r\n\r\ninterface UploadProps {\r\n open: boolean;\r\n title: string;\r\n multiple?: boolean;\r\n accept?: string;\r\n showCameraButton?: boolean;\r\n onClose: () => void;\r\n onConfirm: () => void;\r\n onSubmit?: (files: any[]) => void;\r\n existingDriveData?: any;\r\n importModuleName?: any;\r\n pageName?: any;\r\n handleSuccessImport?: (e?: any) => void;\r\n\r\n}\r\n\r\nconst formatBytes = (bytes: number, decimals = 2) => {\r\n if (bytes === 0) return \"0 Bytes\";\r\n const k = 1024;\r\n const dm = decimals < 0 ? 0 : decimals;\r\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + \" \" + sizes[i];\r\n};\r\n\r\nconst UploadExcel = (props: UploadProps) => {\r\n const {\r\n open,\r\n title,\r\n onClose,\r\n onConfirm,\r\n onSubmit,\r\n accept = \"*\",\r\n multiple = false,\r\n importModuleName,\r\n pageName,\r\n handleSuccessImport\r\n } = props;\r\n const [files, setFiles] = useState<\r\n {\r\n file: File;\r\n isPrivate: boolean;\r\n checkboxDisabled: boolean;\r\n status: string;\r\n uploadProgress: number;\r\n fileSize: number;\r\n fileName: string;\r\n fileType: string;\r\n location: string;\r\n message: string;\r\n }[]\r\n >([]);\r\n\r\n const [isCollapsed, setIsCollapsed] = useState(false);\r\n const [isDialogMinimized, setIsDialogMinimized] = useState(false);\r\n const [isDragOver, setIsDragOver] = useState(false);\r\n const [dataResult, setDataResult] = useState<any>(null);\r\n const [isLoading, setIsLoading] = useState<boolean>(false);\r\n \r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDropAccepted: (newFiles) => {\r\n setFiles([\r\n ...files,\r\n ...newFiles.map((file) => ({\r\n file,\r\n isPrivate: false,\r\n checkboxDisabled: false,\r\n status: \"pending\",\r\n uploadProgress: 0,\r\n fileSize: file.size,\r\n fileName: file.name,\r\n fileType: file.type,\r\n location: \"\",\r\n message: \"\",\r\n })),\r\n ]);\r\n setIsDragOver(false);\r\n },\r\n onDragEnter: () => {\r\n setIsDragOver(true);\r\n },\r\n onDragLeave: () => {\r\n setIsDragOver(false);\r\n },\r\n noClick: true,\r\n noKeyboard: true,\r\n multiple: multiple,\r\n accept: accept ? convertAcceptObject(accept) : accept,\r\n });\r\n\r\n const handleClose = () => {\r\n onClose()\r\n setDataResult(null);\r\n }\r\n\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n\r\n // useEffect(() => {\r\n // const driveTitles = existingDriveData.map(item => item['title'])\r\n // setAllDriveData(driveTitles);\r\n // }, [existingDriveData]);\r\n\r\n\r\n useEffect(() => {\r\n const handleBeforeUnload = (event: any) => {\r\n \r\n const message =\r\n \"Are you sure you want to leave? Your uploads are not complete.\";\r\n event.returnValue = message; // Standard for most browsers\r\n return message; // For some older browsers\r\n \r\n };\r\n if (fileInputRef.current) {\r\n fileInputRef.current.multiple = multiple;\r\n }\r\n\r\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\r\n\r\n return () => {\r\n // Clean up the event listener when the component unmounts\r\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\r\n };\r\n }, [ multiple]);\r\n\r\n \r\n\r\n function convertAcceptObject(types: string) {\r\n const accepts = types.split(\",\").map((item) => item.trim());\r\n const acceptObject = accepts.reduce((acc: any, type: string) => {\r\n acc[type] = [];\r\n return acc;\r\n }, {});\r\n return acceptObject;\r\n }\r\n\r\n const renderFileIcon = (file: any) => {\r\n const fileType = file?.type.split(\"/\")[0];\r\n switch (fileType) {\r\n case \"image\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#FFEBEB\" }}\r\n >\r\n <Avatar size={20} src={images.upload.documentPDF}></Avatar>\r\n </div>\r\n );\r\n case \"application\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#FFEBEB\" }}\r\n >\r\n <Avatar size={150} src={images.upload.documentPDF} alt={\"PDF\"}></Avatar>\r\n <Typography color=\"theme.secondary.1000\" weight=\"bold\" type=\"s2\">{file.name}</Typography>\r\n <Typography color=\"theme.secondary.800\" type=\"s5\">{formatBytes(file.size)}</Typography>\r\n </div>\r\n );\r\n case \"text\":\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#EBF9F2\" }}\r\n >\r\n <Avatar size={20} src={images.upload.docFile}></Avatar>\r\n </div>\r\n );\r\n default:\r\n return (\r\n <div\r\n className={\r\n isDialogMinimized ? \"document-icon-sm\" : \"document-icon-lg\"\r\n }\r\n style={{ backgroundColor: \"#EBF9F2\" }}\r\n >\r\n <Avatar size={20} src={images.upload.docFile}></Avatar>\r\n </div>\r\n );\r\n }\r\n };\r\n\r\n \r\n\r\n const handleChipClick = () => {\r\n if (fileInputRef.current) {\r\n // If multiple is true, set input for multiple files\r\n if (props.multiple) {\r\n fileInputRef.current.setAttribute(\"multiple\", \"true\");\r\n } else {\r\n // If multiple is false, set input for a single file\r\n fileInputRef.current.removeAttribute(\"multiple\");\r\n }\r\n fileInputRef.current.click();\r\n }\r\n };\r\n\r\n const handleFileChange = (e: any) => {\r\n // importData(e.target.files[0]);\r\n const file = e.target.files?.[0] || null;\r\n const f = {\r\n file,\r\n isPrivate: false,\r\n checkboxDisabled: false,\r\n status: \"pending\",\r\n uploadProgress: 0,\r\n fileSize: file.size,\r\n fileName: file.name,\r\n fileType: file.type,\r\n location: \"\",\r\n message: \"\",\r\n }\r\n\r\n \r\n setFiles([\r\n ...files,\r\n ...[f],\r\n ]);\r\n };\r\n\r\n const removeFile = (indexToRemove: number) => {\r\n\r\n setFiles((prevFiles) =>\r\n prevFiles.filter((file, index) =>index !== indexToRemove\r\n ),\r\n );\r\n };\r\n\r\n // const toggleIsPrivate = (index: number) => {\r\n // setFiles((prevFiles) =>\r\n // prevFiles.map((item, i) =>\r\n // i === index ? { ...item, isPrivate: !item.isPrivate } : item,\r\n // ),\r\n // );\r\n // };\r\n\r\n const toggleCollapse = () => {\r\n setIsCollapsed((prevIsCollapsed) => !prevIsCollapsed);\r\n };\r\n\r\n const handleMinimizeClick = () => {\r\n setIsDialogMinimized(!isDialogMinimized);\r\n isDialogMinimized ? onConfirm() : onClose();\r\n };\r\n\r\n const importData = async () => {\r\n const file = files[0].file\r\n\t\tconst formData = new FormData();\r\n\t\tformData.append('file', file); // Ensure the field name is correct.\r\n\t\tsetIsLoading(true)\r\n\t\ttry {\r\n\t\t\tconst response = await postImportSheet(formData, importModuleName, pageName);\r\n\t\t\tif(response) {\r\n\t\t\t\tsetDataResult(response.data)\r\n setIsLoading(false)\r\n if(response?.data?.failed?.length == 0){\r\n handleClose()\r\n handleSuccessImport(response?.data);\r\n }\r\n\t\t\t} \r\n\t\t} catch (error) {\r\n setIsLoading(false)\r\n\t\t}\r\n\r\n\t}\r\n\r\n useEffect(() => {\r\n open && setFiles([]);\r\n }, [open]);\r\n\r\n\r\n\r\n return (\r\n <>\r\n <Dialog open={open} onClose={handleClose} className=\"upload\">\r\n <DialogTitle className=\"upload--head\">\r\n <Box className=\"upload--title\">\r\n <Typography\r\n type=\"s3\"\r\n ml={1}\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n {title}\r\n </Typography>\r\n </Box>\r\n \r\n </DialogTitle>\r\n <Divider />\r\n <DialogContent className=\"upload--content\">\r\n {isLoading && <ModalLoader />}\r\n \r\n {files.length === 0 ? (\r\n <div\r\n className={`upload--fileContent ${isDragActive ? \"drag-active\" : \"\"\r\n }`}\r\n >\r\n <div {...getRootProps()} className=\"drop-view\">\r\n {!isDragOver ? (\r\n <>\r\n <input {...getInputProps()} ref={fileInputRef} />\r\n <p className=\"upload--text\">\r\n Drag and Drop files here or upload from\r\n </p>\r\n\r\n <div className=\"device-wrap\">\r\n <div className=\"select-button\" onClick={handleChipClick}>\r\n <img src={images.upload.monitor} />\r\n <Typography type=\"s5\">My Device</Typography>\r\n <input\r\n type=\"file\"\r\n {...getInputProps({ multiple: true })}\r\n ref={fileInputRef}\r\n style={{ display: \"none\" }}\r\n onChange={handleFileChange}\r\n accept={accept}\r\n />\r\n </div>\r\n \r\n </div>\r\n\r\n {dataResult?.successful?.length || dataResult?.failed?.length ? (\r\n <div className =\"mt-2\">\r\n {dataResult?.failed.length == 0 ? (\r\n <Typography type=\"s3\">\r\n All data imported successfully.\r\n </Typography> ) : (\r\n <Typography type=\"s4\" word-break=\"break-word\" color=\"theme.error.600\" weight=\"medium\">\r\n Failed to import the following records with IDs: {dataResult.failed?.map((item:any)=>item?.id).join(\", \")}\r\n </Typography> )\r\n } \r\n </div>\r\n ) : (\r\n \"\"\r\n )}\r\n </>\r\n ) : (\r\n <div className=\"after-drop\">\r\n <img src={images.upload.documentUpload} />\r\n <Typography type=\"s3\">\r\n Drag & Drop your files here\r\n </Typography>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <Grow in={Boolean(files?.length)} timeout={500}>\r\n <Box>\r\n {files.map((file: any, index: number) => (\r\n <Box key={file?.file?.name} display='flex' width='100%' justifyContent='center' alignItems='center' flexDirection='column'>\r\n <Box className=\"icon-BG\">\r\n <IconButton onClick={() => removeFile(index)} className=\"remove-button\"><Trash fontSize='small' /> </IconButton>\r\n <Avatar size={150} src={images.upload.docFile} alt={\"PDF\"}></Avatar>\r\n </Box>\r\n <Typography type=\"s2\" weight=\"bold\" color='theme.secondary.1000'>{file?.file?.name}</Typography>\r\n <Typography type=\"s4\" color='theme.secondary.800'>{formatBytes(file?.file?.size)}</Typography>\r\n </Box>\r\n ))}\r\n {dataResult?.successful?.length || dataResult?.failed?.length ? (\r\n <div className =\"mt-2\">\r\n {dataResult?.failed.length == 0 ? (\r\n <Typography type=\"s3\">\r\n All data imported successfully.\r\n </Typography> ) : (\r\n <Typography type=\"s4\" word-break=\"break-word\" color=\"theme.error.600\" weight=\"medium\">\r\n Failed to import the following records with IDs: {dataResult?.failed?.map((item:any)=>item.id).join(\", \")}\r\n </Typography> )\r\n } \r\n </div>\r\n ) : (\r\n \"\"\r\n )}\r\n </Box>\r\n </Grow>\r\n )}\r\n </DialogContent>\r\n <DialogActions className=\"uploadActions\">\r\n <Button onClick={onSubmit ? ()=>{\r\n onSubmit(files)\r\n } : importData} startIcon={<Upload />}>Upload</Button>\r\n </DialogActions>\r\n </Dialog>\r\n {isDialogMinimized && (\r\n <div className=\"bottom-corner-box\">\r\n <div className=\"top-section\">\r\n <div className=\"top-text\">\r\n Uploading {files.length} Item{files.length !== 1 ? \"s\" : \"\"}\r\n </div>\r\n <div className=\"top-options\">\r\n <div className=\"btn\" onClick={handleMinimizeClick}>\r\n <RemoveIcon />\r\n </div>\r\n <div className=\"btn\" onClick={toggleCollapse}>\r\n <div className=\"arrow-btn\">\r\n {isCollapsed ? <KeyboardArrowUp /> : <KeyboardArrowDown />}\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div className=\"box-list\">\r\n {!isCollapsed &&\r\n files.map((file: any, index: number) => (\r\n <div className=\"bottom-section\">\r\n <div className=\"doc-icon\">{renderFileIcon(file?.file)}</div>\r\n <div className=\"file-detail\">\r\n <div className=\"file-name\">\r\n <div className=\"file-text\">\r\n {file?.file?.name}\r\n {index}\r\n </div>\r\n </div>\r\n <div className=\"file-status\">\r\n {file?.status !== \"canceled\" ? (\r\n <>\r\n {file.uploadProgress === 0 && (\r\n <div className=\"avatar-container\">\r\n <Avatar\r\n size={20}\r\n className=\"avatar\"\r\n src={images.upload.empty}\r\n ></Avatar>\r\n <Avatar\r\n size={20}\r\n onClick={() => removeFile(index)}\r\n src={images.upload.close}\r\n className=\"close-icon\"\r\n ></Avatar>\r\n </div>\r\n )}\r\n {file?.uploadProgress > 0 &&\r\n file?.uploadProgress < 100 && (\r\n <CircularProgress\r\n color=\"success\"\r\n variant=\"determinate\"\r\n value={file?.uploadProgress}\r\n />\r\n )}\r\n {file?.uploadProgress === 100 && (\r\n <div className=\"avatar-container\">\r\n <Avatar\r\n size={20}\r\n className=\"avatar\"\r\n src={images.upload.tick}\r\n ></Avatar>\r\n <Avatar\r\n size={20}\r\n src={images.upload.folder}\r\n className=\"close-icon\"\r\n ></Avatar>\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <Typography type=\"s4\" className=\"canceled-text\">\r\n Upload Canceled\r\n </Typography>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport { UploadExcel };\r\nexport default UploadExcel;\r\n","import Button from '../button/button';\r\nimport Typography from '../typography/typography';\r\n/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport './action-bar.scss';\r\nimport {\r\n\t/* IconButton, */ Box,\r\n\tDivider,\r\n\tIconButton,\r\n\tMenu,\r\n\tMenuItem,\r\n\tuseMediaQuery,\r\n\tuseTheme\r\n} from '@mui/material';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport ViewModal from '../view-modal/view-modal';\r\nimport HeaderCard from '../header-card/header-card';\r\nimport SearchBar from '../search-bar/search-bar';\r\nimport { useEffect, useMemo, useState } from 'react';\r\nimport images from '../../assets/images';\r\nimport Toggle from '../toggle/toggle';\r\nimport Filter from '../filter/filter';\r\nimport Select from '../select/select';\r\nimport { RuleGroupType } from 'react-querybuilder';\r\nimport SaveFilterModal from '../save-filter-modal/save-filter-modal';\r\nimport {\r\n\tsetBaseUrl,\r\n\tpostV1Filter,\r\n\tgetV1FilterResource\r\n} from '../../api-client/api.system-feature/api';\r\nimport type * as Types from '../../api-client/api.system-feature/api-types';\r\nimport { auth } from '../../constants/auth';\r\nimport DropdownButton from '../dropdown-button/dropdown-button';\r\nimport TitleDropdownButton from '../title-dropdown-button/title-dropdown-button';\r\nimport { useAppDispatch, useAppSelector } from '../../redux/hooks';\r\nimport { getToken } from '../../utils/common';\r\nimport React from 'react';\r\nimport UploadExcel from '../upload-excel/upload-excel';\r\nimport { generateQueryString, getErrorMessage, getExcelTemplateGenerateTemplate, getOperatorLabel, getExcelExportTemplate, getPdfExportTemplate } from '../../utils/common';\r\nimport { initialFilter, ViewType } from '../../contexts/page-context';\r\nimport { usePages } from '../../hooks/use-pages';\r\nimport Chip from '../chip/chip';\r\nimport formatText, { formatLabel } from '../../utils/format-text';\r\nimport { Cancel } from '@mui/icons-material';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { IResources, routeToResourceMap } from '../../constants/route-page-map';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { FilterRemove, Filter as FilterIcon, Search, FolderSave, Export, Import, DocumentDownload } from '../icons';\r\nimport { co } from 'node_modules/@fullcalendar/core/internal-common';\r\n\r\ninterface ActionData {\r\n\tlabel: string;\r\n\tposition: number;\r\n}\r\ninterface ActionBarPropsType {\r\n\ttitle: string;\r\n\tdata: ActionData[];\r\n\tsetData: React.Dispatch<React.SetStateAction<ActionData[]>>;\r\n\tactive: string;\r\n\tsetActive: (view: ViewType) => void;\r\n\thandleAddButton?: (e?: any) => void;\r\n\tbutton?: boolean;\r\n\thandleSearch?: (value: string) => void;\r\n\tfilters?: string;\r\n\tdisabledViews?: string[];\r\n\tisDropdownMenuButton?: boolean;\r\n\titemListingDropdownOptions?: any;\r\n\tisTitleMenu?: boolean;\r\n\ttitleMenus?: any;\r\n\tfolderData?: any;\r\n\ttype?: any;\r\n\tfields?: any;\r\n\tapplyFilter?: any;\r\n\tsavedFilters?: SavedFilter;\r\n\tsetSavedFilters?: (view: SavedFilter) => void;\r\n\tisToggleButton?: boolean;\r\n\thandleToggleButton?: (e?: any) => void;\r\n\tshowView?: boolean;\r\n\tshowSearch?: boolean;\r\n\tshowFilter?: boolean;\r\n\tcustomButtons?: React.ReactNode[] | JSX.Element[];\r\n\tactionBtn?: React.ReactNode[] | JSX.Element[];\r\n\tpageName?: string;\r\n\timportModuleName?: string;\r\n\tsearchText?: string;\r\n\tselectedIds?: any;\r\n\tisUseFields?: boolean;\r\n\thandleSuccessImport?: (e?: any) => void;\r\n}\r\n\r\ninterface SavedFilter {\r\n\tid: string;\r\n\tname: string;\r\n\tquery: RuleGroupType;\r\n}\r\n\r\nconst ActionBar = React.memo((props: ActionBarPropsType) => {\r\n\tconst token = localStorage.getItem(auth.storageTokenKeyName) || undefined;\r\n\tconst location = useLocation();\r\n\r\n\tconst {\r\n\t\ttitle,\r\n\t\tdata,\r\n\t\tsetData,\r\n\t\tactive,\r\n\t\tsetActive,\r\n\t\thandleAddButton,\r\n\t\thandleSearch,\r\n\t\tbutton = true,\r\n\t\tdisabledViews,\r\n\t\tisDropdownMenuButton = false,\r\n\t\titemListingDropdownOptions = [],\r\n\t\tisTitleMenu = false,\r\n\t\ttitleMenus = [],\r\n\t\ttype,\r\n\t\tfields = [],\r\n\t\tapplyFilter,\r\n\t\t// setSavedFilters,\r\n\t\t// savedFilters,\r\n\t\tisToggleButton = false,\r\n\t\thandleToggleButton,\r\n\t\tshowSearch = true,\r\n\t\tshowFilter = true,\r\n\t\tshowView = true,\r\n\t\tcustomButtons,\r\n\t\tpageName,\r\n\t\tactionBtn,\r\n\t\timportModuleName,\r\n\t\tselectedIds,\r\n\t\tsearchText,\r\n\t\tisUseFields,\r\n\t\thandleSuccessImport\r\n\t} = props;\r\n\tconst dispatch = useAppDispatch();\r\n\tconst [isToggled, setIsToggled] = useState<boolean>(false);\r\n\tconst [isToggledForItem, setIsToggledForItem] = useState<boolean>(false);\r\n\tconst [openFilterPopup, setOpenFilterPopup] = useState<boolean>(false);\r\n\tconst [status, setStatus] = useState<string>('');\r\n\tconst [openSaveFilter, setIsOpenSaveFilter] = useState<boolean>(false);\r\n\tconst [rowAnchorEl, setRowAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [isUploadModalOpen, setIsUploadModalOpen] = useState(false);\r\n\tconst [savedFilters, setSavedFilters] = useState<any[]>([]);\r\n\t// const [selectedSavedFilter, setSelectedSavedFilter] = useState<any>(null);\r\n\tconst [searchedText, setSearchedText] = useState<string>(\"\");\r\n\tconst { t } = useTranslation();\r\n\tconst theme = useTheme();\r\n\tconst isLgUp = useMediaQuery(theme.breakpoints.up('xl'));\r\n\tconst { activePage, updatePageInfo, schemaFields, setActivePage } = usePages();\r\n\tconst { filters } = activePage;\r\n\r\n\tconst resources: IResources = useMemo(() => routeToResourceMap[location.pathname] || null, [location.pathname])\r\n\r\n\t// const { filterBar, filterQuery } = useAppSelector((store) => {\r\n\t// \treturn store?.drive;\r\n\t// });\r\n\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tfetchSavedFilters();\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, []);\r\n\r\n\tconst fetchSavedFilters = async (): Promise<void> => {\r\n\t\tif (resources?.pageResource || resources?.fieldResource) {\r\n\t\t\tgetV1FilterResource({ ...getToken(), resource: resources?.pageResource || resources?.fieldResource })\r\n\t\t\t\t.then((response: any) => {\r\n\t\t\t\t\tconst savedFilters = response.data.result.map((e: any) => {\r\n\t\t\t\t\t\treturn { id: e._id, name: e.name, query: e.data };\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tsetSavedFilters?.(savedFilters);\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err: any) => console.log('Error fetching saved filters:', err));\r\n\t\t} else {\r\n\t\t\tsetSavedFilters([])\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tconst handleFilterHide = () => {\r\n\t\t// dispatch(setFilterBar(false));\r\n\t\treturn\r\n\t};\r\n\r\n\tconst handleStatusChange = (event: any) => {\r\n\t\tsetStatus(event.target.value);\r\n\t};\r\n\r\n\tconst handleSaveFilterClick = () => {\r\n\t\tif (filters?.rules) {\r\n\t\t\tsetIsOpenSaveFilter(true);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleImportClick = (event: any) => {\r\n\t\tsetRowAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleActionsClose = () => {\r\n\t\tsetRowAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleSaveFilter = (query: RuleGroupType) => {\r\n\t\t// dispatch(setFilterQuery(query));\r\n\t\treturn\r\n\t};\r\n\r\n\tconst handleSave = async (name: string, filterQuery: RuleGroupType) => {\r\n\r\n\t\t// dispatch(setFilterBar(false));\r\n\r\n\t\tconst postFilterRequest: Types.PostV1FilterRequest = {\r\n\t\t\t'x-token': token,\r\n\t\t\tmodule: resources?.pageResource || resources?.fieldResource || 'erp-common',\r\n\t\t\tname: name,\r\n\t\t\tis_applied: true,\r\n\t\t\tdata: filterQuery\r\n\t\t};\r\n\t\ttry {\r\n\t\t\tawait postV1Filter(postFilterRequest)\r\n\t\t\tenqueueSnackbar('Filters saved successfully.')\r\n\t\t\tsetActivePage((prev: any) => ({\r\n\t\t\t\t...prev,\r\n\t\t\t\tfilters: {\r\n\t\t\t\t\t...prev.filters,\r\n\t\t\t\t\tname,\r\n\t\t\t\t\trules: filterQuery.rules\r\n\t\t\t\t},\r\n\t\t\t\tfilterQueryString: generateQueryString(filterQuery)\r\n\t\t\t}));\r\n\t\t\tsetIsOpenSaveFilter(false);\r\n\t\t} catch (error) {\r\n\t\t\tlet m: string = 'Something went wrong on saving filters'\r\n\t\t\tif (error instanceof Error) {\r\n\t\t\t\tm = getErrorMessage(error.message)\r\n\t\t\t}\r\n\t\t\tenqueueSnackbar(m, { variant: 'error' })\r\n\t\t\treturn false\r\n\t\t}\r\n\t\treturn true\r\n\t};\r\n\r\n\tconst handleToggle = () => {\r\n\t\tsetIsToggled((prev) => !prev);\r\n\t\talert('Toggled');\r\n\t};\r\n\r\n\tconst handleChangeToggleButton = () => {\r\n\t\tsetIsToggledForItem((prev) => !prev);\r\n\t\thandleToggleButton?.();\r\n\t};\r\n\r\n\tconst handleCloseFilter = () => {\r\n\t\tsetOpenFilterPopup(false);\r\n\t};\r\n\r\n\tconst handleActiveHeaderCard = (data: ActionData) => {\r\n\t\tsetActive(data?.label);\r\n\t};\r\n\r\n\tconst downloadTemplate = async (moduleName: string) => {\r\n\t\tconst templateURL: any = await getExcelTemplateGenerateTemplate({\r\n\t\t\t'x-token': token,\r\n\t\t\tresource: moduleName\r\n\t\t});\r\n\t\tif (templateURL) {\r\n\t\t\tconst blob = await templateURL.blob();\r\n\r\n\t\t\tconst link = document.createElement('a');\r\n\r\n\t\t\tconst url = window.URL.createObjectURL(blob);\r\n\r\n\t\t\tlink.href = url;\r\n\t\t\tlink.download = `${moduleName}.xlsx`;\r\n\r\n\t\t\tdocument.body.appendChild(link);\r\n\t\t\tlink.click();\r\n\t\t\tdocument.body.removeChild(link);\r\n\t\t\twindow.URL.revokeObjectURL(url);\r\n\t\t}\r\n\t};\r\n\r\n\tconst exportExcel = async (moduleName: string, filterQueryString: string, selectedIds: any, title: string) => {\r\n\t\tconst templateURL: any = await getExcelExportTemplate({\r\n\t\t\t'x-token': token,\r\n\t\t\tactivePage: activePage,\r\n\t\t\tfilterQueryString: filterQueryString,\r\n\t\t\tselectedIds: selectedIds,\r\n\t\t\ttitle: title\r\n\t\t});\r\n\t\tif (templateURL) {\r\n\t\t\tconst blob = await templateURL.blob();\r\n\r\n\t\t\tconst link = document.createElement('a');\r\n\r\n\t\t\tconst url = window.URL.createObjectURL(blob);\r\n\r\n\t\t\tlink.href = url;\r\n\t\t\tlink.download = `${moduleName}.xlsx`;\r\n\r\n\t\t\tdocument.body.appendChild(link);\r\n\t\t\tlink.click();\r\n\t\t\tdocument.body.removeChild(link);\r\n\t\t\twindow.URL.revokeObjectURL(url);\r\n\t\t}\r\n\t};\r\n\r\n\tconst exportPdf = async (moduleName: string, filterQueryString: string, selectedIds: any, title: string) => {\r\n\t\tconst columns = activePage.visible_columns.map((col: any) => ({\r\n\t\t\t...col,\r\n\t\t\theader: t(col.header) \r\n\t\t}));\r\n\t\tconst templateURL: any = await getPdfExportTemplate({\r\n\t\t\t'x-token': token,\r\n\t\t\tactivePage: activePage,\r\n\t\t\tfilterQueryString: filterQueryString,\r\n\t\t\tselectedIds: selectedIds,\r\n\t\t\ttitle: title,\r\n\t\t\tcolumns: columns\r\n\t\t});\r\n\t\tif (templateURL) {\r\n\t\t\tconst blob = await templateURL.blob();\r\n\r\n\t\t\tconst link = document.createElement('a');\r\n\r\n\t\t\tconst url = window.URL.createObjectURL(blob);\r\n\r\n\t\t\tlink.href = url;\r\n\t\t\tlink.download = `${moduleName}.pdf`;\r\n\r\n\t\t\tdocument.body.appendChild(link);\r\n\t\t\tlink.click();\r\n\t\t\tdocument.body.removeChild(link);\r\n\t\t\twindow.URL.revokeObjectURL(url);\r\n\t\t}\r\n\t};\r\n\r\n\tconst openImportTemplate = () => {\r\n\t\tsetIsUploadModalOpen(true);\r\n\t};\r\n\tconst rowActionMenu = [];\r\n\tif (pageName && (!importModuleName || selectedIds)) {\r\n\t\trowActionMenu.push({\r\n\t\t\tlabel: 'Export Excel',\r\n\t\t\thandleAction: (moduleName: string) => exportExcel(moduleName, activePage.filterQueryString, selectedIds, title),\r\n\t\t\ticon: <Export fontSize='small' />\r\n\t\t})\r\n\t}\r\n\tif(pageName && (!importModuleName || selectedIds)){\r\n\t\trowActionMenu.push({\r\n\t\t\tlabel: 'Export PDF',\r\n\t\t\thandleAction: (moduleName: string) => exportPdf(moduleName, activePage.filterQueryString, selectedIds, title),\r\n\t\t\ticon: <Export fontSize='small'/>\r\n\t\t})\r\n\t}\r\n\tif (pageName && importModuleName) {\r\n\t\t{\r\n\t\t\trowActionMenu.push({\r\n\t\t\t\tlabel: 'Download Template ',\r\n\t\t\t\thandleAction: (moduleName: string) => downloadTemplate(moduleName),\r\n\t\t\t\ticon: <DocumentDownload fontSize='small' />\r\n\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tlabel: 'Import Template',\r\n\t\t\t\t\thandleAction: (moduleName: string) => openImportTemplate(moduleName),\r\n\t\t\t\t\ticon: <Import fontSize='small' />\r\n\t\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tconst getFilterChipLabels = (rule: any) => {\r\n\t\trule = { ...rule, field: rule.field?.replace(\"__replaceKey\", '') }\r\n\t\tlet label = schemaFields.find((f: any) => f.key === rule.field)?.label || rule.field;\r\n\t\tlabel = formatLabel(label?.replace('_id', ' '));\r\n\t\tconst opLabel = getOperatorLabel(rule, schemaFields);\r\n\r\n\t\tlet value = rule.value;\r\n\t\tif (Array.isArray(rule.value)) {\r\n\t\t\trule.value = rule.value.map(rv => formatLabel(typeof rv === 'object' ? (rv.label) : rv))\r\n\t\t\tvalue = rule.value.join(', ');\r\n\t\t}\r\n\r\n\t\treturn <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n\t\t\t<Typography type='s5' color='theme.secondary.800' weight='medium'>{label}</Typography>\r\n\t\t\t<Divider orientation='vertical' flexItem />\r\n\t\t\t<Typography type='s5' color='theme.primary.800' weight='medium'>{formatText(opLabel)} {value}</Typography>\r\n\t\t</Box>\r\n\t\t// `${label}: ${value}`;\r\n\t};\r\n\r\n\tconst getFilterChip = (rr: any, index: any) => {\r\n\t\treturn (\r\n\t\t\t<Chip\r\n\t\t\t\tlabel={getFilterChipLabels(rr)}\r\n\t\t\t\tvariant='outlined'\r\n\t\t\t\tactive\r\n\t\t\t\tsx={({ palette }) => ({\r\n\t\t\t\t\tbackgroundColor: 'grey.200',\r\n\t\t\t\t\tborderColor: `${palette.grey[300]} !important`,\r\n\t\t\t\t\topacity: 0.8,\r\n\t\t\t\t\t'&:hover': { backgroundColor: `${palette.grey[200]} !important` },\r\n\t\t\t\t\tflexDirection: 'row-reverse',\r\n\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\tgap: 0.75,\r\n\t\t\t\t\tcursor: 'unset'\r\n\t\t\t\t})}\r\n\t\t\t\tdeleteIcon={\r\n\t\t\t\t\t<Cancel\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tfontSize: '1rem !important',\r\n\t\t\t\t\t\t\tcolor: '#919294 !important',\r\n\t\t\t\t\t\t\tmarginRight: 'auto !important',\r\n\t\t\t\t\t\t\tmarginLeft: `0 !important`,\r\n\t\t\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\t\t\tcolor: 'inherit !important'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t}\r\n\t\t\t\tonDelete={() => removeSignleFilter(index)}\r\n\t\t\t\tclickable={false}\r\n\t\t\t/>\r\n\t\t)\r\n\t}\r\n\r\n\tconst removeSignleFilter = (ruleIndex: number) => {\r\n\t\tconst uRules: any[] = filters.rules.filter(\r\n\t\t\t(_, index) => index !== ruleIndex\r\n\t\t);\r\n\t\tconst uFilters = { ...filters, rules: uRules };\r\n\t\tconst filterQueryString = generateQueryString(uFilters);\r\n\r\n\t\tupdatePageInfo({\r\n\t\t\tfilters: uFilters,\r\n\t\t\tfilterQueryString\r\n\t\t});\r\n\t};\r\n\r\n\tconst isFilterApplied = (flt: any): boolean => Boolean(flt?.rules?.length);\r\n\tconst [searchAnchorEl, setSearchAnchorEl] = useState<HTMLElement | null>(null);\r\n\t// useEffect(() => {\r\n\t// \tif(activePage?.active_view ){\r\n\t// \t\tconst updateViews=activePage?.views?.length?activePage.views:[{\r\n\t// \t\t\tlabel:activePage?.active_view,\r\n\t// \t\t\tposition:0\r\n\t// \t\t}]\r\n\t// \t\tsetData(updateViews)\r\n\t// \t}\t\t\r\n\t// \t//eslint-disable-next-line\r\n\t// },[isCreatePage,activePage?.active_view])\r\n\r\n\tuseEffect(() => {\r\n\t\tif (activePage?.search) {\r\n\t\t\tsetSearchedText(activePage?.search)\r\n\t\t}\r\n\t}, [activePage?.search])\r\n\r\n\tuseEffect(() => {\r\n\t\tif (searchedText) {\r\n\t\t\thandleSearch?.(searchedText);\r\n\t\t\tupdatePageInfo({ search: searchedText });\r\n\t\t}\r\n\t\t//eslint-disable-next-line\r\n\t}, [searchedText])\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<div className='action-bar'>\r\n\t\t\t\t<div className='action-bar--LeftContent'>\r\n\t\t\t\t\t{isTitleMenu ? (\r\n\t\t\t\t\t\t<div style={{ zIndex: 999 }}>\r\n\t\t\t\t\t\t\t<TitleDropdownButton\r\n\t\t\t\t\t\t\t\tonClick={handleAddButton}\r\n\t\t\t\t\t\t\t\toptions={titleMenus}\r\n\t\t\t\t\t\t\t\tisMenuThirdItemDisabled={true}\r\n\t\t\t\t\t\t\t\tcurrentTitle={title}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t\t</TitleDropdownButton>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<Typography type='h3' weight='medium' color='theme.secondary.1000'>\r\n\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<div className='action-bar--HeaderCard'>\r\n\t\t\t\t\t\t{Boolean(data) &&\r\n\t\t\t\t\t\t\tdata\r\n\t\t\t\t\t\t\t\t.map((ele) => ele)\r\n\t\t\t\t\t\t\t\t.sort((a, b) => a.position - b.position)\r\n\t\t\t\t\t\t\t\t.map((item: ActionData) => (\r\n\t\t\t\t\t\t\t\t\t<HeaderCard\r\n\t\t\t\t\t\t\t\t\t\tkey={item?.position}\r\n\t\t\t\t\t\t\t\t\t\ttitle={item?.label}\r\n\t\t\t\t\t\t\t\t\t\tactive={active}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => handleActiveHeaderCard(item)}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t{showView && (\r\n\t\t\t\t\t\t\t<ViewModal\r\n\t\t\t\t\t\t\t\tsetData={setData}\r\n\t\t\t\t\t\t\t\tdata={data}\r\n\t\t\t\t\t\t\t\tsetActive={setActive}\r\n\t\t\t\t\t\t\t\tdisabledViews={disabledViews}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div className='action-bar--RightContent' style={{ gap: isLgUp ? `1rem` : `0.5rem` }}>\r\n\t\t\t\t\t{isToggleButton && (\r\n\t\t\t\t\t\t<div className='item--VariantDisplay'>\r\n\t\t\t\t\t\t\t<div className='item--VariantHeading'>Variant:</div>\r\n\t\t\t\t\t\t\t<div className='item--VariantToggal'>\r\n\t\t\t\t\t\t\t\t<Toggle\r\n\t\t\t\t\t\t\t\t\tchecked={isToggledForItem}\r\n\t\t\t\t\t\t\t\t\tonChange={handleChangeToggleButton}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showSearch && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t{isLgUp ?\r\n\t\t\t\t\t\t\t\t<SearchBar\r\n\t\t\t\t\t\t\t\t\tplaceholder='Search'\r\n\t\t\t\t\t\t\t\t\thandleSearch={(e) => {\r\n\t\t\t\t\t\t\t\t\t\tsetSearchedText(e);\r\n\t\t\t\t\t\t\t\t\t\thandleSearch?.(e);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tdebounceTime={1000}\r\n\t\t\t\t\t\t\t\t\tisDrivePage={true}\r\n\t\t\t\t\t\t\t\t\tsearchText={searchedText}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t<IconButton size='small' onClick={(e) => setSearchAnchorEl(e.currentTarget)}><Search fontSize='small' color='grey.1000' /> </IconButton>\r\n\t\t\t\t\t\t\t\t\t<Menu\r\n\t\t\t\t\t\t\t\t\t\tanchorEl={searchAnchorEl}\r\n\t\t\t\t\t\t\t\t\t\topen={Boolean(searchAnchorEl)}\r\n\t\t\t\t\t\t\t\t\t\tonClose={() => setSearchAnchorEl(null)}\r\n\t\t\t\t\t\t\t\t\t\tanchorOrigin={{\r\n\t\t\t\t\t\t\t\t\t\t\tvertical: 'top',\r\n\t\t\t\t\t\t\t\t\t\t\thorizontal: 'right',\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\ttransformOrigin={{\r\n\t\t\t\t\t\t\t\t\t\t\tvertical: 'top',\r\n\t\t\t\t\t\t\t\t\t\t\thorizontal: 'right',\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={{ '& ul': { p: 0 }, '& .MuiMenu-paper': { boxShadow: `0px 4px 6px rgba(0, 0, 0, 0.1), 0px 1px 3px rgba(0, 0, 0, 0.06);` } }}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<SearchBar\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder='Search'\r\n\t\t\t\t\t\t\t\t\t\t\thandleSearch={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tsetSearchedText(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleSearch?.(e);\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tdebounceTime={1000}\r\n\t\t\t\t\t\t\t\t\t\t\tisDrivePage={true}\r\n\t\t\t\t\t\t\t\t\t\t\tsearchText={searchText || searchedText}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</Menu>\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showFilter && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t{isLgUp ?\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t// sx={{display:\"none\"}}\r\n\t\t\t\t\t\t\t\t\tvariant='text'\r\n\t\t\t\t\t\t\t\t\tstartIcon={<FilterIcon fontSize='small' />}\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\tsetOpenFilterPopup(true);\r\n\t\t\t\t\t\t\t\t\t\tfetchSavedFilters();\r\n\t\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t{t('common.filter')}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t<IconButton onClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetOpenFilterPopup(true);\r\n\t\t\t\t\t\t\t\t\tfetchSavedFilters();\r\n\t\t\t\t\t\t\t\t}} size='small'>\r\n\t\t\t\t\t\t\t\t\t<FilterIcon fontSize='small' color='grey.1000' />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{customButtons}\r\n\t\t\t\t\t{actionBtn}\r\n\t\t\t\t\t{button && (\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='contained'\r\n\t\t\t\t\t\t\tstartIcon={<AddIcon />}\r\n\t\t\t\t\t\t\tonClick={handleAddButton}>\r\n\t\t\t\t\t\t\t{t('common.add')}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{isDropdownMenuButton && (\r\n\t\t\t\t\t\t<div style={{ zIndex: 999 }}>\r\n\t\t\t\t\t\t\t<DropdownButton\r\n\t\t\t\t\t\t\t\tonClick={handleAddButton}\r\n\t\t\t\t\t\t\t\toptions={itemListingDropdownOptions}\r\n\t\t\t\t\t\t\t\tstartIcon={<AddIcon />}\r\n\t\t\t\t\t\t\t\tisMenuThirdItemDisabled={true}>\r\n\t\t\t\t\t\t\t\t{t('common.add')}\r\n\t\t\t\t\t\t\t</DropdownButton>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{pageName ? (\r\n\t\t\t\t\t\t<IconButton onClick={(e) => handleImportClick(e)}>\r\n\t\t\t\t\t\t\t<img src={images.more} alt='More Icon' />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t''\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t<Menu\r\n\t\t\t\t\t\tanchorEl={rowAnchorEl}\r\n\t\t\t\t\t\topen={Boolean(rowAnchorEl)}\r\n\t\t\t\t\t\tonClose={handleActionsClose}>\r\n\t\t\t\t\t\t{rowActionMenu?.map((option: any) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\toption.handleAction(pageName);\r\n\t\t\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tsx={{ alignItems: 'center', gap: 0.5 }}\r\n\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\ttypeof option.disabled === 'function'\r\n\t\t\t\t\t\t\t\t\t\t\t? option.disabled()\r\n\t\t\t\t\t\t\t\t\t\t\t: Boolean(option.disabled)\r\n\t\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t{option?.icon}\r\n\t\t\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\r\n\t\t\t\t\t\t\t\t\t\t{option.label}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</Menu>\r\n\r\n\t\t\t\t\t<Filter\r\n\t\t\t\t\t\topen={openFilterPopup}\r\n\t\t\t\t\t\tonClose={handleCloseFilter}\r\n\t\t\t\t\t\tactiveView={active}\r\n\t\t\t\t\t\tsavedFilters={savedFilters}\r\n\t\t\t\t\t\tfetchSavedFilters={fetchSavedFilters}\r\n\t\t\t\t\t\tonSaveFilter={handleSaveFilter}\r\n\t\t\t\t\t\ttype={type}\r\n\t\t\t\t\t\tisUseFields={isUseFields}\r\n\t\t\t\t\t\tfields={fields}\r\n\t\t\t\t\t\tonSelectedFilter={f => setSelectedSavedFilter(f)}\r\n\t\t\t\t\t\tapplyFilter={applyFilter}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t{/* Applied Filters view (Start) */}\r\n\t\t\t{isFilterApplied(filters) && (\r\n\t\t\t\t<Box\r\n\t\t\t\t\tmb={1}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\t\tjustifyContent: 'space-between'\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tmb={1}\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\tmaxWidth: 400\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\r\n\t\t\t\t\t\t\t{t('common.filters')}:{' '}\r\n\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t{filters?.rules?.map((r, rIndex) => (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t{r?.rules?.length ? (\r\n\t\t\t\t\t\t\t\t\tr?.rules?.map((rr, rrIndex) => (\r\n\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t{getFilterChip(rr, rrIndex)}\r\n\t\t\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t) : <>\r\n\t\t\t\t\t\t\t\t\t{getFilterChip(r, rIndex)}\r\n\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='text'\r\n\t\t\t\t\t\t\tclassName='enable-filter-btn'\r\n\t\t\t\t\t\t\tstartIcon={<FolderSave fontSize='small' />}\r\n\t\t\t\t\t\t\tonClick={handleSaveFilterClick}>\r\n\t\t\t\t\t\t\t<span> {t('common.saveFilter')}</span>\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t{/* {selectedSavedFilter && \r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='text'\r\n\t\t\t\t\t\t\tclassName='enable-filter-btn'\r\n\t\t\t\t\t\t\tstartIcon={<img src={images.common.saveFilterIcon} alt='Add Icon' />}\r\n\t\t\t\t\t\t\tonClick={handleSaveFilterClick}>\r\n\t\t\t\t\t\t\t\t<Typography type='s3' color=\"theme.secondary.1000\" weight='medium'>\r\n\t\t\t\t\t\t\t\t\tUpdate Filter <Typography type='s3' weight='medium'>{`(${selectedSavedFilter.name})`}</Typography>\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t} */}\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='text'\r\n\t\t\t\t\t\t\tstartIcon={<FilterRemove fontSize='small' />}\r\n\t\t\t\t\t\t\tonClick={() =>\r\n\t\t\t\t\t\t\t\tupdatePageInfo({\r\n\t\t\t\t\t\t\t\t\tfilters: initialFilter,\r\n\t\t\t\t\t\t\t\t\tfilterQueryString: ''\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t{t('common.clearFilter')}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t{/* Applied Filters view (End) */}\r\n\r\n\t\t\t{/* {filterBar && (\r\n\t\t\t\t<div className='filter-bar'>\r\n\t\t\t\t\t<div className='filter-bar--LeftContent'>\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tplaceholder='Placeholder'\r\n\t\t\t\t\t\t\t\tsize={'small'}\r\n\t\t\t\t\t\t\t\tclassName='status-changes-drp'\r\n\t\t\t\t\t\t\t\tvalue={status}\r\n\t\t\t\t\t\t\t\tonChange={handleStatusChange}\r\n\t\t\t\t\t\t\t\tvariant='outlined'>\r\n\t\t\t\t\t\t\t\t<MenuItem value={'Status'}>{t('common.status')}</MenuItem>\r\n\t\t\t\t\t\t\t\t<MenuItem value={'Show'}>{t('common.show')}</MenuItem>\r\n\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<Typography className='subtask-switch' variant='h6'>\r\n\t\t\t\t\t\t\t{t('common.subtask')}\r\n\t\t\t\t\t\t\t<Toggle checked={isToggled} onChange={handleToggle} />\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t|\r\n\t\t\t\t\t\t<Button className='hide-btn' onClick={handleFilterHide}>\r\n\t\t\t\t\t\t\t{t('common.hide')}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className='filter-bar--RightContent'>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='text'\r\n\t\t\t\t\t\t\tclassName='enable-filter-btn'\r\n\t\t\t\t\t\t\tonClick={handleSaveFilterClick}>\r\n\t\t\t\t\t\t\t<img src={images.common.saveFilterIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t<span>{t('common.saveFilter')}</span>\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t)} */}\r\n\t\t\t<SaveFilterModal\r\n\t\t\t\topen={openSaveFilter}\r\n\t\t\t\tonClose={() => setIsOpenSaveFilter(false)}\r\n\t\t\t\thandleSubmit={(name: any) =>\r\n\t\t\t\t\thandleSave(name, filters as RuleGroupType)\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\t\t\t<UploadExcel\r\n\t\t\t\topen={isUploadModalOpen}\r\n\t\t\t\tshowCameraButton={false}\r\n\t\t\t\tonClose={() => setIsUploadModalOpen(false)}\r\n\t\t\t\tonConfirm={() => setIsUploadModalOpen(true)}\r\n\t\t\t\ttitle='Upload'\r\n\t\t\t\tmultiple={false}\r\n\t\t\t\timportModuleName={importModuleName}\r\n\t\t\t\tpageName={importModuleName}\r\n\t\t\t\thandleSuccessImport={handleSuccessImport}\r\n\t\t\t\taccept='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\r\n\t\t\t/>\r\n\t\t</div>\r\n\t);\r\n});\r\n\r\nexport { ActionBar };\r\nexport default ActionBar;\r\n","import { AlertProps, Alert as MUIAlert, styled } from \"@mui/material\";\r\n\r\nconst StyledAlert = styled(MUIAlert)(({ theme: { palette } }) => ({\r\n \"&.MuiAlert-root\": {\r\n fontSize: \"0.75rem\",\r\n fontWeight: \"500\",\r\n letterSpacing: \"-0.24px\",\r\n padding: \"0rem 0.75rem\",\r\n },\r\n \"&.MuiAlert-standardInfo\": {\r\n color: palette.theme?.secondary[900],\r\n backgroundColor: palette.theme?.secondary[200],\r\n },\r\n \"&.MuiAlert-standardSuccess\": {\r\n color: palette.theme?.primary[900],\r\n backgroundColor: palette.theme?.primary[100],\r\n },\r\n \"&.MuiAlert-standardError\": {\r\n color: palette.theme?.tertiary6[900],\r\n backgroundColor: palette.theme?.tertiary6[100],\r\n \"& .MuiAlert-icon\" : {\r\n color: palette.theme?.tertiary6[900],\r\n }\r\n },\r\n\r\n \".MuiAlert-action\": {\r\n svg: {\r\n fontSize: \"1rem\",\r\n },\r\n },\r\n}));\r\n\r\nconst Alert = (props: AlertProps) => {\r\n const { children, icon = false, ...rest } = props;\r\n\r\n return (\r\n <StyledAlert icon={icon} {...rest}>\r\n {children}\r\n </StyledAlert>\r\n );\r\n};\r\n\r\nexport { Alert };\r\nexport default Alert;\r\n","import { Box, Breadcrumbs, BreadcrumbsProps } from '@mui/material';\nimport Typography from '../typography/typography';\nimport { Link } from 'react-router-dom';\n\ninterface BreadCrumbSlot {\n\tlink?: string;\n\tlabel: string | JSX.Element;\n\tlinkState?: any;\n\tonClick?: () => void;\n}\n\ninterface PropsType extends BreadcrumbsProps {\n\tpath: BreadCrumbSlot[];\n}\n\nconst BreadCrumb = (props: PropsType) => {\n\tconst { path } = props;\n\n\treturn (\n\t\t<>\n\t\t\t<Breadcrumbs\n\t\t\t\tsx={{\n\t\t\t\t\t'& .MuiBreadcrumbs-separator': {\n\t\t\t\t\t\tcolor: 'theme.secondary.600'\n\t\t\t\t\t}\n\t\t\t\t}}>\n\t\t\t\t{path?.map((slot, index) => (\n\t\t\t\t\t<Box key={index}>\n\t\t\t\t\t\t{index < path?.length - 1 ? (\n\t\t\t\t\t\t\t// <Link\n\t\t\t\t\t\t\t// \tto={String(slot?.link) ?? undefined}\n\t\t\t\t\t\t\t// \tstyle={{ display: 'block' }}>\n\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\t\tcolor='theme.secondary.600'\n\t\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\t\tcomponent={slot?.link ? Link : undefined}\n\t\t\t\t\t\t\t\t\tto={String(slot?.link) ?? undefined}\n\t\t\t\t\t\t\t\t\tstate={slot?.linkState}\n\t\t\t\t\t\t\t\t\tonClick={slot?.onClick} style={{ display: 'block' }}>\n\t\t\t\t\t\t\t\t\t{slot?.label}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t// </Link>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\tcolor='theme.secondary.1000'>\n\t\t\t\t\t\t\t\t{slot?.label}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Box>\n\t\t\t\t))}\n\t\t\t</Breadcrumbs>\n\t\t</>\n\t);\n};\n\nexport { BreadCrumb };\nexport default BreadCrumb;\n","//eslint-disable @typescript-eslint/no-explicit-any\r\nimport React, { useState, useRef, KeyboardEvent, memo } from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { \r\n Chip, \r\n Box, \r\n FormControl, \r\n FormHelperText,\r\n InputAdornment,\r\n styled\r\n} from '@mui/material';\r\nimport Typography from '../typography/typography';\r\n\r\n// interface ValidationRule {\r\n// type: 'email' | 'url' | 'phone' | 'custom';\r\n// pattern?: RegExp;\r\n// message: string;\r\n// validator?: (value: string) => boolean;\r\n// }\r\n\r\ninterface ChipGeneratorProps {\r\n name: string;\r\n control: any;\r\n label?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n validation?: any[];\r\n maxChips?: number;\r\n allowDuplicates?: boolean;\r\n fieldArrayName?: string;\r\n endIcon?: React.ReactNode;\r\n helperText?: string;\r\n error?: boolean;\r\n onChipAdd?: (chip: string) => void;\r\n onChipRemove?: (chip: string, index: number) => void;\r\n customChipProps?: any;\r\n textFieldProps?: any;\r\n allowMultipleAdd?: boolean;\r\n delimiters?: string[];\r\n // New props for data type handling\r\n dataType?: 'array' | 'string';\r\n separator?: string;\r\n}\r\n\r\n// Styled components for inline chips\r\nconst ChipContainer = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n gap: theme.spacing(0.5),\r\n minHeight: '1.4375em',\r\n border: `1px solid #D3D3D4`,\r\n borderRadius: '0.25rem',\r\n cursor: 'text',\r\n fontSize: '0.875rem',\r\n// '&:hover': {\r\n// borderColor: theme.palette.text.primary,\r\n// },\r\n '&.focused': {\r\n borderColor:'#54CC96',\r\n borderWidth: '1px',\r\n },\r\n '&.error': {\r\n borderColor: theme.palette.error.main,\r\n },\r\n '&.disabled': {\r\n backgroundColor: theme.palette.action.disabledBackground,\r\n cursor: 'default',\r\n },\r\n paddingLeft: 3 \r\n}));\r\n\r\nconst InlineInput = styled('input')(({ theme }) => ({\r\n border: 'none',\r\n outline: 'none',\r\n backgroundColor: 'transparent',\r\n flexGrow: 1,\r\n minWidth: '120px',\r\n padding: '0.5rem',\r\n fontSize: '0.875rem',\r\n fontFamily: theme.typography.fontFamily,\r\n '&::placeholder': {\r\n color: theme.palette.text.secondary,\r\n opacity: 1,\r\n },\r\n '&:disabled': {\r\n cursor: 'default',\r\n }\r\n}));\r\n\r\nconst InlineChip = styled(Chip)(({theme: { palette }}) => ({\r\n height: '24px',\r\n fontSize: '0.875rem',\r\n borderColor:' #54CC96',\r\n backgroundColor: palette.theme.primary[50],\r\n color:'#2EB273',\r\n margin: '1px',\r\n '& .MuiChip-deleteIcon': {\r\n fontSize: '16px',\r\n color:'#2EB273',\r\n '&:hover': {\r\n color: '#2EB273',\r\n },\r\n },\r\n}));\r\n\r\nconst ChipGenerator: React.FC<ChipGeneratorProps> = memo(({\r\n name,\r\n control,\r\n label,\r\n placeholder = \"Type and press space to add\",\r\n required = false,\r\n disabled = false,\r\n validation,\r\n maxChips,\r\n allowDuplicates = false,\r\n fieldArrayName,\r\n endIcon,\r\n helperText,\r\n error: externalError,\r\n onChipAdd,\r\n onChipRemove,\r\n customChipProps = {},\r\n allowMultipleAdd = true,\r\n delimiters = [',', ';', '\\n', '\\t'],\r\n dataType = 'string',\r\n separator = ',',\r\n}) => {\r\n const [inputValue, setInputValue] = useState('');\r\n const [validationError, setValidationError] = useState('');\r\n const [focused, setFocused] = useState(false);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n const validateChip = (value: string,validation: any): { isValid: boolean; error: string } => {\r\n if (!validation) return { isValid: true, error: '' };\r\n\r\n const trimmedValue = value.trim();\r\n if (!trimmedValue) return { isValid: false, error: 'Empty values are not allowed' };\r\n\r\n switch (validation.type) {\r\n case 'email': {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n const isValidEmail = emailRegex.test(trimmedValue);\r\n return {\r\n isValid: isValidEmail,\r\n error: isValidEmail ? '' : validation.message || 'Please enter a valid email address'\r\n };\r\n }\r\n\r\n // case 'url': {\r\n // const urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\r\n // const isValidUrl = urlRegex.test(trimmedValue);\r\n // return {\r\n // isValid: isValidUrl,\r\n // error: isValidUrl ? '' : validation.message || 'Please enter a valid URL'\r\n // };\r\n // }\r\n\r\n case 'phone': {\r\n const phoneRegex = /^[+]?[1-9][\\d]{0,15}$/;\r\n const isValidPhone = phoneRegex.test(trimmedValue.replace(/[\\s()-]/g, ''));\r\n return {\r\n isValid: isValidPhone,\r\n error: isValidPhone ? '' : validation.message || 'Please enter a valid phone number'\r\n };\r\n }\r\n\r\n case 'custom': {\r\n if (validation.pattern) {\r\n const isValid = validation.pattern.test(trimmedValue);\r\n return {\r\n isValid,\r\n error: isValid ? '' : validation.message\r\n };\r\n }\r\n if (validation.validator) {\r\n const isValid = validation.validator(trimmedValue);\r\n return {\r\n isValid,\r\n error: isValid ? '' : validation.message\r\n };\r\n }\r\n return { isValid: true, error: '' };\r\n }\r\n\r\n default:\r\n return { isValid: true, error: '' };\r\n }\r\n };\r\n\r\n // Convert between string and array formats\r\n const stringToArray = (str: string): string[] => {\r\n if (!str || typeof str !== 'string') return [];\r\n return str.split(separator).map(item => item.trim()).filter(Boolean);\r\n };\r\n\r\n const arrayToString = (arr: string[]): string => {\r\n return arr.join(separator + ' ');\r\n };\r\n\r\n // Parse input value by delimiters\r\n const parseMultipleValues = (inputStr: string): string[] => {\r\n if (!allowMultipleAdd) {\r\n return [inputStr.trim()].filter(Boolean);\r\n }\r\n\r\n const delimiterPattern = delimiters.map(d => \r\n d.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\r\n ).join('|');\r\n \r\n const regex = new RegExp(`[${delimiterPattern}]`);\r\n \r\n return inputStr\r\n .split(regex)\r\n .map(val => val.trim())\r\n .filter(Boolean);\r\n };\r\n\r\n const addChips = (inputStr: string, currentChips: string[]): { \r\n newChips: string[]; \r\n errors: string[]; \r\n addedCount: number;\r\n } => {\r\n const valuesToAdd = parseMultipleValues(inputStr);\r\n if (valuesToAdd.length === 0) {\r\n return { newChips: currentChips, errors: [], addedCount: 0 };\r\n }\r\n\r\n const newChips = [...currentChips];\r\n const errors: string[] = [];\r\n let addedCount = 0;\r\n\r\n for (const value of valuesToAdd) {\r\n if (maxChips && newChips.length >= maxChips) {\r\n errors.push(`Maximum ${maxChips} items allowed`);\r\n break;\r\n }\r\n \r\n if (validation?.length > 0) {\r\n const errorMessages = validation\r\n .map(val => validateChip(value, val))\r\n .filter(result => !result.isValid)\r\n .map(result => result.error);\r\n\r\n if (errorMessages.length > 0) {\r\n errors.push(`\"${value}\": ${errorMessages.join(', ')}`);\r\n continue;\r\n }\r\n }\r\n \r\n\r\n if (!allowDuplicates && newChips.includes(value)) {\r\n errors.push(`\"${value}\": Duplicate values are not allowed`);\r\n continue;\r\n }\r\n\r\n newChips.push(value);\r\n addedCount++;\r\n onChipAdd?.(value);\r\n }\r\n\r\n return { newChips, errors, addedCount };\r\n };\r\n\r\n const removeChip = (chipToRemove: string, index: number, currentChips: string[]) => {\r\n const newChips = currentChips.filter((_, i) => i !== index);\r\n onChipRemove?.(chipToRemove, index);\r\n setValidationError('');\r\n return newChips;\r\n };\r\n\r\n const processInput = (\r\n inputStr: string,\r\n onChange: (value: string[] | string) => void,\r\n currentValue: string[] | string\r\n ) => {\r\n const currentChips = Array.isArray(currentValue) ? currentValue : stringToArray(currentValue);\r\n const { newChips, errors } = addChips(inputStr, currentChips);\r\n \r\n if (errors.length > 0) {\r\n setValidationError(errors.join('; '));\r\n } else {\r\n setValidationError('');\r\n }\r\n \r\n if (newChips.length !== currentChips.length) {\r\n const outputValue = dataType === 'string' ? arrayToString(newChips) : newChips;\r\n onChange(outputValue);\r\n setInputValue('');\r\n }\r\n };\r\n\r\n const handleKeyPress = (\r\n event: KeyboardEvent<HTMLInputElement>,\r\n onChange: (value: string[] | string) => void,\r\n currentValue: string[] | string\r\n ) => {\r\n if (event.key === ' ' || event.key === 'Enter') {\r\n event.preventDefault();\r\n if (inputValue.trim()) {\r\n processInput(inputValue, onChange, currentValue);\r\n }\r\n } else if (event.key === 'Backspace' && !inputValue) {\r\n const currentChips = Array.isArray(currentValue) ? currentValue : stringToArray(currentValue);\r\n if (currentChips.length > 0) {\r\n const lastIndex = currentChips.length - 1;\r\n const newChips = removeChip(currentChips[lastIndex], lastIndex, currentChips);\r\n const outputValue = dataType === 'string' ? arrayToString(newChips) : newChips;\r\n onChange(outputValue);\r\n }\r\n }\r\n };\r\n\r\n const handleBlur = (\r\n onChange: (value: string[] | string) => void,\r\n currentValue: string[] | string\r\n ) => {\r\n setFocused(false);\r\n if (inputValue.trim()) {\r\n processInput(inputValue, onChange, currentValue);\r\n }\r\n };\r\n\r\n const handlePaste = (\r\n event: React.ClipboardEvent<HTMLInputElement>,\r\n onChange: (value: string[] | string) => void,\r\n currentValue: string[] | string\r\n ) => {\r\n if (allowMultipleAdd) {\r\n event.preventDefault();\r\n const pastedText = event.clipboardData.getData('text');\r\n const combinedInput = inputValue + pastedText;\r\n processInput(combinedInput, onChange, currentValue);\r\n }\r\n };\r\n\r\n const handleContainerClick = () => {\r\n if (!disabled && inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n };\r\n\r\n const fieldName = fieldArrayName ? `${fieldArrayName}.${name}` : name;\r\n\r\n return (\r\n <Controller\r\n name={fieldName}\r\n control={control}\r\n defaultValue={dataType === 'string' ? '' : []}\r\n render={({ field: { onChange, value, ...field }, fieldState: { error } }) => {\r\n const currentChips = Array.isArray(value) ? value : stringToArray(value || '');\r\n const hasError = !!error || !!validationError || externalError;\r\n\r\n return (\r\n <FormControl fullWidth error={hasError}>\r\n {label && (\r\n <Typography\r\n type=\"s5\"\r\n weight={\"medium\"}\r\n mb={0.5}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n >\r\n {label} {required && <span className=\"requiredStar\">*</span>}\r\n </Typography>\r\n )}\r\n\r\n <ChipContainer\r\n ref={containerRef}\r\n className={`${focused ? 'focused' : ''} ${hasError ? 'error' : ''} ${disabled ? 'disabled' : ''}`}\r\n onClick={handleContainerClick}\r\n >\r\n {currentChips.map((chip: string, index: number) => (\r\n <InlineChip\r\n key={`${chip}-${index}`}\r\n label={chip}\r\n onDelete={\r\n disabled\r\n ? undefined\r\n : (event) => {\r\n event.stopPropagation();\r\n const newChips = removeChip(chip, index, currentChips);\r\n const outputValue = dataType === 'string' ? arrayToString(newChips) : newChips;\r\n onChange(outputValue);\r\n }\r\n }\r\n size=\"small\"\r\n // color=\"primary\"\r\n // variant=\"outlined\"\r\n {...customChipProps}\r\n />\r\n ))}\r\n \r\n <InlineInput\r\n {...field}\r\n ref={inputRef}\r\n value={inputValue}\r\n onChange={(e) => setInputValue(e.target.value)}\r\n onKeyDown={(e) => handleKeyPress(e, onChange, value)}\r\n onFocus={() => setFocused(true)}\r\n onBlur={() => handleBlur(onChange, value)}\r\n onPaste={(e) => handlePaste(e, onChange, value)}\r\n placeholder={currentChips.length === 0 ? placeholder : ''}\r\n disabled={disabled}\r\n style={{ \r\n width: inputValue ? `${Math.max(inputValue.length * 8, 120)}px` : '120px',\r\n }}\r\n />\r\n \r\n {endIcon && (\r\n <InputAdornment position=\"end\" sx={{ ml: 1 }}>\r\n {endIcon}\r\n </InputAdornment>\r\n )}\r\n </ChipContainer>\r\n\r\n {(helperText || error?.message || validationError) && (\r\n <FormHelperText>\r\n {error?.message || validationError || helperText}\r\n </FormHelperText>\r\n )}\r\n\r\n {maxChips && (\r\n <FormHelperText>\r\n {currentChips.length} / {maxChips} items\r\n </FormHelperText>\r\n )}\r\n\r\n \r\n </FormControl>\r\n );\r\n }}\r\n />\r\n );\r\n});\r\n\r\nexport default ChipGenerator;","import React from 'react';\r\n\r\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\r\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\r\nimport { DateTimePicker as Date } from '@mui/x-date-pickers/DateTimePicker';\r\nimport Typography from '../typography/typography';\r\nimport { styled } from '@mui/material';\r\nimport logo from '../../assets/images';\r\nimport dayjs from 'dayjs';\r\nimport './date-time-picker.scss'\r\n\r\nexport interface DatePickerProps {\r\n\tlabel: string;\r\n\tdisabled?: boolean;\r\n\terror?: boolean;\r\n\tname?: string;\r\n\tvalue?: string | number | Date;\r\n\thelperText?: string;\r\n\tdataPosition?: number;\r\n\tdataName?: string;\r\n\tdisableFutureDates?: boolean;\r\n\tplaceholder?: string;\r\n\trequired?: boolean;\r\n\tdisablePastDates?: boolean;\r\n\tdefaultValue?: string | number | Date | undefined;\r\n\ttextFieldProps?: any;\r\n\tformat?: string;\r\n}\r\n\r\nconst StyledDatePicker = styled(Date)(({ theme: { palette } }) => ({\r\n\t'& .MuiOutlinedInput-root': {\r\n\t\tpadding: '0',\r\n\t\tcolor: palette.theme?.secondary[800],\r\n\t\t'& fieldset': {\r\n\t\t\tborderColor: palette.theme?.secondary[400]\r\n\t\t},\r\n\t\t'&:hover fieldset': {\r\n\t\t\tborderColor: palette.theme?.secondary[500]\r\n\t\t},\r\n\t\t'&.Mui-focused fieldset': {\r\n\t\t\tborderWidth: '0.0625rem',\r\n\t\t\tborderStyle: 'solid',\r\n\t\t\tborderColor: palette.theme?.primary[700]\r\n\t\t},\r\n\t\t'&.Mui-error fieldset': {\r\n\t\t\tborderColor: palette.theme?.error[600]\r\n\t\t},\r\n\t\t'&.Mui-disabled': {\r\n\t\t\tbackground: palette.theme?.secondary[200],\r\n\t\t\tcolor: palette.theme?.secondary[800]\r\n\t\t},\r\n\t\t'& .MuiInputBase-input::placeholder': {\r\n\t\t\tcolor: palette.theme?.secondary[800],\r\n\t\t\topacity: 1\r\n\t\t}\r\n\t},\r\n\t'& .MuiFormHelperText-root': {\r\n\t\tmarginLeft: 0,\r\n\t\tcolor: palette.theme?.secondary[800],\r\n\t\t'&.Mui-error': {\r\n\t\t\tcolor: palette.theme?.error[600]\r\n\t\t}\r\n\t},\r\n\t'& .MuiIconButton-root': {\r\n\t\tmarginRight: 0\r\n\t},\r\n\t'& .MuiPickersCalendarHeader-labelContainer': {\r\n\t\tfontWeight: 600\r\n\t}\r\n}));\r\n\r\nconst DateTimePicker = (props: DatePickerProps) => {\r\n\tconst {\r\n\t\tlabel,\r\n\t\tdisabled,\r\n\t\terror,\r\n\t\thelperText,\r\n\t\tdataName,\r\n\t\tdataPosition,\r\n\t\tdisableFutureDates = false,\r\n\t\tplaceholder,\r\n\t\trequired = false,\r\n\t\tdisablePastDates = false,\r\n\t\tdefaultValue,\r\n\t\ttextFieldProps,\r\n\t\tformat,\r\n\t\t...rest\r\n\t} = props;\r\n\r\n\treturn (\r\n\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\r\n\t\t\t{label && (\r\n\t\t\t\t<Typography\r\n\t\t\t\t\ttype='s5'\r\n\t\t\t\t\tweight='medium'\r\n\t\t\t\t\tmb={0.5}\r\n\t\t\t\t\tcolor={error ? 'theme.error.600' : 'theme.secondary.800'}\r\n\t\t\t\t\tdata-position={dataPosition}\r\n\t\t\t\t\tdata-name={dataName}>\r\n\t\t\t\t\t{label} {required && <span className='requiredStar'>*</span>}\r\n\t\t\t\t</Typography>\r\n\t\t\t)}\r\n\t\t\t<StyledDatePicker\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tdisableFuture={disableFutureDates}\r\n\t\t\t\tdisablePast={disablePastDates}\r\n\t\t\t\tslotProps={{\r\n\t\t\t\t\ttextField: {\r\n\t\t\t\t\t\thelperText: helperText,\r\n\t\t\t\t\t\terror: error,\r\n\t\t\t\t\t\tplaceholder: placeholder || 'MM/DD/YYYY HH:mm:ss',\r\n\t\t\t\t\t\t...textFieldProps\r\n\t\t\t\t\t\t// required: required,\r\n\t\t\t\t\t}\r\n\t\t\t\t}}\r\n\t\t\t\tformat={format || 'MM/DD/YYYY HH:mm:ss'}\r\n\t\t\t\tslots={{ openPickerIcon: logo.CalenderIcon }}\r\n\t\t\t\t{...rest}\r\n\t\t\t\tdefaultValue={defaultValue ? dayjs(defaultValue) : undefined}\r\n\t\t\t\tclassName='datePicker'\r\n\t\t\t/>\r\n\t\t</LocalizationProvider>\r\n\t);\r\n};\r\n\r\nexport { DateTimePicker };\r\nexport default DateTimePicker;\r\n","import { Box, IconButton, MenuItem, SelectChangeEvent, TextField } from \"@mui/material\";\r\nimport Typography from \"../typography/typography\";\r\nimport Select from \"../select/select\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\nimport ChevronRightICon from \"@mui/icons-material/ChevronRight\";\r\nimport \"./pagination.scss\";\r\nimport { IPaginationModel } from \"../../@types/pagination-model\";\r\nimport { useLanguage } from \"../../hooks/useLangauge\";\r\nimport { usePages } from \"../../hooks/use-pages\";\r\nimport { useEffect } from \"react\";\r\n\r\ninterface IPagination {\r\n paginationModel: IPaginationModel;\r\n handlePaginationModel: (model: IPaginationModel) => void;\r\n totalPages: number;\r\n}\r\n\r\nconst Pagination = ({\r\n paginationModel,\r\n totalPages,\r\n handlePaginationModel,\r\n}: IPagination) => {\r\n const { pageNo, limit } = paginationModel;\r\n const skip=limit*(pageNo-1)\r\n const pageSizeOptions = [10, 20, 50];\r\n const {isRtl}=useLanguage();\r\n const {setIsChanged,setActivePage,activePage}=usePages();\r\n const handleLimitChange = (e: SelectChangeEvent<unknown>) => {\r\n const newModel = {\r\n ...paginationModel,\r\n page: 1,\r\n pageNo: 1,\r\n limit: e?.target?.value as number,\r\n };\r\n handlePaginationModel(newModel);\r\n };\r\n\r\n const handleNextPage = () => {\r\n if (pageNo < totalPages) {\r\n const newModel = {\r\n ...paginationModel,\r\n pageNo: parseInt(pageNo) + 1,\r\n };\r\n handlePaginationModel(newModel);\r\n setIsChanged(true)\r\n }\r\n };\r\n const handlePrevPage = () => {\r\n if (pageNo > 1) {\r\n const newModel = {\r\n ...paginationModel,\r\n pageNo: parseInt(pageNo) - 1,\r\n };\r\n handlePaginationModel(newModel);\r\n setIsChanged(true)\r\n }\r\n };\r\n\r\n const handleEnterKey = (event) => {\r\n if (event.key === 'Enter') {\r\n const value = event.target.value;\r\n if (parseInt(value) > 0 && parseInt(value) <= totalPages) {\r\n const newModel = {\r\n ...paginationModel,\r\n pageNo: parseInt(value),\r\n }; \r\n handlePaginationModel(newModel);\r\n setIsChanged(true)\r\n }\r\n \r\n }\r\n };\r\n\r\n useEffect(()=>{\r\n setActivePage({...activePage,skip,pageNo})\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[pageNo])\r\n\r\n\r\n\r\n return (\r\n <Box className=\"pagination\" borderTop={\"2px solid theme.secondary.200\"}>\r\n <Typography color=\"theme.secondary.800\" type=\"s4\">\r\n Items per page :\r\n </Typography>\r\n <Select\r\n value={limit}\r\n size=\"small\"\r\n className=\"page-size-select page-size-select-pagination\"\r\n onChange={handleLimitChange}\r\n variant=\"outlined\"\r\n MenuProps={{\r\n sx:{\r\n maxWidth:\"unset\"\r\n }\r\n }}\r\n >\r\n {pageSizeOptions?.map((size) => (\r\n <MenuItem key={size} value={size}>\r\n {size}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n\r\n <Typography color=\"theme.secondary.800\" type=\"s4\">\r\n Go To :\r\n </Typography>\r\n\r\n <TextField\r\n type=\"number\"\r\n className=\"goto-box\"\r\n id=\"outlined-required\"\r\n defaultValue=\"\"\r\n onKeyDown={handleEnterKey}\r\n />\r\n\r\n <IconButton onClick={handlePrevPage} size=\"small\" disabled={paginationModel.pageNo === 1}>\r\n {isRtl ? <ChevronRightICon /> : <ChevronLeftIcon />} \r\n </IconButton>\r\n <Typography\r\n sx={{\r\n ...(isRtl ? { ml: 0.5 } : { mr: 0.5 })\r\n }}\r\n type=\"s4\"\r\n weight=\"normal\"\r\n color=\"theme.secondary.700\"\r\n >\r\n Page{\" \"}\r\n </Typography>\r\n {/* <input value={pageNo} type=\"number\" className=\"page-input\" />{\" \"} */}\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {pageNo}{\" \"}\r\n </Typography>\r\n <Typography\r\n mx={0.5}\r\n type=\"s4\"\r\n weight=\"normal\"\r\n color=\"theme.secondary.700\"\r\n >\r\n of{\" \"}\r\n </Typography>\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {totalPages || 1}\r\n </Typography>\r\n {/* </Box> */}\r\n <IconButton onClick={handleNextPage} size=\"small\" disabled={paginationModel.pageNo === totalPages}>\r\n {isRtl ? <ChevronLeftIcon /> :<ChevronRightICon />}\r\n </IconButton>\r\n </Box>\r\n );\r\n};\r\n\r\nexport { Pagination };\r\nexport default Pagination;\r\n","import {\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n IconButton,\r\n} from \"@mui/material\";\r\nimport Close from \"@mui/icons-material/Close\";\r\nimport Typography from \"../../typography/typography\";\r\nimport TextField from \"../../text-field/text-field\";\r\nimport Button from \"../../button/button\";\r\nimport Modal from \"../../modal/modal\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { IPage } from \"../../../@types/page\";\r\n\r\ninterface IAddPage {\r\n open: boolean;\r\n onClose: () => void;\r\n page?: IPage;\r\n handleSubmit: (page: IPage) => void;\r\n pages?: IPage[];\r\n}\r\n\r\nconst AddPageModal = ({ open, onClose, page, handleSubmit, pages }: IAddPage) => {\r\n const [name, setName] = useState<string>();\r\n const [error, setError] = useState<string>(\"\");\r\n const pageNames = useMemo(() => pages?.map((page) => page?.name || \"\"), [pages])\r\n\r\n useEffect(() => {\r\n setName(page?.name);\r\n }, [page]);\r\n\r\n useEffect(() => {\r\n setError(\"\")\r\n }, []);\r\n\r\n const handleSave = () => {\r\n let newPage: any = {};\r\n if (page) {\r\n newPage = {\r\n ...page,\r\n };\r\n }\r\n newPage[\"name\"] = name;\r\n\r\n handleSubmit(newPage);\r\n setName(\"\");\r\n onClose();\r\n };\r\n\r\n const handleInputChange = (e: any) => {\r\n const value = e.target.value\r\n\r\n setName(value)\r\n if (pageNames?.includes(value.trim())) {\r\n setError(\"Page name already in use\")\r\n } else if (!value.trim()) {\r\n setError(\"Page name can not be empty\")\r\n } else {\r\n setError(\"\")\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <Modal fullWidth onClose={onClose} open={open}>\r\n <DialogTitle>\r\n <Typography type=\"s3\" weight=\"medium\" color={\"theme.secondary.1000\"}>\r\n {page ? \"Edit\" : \"Add\"} New View\r\n </Typography>\r\n <IconButton edge=\"end\" onClick={onClose} size=\"small\">\r\n <Close fontSize=\"inherit\" />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent dividers>\r\n <TextField\r\n label=\"View Name\"\r\n fullWidth\r\n placeholder=\"Enter view name\"\r\n error={error}\r\n helperText={error}\r\n value={name}\r\n onChange={handleInputChange}\r\n />\r\n </DialogContent>\r\n <DialogActions>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={()=>{\r\n onClose();\r\n setName(\"\");\r\n }}\r\n style={{\r\n color: \"black\",\r\n }}\r\n >\r\n Cancel\r\n </Button>\r\n <Button disabled={error || !name} onClick={handleSave}>Save</Button>\r\n </DialogActions>\r\n </Modal>\r\n </>\r\n );\r\n};\r\n\r\nexport { AddPageModal };\r\nexport default AddPageModal;\r\n","import Typography from \"../../typography/typography\";\nimport images from \"../../../assets/images\";\nimport { Box, Tab, Tabs } from \"@mui/material\";\nimport { SyntheticEvent, useState } from \"react\";\n\nfunction SharedPageView(props: any) {\n const { pageValue, pages, onChange } = props;\n const [value, setValue] = useState(pages[pageValue]?.viewStyle - 1);\n\n const handleChange = (_event: SyntheticEvent, newValue: number) => {\n setValue(newValue);\n onChange(newValue + 1);\n };\n\n const renderContentView = () => {\n switch (value) {\n case 0:\n return (\n <img\n className=\"shared-img\"\n src={images.sharedPage.kanbanView}\n alt=\"Kanban View\"\n />\n );\n case 1:\n return (\n <img\n className=\"shared-img\"\n src={images.sharedPage.calendarView}\n alt=\"Gantt View\"\n />\n );\n case 2:\n return (\n <img\n className=\"shared-img\"\n src={images.sharedPage.tableView}\n alt=\"Grid View\"\n />\n );\n case 3:\n return (\n <img\n className=\"shared-img\"\n src={images.sharedPage.ganttView}\n alt=\"Table View\"\n />\n );\n case 4:\n return (\n <img\n className=\"shared-img\"\n src={images.sharedPage.gridView}\n alt=\"Calendar View\"\n />\n );\n default:\n return null;\n }\n };\n\n const renderViewName = (index: number) => {\n switch (index) {\n case 0:\n return value === 0 ? \"Kanban View\" : \"1\";\n case 1:\n return value === 1 ? \"Calendar View\" : \"2\";\n case 2:\n return value === 2 ? \"List View\" : \"3\";\n case 3:\n return value === 3 ? \"Timeline View\" : \"4\";\n case 4:\n return value === 4 ? \"Grid\" : \"5\";\n default:\n return \"\";\n }\n };\n\n return (\n <>\n <div className=\"shared-img-wrap\">\n <Typography>{renderContentView()}</Typography>\n <div className=\"shared-img-tab\">\n <Box sx={{ width: \"100%\" }}>\n <Tabs value={value} onChange={handleChange} centered>\n <Tab key={0} label={renderViewName(0)} />\n <Tab key={1} label={renderViewName(1)} />\n <Tab key={2} label={renderViewName(2)} />\n <Tab key={3} label={renderViewName(3)} />\n <Tab key={4} label={renderViewName(4)} />\n </Tabs>\n </Box>\n </div>\n </div>\n </>\n );\n}\n\nexport { SharedPageView };\nexport default SharedPageView;\n","import {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n FormControlLabel,\r\n Grid,\r\n IconButton,\r\n Tab,\r\n Tabs,\r\n} from \"@mui/material\";\r\nimport Close from \"@mui/icons-material/Close\";\r\nimport Typography from \"../../typography/typography\";\r\nimport Button from \"../../button/button\";\r\nimport Modal from \"../../modal/modal\";\r\nimport \"./shared-page-modal.scss\";\r\nimport { useEffect, useState } from \"react\";\r\nimport SearchBar from \"../../search-bar/search-bar\";\r\nimport Toggle from \"../../toggle/toggle\";\r\nimport SharedPageView from \"./shared-page-view\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { setSharedPage } from \"../../../views/afterAuth/dashboard/redux/reducer\";\r\n\r\ninterface IAddPage {\r\n open: boolean;\r\n onClose: () => void;\r\n pages?: any;\r\n handleSubmit: (page: any) => void;\r\n}\r\n\r\ninterface TabPanelProps {\r\n children?: React.ReactNode;\r\n index: number;\r\n value: number;\r\n}\r\n\r\nfunction TabPanel(props: TabPanelProps) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n <div\r\n className=\"shared-tab\"\r\n role=\"tabpanel\"\r\n hidden={value !== index}\r\n id={`vertical-tabpanel-${index}`}\r\n aria-labelledby={`vertical-tab-${index}`}\r\n {...other}\r\n >\r\n {value === index && (\r\n <Box sx={{ p: 3 }}>\r\n <Typography>{children}</Typography>\r\n </Box>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nfunction a11yProps(index: number) {\r\n return {\r\n id: `vertical-tab-${index}`,\r\n \"aria-controls\": `vertical-tabpanel-${index}`,\r\n };\r\n}\r\n\r\nconst SharedPageModal = ({ open, onClose, pages, handleSubmit }: IAddPage) => {\r\n const [value, setValue] = useState(0);\r\n const [sharedPages, setSharedPages] = useState(pages);\r\n const [searchQuery, setSearchQuery] = useState(\"\");\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(setSharedPage(sharedPages));\r\n }, [dispatch, sharedPages]);\r\n\r\n const handleChange = (_event: React.SyntheticEvent, newValue: number) => {\r\n setValue(newValue);\r\n };\r\n\r\n const handleSave = () => {\r\n handleSubmit(pages[value]);\r\n };\r\n\r\n const renderTabs = () => {\r\n const filteredPages = sharedPages.filter((page: any) =>\r\n page.name.toLowerCase().includes(searchQuery.toLowerCase()),\r\n );\r\n\r\n return filteredPages.map((page: any, index: number) => (\r\n <Tab key={index} label={page.name} {...a11yProps(index)} />\r\n ));\r\n };\r\n\r\n const PageDescription = ({ page }: { page: any }) => {\r\n let viewsMessage = \"\",\r\n filtersMessage = \"\";\r\n\r\n if (page?.details?.views?.length === 1) {\r\n viewsMessage = `This page has 1 view, you can customize it`;\r\n } else if (page?.details?.views?.length) {\r\n viewsMessage = `This page has ${page?.details?.views?.length} different views, you can customize them`;\r\n } else {\r\n viewsMessage = `In this page you can add different views and customize them`;\r\n }\r\n\r\n if (page?.details?.filters?.length === 1) {\r\n filtersMessage = `, and it also have a saved filters to make things easier for you.`;\r\n } else if (page?.details?.filters?.length) {\r\n filtersMessage = `, and there are also ${page?.details?.filters?.length} saved filters to make things easier for you.`;\r\n } else {\r\n filtersMessage = `, and you can also add filters to make things easier for you`;\r\n }\r\n\r\n return <p>{viewsMessage + filtersMessage}</p>;\r\n };\r\n\r\n const handleToggle = () => {\r\n setSharedPages((prevPages: any) => {\r\n const updatedPages = prevPages.map((page: any, index: any) => {\r\n if (index === value) {\r\n return {\r\n ...page,\r\n isPinToDashboard: !page.isPinToDashboard,\r\n };\r\n }\r\n return page;\r\n });\r\n return updatedPages;\r\n });\r\n };\r\n\r\n const handleSharedView = (viewStyle: number) => {\r\n setSharedPages((prevPages: any) => {\r\n const updatedPages = prevPages.map((page: any, index: any) => {\r\n if (index === value) {\r\n return {\r\n ...page,\r\n viewStyle: viewStyle,\r\n };\r\n }\r\n return page;\r\n });\r\n return updatedPages;\r\n });\r\n };\r\n\r\n const handleSearchBar = (value: string) => {\r\n setSearchQuery(value);\r\n setValue(0);\r\n };\r\n return (\r\n <>\r\n <Modal\r\n fullWidth\r\n onClose={onClose}\r\n open={open}\r\n className=\"shared-pages-modal\"\r\n >\r\n <DialogTitle>\r\n <Typography type=\"s3\" weight=\"medium\" color={\"theme.secondary.1000\"}>\r\n Shared Views\r\n </Typography>\r\n <IconButton edge=\"end\" onClick={onClose} size=\"small\">\r\n <Close fontSize=\"inherit\" />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent dividers>\r\n {sharedPages?.length ?\r\n <Box>\r\n <Grid container spacing={2}>\r\n <Grid item xs={4} className=\"tab-title-wrap\">\r\n <div className=\"tab-search-wrap\">\r\n <SearchBar\r\n placeholder={\"Search User\"}\r\n handleSearch={handleSearchBar}\r\n />\r\n </div>\r\n <Tabs\r\n orientation=\"vertical\"\r\n variant=\"scrollable\"\r\n value={value}\r\n onChange={handleChange}\r\n aria-label=\"Vertical tabs example\"\r\n sx={{ borderRight: 1, borderColor: \"divider\" }}\r\n >\r\n {renderTabs()}\r\n </Tabs>\r\n </Grid>\r\n <Grid className=\"shared-grid-wrap\" item xs={8}>\r\n {sharedPages\r\n .filter((page: any) =>\r\n page.name.toLowerCase().includes(searchQuery.toLowerCase()),\r\n )\r\n .map((page: any, index: number) => (\r\n <TabPanel value={value} index={index} key={index}>\r\n <div className=\"shared-pages-main\">\r\n <SharedPageView\r\n pageValue={index}\r\n pages={sharedPages}\r\n onChange={handleSharedView}\r\n />\r\n </div>\r\n <div className=\"tab-info-wrap\">\r\n <div className=\"tab-inner-info\">\r\n <div>\r\n <h1>{page.name}</h1>\r\n </div>\r\n <div className=\"tab-toggle\">\r\n <div>\r\n <FormControlLabel\r\n control={\r\n <Toggle\r\n checked={page.isPinToDashboard}\r\n onChange={handleToggle}\r\n />\r\n }\r\n label=\"Pined to dashboard\"\r\n labelPlacement=\"start\"\r\n />\r\n </div>\r\n <div className=\"owner-name-wrap\">\r\n <p>\r\n <span>Owner:</span> {page.owner}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"tab-content\">\r\n <PageDescription page={page} />\r\n </div>\r\n </div>\r\n </TabPanel>\r\n ))}\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n : <Box display='flex' width='100%' height='100%' alignItems='center' justifyContent='center'><Typography type=\"s1\" color='theme.secondary.800'>No Views has been shared with you</Typography></Box>}\r\n </DialogContent>\r\n <DialogActions>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={onClose}\r\n style={{\r\n color: \"black\",\r\n }}\r\n disabled={!sharedPages?.length}\r\n >\r\n Cancel\r\n </Button>\r\n <Button onClick={handleSave} disabled={!sharedPages?.length}>Duplicate</Button>\r\n </DialogActions>\r\n </Modal>\r\n </>\r\n );\r\n};\r\n\r\nexport { SharedPageModal };\r\nexport default SharedPageModal;\r\n","import React from \"react\";\r\nimport { IconButton, Menu, MenuItem } from \"@mui/material\";\r\nimport AddCircleOutlineRoundedIcon from \"@mui/icons-material/AddCircleOutlineRounded\";\r\nimport Typography from \"../../typography/typography\";\r\nimport AddPageModal from \"./add-page-modal\";\r\nimport KeyboardArrowRightIcon from \"@mui/icons-material/KeyboardArrowRight\";\r\nimport { IPage } from \"../../../@types/page\";\r\nimport SharedPageModal from \"./shared-page-modal\";\r\n\r\ninterface IAddPage {\r\n sharedPages: any;\r\n handleAddPage: (view: IPage) => void;\r\n pages?: IPage[];\r\n}\r\n\r\nconst AddPage = ({ sharedPages, handleAddPage, pages }: IAddPage) => {\r\n const [isAddMenuOpen, setIsAddMenuOpen] = React.useState<null | HTMLElement>(\r\n null,\r\n );\r\n const [isAddPageModalOpen, setIsAddPageModalOpen] = React.useState(false);\r\n const [isSharedPageModalOpen, setIsSharedPageModalOpen] =\r\n React.useState(false);\r\n\r\n const handleAddMenuOpen = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n event.stopPropagation();\r\n setIsAddMenuOpen(event.currentTarget);\r\n };\r\n const handleAddMenuClose = () => setIsAddMenuOpen(null);\r\n\r\n const handleOpenAddPageModal = () => {\r\n handleAddMenuClose();\r\n setIsAddPageModalOpen(true);\r\n };\r\n const handleCloseAddPageModal = () => setIsAddPageModalOpen(false);\r\n\r\n const handleCloseSharedModal = () => {\r\n setIsSharedPageModalOpen(false);\r\n };\r\n const handleOpenSharedPageModal = () => {\r\n setIsSharedPageModalOpen(true);\r\n setIsAddMenuOpen(null);\r\n };\r\n const handleShared = (page: any) => {\r\n const newPage: any = { ...page.details, name: page.name };\r\n handleAddPage(newPage);\r\n setIsSharedPageModalOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n <IconButton size=\"small\" sx={{ ml: 1 }} onClick={handleAddMenuOpen}>\r\n <AddCircleOutlineRoundedIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n <Menu\r\n open={Boolean(isAddMenuOpen)}\r\n anchorEl={isAddMenuOpen}\r\n onClose={handleAddMenuClose}\r\n >\r\n <MenuItem onClick={handleOpenAddPageModal}>\r\n <Typography color=\"theme.secondary.1000\" type=\"s4\">\r\n Create New View\r\n </Typography>\r\n </MenuItem>\r\n <MenuItem onClick={handleOpenSharedPageModal}>\r\n <Typography color=\"theme.secondary.1000\" type=\"s4\">\r\n Shared Views\r\n </Typography>\r\n <KeyboardArrowRightIcon fontSize=\"small\" />\r\n </MenuItem>\r\n </Menu>\r\n\r\n <AddPageModal\r\n pages={pages}\r\n open={isAddPageModalOpen}\r\n onClose={handleCloseAddPageModal}\r\n handleSubmit={handleAddPage}\r\n />\r\n <SharedPageModal\r\n open={isSharedPageModalOpen}\r\n pages={sharedPages || []}\r\n onClose={handleCloseSharedModal}\r\n handleSubmit={handleShared}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport { AddPage };\r\nexport default AddPage;\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable unused-imports/no-unused-vars */\nimport {\n Box,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n IconButton,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n List,\n ListItem,\n ListItemText,\n ListItemAvatar,\n MenuItem,\n FormControlLabel,\n} from \"@mui/material\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport Typography from \"../typography/typography\";\n\nimport Button from \"../button/button\";\nimport Avatar from \"../avatar/avatar\";\nimport Select from \"../select/select\";\nimport \"./share-modal.scss\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useAppDispatch, useAppSelector } from \"../../redux/hooks\";\nimport { getAllUserAndDepartmentDropdown } from \"./redux/actionCreator\";\nimport React from \"react\";\nimport Toggle from \"../toggle/toggle\";\nimport SearchableSelect from \"../searchable-select\";\nimport { flatMap } from \"lodash\";\nimport Checkbox from \"../checkbox/checkbox\";\n\ninterface SharePopUpProps {\n open: boolean;\n title: string;\n onClose: () => void;\n roles?: any;\n toggleSwitch: boolean;\n onSubmit: (selectedUsers: any) => void;\n value?: any;\n isPeopleAccessVisible?: boolean;\n}\ninterface UserDropdownData {\n isRoleVisible: boolean;\n selectedUsers: any[];\n}\n\nconst SharePopUp = (props: SharePopUpProps) => {\n const {\n open,\n title,\n onClose,\n roles,\n toggleSwitch,\n onSubmit,\n value = {},\n isPeopleAccessVisible = false,\n } = props;\n\n const { share } = useAppSelector((store) => store);\n\n const dispatch = useAppDispatch();\n\n const [isPublic, setIsPublic] = useState(value.isPublic || false);\n const [selectedOptions, setSelectedOptions] = useState(\n value.selectedUsers || [],\n );\n const [roleValue, setRoleValue] = useState([]);\n const [availableRole, setAvailableRole] = useState([]);\n\n const [userDropdownData, setUserDropdownData] = useState<UserDropdownData>({\n isRoleVisible: false,\n selectedUsers: [],\n });\n\nconst filteredOptions=useMemo(()=>userDropdownData?.isRoleVisible ? share.departments : share.users,[share,userDropdownData?.isRoleVisible])\nconst [selectedUsers, setSelectedUsers] = useState<any[]>([]);\n useEffect(() => {\n const role: any = [];\n const selRole: any = [];\n roles &&\n roles.map((item: any) => {\n const userRole: any = {};\n if (item.role !== \"Owner\") {\n role.push(item.role);\n userRole.id = item.id;\n userRole.role = item.role;\n selRole.push(userRole);\n }\n setAvailableRole(role);\n setRoleValue(selRole);\n });\n }, [roles]);\n\nuseEffect(()=>{\n if(!value?.selectedUsers?.length && !value?.role_id){\n resetOptions()\nreturn\n }\n userDropdownData.isRoleVisible=value.is_role\n setUserDropdownData(userDropdownData)\n setSelectedOptions({\n ...value,\n selectedUsers:value.is_role?value?.role_id:value?.selectedUsers\n })\n //eslint-disable-next-line\n},[value?.selectedUsers,open])\n\n const handleShareSubmit = () => {\n if(!selectedUsers?.length) return\n const uIds = flatMap(selectedUsers, 'userIds').filter(i=>i);\n let sOptions = selectedUsers\n if( Array.isArray(uIds) && uIds?.length) {\n sOptions = share.users?.filter(u => uIds.includes(u.id))\n \n }\n const sharedData = {\n is_private: !isPublic,\n selectedUsers: [...new Set(sOptions)],\n is_role:userDropdownData?.isRoleVisible,\n role_id:userDropdownData?.isRoleVisible?selectedUsers?.map((u: any) => u?.id):[],\n };\n onSubmit(sharedData);\n \n };\n\n const resetOptions=()=> {\n setSelectedOptions({\n ...value\n });\n setUserDropdownData((prevData) => ({\n ...prevData,\n selectedUsers: [],\n }));\n };\n\n\n\n const handleRoleChange = (event: any, id: any, user: any) => {\n const changeRole: any = roleValue.map((item: any) => {\n if (item.id === id) {\n item.role = event.target.value;\n }\n return item;\n });\n setRoleValue(changeRole);\n };\n\n const handleToggleChange = () => {\n setUserDropdownData((prevSettings) => ({\n ...prevSettings,\n isRoleVisible: !prevSettings.isRoleVisible,\n }));\n setSelectedOptions([]);\n setSelectedUsers(value.selectedUsers || []);\n };\n\n const handleChage=(value:any)=>{\n if(userDropdownData.isRoleVisible){\n setSelectedOptions({...selectedOptions,role_id:value})\n }\n setSelectedOptions({...selectedOptions,selectedUsers:value})\n }\n\n const toggleMakeItPublic = () => {\n setIsPublic(!isPublic);\n }\n \n useEffect(() => {\n if(!open)resetOptions()\n if (open) {\n dispatch(getAllUserAndDepartmentDropdown());\n }\n // eslint-disable-next-line\n }, [open]);\n\n\n\n return (\n <div>\n <Dialog open={open} onClose={onClose} className=\"share\">\n <DialogTitle className=\"share--head\">\n <Box className=\"share--title\">\n <Typography type=\"s3\" ml={1} className=\"dialog-box-title\">\n {title}\n </Typography>\n </Box>\n <IconButton disableRipple onClick={onClose}>\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n\n <Divider />\n\n <DialogContent className=\"share--content\">\n <Box m={1} display={'flex'} alignItems={'center'} justifyContent={'space-between'}>\n <Typography type=\"s3\" className=\"input-label\">\n Add users\n </Typography>\n <FormControlLabel\n control={<Box mb={0.5} mr={0.5}><Toggle checked={userDropdownData?.isRoleVisible} onChange={handleToggleChange} /></Box>}\n label={\n <Typography type=\"s3\" className=\"input-label\">Show only Roles</Typography>\n }\n />\n </Box>\n \n\n {toggleSwitch && (\n <>\n \n <Box mb={4} className=\"d-flex\">\n \n <SearchableSelect \n options={filteredOptions}\n multiple\n value={selectedOptions?.selectedUsers}\n onChange={(e) =>handleChage(e.target.value)}\n placeholder={\n selectedOptions && selectedOptions.length\n ? \"\"\n : \"Add people and roles\"\n }\n getSelectedData={row=>setSelectedUsers(row)}\n />\n </Box>\n </>\n )}\n \n {isPeopleAccessVisible && (\n <div className={ \"share--blurClass\"}>\n <Accordion className=\"people-access-accordion\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography>People with access</Typography>\n </AccordionSummary>\n <AccordionDetails className=\"user-accordion-details\">\n <List className=\"accordion-list\">\n {roles &&\n roles.map((user: any) => {\n const userRole: any =\n roleValue?.length > 0 &&\n roleValue?.filter((item: any) => item.id === user.id);\n return (\n <ListItem alignItems=\"flex-start\">\n <ListItemAvatar>\n <Avatar size={40} alt=\"Person\" icon />\n </ListItemAvatar>\n <ListItemText\n className=\"primary-user-name\"\n primary={user.name}\n secondary={\n <Typography\n component=\"span\"\n variant=\"body2\"\n className=\"secondary-email-text\"\n >\n {user.email}\n </Typography>\n }\n />\n {user.role == \"Owner\" ? (\n <p className=\"owner-role-badge\">{user.role}</p>\n ) : (\n <div>\n <Select\n className=\"role-edit-select-box\"\n value={\n userRole?.length > 0 ? userRole[0].role : \"\"\n }\n onChange={(e: any) =>\n handleRoleChange(e, user.id, user)\n }\n variant=\"outlined\"\n >\n {availableRole.map((role: any) => (\n <MenuItem\n className=\"select-menu-items\"\n value={role}\n >\n {role}\n </MenuItem>\n ))}\n </Select>\n </div>\n )}\n </ListItem>\n );\n })}\n </List>\n </AccordionDetails>\n </Accordion>\n </div>\n )}\n\n <div className=\"checkbox\">\n <Checkbox\n checked={isPublic}\n onChange={toggleMakeItPublic}\n />\n <div className=\"checkbox-text\">Make it public</div>\n </div>\n </DialogContent>\n\n <Divider />\n\n <DialogActions className=\"share--actions\">\n <Button className=\"cancel-btn\" variant=\"text\" onClick={onClose}>\n Cancel\n </Button>\n <Button className=\"success-btn\" onClick={handleShareSubmit}>\n Save and Share\n </Button>\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n\nexport { SharePopUp };\nexport default SharePopUp;\n","export const userRoles = [\r\n {\r\n id: 1,\r\n name: \"Prasun Singh\",\r\n email: \"prasun@goldenflitch.com\",\r\n role: \"Owner\",\r\n },\r\n {\r\n id: 2,\r\n name: \"Sidhant Chandel\",\r\n email: \"sidhant@goldenflitch.com\",\r\n role: \"Editor\",\r\n },\r\n {\r\n id: 3,\r\n name: \"Amrit Sonar\",\r\n email: \"amrit@goldenflitch.com\",\r\n role: \"Viewer\",\r\n },\r\n];\r\n","import { Divider, MenuItem } from \"@mui/material\";\nimport Menu from \"../../menu/menu\";\nimport Typography from \"../../typography/typography\";\nimport { useEffect, useState } from \"react\";\nimport AddPageModal from \"./add-page-modal\";\nimport { IPage } from \"../../../@types/page\";\nimport SharePopUp from \"../../share-modal/share-modal\";\nimport { userRoles } from \"../../../views/beforeAuth/components/share-modal-data/share-modal-data\";\nimport ConfirmPopUp from \"../../confirm-modal/confirm-modal\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { pinToDashboardList } from \"../../../views/afterAuth/dashboard/redux/reducer\";\nimport {\n // deleteV1DashboardId,\n // putV1DashboardId,\n} from \"../../../api-client/api.system-feature/api\";\n// import type * as Types from \"../../api-client/api.system-feature/api-types\";\nimport { sharePage } from \"../../share-modal/redux/actionCreator\";\nimport { useAppDispatch } from \"../../../redux/hooks\";\nimport { generateRandomId } from \"../../../utils/common\";\nimport { usePages } from \"../../../hooks/use-pages\";\n\ninterface IPageAction {\n open: null | HTMLElement;\n onClose: () => void;\n page?: IPage;\n pages: IPage[];\n setCurrentPage: React.Dispatch<React.SetStateAction<number>>;\n setPages: React.Dispatch<React.SetStateAction<IPage[]>>;\n resource: string;\n handlePageDelete: (pages: any[]) => void;\n}\n\nconst moveLeft = (arr: IPage[], pageValue: number) => {\n const updatedArray = [...arr];\n if (updatedArray.length <= 1) return;\n\n const index = updatedArray.findIndex((item) => item._id === pageValue);\n\n if (index === 0) return;\n\n const elementToShift = updatedArray.splice(index, 1)[0];\n updatedArray.splice(index - 1, 0, elementToShift);\n return updatedArray;\n};\n\nconst moveRight = (arr: IPage[], pageValue: number) => {\n const updatedArray = [...arr];\n if (updatedArray.length <= 1) return;\n\n const index = updatedArray.findIndex((item) => item._id === pageValue);\n\n if (index === updatedArray.length - 1) return;\n\n const elementToShift = updatedArray.splice(index, 1)[0];\n updatedArray.splice(index + 1, 0, elementToShift);\n return updatedArray;\n};\n\nconst deletePage = (arr: IPage[], pageValue: number) => {\n const updatedArray = [...arr];\n if (updatedArray.length <= 1) return;\n\n const index = updatedArray.findIndex((item) => item._id === pageValue);\n\n updatedArray.splice(index, 1);\n return updatedArray;\n};\n\nconst PageAction = ({\n open,\n onClose,\n page,\n pages,\n setCurrentPage,\n setPages,\n resource,\n handlePageDelete,\n}: IPageAction) => {\n \n const [isEditPageModalOpen, setIsEditPageModalOpen] = useState(false);\n const [isShareModalOpen, setIsShareModalOpen] = useState(false);\n const [isConfirmOpen, setIsConfirmOpen] = useState(false);\n const [deletePageNo, setDeletePageNo] = useState<any>({});\n const [defaultSharedData, setDefaultSharedData] = useState<any>({});\n const [pageSharedData, setPageSharedData] = useState<any>([]);\n const pinToDashboardStore = useSelector((state: any) => state);\n const [pinToDashboardData, setPinToDashboardData] = useState<any>(\n pinToDashboardStore?.dashboard?.pinToDashboardList || [],\n );\n\n\n const appDispatch = useAppDispatch();\n const dispatch = useDispatch();\n const {setIsCreatePage}=usePages()\n // const token = zI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6OSwiaWF0IjoxNzA2NDcwNzQwfQ.6dtxBVGl4hF0TrNDanSBTiFtV_TUshjaiaYe9XT2Ld8\";\n useEffect(() => {\n dispatch(pinToDashboardList(pinToDashboardData));\n }, [dispatch, pageSharedData, pinToDashboardData]);\n\n useEffect(()=>{\n \n if(page){\n setPageSharedData([...pageSharedData,{\n page:{\n ...page,\n value:page?._id\n },\n isPublic: true,\n shareUsers:page?.selectedUsers,\n }])\n }\n //eslint-disable-next-line\n },[page])\n \n\n const handleOpenEditModal = () => {\n onClose();\n setIsEditPageModalOpen(true);\n };\n\n const handleCloseEditModal = () => {\n setIsEditPageModalOpen(false);\n };\n\n const handleShare = (pageData: any) => {\n pageData.pages = pages;\n appDispatch(sharePage(pageData)).then((res) => {\n if (res?.payload?.data?.pages?.length) {\n setPages(res?.payload?.data?.pages);\n }\n setIsShareModalOpen(false);\n });\n };\n\n const handleSharePage = (page: any) => {\n const defaultData = pageSharedData.find(\n (item: any) => item.page?.value === page?.value,\n );\n if (defaultData) {\n setDefaultSharedData({\n isPublic: defaultData.isPublic,\n selectedUsers: defaultData.shareUsers,\n \n });\n } else {\n setDefaultSharedData({\n isPublic: page?.selectedUsers?.length>0,\n ...page,\n });\n }\n setIsShareModalOpen(true);\n setIsShareModalOpen(true);\n };\n\n const handleDuplicatePage = (page: any) => {\n const labelExists = (label: string) =>\n pages.some((item) => item.name === label);\n const { uniqueNumberId: _id } = generateRandomId();\n let newLabel = page.name;\n\n if (labelExists(newLabel)) {\n let counter = 1;\n while (labelExists(`${page.name} ${counter}`)) {\n counter++;\n }\n newLabel = `${page.name} ${counter}`;\n }\n const updatedPage = [\n ...pages,\n { ...page, name: newLabel, _id, data: page.data, isShared: false },\n ];\n\n setPages(updatedPage);\n setIsCreatePage(true)\n };\n\n const handleEdit = (newPage: IPage) => {\n const updatedPages = pages.map((page) => {\n if (page._id === newPage._id) {\n return {\n ...page,\n name: newPage.name\n }\n }\n return page\n })\n\n setPages(updatedPages);\n setIsCreatePage(true)\n // const putDashboardRequest: Types.PutV1DashboardIdRequest = {\n // \"x-token\": token,\n // module: \"user\",\n // user_id: \"1\",\n // name: newPage.name,\n // id: newPage._id,\n // };\n // putV1DashboardId(putDashboardRequest)\n // .then((response: any) => {\n // const prevPages = [...pages];\n // const updatedPages = prevPages.map((page) =>\n // page._id === newPage._id ? newPage : page,\n // );\n // setPages(updatedPages);\n // updatePinToDashboardPage(updatedPages);\n // })\n // .catch((err: any) => console.log(\"Error in adding page\", err));\n };\n\n // const updatePinToDashboardPage = (updatedPages: any) => {\n // const currentPageLabel = updatedPages.find(\n // (item: any) => item.value === page?._id,\n // )?.label;\n\n // const updatedPinToDashboardData = pinToDashboardData.map((data: any) => ({\n // ...data,\n // label: data.value === page?._id ? currentPageLabel : data.label,\n // }));\n\n // setPinToDashboardData(updatedPinToDashboardData);\n // };\n\n const handleMoveLeft = (pageValue: any) => {\n const updatedArray = moveLeft(pages, pageValue?._id);\n if (updatedArray) setPages(updatedArray);\n };\n\n const handleMoveRight = (pageValue: any) => {\n const updatedArray = moveRight(pages, pageValue?._id);\n if (updatedArray) setPages(updatedArray);\n };\n\n const handleDeletePage = (pageValue: any) => {\n setIsConfirmOpen(true);\n setDeletePageNo(pageValue);\n };\n\n const handleConfirmDelete = () => {\n // if (!isNaN(deletePageNo._id)) {\n // const deleteDashboardRequest: Types.DeleteV1DashboardIdRequest = {\n // \"x-token\": token,\n // id: deletePageNo._id,\n // };\n // deleteV1DashboardId(deleteDashboardRequest)\n // .then((response: any) => {\n // })\n // .catch((err: any) => console.log(\"Error in deleting page\", err));\n // }\n \n const updatedArray = deletePage(pages, deletePageNo?._id);\n deletePinToDashboardPage();\n setDeletePageNo({});\n setIsConfirmOpen(false);\n if (updatedArray) {\n setCurrentPage(updatedArray[0]);\n setPages(updatedArray);\n handlePageDelete(updatedArray);\n } else {\n handlePageDelete([]);\n setPages([]);\n }\n };\n\n const deletePinToDashboardPage = () => {\n const updatedPinToDashboardData = pinToDashboardData.filter(\n (data: any) => data.value !== page?._id,\n );\n setPinToDashboardData(updatedPinToDashboardData);\n };\n\n const handleShareModal = (selectedUsers: any) => {\n\n let updatedData: any[] = [];\n const existingItem = pageSharedData.find(\n (item: any) => item.page.value === page?._id,\n );\n\n if (existingItem) {\n updatedData = pageSharedData.map((item: any) => {\n if (item.page.value === page?._id) {\n return {\n ...item,\n isPublic: selectedUsers.isPublic,\n shareUsers: selectedUsers.selectedUsers,\n };\n }\n return item;\n });\n } else {\n updatedData = [\n ...pageSharedData,\n {\n page: page,\n isPublic: selectedUsers.isPublic,\n shareUsers: selectedUsers.selectedUsers,\n viewStyle: 1,\n owner: 0,\n },\n ];\n }\n setPageSharedData(updatedData);\n handleShare({ ...selectedUsers, page: page, resource });\n };\n\n const handlePinToDashboard = () => {\n const index = pinToDashboardData.findIndex(\n (item: any) => item.value === page?._id,\n );\n\n if (index !== -1) {\n setPinToDashboardData((prevData: any) => {\n const updatedData = [...prevData];\n updatedData[index] = { ...updatedData[index], label: page?.name };\n return updatedData;\n });\n } else {\n setPinToDashboardData((prevData: any) => [...prevData, page]);\n }\n };\n\n const actions = [\n {\n label: \"Rename\",\n func: handleOpenEditModal,\n disabled: Boolean(page?.isShared)\n },\n {\n label: \"Duplicate\",\n func: handleDuplicatePage,\n },\n {\n label: \"Share\",\n func: handleSharePage,\n disabled: Boolean(page?.isShared)\n },\n {\n label: \"Pin to dashboard\",\n func: handlePinToDashboard,\n disabled: Boolean(page?.isShared)\n },\n {\n label: \"Move Right\",\n func: handleMoveRight,\n disabled: (pages?.length <= 1) || Boolean(page?.isShared)\n },\n {\n label: \"Move Left\",\n func: handleMoveLeft,\n disabled: (pages?.length <= 1) || Boolean(page?.isShared)\n },\n ];\n\n const handleAction = (func: any) => {\n func(page);\n onClose();\n };\n\n return (\n <>\n <Menu open={Boolean(open)} anchorEl={open} onClose={onClose}>\n {actions?.map((action) => (\n <MenuItem\n key={action?.label}\n onClick={() => handleAction(action.func)}\n disabled={Boolean(action?.disabled)}\n >\n <Typography color=\"theme.secondary.1000\" type=\"s4\">\n {action?.label}\n </Typography>\n </MenuItem>\n ))}\n <Divider sx={{ mt: `4px !important`, mb: `4px !important` }}/>\n <MenuItem onClick={() => handleAction(handleDeletePage)} disabled={Boolean(page?.isShared)}\n sx={{\n '&:hover': {\n backgroundColor: 'theme.error.100'\n }\n }}\n >\n <Typography color=\"theme.error.500\" type=\"s4\">\n Delete\n </Typography>\n </MenuItem>\n </Menu>\n\n <AddPageModal\n open={isEditPageModalOpen}\n page={page}\n pages={pages}\n onClose={handleCloseEditModal}\n handleSubmit={handleEdit}\n />\n\n <ConfirmPopUp\n open={isConfirmOpen}\n onClose={() => setIsConfirmOpen(false)}\n onConfirm={handleConfirmDelete}\n title=\"Delete Confirmation?\"\n description=\"Are you sure you want to delete this page ?\"\n />\n <SharePopUp\n open={isShareModalOpen}\n onClose={() => setIsShareModalOpen(false)}\n title={`Share page ${page?.name}`}\n roles={userRoles}\n toggleSwitch={true}\n value={defaultSharedData}\n onSubmit={handleShareModal}\n />\n </>\n );\n};\n\nexport { PageAction };\nexport default PageAction;\n","/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport {\r\n\tTabs,\r\n\tTab as MUITab,\r\n\tstyled,\r\n\tIconButton,\r\n\tMenuItem,\r\n\tDivider,\r\n\tBox,\r\n\tCircularProgress\r\n} from '@mui/material';\r\nimport MenuIcon from '@mui/icons-material/Menu';\r\nimport KeyboardArrowDown from '@mui/icons-material/KeyboardArrowDown';\r\nimport Typography from '../typography/typography';\r\nimport Menu from '../menu/menu';\r\nimport AddPage from './components/add-page';\r\nimport PageAction from './components/page-action';\r\nimport Tooltip from '../tooltip/Tooltip';\r\nimport { IPage } from '../../@types/page';\r\nimport { defaultPageState } from '../../contexts/page-context';\r\nimport { usePages } from '../../hooks/use-pages';\r\nimport Button from '../button/button';\r\nimport _ from 'lodash';\r\nimport { Save, Share } from '@mui/icons-material';\r\nimport './page-navigator.scss';\r\nimport React from 'react';\r\n\r\nconst StyledTabs = styled(Tabs)(() => ({\r\n\tminHeight: 'fit-content',\r\n\r\n\t'.MuiTabs-indicator': {\r\n\t\theight: '0px !important'\r\n\t},\r\n\t'& .MuiTabs-flexContainer': {\r\n\t\tgap: '4px'\r\n\t}\r\n}));\r\n\r\nconst StyledTab = styled(MUITab)(({ theme: { palette } }) => ({\r\n\tminHeight: '2rem',\r\n\ttextTransform: 'none',\r\n\tpadding: '0rem 1rem',\r\n\tminWidth: 'fit-content',\r\n\tborderRadius: 4,\r\n\t'&.Mui-selected': {\r\n\t\tbackground: palette.theme?.primary[100],\r\n\t\tcolor: palette.theme?.primary[700],\r\n\t\tborderTop: `2px solid ${palette.theme?.primary[700]}`\r\n\t},\r\n\t'.MuiIconButton-root': {\r\n\t\tpadding: '0rem'\r\n\t},\r\n\t\"&:hover\": {\r\n\t\tbackground: palette.theme?.primary[100]\r\n\t}\r\n}));\r\n\r\nconst title = `successfully created, complete with your saved filters, sorting options, and views.`;\r\n\r\nexport interface IPageNavigator {\r\n\tpages: IPage[];\r\n\tsetPages: React.Dispatch<React.SetStateAction<IPage[]>>;\r\n\tcurrentPage: string | number;\r\n\tsetCurrentPage: React.Dispatch<React.SetStateAction<number>>;\r\n\tsharedPages: any;\r\n\tresource: string;\r\n\thandlePageDelete: (pages: any[]) => void;\r\n\tisPageSaving?: boolean;\r\n}\r\n\r\nexport const PageNavigator = ({\r\n\t// sharedPages,\r\n\tresource,\r\n\t// handlePageDelete\r\n}: IPageNavigator) => {\r\n\tconst { pages, setPages, setActivePage, activePage, savePages,setIsChanged, isSaving, generatedColumns, sharedPages, isChanged,deletePage,isCreatePage,setIsCreatePage ,addOrDeletePage} = usePages();\r\n\tconst shareTitle = (owner) => `shared by ${owner}`;\r\n\tconst [isActionsMenuOpen, setIsActionsMenuOpen] =\r\n\t\tuseState<null | HTMLElement>(null);\r\n\tconst [page, setPage] = useState<IPage>();\r\n\r\n\tconst [isAllPagesMenuOpen, setIsAllPagesMenuOpen] =\r\n\t\tuseState<null | HTMLElement>(null);\r\n\r\n\tconst handleChangePage = (_: React.SyntheticEvent, newValue: number) => {\r\n\t\tconst pg = pages.find((p) => p?._id == newValue);\r\n\t\tsetActivePage(pg);\r\n\t};\r\n\r\n\tconst handleOpenActionsMenu = (\r\n\t\tevent: React.MouseEvent<HTMLButtonElement>,\r\n\t\tclickedPage: IPage\r\n\t) => {\r\n\t\tevent.stopPropagation();\r\n\t\tsetPage(clickedPage);\r\n\t\tsetIsActionsMenuOpen(event.currentTarget);\r\n\t};\r\n\tconst handleCloseActionsMenu = () => setIsActionsMenuOpen(null);\r\n\r\n\tconst handleOpenAllPagesMenu = (\r\n\t\tevent: React.MouseEvent<HTMLButtonElement>\r\n\t) => {\r\n\t\tevent.stopPropagation();\r\n\t\tsetIsAllPagesMenuOpen(event.currentTarget);\r\n\t};\r\n\tconst handleCloseAllPagesMenu = () => setIsAllPagesMenuOpen(null);\r\n\r\n\tconst handleChangePageFromMenu = (val: number) => {\r\n\t\tsetActivePage(val);\r\n\t\thandleCloseAllPagesMenu();\r\n\t};\r\n\r\n\tconst handleAddPage = (newPage: IPage) => {\r\n\t\tconst nPage = {\r\n\t\t\t...defaultPageState,\r\n\t\t\t...newPage,\r\n\t\t\tname: newPage.name,\r\n\t\t\tvisible_columns: generatedColumns.columns,\r\n\t\t\tcolumn_order: _.uniq(generatedColumns.orderKeys),\r\n\t\t\t_id: pages.length + 1,\r\n\t\t\tactive_view:'Table',\r\n\t\t\tviews:[{\r\n\t\t\t\tlabel:'Table',\r\n\t\t\t\tposition:0\r\n\t\t\t}]\r\n\t\t};\r\n\t\tconst updatedPages: any = [\r\n\t\t\t...pages,\r\n\t\t\t...[nPage]\r\n\t\t];\r\n\t\tsetActivePage({...nPage});\r\n\t\tsetPages([...updatedPages]);\r\n\t\tsetIsCreatePage(true)\r\n\t\t\r\n\t};\r\n\r\n\tconst handlePageDeleteFunction=(pages:any[])=>{\r\n\t\t\r\n\t\tdeletePage(pages)\r\n\t}\r\n\r\n\r\n\tconst handleAddOrdeletePage =useCallback(async\t () => {\r\n\t\tif(isCreatePage){\r\n\t\t\tconst res=await addOrDeletePage();\r\n\t\t\tif(res.status_code===200){\r\n\t\t\t\tsetPages(res?.data?.pages);\r\n\t\t\t\tsetIsChanged(false)\r\n\t\t\t}}\r\n\t\tsetTimeout(()=>{\r\n\t\t\tsetIsCreatePage(false);\r\n\t\t\t\r\n\t\t},2000)\r\n\t\t//eslint-disable-next-line\r\n\t},[isCreatePage])\r\n\r\n\tuseEffect(()=>{\r\n\t\thandleAddOrdeletePage()\r\n\t\t//eslint-disable-next-line\r\n\t},[handleAddOrdeletePage])\r\n\r\n\treturn (\r\n\t\t<Box display=\"flex\" gap={2} alignItems={'center'} className='page-navigator-container'>\r\n\t\t\t<Box\r\n\t\t\t\tdisplay={'flex'}\r\n\t\t\t\tclassName='page-navigator'\r\n\t\t\t\tsx={{ display: 'flex', opacity: isSaving ? 0.5 : 1 }}>\r\n\t\t\t\t<IconButton\r\n\t\t\t\t\t// size='small'\r\n\t\t\t\t\tonClick={handleOpenAllPagesMenu}\r\n\t\t\t\t\tdisabled={isSaving}>\r\n\t\t\t\t\t<MenuIcon fontSize='small' />\r\n\t\t\t\t</IconButton>\r\n\t\t\t\t<StyledTabs\r\n\t\t\t\t\tvalue={activePage?._id}\r\n\t\t\t\t\tvariant='scrollable'\r\n\t\t\t\t\tonChange={handleChangePage}\r\n\t\t\t\t\taria-label='basic tabs example'>\r\n\t\t\t\t\t{pages?.map((page) => (\r\n\t\t\t\t\t\t<StyledTab\r\n\t\t\t\t\t\t\ticonPosition='end'\r\n\t\t\t\t\t\t\tdisableRipple\r\n\t\t\t\t\t\t\tkey={page}\r\n\t\t\t\t\t\t\ticon={\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tsize='small'\r\n\t\t\t\t\t\t\t\t\tedge='end'\r\n\t\t\t\t\t\t\t\t\tonClick={(e) => handleOpenActionsMenu(e, page)}\r\n\t\t\t\t\t\t\t\t\tdisabled={isSaving}>\r\n\t\t\t\t\t\t\t\t\t<KeyboardArrowDown fontSize='small' color={activePage?._id === page?._id ? 'primary' : undefined}/>\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tlabel={\r\n\t\t\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\t\t\ttitle={`The '${page.name}' page has been ${page?.isShared ? shareTitle(page?.owner) : title}`}\r\n\t\t\t\t\t\t\t\t\tkey={page._id}\r\n\t\t\t\t\t\t\t\t\tplacement='top'\r\n\t\t\t\t\t\t\t\t\tarrow>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', alignItems: 'center', gap:1 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{page?.isShared && <Share sx={{fontSize:'20px',color:'#4AC08C'}}/>}\r\n\t\t\t\t\t\t\t\t\t\t\t<span>{page.name}</span>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvalue={page?._id}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</StyledTabs>\r\n\r\n\t\t\t\t<Divider\r\n\t\t\t\t\torientation='vertical'\r\n\t\t\t\t\tvariant='middle'\r\n\t\t\t\t\tflexItem\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tml: 2,\r\n\t\t\t\t\t\tborderWidth: '1px'\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t\t<Box display=\"flex\" alignItems={'center'}>\r\n\t\t\t\t\t<AddPage\r\n\t\t\t\t\t\tpages={pages}\r\n\t\t\t\t\t\thandleAddPage={handleAddPage}\r\n\t\t\t\t\t\tsharedPages={sharedPages}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t<PageAction\r\n\t\t\t\t\topen={isActionsMenuOpen}\r\n\t\t\t\t\tonClose={handleCloseActionsMenu}\r\n\t\t\t\t\tpage={page}\r\n\t\t\t\t\tsetPages={setPages}\r\n\t\t\t\t\tsetCurrentPage={setActivePage}\r\n\t\t\t\t\tpages={pages}\r\n\t\t\t\t\tresource={resource}\r\n\t\t\t\t\thandlePageDelete={handlePageDeleteFunction}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t<Menu\r\n\t\t\t\t\topen={Boolean(isAllPagesMenuOpen)}\r\n\t\t\t\t\tanchorEl={isAllPagesMenuOpen}\r\n\t\t\t\t\tonClose={handleCloseAllPagesMenu}>\r\n\t\t\t\t\t{pages?.map((page) => (\r\n\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\tselected={page._id === activePage?._id}\r\n\t\t\t\t\t\t\tkey={page._id}\r\n\t\t\t\t\t\t\tonClick={() => handleChangePageFromMenu(page)}>\r\n\t\t\t\t\t\t\t<Typography color='theme.secondary.1000' type='s4'>\r\n\t\t\t\t\t\t\t\t{page.name}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Menu>\r\n\t\t\t</Box>\r\n\t\t\t<Box display=\"flex\" alignItems={'center'}>\r\n\t\t\t\t<Button\r\n\t\t\t\t\tsize='small'\r\n\t\t\t\t\tvariant='contained'\r\n\t\t\t\t\tonClick={() => savePages()}\r\n\t\t\t\t\t// sx={{fontWeight:600, marginBottom:'2px',px:3}}\r\n\t\t\t\t\tendIcon={\r\n\t\t\t\t\t\tisSaving ? <CircularProgress size={15} color='inherit' /> : <Save fontSize='small'/>\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdisabled={!isChanged || isSaving}>\r\n\t\t\t\t\tSave\r\n\t\t\t\t</Button>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n};\r\n\r\nexport default PageNavigator;\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable unused-imports/no-unused-vars */\nimport { Box } from \"@mui/material\";\nimport Pagination from \"../pagination/pagination\";\nimport PageNavigator from \"../page-navigator/page-navigator\";\nimport \"./footer.scss\";\nimport { IPaginationModel } from \"../../@types/pagination-model\";\nimport React, { useEffect, useState } from \"react\";\n\ninterface IFooter {\n pages: any;\n setPages: any;\n currentPage: string | number;\n setCurrentPage: any;\n total: number;\n paginationModel: IPaginationModel;\n handlePaginationModel: (model: IPaginationModel) => void;\n sharedPages: any;\n resource: string;\n savePageConfiguration: () => void;\n handlePageDelete: (pages: any[]) => void;\n enablePages: boolean\n isPaginationDisplayed?: boolean\n isPageSaving?: boolean\n}\n\nconst Footer = React.memo(({\n pages,\n setPages,\n currentPage,\n setCurrentPage,\n total, // total number of pages in footer pagination\n paginationModel,\n handlePaginationModel,\n sharedPages,\n resource,\n savePageConfiguration,\n handlePageDelete,\n enablePages,\n isPaginationDisplayed = true,\n isPageSaving = false\n}: IFooter) => {\n const [isDrawerOpen, setIsDrawerOpen] = useState(\n window.localStorage.getItem('_is_drawer_open') === 'true'\n );\n\n useEffect(() => {\n const handleStorageChange = () => {\n setIsDrawerOpen(window.localStorage.getItem('_is_drawer_open') === 'true');\n };\n\n window.addEventListener('storage', handleStorageChange);\n\n const interval = setInterval(handleStorageChange, 10); \n\n return () => {\n window.removeEventListener('storage', handleStorageChange);\n clearInterval(interval);\n };\n }, []);\n\n // useEffect(()=>{\n // handlePaginationModel({...paginationModel,pageNo:activePage?.pageNo})\n // //eslint-disable-next-line react-hooks/exhaustive-deps\n // },[activePage?.pageNo])\n\n return (\n <Box className={`${!isDrawerOpen?'footer--drawerContainer':'footer--Container'}`} sx={{justifyContent: enablePages? 'space-between': 'flex-end'}}>\n \n \n {Boolean(enablePages) && <PageNavigator\n pages={pages}\n setPages={setPages}\n currentPage={currentPage}\n setCurrentPage={setCurrentPage}\n resource={resource}\n sharedPages={sharedPages}\n handlePageDelete={handlePageDelete}\n />}\n <Box>\n {isPaginationDisplayed && (\n <Pagination\n paginationModel={paginationModel}\n handlePaginationModel={handlePaginationModel}\n totalPages={total}\n />\n )}\n </Box>\n </Box>\n );\n});\n\nexport { Footer };\nexport default Footer;\n","import Typography from \"../typography/typography\";\nimport logo from \"../../assets/images\";\nimport \"./info-card.scss\";\n\nexport interface InfoCardProps {\n label: string;\n dataPosition?: number;\n dataName?: string;\n value?: string;\n}\n\nconst InfoCard = (props: InfoCardProps) => {\n const { label, dataPosition, dataName, value } = props;\n return (\n <>\n <Typography\n type=\"s5\"\n weight=\"medium\"\n mb={0.5}\n color={\"theme.secondary.800\"}\n data-position={dataPosition}\n data-name={dataName}\n className=\"infoCard\"\n >\n {label}\n <img src={logo.info} />\n </Typography>\n <Typography color={\"theme.secondary.1000\"}>{value ?? \"Info\"}</Typography>\n </>\n );\n};\n\nexport { InfoCard };\nexport default InfoCard;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable unused-imports/no-unused-vars */\nimport React, { ReactNode, useEffect, useState } from \"react\";\nimport { Box, IconButton } from \"@mui/material\";\nimport Tab from \"@mui/material/Tab\";\nimport TabContext from \"@mui/lab/TabContext\";\nimport TabList from \"@mui/lab/TabList\";\nimport TabPanel from \"@mui/lab/TabPanel\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\nimport \"./tabs.scss\";\nimport TextField from \"../text-field/text-field\";\nimport { useTranslation } from \"react-i18next\";\nimport Typography from \"../typography/typography\";\n\ninterface TabItem {\n tab_order: number;\n title: string;\n content?: string | ReactNode;\n data?: any;\n remove_tab?: boolean;\n}\nexport interface TabProps {\n tabs: TabItem[];\n activeValue?: number;\n setActiveValue?: React.Dispatch<React.SetStateAction<number | undefined>>;\n onEditTabTitle?: (tabId: number, newTitle: string) => void;\n handleTabChange?: () => void;\n handleRemoveTab?: (tabId: number) => void;\n isFormTabValid?: boolean ;\n isTabViewOnly?: boolean;\n activeTabs?: any[] ;\n setActiveTabs?: React.Dispatch<React.SetStateAction<number | undefined>>;\n containerProps?: any;\n}\n\nexport const TabBar = (props: TabProps) => {\n const { t } = useTranslation();\n const {\n tabs,\n onEditTabTitle,\n activeValue,\n setActiveValue,\n handleTabChange,\n handleRemoveTab,\n // isFormTabValid , \n isTabViewOnly,\n activeTabs, \n containerProps\n } = props; \n \n const [value, setValue] = useState<number>(activeValue || 0);\n const [editableTabId, setEditableTabId] = useState<number | null>(null);\n useEffect(()=>{\n activeValue && setValue(activeValue);\n\t} , [activeValue])\n\n const handleChange = (_event: React.SyntheticEvent, newValue: number) => {\n setValue(newValue);\n setActiveValue && setActiveValue(newValue);\n handleTabChange && handleTabChange();\n };\n\n const handleTabDoubleClick = (tabId: number) => {\n setEditableTabId(tabId);\n };\n\n const handleEditTabTitle = (\n event: React.ChangeEvent<HTMLInputElement>,\n tabId: number,\n ) => {\n onEditTabTitle && onEditTabTitle(tabId, event.target.value);\n };\n\n // useEffect(() => {\n // if (setActiveValue && Boolean(tabs?.length)) setActiveValue(value);\n // // eslint-disable-next-line\n // }, [tabs]);\n\n return (\n <Box mb={2} {...containerProps}>\n <TabContext value={activeValue ?? value }>\n <Box>\n <TabList className=\"account-payble-tabs-wrap\" onChange={handleChange} variant=\"scrollable\" scrollButtons=\"auto\" aria-label=\"scrollable tabs\" sx={{ overflowX: 'auto', maxWidth: '100%' }}>\n {tabs.map((tab: TabItem, index: any) => (\n <Tab\n className=\"account-payble-tab-items\"\n key={tab.tab_order}\n \n label={\n <Box display='flex' alignItems='center'>\n {\n onEditTabTitle && editableTabId === tab.tab_order ? (\n <TextField\n value={tab.title}\n autoFocus\n onBlur={() => setEditableTabId(null)}\n onChange={(e: any) =>\n handleEditTabTitle(e, tab.tab_order)\n }\n />\n ) : handleRemoveTab ? (\n <div className=\"Tabs--Title\">\n <Typography color='theme.secondary.1000' type='s3'>{t(tab.title)}</Typography>\n {!tab.remove_tab && (\n <IconButton size=\"small\" onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleRemoveTab(tab.tab_order);\n }}>\n <CloseIcon style={{ fontSize: \"15px\", cursor: \"pointer\" }}/>\n </IconButton>\n )}\n </div>\n ) : (\n <Typography color='theme.secondary.1000' type='s3'>{t(tab.title)}</Typography>\n )\n }\n </Box>\n }\n wrapped\n onDoubleClick={() => handleTabDoubleClick(tab.tab_order)}\n />\n ))}\n </TabList>\n </Box>\n {tabs.map(\n (tab: TabItem, index: number) =>\n tab.content && (\n <TabPanel value={index.toString()} key={tab.tab_order}>\n {value === index && tab.content}\n </TabPanel>\n ),\n )}\n </TabContext>\n </Box>\n );\n}\n\nexport default TabBar;","import { Radio as MUIRadio, RadioProps } from '@mui/material';\nimport { BlankCircle, FilledCircle } from '../icons';\nimport { memo } from 'react';\n\nconst Radio = memo((props: RadioProps) => {\n\tconst { color, ...rest } = props;\n\n\treturn (\n\t\t<>\n\t\t\t<MUIRadio\n\t\t\t\tdisableRipple\n\t\t\t\tsx={{\n\t\t\t\t\t'&, &.Mui-checked': {\n\t\t\t\t\t\tcolor: color || 'theme.primary.700'\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\ticon={<BlankCircle color='theme.secondary.300' fontSize='large'/>}\n\t\t\t\tcheckedIcon={<FilledCircle fontSize='large'/>}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t</>\n\t);\n});\n\nexport { Radio };\nexport default Radio;\n","import React, { memo } from 'react';\r\nimport { Control, Controller } from 'react-hook-form';\r\nimport Typography from '../../../typography/typography';\r\nimport Radio from '../../../radio/radio';\r\nimport { FormControlLabel, RadioGroup, Box } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\n\r\ninterface IDynamicRadioButton {\r\n\tformControl: Control<any>;\r\n\tfieldArrayName: string;\r\n\tname: string;\r\n\tlabel: string;\r\n\ttitlePosition?: string;\r\n\tposition: number;\r\n\toptions: {\r\n\t\tlabel: string;\r\n\t\tvalue: string;\r\n\t}[];\r\n\tdisabled?: boolean;\r\n\ttypeOfField?: string;\r\n\tdisplay?: 'row' | 'column';\r\n\ttitle?: string;\r\n\tbordered?: boolean;\r\n\tdefaultValue?: string; // Optional defaultValue prop\r\n}\r\n\r\nconst BorderedOption = styled(Box, {\r\n\tshouldForwardProp: (prop) => prop !== 'bordered' && prop !== 'isSelected'\r\n})<{ bordered?: boolean; isSelected: boolean }>(({ theme, bordered }) => ({\r\n\tdisplay: 'flex',\r\n\talignItems: 'center',\r\n\tpadding: 0,\r\n\tmargin: 0,\r\n\t...(bordered && {\r\n\t\tborder: `1px solid ${theme.palette.divider}`,\r\n\t\tborderRadius: theme.shape.borderRadius,\r\n\t\tmargin: theme.spacing(0, 3, 0, 0),\r\n\t\tpadding: theme.spacing(0, 5, 0, 1),\r\n\t\theight: '36px',\r\n\t\talignContent: 'left',\r\n\t\t'&:hover': {\r\n\t\t\tbackgroundColor: theme.palette.action.hover\r\n\t\t}\r\n\t})\r\n}));\r\n\r\nexport const DynamicRadioButton: React.FC<IDynamicRadioButton> = memo(\r\n\t({\r\n\t\tformControl,\r\n\t\tfieldArrayName,\r\n\t\tname,\r\n\t\toptions,\r\n\t\tdisplay,\r\n\t\tlabel,\r\n\t\tposition,\r\n\t\tdisabled,\r\n\t\ttitle,\r\n\t\ttitlePosition,\r\n\t\tbordered = false,\r\n\t\tdefaultValue = ''\r\n\t}) => {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t<Typography\r\n\t\t\t\t\ttype='s5'\r\n\t\t\t\t\tweight='medium'\r\n\t\t\t\t\tcolor='theme.secondary.800'\r\n\t\t\t\t\tdata-position={position}\r\n\t\t\t\t\tsx={{ mb: 0.5 }}>\r\n\t\t\t\t\t{label}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<Controller\r\n\t\t\t\t\tcontrol={formControl}\r\n\t\t\t\t\tname={`${fieldArrayName}.${name}`}\r\n\t\t\t\t\t// disabled={disabled}\r\n\t\t\t\t\tdefaultValue={defaultValue} // Set defaultValue to 'item' if none provided\r\n\t\t\t\t\trender={({ field, fieldState: { error } }) => (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<RadioGroup\r\n\t\t\t\t\t\t\t\tvalue={field.value ?? defaultValue} // Ensure 'item' if value is undefined\r\n\t\t\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\r\n\t\t\t\t\t\t\t\trow={display === 'row'}\r\n\t\t\t\t\t\t\t\tsx={{ alignItems: 'center', gap: 1 }}>\r\n\t\t\t\t\t\t\t\t{title && titlePosition === 'start' && (\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\ttype='s4'\r\n\t\t\t\t\t\t\t\t\t\tcolor='theme.secondary.800'\r\n\t\t\t\t\t\t\t\t\t\tweight='medium'>\r\n\t\t\t\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t{options.map((option) => (\r\n\t\t\t\t\t\t\t\t\t<BorderedOption\r\n\t\t\t\t\t\t\t\t\t\tkey={option.value}\r\n\t\t\t\t\t\t\t\t\t\tbordered={bordered}\r\n\t\t\t\t\t\t\t\t\t\tisSelected={field.value == option.value}>\r\n\t\t\t\t\t\t\t\t\t\t<FormControlLabel\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ margin: 0, opacity: disabled ? 0.5 : 1 }}\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={option.value}\r\n\t\t\t\t\t\t\t\t\t\t\tcontrol={<Radio checked={field.value == option.value} />}\r\n\t\t\t\t\t\t\t\t\t\t\tlabel={\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype='s5'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tweight='medium'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor='theme.secondary.800'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{option.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</BorderedOption>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t{title && titlePosition === 'end' && (\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\ttype='s4'\r\n\t\t\t\t\t\t\t\t\t\tcolor='theme.secondary.800'\r\n\t\t\t\t\t\t\t\t\t\tweight='medium'>\r\n\t\t\t\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</RadioGroup>\r\n\t\t\t\t\t\t\t{error && (\r\n\t\t\t\t\t\t\t\t<Typography type='s5' color='theme.error.600'>\r\n\t\t\t\t\t\t\t\t\t{error.message}\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t/>\r\n\t\t\t</>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nexport default DynamicRadioButton;\r\n","import _ from \"lodash\";\r\nimport { MaterialTableColumnProps } from \"../../material-table/material-table\";\r\n\r\nexport const PARTIES_FORM_ARRAY_NAME = 'parties';\r\n\r\nexport const PARTIES_FIELDS = {\r\n TYPE: 'account_type',\r\n\r\n FIRST_NAME: 'first_name',\r\n LAST_NAME: 'last_name',\r\n\r\n COMPANY_NAME: 'company_name',\r\n VAT_NUMBER: 'vat_number',\r\n CRN: 'crn',\r\n\r\n // COMPANY: 'company_id',\r\n COMPANY: 'companies',\r\n CURRENCY: 'currencies',\r\n CONTACT_NO: 'contact_no',\r\n EMAIL_IDS: 'email_ids',\r\n\r\n ADDRESS: 'addresses',\r\n CONTACTS: 'contacts',\r\n\r\n RECEIVABLE_ACCOUNT: 'account_id',\r\n TAX_TEMPLATE: 'default_tax_template'\r\n}\r\n\r\nexport const partyType = [\r\n { label: 'Individual', value: 'Individual' },\r\n { label: 'Company', value: 'Company' }\r\n];\r\n\r\nexport const addressPayload = {\r\n parties_id: null,\r\n address_type: null,\r\n contact_name: null,\r\n street_1: null,\r\n street_2: null,\r\n city: null,\r\n zip_code: null,\r\n state: null,\r\n country: null,\r\n email: null,\r\n mobile: null,\r\n phone: null,\r\n street_3: null,\r\n summary: null,\r\n default_shipping_address: 0,\r\n default_billing_address: 0,\r\n country_code: null\r\n};\r\nexport const contactPayload = {\r\n parties_id: null,\r\n name: null,\r\n country_code: null,\r\n contact_no: null,\r\n email: null\r\n};\r\n\r\n/* Address columns & rows */\r\nexport const addressColumns: MaterialTableColumnProps[] = [\r\n {\r\n header: 'common.party.table.addressType_header',\r\n accessorKey: 'address_type',\r\n visible: true,\r\n type: 'string',\r\n editVariant: 'select',\r\n editProperties: {\r\n placeholder: 'Select Address Type',\r\n field_name: 'address_type',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'Address Type is required',\r\n msg_ar: 'Address Type is required'\r\n }\r\n ]\r\n },\r\n editSelectOptions: [\r\n { label: 'Delivery', value: 'Delivery' },\r\n { label: 'Shipping', value: 'Shipping' },\r\n { label: 'Office', value: 'Office' }\r\n ]\r\n },\r\n {\r\n header: 'common.party.table.addressee_header',\r\n accessorKey: 'contact_name',\r\n visible: true,\r\n type: 'custom_link',\r\n editProperties: {\r\n placeholder: 'Enter Addressee',\r\n field_name: 'contact_name',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: false,\r\n msg_en: 'Contact name is required',\r\n msg_ar: 'Contact name is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.defaultShippingAddress_header',\r\n accessorKey: 'default_shipping_address',\r\n visible: true,\r\n type: 'custom_link',\r\n editVariant: 'checkbox',\r\n editProperties: {\r\n field_name: 'default_shipping_address'\r\n }\r\n },\r\n {\r\n header: 'common.party.table.defaultBillingAddress_header',\r\n accessorKey: 'default_billing_address',\r\n visible: true,\r\n type: 'custom_link',\r\n editVariant: 'checkbox',\r\n editProperties: {\r\n field_name: 'default_billing_address'\r\n }\r\n },\r\n {\r\n header: 'common.party.table.countryCode_header',\r\n accessorKey: 'country_code',\r\n visible: true,\r\n type: 'custom_link',\r\n enableEditing: false\r\n },\r\n {\r\n header: 'common.party.table.contactNumber_header',\r\n accessorKey: 'phone',\r\n visible: true,\r\n type: 'custom_link',\r\n editVariant: 'phone',\r\n editProperties: {\r\n field_name: 'phone'\r\n }\r\n },\r\n {\r\n header: 'common.party.table.addrressOne_header',\r\n accessorKey: 'street_1',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter Address',\r\n field_name: 'street_1',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: false,\r\n msg_en: 'Address is required',\r\n msg_ar: 'Address is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.addressTwo_header',\r\n accessorKey: 'street_2',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter Address',\r\n field_name: 'street_2',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: false,\r\n msg_en: 'Address is required',\r\n msg_ar: 'Address is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.addressThree_header',\r\n accessorKey: 'street_3',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter Address',\r\n field_name: 'street_3',\r\n }\r\n },\r\n {\r\n header: 'common.party.table.zipCode_header',\r\n accessorKey: 'zip_code',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n field_name: 'zip_code',\r\n placeholder: 'Enter Zip Code',\r\n }\r\n },\r\n {\r\n header: 'common.party.table.country_header',\r\n accessorKey: 'country_name',\r\n visible: true,\r\n type: 'string',\r\n editVariant: 'select',\r\n editProperties: {\r\n field_name: 'country',\r\n placeholder: 'Select country',\r\n valueKey: 'country_id',\r\n apiType: 'countries',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'Country is required',\r\n msg_ar: 'Country is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.state_header',\r\n accessorKey: 'state_name',\r\n visible: true,\r\n type: 'string',\r\n editVariant: 'select',\r\n editProperties: {\r\n field_name: 'state',\r\n placeholder: 'Select state',\r\n valueKey: 'state_id',\r\n apiType: 'states',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'State is required',\r\n msg_ar: 'State is required'\r\n }\r\n ],\r\n customeFilter: (row: any, values) => {\r\n const filter = values?.country_name ? { '&country_id.eq': values?.country_name } : null\r\n return filter\r\n }\r\n }\r\n },\r\n {\r\n header: 'common.party.table.city_header',\r\n accessorKey: 'city',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter City',\r\n field_name: 'city',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'City is required',\r\n msg_ar: 'City is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.summary_header',\r\n accessorKey: 'summary',\r\n visible: true,\r\n type: 'string',\r\n enableEditing: false\r\n // editProperties: {\r\n // \tplaceholder: 'Populated after filling address',\r\n // \tfield_name: 'summary'\r\n // \tdisabled\r\n // }\r\n }\r\n];\r\n\r\n/* contact columns & rows */\r\nexport const contactColumns: MaterialTableColumnProps[] = [\r\n {\r\n header: 'common.party.table.name_header',\r\n accessorKey: 'name',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter Name',\r\n field_name: 'name',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'Name is required',\r\n msg_ar: 'Name is required'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.email_header',\r\n accessorKey: 'email',\r\n visible: true,\r\n type: 'string',\r\n editProperties: {\r\n placeholder: 'Enter Email',\r\n field_name: 'email',\r\n validations: [\r\n {\r\n type: 'required',\r\n value: true,\r\n msg_en: 'Email is required',\r\n msg_ar: 'Email is required'\r\n },\r\n {\r\n type: 'email',\r\n value: true,\r\n msg_en: 'Invalid Email',\r\n msg_ar: 'Invalid Email'\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: 'common.party.table.countryCode_header',\r\n accessorKey: 'country_code',\r\n visible: true,\r\n type: 'custom_link',\r\n enableEditing: false\r\n },\r\n {\r\n header: 'common.party.table.contactNumber_header',\r\n accessorKey: 'contact_no',\r\n visible: true,\r\n type: 'custom_link',\r\n editVariant: 'phone',\r\n editProperties: {\r\n field_name: 'contact_no'\r\n }\r\n }\r\n];\r\n\r\nexport const addressOmitKeys = [\r\n 'id',\r\n 'state_id',\r\n 'country_id',\r\n 'country_name',\r\n 'state_name',\r\n 'parties_id',\r\n 'state_data',\r\n 'country_data',\r\n 'summary'\r\n];\r\nexport const contactOmitKeys = ['id', 'summary'];\r\n\r\n\r\nexport const processPartiesPayload = (payload: any) => {\r\n const { addresses = [], contacts = [], ...rest } = payload || {}\r\n const addressPayload = addresses.map(address => (_.omit(address, ...addressOmitKeys)))\r\n const contactPayload = contacts.map(contact => (_.omit(contact, ...contactOmitKeys)))\r\n return {\r\n ...rest,\r\n addresses: addressPayload,\r\n contacts: contactPayload\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport { styled } from \"@mui/material\";\r\nimport Typography from \"../typography/typography\";\r\nimport ReactPhoneInput, { CountryData } from \"react-phone-input-2\";\r\nimport \"react-phone-input-2/lib/material.css\";\r\nimport { images } from \"../../assets/images\";\r\nimport { useLanguage } from \"../../hooks/useLangauge\";\r\nimport { memo, useEffect } from \"react\";\r\n\r\nconst StyledInput = styled(ReactPhoneInput)<{ isRtl: boolean }>(({ theme: { palette }, isRtl }) => ({\r\n \"&:hover\": {\r\n border: \"none\",\r\n },\r\n \"&.react-tel-input\": {\r\n \".form-control\": {\r\n borderRadius: \"0.25rem\",\r\n padding: \"8px 8px 8px 55px\", // Ensure space for flag on the left\r\n border: `1px solid ${palette.theme?.secondary[300]}`,\r\n fontSize: \"0.875rem\",\r\n width: \"100%\",\r\n maxHeight: \"36.13px\",\r\n direction: \"ltr\", // Force LTR direction for input to start from left\r\n textAlign: \"left\", // Force left alignment for input value\r\n\r\n \":hover\": {\r\n border: `1px solid ${palette.theme?.secondary[400]}`,\r\n },\r\n\r\n \":focus\": {\r\n border: `1px solid ${palette.theme?.primary[600]}`,\r\n boxShadow: \"none\",\r\n },\r\n \":disabled\": {\r\n background: palette.theme?.secondary[200],\r\n color: palette.theme?.secondary[800],\r\n },\r\n\r\n \"&.invalid-number\": {\r\n border: `1px solid ${palette.theme?.error[600]}`,\r\n \":focus\": {\r\n boxShadow: \"none\",\r\n },\r\n },\r\n },\r\n\r\n \".flag-dropdown\": {\r\n left: \"0\",\r\n right: \"auto\",\r\n borderRadius: \"0.25rem 0 0 0.25rem\",\r\n\r\n \".selected-flag\": {\r\n borderRadius: \"0.25rem 0 0 0.25rem\",\r\n\r\n \"&:hover\": {\r\n backgroundColor: palette.theme?.secondary[100],\r\n },\r\n },\r\n },\r\n\r\n \".country-list\": {\r\n left: isRtl ? \"auto\" : \"0\",\r\n right: isRtl ? \"0\" : \"auto\",\r\n\r\n \".search\": {\r\n padding: \"0.5rem 0.5rem 0.5rem 0.75rem\",\r\n borderBottom: \"1px solid #F3F2F2\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n direction: isRtl ? \"rtl\" : \"ltr\",\r\n\r\n \".search-emoji\": {\r\n position: \"absolute\",\r\n left: isRtl ? \"auto\" : \"1.25rem\",\r\n right: isRtl ? \"1.25rem\" : \"auto\",\r\n\r\n \":first-child\": {\r\n display: \"block\",\r\n color: \"transparent\",\r\n background: `url(${images.search})`,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"center\",\r\n },\r\n },\r\n\r\n \".search-box\": {\r\n width: \"100%\",\r\n marginLeft: \"0rem\",\r\n border: `1px solid ${palette.theme?.secondary[200]}`,\r\n backgroundColor: palette.theme?.secondary[100],\r\n borderRadius: \"0.5rem\",\r\n padding: \"0.4rem\",\r\n paddingLeft: isRtl ? \"0.4rem\" : \"2rem\",\r\n paddingRight: isRtl ? \"2rem\" : \"0.4rem\",\r\n fontSize: \"0.8125rem\",\r\n direction: isRtl ? \"rtl\" : \"ltr\",\r\n textAlign: isRtl ? \"right\" : \"left\",\r\n\r\n \":hover\": {\r\n border: `1px solid ${palette.theme?.secondary[300]}`,\r\n },\r\n\r\n \":focus\": {\r\n border: `1px solid ${palette.theme?.primary[600]}`,\r\n },\r\n },\r\n },\r\n\r\n \".country\": {\r\n fontSize: \"0.8125rem\",\r\n direction: isRtl ? \"rtl\" : \"ltr\",\r\n textAlign: isRtl ? \"right\" : \"left\",\r\n\r\n \".dial-code\": {\r\n fontSize: \"0.75rem\",\r\n position: \"absolute\",\r\n right: isRtl ? \"auto\" : \"0.5rem\",\r\n left: isRtl ? \"0.5rem\" : \"auto\",\r\n },\r\n },\r\n },\r\n },\r\n}));\r\n\r\ninterface IPhoneInput {\r\n error?: boolean;\r\n name?: string;\r\n dataPosition?: number;\r\n dataName?: string;\r\n label: string;\r\n required?: boolean;\r\n placeholder?: string;\r\n default_value?: string;\r\n onChange?: (e: any) => void;\r\n disabled?: boolean;\r\n setCountryCodeField?: (country: CountryData) => void;\r\n helperText?: string;\r\n isInlineEditing?: boolean\r\n}\r\n\r\nfunction fixPhoneDropdown() {\r\n let dropdown, input;\r\n\r\n const positionDropdown = () => {\r\n if (!dropdown || !input) return;\r\n const rect = input.getBoundingClientRect();\r\n\r\n dropdown.style.position = \"fixed\";\r\n dropdown.style.top = rect.bottom + \"px\";\r\n dropdown.style.left = rect.left + \"px\";\r\n dropdown.style.zIndex = \"2000\";\r\n };\r\n\r\n document.addEventListener(\"click\", () => {\r\n dropdown = document.querySelector(\".react-tel-input .country-list\");\r\n input = document.querySelector(\".react-tel-input input\");\r\n\r\n if (dropdown && input && !document.body.contains(dropdown)) {\r\n document.body.appendChild(dropdown);\r\n }\r\n\r\n positionDropdown();\r\n });\r\n\r\n // reposition on scroll (any container) and resize\r\n window.addEventListener(\"scroll\", positionDropdown, true); // true = capture all scrolls\r\n window.addEventListener(\"resize\", positionDropdown);\r\n}\r\n\r\n\r\nconst HelperTextWrapper = styled('div')(() => ({\r\n marginTop: '0.4rem',\r\n}));\r\n\r\nconst PhoneInput = memo(({\r\n name,\r\n error = false,\r\n dataName,\r\n dataPosition,\r\n label,\r\n required = false,\r\n placeholder,\r\n default_value,\r\n onChange,\r\n disabled,\r\n setCountryCodeField,\r\n helperText,\r\n isInlineEditing = false,\r\n ...rest\r\n}: IPhoneInput) => {\r\n const { isRtl } = useLanguage();\r\n\r\n useEffect(() => {\r\n if (isInlineEditing) {\r\n fixPhoneDropdown(isInlineEditing)\r\n }\r\n }, [isInlineEditing])\r\n\r\n useEffect(() => {\r\n if (typeof setCountryCodeField === \"function\") {\r\n setCountryCodeField?.({ dialCode: \"971\" } as CountryData);\r\n }\r\n }, [])\r\n\r\n return (\r\n <>\r\n <Typography\r\n type=\"s5\"\r\n weight=\"medium\"\r\n mb={0.5}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n data-position={dataPosition}\r\n data-name={dataName}\r\n >\r\n {label} {required && <span className=\"requiredStar\">*</span>}\r\n </Typography>\r\n <StyledInput\r\n dropdownContainer={document.body}\r\n isRtl={isRtl}\r\n specialLabel={\"\"}\r\n enableSearch\r\n searchPlaceholder=\"Search Country\"\r\n isValid={!error}\r\n country={\"ae\"}\r\n searchNotFound=\"Not Found!\"\r\n inputProps={{\r\n name: name,\r\n required: required,\r\n }}\r\n placeholder={placeholder}\r\n value={default_value || rest?.value}\r\n onChange={(value, country) => {\r\n setCountryCodeField?.(country as CountryData);\r\n onChange?.(value);\r\n }}\r\n disabled={disabled}\r\n />\r\n {helperText && (\r\n <HelperTextWrapper>\r\n <Typography\r\n type=\"s5\"\r\n color={error ? \"theme.error.600\" : \"theme.secondary.600\"}\r\n >\r\n {helperText}\r\n </Typography>\r\n </HelperTextWrapper>\r\n )}\r\n </>\r\n );\r\n});\r\n\r\nexport { PhoneInput };\r\nexport default PhoneInput;","import { Controller } from \"react-hook-form\";\nimport PropTypes from \"prop-types\";\n\nimport \"./element.scss\";\nimport PhoneInput from \"../../../phone-input/phone-input\";\nimport { memo } from \"react\";\n\nconst DynamicPhone = memo((props: any) => {\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field,fieldState }) => (\n <PhoneInput\n {...field}\n dataPosition={props.position}\n dataName={`${props.fieldArrayName}.${props.name}`}\n label={props.label}\n required={props.formType === \"builder\" ? false : props.required}\n placeholder={props.placeholder}\n default_value={props.default_value}\n onChange={(val) => field.onChange(val)}\n error={Boolean(fieldState.error?.message)}\n disabled={props.disabled}\n helperText={fieldState.error?.message || \"\"}\n setCountryCodeField={props.setCountryCodeField}\n />\n )}\n />\n );\n});\n\nDynamicPhone.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n position: PropTypes.number,\n formType: PropTypes.string,\n placeholder: PropTypes.string,\n default_value: PropTypes.string,\n type: PropTypes.string,\n typeOfField: PropTypes.string,\n disabled: PropTypes.bool,\n setCountryCodeField: PropTypes.func,\n};\n\nexport { DynamicPhone };\nexport default DynamicPhone;\n","import { Box, styled } from \"@mui/material\";\nimport logo from \"../../assets/images\";\nimport Button from \"../button/button\";\nimport Typography from \"../typography/typography\";\n// import { useEffect, useState } from \"react\";\nimport { Document } from \"../icons\";\nimport { enqueueSnackbar } from \"notistack\";\nimport { memo } from \"react\";\n// import Avatar from \"../avatar/avatar\";\n\nexport interface UploadImageProps {\n type?: string;\n label: string;\n disabled?: boolean;\n error?: boolean;\n dataPosition?: number;\n dataName?: string;\n required?: boolean;\n max_size?: number;\n name: string;\n value: string;\n onChange: (e: any) => any;\n multiple: boolean\n}\nconst UploadMedia = memo((props: UploadImageProps) => {\n const {\n type,\n label,\n disabled,\n error,\n dataName,\n dataPosition,\n required,\n max_size = 20,\n onChange,\n name,\n value,\n multiple,\n ...rest\n } = props;\n\n const VisuallyHiddenInput = styled(\"input\")({\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: 1,\n overflow: \"hidden\",\n position: \"absolute\",\n bottom: 0,\n left: 0,\n whiteSpace: \"nowrap\",\n width: 1,\n });\n\n // const [selectedFile, setSelectedFile] = useState<string | null>(null);\n const StyledButton = styled(Button)(({ theme: { palette } }) => ({\n marginBottom: 8,\n \"&.MuiButton-outlined\": {\n color: palette.theme?.primary[1000],\n },\n \"&.Mui-disabled\": {\n background: palette.theme?.secondary[200],\n color: palette.theme?.secondary[800],\n borderWidth: \"0.0625rem\",\n borderStyle: \"solid\",\n borderColor: palette.theme?.secondary[400],\n },\n }));\n\n const allowedImageTypes = [\n \"image/jpeg\", // JPG, JPEG\n \"image/png\", // PNG\n \"image/gif\", // GIF\n \"image/bmp\", // BMP\n \"image/webp\", // WebP\n \"image/svg+xml\", // SVG\n \"image/tiff\", // TIFF\n \"image/x-icon\", // ICO (icon files)\n \"image/heic\", // HEIC (High Efficiency Image Format)\n \"image/heif\"\n ]\n const allowedFileTypes = [\n \"application/pdf\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n 'application/vnd.ms-powerpoint',\n 'application/vnd.oasis.opendocument.text',\n 'text/csv',\n 'text/plain',\n 'application/rtf',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.oasis.opendocument.spreadsheet',\n 'application/vnd.oasis.opendocument.presentation',\n \"image/jpeg\", // JPG, JPEG\n \"image/png\", // PNG\n \"image/gif\", // GIF\n \"image/bmp\", // BMP\n \"image/webp\", // WebP\n \"image/svg+xml\", // SVG\n \"image/tiff\", // TIFF\n \"image/x-icon\", // ICO (icon files)\n \"image/heic\", // HEIC (High Efficiency Image Format)\n \"image/heif\"\n ];\n\n const isValidFileType = (file: any) => {\n if (type === \"image\") {\n return allowedImageTypes.includes(file.type);\n } else if (type === 'file') {\n return allowedFileTypes.includes(file.type);\n }\n };\n\n\n const handleUpload = (e: any) => {\n const files = [...e.target.files];\n const filterredFiles = files.map(file => {\n if (file && file.size <= max_size * 1024 * 1024) {\n if (isValidFileType(file)) {\n return file\n } else {\n enqueueSnackbar(`Invalid file type for ${file.name}. Please upload a valid document.`, { variant: 'error' })\n return null\n }\n }\n })?.filter(Boolean)\n onChange(multiple ? (value?.length ? [...value, ...filterredFiles] : filterredFiles) : filterredFiles[0]);\n };\n\n const getFileName = (file) => {\n if (!file) return \"\"\n if (file instanceof File) {\n return file.name\n } else if(typeof file === 'string') { \n const parts = file?.split('/');\n return parts?.[parts?.length - 1];\n } else if(Array.isArray(file) && file?.length > 0) {\n return file.map(f => {\n const parts = f?.split('/');\n return parts?.[parts?.length - 1];\n }).join(', ')\n }\n }\n // const getImagePreview = (file) => {\n // if (!file) return \"\"\n // if (file instanceof File) {\n // let previewUrl:any = ''\n // const reader = new FileReader();\n // reader.onload = () => {\n // previewUrl = reader.result;\n // };\n // reader.readAsDataURL(file);\n\n // return previewUrl\n // } else {\n // return file.includes(S3_BUCKET_URL) ? file : S3_BUCKET_URL + file\n // }\n // }\n\n const getSelectedFiles = (files: any) => {\n\n if (files) {\n if (Array.isArray(files)) {\n return files.map(file => (\n <Box display=\"flex\" gap={1} mb={1} alignItems='center'>\n {type === 'file' && <Document fontSize=\"small\" />}\n {/* {type === 'image' && <Avatar src={getImagePreview(file)} />} */}\n <Typography\n type=\"s5\"\n weight=\"medium\"\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\n data-position={dataPosition}\n data-name={dataName}\n noWrap\n >\n {getFileName(file)}\n </Typography>\n </Box>\n ))\n } else {\n return (\n <Box display=\"flex\" gap={1} alignItems='center'>\n {type === 'file' && <Document fontSize=\"small\" />}\n {/* {type === 'image' && <Avatar src={getImagePreview(files)} />} */}\n <Typography\n type=\"s5\"\n weight={\"medium\"}\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\n data-position={dataPosition}\n data-name={dataName}\n noWrap\n >\n {getFileName(files)}\n </Typography>\n </Box>\n )\n }\n }\n }\n\n // useEffect(() => {\n // if(!multiple) {\n // const parts = value?.split('/');\n // // const documentPath = parts?.slice(3, parts.length - 1).join('/');\n // const filename = parts?.[parts?.length - 1];\n\n \n // if (value) setSelectedFile(filename)\n // }\n // }, [multiple, value])\n\n return (\n <>\n <Typography\n type=\"s5\"\n weight={\"medium\"}\n mb={0.5}\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\n data-position={dataPosition}\n data-name={dataName}\n >\n {label} {required && \" *\"}\n </Typography>\n <div style={{ display: \"flex\" }}>\n <StyledButton\n component=\"label\"\n startIcon={\n <img\n src={type === \"image\" ? logo.uploadImage : logo.uploadDocument}\n />\n }\n variant=\"outlined\"\n disabled={disabled}\n >\n <Typography type='s5' weight=\"medium\" color=\"theme.secondary.1000\">Upload</Typography>\n <VisuallyHiddenInput\n type=\"file\"\n accept={type === \"file\" ? allowedFileTypes.join(\",\") : (type === 'image' ? allowedImageTypes.join(\",\") : undefined)}\n // required={required}\n onChange={handleUpload}\n name={name}\n multiple={multiple}\n {...rest}\n />\n </StyledButton>\n </div >\n {getSelectedFiles(value)}\n\n </>\n );\n})\n\nexport { UploadMedia };\nexport default UploadMedia;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nimport { Box } from '@mui/material';\r\n\r\nimport Typography from '../../typography/typography';\r\nimport DatePicker from '../../date-picker/date-picker';\r\nimport DateTimePicker from '../../date-time-picker/date-time-picker';\r\nimport TextField from '../../text-field/text-field';\r\nimport UploadMedia from '../../upload-media/upload-media';\r\n\r\nimport * as yup from 'yup';\r\nimport _ from 'lodash';\r\nimport dayjs from 'dayjs';\r\nimport PhoneInput from '../../phone-input/phone-input';\r\nimport Checkbox from '../../checkbox/checkbox';\r\nimport SearchableSelect from '../../searchable-select';\r\n\r\ninterface IInlineEditFields {\r\n\tcell: any;\r\n\tcolumn: any;\r\n\trow: any;\r\n\ttable: any;\r\n\tcol: any;\r\n\tcallback: (value: any, column: any, rowId: any) => any;\r\n\terrors: any;\r\n\tvalidationSchema: any;\r\n\tsetValidationErrors: any;\r\n\tonChangeRowField?: (e: any, type: string, row: any) => any;\r\n\tgetSelectedData: any\r\n}\r\nconst InlineEditFields: React.FC<IInlineEditFields> = ({\r\n\t// cell,\r\n\tcolumn,\r\n\trow,\r\n\t// table,\r\n\tcol,\r\n\t// callback,\r\n\terrors,\r\n\tvalidationSchema,\r\n\tsetValidationErrors,\r\n\tonChangeRowField,\r\n\tgetSelectedData\r\n}) => {\r\n\r\n\tconst [inputValue, setInputValue] = useState<any>();\r\n\tconst [isInitialSet, setIsInitialSet] = useState<any>(false);\r\n\tconst customFilter = useRef(null)\r\n\t// ** Getting only editing enabled fields.\r\n\tconst editCols = row\r\n\t\t.getAllCells()\r\n\t\t.map((col: any) => col.column.columnDef)\r\n\t\t.filter(\r\n\t\t\t(col: any) =>\r\n\t\t\t\tcol?.enableEditing === undefined || col?.enableEditing === true\r\n\t\t);\r\n\r\n\tconst editVariant = col.editVariant;\r\n\tconst fieldProperties = column.columnDef?.editProperties || {};\r\n\r\n\t// ** Default and Dynamic disbaling a field with row data\r\n\tlet fieldDisbled = false;\r\n\tif (fieldProperties?.disable) {\r\n\t\tif (typeof fieldProperties.disable === 'function') {\r\n\t\t\tfieldDisbled = Boolean(fieldProperties?.disable(row, row._valuesCache));\r\n\t\t} else {\r\n\t\t\tfieldDisbled = Boolean(fieldProperties.disable);\r\n\t\t}\r\n\t}\r\n\r\n\tconst handleCustomFilter = useCallback(async (row, values) => {\r\n\r\n\t\ttry {\r\n\t\t\tif (typeof fieldProperties.customeFilter === 'function') {\r\n\t\t\t\tconst filter = await fieldProperties.customeFilter(row, values);\r\n\t\t\t\tcustomFilter.current = filter;\r\n\t\t\t\treturn filter;\r\n\t\t\t} else {\r\n\t\t\t\tcustomFilter.current = fieldProperties?.customeFilter;\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [fieldProperties, row, row._valuesCache]);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\thandleCustomFilter(row, row._valuesCache)\r\n\t}, [handleCustomFilter, row, row._valuesCache]);\r\n\t// ** Setting a default value for edit mode.\r\n\tconst valueKey = fieldProperties?.valueKey;\r\n\tlet defaultValue: any = '';\r\n\r\n\tif (editVariant === 'select' && fieldProperties?.is_multiple) {\r\n\t\tdefaultValue = valueKey ? _.get(row.original, valueKey, []) : [];\r\n\t} else {\r\n\t\tdefaultValue = valueKey\r\n\t\t\t? _.get(row.original, valueKey, row.original[column.id])\r\n\t\t\t: row.original[column.id];\r\n\t}\r\n\r\n\t// ** Validate a field with Material Table Validation Schema.\r\n\tconst validate = async (value: any) => {\r\n\t\ttry {\r\n\t\t\t// const v = await validationSchema.validateAt( // * * This line has commented for rerendering purpose\r\n\t\t\tawait validationSchema.validateAt(\r\n\t\t\t\tcolumn.id,\r\n\t\t\t\t{\r\n\t\t\t\t\t[column.id]: value\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tabortEarly: false\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t\t// if (v) { // * * The if condition has commented for rerendering purpose\r\n\t\t\tconst fe: any = {}; // field error\r\n\t\t\tfor (const e in errors) {\r\n\t\t\t\tif (e != column.id) {\r\n\t\t\t\t\tfe[e] = errors[e];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tsetValidationErrors(fe);\r\n\t\t\t// }\r\n\t\t} catch (err) {\r\n\t\t\tif (err instanceof yup.ValidationError) {\r\n\t\t\t\tconst e: Record<string, string> = {};\r\n\t\t\t\terr.inner.forEach((error) => {\r\n\t\t\t\t\tif (error.path) {\r\n\t\t\t\t\t\te[error.path] = error.message;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tconst em = { ...errors, ...e };\r\n\t\t\t\tsetValidationErrors(em);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\r\n\r\n\t// ** Detect onChnage to perform the action on an input change.\r\n\tconst onChange = async (e: any, type: string, selectedData: any) => {\r\n\t\tconst data = selectedData\r\n\t\tlet value;\r\n\t\tswitch (type) {\r\n\t\t\tcase 'date':\r\n\t\t\tcase 'file':\r\n\t\t\tcase 'image':\r\n\t\t\tcase 'phone':\r\n\t\t\t\tvalue = e;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: e });\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'text':\r\n\t\t\tcase 'number':\r\n\t\t\t\tvalue = e.target.value;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: value });\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'checkbox':\r\n\t\t\t\tvalue = e.target.checked;\r\n\t\t\t\t// setInputValue({ ...inputValue, [column.id]: value });\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tvalue = e.target.value;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tsetInputValue({ ...inputValue, [column.id]: value });\r\n\r\n\t\tif (onChangeRowField) {\r\n\t\t\tconst v = await onChangeRowField(e, type, row, col, data);\r\n\t\t\tif (v) {\r\n\t\t\t\trow._valuesCache = { ...row._valuesCache, ...v };\r\n\t\t\t\tsetInputValue({ ...inputValue, ...v });\r\n\t\t\t}\r\n\t\t}\r\n\t\tsetInputValue({ ...inputValue, [column.id]: value });\r\n\t\trow._valuesCache = { ...row._valuesCache, [column.id]: value };\r\n\r\n\t\tawait validate(value);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetInputValue({ ...inputValue, ...row._valuesCache });\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [row._valuesCache]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!isInitialSet) {\r\n\t\t\tconst editFields = Object.keys(row._valuesCache || {});\r\n\t\t\tconst dValues: any = {};\r\n\r\n\t\t\trow.getAllCells().forEach((cell) => {\r\n\t\t\t\tif (\r\n\t\t\t\t\tcell.column.columnDef?.enableEditing === undefined ||\r\n\t\t\t\t\tcell.column.columnDef?.enableEditing === true\r\n\t\t\t\t) {\r\n\t\t\t\t\tconst { is_multiple, valueKey } =\r\n\t\t\t\t\t\tcell.column.columnDef?.editProperties || {};\r\n\t\t\t\t\tif (editFields.includes(cell.column.id)) {\r\n\t\t\t\t\t\tconst vl = _.get(row.original, valueKey);\r\n\t\t\t\t\t\tif (editVariant === 'select' && is_multiple) {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = vl\r\n\t\t\t\t\t\t\t\t? Array.isArray(vl)\r\n\t\t\t\t\t\t\t\t\t? vl\r\n\t\t\t\t\t\t\t\t\t: [vl]\r\n\t\t\t\t\t\t\t\t: [];\r\n\t\t\t\t\t\t} else if (editVariant === 'date' || editVariant === 'date_time') {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = vl\r\n\t\t\t\t\t\t\t\t? dayjs(vl).isValid()\r\n\t\t\t\t\t\t\t\t\t? dayjs(vl)\r\n\t\t\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t\t\t\t: dayjs(row.original[cell.column.id]).isValid()\r\n\t\t\t\t\t\t\t\t\t? dayjs(row.original[cell.column.id])\r\n\t\t\t\t\t\t\t\t\t: undefined;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tdValues[cell.column.id] = _.get(\r\n\t\t\t\t\t\t\t\trow.original,\r\n\t\t\t\t\t\t\t\tvalueKey,\r\n\t\t\t\t\t\t\t\trow.original[cell.column.id]\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t// setFieldsValues(dValues);\r\n\t\t\trow._valuesCache = dValues;\r\n\t\t\tsetInputValue(dValues);\r\n\t\t\tsetIsInitialSet(true);\r\n\t\t}\r\n\t}, [row, editVariant, isInitialSet]);\r\n\r\n\tconst handleMinDate = (state) => typeof state == 'function' ? state(row) : state\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{(!editVariant || editVariant === 'number') && (\r\n\t\t\t\t<TextField\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t// onBlur={(e) => onBlur(e)}\r\n\t\t\t\t\t// onKeyDown={onKeyDown}\r\n\t\t\t\t\tonChange={(e) => onChange(e, editVariant)}\r\n\t\t\t\t\tvalue={inputValue?.[column.id]}\r\n\t\t\t\t\tautoFocus={editCols?.[0]?.accessorKey === column.id}\r\n\t\t\t\t\ttype={editVariant || 'text'}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tplaceholder={fieldProperties?.placeholder || ''}\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'select' && (\r\n\t\t\t\t<Box display='flex' flexDirection='column' width='100%'>\r\n\t\t\t\t\t<SearchableSelect\r\n\t\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t\tplaceholder={fieldProperties?.placeholder || ''}\r\n\t\t\t\t\t\tsearchPlaceholder={`Search ${col.header}`}\r\n\t\t\t\t\t\tonChange={(e, row) => onChange(e, 'select', row)}\r\n\t\t\t\t\t\tapiType={fieldProperties?.apiType}\r\n\t\t\t\t\t\tautoFocus={editCols?.[0]?.accessorKey === column.id}\r\n\t\t\t\t\t\toptions={col?.editSelectOptions}\r\n\t\t\t\t\t\tcustomeFilter={customFilter.current}\r\n\t\t\t\t\t\tfilterKey={fieldProperties?.filterKey}\r\n\t\t\t\t\t\tlabelKey={fieldProperties?.labelKey}\r\n\t\t\t\t\t\tvalueKey={fieldProperties?.bindingKey}\r\n\t\t\t\t\t\tattributes={fieldProperties.attributes}\r\n\t\t\t\t\t\tisInternal={fieldProperties?.isInternal || !fieldProperties?.apiType}\r\n\t\t\t\t\t\tmultiple={fieldProperties?.is_multiple}\r\n\t\t\t\t\t\tvalue={\r\n\t\t\t\t\t\t\tfieldProperties?.is_multiple\r\n\t\t\t\t\t\t\t\t? Array.isArray(inputValue?.[column.id])\r\n\t\t\t\t\t\t\t\t\t? inputValue?.[column.id]\r\n\t\t\t\t\t\t\t\t\t: []\r\n\t\t\t\t\t\t\t\t: inputValue?.[column.id]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgetSelectedData={(row) => getSelectedData(fieldProperties?.field_name, row)}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{errors?.[column.id] && (\r\n\t\t\t\t\t\t<Typography color='theme.error.600' type='s5'>\r\n\t\t\t\t\t\t\t{errors?.[column.id]}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'date' && (\r\n\t\t\t\t<DatePicker\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'date')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={\r\n\t\t\t\t\t\tdayjs(row._valuesCache[column.id]).isValid()\r\n\t\t\t\t\t\t\t? dayjs(row._valuesCache[column.id])\r\n\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t\tminDate={() => handleMinDate(fieldProperties?.min_date)}\r\n\t\t\t\t\tmaxDate={() => handleMinDate(fieldProperties?.min_date)}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'date_time' && (\r\n\t\t\t\t<DateTimePicker\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'date')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={\r\n\t\t\t\t\t\tdayjs(row._valuesCache[column.id]).isValid()\r\n\t\t\t\t\t\t\t? dayjs(row._valuesCache[column.id])\r\n\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{(editVariant === 'file' || editVariant === 'image') && (\r\n\t\t\t\t<Box display='flex' flexDirection='column'>\r\n\t\t\t\t\t<UploadMedia\r\n\t\t\t\t\t\tname={fieldProperties?.field_name || 'table_file'}\r\n\t\t\t\t\t\tdataPosition={0}\r\n\t\t\t\t\t\tdataName='table_file'\r\n\t\t\t\t\t\tlabel=''\r\n\t\t\t\t\t\ttype={editVariant}\r\n\t\t\t\t\t\tmax_size={10}\r\n\t\t\t\t\t\tonChange={(v) => onChange(v, 'file')}\r\n\t\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\t\tmultiple={Boolean(column?.is_multiple)}\r\n\t\t\t\t\t\tvalue={row._valuesCache[column.id]}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{errors?.[column.id] && (\r\n\t\t\t\t\t\t<Typography color='theme.error.600' type='s5'>\r\n\t\t\t\t\t\t\t{errors?.[column.id]}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'phone' && (\r\n\t\t\t\t<PhoneInput\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefault_value={defaultValue}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'phone')}\r\n\t\t\t\t\ttextFieldProps={{\r\n\t\t\t\t\t\tautoFocus: editCols?.[0]?.accessorKey === column.id\r\n\t\t\t\t\t}}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={row._valuesCache?.[column.id]}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t\tisInlineEditing={true}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{editVariant === 'checkbox' && (\r\n\t\t\t\t<Checkbox\r\n\t\t\t\t\tname={fieldProperties?.field_name || ''}\r\n\t\t\t\t\tdefaultChecked={Boolean(defaultValue)}\r\n\t\t\t\t\t// checked={Boolean(defaultValue)}\r\n\t\t\t\t\tonChange={(v) => onChange(v, 'checkbox')}\r\n\t\t\t\t\terror={errors?.[column.id] ? true : false}\r\n\t\t\t\t\thelperText={errors?.[column.id]}\r\n\t\t\t\t\tformat={fieldProperties?.dateFormat}\r\n\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\tfieldProperties?.placeholder || fieldProperties?.dateFormat\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue={row._valuesCache?.[column.id]}\r\n\t\t\t\t\tdisabled={fieldDisbled}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nexport default InlineEditFields;\r\n","/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport React, { cloneElement, useCallback, useEffect, useState } from 'react';\r\nimport {\r\n\tMRT_ColumnDef,\r\n\tMRT_ColumnSizingInfoState,\r\n\tMRT_ColumnSizingState,\r\n\tMRT_Header,\r\n\tMRT_Row,\r\n\tMRT_RowData,\r\n\tMRT_RowSelectionState,\r\n\tMRT_SortingState,\r\n\tMRT_TableInstance,\r\n\tMRT_TableState,\r\n\tMaterialReactTable,\r\n\tMaterialReactTableProps,\r\n\tuseMaterialReactTable,\r\n\t// Cell\r\n} from 'material-react-table';\r\nimport { IPaginationModel } from '../../@types/pagination-model';\r\nimport {\r\n\tBox,\r\n\tstyled,\r\n\tMenuItem,\r\n\tIconButton,\r\n\tListItemIcon,\r\n\tListItemText,\r\n\tSvgIconProps,\r\n\tDivider\r\n} from '@mui/material';\r\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\r\nimport Menu from '../menu/menu';\r\nimport Typography from '../typography/typography';\r\nimport SearchBar from '../search-bar/search-bar';\r\nimport images from '../../assets/images';\r\n// import DeleteIcon from \"@mui/icons-material/Delete\";\r\n// import UpdateIcon from \"@mui/icons-material/Update\";\r\n// import PlayIcon from \"@mui/icons-material/PlayArrow\";\r\n\r\nimport './material-table.scss';\r\nimport {\r\n\tArrowUpDown,\r\n\tCheckBoxIcon,\r\n\tClose,\r\n\tEdit,\r\n\tRecgtangleIcon,\r\n\tSave,\r\n\tTrash\r\n} from '../icons';\r\n// import {\r\n// \tArrowDropDown /* , SaveOutlined */,\r\n// \tArrowDropUp\r\n// } from '@mui/icons-material';\r\nimport InlineEditFields from './components/inline-edit-fields';\r\nimport Tooltip from '../tooltip/Tooltip';\r\nimport Button from '../button/button';\r\nimport Add from '@mui/icons-material/Add';\r\nimport dayjs from 'dayjs';\r\nimport * as yup from 'yup';\r\nimport ConfirmPopUp from '../confirm-modal/confirm-modal';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { usePages } from '../../hooks/use-pages';\r\nimport { useNavigate } from 'react-router-dom';\r\n// Module-specific pathname imports removed - should be passed as props or configured by consuming app\r\n// import { PathnameAccounting } from 'accounting/src/pathname.accounting';\r\n// import { PathnameInventory } from 'inventory/src/pathname.inventory';\r\n// import { PathnameManufacturing } from 'manufacturing/src/pathname.manufacturing';\r\n// import { PathnamePurchase } from 'procurement/src/pathname.procurement';\r\n// import { PathnameCrm } from 'crm/src/pathname.crm';\r\n// import { PathnameUsers } from 'user/src/pathname.user';\r\n// import { PathnameRental } from '../../../../rental/src/pathname.rental';\r\nimport { PathnameDocument } from '../../constants/pathnames/pathname.document';\r\nimport { PathnameAccounting } from '../../constants/pathnames/pathname.accounting';\r\nimport { PathnameInventory } from '../../constants/pathnames/pathname.inventory';\r\nimport { PathnameManufacturing } from '../../constants/pathnames/pathname.manufacturing';\r\nimport { PathnamePurchase } from '../../constants/pathnames/pathname.procurement';\r\nimport { PathnameCrm } from '../../constants/pathnames/pathname.crm';\r\nimport { PathnameUsers } from '../../constants/pathnames/pathname.user';\r\nimport { PathnameRental } from '../../constants/pathnames/pathname.rental';\r\nimport useDeepMemo from '../../hooks/use-deep-memo';\r\nimport { PageState } from '../../contexts/page-context';\r\n\r\ntype ExtraEditVariants =\r\n\t| 'file'\r\n\t| 'image'\r\n\t| 'date'\r\n\t| 'number'\r\n\t| 'time'\r\n\t| 'date_time'\r\n\t| 'phone'\r\n\t| 'checkbox';\r\n\r\ntype DisableFunction = (row: any, virtualRow?: any) => boolean;\r\n\r\nexport type TypeBooleanLabels = { 1: string; 0: string; true: string; false: string }\r\n\r\nexport interface MaterialTableColumnProps\r\n\textends Omit<MRT_ColumnDef<MRT_RowData>, 'editVariant'> {\r\n\tvisible?: boolean;\r\n\ttype?: string;\r\n\tshowDefaultCurrency?:boolean,\r\n\tvalueGet?: string;\r\n\tcustom_class?:string;\r\n\ttypeArrayAccessorKey?: string; //when type is an array of object\r\n\ttypeBooleanLabels?: TypeBooleanLabels; //when type is an boolean\r\n\teditVariant?: MRT_ColumnDef<MRT_RowData>['editVariant'] | ExtraEditVariants;\r\n\teditProperties?: {\r\n\t\tfield_name?: string;\r\n\t\tvalueKey?: string;\r\n\t\tplaceholder?: string;\r\n\t\tdateFormat?: string;\r\n\t\tvalidations?: any[];\r\n\t\tis_multiple?: boolean;\r\n\t\tis_multiline?: boolean;\r\n\t\tdisable?: boolean | DisableFunction;\r\n\t};\r\n\tredirectionPathWithId?: string;\r\n\thandleRowClick?: (row: any) => void;\r\n\tidField?: string;\r\n}\r\n\r\n\r\n\r\nexport interface MaterialTableColumnHeaderProps {\r\n\tcolumn: MRT_ColumnDef<any, any>;\r\n\theader: MRT_Header<any>;\r\n\ttable: MRT_TableInstance<any>;\r\n}\r\n\r\ntype rowSelectionCallback = (row: MRT_Row<any>) => boolean\r\n\r\ninterface MaterialTablePropsType {\r\n\tenablePagination?: boolean;\r\n\tdisableMaxHeight?: boolean;\r\n\trows: any;\r\n\ttotalPages: number;\r\n\tcolumns: any;\r\n\tpaginationModel: IPaginationModel;\r\n\tcolumnOrder?: string[];\r\n\tupdateData?: any;\r\n\thandleColumnOrdering?: (colOrder: any) => void;\r\n\tenableEditing?: boolean;\r\n\tenableColumnDragging?: boolean;\r\n\trowActionMenu?: any;\r\n\tdestructiveActionMenu?: any;\r\n\tgetRowId?: any;\r\n\tstates?: Partial<MRT_TableState<any>>;\r\n\tonSortingChange?: any;\r\n\tdisableDefaultActionColumn?: boolean;\r\n\tenableRowSelection?: boolean | rowSelectionCallback;\r\n\tdefaultActionColumnItems?: React.ReactElement[];\r\n\tenableBottomToolbar?: boolean;\r\n\tSetSelectedRowId?: any;\r\n\tisResetRow?: boolean;\r\n\tonCreateRow?: (data: any) => Promise<unknown>;\r\n\tonEditRow?: (data: any) => Promise<unknown>;\r\n\tonDeleteRow?: (data: any) => Promise<unknown>;\r\n\teditDisplayMode?: MaterialReactTableProps<any>['editDisplayMode'];\r\n\tenableRowCreate?: boolean;\r\n\tonChangeRowField?: (e: any, type: string, row: any) => void;\r\n\tonSelectRow?: (rows: any, prevSelected?:any) => any;\r\n\tenableColumnResizing?: boolean;\r\n\tselectedRowIds?: any[];\r\n\tonColumnVisibility?:(columns:MaterialTableColumnProps[]) => void\r\n\tgetSelectedData:any;\r\n\tenableAddCustomField?:boolean;\r\n\tdisabledDefaultActionColumnIcon?:boolean\r\n\tenableRowDragging?:boolean\r\n\thandleColumnResizing?: (sizes: MRT_ColumnSizingState) => void,\r\n\tcolumnSizes?: MRT_ColumnSizingState,\r\n\tshowPreview?: boolean;\r\n\thandlePreview?: (row: MRT_RowData) => void;\r\n}\r\n\r\nconst TableWrapper = styled(Box, {\r\n\tshouldForwardProp: (prop) => prop !== 'disableMaxHeight',\r\n})<{ disableMaxHeight?: boolean }>(({ theme: { palette }, disableMaxHeight }) => ({\r\n\t'.MuiTableCell-root': {\r\n\t\tborder: '1px solid #efefef',\r\n\t\tborderBottom: 0,\r\n\t\tborderLeft: 0,\r\n\t\tpadding: '0 0.5rem',\r\n\t\tlineHeight: '19px',\r\n\t\tfontSize: '14px',\r\n\t\tminHeight: 32,\r\n\t\t// '&:first-child': {\r\n\t\t// \tborderLeft: '1px solid #efefef'\r\n\t\t// },\r\n\t\t// '&:last-child': {\r\n\t\t// \tborderBottom: '1px solid #efefef'\r\n\t\t// }\r\n\r\n\t},\r\n\t'.MuiTableCell-head': {\r\n\t\tbackgroundColor: palette.theme?.secondary[100]\r\n\t},\r\n\t'.MuiTableContainer-root': {\r\n\t\t...(!disableMaxHeight && { maxHeight: 'clamp(350px, 100vh - 200px, 9999px) !important' }),\r\n\t\t},\r\n\r\n\t'.MuiPaper-root': {\r\n\t\tboxShadow: 'none',\r\n\r\n\t},\r\n\t'.MuiPaginationItem-root': {\r\n\t\t'&.Mui-selected': {\r\n\t\t\tbackgroundColor: palette?.theme?.primary[700],\r\n\t\t\tcolor: 'white'\r\n\t\t}\r\n\t},\r\n\t'.MuiTableRow-root': {\r\n\t\t'&.Mui-selected': {\r\n\t\t\tbackgroundColor: `${palette?.theme?.primary[100]} !important`,\r\n\t\t\tcolor: 'white'\r\n\t\t}\r\n\t},\r\n\t'.MuiCheckbox-indeterminate': {\r\n\t\tcolor: `${palette?.theme?.primary[700]} !important`,\r\n\t\t\"& svg\" : {\r\n\t\t\theight: `20px !important`,\r\n\t\t\twidth: `20px !important`,\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport const MaterialTable = React.memo(({\r\n\tenablePagination = false,\r\n\trows,\r\n\tcolumns,\r\n\ttotalPages,\r\n\tpaginationModel,\r\n\tcolumnOrder,\r\n\tupdateData,\r\n\thandleColumnOrdering,\r\n\tenableEditing,\r\n\tenableColumnDragging,\r\n\tstates,\r\n\trowActionMenu,\r\n\tdestructiveActionMenu,\r\n\tdisableDefaultActionColumn,\r\n\tenableRowSelection,\r\n\tdefaultActionColumnItems = [],\r\n\tenableBottomToolbar,\r\n\tSetSelectedRowId,\r\n\tisResetRow,\r\n\tonCreateRow,\r\n\tonEditRow,\r\n\tonDeleteRow,\r\n\teditDisplayMode,\r\n\tenableRowCreate,\r\n\tonChangeRowField,\r\n\tonSelectRow,\r\n\tenableColumnResizing = true,\r\n\tselectedRowIds = [],\r\n\tonColumnVisibility,\r\n\tonSortingChange,\r\n\tgetSelectedData,\r\n\tdisabledDefaultActionColumnIcon = false,\r\n\tenableAddCustomField=true,\r\n\tenableRowDragging = false,\r\n\thandleColumnResizing = () => {},\r\n\tcolumnSizes = {},\r\n\tdisableMaxHeight = false,\r\n\tshowPreview = false,\r\n\thandlePreview=()=>{},\r\n\t// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n\t// getRowId,\r\n\t// onDelete,\r\n\t// onUpdate,\r\n\t...rest\r\n}: MaterialTablePropsType) => {\r\n\tconst { t } = useTranslation();\r\n\tconst { formData = null, updatePageInfo, activePage: aPage } = usePages()\r\n\tconst activePage = useDeepMemo<PageState>(aPage);\r\n\tconst { pageNo } = paginationModel;\r\n\tconst [row, setRow] = useState({});\r\n\tconst [tableColumns, setTableColumns] = useState(columns);\r\n\tconst [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [popUpShow, setPopupShow] = useState<boolean>(false);\r\n\tconst [rowAnchorEl, setRowAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst visibleColumns = tableColumns.filter((column: any) => column.visible);\r\n\tconst hiddenColumns = tableColumns.filter((column: any) => !column.visible);\r\n\tconst [filteredOptions, setFilteredOptions] = useState(hiddenColumns);\r\n\tconst [selectedRow, setSelectedRow] = useState<number | null>(null);\r\n\tconst [validationErrors, setValidationErrors] = useState<any>({});\r\n\tconst [validationSchema, setValidationSchema] = useState<any>([]);\r\n\tconst [isCreatingRow, setIsCreatingRow] = useState<boolean>(false);\r\n\tconst [isEditingRow, setIsEditingRow] = useState<boolean>(false);\r\n\tconst [isDeletingRow, setIsDeletingRow] = useState<boolean>(false);\r\n\tconst [rowToDelete, setRowToDelete] = useState<any>(null);\r\n\tconst [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});\r\n\tconst [isChecked, setIsChecked] = useState(false)\r\n\tconst [sorting, setSorting] = useState<MRT_SortingState>([]);\r\n\tconst [disableNextEdit, setDisableNextEdit] = useState(false);\r\n\tconst [columnSizing, setColumnSizing] = useState<MRT_ColumnSizingState>(activePage.column_sizes);\r\n\tconst [columnSizingInfo, setColumnSizingInfo] = useState<MRT_ColumnSizingInfoState>({\r\n\t\tcolumnSizingStart: [],\r\n deltaOffset: null,\r\n deltaPercentage: null,\r\n isResizingColumn: false,\r\n startOffset: null,\r\n startSize: null\r\n\t});\r\n\r\n\tconst navigate=useNavigate();\r\n\t const currentModule = location.pathname.split('/')[2]\r\n\t\r\n\t let redirectionPath = ''\r\n\t switch (currentModule) {\r\n\t\tcase 'accounting':\r\n\t\t redirectionPath = PathnameAccounting.CUSTOM_FORM\r\n\t\t break;\r\n\t\tcase 'inventory':\r\n\t\t redirectionPath = PathnameInventory.CUSTOM_FORM\r\n\t\t break;\r\n\t\tcase 'manufacturing':\r\n\t\r\n\t\t redirectionPath = PathnameManufacturing.CUSTOM_FORM\r\n\t\t break;\r\n\t\tcase 'procurement':\r\n\t\t redirectionPath = PathnamePurchase.CUSTOM_FORM\r\n\t\t break;\r\n\t\tcase 'crm':\r\n\t\t redirectionPath = PathnameCrm.CUSTOM_FORM\r\n\t\t break;\r\n\t\t case 'user':\r\n\t\t redirectionPath = PathnameUsers.CUSTOM_FORM\r\n\t\t break;\r\n\tcase 'rental':\r\n\t\t redirectionPath = PathnameRental.CUSTOM_FORM\r\n\t\t break;\r\n\t\t case 'drive':\r\n\t\t redirectionPath = PathnameDocument.ADD_CUSTOM_FIELDS\r\n\t\t break;\r\n\t }\r\n\t const path = `/dashboard/${currentModule}${redirectionPath}`\r\n\tconst getValidationType = (column: any) => {\r\n\t\tswitch (column.editVariant) {\r\n\t\t\tcase 'select':\r\n\t\t\t\treturn column?.editProperties?.is_multiple ? yup.array() : yup.string();\r\n\r\n\t\t\tcase 'number':\r\n\t\t\t\treturn yup.number().nullable().transform((value, originalValue) => (originalValue === \"\" ? null : value));\r\n\r\n\t\t\tcase 'url':\r\n\t\t\t\treturn yup\r\n\t\t\t\t\t.string()\r\n\t\t\t\t\t.matches(\r\n\t\t\t\t\t\t/^(https?:\\/\\/)?((([a-zA-Z0-9_-]+\\.)+[a-zA-Z]{2,})|localhost)(:\\d{2,5})?(\\/[a-zA-Z0-9#_-]+\\/?)*(\\?[a-zA-Z0-9&=_-]+)?(#\\S+)?$/,\r\n\t\t\t\t\t\t{ excludeEmptyString: true, message: 'Please enter valid URL.' }\r\n\t\t\t\t\t);\r\n\r\n\t\t\tdefault:\r\n\t\t\t\treturn yup.string()\r\n\t\t}\r\n\t};\r\n\r\n\tconst validationReducer = (\r\n\t\tvalidations: any,\r\n\t\tvalidation: any,\r\n\t\tcolumn: any\r\n\t) => {\r\n\t\tlet vld = validations\r\n\t\tswitch (validation.type) {\r\n\t\t\tcase 'required':\r\n\t\t\t\tvld = validation.value\r\n\t\t\t\t\t? validations.required(validation.msg_en).typeError(validation.msg_en)\r\n\t\t\t\t\t: column?.editProperties?.is_multiple\r\n\t\t\t\t\t\t? validations.min(1, validation.msg_en)\r\n\t\t\t\t\t\t: validations;\r\n\t\t\t\t\t\tbreak\r\n\t\t\tcase 'min':\r\n\t\t\t\tvld = validations.min(validation.value, validation.msg_en);\r\n\t\t\t\tbreak\r\n\t\t\tcase 'email':\r\n\t\t\t\tvld = validations.email(validation.value, validation.msg_en);\r\n\t\t\t\tbreak\r\n\t\t\tcase 'max':\r\n\t\t\t\tvld = validations.max(validation.value, validation.msg_en);\r\n\t\t\t\tbreak\r\n\t\t\tcase 'positive':\r\n\t\t\t\tvld = validation.value === true ? validations.test('is-positive-number', 'Value must be a positive number', (value) => !value || value >= 0) : validations;\r\n\t\t\t\tbreak\r\n\t\t\tcase 'when':\r\n\t\t\t\treturn validations.when(validation.relation, {\r\n\t\t\t\t\tis: (val: any) => val === validation.values,\r\n\t\t\t\t\tthen: () =>\r\n\t\t\t\t\t\tvalidation?.thenValidations?.reduce(\r\n\t\t\t\t\t\t\t(validations: any, validation: any) =>\r\n\t\t\t\t\t\t\t\tvalidationReducer(validations, validation, column),\r\n\t\t\t\t\t\t\tvalidations\r\n\t\t\t\t\t\t) || validations,\r\n\t\t\t\t\totherwise: () =>\r\n\t\t\t\t\t\tvalidation?.otherWiseValidations?.reduce(\r\n\t\t\t\t\t\t\t(validations: any, validation: any) =>\r\n\t\t\t\t\t\t\t\tvalidationReducer(validations, validation, column),\r\n\t\t\t\t\t\t\tvalidations\r\n\t\t\t\t\t\t) || validations\r\n\t\t\t\t});\r\n\t\t\t// Add more cases for other validation types as needed\r\n\t\t\tdefault:\r\n\t\t\t\tvld = validations;\r\n\t\t\t\tbreak\r\n\t\t}\r\n\r\n\t\tif(validation.type == 'required' && validation.value && (!column?.editVariant || column?.editVariant == 'text')) {\r\n\t\t\tvld = validations.test('no-blank-spaces', 'Blank space is not allowed', (value) => {\r\n\t\t\t\treturn value && value.trim()?.length > 0;\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\treturn vld\r\n\t\t\r\n\t};\r\n\r\n\r\n\tconst generateValidationSchema = (columns: any[]) => {\r\n\t\tconst schema: any = {};\r\n\t\tcolumns.forEach((clm) => {\r\n\t\t\tif (clm?.editProperties?.validations?.length) {\r\n\t\t\t\tconst fieldValidations = clm?.editProperties?.validations.reduce(\r\n\t\t\t\t\t(validations: any, validation: any) =>\r\n\t\t\t\t\t\tvalidationReducer(validations, validation, clm),\r\n\t\t\t\t\tgetValidationType(clm)\r\n\t\t\t\t);\r\n\t\t\t\tschema[clm.accessorKey] = fieldValidations;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn schema;\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetTableColumns(columns);\r\n\r\n\t\tconst schema: any = generateValidationSchema(columns);\r\n\t\tsetValidationSchema(yup.object().shape(schema));\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [columns]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif(!columnSizingInfo?.isResizingColumn) {\r\n\t\t\tupdatePageInfo({ column_sizes: {...activePage.column_sizes, ...columnSizing} })\r\n\t\t\thandleColumnResizing?.(columnSizing)\r\n\t\t}\r\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [columnSizingInfo?.isResizingColumn, columnSizing])\r\n\r\n\tconst handleHeaderClick = (event: any) => {\r\n\t\tsetAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleHeaderClose = () => {\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleVisibleColumn = (column: any) => {\r\n\t\tconst updatedColumns = tableColumns.map((col: any) => ({\r\n\t\t\t...col,\r\n\t\t\tvisible: col.accessorKey === column.accessorKey ? false : col.visible\r\n\t\t}));\r\n\t\tsetTableColumns(updatedColumns);\r\n\t\tonColumnVisibility?.(JSON.parse(JSON.stringify(updatedColumns)))\r\n\t\tsetFilteredOptions([...filteredOptions, column]);\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleAddButtonClick = () => {\r\n\t\tsetPopupShow(true);\r\n\t};\r\n\r\n\tconst handleBackButtonClick = () => {\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleAddColumn = (column: any) => {\r\n\t\tconst updatedColumns = tableColumns.map((col: any) => ({\r\n\t\t\t...col,\r\n\t\t\tvisible: col.accessorKey === column.accessorKey ? true : col.visible\r\n\t\t}));\r\n\t\tonColumnVisibility?.(JSON.parse(JSON.stringify(updatedColumns)))\r\n\t\tsetTableColumns(updatedColumns);\r\n\r\n\t\tconst updatedFilteredOptions = filteredOptions.filter(\r\n\t\t\t(option: any) => option.accessorKey !== column.accessorKey\r\n\t\t);\r\n\t\tsetFilteredOptions(updatedFilteredOptions);\r\n\t\tsetAnchorEl(null);\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleSearchEvent = (searchQuery: string) => {\r\n\t\tconst filteredColumns = hiddenColumns.filter((option: any) =>\r\n\t\t\toption.header.toLowerCase().includes(searchQuery.toLowerCase())\r\n\t\t);\r\n\t\tsetFilteredOptions(filteredColumns);\r\n\t};\r\n\r\n\tconst handleCustomAddColumn = () => {\r\n\t\tnavigate(path, { state: formData })\r\n\t\tsetAnchorEl(null);\r\n\t\tsetPopupShow(false);\r\n\t};\r\n\r\n\tconst handleRowClick = (rowId: number) => {\r\n\t\tsetSelectedRow(rowId); // Update selected row ID when a row is clicked\r\n\t};\r\n\r\n\tconst handlePreviewClick = (row: MRT_RowData) => {\r\n\t\thandlePreview?.(row);\r\n\t};\r\n\r\n\t// const handleDeleteClick = (event: any, data: any) => {\r\n\t// onDelete?.(data.id);\r\n\t// };\r\n\t// const handleUpdateClick = (event: any, data: any) => {\r\n\t// onUpdate?.(data.id);\r\n\t// };\r\n\r\n\tconst handleActionsClick = (event: any, data: any) => {\r\n\t\tsetRow(data);\r\n\t\tsetRowAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleActionsClose = () => {\r\n\t\tsetRowAnchorEl(null);\r\n\t};\r\n\r\n\tconst formtValues = (values: any, cells: any[]) => {\r\n\t\tconst v: any = {};\r\n\t\tObject.keys(values).forEach((vl) => {\r\n\t\t\tconst val = values[vl];\r\n\t\t\tv[vl] = val;\r\n\t\t\tconst cell = cells.find((c) => c.accessorKey == vl);\r\n\t\t\tif (val) {\r\n\t\t\t\tif (val instanceof File) {\r\n\t\t\t\t\tv[vl] = val.name;\r\n\t\t\t\t}\r\n\t\t\t\tif (cell && cell?.editVariant == 'date') {\r\n\t\t\t\t\tv[vl] = dayjs(val).format(cell?.dateFormat || 'DD-MM-YYYY');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn v;\r\n\t};\r\n\r\n\tconst handleRowDelete = async () => {\r\n\t\tsetIsDeletingRow(true);\r\n\t\tif (rowToDelete) {\r\n\t\t\tawait onDeleteRow?.(rowToDelete);\r\n\t\t\tsetRowToDelete(null);\r\n\t\t}\r\n\t\tsetIsDeletingRow(false);\r\n\t};\r\n\r\n\tconst checkRequired=useCallback((editProperties:any)=>{\r\n\t\treturn editProperties?.validations?.some((validation:any)=>validation.type === 'required')\r\n\t},[])\r\n\tuseEffect(() => {\r\n\t\tconst selectedRows = {};\r\n\t\t// Build the selectedRows object\r\n\t\tif (!isChecked && selectedRowIds.length) {\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif (selectedRowIds.includes(row.id)) {\r\n\t\t\t\t\tselectedRows[row.id] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tsetRowSelection(selectedRows);\r\n\t\t\tsetIsChecked(true)\r\n\t\t}\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [rows, selectedRowIds]); // Dependency only on rows and selectedRowIds\r\n\r\n\tuseEffect(() => {\r\n\t\tif(onSortingChange instanceof Function) {\r\n\t\t const sortingArray = Array.isArray(sorting) ? sorting : [];\r\n onSortingChange(sortingArray[0] || null)\r\n\t\t}\r\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t},[sorting])\r\n\r\n\r\n\tconst resetRowSelection = () => {\r\n\t\tsetRowSelection({});\r\n\t\tsetDisableNextEdit(false)\r\n\t}\r\n\tconst getTextWidth = (text: string) => {\r\n\tconst canvas = document.createElement(\"canvas\");\r\n\tconst ctx = canvas.getContext(\"2d\");\r\n\tif (!ctx) return 50;\r\n\treturn ctx.measureText(text).width + 5; // padding\r\n\t}\r\n\tconst table = useMaterialReactTable({\r\n\t\t// options:{\r\n\t\t// \ttableLayout: \"auto\", // 👈 important\r\n\t\t// \tpadding: \"dense\",\r\n\t\t// },\r\n\t\t// columns: visibleColumns,\r\n\t\tdefaultColumn:{\r\n minSize: 0, // 👈 remove default min width\r\n size: undefined, // 👈 optional, default size\r\n },\r\n\t\tcolumns: [\r\n\t\t\t...visibleColumns.map((c: any) => {\r\n\t\t\t\tconst headerWidth = getTextWidth(c.header || '');\r\n\t\t\t\tconst maxCellWidth = Math.max(\r\n\t\t\t\t...rows.map(row => getTextWidth(String(row[c.accessorKey] ?? '')))\r\n\t\t\t\t);\r\n\t\t\t\tconst finalWidth = Math.max(headerWidth, maxCellWidth);\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...c,\r\n\t\t\t\t\t...(editDisplayMode === 'row'\r\n\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\tEdit: ({ cell, row, table, column }) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<InlineEditFields\r\n\t\t\t\t\t\t\t\t\t\tcell={cell}\r\n\t\t\t\t\t\t\t\t\t\tcolumn={column}\r\n\t\t\t\t\t\t\t\t\t\tcol={c}\r\n\t\t\t\t\t\t\t\t\t\trow={row}\r\n\t\t\t\t\t\t\t\t\t\ttable={table}\r\n\t\t\t\t\t\t\t\t\t\tcallback={(s) => console.log('Save', s)}\r\n\t\t\t\t\t\t\t\t\t\terrors={validationErrors}\r\n\t\t\t\t\t\t\t\t\t\tvalidationSchema={validationSchema}\r\n\t\t\t\t\t\t\t\t\t\tsetValidationErrors={setValidationErrors}\r\n\t\t\t\t\t\t\t\t\t\tonChangeRowField={onChangeRowField}\r\n\t\t\t\t\t\t\t\t\t\tgetSelectedData={(name,row)=>getSelectedData?.(name,row)}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t: {}),\r\n\t\t\t\t\t\tHeader: (\r\n\t\t\t\t\t\t\t<Box display='flex' alignItems='center'>\r\n\t\t\t\t\t\t\t\t{c.header}\r\n\t\t\t\t\t\t\t\t{c?.required ||checkRequired(c?.editProperties) && (\r\n\t\t\t\t\t\t\t\t\t<Typography type='s5' color='theme.error.600'>\r\n\t\t\t\t\t\t\t\t\t\t*\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\tenableColumnDragging: c.id !== 'actions',\r\n\t\t\t\t\t// cellStyle: { ...c.cellStyle, width: finalWidth },\r\n \t\t\t\t// headerStyle: { ...c.headerStyle, width: finalWidth },\r\n\t\t\t\t\t// size: finalWidth\r\n\t\t\t\t\tsize: undefined,\r\n\t\t\t\t\t// minSize: 40,\r\n\t\t\t\t\tmaxSize: 800,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\t...(showPreview ? [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 'preview',\r\n\t\t\t\t\tenableEditing: false,\r\n\t\t\t\t\tsize: 70,\r\n\t\t\t\t\theader: (\r\n\t\t\t\t\t\t<IconButton size=\"small\" sx={{ ml: '20px', '&:hover': { backgroundColor: 'transparent' } }}>\r\n\t\t\t\t\t\t\t<img src={images.common.eyeIcon} alt='Eye Icon' />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t),\r\n\t\t\t\t\tenableColumnDragging: false,\r\n\t\t\t\t\tvisible: true,\r\n\t\t\t\t\tmuiTableHeadCellProps: {\r\n\t\t\t\t\t\tclassName: 'pinned-column'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmuiTableBodyCellProps: {\r\n\t\t\t\t\t\tclassName: 'pinned-column',\r\n\t\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t\twhiteSpace: 'pre-wrap'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tCell: (props) =>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tonClick={() => handlePreviewClick(props.row.original)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tPreview\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t}\r\n\t\t\t] : []),\r\n\t\t\t...(!disableDefaultActionColumn\r\n\t\t\t\t? [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tid: 'actions',\r\n\t\t\t\t\t\tenableEditing: false,\r\n\t\t\t\t\t\tsize: defaultActionColumnItems?.length > 1 ? 80 : 50,\r\n\t\t\t\t\t\theader: (\r\n\t\t\t\t\t\t\t<IconButton size=\"small\" sx={{ p: 0.5, '&:hover': { backgroundColor: 'transparent' } }} onClick={handleHeaderClick}>\r\n\t\t\t\t\t\t\t\t<img src={images.common.arrowIcon} alt='Arrow Icon' />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t\tenableColumnDragging: false,\r\n\t\t\t\t\t\tvisible: true,\r\n\t\t\t\t\t\tmuiTableHeadCellProps: {\r\n\t\t\t\t\t\t\tclassName: 'pinned-column'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmuiTableBodyCellProps: {\r\n\t\t\t\t\t\t\tclassName: 'pinned-column'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tCell: (props) =>\r\n\t\t\t\t\t\t\tdefaultActionColumnItems?.length ? (\r\n\t\t\t\t\t\t\t\tdefaultActionColumnItems.map((item) => {\r\n\t\t\t\t\t\t\t\t\tconst updatedProps = {\r\n\t\t\t\t\t\t\t\t\t\t...item.props,\r\n\t\t\t\t\t\t\t\t\t\tonClick: () => item.props.onClick(props)\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\treturn cloneElement(item, updatedProps);\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t) : !disabledDefaultActionColumnIcon && (\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tonClick={(e) => handleActionsClick(e, props.row.original)} disabled={!rowActionMenu?.length && !destructiveActionMenu?.length}>\r\n\t\t\t\t\t\t\t\t\t<img src={images.more} alt='More Icon' />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t\t: [])\r\n\t\t],\r\n\t\tdata: rows,\r\n\t\tmuiTableContainerProps: {\r\n\t\t\tsx: {\r\n\t\t\t\t...(disableMaxHeight && { maxHeight: 'none !important' }),\r\n\t\t\t},\r\n\t\t},\r\n\t\tmuiTablePaperProps: {\r\n\t\t\tsx: {\r\n\t\t\t\ttableLayout: 'auto', // lets columns shrink to fit content\r\n\t\t\t\t},\r\n\t\t},\r\n\t\tcolumnResizeMode: 'onChange',\r\n\t\tonEditingRowSave: async (data) => {\r\n\t\t\ttry {\r\n\t\t\t\tawait validationSchema.validate(data.values, {\r\n\t\t\t\t\tabortEarly: false\r\n\t\t\t\t});\r\n\t\t\t\tsetValidationErrors({});\r\n\t\t\t\tsetIsEditingRow(true);\r\n\t\t\t\tsetDisableNextEdit(false)\r\n\t\t\t\tconst cells = data.row.getAllCells().map((c) => c.column.columnDef);\r\n\t\t\t\tdata.row._valuesCache = formtValues(data.values, cells);\r\n\t\t\t\t\r\n\t\t\t\tif (onEditRow) {\r\n\t\t\t\t\tawait onEditRow(data, 'edit');\r\n\t\t\t\t}\r\n\t\t\t\tsetIsEditingRow(false);\r\n\t\t\t\tdata.table.setEditingRow(null);\r\n\t\t\t} catch (err) {\r\n\t\t\t\tsetIsEditingRow(false);\r\n\t\t\t\tif (err instanceof yup.ValidationError) {\r\n\t\t\t\t\tconst errors: Record<string, string> = {};\r\n\r\n\t\t\t\t\terr.inner.forEach((error) => {\r\n\t\t\t\t\t\tif (error.path) {\r\n\t\t\t\t\t\t\terrors[error.path] = error.message;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tsetValidationErrors(errors);\r\n\t\t\t\t} else if(err instanceof Error) {\r\n\t\t\t\t\tenqueueSnackbar(err.message, {variant: 'error'})\r\n\t\t\t\t} else{\r\n\t\t\t\t\tenqueueSnackbar('Something went wrong', {variant: 'error'})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonCreatingRowSave: async (data) => {\r\n\t\t\ttry {\r\n\t\t\t\tawait validationSchema.validate(data.values, {\r\n\t\t\t\t\tabortEarly: false\r\n\t\t\t\t});\r\n\t\t\t\tsetValidationErrors({});\r\n\t\t\t\tsetIsCreatingRow(true);\r\n\t\t\t\tsetDisableNextEdit(false)\r\n\t\t\t\tconst cells = data.row.getAllCells().map((c) => c.column.columnDef);\r\n \r\n\t\t\t\tdata.row._valuesCache = formtValues(data.values, cells);\r\n\t\t\t\t\r\n\t\t\t\tif (onCreateRow) {\r\n\t\t\t\t\tawait onCreateRow(data);\r\n\t\t\t\t}\r\n\t\t\t\tsetIsCreatingRow(false);\r\n\t\t\t\tdata.table.setCreatingRow(null);\r\n\t\t\t} catch (err) {\r\n\t\t\t\tsetIsCreatingRow(false);\r\n\t\t\t\tif (err instanceof yup.ValidationError) {\r\n\t\t\t\t\tconst errors: Record<string, string> = {};\r\n\r\n\t\t\t\t\terr.inner.forEach((error) => {\r\n\t\t\t\t\t\tif (error.path) {\r\n\t\t\t\t\t\t\terrors[error.path] = error.message;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tsetValidationErrors(errors);\r\n\t\t\t\t} else if(err instanceof Error) {\r\n\t\t\t\t\tenqueueSnackbar(err.message, {variant: 'error'})\r\n\t\t\t\t} else{\r\n\t\t\t\t\tenqueueSnackbar('Something went wrong', {variant: 'error'})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonCreatingRowCancel: () => resetRowSelection(),\r\n\t\tonEditingRowCancel: () => resetRowSelection(),\r\n\t\tonSortingChange:states?.sorting ? onSortingChange : setSorting,\r\n\r\n\t\tdisplayColumnDefOptions: {\r\n\t\t\t'mrt-row-actions': {\r\n\t\t\t\t// size: onDeleteRow ? 80 : 50,\r\n\t\t\t\t\r\n\t\t\t\tHeader: (\r\n\t\t\t\t\t<IconButton onClick={handleHeaderClick} size='small'>\r\n\t\t\t\t\t\t<img src={images.common.arrowIcon} alt='Arrow Icon' />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t),\r\n\t\t\t\tmuiTableBodyCellProps: {\r\n\t\t\t\t\tsx: {\r\n\t\t\t\t\t\t'& .MuiBox-root': {\r\n\t\t\t\t\t\t\tgap: 0\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tbackgroundColor: '#fff'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonKeyUp: (e) => console.log(e)\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t'mrt-row-expand': {\r\n\t\t\t\tsize: 70, // Set the size of the expand-collapse arrow column here\r\n\t\t\t},\r\n\t\t\t'mrt-row-select': {\r\n size: 50, // Set the width of the checkbox column here\r\n },\r\n\t\t},\r\n\t\trenderRowActions: ({ row, table }) => (\r\n\t\t\t<>\r\n\t\t\t\t{rest?.enableExpanding ? (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{row?.parentId && (\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0 }}>\r\n\t\t\t\t\t\t\t\t<Tooltip title='Edit'>\r\n\t\t\t\t\t\t\t\t\t<IconButton disabled={disableNextEdit} onClick={() => {\r\n\t\t\t\t\t\t\t\t\t\ttable.setEditingRow(row)\r\n\t\t\t\t\t\t\t\t\t\tsetDisableNextEdit(true)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t} size='small'>\r\n\t\t\t\t\t\t\t\t\t\t<Edit fontSize='small' sx={{ color: 'theme.secondary.1000' }}/>\r\n\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t{onDeleteRow && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title='Delete'>\r\n\t\t\t\t\t\t\t\t\t\t<IconButton disabled={disableNextEdit} onClick={() => setRowToDelete(row)} size='small'>\r\n\t\t\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0 }}>\r\n\t\t\t\t\t\t<Tooltip title='Edit'>\r\n\t\t\t\t\t\t\t<IconButton disabled={disableNextEdit} onClick={() => {\r\n\t\t\t\t\t\t\t\t\t\ttable.setEditingRow(row)\r\n\t\t\t\t\t\t\t\t\t\tsetDisableNextEdit(true)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t<Edit fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t{onDeleteRow && (\r\n\t\t\t\t\t\t\t<Tooltip title='Delete'>\r\n\t\t\t\t\t\t\t\t<IconButton onClick={() => setRowToDelete(row)}>\r\n\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</>\r\n\t\t),\r\n\r\n\t\t...(Boolean(enableRowCreate) && {\r\n\t\t\trenderBottomToolbarCustomActions: ({ table }) => (\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant='outlined'\t\r\n\t\t\t\t\tstartIcon={<Add />}\r\n\t\t\t\t\tclassName='add-row-btn'\r\n\t\t\t\t\tdisabled={disableNextEdit}\r\n\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\ttable.setCreatingRow(true); //simplest way to open the create row modal with no default values\r\n\t\t\t\t\t\tsetDisableNextEdit(true)\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t{t('common.add')}\r\n\t\t\t\t</Button>\r\n\t\t\t)\r\n\t\t}),\r\n\t\tonRowSelectionChange: setRowSelection,\r\n\t\tenableColumnOrdering: true,\r\n\t\tenableRowSelection: enableRowSelection ?? true,\r\n\t\tenableEditing: enableEditing instanceof Function ? enableEditing() :enableEditing ?? true,\r\n\t\teditDisplayMode: editDisplayMode ?? 'cell',\r\n\t\tcreateDisplayMode: 'row',\r\n\t\tenableColumnResizing: enableColumnResizing,\r\n\t\tenableRowDragging: enableRowDragging,\r\n\t\tenableTopToolbar: false,\r\n\t\tenableColumnActions: false,\r\n\t\tenableSorting: true,\r\n\t\tenableGrouping: true,\r\n\t\tenableBottomToolbar: enableBottomToolbar ?? false,\r\n\t\tenableColumnDragging: enableColumnDragging ?? true,\r\n\t\tenableStickyHeader: true,\r\n\t\tenableSortingRemoval: false,\r\n\t\t// column ordering\r\n\t\tstate: {\r\n\t\t\t// columnOrder: (!columnOrder || columnOrder.length <= 1) \r\n\t\t\t// ? [...internalColumnOrder] \r\n\t\t\t// : [...columnOrder],\r\n\t\t\tcolumnOrder:columnOrder,\r\n\t\t\tcolumnPinning: { left: ['actions', 'mrt-row-actions'] },\r\n\t\t\tisSaving: isCreatingRow || isEditingRow,\r\n\t\t\tshowProgressBars: false,\r\n\t\t\trowSelection,\r\n\t\t\t...states,\r\n\t\t\tsorting: Array.isArray(states?.sorting) ? states?.sorting : \r\n Array.isArray(sorting) ? sorting : [],\r\n\t\t\tcolumnSizing\r\n\r\n\t\t},\r\n\t\tgetRowId:(row) => row?.id,\r\n\t\t// table.getState().editingRow\r\n\t\tmuiTableBodyRowProps: ({ row }) => {\r\n\t\t\tconst editingRowId =\r\n\t\t\t\ttable.getState()?.editingRow?.id ||\r\n\t\t\t\ttable.getState()?.creatingRow?.id ||\r\n\t\t\t\tnull;\r\n\t\t\tconst isErrorRow = Boolean(row?.original?.has_error)\r\n\t\t\treturn {\r\n\t\t\t\tonClick: () => handleRowClick(row.id),\r\n\t\t\t\tsx: {\r\n\t\t\t\t\tcursor: 'pointer',\r\n\t\t\t\t\t// backgroundColor: !editingRowId\r\n\t\t\t\t\t// \t? (selectedRow === row.id\r\n\t\t\t\t\t// \t\t? '#e8e8e8'\r\n\t\t\t\t\t// \t\t: (isErrorRow ? 'theme.error.100' : 'inherit'))\r\n\t\t\t\t\t// \t: 'inherit',\r\n\t\t\t\t\tbackgroundColor: !editingRowId\r\n\t\t\t\t\t\t? (isErrorRow ? 'theme.error.100' : 'inherit')\r\n\t\t\t\t\t\t: 'inherit',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tbackgroundColor: editingRowId ? 'transparent' : (isErrorRow ? 'theme.error.200' : '#e8e8e8') // Removes hover effect globally\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'&:hover td:after': {\r\n\t\t\t\t\t\tbackgroundColor: 'transparent' // Removes the grey background applied via :after\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tonColumnOrderChange: (colOrder: any) => {\r\n\t\t\tif (handleColumnOrdering) handleColumnOrdering(colOrder);\r\n\t\t},\r\n\t\tonColumnSizingChange: setColumnSizing,\r\n onColumnSizingInfoChange: setColumnSizingInfo,\r\n\r\n\t\trenderEmptyRowsFallback: () => (\r\n\t\t\t<Box className='no-data'>\r\n\t\t\t\t<img src={images.common.tableNoData} />\r\n\t\t\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\r\n\t\t\t\t\t{/* sx={{ textAlign: 'center', pb: 4.75, pt: 4.75 }}> */}\r\n\t\t\t\t\t{t('common.noData')}\r\n\t\t\t\t</Typography>\r\n\t\t\t</Box>\r\n\t\t),\r\n\r\n\t\t// pagination\r\n\t\tenablePagination: enablePagination,\r\n\t\tpaginationDisplayMode: 'pages',\r\n\t\tmuiPaginationProps: {\r\n\t\t\tshape: 'rounded',\r\n\t\t\tpage: pageNo, // current page number\r\n\t\t\tcount: totalPages, // total pages\r\n\t\t\tshowRowsPerPage: false, // Hide rows per page options\r\n\t\t\tboundaryCount: 3\r\n\t\t},\r\n\r\n\t\tmuiEditTextFieldProps: ({ row, column }) => ({\r\n\t\t\tInputProps: {\r\n\t\t\t\tdisableUnderline: true\r\n\t\t\t},\r\n\t\t\tonBlur: (e) => {\r\n\t\t\t\tupdateData(e.target.value, column, row.id);\r\n\t\t\t},\r\n\t\t\t// onChange: (e) => {\r\n\t\t\t// \tupdateData(e.target.value, column, row.id);\r\n\t\t\t// },\r\n\t\t\tvariant: 'outlined',\r\n\t\t\tsx: ({ palette }) => ({\r\n\t\t\t\t'& .MuiOutlinedInput-root': {\r\n\t\t\t\t\t'& fieldset': {\r\n\t\t\t\t\t\tborderColor: `${palette.theme?.primary[700]} !important`\r\n\t\t\t\t\t\t// backgroundColor: palette.theme?.primary[700]\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}),\r\n\r\n\t\t/* Table loader style */\r\n\t\tmuiCircularProgressProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: '#289B64'\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Table header cell default styles\r\n\t\tmuiTableHeadCellProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tlineHeight: '140%',\r\n\t\t\t\tletterSpacing: '-0.28px',\r\n\t\t\t\tfontWeight: '500',\r\n\t\t\t\tfontSize: '0.875rem',\r\n\t\t\t\t'& .Mui-TableHeadCell-Content': {\r\n\t\t\t\t\theight: '100%'\r\n\t\t\t\t},\r\n\t\t\t\t'& .Mui-TableHeadCell-Content-Labels': {\r\n\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\tjustifyContent: 'space-between'\r\n\t\t\t\t},\r\n\t\t\t\t'&.pinned-column': {\r\n\t\t\t\t\tbackgroundColor: '#fff'\r\n\t\t\t\t},\r\n\t\t\t\t'& .Mui-TableHeadCell-ResizeHandle-Wrapper': {\r\n\t\t\t\t\tpadding: 0,\r\n\t\t\t\t\tmargin: 0,\r\n\t\t\t\t\tright: '-5px',\r\n\t\t\t\t\topacity: 0\r\n\t\t\t\t},\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Table body cell default styles\r\n\t\tmuiTableBodyProps: {\r\n\t\t\tsx:{\r\n\t\t\t\tzIndex: 500\r\n\t\t\t}\r\n\t\t},\r\n\t\tmuiTableHeadProps: {\r\n\t\t\tsx:{\r\n\t\t\t\tzIndex: 600\r\n\t\t\t}\r\n\t\t},\r\n\t\tmuiTableBodyCellProps: (/* { cell, column, table , row } */) => ({\r\n\t\t\tsx: {\r\n\t\t\t\tlineHeight: '140%',\r\n\t\t\t\tletterSpacing: '-0.26px',\r\n\t\t\t\tfontWeight: '400',\r\n\t\t\t\tfontSize: '0.8125rem',\r\n\t\t\t\t'&.pinned-column': {\r\n\t\t\t\t\tbackgroundColor: '#fff'\r\n\t\t\t\t},\r\n\t\t\t\t'&:hover': {\r\n\t\t\t\t\tbackgroundColor: 'transparent' // Removes hover effect globally\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// onClick: () => {\r\n\t\t\t// \ttable.setEditingCell(cell); //set editing cell\r\n\t\t\t// \tqueueMicrotask(() => {\r\n\t\t\t// \t\tconst textField = table.refs.editInputRefs.current[column.id];\r\n\t\t\t// \t\tif (textField) {\r\n\t\t\t// \t\t\ttextField.focus();\r\n\t\t\t// \t\t\ttextField.select?.();\r\n\t\t\t// \t\t}\r\n\t\t\t// \t});\r\n\t\t\t// }\r\n\t\t\t// onKeyDown: (event) => {\r\n\t\t\t// \tif (event.key === 'Tab') {\r\n\t\t\t// \t\ttry {\r\n\t\t\t// \t\t\t\t// if (column.columnDef.editVariant === 'select') {\r\n\t\t\t// \t\t\t\t// \ttable.refs.editInputRefs.current[column.id]?.node?.blur();\r\n\t\t\t// \t\t\t\t// } else {\r\n\t\t\t// \t\t\t\t// \ttable.refs.editInputRefs.current[column.id].blur();\r\n\t\t\t// \t\t\t\t// }\r\n\r\n\t\t\t// \t\t\tconst rowIdx = row.index;\r\n\t\t\t// \t\t\tconst colIdx = columns.findIndex(\r\n\t\t\t// \t\t\t\t(col) => col.accessorKey === column.id\r\n\t\t\t// \t\t\t);\r\n\t\t\t// \t\t\tconst newColIdx = colIdx + 1;\r\n\t\t\t// \t\t\tconst clm = columns[newColIdx];\r\n\t\t\t// \t\t\tconst nextCell = row\r\n\t\t\t// \t\t\t\t.getAllCells()\r\n\t\t\t// \t\t\t\t.find((cl) => (cl.id = `${rowIdx}_${clm.accessorKey}`));\r\n\r\n\t\t\t// \t\t\tif (nextCell) {\r\n\t\t\t// \t\t\t\t// updateData(event.target.value, column, row.id);\r\n\t\t\t// \t\t\t\ttable.setEditingCell(nextCell);\r\n\t\t\t// \t\t\t\tqueueMicrotask(() => {\r\n\t\t\t// \t\t\t\t\tconst textField = table.refs.editInputRefs.current[column.id];\r\n\t\t\t// \t\t\t\t\tif (textField) {\r\n\t\t\t// \t\t\t\t\t\ttextField.focus();\r\n\t\t\t// \t\t\t\t\t\ttextField.select?.();\r\n\t\t\t// \t\t\t\t\t}\r\n\t\t\t// \t\t\t\t});\r\n\t\t\t// \t\t\t}\r\n\t\t\t// \t\t} catch (error) {\r\n\t\t\t// \t\t}\r\n\t\t\t// \t}\r\n\t\t\t// },\r\n\t\t\t// onBlur: () => {\r\n\t\t\t// \ttable.setEditingCell(null);\r\n\t\t\t// }\r\n\t\t}),\r\n\r\n\t\t// Checkbox styling\r\n\t\tmuiSelectCheckboxProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: 'theme.secondary.300',\r\n\t\t\t\t'&.Mui-checked': {\r\n\t\t\t\t\tcolor: 'theme.primary.600',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: 'theme.primary.500'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t'&.Mui-disabled': {\r\n\t\t\t\t\tcolor: 'theme.secondary.200'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ticon: <RecgtangleIcon sx={{ width: 20, height: 20 }} />,\r\n\t\t\tcheckedIcon: <CheckBoxIcon sx={{ width: 20, height: 20 }} />\r\n\t\t},\r\n\t\tmuiSelectAllCheckboxProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tcolor: 'theme.secondary.300',\r\n\t\t\t\t'&.Mui-checked': {\r\n\t\t\t\t\tcolor: 'theme.primary.600',\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: 'theme.primary.500'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t'&.Mui-disabled': {\r\n\t\t\t\t\tcolor: 'theme.secondary.600'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ticon: <RecgtangleIcon sx={{ width: 20, height: 20 }} />,\r\n\t\t\tcheckedIcon: <CheckBoxIcon sx={{ width: 20, height: 20 }} />\r\n\t\t},\r\n\t\tmuiBottomToolbarProps: {\r\n\t\t\tsx: {\r\n\t\t\t\tboxShadow: 'none',\r\n\t\t\t\t'& .MuiBox-root': {\r\n\t\t\t\t\tpaddingLeft: 0\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tlayoutMode: 'grid',\r\n\t\ticons: {\r\n\t\t\tArrowDownwardIcon: (props: SvgIconProps) => (\r\n\t\t\t\t<ArrowUpDown fontSize='medium' {...props} />\r\n\t\t\t),\r\n\t\t\tSortIcon: (props: SvgIconProps) => (\r\n\t\t\t\t<ArrowUpDown fontSize='medium' {...props} />\r\n\t\t\t),\r\n\t\t\tSyncAltIcon: () => <ArrowUpDown fontSize='medium' />,\r\n\t\t\tCancelIcon: (props: SvgIconProps) => (\r\n\t\t\t\t<Close fontSize='small' {...props} sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t),\r\n\t\t\tSaveIcon: (props: SvgIconProps) => (\r\n\t\t\t\t<Save {...props} fontSize='small' sx={{ color: 'theme.secondary.1000' }} />\r\n\t\t\t)\r\n\t\t},\r\n\t\t\r\n\t\t...rest\r\n\t});\r\n\r\n\tuseEffect(() => {\r\n\t\tif (enableRowSelection) {\r\n\t\t\tif (table?.getSelectedRowModel()?.rows) {\r\n\t\t\t\tSetSelectedRowId?.(table?.getSelectedRowModel()?.rows);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [enableRowSelection]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onSelectRow) {\r\n\t\t\tif(rest?.enableExpanding) {\r\n\t\t\t\tconst selectedRowModels: any[] = [];\r\n\t\t\t\tconst selection = table.getState().rowSelection; // e.g., { 0.0: true }\r\n\t\t\t\tconst traverseRows = (rows, parentKey = '') => {\r\n\t\t\t\t\trows.forEach((row, index) => {\r\n\t\t\t\t\t\tconst rowKey = parentKey ? `${parentKey}.${index}` : `${row.id}`;\r\n\t\t\t\t\t\tif (selection[rowKey]) {\r\n\t\t\t\t\t\t\tselectedRowModels.push(row);\r\n\t\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\t\t// Check for sub-rows and traverse further\r\n\t\t\t\t\t\tif (row.subRows?.length) {\r\n\t\t\t\t\t\t\ttraverseRows(row.subRows, rowKey);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\t\r\n\t\t\t\ttraverseRows(table.getRowModel().rows);\r\n\t\t\t\tonSelectRow(selectedRowModels, rowSelection);\r\n\t\t\t} else{\r\n\t\t\t\tonSelectRow(table.getSelectedRowModel().rows, rowSelection);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [rowSelection, table]);\r\n\r\n\t// useEffect(() => {\r\n\t// \tconst relativeContainer = document.getElementsByClassName(\r\n\t// \t\t'MuiTableContainer-root'\r\n\t// \t)[0];\r\n\t// \tconst fixedElement = document.getElementsByClassName('no-data')[0];\r\n\t// \trelativeContainer.addEventListener('scroll', () => {\r\n\t// \t\tconst scrollLeft = relativeContainer.scrollLeft;\r\n\t// \t\tfixedElement.style.left = `${scrollLeft + 100}px`;\r\n\t// \t});\r\n\t// }, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (isResetRow) {\r\n\t\t\ttable?.resetRowSelection();\r\n\t\t}\r\n\t}, [isResetRow, table]);\r\n\treturn (\r\n\t\t<TableWrapper className='MRT-TableWrapper custom-table' disableMaxHeight={disableMaxHeight}>\r\n\t\t\t<MaterialReactTable table={table} />\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={anchorEl}\r\n\t\t\t\topen={Boolean(anchorEl)}\r\n\t\t\t\tonClose={handleHeaderClose}\r\n\t\t\t\tclassName='add-role-drp'>\r\n\t\t\t\t{popUpShow ? (\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\tonClick={handleBackButtonClick}\r\n\t\t\t\t\t\t\tclassName='role-drp-list add-column-title'>\r\n\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t<ChevronLeftIcon />\r\n\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t{t('common.addColumn_label')}\r\n\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important'}}/>\r\n\t\t\t\t\t\t<div className='searchbar-box-list'>\r\n\t\t\t\t\t\t\t<SearchBar\r\n\t\t\t\t\t\t\t\tplaceholder={'Search User'}\r\n\t\t\t\t\t\t\t\thandleSearch={(e) => handleSearchEvent(e)}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div className='all-attribute-title'>\r\n\t\t\t\t\t\t\t<Typography variant='body2' color='text.secondary'>\r\n\t\t\t\t\t\t\t\t{t('common.allAttributes_label')}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{filteredOptions.map((column: any) => (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={column.accessorKey}\r\n\t\t\t\t\t\t\t\tonClick={() => handleAddColumn(column)}>\r\n\t\t\t\t\t\t\t\t<Typography color='theme.secondary.1000' type='s3'>\r\n\t\t\t\t\t\t\t\t\t{column.header}\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important'}}/>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\tenableAddCustomField &&<MenuItem onClick={handleCustomAddColumn} className='role-drp-list'>\r\n\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t<img src={images.common.addIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t{t('common.addCustomField_label')}\r\n\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t</MenuItem>\r\n }\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{visibleColumns.map((column: any) => (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={column.accessorKey}\r\n\t\t\t\t\t\t\t\tonClick={() => handleVisibleColumn(column)}\r\n\t\t\t\t\t\t\t\tclassName='role-drp-list'>\r\n\t\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t\t<img src={images.common.dotsIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t\t<ListItemText className='title'>{column.header}</ListItemText>\r\n\t\t\t\t\t\t\t\t<ListItemIcon className='eye-icon'>\r\n\t\t\t\t\t\t\t\t\t<img src={images.common.eyeIcon} alt='Eye Icon' />\r\n\t\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important'}}/>\r\n\t\t\t\t\t\t<MenuItem onClick={handleAddButtonClick} className='role-drp-list'>\r\n\t\t\t\t\t\t\t<ListItemIcon className='add-icon'>\r\n\t\t\t\t\t\t\t\t<img src={images.common.addIcon} alt='Add Icon' />\r\n\t\t\t\t\t\t\t</ListItemIcon>\r\n\t\t\t\t\t\t\t<ListItemText className='title'>\r\n\t\t\t\t\t\t\t\t{t('common.addColumn_label')}\r\n\t\t\t\t\t\t\t</ListItemText>\r\n\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\tvariant='body2'\r\n\t\t\t\t\t\t\t\tcolor='text.secondary'\r\n\t\t\t\t\t\t\t\tclassName='eye-icon'>\r\n\t\t\t\t\t\t\t\t<ChevronRightIcon sx={{ fontSize: '1.25rem !important'}}/>\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={rowAnchorEl}\r\n\t\t\t\topen={Boolean(rowAnchorEl)}\r\n\t\t\t\tonClose={handleActionsClose}>\r\n\t\t\t\t{rowActionMenu?.map((option: any) => {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t(option.label === 'Move' &&\r\n\t\t\t\t\t\t\t(row?.is_directory === true || row?.is_directory === 1)) ||\r\n\t\t\t\t\t\t(option.label === 'Download' &&\r\n\t\t\t\t\t\t\t(row?.is_directory === true ||\r\n\t\t\t\t\t\t\t\trow?.is_directory === 1 ||\r\n\t\t\t\t\t\t\t\trow?.drive?.is_directory === true ||\r\n\t\t\t\t\t\t\t\trow?.drive?.is_directory === 1))\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t// return null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\tonClick={async () => {\r\n\t\t\t\t\t\t\t\tawait option.handleAction(row);\r\n\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\ttypeof option.disabled === 'function'\r\n\t\t\t\t\t\t\t\t\t? option.disabled(row)\r\n\t\t\t\t\t\t\t\t\t: Boolean(option.disabled)\r\n\t\t\t\t\t\t\t} \r\n\t\t\t\t\t\t\tsx={{ alignItems:'center', gap: 0.5 }} \r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{option?.icon}\r\n\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\r\n\t\t\t\t\t\t\t\t{typeof option.label === 'function'?option.label(row):option.label}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t\t{destructiveActionMenu?.length > 0 &&\r\n\t\t\t\t<>\r\n\t\t\t\t\t<Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important'}}/>\r\n\t\t\t\t\t<div className='dropdown-inner--DestructiveHeader'>\r\n\t\t\t\t\t\t{destructiveActionMenu?.map((option: any) => (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\toption.handleAction(row);\r\n\t\t\t\t\t\t\t\t\tsetRowAnchorEl(null);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tclassName='dropdown-inner--DestructiveActions'\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\ttypeof option.disabled === 'function'\r\n\t\t\t\t\t\t\t\t\t\t? option.disabled(row)\r\n\t\t\t\t\t\t\t\t\t\t: Boolean(option.disabled)\r\n\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t<Typography type='s4' color='inherit'>\r\n\t\t\t\t\t\t\t\t{typeof option.label === 'function'?option.label(row):option.label}\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</>\r\n\t\t\t\t}\r\n\t\t\t</Menu>\r\n\t\t\t<ConfirmPopUp\r\n\t\t\t\topen={Boolean(rowToDelete)}\r\n\t\t\t\tonClose={() => setRowToDelete(null)}\r\n\t\t\t\tonConfirm={() => handleRowDelete()}\r\n\t\t\t\ttitle='Delete Item'\r\n\t\t\t\tdescription={`Are you sure you want to delete entry ?`}\r\n\t\t\t\tloading={isDeletingRow}\r\n\t\t\t/>\r\n\t\t</TableWrapper>\r\n\t);\r\n});\r\n\r\nexport default MaterialTable;","import { Box, DialogActions, DialogContent, DialogTitle, Divider, Grid, IconButton } from \"@mui/material\";\r\nimport Modal from '../modal/modal';\r\nimport Typography from \"../typography/typography\";\r\nimport DynamicInput from '../form-control/form-builder/form-builder-element/text';\r\nimport DynamicRadioButton from '../form-control/form-builder/form-builder-element/radio-button';\r\nimport { useForm, useWatch } from \"react-hook-form\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { generateValidationSchema, generateValidationSchema1 } from \"./validator\";\r\nimport DynamicSearchSelect from \"../form-control/form-builder/form-builder-element/dynamic-select\";\r\nimport DynamicPhone from '@/components/form-control/form-builder/form-builder-element/phone';\r\nimport Accordion from \"../accordion/accordion\";\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport _ from \"lodash\";\r\nimport './parties-modal.scss';\r\nimport { useAccountingSetting } from \"../../hooks/useAccountSetting\";\r\nimport {\r\n addressColumns,\r\n addressOmitKeys,\r\n addressPayload,\r\n contactColumns,\r\n contactOmitKeys,\r\n contactPayload,\r\n PARTIES_FIELDS,\r\n PARTIES_FORM_ARRAY_NAME,\r\n partyType,\r\n processPartiesPayload\r\n} from \"./utils/constant\";\r\nimport MaterialTable from \"../material-table/material-table\";\r\nimport parsePhoneNumberFromString from \"libphonenumber-js\";\r\nimport Checkbox from \"../checkbox/checkbox\";\r\nimport { transformTableColumns } from \"../../utils/common-utility\";\r\nimport { createParties } from \"../../redux/actionCreator\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { getErrorMessage } from \"../../utils/common\";\r\nimport ModalLoader from \"../loaders/modal-loader\";\r\nimport Button from \"../button/button\";\r\nimport { Close } from \"@mui/icons-material\";\r\n\r\ninterface CustomerVendorModalProps {\r\n isOpen: boolean;\r\n handleModalClose?: () => void;\r\n modalProps?: any;\r\n type?: string;\r\n partyCreated?: () => void;\r\n isLoading?: boolean;\r\n onSave?: (payload: any) => Promise<void>;\r\n setIsOpen?: (value: boolean) => void;\r\n}\r\n\r\ninterface LocationState {\r\n state: any;\r\n country: any;\r\n}\r\n\r\nconst defaultLocationState: LocationState = { state: '', country: '' };\r\n\r\nexport default function CustomerVendorModal({\r\n isOpen,\r\n handleModalClose,\r\n modalProps,\r\n type,\r\n partyCreated,\r\n isLoading,\r\n onSave,\r\n setIsOpen\r\n}: CustomerVendorModalProps) {\r\n\r\n //Hooks\r\n const { t } = useTranslation();\r\n const dispatch = useDispatch();\r\n\r\n //Refs\r\n const locationRef = useRef<LocationState>(defaultLocationState);\r\n\r\n //Local states\r\n const [addressRows, setAddressRows] = useState<any[]>([]);\r\n const [contactRows, setContactRows] = useState<any[]>([]);\r\n const [isCreating, setIsCreating] = useState(false);\r\n\r\n //Form\r\n const {\r\n control,\r\n formState: { errors },\r\n trigger,\r\n getValues,\r\n handleSubmit,\r\n setValue,\r\n resetField,\r\n reset,\r\n watch,\r\n getFieldState\r\n\r\n } = useForm({\r\n defaultValues: {\r\n status: true,\r\n parties: {\r\n account_type: 'Company',\r\n },\r\n },\r\n mode: 'all',\r\n resolver: generateValidationSchema1()\r\n });\r\n\r\n const fieldToUpdate = {\r\n [PARTIES_FIELDS.RECEIVABLE_ACCOUNT]: 'receivable_account',\r\n [PARTIES_FIELDS.TAX_TEMPLATE]: 'default_tax',\r\n };\r\n\r\n useAccountingSetting({\r\n fieldToUpdate,\r\n companyField: PARTIES_FIELDS.COMPANY,\r\n fieldArrayName: PARTIES_FORM_ARRAY_NAME,\r\n formMethods: { control, setValue, watch, getFieldState },\r\n ...({ isUpdateAccount: true } as any),\r\n });\r\n\r\n\r\n const selectedType = useWatch({\r\n control,\r\n name: 'parties.account_type',\r\n });\r\n\r\n //Call Back functions\r\n const tableColumns = useCallback(\r\n (columns: any, tableRows: any) => {\r\n const phoneNumberCache = new Map();\r\n\r\n return transformTableColumns({\r\n columns,\r\n currencySymbol: undefined,\r\n translationFn: t,\r\n enableFooter: false,\r\n redirectionLink: undefined,\r\n redirectionLinkState: undefined,\r\n rows: tableRows,\r\n statusClasses: undefined,\r\n customizeValue: (row, columnAccessorKey, value) => {\r\n switch (columnAccessorKey) {\r\n case 'default_shipping_address':\r\n case 'default_billing_address': {\r\n return (\r\n <Box sx={{ display: \"flex\", gap: 1 }}>\r\n <Checkbox\r\n checked={Boolean(value)}\r\n sx={{ pointerEvents: 'none' }}\r\n />\r\n </Box>\r\n );\r\n }\r\n\r\n case 'phone':\r\n case 'contact_no': {\r\n if (!value) return '';\r\n const phoneKey = `phone-${value}`;\r\n if (!phoneNumberCache.has(phoneKey)) {\r\n const parsed = parsePhoneNumberFromString(`+${value}`);\r\n phoneNumberCache.set(phoneKey, parsed?.nationalNumber || '');\r\n }\r\n return phoneNumberCache.get(phoneKey);\r\n }\r\n\r\n case 'country_code': {\r\n const phone = row?.original?.phone || row?.original?.contact_no;\r\n if (!phone) return '';\r\n const countryCodeKey = `country-${phone}`;\r\n if (!phoneNumberCache.has(countryCodeKey)) {\r\n const parsed = parsePhoneNumberFromString(`+${phone}`);\r\n phoneNumberCache.set(countryCodeKey,\r\n parsed?.countryCallingCode ? `+${parsed.countryCallingCode}` : ''\r\n );\r\n }\r\n return phoneNumberCache.get(countryCodeKey);\r\n }\r\n\r\n default:\r\n return value;\r\n }\r\n }\r\n });\r\n },\r\n [t]\r\n );\r\n\r\n //Methods\r\n\r\n const handleRowOperation = async (\r\n eData: any,\r\n state: any[],\r\n setState: React.Dispatch<React.SetStateAction<any[]>>,\r\n isAddress: boolean\r\n ) => {\r\n try {\r\n const { values, row } = eData;\r\n const editRow = row.index >= 0;\r\n const payload = isAddress ? addressPayload : contactPayload;\r\n\r\n const processedValues: any = {};\r\n for (const key in payload) {\r\n if (_.has(values, key)) {\r\n processedValues[key] = values?.[key] ? values[key] : null;\r\n }\r\n }\r\n\r\n if (isAddress) {\r\n const dropdowns = {\r\n c: locationRef.current?.country,\r\n s: locationRef.current?.state,\r\n };\r\n\r\n const validatedValues = await validateAddressDefaults(processedValues, state, row.index);\r\n const addressValues = {\r\n ...validatedValues,\r\n country_name: dropdowns.c?.name,\r\n country: dropdowns.c?.id,\r\n state_name: dropdowns.s?.name,\r\n state: dropdowns.s?.id,\r\n country_data: dropdowns.c,\r\n state_data: dropdowns.s,\r\n country_id: dropdowns.c?.id,\r\n state_id: dropdowns.s?.id,\r\n };\r\n\r\n if (editRow) {\r\n return setState(state.map((ar, i) => i === row.index ? { ...ar, ...addressValues } : ar));\r\n }\r\n return setState([...state, addressValues]);\r\n }\r\n\r\n if (editRow) {\r\n return setState(state.map((ar, i) => i === row.index ? { ...ar, ...processedValues } : ar));\r\n }\r\n return setState([...state, processedValues]);\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n };\r\n\r\n const validateAddressDefaults = async (values: any, state: any[], index: number) => {\r\n let updatedValues = { ...values };\r\n const validate = (type: \"shipping\" | \"billing\") => {\r\n const u_data = [...state];\r\n const field = type === 'shipping' ? 'default_shipping_address' : 'default_billing_address';\r\n if (index >= 0) {\r\n u_data.splice(index, 1);\r\n }\r\n const hasDefault = u_data.some((d: any) => d?.[field]);\r\n\r\n if (hasDefault && values?.[field]) {\r\n throw new Error(\r\n `Another address is already marked as the default ${type} address. Please uncheck that before selecting this one`\r\n );\r\n }\r\n else if (!hasDefault) {\r\n updatedValues = {\r\n ...updatedValues,\r\n [field]: values?.[field] || state?.length == 0 ? 1 : 0,\r\n };\r\n }\r\n\r\n };\r\n\r\n await validate(\"shipping\");\r\n await validate(\"billing\");\r\n\r\n return updatedValues;\r\n };\r\n\r\n const deleteRow = async (\r\n state: any[],\r\n setState: React.Dispatch<React.SetStateAction<any[]>>,\r\n row: any\r\n ) => {\r\n const rowIndex = row.index;\r\n const updatedData = state.filter((_, i) => i !== rowIndex);\r\n setState(updatedData);\r\n return Promise.resolve();\r\n };\r\n\r\n const onChangeAddressTableField = async (e: any, t: any, r: any, col: any, selectedData: any) => {\r\n const fieldName = e?.target?.name;\r\n let updatedValues: any = null;\r\n\r\n if (col?.editProperties?.field_name) {\r\n locationRef.current = {\r\n ...locationRef.current,\r\n [col.editProperties.field_name]: selectedData,\r\n };\r\n }\r\n\r\n if (fieldName === 'country') {\r\n updatedValues = {\r\n ...r._valuesCache,\r\n country: selectedData.id,\r\n country_id: selectedData.id,\r\n state: null,\r\n state_id: null,\r\n state_name: null,\r\n };\r\n } else if (fieldName === 'state') {\r\n updatedValues = {\r\n ...r._valuesCache,\r\n state: selectedData.id,\r\n state_id: selectedData.id\r\n };\r\n } else if (fieldName === 'phone') {\r\n const p = parsePhoneNumberFromString(`+${e}`);\r\n updatedValues = {\r\n ...r._valuesCache,\r\n country_code: p?.countryCallingCode ? `+${p.countryCallingCode}` : '',\r\n };\r\n }\r\n\r\n const summaryFields = [\r\n 'contact_name',\r\n 'street_1',\r\n 'street_2',\r\n 'street_3',\r\n 'zip_code',\r\n 'city',\r\n 'state',\r\n 'country'\r\n ];\r\n\r\n if (r._valuesCache) {\r\n const fieldValues = summaryFields.map(field => {\r\n if (field === 'country') {\r\n return locationRef.current?.country?.name || '';\r\n } else if (field === 'state') {\r\n return locationRef.current?.state?.name || '';\r\n } else if (field === fieldName) {\r\n return e.target?.value || '';\r\n }\r\n return r._valuesCache?.[field] || '';\r\n });\r\n\r\n const summary = fieldValues.reduce((acc, val, idx) => {\r\n if (!val) return acc;\r\n if (!acc) return val;\r\n\r\n val = val?.name || val;\r\n acc = acc?.name || acc;\r\n\r\n return [2, 3].includes(idx) ? `${acc} ${val}` : `${acc}, \\n${val}`;\r\n }, '');\r\n\r\n r._valuesCache.summary = summary;\r\n }\r\n\r\n if (updatedValues) {\r\n r.getAllCells().forEach((c: any) => {\r\n if (_.has(updatedValues, c.column.id)) {\r\n r._valuesCache[c.column.id] = updatedValues[c.column.id];\r\n }\r\n });\r\n }\r\n\r\n return r._valuesCache;\r\n };\r\n\r\n\r\n\r\n const EMAIL_REGEX =\r\n /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\r\n const onSubmit = async () => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n\r\n const values = getValues();\r\n const formValues = values?.[PARTIES_FORM_ARRAY_NAME];\r\n let emailArray: string[] = [];\r\n\r\n if (formValues?.email_ids) {\r\n emailArray = formValues?.email_ids\r\n ?.split(/\\s*,\\s*/)\r\n .map((email_id: any) => email_id?.replaceAll(',', '')?.trim())\r\n .filter((email_id: any) => email_id.match(EMAIL_REGEX));\r\n }\r\n\r\n const payload = {\r\n party: {\r\n ...processPartiesPayload(formValues),\r\n email_ids: emailArray,\r\n account_type: selectedType,\r\n status: 1,\r\n type,\r\n company_id: formValues?.[PARTIES_FIELDS.COMPANY]?.[0] || null\r\n \r\n }\r\n };\r\n if (typeof onSave == 'function') {\r\n onSave?.(payload);\r\n return;\r\n }\r\n setIsCreating(true);\r\n try {\r\n\r\n const res = await dispatch(createParties(payload));\r\n\r\n if (res?.meta?.requestStatus === 'fulfilled') {\r\n enqueueSnackbar(`${type} ${t('common.party.msg.success')}`);\r\n closeModal();\r\n partyCreated();\r\n } else if (res?.meta?.requestStatus === 'rejected') {\r\n const errorMessage = getErrorMessage(res?.error?.message);\r\n enqueueSnackbar(errorMessage, { variant: 'error' });\r\n }\r\n } finally {\r\n setIsCreating(false);\r\n }\r\n };\r\n\r\n const closeModal = () => {\r\n resetForm()\r\n setAddressRows([]);\r\n setContactRows([]);\r\n handleModalClose?.();\r\n setIsOpen?.(false);\r\n }\r\n const resetForm = () => {\r\n reset({ [PARTIES_FORM_ARRAY_NAME]: {} });\r\n }\r\n\r\n //Use Effect\r\n useEffect(() => {\r\n const addressData = addressRows.map(a => _.omit(a, addressOmitKeys));\r\n setValue(`${PARTIES_FORM_ARRAY_NAME}.${PARTIES_FIELDS.ADDRESS}`, addressData);\r\n }, [addressRows, setValue]);\r\n\r\n useEffect(() => {\r\n const contactData = contactRows.map(c => _.omit(c, contactOmitKeys));\r\n setValue(`${PARTIES_FORM_ARRAY_NAME}.${PARTIES_FIELDS.CONTACTS}`, contactData);\r\n }, [contactRows, setValue]);\r\n\r\n useEffect(() => {\r\n setIsCreating(isLoading)\r\n }, [isLoading]);\r\n\r\n\r\n useEffect(() => {\r\n if (selectedType === 'Individual') {\r\n // Clear Company fields\r\n resetField('parties.company_name');\r\n resetField('parties.vat_number');\r\n resetField('parties.crn');\r\n }\r\n\r\n if (selectedType === 'Company') {\r\n // Clear Individual fields\r\n resetField('parties.first_name');\r\n resetField('parties.last_name');\r\n }\r\n }, [selectedType, resetField]);\r\n\r\n const basicDetailsSection = useMemo(() => (\r\n <Accordion\r\n title={\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {t(\"common.party.sections.basic_details\")}\r\n </Typography>\r\n }\r\n accordionProps={{\r\n defaultExpanded: true,\r\n className: \"form--Accordion\",\r\n }}\r\n >\r\n <Grid container spacing={2}>\r\n\r\n <Grid item xs={12} sm={12}>\r\n <DynamicRadioButton\r\n label=''\r\n name={PARTIES_FIELDS.TYPE}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n options={partyType}\r\n display='row'\r\n title={t(t('common.party.fields.type'))}\r\n titlePosition='start'\r\n position={2} />\r\n </Grid>\r\n\r\n {selectedType === \"Individual\" && (\r\n <>\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.firstName_label')}\r\n name={PARTIES_FIELDS.FIRST_NAME}\r\n placeholder={t('common.party.fields.firstName_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.lastName_label')}\r\n name={PARTIES_FIELDS.LAST_NAME}\r\n placeholder={t('common.party.fields.lastName_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n </>\r\n )}\r\n\r\n\r\n {selectedType === \"Company\" && (\r\n <>\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.company_name_label')}\r\n name={PARTIES_FIELDS.COMPANY_NAME}\r\n placeholder={t('common.party.fields.company_name_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n\r\n\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.vat_number_label')}\r\n name={PARTIES_FIELDS.VAT_NUMBER}\r\n placeholder={t('common.party.fields.vat_number_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.crn_label')}\r\n name={PARTIES_FIELDS.CRN}\r\n placeholder={t('common.party.fields.crn_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n </>\r\n )}\r\n\r\n <Grid item xs={12} sm={6}>\r\n <DynamicPhone\r\n type=\"text\"\r\n label={t('common.party.fields.contact_label')}\r\n name={PARTIES_FIELDS.CONTACT_NO}\r\n placeholder={t('common.party.fields.contact_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6}>\r\n <DynamicInput\r\n label={t('common.party.fields.email_label')}\r\n name={PARTIES_FIELDS.EMAIL_IDS}\r\n placeholder={t('common.party.fields.email_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/*Entity Name */}\r\n <Grid item xs={12} sm={6}>\r\n <DynamicSearchSelect\r\n label={t('common.party.fields.company_label')}\r\n apiType=\"company\"\r\n selectedLabel='Companies'\r\n name={PARTIES_FIELDS.COMPANY}\r\n placeholder={t('common.party.fields.company_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n is_multiselect\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6}>\r\n <DynamicSearchSelect\r\n label={t('common.party.fields.currency_label')}\r\n apiType='currency'\r\n selectedLabel='Currency'\r\n name={PARTIES_FIELDS.CURRENCY}\r\n placeholder={t('common.party.fields.currency_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n is_multiselect\r\n />\r\n </Grid>\r\n\r\n </Grid>\r\n </Accordion>\r\n ), [t, control, selectedType]);\r\n\r\n const accountingSection = useMemo(() => (\r\n <Accordion\r\n title={\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {t(\"common.party.sections.accounting\")}\r\n </Typography>\r\n }\r\n accordionProps={{\r\n defaultExpanded: true,\r\n className: \"form--Accordion\",\r\n }}\r\n >\r\n <Grid container spacing={2}>\r\n <Grid item xs={12} sm={6}>\r\n <DynamicSearchSelect\r\n label={t('common.party.fields.receivable_account_label')}\r\n apiType=\"accounts\"\r\n selectedLabel='Account'\r\n name={PARTIES_FIELDS.RECEIVABLE_ACCOUNT}\r\n placeholder={t('common.party.fields.receivable_account_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n customeFilter={{ '&account_type.eq': 'Receivable' }}\r\n options={[]}\r\n />\r\n </Grid>\r\n <Grid item xs={12} sm={6}>\r\n <DynamicSearchSelect\r\n label={t('common.party.fields.tax_template_label')}\r\n apiType=\"taxTemplate\"\r\n selectedLabel='Tax Template'\r\n name={PARTIES_FIELDS.TAX_TEMPLATE}\r\n placeholder={t('common.party.fields.tax_template_placeholder')}\r\n fieldArrayName={PARTIES_FORM_ARRAY_NAME}\r\n formControl={control}\r\n required\r\n options={[]}\r\n />\r\n </Grid>\r\n </Grid>\r\n </Accordion>\r\n ), [t, control]);\r\n\r\n const addressSection = useMemo(() => (\r\n <Accordion\r\n title={\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {t(\"common.party.sections.address\")}\r\n <span className='errorIndicator'>*</span>\r\n {errors?.[PARTIES_FORM_ARRAY_NAME]?.[PARTIES_FIELDS.ADDRESS] && (\r\n <span className='error'>\r\n {errors?.[PARTIES_FORM_ARRAY_NAME]?.[PARTIES_FIELDS.ADDRESS]?.message}\r\n </span>\r\n )}\r\n </Typography>\r\n }\r\n accordionProps={{\r\n defaultExpanded: true,\r\n className: \"form--Accordion\",\r\n }}\r\n >\r\n <Grid spacing={4}>\r\n <Grid item xs={12}>\r\n <MaterialTable\r\n rows={[...addressRows]}\r\n columns={tableColumns(addressColumns)}\r\n paginationModel={{ pageNo: 1, limit: 10 }}\r\n totalPages={20}\r\n enableColumnDragging={false}\r\n isResetRow={false}\r\n columnOrder={['mrt-row-select']}\r\n enableRowSelection={false}\r\n enableBottomToolbar\r\n disableDefaultActionColumn\r\n editDisplayMode='row'\r\n enableRowCreate\r\n onCreateRow={(data) => handleRowOperation(data, addressRows, setAddressRows, true)}\r\n onEditRow={(data) => handleRowOperation(data, addressRows, setAddressRows, true)}\r\n onDeleteRow={(row) => deleteRow(addressRows, setAddressRows, row)}\r\n onChangeRowField={onChangeAddressTableField}\r\n />\r\n </Grid>\r\n </Grid>\r\n </Accordion>\r\n // eslint-disable-next-line\r\n ), [t, addressRows, tableColumns, errors]);\r\n\r\n const contactSection = useMemo(() => (\r\n <Accordion\r\n title={\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n {t(\"common.party.sections.contact\")}\r\n <span className='errorIndicator'>*</span>\r\n {errors?.[PARTIES_FORM_ARRAY_NAME]?.[PARTIES_FIELDS.CONTACTS] && (\r\n <span className='error'>\r\n {errors?.[PARTIES_FORM_ARRAY_NAME]?.[PARTIES_FIELDS.CONTACTS]?.message}\r\n </span>\r\n )}\r\n </Typography>\r\n }\r\n accordionProps={{\r\n defaultExpanded: true,\r\n className: \"form--Accordion\",\r\n }}\r\n >\r\n <Grid spacing={4}>\r\n <Grid item xs={12}>\r\n\r\n <MaterialTable\r\n rows={[...contactRows]}\r\n columns={tableColumns(contactColumns)}\r\n paginationModel={{ pageNo: 1, limit: 10 }}\r\n totalPages={20}\r\n enableColumnDragging={false}\r\n isResetRow={false}\r\n columnOrder={['mrt-row-select']}\r\n enableRowSelection={false}\r\n enableBottomToolbar\r\n disableDefaultActionColumn\r\n editDisplayMode='row'\r\n enableRowCreate\r\n onCreateRow={(data) => handleRowOperation(data, contactRows, setContactRows, false)}\r\n onEditRow={(data) => handleRowOperation(data, contactRows, setContactRows, false)}\r\n onDeleteRow={(row) => deleteRow(contactRows, setContactRows, row)}\r\n onChangeRowField={onChangeAddressTableField}\r\n />\r\n </Grid>\r\n </Grid>\r\n </Accordion>\r\n // eslint-disable-next-line\r\n ), [t, contactRows, tableColumns, errors]);\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={closeModal}\r\n maxWidth='lg'\r\n fullWidth\r\n sx={{ overflowY: 'hidden' }}\r\n {...modalProps}\r\n >\r\n {isCreating && <ModalLoader />}\r\n <form onSubmit={handleSubmit(onSubmit)} className=\"scroll-container\" style={{ position: 'relative', overflow: 'auto' }}>\r\n <DialogTitle className='itemEntryModal--DialogTitle'\r\n >\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {`Add ${type}`}\r\n </Typography>\r\n <IconButton onClick={closeModal}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n\r\n <DialogContent>\r\n {basicDetailsSection}\r\n <Divider className='form--SectionDivider' />\r\n {addressSection}\r\n <Divider className='form--SectionDivider' />\r\n {contactSection}\r\n <Divider className='form--SectionDivider' />\r\n {accountingSection}\r\n </DialogContent>\r\n\r\n <DialogActions className='itemEntryModal--DialogAction' sx={{\r\n position: 'sticky',\r\n bottom: 0,\r\n backgroundColor: 'white',\r\n zIndex: 1,\r\n padding: '8px 24px',\r\n justifyContent: 'end'\r\n }}>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='itemEntryModal--DialogAction--WhiteBtn'\r\n onClick={closeModal}\r\n >\r\n {t('common.cancel')}\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n onClick={handleSubmit(onSubmit)}\r\n >\r\n {t('common.save')}\r\n </Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </Modal>\r\n );\r\n};\r\n","import * as Yup from 'yup';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport { PARTIES_FIELDS, PARTIES_FORM_ARRAY_NAME } from './utils/constant';\r\n\r\nexport const generateValidationSchema = () => {\r\n\treturn yupResolver(\r\n\t\tYup.object().shape({\r\n\t\t\t[PARTIES_FORM_ARRAY_NAME]: Yup.object().shape({\r\n\t\t\t\t[PARTIES_FIELDS.FIRST_NAME]: Yup.string().required('First name is required'),\r\n\t\t\t\t[PARTIES_FIELDS.LAST_NAME]: Yup.string().required('Last name is required'),\r\n\t\t\t\t[PARTIES_FIELDS.COMPANY]: Yup.array().required('Company is required'),\r\n\t\t\t\t[PARTIES_FIELDS.CURRENCY]: Yup.array().required('Currency is required'),\r\n\t\t\t\t[PARTIES_FIELDS.ADDRESS]: Yup.array()\r\n\t\t\t\t\t.required('Please add atleast one address')\r\n\t\t\t\t\t.min(1, 'Please add atleast one address'),\r\n\t\t\t\t[PARTIES_FIELDS.CONTACTS]: Yup.array()\r\n\t\t\t\t\t.required('Please add atleast one Contact')\r\n\t\t\t\t\t.min(1, 'Please add atleast one Contact')\r\n\t\t\t})\r\n\t\t})\r\n\t);\r\n};\r\n\r\nexport const generateValidationSchema1 = () => {\r\n\treturn yupResolver(\r\n\t\tYup.object().shape({\r\n\t\t\t[PARTIES_FORM_ARRAY_NAME]: Yup.object().shape({\r\n\t\t\t\t[PARTIES_FIELDS.TYPE]: Yup.string().required('Customer type is required'),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.FIRST_NAME]: Yup.string().when('account_type', {\r\n\t\t\t\t\tis: (val: any) => val === 'Individual',\r\n\t\t\t\t\tthen: () => Yup.string().required('First name is required'),\r\n\t\t\t\t\totherwise: () => Yup.string().optional().nullable()\r\n\t\t\t\t}),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.LAST_NAME]: Yup.string().when('account_type', {\r\n\t\t\t\t\tis: (val: any) => val === 'Individual',\r\n\t\t\t\t\tthen: () => Yup.string().required('Last name is required'),\r\n\t\t\t\t\totherwise: () => Yup.string().optional().nullable()\r\n\t\t\t\t}),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.COMPANY_NAME]: Yup.string().when('account_type', {\r\n\t\t\t\t\tis: (val: any) => val === 'Company',\r\n\t\t\t\t\tthen: () => Yup.string().required('Company is required'),\r\n\t\t\t\t\totherwise: () => Yup.string().optional().nullable()\r\n\t\t\t\t}),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.VAT_NUMBER]: Yup.string().when('account_type', {\r\n\t\t\t\t\tis: (val: any) => val === 'Company',\r\n\t\t\t\t\tthen: () => Yup.string().required('vat_number is required for type Company'),\r\n\t\t\t\t\totherwise: () => Yup.string().optional().nullable()\r\n\t\t\t\t}),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.CRN]: Yup.string().when('account_type', {\r\n\t\t\t\t\tis: (val: any) => val === 'Company',\r\n\t\t\t\t\tthen: () => Yup.string().required('crn is required for type Company'),\r\n\t\t\t\t\totherwise: () => Yup.string().optional().nullable()\r\n\t\t\t\t}),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.COMPANY]: Yup.array().required('Company is required'),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.CURRENCY]: Yup.array().required('Currency is required'),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.ADDRESS]: Yup.array().nullable().notRequired(),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.CONTACTS]: Yup.array()\r\n\t\t\t\t\t.required('Please add atleast one Contact')\r\n\t\t\t\t\t.min(1, 'Please add atleast one Contact'),\r\n\r\n\t\t\t\t[PARTIES_FIELDS.RECEIVABLE_ACCOUNT]: Yup.number().required('Receivable account is required'),\r\n\t\t\t\t[PARTIES_FIELDS.TAX_TEMPLATE]: Yup.number().required('Tax template is required')\r\n\t\t\t})\r\n\r\n\t\t})\r\n\t);\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { Controller } from 'react-hook-form';\nimport {\n\tBox,\n\tDivider,\n\tIconButton,\n\tInputAdornment,\n\tMenuItem,\n\tMenuItemProps,\n\tOutlinedInput\n} from '@mui/material';\nimport PropTypes from 'prop-types';\n\nimport Select from '../../../select/select';\nimport ChipOrPlaceholder from './chip-or-placeholder';\nimport Checkbox from '../../../checkbox/checkbox';\nimport Typography from '../../../typography/typography';\nimport Chip from '../../../chip/chip';\nimport { MoreIcon } from '../../../icons';\nimport './element.scss';\nimport { Add, Close } from '@mui/icons-material';\nimport { useTranslation } from \"react-i18next\";\n\ninterface IMenuItems extends MenuItemProps {\n\toptions: any[];\n\tmultiple: boolean;\n\tplaceholder: string;\n\twith_checkboxes: boolean;\n\tvalues: string | string[];\n\tfield: any;\n}\n\nconst generateMenuItems = ({\n\toptions,\n\tmultiple,\n\tplaceholder,\n\twith_checkboxes,\n\tvalues,\n\tfield\n}: IMenuItems) => {\n\tconst items: React.ReactElement[] = [];\n\tif (!multiple) {\n\t\titems.push(\n\t\t\t<MenuItem disabled value='' sx={{ opacity: `0 !important`, height: `0 !important`, p: `0 !important`, m: `0 !important` }}>\n\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t<em>{placeholder}</em>\n\t\t\t\t</Typography>\n\t\t\t</MenuItem>\n\t\t);\n\t}\n\toptions?.forEach((option, index) => {\n\t\titems.push(\n\t\t\t<MenuItem\n\t\t\t\tvalue={option.value}\n\t\t\t\tkey={index}\n\t\t\t\tdisabled={Boolean(option.disabled)}\n\t\t\t\tclassName={option?.isGroup ? 'select--MenuItemHeader' : ''}>\n\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tchecked={Boolean(values && values?.indexOf(option.value) > -1)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</MenuItem>\n\t\t);\n\t\tif (option?.isGroup && Array.isArray(option?.options)) {\n\t\t\toption.options.forEach((opt) => {\n\t\t\t\titems.push(\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tvalue={opt.value}\n\t\t\t\t\t\tdisabled={Boolean(opt.disabled)}\n\t\t\t\t\t\tsx={{ pl: 5 }}\n\t\t\t\t\t\tkey={`${option.value}-${opt.value}`}>\n\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 1 }}>\n\t\t\t\t\t\t\t{multiple && with_checkboxes && (\n\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\tchecked={Boolean(values && values?.indexOf(opt.value) > -1)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Typography type='s3' color='theme.secondary.1000'>\n\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n\tif (field.enable_footer) {\n\t\titems.push(\n\t\t\t<Box>\n\t\t\t\t<Divider flexItem />\n\t\t\t\t<MenuItem sx={{ gap: 1 }} onClick={field.onFooterClick}>\n\t\t\t\t\t<Add fontSize='small' />\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>\n\t\t\t\t\t\tCreate New {field.label}\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuItem>\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn items;\n};\nconst SelectedItems = ({\n\tdata,\n\toptions\n}: {\n\tdata: string[];\n\toptions: any[];\n}) => {\n\tconst displayTitle = data.map(\n\t\t(selectedItem) =>\n\t\t\toptions?.find((option: any) => option.value === selectedItem)?.label ||\n\t\t\tselectedItem\n\t);\n\tconst fDisplayTitle = displayTitle.filter(Boolean)\n\treturn (\n\t\t<Typography\n\t\t\ttype='s4'\n\t\t\tcolor='inherit'\n\t\t\tsx={{ display: 'flex', gap: 1, alignItems: 'center', mt: 0.5 }}>\n\t\t\t{fDisplayTitle.slice(0.4).join(', ')}\n\t\t\t{data.length > 4 && (\n\t\t\t\t<Chip variant='outlined' type='normal' label={<MoreIcon />} />\n\t\t\t)}\n\t\t</Typography>\n\t);\n};\n\nconst DynamicSelect = React.memo((props: any) => {\n\tconst [options, setOptions] = useState([]);\n\tconst [selectedValue, setSelectedValue] = useState(null);\n\tconst { handleOptions } = props;\n\tuseEffect(() => {\n\t\tif (handleOptions) {\n\t\t\thandleOptions(selectedValue);\n\t\t}\n\t}, [handleOptions, selectedValue]);\n\tconst handleSearch = (search: string) => {\n\t\tif (props.options?.length && search) {\n\t\t\tconst searchedOptions = props.options.filter((opt) =>\n\t\t\t\tReact.isValidElement(opt.label)\n\t\t\t\t\t? opt?.searchLabel?.toLowerCase()?.includes(search.toLowerCase())\n\t\t\t\t\t: opt.label.toLowerCase().includes(search.toLowerCase())\n\t\t\t);\n\t\t\tsetOptions(searchedOptions);\n\t\t} else {\n\t\t\tsetOptions(props.options);\n\t\t}\n\t};\n\n\tconst removeUndefine = (selectOptions: any[]) => {\n\t\treturn selectOptions?.filter((option) => option);\n\t};\n\tconst handleSetOptions = useCallback(() => {\n\t\tsetOptions(props.options);\n\t}, [props.options]);\n\n\tuseEffect(() => {\n\t\thandleSetOptions();\n\t}, [handleSetOptions]);\n\t\tconst { t } = useTranslation();\n\t\n\treturn (\n\t\t<Controller\n\t\t\tcontrol={props.formControl}\n\t\t\tname={`${props.fieldArrayName}.${props.name}`}\n\t\t\trender={({ field, fieldState }) => (\n\t\t\t\t<>\n\t\t\t\t\t{props.placeholder === 'Select Currency'\n\t\t\t\t\t\t? setSelectedValue(field.value)\n\t\t\t\t\t\t: setSelectedValue(null)}\n\t\t\t\t\t<Select\n\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t// onFocus={() => {\n\t\t\t\t\t\t// \tsetOptions(props.options);\n\t\t\t\t\t\t// }}\n\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\tdataPosition={props.position}\n\t\t\t\t\t\tdataName={`${props.fieldArrayName}.${props.name}`}\n\t\t\t\t\t\tplaceholder={props.placeholder}\n\t\t\t\t\t\tlabel={props.label}\n\t\t\t\t\t\tvalue={\n\t\t\t\t\t\t\tfield.value?.id || field.value?.label || field.value || (props.is_multiselect ? [] : '')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefaultValue={\n\t\t\t\t\t\t\tprops.defaultValue || (props.is_multiselect ? [] : '')\n\t\t\t\t\t\t}\n\t\t\t\t\t\trequired={props.formType === 'builder' ? false : props.required}\n\t\t\t\t\t\tsize={props.size || 'small'}\n\t\t\t\t\t\tmultiple={props.is_multiselect || false}\n\t\t\t\t\t\tdisabled={props.disabled}\n\t\t\t\t\t\tvariant='outlined'\n\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\tprops.is_multiselect && removeUndefine(field.value)?.length\n\t\t\t\t\t\t\t\t? 'MultiSelect'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\trenderValue={(selected: string | string[]) => (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{Array.isArray(selected) ? (\n\t\t\t\t\t\t\t\t\t<ChipOrPlaceholder\n\t\t\t\t\t\t\t\t\t\tselectedLabel={props.selectedLabel}\n\t\t\t\t\t\t\t\t\t\tdata={removeUndefine(selected)}\n\t\t\t\t\t\t\t\t\t\tplaceholder={props.placeholder}\n\t\t\t\t\t\t\t\t\t\tonDelete={props?.onChipRemove}\n\t\t\t\t\t\t\t\t\t\tdisabled={props.disabled}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\toptions?.find(\n\t\t\t\t\t\t\t\t\t\t(option: any) =>\n\t\t\t\t\t\t\t\t\t\t\t(option.value?.id || option.value) === selected\n\t\t\t\t\t\t\t\t\t)?.label ||\n\t\t\t\t\t\t\t\t\tselected ||\n\t\t\t\t\t\t\t\t\tprops.placeholder\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tsearchPlaceholder={`${t('common.search')} ${props.label}`}\n\t\t\t\t\t\thandleSearch={handleSearch}\n\t\t\t\t\t\terror={Boolean(fieldState.error?.message)}\n\t\t\t\t\t\thelperText={fieldState.error?.message || ''}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\tinput={\n\t\t\t\t\t\t\t!props?.is_multiselect && !props.disabled && field?.value ? (\n\t\t\t\t\t\t\t\t<OutlinedInput\n\t\t\t\t\t\t\t\t\tlabel=''\n\t\t\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t\t\t<InputAdornment position='end'>\n\t\t\t\t\t\t\t\t\t\t\t{field.value && (\n\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label='clear selection'\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => field.onChange(null)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tedge='end'\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ mr: 1.5 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize='small'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Close sx={{ fontSize: '1rem' }} />\n\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\tloading={props?.is_loading}>\n\t\t\t\t\t\t{generateMenuItems({\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\tmultiple: Boolean(props.is_multiselect),\n\t\t\t\t\t\t\tplaceholder: props.placeholder,\n\t\t\t\t\t\t\tvalues: field.value,\n\t\t\t\t\t\t\twith_checkboxes: true,\n\t\t\t\t\t\t\tfield: props\n\t\t\t\t\t\t})}\n\t\t\t\t\t</Select>\n\t\t\t\t\t{props.is_multiselect && Array.isArray(field?.value) && (\n\t\t\t\t\t\t<SelectedItems data={field.value} options={options} />\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t/>\n\t);\n});\n\nDynamicSelect.propTypes = {\n\tname: PropTypes.string.isRequired,\n\tplaceholder: PropTypes.string.isRequired,\n\tlabel: PropTypes.string.isRequired,\n\tsize: PropTypes.string,\n\toptions: PropTypes.arrayOf(\n\t\tPropTypes.shape({\n\t\t\tlabel: PropTypes.string,\n\t\t\tvalue: PropTypes.string\n\t\t})\n\t).isRequired,\n\tformControl: PropTypes.shape({\n\t\tregister: PropTypes.func.isRequired,\n\t\tsetValue: PropTypes.func\n\t}).isRequired,\n\tdefaultValue: PropTypes.string,\n\tfieldArrayName: PropTypes.string,\n\tid: PropTypes.string,\n\trequired: PropTypes.bool,\n\tis_multiselect: PropTypes.bool,\n\tposition: PropTypes.number,\n\tformType: PropTypes.string,\n\ttypeOfField: PropTypes.string,\n\tdisabled: PropTypes.bool,\n\tonChipRemove: PropTypes.func,\n\tenable_footer: PropTypes.bool,\n\tfooter_action: PropTypes.string,\n\tonFooterClick: PropTypes.any,\n\tis_loading: PropTypes.bool,\n\tselectedLabel: PropTypes.string\n};\n\nexport { DynamicSelect };\nexport default DynamicSelect;\n","// import { Controller } from 'react-hook-form';\nimport PropTypes from \"prop-types\";\nimport Button from \"../../../button/button\";\n\n// { control, index }\n\nconst DynamicButton = (props: any) => {\n const { type, onClick, className, disable, ...rest } = props;\n\n return (\n <Button\n type={type}\n onClick={onClick}\n className={className}\n {...rest}\n disabled={disable}\n >\n {props.text}\n </Button>\n );\n};\n\nDynamicButton.propTypes = {\n text: PropTypes.string.isRequired,\n onClick: PropTypes.func,\n type: PropTypes.string,\n style: PropTypes.object,\n variant: PropTypes.string,\n className: PropTypes.string,\n disable: PropTypes.bool,\n startIcon: PropTypes.node,\n};\n\nexport { DynamicButton };\nexport default DynamicButton;\n","import React from 'react';\nimport { Control, Controller } from 'react-hook-form';\nimport Checkbox from '../../../checkbox/checkbox';\nimport Typography from '../../../typography/typography';\nimport { CheckboxProps, Stack, StackProps } from '@mui/material';\nimport { useLanguage } from '../../../../hooks/useLangauge';\n\ninterface IDynamicCheckbox {\n\tformControl: Control<any>;\n\tfieldArrayName: string;\n\tname: string;\n\tlabel?: string;\n\tposition?: number;\n\tdisabled?: boolean;\n\ttitlePosition?: 'start' | 'end';\n\ttypeOfField?: string;\n\ttitle: string;\n\ttitleColor?: string; // New prop for title color\n\tcheckboxProps?: CheckboxProps;\n\tstackProps?: StackProps;\n}\n\nconst DynamicCheckBox: React.FC<IDynamicCheckbox> = ({\n\tformControl,\n\tfieldArrayName,\n\tname,\n\tlabel,\n\tposition,\n\tdisabled,\n\ttitlePosition = 'end',\n\ttitle,\n\ttitleColor = 'theme.secondary.800', // Default color\n\tcheckboxProps,\n\tstackProps,\n}) => {\n\tconst {isRtl}=useLanguage();\n\treturn (\n\t\t<Controller\n\t\t\tcontrol={formControl}\n\t\t\tname={`${fieldArrayName}.${name}`}\n\t\t\trender={({ field }) => (\n\t\t\t\t<>\n\t\t\t\t\t{label && (\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\ttype='s5'\n\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\tcolor='theme.secondary.800'\n\t\t\t\t\t\t\tdata-position={position}\n\t\t\t\t\t\t\tsx={{ mb: 0.5 }}>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<Stack direction='row' spacing={isRtl?'':0.25} alignItems='center' {...stackProps}>\n\t\t\t\t\t\t{titlePosition === 'start' && (\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\tcolor={titleColor}> {/* Use titleColor prop here */}\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tchecked={Boolean(field.value)}\n\t\t\t\t\t\t\tonChange={field.onChange}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tsize='small'\n\t\t\t\t\t\t\tsx={{ m: 1 }}\n\t\t\t\t\t\t\t{...checkboxProps}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{titlePosition === 'end' && (\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\ttype='s4'\n\t\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\t\tcolor={titleColor}> {/* Use titleColor prop here */}\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</>\n\t\t\t)}\n\t\t/>\n\t);\n};\n\nexport default DynamicCheckBox;","/* eslint-disable no-mixed-spaces-and-tabs */\r\nimport { Controller/* , useFormContext */ } from 'react-hook-form';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useMemo } from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nimport './element.scss';\r\nimport DatePicker from '../../../date-picker/date-picker';\r\n\r\ninterface DynamicDateProps {\r\n formControl: any;\r\n name: string;\r\n label: string;\r\n fieldArrayName?: string;\r\n required?: boolean;\r\n position?: number;\r\n formType?: string;\r\n placeholder?: string;\r\n defaultValue?: any;\r\n is_future_dates_allowed?: boolean;\r\n is_past_dates_allowed?: boolean;\r\n typeOfField?: string;\r\n disabled?: boolean;\r\n min_date?: any;\r\n max_date?: any;\r\n}\r\n\r\nconst DynamicDate = React.memo<DynamicDateProps>((props) => {\r\n // const formContext = useFormContext();\r\n\r\n // Memoize field name to prevent unnecessary recalculations\r\n const fieldName = useMemo(() =>\r\n `${props.fieldArrayName}.${props.name}`,\r\n [props.fieldArrayName, props.name]\r\n );\r\n\r\n // Memoize date calculations to prevent recalculation on every render\r\n const { minDate, maxDate } = useMemo(() => {\r\n const min = dayjs(props.min_date || null).isValid()\r\n ? dayjs(props.min_date)\r\n : null;\r\n\r\n const max = dayjs(props.max_date || null).isValid()\r\n ? dayjs(props.max_date)\r\n : null;\r\n\r\n return { minDate: min, maxDate: max };\r\n }, [props.min_date, props.max_date]);\r\n\r\n // Memoize required prop calculation\r\n const isRequired = useMemo(() =>\r\n props.formType === 'builder' ? false : props.required,\r\n [props.formType, props.required]\r\n );\r\n\r\n return (\r\n <Controller\r\n control={props.formControl}\r\n name={fieldName}\r\n render={({ field, fieldState }) => (\r\n <DatePicker\r\n {...field}\r\n // {...props}\r\n dataPosition={props.position}\r\n dataName={fieldName}\r\n label={props.label}\r\n placeholder={props.placeholder}\r\n required={isRequired}\r\n defaultValue={props.defaultValue}\r\n disableFutureDates={props.is_future_dates_allowed}\r\n disablePastDates={props.is_past_dates_allowed}\r\n helperText={fieldState.error?.message}\r\n error={Boolean(fieldState.error)}\r\n disabled={props.disabled}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n {...(props?.views && { views: props?.views })}\r\n />\r\n )}\r\n />\r\n );\r\n});\r\n\r\nDynamicDate.displayName = 'DynamicDate';\r\n\r\nDynamicDate.propTypes = {\r\n formControl: PropTypes.shape({\r\n register: PropTypes.func.isRequired,\r\n setValue: PropTypes.func\r\n }).isRequired,\r\n name: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n fieldArrayName: PropTypes.string,\r\n required: PropTypes.bool,\r\n position: PropTypes.number,\r\n formType: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n defaultValue: PropTypes.any,\r\n is_future_dates_allowed: PropTypes.bool,\r\n is_past_dates_allowed: PropTypes.bool,\r\n typeOfField: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n min_date: PropTypes.any,\r\n max_date: PropTypes.any\r\n};\r\n\r\nexport { DynamicDate };\r\nexport default DynamicDate;","import { Controller } from \"react-hook-form\";\nimport TextField from \"../../../text-field/text-field\";\nimport PropTypes from \"prop-types\"\nimport { InputAdornment } from \"@mui/material\";\nconst DynamicCurrency = (props: any) => {\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field, fieldState }) => (\n <TextField\n {...field}\n name={`${props.fieldArrayName}.${props.name}`}\n fullWidth\n label={props.label}\n defaultValue={props.default_value.replace(/[^0-9]/g, \"\")}\n placeholder={props.placeholder}\n multiline={props.is_multiline || false}\n disabled={props.disabled}\n required={props.is_required}\n inputProps={{\n step: props?.float_step || \"0\" , \n min : props.min_length || 0 , \n max : props.max_length || 1000 ,\n inputMode: 'numeric',\n pattern : `${props.is_negative}` ? '-?[0-9]*' : '[0-9]*' , \n \n }}\n InputProps={{\n startAdornment: (\n <InputAdornment\n position=\"start\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRight: '1px solid rgba(0, 0, 0, 0.23)',\n width: 50,\n height: '100%',\n borderBottomLeftRadius: 4, \n borderTopLeftRadius: 4,\n }}\n >\n {(props.currencyType !== null ? props.currencyType : \"-\")}\n </InputAdornment>\n )\n\n }}\n\n error={Boolean(fieldState.error?.message)}\n helperText={fieldState.error?.message || \"\"}\n onBlur = {field.onBlur}\n onChange ={(e : any) => {\n const numericValue = e.target.value.replace(/[^0-9]/g , \"\");\n field.onChange(numericValue)\n }}\n />\n )}\n />\n )\n}\nDynamicCurrency.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n _formState: PropTypes.object.isRequired\n }).isRequired,\n defaultValue: PropTypes.string,\n name: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n is_multiline: PropTypes.bool,\n min: PropTypes.number,\n max: PropTypes.number,\n min_length: PropTypes.number,\n max_length: PropTypes.number,\n float_step: PropTypes.string,\n position: PropTypes.number,\n formType: PropTypes.string,\n disabled: PropTypes.bool,\n InputProps: PropTypes.object,\n placeholder : PropTypes.string , \n currencyType :PropTypes.string ,\n \n}\nexport { DynamicCurrency };\nexport default DynamicCurrency;\n\n\n\n","import PropTypes from \"prop-types\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Grid, Box } from \"@mui/material\";\nimport { useDrag, useDrop } from \"react-dnd\";\n\nimport \"./element.scss\";\nimport images from \"../../../../assets/images\";\n\nconst DynamicElementHOC = (props: any) => {\n const [, ref] = useDrag({\n type: \"element\",\n item: { index: props.index },\n });\n const [, drop] = useDrop({\n accept: \"element\",\n hover: (draggedElement: any) => {\n const draggedIndex = draggedElement.index;\n const dropIndex = props.index;\n if (dropIndex === draggedIndex) {\n return;\n }\n\n props.swap(draggedIndex, dropIndex);\n },\n drop: () => {\n props.elementSwap();\n },\n });\n\n \n const activeClassName = `${\n props.activeIndex\n ? \"form-element-wrapper--Active\"\n : \"form-element-wrapper--Element\"\n }`;\n const defaultClassName = `${\n props?.children?.props?.typeOfField === \"custom\"\n ? \"\"\n : \"form-element-wrapper--Default\"\n }`;\n\n return (\n <Grid\n item\n xs={props?.element === \"table\" ? 12 : 12}\n className={`${activeClassName} ${defaultClassName}`}\n ref={(node) => drop(ref(node))}\n >\n <Box sx={{ width: \"100%\" }} onClick={props.onClick}>\n {props.children}\n </Box>\n <div className=\"form-element-wrapper--Actions\">\n <img\n src={images.duplicate}\n onClick={() => props.handleDuplicate(props.index)}\n />\n {props?.children?.props?.typeOfField === \"custom\" && (\n <CloseIcon\n style={{ fontSize: \"1rem\", color: \"#656669\" }}\n onClick={() => {\n props.removeElement(props.index);\n props.setElementHoc();\n }}\n />\n )}\n </div>\n </Grid>\n );\n};\n\nDynamicElementHOC.propTypes = {\n removeElement: PropTypes.func.isRequired,\n index: PropTypes.number.isRequired,\n onClick: PropTypes.func,\n children: PropTypes.node.isRequired,\n swap: PropTypes.func,\n elementSwap: PropTypes.func,\n activeIndex: PropTypes.bool,\n handleDuplicate: PropTypes.func,\n setElementHoc: PropTypes.func,\n element: PropTypes.string,\n elementPerRow : PropTypes.number \n};\n\nexport { DynamicElementHOC };\nexport default DynamicElementHOC;\n","import { Controller } from \"react-hook-form\";\nimport TextField from \"../../../text-field/text-field\";\nimport PropTypes from \"prop-types\"\nimport { InputAdornment, Select, MenuItem } from \"@mui/material\";\nimport { useState } from \"react\";\nimport KeyboardArrowDownOutlinedIcon from '@mui/icons-material/KeyboardArrowDownOutlined';\nconst DynamicInputSelect = (props: any) => {\n const [defaultOption, setSelectOption] = useState(props.options[0].value); //need to be update \n const handleOptionChange = (event: any) => {\n setSelectOption(event.target.value);\n };\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field, fieldState }) => (\n <TextField\n {...field}\n name={`${props.fieldArrayName}.${props.name}`}\n fullWidth\n label={props.label}\n placeholder={props.placeholder}\n multiline={props.is_multiline || false}\n disabled={props.disabled}\n required={props.is_required}\n inputProps={{\n step: props?.float_step || \"0\",\n min: props.min_length || 0,\n max: props.max_length || 1000,\n inputMode: 'string',\n\n\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment\n position=\"start\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderLeft: '1px solid rgba(0, 0, 0, 0.23)',\n padding: 1,\n height: '100%',\n borderBottomLeftRadius: 4,\n borderTopLeftRadius: 4,\n backgroundColor: 'rgba(245 , 245 , 245 )',\n margin: 0,\n boxSizing: 'border-box',\n borderRadius: 0,\n\n }}\n\n >\n <Select\n value={defaultOption}\n onChange={handleOptionChange}\n sx={{\n height: '100%',\n '&:focus': {\n backgroundColor: 'rgba(245 , 245 , 245 )' , // Prevent background color change on focus\n },\n '&:hover': {\n backgroundColor: 'rgba(245 , 245 , 245 )', // Prevent background color change on hover\n },\n '&:active': {\n backgroundColor: 'rgba(245 , 245 , 245)', // Prevent background color change on active\n },\n '&.Mui-focused': {\n backgroundColor: '#fff', // Override the focus background color\n },\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: '#fff', // Prevent border color change on focus\n },\n }}\n variant=\"standard\"\n disableUnderline\n\n IconComponent={KeyboardArrowDownOutlinedIcon}\n\n >\n {props.options?.map((item: any, index: any) => (\n <MenuItem\n key={index}\n value={item.value}\n sx={{\n '&:hover': {\n backgroundColor: 'rgba(245 , 245 , 245 )', // Prevent background color change on hover\n },\n '&.Mui-selected': {\n backgroundColor: 'rgba(245 , 245 , 245)', // Prevent background color change on selection\n },\n '&.Mui-selected:hover': {\n backgroundColor: 'rgba(245 , 245 , 245)', // Prevent background color change on selection hover\n },\n }}\n >\n {item.label}\n </MenuItem>\n ))}\n </Select>\n\n </InputAdornment>\n )\n\n }}\n\n error={Boolean(fieldState.error?.message)}\n helperText={fieldState.error?.message || \"\"}\n onBlur={field.onBlur}\n onChange={(e: any) => {\n field.onChange(e.target.value)\n }}\n />\n )}\n />\n )\n}\nDynamicInputSelect.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n _formState: PropTypes.object.isRequired\n }).isRequired,\n defaultValue: PropTypes.string,\n name: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n is_multiline: PropTypes.bool,\n min: PropTypes.number,\n max: PropTypes.number,\n min_length: PropTypes.number,\n max_length: PropTypes.number,\n float_step: PropTypes.string,\n position: PropTypes.number,\n formType: PropTypes.string,\n disabled: PropTypes.bool,\n InputProps: PropTypes.object,\n placeholder: PropTypes.string,\n\n\n}\nexport { DynamicInputSelect };\nexport default DynamicInputSelect;\n","import React, { useState } from 'react';\nimport { Controller, Control, FieldValues } from 'react-hook-form';\nimport PropTypes from 'prop-types';\nimport { Autocomplete } from '@mui/material';\nimport TextField from '../../../text-field/text-field';\nimport Chip from '../../../chip/chip';\n// import { Close } from '@mui/icons-material';\nimport Typography from '../../../typography/typography';\nimport './element.scss';\n\n// Define the type for props\ninterface DynamicTagsInputProps<TFieldValues extends FieldValues> {\n formControl: Control<TFieldValues>;\n name: string;\n fieldArrayName?: string;\n label: React.ReactNode;\n}\n\n// Define the component using generic type TFieldValues\nconst DynamicTagsInput = <TFieldValues extends FieldValues>({\n formControl,\n name,\n fieldArrayName = '',\n label,\n}: DynamicTagsInputProps<TFieldValues>) => {\n // Local state for managing the input value\n const [inputValue, setInputValue] = useState<string>('');\n\n return (\n <Controller\n control={formControl}\n name={`${fieldArrayName}.${name}`}\n render={({ field: { value = '', onChange } }) => {\n const tags = value ? value.split(',').map((tag: string) => tag.trim()) : [];\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Tab') {\n // Get the trimmed input value\n const trimmedInputValue = inputValue.trim();\n \n // Check if input is not empty and not already a tag\n if (trimmedInputValue && !tags.includes(trimmedInputValue)) {\n event.preventDefault(); // Prevent default tab action\n\n // Add new tag\n const newTags = [...tags, trimmedInputValue];\n const newValueString = newTags.join(', ');\n onChange(newValueString);\n setInputValue(''); // Clear the input field\n }\n }\n };\n\n return (\n <Autocomplete\n clearIcon={false}\n options={[]}\n freeSolo\n multiple\n fullWidth\n value={tags}\n onChange={(event: React.ChangeEvent<unknown>, newValue: string[] | null) => {\n const newValueString = newValue?.join(', ') || '';\n onChange(newValueString);\n }}\n renderTags={(value: string[], renderTagProps) =>\n value.map((option, index) => (\n <Chip\n key={index}\n // deleteIcon={<Close fontSize='large' />}\n // variant='outlined'\n type='normal'\n label={\n <Typography color='theme.secondary.1000' type='s4'>\n {option}\n </Typography>\n }\n {...renderTagProps({ index })}\n />\n ))\n }\n renderInput={(params) => (\n <TextField\n label={label}\n type=\"text\"\n {...params}\n value={inputValue}\n onChange={(event:any) => setInputValue(event.target.value)}\n onKeyDown={handleKeyDown}\n />\n )}\n />\n );\n }}\n />\n );\n};\n\n// Define PropTypes for runtime validation (optional)\nDynamicTagsInput.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n _formState: PropTypes.object.isRequired,\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n fieldArrayName: PropTypes.string,\n};\n\nexport { DynamicTagsInput };\nexport default DynamicTagsInput;\n\n","import { Controller } from \"react-hook-form\";\nimport PropTypes from \"prop-types\";\n\nimport \"./element.scss\";\nimport InfoCard from \"../../../info-card/info-card\";\n\nconst DynamicInfo = (props: any) => {\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field }) => (\n <InfoCard\n {...field}\n dataPosition={props.position}\n dataName={`${props.fieldArrayName}.${props.name}`}\n label={props.label}\n value={props.defaultValue || \"Info\"}\n />\n )}\n />\n );\n};\n\nDynamicInfo.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n fieldArrayName: PropTypes.string,\n position: PropTypes.number,\n formType: PropTypes.string,\n defaultValue: PropTypes.string,\n typeOfField: PropTypes.string,\n disabled: PropTypes.bool,\n};\n\nexport { DynamicInfo };\nexport default DynamicInfo;\n","import React from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport PropTypes from \"prop-types\";\n\nimport \"./element.scss\";\nimport UploadMedia from \"../../../upload-media/upload-media\";\nimport Typography from \"../../../typography/typography\";\n\nconst DynamicMedia = React.memo((props: any) => {\n\n return (\n <Controller\n control={props.formControl}\n name={`${props.fieldArrayName}.${props.name}`}\n render={({ field, fieldState: { error } }) => (\n <>\n <UploadMedia\n // {...field}\n dataPosition={props.position}\n dataName={`${props.fieldArrayName}.${props.name}`}\n label={props.label}\n required={props.formType === \"builder\" ? false : props.required}\n type={props.field_type}\n max_size={props?.max_size}\n disabled={props?.disabled}\n onChange={field?.onChange}\n name={props.name}\n value={field?.value || props?.value}\n multiple={Boolean(props?.is_multiple)}\n />\n {error &&\n <Typography color=\"theme.error.600\" type=\"s5\">{error.message}</Typography>\n }\n </>\n )}\n />\n );\n});\n\nDynamicMedia.propTypes = {\n formControl: PropTypes.shape({\n register: PropTypes.func.isRequired,\n setValue: PropTypes.func,\n }).isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n fieldArrayName: PropTypes.string,\n required: PropTypes.bool,\n is_multiple: PropTypes.bool,\n position: PropTypes.number,\n formType: PropTypes.string,\n placeholder: PropTypes.string,\n default_value: PropTypes.string,\n type: PropTypes.string,\n field_type: PropTypes.string,\n max_size: PropTypes.number,\n typeOfField: PropTypes.string,\n disabled: PropTypes.bool,\n};\n\nexport { DynamicMedia };\nexport default DynamicMedia;\n","import PropTypes from \"prop-types\";\nimport { Grid, /* Box, */ IconButton, Menu, MenuItem } from \"@mui/material\";\n\nimport \"./element.scss\";\nimport Typography from \"../../../typography/typography\";\nimport images from \"../../../../assets/images\";\nimport React from \"react\";\nimport Button from \"../../../button/button\";\nimport AddIcon from \"@mui/icons-material/Add\";\n\nconst DynamicSectionHOC = (props: any) => {\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n\n const handleActionClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n return (\n <Grid\n className={\n props.className ? `formBuilder ${props.className}` : \"formBuilder\"\n }\n >\n <div className=\"formBuilder--Header\">\n <Typography\n type=\"s4\"\n fontWeight={\"medium\"}\n mb={0.5}\n color={\"theme.secondary.800\"}\n sx={{ cursor: \"pointer\", ...(!props.label?.trim() ? { fontStyle: 'italic' } : {}) }}\n onClick={props.onClick}\n data-position={props.position}\n data-name={`${props.fieldArrayName}.${props.name}`}\n >\n {props.label || \"(Unnamed Section)\"}\n </Typography>\n <div>\n <IconButton color=\"inherit\" size=\"small\" onClick={handleActionClick}>\n <img src={images.more} alt=\"more icon\" />\n </IconButton>\n <Menu\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={() => setAnchorEl(null)}\n >\n <MenuItem\n onClick={() => {\n props.handleAccordion();\n setAnchorEl(null);\n }}\n >\n Make this section accordion\n </MenuItem>\n {!props.remove_section && (\n <MenuItem\n sx={{ color: \"#F86060\" }}\n onClick={() => {\n props.removeSection();\n setAnchorEl(null);\n }}\n >\n Remove Section\n </MenuItem>\n )}\n </Menu>\n </div>\n </div>\n <div\n className={`${\n props.activeIndex ? \"formBuilder--Active\" : \"formBuilder--Section\"\n }`}\n >\n {/* <Box sx={{ width: \"100%\" }} className=\"formBuilder--GridLayout\">\n {props.children}\n </Box> */}\n <Grid container sx={{ mb: 2 }}>\n {props.children}\n </Grid>\n {!props.isFormSwitcher ? (\n <Button\n variant=\"outlined\"\n style={{ color: \"#292D32\", marginBottom: \"0.375rem\" }}\n startIcon={<AddIcon />}\n data-position={props.position}\n data-name={`${props.fieldArrayName}.${props.name}`}\n onClick={props.handleAddButton}\n >\n Add\n </Button>\n ) : null}\n </div>\n </Grid>\n );\n};\n\nDynamicSectionHOC.propTypes = {\n index: PropTypes.number.isRequired,\n onClick: PropTypes.func,\n children: PropTypes.node.isRequired,\n label: PropTypes.string,\n position: PropTypes.number,\n fieldArrayName: PropTypes.string,\n className: PropTypes.string,\n removeSection: PropTypes.func.isRequired,\n handleAccordion: PropTypes.func,\n activeIndex: PropTypes.bool,\n handleAddButton: PropTypes.func,\n remove_section: PropTypes.bool,\n isFormSwitcher: PropTypes.bool,\n};\n\nexport { DynamicSectionHOC };\nexport default DynamicSectionHOC;\n","// import { MRT_ColumnDef, MRT_RowData } from 'material-react-table';\r\nimport { Add } from '@mui/icons-material';\r\nimport Button from '../../../button/button';\r\nimport MaterialTable, { MaterialTableColumnProps } from '../../../material-table/material-table';\r\nimport Typography from '../../../typography/typography';\r\nimport { Box } from '@mui/material';\r\nimport './element.scss';\r\nimport { parse, stringify } from 'flatted';\r\nimport React, { useCallback } from 'react';\r\nimport { useAuth } from '../../../../hooks/useAuth';\r\nimport { formatDate } from '../../../../utils/dateFormat';\r\nimport Chip from '../../../chip/chip';\r\nimport Checkbox from '../../../checkbox/checkbox';\r\nimport { MRT_Row } from 'material-react-table';\r\nimport _ from 'lodash';\r\nimport { formatAmount, getFileName, toFixedWithNumbers } from \"../../../../utils/common\";\r\nimport { useTranslation } from 'react-i18next';\r\nimport { formatLabel } from '../../../../utils/format-text';\r\nexport interface ICellChangeParam {\r\n\tvalue: any,\r\n\tdata: any,\r\n\tcol: MaterialTableColumnProps,\r\n\trow: MRT_Row<any>,\r\n\tname: string,\r\n\tuRows: any[]\r\n}\r\n\r\ninterface IDynamicTable {\r\n\tcolumns: any[];\r\n\trows?: any[];\r\n\tposition: number;\r\n\tlabel: string;\r\n\tdisabled?: boolean;\r\n\ttypeOfField?: string;\r\n\tonAddClick?: (name?: string) => void;\r\n\tname?: string;\r\n\tis_button?: boolean;\r\n\tdisableTableAddButton?: boolean;\r\n\totherButtons?: React.ReactNode[];\r\n\tdefaultActionColumnItems?: React.ReactElement[];\r\n\tonTableCellChange: ({ value, data, col, row }: ICellChangeParam) => void;\r\n\tcurrencySymbol?: string;\r\n}\r\n\r\nconst DynamicTable: React.FC<IDynamicTable> = React.memo(({\r\n\tcolumns,\r\n\tposition,\r\n\tlabel,\r\n\trows = [],\r\n\tonAddClick,\r\n\tname,\r\n\tis_button = true,\r\n\tdisableTableAddButton,\r\n\totherButtons,\r\n\tdefaultActionColumnItems,\r\n\tonTableCellChange,\r\n\tcurrencySymbol = '',\r\n\t...rest\r\n\t// disabled\r\n}) => {\r\n\tconst { t } = useTranslation();\r\n\tconst { user } = useAuth();\r\n\tconst cs = currencySymbol || user?.currency_data?.symbol || '';\r\n\tconst currencyFormat = user?.currency_data?.number_format || '';\r\n\tconst symbolPosition = user?.currency_data?.position || 'before';\r\n\tconst takeCurencyOrPercentage = useCallback((type: string, value: any) => {\r\n\t\tswitch (type) {\r\n\t\t\tcase 'Percentage':\r\n\t\t\t\treturn `${value}%`;\r\n\t\t\tcase 'Fixed Amount':\r\n\t\t\t\treturn `${cs}${value}`;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\treturn value;\r\n\t\t}\r\n\t}, [cs]);\r\n\r\n\tconst isCellChangeAFunc = onTableCellChange instanceof Function\r\n\r\n\tconst tableColumns = useCallback(\r\n\t\t(columns: MaterialTableColumnProps[]) => {\r\n\t\t\treturn columns.map((column) => ({\r\n\t\t\t\t...column,\r\n\t\t\t\theader: t(column.header),\r\n\t\t\t\tCell: ({ renderedCellValue, row }: any) => {\r\n\t\t\t\t\tlet v = renderedCellValue;\r\n\t\t\t\t\tif (typeof v === 'number' && v && String(v)?.includes('.')) {\r\n\t\t\t\t\t\treturn v = toFixedWithNumbers(v)\r\n\t\t\t\t\t}\r\n\t\t\t\t\tswitch (column.type) {\r\n\t\t\t\t\t\tcase 'formattedString':\r\n\t\t\t\t\t\t\tv = formatLabel(renderedCellValue) || '-';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'date':\r\n\t\t\t\t\t\t\tv = formatDate(\r\n\t\t\t\t\t\t\t\trenderedCellValue,\r\n\t\t\t\t\t\t\t\tcolumn.editProperties?.dateFormat || 'DD-MM-YYYY'\r\n\t\t\t\t\t\t\t) || '-';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'currency':\r\n\t\t\t\t\t\t\tv = renderedCellValue ? `${formatAmount(renderedCellValue, currencyFormat, symbolPosition, cs)}` : '-';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'stringOrArray': {\r\n\t\t\t\t\t\t\tconst type = row.original?.promotion_map_data?.type;\r\n\t\t\t\t\t\t\tv = Array.isArray(renderedCellValue)\r\n\t\t\t\t\t\t\t\t? renderedCellValue.map((rcv) => (\r\n\t\t\t\t\t\t\t\t\trcv ? <Chip label={takeCurencyOrPercentage(type, rcv)} /> : null\r\n\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t: takeCurencyOrPercentage(type, renderedCellValue);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcase \"checkbox\": {\r\n\t\t\t\t\t\t\tv = <Checkbox\r\n\t\t\t\t\t\t\t\tchecked={Boolean(renderedCellValue)}\r\n\t\t\t\t\t\t\t\tonClick={isCellChangeAFunc\r\n\t\t\t\t\t\t\t\t\t? (e) => onTableCellChange({\r\n\t\t\t\t\t\t\t\t\t\tvalue: e.target.checked,\r\n\t\t\t\t\t\t\t\t\t\tdata: row.original,\r\n\t\t\t\t\t\t\t\t\t\tcol: column,\r\n\t\t\t\t\t\t\t\t\t\trow: row,\r\n\t\t\t\t\t\t\t\t\t\tname: name,\r\n\t\t\t\t\t\t\t\t\t\tuRows: rows\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/>;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcase \"array\": {\r\n\t\t\t\t\t\t\tv = Array.isArray(renderedCellValue) && renderedCellValue.length ?\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0.5, alignItems: 'center', flexWrap: 'wrap' }}>\r\n\t\t\t\t\t\t\t\t\t{renderedCellValue.map(r => (<Chip type='normal' label={_.get(r, column?.valueGet, '')} active />))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t: '-';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcase \"file\": {\r\n\t\t\t\t\t\t\tv = getFileName(renderedCellValue) || '-';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn v;\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t},\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t[cs, takeCurencyOrPercentage, currencySymbol, rows]\r\n\t);\r\n\treturn (\r\n\t\t<Box data-position={position}>\r\n\t\t\t<Typography\r\n\t\t\t\ttype='s5'\r\n\t\t\t\tweight='medium'\r\n\t\t\t\tcolor='theme.secondary.800'\r\n\t\t\t\tdata-position={position}\r\n\t\t\t\tsx={{ mb: 0.5 }}>\r\n\t\t\t\t{t(label)}\r\n\t\t\t</Typography>\r\n\t\t\t<Box /* sx={disabled ? { pointerEvents: 'none' } : {}} */>\r\n\t\t\t\t<MaterialTable\r\n\t\t\t\t\tcolumnOrder={['mrt-row-select']}\r\n\t\t\t\t\t// rows={parse(stringify(rows))}\r\n\t\t\t\t\trows={rows}\r\n\t\t\t\t\tcolumns={tableColumns(parse(stringify(columns)))}\r\n\t\t\t\t\ttotalPages={20}\r\n\t\t\t\t\tpaginationModel={{ pageNo: 1, limit: 10 }}\r\n\t\t\t\t\tenableEditing={false}\r\n\t\t\t\t\tenableColumnDragging={false}\r\n\t\t\t\t\tenableBottomToolbar={false}\r\n\t\t\t\t\tdefaultActionColumnItems={defaultActionColumnItems}\r\n\t\t\t\t\t{...rest}\r\n\t\t\t\t/>\r\n\t\t\t\t{is_button && !disableTableAddButton && (\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\t\t\tjustifyContent: 'space-between',\r\n\t\t\t\t\t\t\tmt: 1\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant='outlined'\r\n\t\t\t\t\t\t\tonClick={() => onAddClick?.(name)}\r\n\t\t\t\t\t\t\tstartIcon={<Add />}\r\n\t\t\t\t\t\t\tclassName='table--AddButton'>\r\n\t\t\t\t\t\t\tAdd\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t{Boolean(otherButtons?.length) && otherButtons}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\nexport default DynamicTable;\r\n","import { styled } from \"@mui/material\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { TimePicker as Time } from \"@mui/x-date-pickers/TimePicker\";\r\nimport Typography from \"../typography/typography\";\r\nimport \"./time-picker.scss\";\r\nimport { memo } from \"react\";\r\n\r\nexport interface TimePickerProps {\r\n label: string;\r\n disabled?: boolean;\r\n error?: boolean;\r\n name?: string;\r\n value?: string | number | Date;\r\n helperText?: string;\r\n dataPosition?: number;\r\n dataName?: string;\r\n is24hrFormat?: boolean;\r\n placeholder?: string;\r\n required?: boolean;\r\n}\r\n\r\nconst StyledTimePicker = styled(Time)(({ theme: { palette } }) => ({\r\n \"& .MuiOutlinedInput-root\": {\r\n padding: \"0\",\r\n color: palette.theme?.secondary[800],\r\n \"& fieldset\": {\r\n borderColor: palette.theme?.secondary[400],\r\n },\r\n \"&:hover fieldset\": {\r\n borderColor: palette.theme?.secondary[500],\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n borderWidth: \"0.0625rem\",\r\n borderStyle: \"solid\",\r\n borderColor: palette.theme?.primary[700],\r\n },\r\n \"&.Mui-error fieldset\": {\r\n borderColor: palette.theme?.error[600],\r\n },\r\n \"&.Mui-disabled\": {\r\n background: palette.theme?.secondary[200],\r\n color: palette.theme?.secondary[800],\r\n },\r\n \"& .MuiInputBase-input::placeholder\": {\r\n color: palette.theme?.secondary[800],\r\n opacity: 1,\r\n },\r\n },\r\n \"& .MuiFormHelperText-root\": {\r\n marginLeft: 0,\r\n color: palette.theme?.secondary[800],\r\n \"&.Mui-error\": {\r\n color: palette.theme?.error[600],\r\n },\r\n },\r\n \"& .MuiIconButton-root\": {\r\n marginRight: 0,\r\n },\r\n \"& .MuiPickersCalendarHeader-labelContainer\": {\r\n fontWeight: 600,\r\n },\r\n}));\r\n\r\nconst TimePicker = memo((props: TimePickerProps) => {\r\n const {\r\n label,\r\n disabled,\r\n error,\r\n helperText,\r\n dataName,\r\n dataPosition,\r\n is24hrFormat = false,\r\n placeholder,\r\n required = false,\r\n ...rest\r\n } = props;\r\n return (\r\n <div>\r\n <LocalizationProvider dateAdapter={AdapterDayjs}>\r\n {label && (\r\n <Typography\r\n type=\"s4\"\r\n fontWeight={\"medium\"}\r\n mb={0.5}\r\n color={error ? \"theme.error.600\" : \"theme.secondary.800\"}\r\n data-position={dataPosition}\r\n data-name={dataName}\r\n >\r\n {label} {required && <span className=\"requiredStar\">*</span>}\r\n </Typography>\r\n )}\r\n <StyledTimePicker\r\n {...rest}\r\n disabled={disabled}\r\n slotProps={{\r\n textField: {\r\n helperText: helperText,\r\n error: error,\r\n placeholder: placeholder || \"HH:mm A\",\r\n // required: required,\r\n },\r\n }}\r\n format={is24hrFormat ? \"HH:MM\" : \"hh:mm a\"}\r\n className=\"timePicker\"\r\n />\r\n </LocalizationProvider>\r\n </div>\r\n );\r\n});\r\n\r\nexport { TimePicker };\r\nexport default TimePicker;\r\n","import { Controller } from 'react-hook-form';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport './element.scss';\r\nimport TimePicker from '../../../time-picker/time-picker';\r\nimport React from 'react';\r\n\r\nconst DynamicTime = React.memo((props: any) => {\r\n\r\n\treturn (\r\n\t\t<Controller\r\n\t\t\tcontrol={props.formControl}\r\n\t\t\tname={`${props.fieldArrayName}.${props.name}`}\r\n\t\t\trender={({ field, fieldState }) => (\r\n\t\t\t\t<TimePicker\r\n\t\t\t\t\t{...field}\r\n\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\tprops?.onChange(e);\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tdataPosition={props.position}\r\n\t\t\t\t\tdataName={`${props.fieldArrayName}.${props.name}`}\r\n\t\t\t\t\tlabel={props.label}\r\n\t\t\t\t\tplaceholder={props.placeholder}\r\n\t\t\t\t\trequired={props.formType === 'builder' ? false : props.required}\r\n\t\t\t\t\tis24hrFormat={props.options === '24hr'}\r\n\t\t\t\t\tdisabled={props.disabled}\r\n\t\t\t\t\thelperText={fieldState.error?.message}\r\n\t\t\t\t\terror={Boolean(fieldState.error)}\r\n\t\t\t\t\t{...(props?.rest || {})}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t/>\r\n\t);\r\n});\r\n\r\n\r\nDynamicTime.propTypes = {\r\n\tformControl: PropTypes.shape({\r\n\t\tregister: PropTypes.func.isRequired,\r\n\t\tsetValue: PropTypes.func\r\n\t}).isRequired,\r\n\tname: PropTypes.string.isRequired,\r\n\tlabel: PropTypes.string.isRequired,\r\n\tfieldArrayName: PropTypes.string,\r\n\trequired: PropTypes.bool,\r\n\tposition: PropTypes.number,\r\n\tformType: PropTypes.string,\r\n\toption: PropTypes.string,\r\n\tplaceholder: PropTypes.string,\r\n\ttypeOfField: PropTypes.string,\r\n\tdisabled: PropTypes.bool,\r\n\tonChange: PropTypes.func,\r\n\trest: PropTypes.object,\r\n};\r\n\r\nexport { DynamicTime };\r\nexport default DynamicTime;\r\n","import { styled } from \"@mui/material/styles\";\nimport Switch, { SwitchProps } from \"@mui/material/Switch\";\nimport Stack from \"@mui/material/Stack\";\nimport Typography, { ITypography } from \"../typography/typography\";\nimport { useLanguage } from \"../../hooks/useLangauge\";\nimport { memo } from \"react\";\n\nexport interface ISwitchProps extends SwitchProps {\n label?: string;\n labelPosition?: \"start\" | \"end\";\n typographyProps?: ITypography;\n}\n\nconst CustomisedSwitch = styled((props: ISwitchProps) => (\n <Switch focusVisibleClassName=\".Mui-focusVisible\" disableRipple {...props} />\n))(({ theme, size, checked }) => ({\n width: 24,\n height: 16,\n padding: 0,\n \"& .MuiSwitch-switchBase\": {\n padding: 0,\n margin: size === \"medium\" ? 2 : 1,\n transitionDuration: \"300ms\",\n \"&.Mui-checked\": {\n transform: size === \"medium\" ? \"translateX(16px)\" : \"translateX(8px)\",\n color: \"#fff\",\n \"& + .MuiSwitch-track\": {\n backgroundColor: theme.palette.mode === \"dark\" ? \"#2ECA45\" : \"#65C466\",\n opacity: 1,\n border: 0,\n },\n \"&.Mui-disabled + .MuiSwitch-track\": {\n opacity: 0.5,\n },\n },\n \"&.Mui-focusVisible .MuiSwitch-thumb\": {\n color: \"#33cf4d\",\n border: \"6px solid #fff\",\n },\n \"&.Mui-disabled .MuiSwitch-thumb\": {\n color:\n theme.palette.mode === \"light\"\n ? theme.palette.grey[100]\n : theme.palette.grey[600],\n },\n \"&.Mui-disabled + .MuiSwitch-track\": {\n opacity: theme.palette.mode === \"light\" ? 0.7 : 0.3,\n },\n },\n \"& .MuiSwitch-thumb\": {\n boxSizing: \"border-box\",\n width: 14,\n height: 14,\n border: checked ? 0 : `1px solid ${theme.palette.theme?.secondary[300]}`,\n },\n \"& .MuiSwitch-track\": {\n borderRadius: 26 / 2,\n backgroundColor: theme.palette.theme?.secondary[200],\n opacity: 1,\n transition: theme.transitions.create([\"background-color\"], {\n duration: 500,\n }),\n },\n ...(size === \"medium\" && {\n width: 42,\n height: 26,\n \"& .MuiSwitch-thumb\": {\n boxSizing: \"border-box\",\n width: 22,\n height: 22,\n border: checked ? 0 : `1px solid ${theme.palette.theme?.secondary[300]}`,\n },\n }),\n}));\n\nconst ToggleSwitch: React.FC<ISwitchProps> = memo(({\n label,\n labelPosition = \"end\",\n typographyProps,\n ...rest\n}) => {\n const {isRtl}=useLanguage();\n return (\n <Stack direction=\"row\" spacing={isRtl ? '' : 0.5} alignItems=\"center\">\n {labelPosition === \"start\" && (\n <Typography type=\"s3\" color=\"theme.secondary.1000\" {...typographyProps}>\n {label}\n </Typography>\n )}\n <CustomisedSwitch sx={{ m: 1 }} {...rest} />\n {labelPosition === \"end\" && (\n <Typography type=\"s3\" color=\"theme.secondary.1000\" {...typographyProps}>\n {label}\n </Typography>\n )}\n </Stack>\n );\n});\n\nexport default ToggleSwitch;\n","import { Control, Controller } from \"react-hook-form\";\nimport Typography from \"../../../typography/typography\";\nimport ToggleSwitch, {\n ISwitchProps,\n} from \"../../../toggle-switch/toggle-switch\";\nimport { memo } from \"react\";\n\ninterface IDynamicToggleButton {\n formControl: Control<any>;\n fieldArrayName: string;\n name: string;\n label: string;\n position: number;\n disabled?: boolean;\n titlePosition?: \"start\" | \"end\";\n typeOfField?: string;\n title: string;\n toggleSwitchProps?: ISwitchProps;\n}\n\nconst DynamicToggleButton: React.FC<IDynamicToggleButton> = memo(({\n formControl,\n fieldArrayName,\n name,\n label,\n position,\n disabled,\n titlePosition,\n title,\n toggleSwitchProps,\n}) => {\n\treturn (\n\t\t<Controller\n\t\t\tcontrol={formControl}\n\t\t\tname={`${fieldArrayName}.${name}`}\n\t\t\trender={({ field }) => (\n\t\t\t\t<>\n\t\t\t\t\t<Typography\n\t\t\t\t\t\ttype='s5'\n\t\t\t\t\t\tcolor='theme.secondary.800'\n\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\tdata-position={position}\n\t\t\t\t\t\tsx={{ mb: 0.5 }}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<ToggleSwitch\n\t\t\t\t\t\t{...toggleSwitchProps}\n\t\t\t\t\t\tname={name}\n\t\t\t\t\t\tchecked={field.value}\n\t\t\t\t\t\tonChange={field.onChange}\n\t\t\t\t\t\tlabel={title}\n\t\t\t\t\t\tdisabled={Boolean(disabled)}\n\t\t\t\t\t\tlabelPosition={titlePosition}\t\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t/>\n\t);\n});\n\nexport default DynamicToggleButton;\n","// import React from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport { RadioGroup } from \"@mui/material\";\nimport Typography from \"../../typography/typography\";\nimport { memo } from \"react\";\n\nconst FormSwitcher = memo(({\n children,\n isFormSwitcher,\n control,\n fieldArrayName,\n formSwitcherName,\n label,\n resetForm,\n}: any) => {\n if (isFormSwitcher) {\n return (\n <Controller\n control={control}\n name={`${fieldArrayName}.${formSwitcherName}`}\n render={({ field }) => (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"24px\",\n }}\n >\n {label ? (\n <Typography\n type=\"s5\"\n style={{ fontWeight: 500 }}\n color={\"theme.secondary.900\"}\n >\n {label}\n </Typography>\n ) : null}\n <RadioGroup\n value={field.value}\n onChange={(e) => {\n resetForm(e.target.value)\n field.onChange(e.target.value)\n }}\n row={true}\n >\n {children}\n </RadioGroup>\n </div>\n )}\n />\n );\n }\n return null;\n});\n\nexport { FormSwitcher };\nexport default FormSwitcher;\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { memo, useMemo, useCallback } from 'react';\r\nimport { Grid, Divider, FormControlLabel, Radio } from '@mui/material';\r\nimport DynamicInput from '../form-builder/form-builder-element/text';\r\nimport DynamicDate from '../form-builder/form-builder-element/date';\r\nimport DynamicTime from '../form-builder/form-builder-element/time';\r\nimport DynamicPhone from '../form-builder/form-builder-element/phone';\r\nimport DynamicSearchSelect from '../form-builder/form-builder-element/dynamic-select';\r\nimport DynamicMedia from '../form-builder/form-builder-element/media';\r\nimport DynamicInfo from '../form-builder/form-builder-element/info';\r\nimport DynamicToggleButton from '../form-builder/form-builder-element/toggle-button';\r\nimport DynamicCheckBox from '../form-builder/form-builder-element/checkbox';\r\nimport DynamicTable from '../form-builder/form-builder-element/table';\r\nimport DynamicRadioButton from '../form-builder/form-builder-element/radio-button';\r\nimport DynamicTagsInput from '../form-builder/form-builder-element/dynamic-tags-input';\r\nimport DynamicCurrency from '../form-builder/form-builder-element/dynamic-currency-input';\r\nimport DynamicInputSelect from '../form-builder/form-builder-element/dynamic-input-select';\r\nimport ChipGenerator from '../../chip-generator/chip-generator';\r\nimport { LocationSearchSelect } from '../../location-select';\r\nimport FormSwitcher from './form-switcher';\r\nimport Typography from '../../typography/typography';\r\nimport Accordion from '../../accordion/accordion';\r\n\r\n// Types for better type safety\r\ninterface Field {\r\n name?: string;\r\n label: string;\r\n field_type: string;\r\n is_fullwidth?: boolean;\r\n custom_width?: number;\r\n is_hidden?: boolean;\r\n is_required?: boolean;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n value?: any;\r\n default_value?: any;\r\n title?: string;\r\n title_position?: string;\r\n table_columns?: any[];\r\n table_rows?: any[];\r\n component?: React.ReactNode;\r\n field_properties?: {\r\n apiType?: string;\r\n customeFilter?: any;\r\n attributes?: any;\r\n disabledIds?: any[];\r\n sortOrder?: string;\r\n maxChips?: number;\r\n allowDuplicates?: boolean;\r\n };\r\n validation?: any;\r\n filterField?: string;\r\n}\r\n\r\ninterface Section {\r\n label?: string;\r\n is_accordion?: boolean;\r\n disabled?: boolean;\r\n form_switcher_label?: string;\r\n}\r\n\r\ninterface FormSectionProps {\r\n section: Section;\r\n index: number;\r\n members?: Field[];\r\n switchForms?: any[];\r\n isFormSwitcher: boolean;\r\n control: any;\r\n fieldArrayName: string;\r\n formSwitcherName: string;\r\n displayAvtar?: boolean;\r\n isButton?: boolean;\r\n currencyOption?: any;\r\n values: any;\r\n onBlur?: (e: any, fieldName?: string) => void;\r\n setValue: (name: string, value: any) => void;\r\n onSelectFooterClick?: (field: Field) => void;\r\n getSelectedData?: (row: any, key: any) => void;\r\n setCurrencyOptions: (options: any) => void;\r\n refreshOptions: any;\r\n handleFieldCleanUp: (forms: any[]) => void;\r\n handleSetCountryCodeField: (country: any, field: Field, fieldArrayName: string, values: any) => void;\r\n handleTableAddClick: (field: Field) => void;\r\n onTableCellChange?: (data: any) => void;\r\n // setDetailsData: (data: any) => void;\r\n t: (key: string) => string;\r\n images: any;\r\n}\r\n\r\n// Memoized field component to prevent unnecessary re-renders\r\nconst MemoizedField = memo(({\r\n field,\r\n fieldName,\r\n sectionLabel,\r\n index,\r\n ...props\r\n}: {\r\n field: Field;\r\n fieldName: string;\r\n sectionLabel?: string;\r\n index: number;\r\n [key: string]: any;\r\n}) => {\r\n const gridSize = useMemo(() =>\r\n field.is_fullwidth ? 12 : (field.custom_width ?? 6),\r\n [field.is_fullwidth, field.custom_width]\r\n );\r\n\r\n const fieldKey = useMemo(() =>\r\n `${sectionLabel}-${fieldName}-${index}`,\r\n [sectionLabel, fieldName, index]\r\n );\r\n\r\n const commonProps = useMemo(() => ({\r\n ...field,\r\n key: fieldKey,\r\n name: fieldName,\r\n position: index,\r\n formControl: props.control,\r\n fieldArrayName: props.fieldArrayName,\r\n required: field.is_required,\r\n label: props.t(field.label),\r\n placeholder: props.t(field.placeholder),\r\n defaultValue: field.value || field.default_value,\r\n disabled: field.disabled\r\n }), [field, fieldName, index, fieldKey, props.control, props.fieldArrayName, props.t]);\r\n\r\n const handleBlur = useCallback((e: any) => {\r\n if (props.onBlur && typeof props.onBlur === 'function') {\r\n props.onBlur(e, fieldName);\r\n }\r\n }, [props.onBlur, fieldName]);\r\n\r\n const endIcon = useMemo(() => {\r\n const iconMap: Record<string, string> = {\r\n email: props.images.sms,\r\n url: props.images.url,\r\n currency: props.images.dollar,\r\n geoLocation: props.images.location\r\n };\r\n\r\n const iconSrc = iconMap[field.field_type];\r\n return iconSrc ? <img src={iconSrc} alt={field.field_type} /> : null;\r\n }, [field.field_type, props.images]);\r\n\r\n const relationLabel = useMemo(() => (\r\n field.field_type === \"relation\" ? (\r\n <span className=\"formSection--Relation\">\r\n {props.t(field.label)}\r\n <img src={props.images.relation} alt=\"relation\" />\r\n </span>\r\n ) : props.t(field.label)\r\n ), [field.field_type, field.label, props.t, props.images.relation]);\r\n\r\n // Render field based on type\r\n const renderField = () => {\r\n switch (field.field_type) {\r\n case \"text\":\r\n case \"email\":\r\n case \"url\":\r\n case \"currency\":\r\n case \"number\":\r\n case \"geoLocation\":\r\n case \"relation\":\r\n return (\r\n <DynamicInput\r\n {...commonProps}\r\n key={commonProps.key}\r\n label={relationLabel}\r\n onBlur={handleBlur}\r\n type={field.field_type}\r\n endIcon={endIcon}\r\n disabled={field.disabled || field.field_type === \"relation\"}\r\n />\r\n );\r\n\r\n case \"date\":\r\n return <DynamicDate {...commonProps} key={commonProps.key} />;\r\n\r\n case \"time\":\r\n return <DynamicTime {...commonProps} key={commonProps.key} />;\r\n\r\n case \"phone\":\r\n return (\r\n <DynamicPhone\r\n {...commonProps}\r\n key={commonProps.key}\r\n setCountryCodeField={(country: any) =>\r\n props.handleSetCountryCodeField(country, field, props.fieldArrayName, props.values)\r\n }\r\n />\r\n );\r\n\r\n case \"select\":\r\n return (\r\n <DynamicSearchSelect\r\n {...commonProps}\r\n key={commonProps.key}\r\n apiType={field.field_properties?.apiType}\r\n customeFilter={field.field_properties?.customeFilter}\r\n attributes={field.field_properties?.attributes}\r\n disabledIds={field.field_properties?.disabledIds}\r\n onChipRemove={() => props.setValue(`${props.fieldArrayName}.${fieldName}`, [])}\r\n {\r\n ...(!field?.addType || !field?.field_properties?.addType\r\n ? { onFooterClick: () => props.onSelectFooterClick?.(field) }\r\n : {})\r\n }\r\n handleOptions={props.setCurrencyOptions}\r\n getSelectedData={props.getSelectedData}\r\n refresh={props.refreshOptions}\r\n sortOrder={field.field_properties?.sortOrder}\r\n showCancelButton={field.field_properties?.showCancelButton}\r\n addType={field?.addType || field?.field_properties?.addType}\r\n modalComponentProps={field?.field_properties?.modalComponentProps}\r\n />\r\n );\r\n\r\n case \"file\":\r\n case \"image\":\r\n return <DynamicMedia {...commonProps} key={commonProps.key} />;\r\n\r\n case \"info\":\r\n return <DynamicInfo {...commonProps} key={commonProps.key} />;\r\n\r\n case \"toggleButton\":\r\n return (\r\n <DynamicToggleButton\r\n {...commonProps}\r\n key={commonProps.key}\r\n titlePosition={field.title_position}\r\n title={props.t(field.title)}\r\n />\r\n );\r\n\r\n case \"checkbox\":\r\n return (\r\n <DynamicCheckBox\r\n {...commonProps}\r\n key={commonProps.key}\r\n titlePosition={field.title_position}\r\n title={props.t(field.title)}\r\n />\r\n );\r\n\r\n case \"table\":\r\n return (\r\n <DynamicTable\r\n {...commonProps}\r\n key={commonProps.key}\r\n columns={field.table_columns}\r\n rows={field.table_rows}\r\n onAddClick={() => props.handleTableAddClick(field)}\r\n disableTableAddButton={Boolean(field.disableTableAddButton)}\r\n is_button={props.isButton}\r\n onTableCellChange={props.onTableCellChange}\r\n />\r\n );\r\n\r\n case \"radioButton\":\r\n return (\r\n <DynamicRadioButton\r\n {...commonProps}\r\n key={commonProps.key}\r\n titlePosition={field.title_position}\r\n title={props.t(field.title)}\r\n />\r\n );\r\n\r\n case \"customComponent\":\r\n return field.component;\r\n\r\n case \"tagsInput\":\r\n return (\r\n <DynamicTagsInput\r\n {...commonProps}\r\n key={commonProps.key}\r\n label={relationLabel}\r\n type={field.field_type}\r\n endIcon={endIcon}\r\n />\r\n );\r\n\r\n case \"currency_with_amount\":\r\n return (\r\n <DynamicCurrency\r\n {...commonProps}\r\n key={commonProps.key}\r\n currencyType={props.currencyOption}\r\n />\r\n );\r\n\r\n case \"select_with_input\":\r\n return (\r\n <DynamicInputSelect\r\n {...commonProps}\r\n currencyType={props.currencyOption}\r\n />\r\n );\r\n\r\n case \"chipInput\":\r\n return (\r\n <ChipGenerator\r\n {...commonProps}\r\n key={commonProps.key}\r\n maxChips={field.field_properties?.maxChips}\r\n allowDuplicates={field.field_properties?.allowDuplicates}\r\n validation={field.validation}\r\n endIcon={endIcon}\r\n onChipAdd={(chip: any) => console.log('Chip added:', chip)}\r\n onChipRemove={(chip: any, index: number) => console.log('Chip removed:', chip, 'at index:', index)}\r\n />\r\n );\r\n\r\n case \"location_select\":\r\n return (\r\n <LocationSearchSelect\r\n fieldArrayName={props.fieldArrayName}\r\n filterField={field.filterField}\r\n getSelectedData={(row: any[]) => props.getSelectedData(row)}\r\n locationFieldName={field.name}\r\n addType=\"location\"\r\n enable_footer={true}\r\n />\r\n );\r\n\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n // For table fields, use full width\r\n if (field.field_type === \"table\" || field.field_type === \"customComponent\") {\r\n return (\r\n <Grid item xs={12}>\r\n {renderField()}\r\n </Grid>\r\n );\r\n }\r\n\r\n return (\r\n <Grid item xs={gridSize}>\r\n {renderField()}\r\n </Grid>\r\n );\r\n});\r\n\r\nMemoizedField.displayName = 'MemoizedField';\r\n\r\n// Memoized FormSwitcher component\r\nconst MemoizedFormSwitcher = memo(({\r\n section,\r\n switchForms,\r\n isFormSwitcher,\r\n control,\r\n fieldArrayName,\r\n formSwitcherName,\r\n handleFieldCleanUp,\r\n t\r\n}: {\r\n section: Section;\r\n switchForms?: any[];\r\n isFormSwitcher: boolean;\r\n control: any;\r\n fieldArrayName: string;\r\n formSwitcherName: string;\r\n handleFieldCleanUp: (forms: any[]) => void;\r\n t: (key: string) => string;\r\n}) => {\r\n const resetForm = useCallback(() => {\r\n handleFieldCleanUp(switchForms || []);\r\n }, [handleFieldCleanUp, switchForms]);\r\n\r\n if (!isFormSwitcher || !switchForms?.length) return null;\r\n\r\n return (\r\n <FormSwitcher\r\n {...section}\r\n isFormSwitcher={isFormSwitcher}\r\n control={control}\r\n fieldArrayName={fieldArrayName}\r\n formSwitcherName={formSwitcherName}\r\n label={t(section.form_switcher_label || '')}\r\n resetForm={resetForm}\r\n >\r\n {switchForms.map((forms: any) => (\r\n <FormControlLabel\r\n key={forms.id}\r\n value={forms.value || forms.name}\r\n control={<Radio />}\r\n slotProps={{ typography: { variant: \"body2\" } }}\r\n label={t(forms.name)}\r\n disabled={Boolean(section.disabled)}\r\n />\r\n ))}\r\n </FormSwitcher>\r\n );\r\n});\r\n\r\nMemoizedFormSwitcher.displayName = 'MemoizedFormSwitcher';\r\n\r\n// Main component\r\nconst FormSection = memo<FormSectionProps>(({\r\n section,\r\n index,\r\n members,\r\n switchForms,\r\n isFormSwitcher,\r\n control,\r\n fieldArrayName,\r\n formSwitcherName,\r\n displayAvtar,\r\n isButton,\r\n currencyOption,\r\n values,\r\n onBlur,\r\n setValue,\r\n onSelectFooterClick,\r\n getSelectedData,\r\n setCurrencyOptions,\r\n refreshOptions,\r\n handleFieldCleanUp,\r\n handleSetCountryCodeField,\r\n handleTableAddClick,\r\n onTableCellChange,\r\n setDetailsData,\r\n t,\r\n images\r\n}) => {\r\n // Memoize visible members to prevent recalculation\r\n const visibleMembers = useMemo(() =>\r\n members?.filter(f => !f.is_hidden) || [],\r\n [members]\r\n );\r\n\r\n // Memoize field names to prevent recalculation\r\n const fieldsWithNames = useMemo(() =>\r\n visibleMembers.map(field => ({\r\n ...field,\r\n fieldName: field.name || field.label.toLowerCase().split(\" \").join(\"_\")\r\n })),\r\n [visibleMembers]\r\n );\r\n\r\n // Memoize section header\r\n const sectionHeader = useMemo(() => {\r\n if (!section.label) return null;\r\n\r\n return (\r\n <div style={{ minHeight: \"16px\" }}>\r\n {index !== 0 && <Divider className='formParser--Section--SectionDivider' />}\r\n <Typography\r\n type=\"s3\"\r\n weight=\"medium\"\r\n mb={2}\r\n mt={4}\r\n color=\"theme.secondary.1000\"\r\n className='formParser--Section--SectionTitle'\r\n >\r\n {t(section.label)}\r\n </Typography>\r\n </div>\r\n );\r\n }, [section.label, index, t]);\r\n\r\n // Avatar component\r\n const avatarDisplay = useMemo(() =>\r\n displayAvtar ? <div className='avtarDisplay'>ERP</div> : null,\r\n [displayAvtar]\r\n );\r\n\r\n // Common props for field rendering\r\n const fieldProps = useMemo(() => ({\r\n control,\r\n fieldArrayName,\r\n isButton,\r\n currencyOption,\r\n values,\r\n onBlur,\r\n setValue,\r\n onSelectFooterClick,\r\n getSelectedData,\r\n setCurrencyOptions,\r\n refreshOptions,\r\n handleSetCountryCodeField,\r\n handleTableAddClick,\r\n onTableCellChange,\r\n setDetailsData,\r\n t,\r\n images\r\n }), [\r\n control, fieldArrayName, isButton, currencyOption, values,\r\n onBlur, setValue, onSelectFooterClick, getSelectedData,\r\n setCurrencyOptions, refreshOptions, handleSetCountryCodeField,\r\n handleTableAddClick, onTableCellChange, setDetailsData, t, images\r\n ]);\r\n\r\n if (section.is_accordion) {\r\n return (\r\n <section key={index} className='formParser--Section'>\r\n <div style={{ marginTop: '20px' }}>\r\n <Accordion title={t(section.label || '')}>\r\n <div className=\"formParser--Grid formParser--Accordion\">\r\n <MemoizedFormSwitcher\r\n section={section}\r\n switchForms={switchForms}\r\n isFormSwitcher={isFormSwitcher}\r\n control={control}\r\n fieldArrayName={fieldArrayName}\r\n formSwitcherName={formSwitcherName}\r\n handleFieldCleanUp={handleFieldCleanUp}\r\n t={t}\r\n />\r\n {fieldsWithNames.map((field, fieldIndex) => (\r\n <MemoizedField\r\n key={`${section.label}-${field.fieldName}-${fieldIndex}`}\r\n field={field}\r\n fieldName={field.fieldName}\r\n sectionLabel={section.label}\r\n index={fieldIndex}\r\n {...fieldProps}\r\n />\r\n ))}\r\n </div>\r\n </Accordion>\r\n </div>\r\n </section>\r\n );\r\n }\r\n\r\n return (\r\n <section key={index} className='formParser--Section'>\r\n {sectionHeader}\r\n\r\n <MemoizedFormSwitcher\r\n section={section}\r\n switchForms={switchForms}\r\n isFormSwitcher={isFormSwitcher}\r\n control={control}\r\n fieldArrayName={fieldArrayName}\r\n formSwitcherName={formSwitcherName}\r\n handleFieldCleanUp={handleFieldCleanUp}\r\n t={t}\r\n />\r\n\r\n <Grid container spacing={2}>\r\n {avatarDisplay}\r\n {fieldsWithNames.map((field, fieldIndex) => (\r\n <MemoizedField\r\n key={`${section.label}-${field.fieldName}-${fieldIndex}`}\r\n field={field}\r\n fieldName={field.fieldName}\r\n sectionLabel={section.label}\r\n index={fieldIndex}\r\n {...fieldProps}\r\n />\r\n ))}\r\n </Grid>\r\n </section>\r\n );\r\n});\r\n\r\nFormSection.displayName = 'FormSection';\r\n\r\nexport { FormSection };\r\nexport default FormSection;","import { FormProvider, useForm, useWatch } from \"react-hook-form\";\r\n// import { useLocation } from \"react-router-dom\";\r\nimport { Box } from \"@mui/material\";\r\n\r\n// import FullScreenLayout from \"../../../layout/fullScreen/fullScreen\";\r\n\r\nimport { useState, useEffect, useCallback } from \"react\";\r\nimport images from \"../../../assets/images\";\r\nimport \"./form-parser.scss\";\r\nimport TabBar from \"../../tabs/tabs\";\r\nimport formBuilderDeConversion from \"../../../utils/form-builder-deconversion\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport * as yup from \"yup\";\r\nimport dayjs from \"dayjs\";\r\nimport { SECTION_TYPES } from '../../../utils/constant';\r\nimport { CountryData } from 'react-phone-input-2';\r\nimport Alert from '../../alert/alert';\r\nimport _ from \"lodash\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport FormSection from \"./form-section\";\r\nconst validationReducer = (validations: any, validation: any, field: any, translationFn: any) => {\r\n switch (validation.type) {\r\n case \"required\":\r\n return (field.field_properties?.is_multiselect ? validations.required(translationFn(validation.msg_en)).min(1, translationFn(validation.msg_en)) : validation.value\r\n ? validations.required(translationFn(validation.msg_en)).test('not-empty', translationFn(validation.msg_en), value => typeof value === 'string' ? value && value?.trim()?.length > 0 : true) : validations.nullable());\r\n case \"min_length\":\r\n return validations.min(validation.value, translationFn(validation.msg_en));\r\n case \"max_length\":\r\n return validations.max(validation.value, translationFn(validation.msg_en));\r\n case \"min_val\":\r\n return validations.min(validation.value, translationFn(validation.msg_en));\r\n case \"max_val\":\r\n return validations.max(validation.value, translationFn(validation.msg_en));\r\n case \"postive_number\":\r\n return validations.test('is-positive-number', translationFn(validation.msg_en), (value) => value >= 0)\r\n case 'email':\r\n return validations.email(validation.msg_en);\r\n case \"no_special_char\":\r\n return validations.test(\r\n \"no-special-char\",\r\n translationFn(validation.msg_en),\r\n value =>\r\n typeof value === \"string\"\r\n ? /^[^.\\-\\W_]+$/u.test(value) // allow letters/digits only\r\n : true\r\n );\r\n case \"when\":\r\n return validations.when(validation.relation, {\r\n is: (val: any) => val === validation.values,\r\n then: () => validation?.thenValidations?.reduce(\r\n (validations: any, validation: any) => validationReducer(validations, validation, field, translationFn),\r\n validations\r\n ) || validations,\r\n otherwise: () => validation?.otherWiseValidations?.reduce(\r\n (validations: any, validation: any) => validationReducer(validations, validation, field, translationFn),\r\n validations\r\n ) || validations,\r\n });\r\n // Add more cases for other validation types as needed\r\n default:\r\n return validations;\r\n }\r\n}\r\n\r\nconst FormParser = ({\r\n data,\r\n defaultValues,\r\n handleFormSubmit,\r\n fieldArrayName,\r\n mode,\r\n displayAvtar = false,\r\n onTableAddClick,\r\n handleFormValues,\r\n getFormMethods,\r\n setFields,\r\n onSelectFooterClick,\r\n setActiveTabValue,\r\n activeTab = 0,\r\n recieveTabDataLenght,\r\n recieveIsValidForm,\r\n activeTabs,\r\n onTableCellChange,\r\n containerStyles = undefined,\r\n isButton = true,\r\n getSelectedData,\r\n refreshOptions = false,\r\n onBlur,\r\n}: any) => {\r\n\r\n const { t } = useTranslation();\r\n\r\n function convertToNestedObject(dotNotationString: string, field: any, existingObject: any = {}) {\r\n const keys = dotNotationString.split('.');\r\n let currentLevel = existingObject;\r\n\r\n keys.forEach((key, index) => {\r\n if (index === keys.length - 1) {\r\n if (!currentLevel[key]) {\r\n const fieldValidations = field.validation.reduce(\r\n (validations: any, validation: any) => {\r\n switch (validation.type) {\r\n case \"required\":\r\n return validation.value\r\n ? validations.required(t(validation.msg_en)).test('not-empty', t(validation.msg_en), value => typeof value === 'string' ? value && value?.trim()?.length > 0 : true)\r\n : (field.field_properties?.is_multiselect ? validations.min(1, t(validation.msg_en)) : validations.nullable());\r\n case \"min_length\":\r\n return validations.min(validation.value, t(validation.msg_en));\r\n case \"max_length\":\r\n return validations.max(validation.value, t(validation.msg_en));\r\n case \"min_val\":\r\n return validations.min(validation.value, t(validation.msg_en));\r\n case \"max_val\":\r\n return validations.max(validation.value, t(validation.msg_en));\r\n // Add more cases for other validation types as needed\r\n default:\r\n return validations;\r\n }\r\n },\r\n getValidationType(field)\r\n );\r\n currentLevel[key] = fieldValidations;\r\n } else if (typeof currentLevel[key] !== 'object' || Array.isArray(currentLevel[key])) {\r\n throw new Error(`Conflict: The key \"${key}\" already exists and is not an object.`);\r\n }\r\n } else {\r\n if (!currentLevel[key]) {\r\n currentLevel[key] = {};\r\n } else if (typeof currentLevel[key] !== 'object' || Array.isArray(currentLevel[key])) {\r\n throw new Error(`Conflict: The key \"${key}\" already exists and is not an object.`);\r\n }\r\n currentLevel = currentLevel[key];\r\n\r\n }\r\n });\r\n\r\n return existingObject;\r\n }\r\n\r\n const getValidationType = (field: any) => {\r\n switch (field.field_type) {\r\n case 'select':\r\n return field.field_properties?.is_multiselect\r\n ? yup.array()\r\n : yup.string()\r\n\r\n case 'number':\r\n case 'currency':\r\n return yup.number().transform((value, originalValue) => (originalValue === '' ? undefined : value)).typeError('Please enter valid number').nullable()\r\n case 'currency_with_amount':\r\n return yup.number()\r\n case 'url':\r\n return yup.string().matches(/^(https?:\\/\\/)?((([a-zA-Z0-9_-]+\\.)+[a-zA-Z]{2,})|localhost)(:\\d{2,5})?(\\/[a-zA-Z0-9#_-]+\\/?)*(\\?[a-zA-Z0-9&=_-]+)?(#\\S+)?$/, { excludeEmptyString: true, message: \"Please enter valid URL.\" })\r\n\r\n default:\r\n return yup.string()\r\n }\r\n }\r\n\r\n const convertNestedFieldSchemaObject = (nestedFields: any) => {\r\n const schema: any = {};\r\n\r\n for (const key in nestedFields) {\r\n if (typeof nestedFields[key] === 'object' && !Object.hasOwn(nestedFields[key], 'tests')) {\r\n schema[key] = yup.object().shape(convertNestedFieldSchemaObject(nestedFields[key]));\r\n } else {\r\n schema[key] = nestedFields[key]\r\n }\r\n }\r\n return schema;\r\n }\r\n\r\n\r\n const generateValidationSchema = (data: any[]) => {\r\n const yupSchemaObject: any = {};\r\n let nestedFielvalidations: any = {},\r\n nestedYupSchemaObj: any = {};\r\n\r\n data &&\r\n data?.forEach((field: any) => {\r\n let fieldValidations: any;\r\n if (field.validation && field.validation.length > 0) {\r\n if (field.name?.includes(\".\")) {\r\n nestedFielvalidations = convertToNestedObject(field.name, field, nestedFielvalidations);\r\n } else {\r\n fieldValidations = field.validation.reduce((validations: any, validation: any) => validationReducer(validations, validation, field, t),\r\n getValidationType(field)\r\n );\r\n yupSchemaObject[field.name] = fieldValidations;\r\n }\r\n\r\n nestedYupSchemaObj = convertNestedFieldSchemaObject(nestedFielvalidations)\r\n }\r\n\r\n });\r\n\r\n return yup.object().shape({\r\n [fieldArrayName]: yup.object().shape({ ...yupSchemaObject, ...nestedYupSchemaObj }),\r\n });\r\n };\r\n\r\n const {\r\n control,\r\n handleSubmit,\r\n formState: { errors },\r\n setValue,\r\n reset,\r\n getValues,\r\n watch,\r\n resetField,\r\n unregister,\r\n trigger,\r\n getFieldState,\r\n ...rest\r\n } = useForm({\r\n ...(defaultValues && typeof defaultValues === 'object' ? { defaultValues } : {}),\r\n resolver: yupResolver(generateValidationSchema(data)),\r\n mode: \"all\",\r\n });\r\n\r\n const watchedValues = useWatch({\r\n control,\r\n name: fieldArrayName,\r\n });\r\n\r\n // Local States\r\n const [schema, setSchema] = useState<[]>([]);\r\n const [tabsData, setTabsData] = useState<any[]>([]);\r\n const [errorAlert, setErrorAlert] = useState<boolean>(false);\r\n const [currencyOption, setCurrencyOptions] = useState<string>('');\r\n const [isTabFormValid, setTabFormValid] = useState<boolean>(false);\r\n const [validateRequiredFields, setValidRequiredFields] = useState<any[]>([]);\r\n\r\n // Local Functions\r\n const handleTableAddClick = (tableName?: string) => {\r\n onTableAddClick?.(tableName)\r\n }\r\n\r\n const getSectionData = useCallback((section: any) => {\r\n const sectionMembers = section?.members?.map((ele: any) => ele) || []\r\n const values = getValues(fieldArrayName)\r\n const isFormSwitcher = section.section_type === SECTION_TYPES.FORM_SWITCH_SECTION\r\n const formSwitcherName =\r\n section?.form_switcher_name ||\r\n section?.form_switcher_label?.toLowerCase().split(\" \").join(\"_\");\r\n const switchForms = section?.switcher_forms?.map((form: any) => ({\r\n ...form,\r\n formMembers: sectionMembers.filter(\r\n (member: any) => member.section_form_id === form.id,\r\n )\r\n }));\r\n const selectedSectionForm =\r\n values?.[formSwitcherName] ?\r\n switchForms.find((ele: any) =>\r\n ele.name === values?.[formSwitcherName]\r\n ) : {};\r\n\r\n // When form switcher is active, include:\r\n // 1. Common fields (fields without section_form_id or is_form_switcher_section)\r\n // 2. Form-specific fields (fields with section_form_id matching the selected form)\r\n let members;\r\n if (isFormSwitcher) {\r\n const commonFields = sectionMembers.filter(\r\n (member: any) => !member.section_form_id && !member.is_form_switcher_section\r\n );\r\n const formSpecificFields = selectedSectionForm?.formMembers || [];\r\n members = [...commonFields, ...formSpecificFields];\r\n } else {\r\n members = section?.members;\r\n }\r\n\r\n return {\r\n isFormSwitcher,\r\n formSwitcherName,\r\n switchForms,\r\n selectedSectionForm,\r\n members,\r\n values\r\n }\r\n }, [fieldArrayName, getValues])\r\n\r\n const handleSetCountryCodeField = useCallback((country: CountryData, field: any, fieldArrayName: any, values: any) => {\r\n const oldVal = values?.[fieldArrayName]?.[field?.country_code_field_name]\r\n const newVal = `+${country.dialCode}`\r\n if (\r\n field?.is_country_code_separate &&\r\n field?.country_code_field_name &&\r\n oldVal !== newVal\r\n ) {\r\n setValue(\r\n `${fieldArrayName}.${field?.country_code_field_name}` as never,\r\n newVal as never\r\n )\r\n }\r\n }, [setValue])\r\n\r\n const handleFieldCleanUp = useCallback((switchForms: any) => {\r\n switchForms.forEach((form: any) => {\r\n form?.formMembers.forEach((member: any) => {\r\n const memberName = member?.name || member.label.toLowerCase().split(\" \").join(\"_\")\r\n const v = _.get(defaultValues, `${fieldArrayName}.${memberName}`, null)\r\n const newData = data.map((ele: any) => {\r\n if (member?.section_form_id === ele?.section_form_id) {\r\n delete ele.value\r\n }\r\n return ({\r\n ...ele,\r\n ...(v ? { value: v } : {}),\r\n })\r\n })\r\n if (!v) {\r\n resetField(`${fieldArrayName}.${memberName}` as never)\r\n unregister(`${fieldArrayName}.${memberName}` as never)\r\n }\r\n setFields?.(newData)\r\n })\r\n\r\n })\r\n }, [data, defaultValues, fieldArrayName, resetField, setFields, unregister])\r\n\r\n const createNestedObjectFromDot = useCallback((dotNotationString: string, field: any, existingObject: any = {}) => {\r\n const keys = dotNotationString.split('.');\r\n let currentLevel = existingObject;\r\n\r\n keys.forEach((key, index) => {\r\n if (index === keys.length - 1) {\r\n if (!currentLevel[key]) {\r\n let fieldValue = field.value\r\n if (fieldValue && (field.field_type !== 'image' || field.field_type !== 'file')) {\r\n if (field.field_type === 'date') {\r\n fieldValue = dayjs(fieldValue)\r\n } else if (field.field_type === 'time') {\r\n const [hours, minutes, seconds] = fieldValue.split(\":\").map(Number);\r\n fieldValue = dayjs().set('hour', hours).set('minute', minutes).set('second', seconds).set('millisecond', 0)\r\n } else if (field.name.includes('_id') && !Array.isArray(field?.value)) {\r\n fieldValue = Number(fieldValue)\r\n }\r\n }\r\n currentLevel[key] = fieldValue;\r\n } else if (typeof currentLevel[key] !== 'object' || Array.isArray(currentLevel[key])) {\r\n throw new Error(`Conflict: The key \"${key}\" already exists and is not an object.`);\r\n }\r\n } else {\r\n if (!currentLevel[key]) {\r\n currentLevel[key] = {};\r\n } else if (typeof currentLevel[key] !== 'object' || Array.isArray(currentLevel[key])) {\r\n throw new Error(`Conflict: The key \"${key}\" already exists and is not an object.`);\r\n }\r\n currentLevel = currentLevel[key];\r\n\r\n }\r\n });\r\n\r\n return existingObject;\r\n }, [])\r\n\r\n const removeMatchingKeyValuePairs = useCallback((obj1, obj2) => {\r\n _.forOwn(obj1, (value, key) => {\r\n if (_.has(obj2, key) && _.isEqual(value, obj2[key])) {\r\n delete obj1[key];\r\n }\r\n });\r\n return obj1;\r\n }, [])\r\n\r\n const validateRequiredSwitchFormData = useCallback((switchData: any) => {\r\n const requiredFields: string[] = [];\r\n if (switchData) {\r\n switchData && switchData[0]?.formMembers.forEach((member: any) => {\r\n if (member?.validation && Array.isArray(member?.validation)) {\r\n member?.validation.forEach((validation: any) => {\r\n if (validation?.thenValidations && Array.isArray(validation?.thenValidations)) {\r\n validation?.thenValidations.forEach((thenValidation: any) => {\r\n if (thenValidation?.type === \"required\" && thenValidation?.value === true) {\r\n if (member?.name) {\r\n requiredFields.push(member.name);\r\n }\r\n }\r\n });\r\n } else {\r\n const hasRequiredValidation = member.validation.some(\r\n (validation: any) => validation.type === 'required' && validation.value === true\r\n )\r\n if (hasRequiredValidation) {\r\n requiredFields.push(member.name);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n }\r\n if (requiredFields) {\r\n setValidRequiredFields(_.uniq(requiredFields))\r\n }\r\n\r\n }, [])\r\n\r\n const isEmpty = useCallback((value: any): boolean => {\r\n return (\r\n value === null ||\r\n value === undefined ||\r\n (Array.isArray(value) && value.length === 0) ||\r\n (typeof value === 'object' && Object.keys(value).length === 0)\r\n );\r\n }, [])\r\n\r\n const getMissingFields = useCallback((watchedFields: any, validationReqFields: string[]): string[] => {\r\n const missingFields: string[] = [];\r\n\r\n validationReqFields.forEach((fieldPath) => {\r\n const keys = fieldPath.split(\".\");\r\n let currentLevel = watchedFields;\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n\r\n if (!currentLevel?.[key] && currentLevel?.[key] !== 0) {\r\n // If any key in the path is missing, mark the field as missing\r\n missingFields.push(fieldPath);\r\n return;\r\n }\r\n\r\n // Move deeper into the object\r\n currentLevel = currentLevel[key];\r\n }\r\n\r\n // After navigating the full path, check if the final value is empty\r\n if (isEmpty(currentLevel)) {\r\n missingFields.push(fieldPath);\r\n }\r\n });\r\n\r\n\r\n return missingFields;\r\n }, [isEmpty])\r\n\r\n // Use Effects\r\n useEffect(() => {\r\n if (recieveTabDataLenght) {\r\n recieveTabDataLenght(tabsData.length)\r\n }\r\n }, [recieveTabDataLenght, tabsData])\r\n\r\n useEffect(() => {\r\n const handleMessage = (event: MessageEvent) => {\r\n if (event.origin !== window.origin) {\r\n return;\r\n }\r\n const { state } = event.data;\r\n\r\n if (state?.length) {\r\n const data: any = formBuilderDeConversion(state);\r\n\r\n if (data.tab) {\r\n setTabsData(data.tab);\r\n } else if (data.section) {\r\n setSchema(data.section);\r\n }\r\n }\r\n };\r\n\r\n window.addEventListener(\"message\", handleMessage);\r\n\r\n return () => {\r\n window.removeEventListener(\"message\", handleMessage);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (data) {\r\n const formData = formBuilderDeConversion(data)\r\n if (formData?.tab) {\r\n // setSchema([])\r\n setTabsData(formData.tab);\r\n if (activeTab !== undefined) {\r\n setSchema(formData.tab[activeTab]?.data || []);\r\n }\r\n } else {\r\n setSchema(formData.section);\r\n // setTabsData([])\r\n }\r\n const dVals = _.get(defaultValues, fieldArrayName, {})\r\n const wVals = removeMatchingKeyValuePairs((watchedValues || {}), (dVals || {}))\r\n if (mode === 'edit' && !Object.keys(wVals)?.length) {\r\n let formValues: any = {};\r\n let nestedFormValues: any = {};\r\n data.forEach((field: any) => {\r\n const fieldValue = field.value\r\n if (field.name?.includes(\".\")) {\r\n nestedFormValues = createNestedObjectFromDot(field.name, field, nestedFormValues)\r\n } else {\r\n if (fieldValue && (field.field_type !== 'image' || field.field_type !== 'file')) {\r\n if (field?.is_section_field) {\r\n const fieldName = field?.form_switcher_name || field?.form_switcher_label;\r\n formValues = { ...formValues, [fieldName]: fieldValue }\r\n } else if (\r\n field?.name &&\r\n ['company_id', 'email_ids'].includes(field?.name) &&\r\n ['edit_customer', 'add_customer', 'edit_vendor', 'add_vendor'].includes(fieldArrayName)\r\n ) {\r\n formValues = { ...formValues, [field.name]: fieldValue }\r\n } else if (field.field_type === 'date') {\r\n formValues = { ...formValues, [field.name]: dayjs(fieldValue) }\r\n } else if (field.field_type === 'time') {\r\n const [hours, minutes, seconds] = fieldValue.split(\":\").map(Number);\r\n formValues = { ...formValues, [field.name]: dayjs().set('hour', hours).set('minute', minutes).set('second', seconds).set('millisecond', 0) }\r\n } else if (field.name.includes('_id') && !Array.isArray(field?.value)) {\r\n if (fieldArrayName === \"edit_user\" && field.name === \"role_id\") {\r\n formValues = { ...formValues, [field.name]: fieldValue }\r\n } else {\r\n formValues = { ...formValues, [field.name]: Number(fieldValue) }\r\n }\r\n } else {\r\n formValues = { ...formValues, [field.name]: fieldValue }\r\n }\r\n }\r\n }\r\n })\r\n const finalFormValues = { ...formValues, ...nestedFormValues }\r\n reset({ [fieldArrayName]: { ...finalFormValues } })\r\n }\r\n getFormMethods?.({ control, handleSubmit, setValue, reset, resetField, getValues, unregister, trigger, watch, getFieldState, errors, ...rest })\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [data])\r\n\r\n useEffect(() => {\r\n if (activeTab?.toString()) {\r\n if (tabsData && tabsData[activeTab]) {\r\n setSchema(tabsData[activeTab].data);\r\n }\r\n }\r\n }, [activeTab, tabsData]);\r\n\r\n useEffect(() => {\r\n if (watchedValues && handleFormValues) {\r\n handleFormValues?.(watchedValues);\r\n }\r\n }, [handleFormValues, watchedValues])\r\n\r\n useEffect(() => {\r\n if (errors?.[fieldArrayName]) {\r\n setErrorAlert(true)\r\n } else {\r\n setErrorAlert(false)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [fieldArrayName, JSON.stringify(errors)])\r\n\r\n useEffect(() => {\r\n const validatedFields: string[] = [];\r\n if (activeTab != undefined) {\r\n tabsData[activeTab]?.data.forEach((section: any) => {\r\n\r\n if (section.members && Array.isArray(section.members)) {\r\n\r\n section.members.forEach((member: any) => {\r\n if (member.validation && Array.isArray(member.validation)) {\r\n const hasRequiredValidation = member.validation.some(\r\n (validation: any) => validation.type === 'required' && validation.value === true\r\n )\r\n if (hasRequiredValidation) {\r\n // validatedFields.push(fieldArrayName + '.' + member.name);\r\n validatedFields.push(member.name);\r\n }\r\n }\r\n });\r\n }\r\n })\r\n setValidRequiredFields(validatedFields);\r\n }\r\n }, [tabsData, activeTab]);\r\n\r\n useEffect(() => {\r\n if (watchedValues?.account_type) {\r\n\r\n const switchFormData: any[] = [];\r\n schema && schema.forEach((section: any) => {\r\n const sectionMembers = schema && section?.members?.map((ele: any) => ele) || [];\r\n\r\n const switchForms = schema && section?.switcher_forms?.map((form: any) => ({\r\n ...form,\r\n formMembers: sectionMembers.filter(\r\n (member: any) => member.section_form_id === form.id,\r\n ),\r\n }));\r\n if (switchForms) {\r\n switchFormData.push(switchForms)\r\n }\r\n })\r\n\r\n const selectValue = watchedValues?.account_type || \"Individual\";\r\n const switchData = switchFormData && Array.isArray(switchFormData[0])\r\n ? switchFormData[0].filter((form: any) => form.name === selectValue)\r\n : [];\r\n\r\n if (switchData) {\r\n validateRequiredSwitchFormData(switchData)\r\n }\r\n\r\n }\r\n }, [watchedValues?.account_type, schema, validateRequiredSwitchFormData]);\r\n\r\n useEffect(() => {\r\n if (validateRequiredFields.length > 0) {\r\n const updatedRequiredFields = getMissingFields(watchedValues, validateRequiredFields)\r\n\r\n // const updatedRequiredFields = validateRequiredFields.filter((fieldPath) => {\r\n // const watchedValue = watchedFields[fieldPath] ;\r\n // return watchedValue === undefined || watchedValue === null || watchedValue === 0 ;\r\n // });\r\n\r\n updatedRequiredFields.length === 0 ? setTabFormValid(true) : setTabFormValid(false);\r\n } else {\r\n setTabFormValid(true)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [validateRequiredFields, watchedValues, activeTab])\r\n\r\n useEffect(() => {\r\n if (recieveIsValidForm) {\r\n recieveIsValidForm(isTabFormValid)\r\n }\r\n }, [recieveIsValidForm, isTabFormValid])\r\n\r\n\r\n return (\r\n // <FullScreenLayout>\r\n <Box sx={{ width: \"100%\", padding: \"2rem\", ...containerStyles }}>\r\n <FormProvider {...{ control, handleSubmit, setValue, reset, resetField, getValues, unregister, trigger, watch, errors, ...rest }}>\r\n <form id={fieldArrayName} name={fieldArrayName} onSubmit={handleSubmit(handleFormSubmit)}>\r\n {Boolean(tabsData?.length) && (\r\n <>\r\n {errorAlert &&\r\n <Alert severity='error' onClose={() => setErrorAlert(false)}>\r\n Please fill all the required fields.\r\n </Alert>\r\n }\r\n <TabBar\r\n tabs={tabsData}\r\n activeTabs={activeTabs}\r\n activeValue={activeTab}\r\n setActiveValue={setActiveTabValue}\r\n isFormTabValid={isTabFormValid}\r\n />\r\n </>\r\n )}\r\n {schema &&\r\n schema.map((section: any, index: number) => {\r\n const {\r\n isFormSwitcher,\r\n formSwitcherName,\r\n switchForms,\r\n members,\r\n values,\r\n } = getSectionData(section)\r\n\r\n return (\r\n <FormSection\r\n section={section}\r\n index={index}\r\n members={members}\r\n switchForms={switchForms}\r\n isFormSwitcher={isFormSwitcher}\r\n control={control}\r\n fieldArrayName={fieldArrayName}\r\n formSwitcherName={formSwitcherName}\r\n displayAvtar={displayAvtar}\r\n isButton={isButton}\r\n currencyOption={currencyOption}\r\n values={values}\r\n onBlur={onBlur}\r\n setValue={setValue}\r\n onSelectFooterClick={onSelectFooterClick}\r\n getSelectedData={getSelectedData}\r\n setCurrencyOptions={setCurrencyOptions}\r\n refreshOptions={refreshOptions}\r\n handleFieldCleanUp={handleFieldCleanUp}\r\n handleSetCountryCodeField={handleSetCountryCodeField}\r\n handleTableAddClick={handleTableAddClick}\r\n onTableCellChange={onTableCellChange}\r\n // setDetailsData={setDetailsData}\r\n t={t}\r\n images={images}\r\n />\r\n );\r\n })}\r\n </form>\r\n </FormProvider>\r\n </Box>\r\n // </FullScreenLayout>\r\n );\r\n};\r\n\r\nexport default FormParser;","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { useMemo } from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, DynamicSearchSelect, IModalComponentProps } from './form-control';\r\n\r\ninterface IFormValues {\r\n team: {\r\n name: string;\r\n department_id: string | null;\r\n team_lead_id: string | null;\r\n member_ids: string[] | null;\r\n description: string;\r\n };\r\n}\r\n\r\nconst teamValidationSchema = Yup.object().shape({\r\n team: Yup.object().shape({\r\n name: Yup.string().required('Team Name is required'),\r\n department_id: Yup.string().nullable(),\r\n team_lead_id: Yup.string().nullable().required('Team Lead is required'),\r\n member_ids: Yup.array().nullable(),\r\n description: Yup.string(),\r\n })\r\n});\r\n\r\nconst DEFAULT_VALUES = {\r\n team: {\r\n name: '',\r\n department_id: null,\r\n team_lead_id: null,\r\n member_ids: null,\r\n description: '',\r\n }\r\n};\r\n\r\nexport const TeamAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n onSave,\r\n isLoading,\r\n modalProps,\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n const { control, handleSubmit, reset, watch } = useForm<IFormValues>({\r\n mode: 'all',\r\n resolver: yupResolver(teamValidationSchema),\r\n defaultValues: DEFAULT_VALUES\r\n });\r\n\r\n const selectedDepartmentId = watch('team.department_id');\r\n const selectedTeamLeadId = watch('team.team_lead_id');\r\n\r\n const handleModalClose = () => {\r\n reset(DEFAULT_VALUES);\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n await onSave(values);\r\n handleModalClose();\r\n };\r\n\r\n // Memoize filters to prevent unnecessary re-renders of DynamicSearchSelect\r\n const leadFilter = useMemo(() => ({\r\n '&department_id.eq': selectedDepartmentId || 0\r\n }), [selectedDepartmentId]);\r\n\r\n const membersFilter = useMemo(() => ({\r\n '&department_id.eq': selectedDepartmentId || 0,\r\n ...(selectedTeamLeadId ? { '&id.ne': selectedTeamLeadId } : {})\r\n }), [selectedDepartmentId, selectedTeamLeadId]);\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='sm'\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && <ModalLoader />}\r\n <DialogTitle className='brandAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t('hrms.organization_structure.teamModal.title', 'Add Team')}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='brandAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n {/* Team Name - Required */}\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.teamModal.name_label', 'Team Name')}\r\n name='name'\r\n fieldArrayName='team'\r\n placeholder={t('hrms.organization_structure.teamModal.name_placeholder', 'Enter Team Name')}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/* Department - Optional */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.teamModal.department_label', 'Department')}\r\n name='department_id'\r\n placeholder={t('hrms.organization_structure.teamModal.department_placeholder', 'Select Department')}\r\n fieldArrayName='team'\r\n formControl={control as any}\r\n apiType='department'\r\n required={false}\r\n options={[]}\r\n />\r\n </Grid>\r\n\r\n {/* Team Lead - Required */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.teamModal.team_lead_label', 'Team Lead')}\r\n name='team_lead_id'\r\n placeholder={t('hrms.organization_structure.teamModal.team_lead_placeholder', 'Select Team Lead')}\r\n fieldArrayName='team'\r\n formControl={control as any}\r\n apiType='employees'\r\n required\r\n options={[]}\r\n customeFilter={leadFilter}\r\n />\r\n </Grid>\r\n\r\n {/* Members - Optional, multi-select */}\r\n <Grid item sm={12}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.teamModal.members_label', 'Members')}\r\n name='member_ids'\r\n placeholder={t('hrms.organization_structure.teamModal.members_placeholder', 'Select Members')}\r\n fieldArrayName='team'\r\n formControl={control as any}\r\n apiType='employees'\r\n required={false}\r\n options={[]}\r\n is_multiselect\r\n customeFilter={membersFilter}\r\n />\r\n </Grid>\r\n\r\n {/* Description - Optional, full width */}\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='textarea'\r\n formControl={control}\r\n label={t('hrms.organization_structure.teamModal.description_label', 'Description')}\r\n name='description'\r\n fieldArrayName='team'\r\n placeholder={t('hrms.organization_structure.teamModal.description_placeholder', 'Enter Description')}\r\n is_multiline\r\n rows={3}\r\n />\r\n </Grid>\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='brandAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='brandAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}\r\n >\r\n {t('common.cancel')}\r\n </Button>\r\n <Button type='submit'>\r\n {t('common.save')}\r\n </Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </Modal>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, DynamicSearchSelect, DynamicToggleButton, IModalComponentProps } from './form-control';\r\n\r\ninterface IFormValues {\r\n department: {\r\n company_id: string | null;\r\n department_code: string;\r\n name: string;\r\n parent_department_id: string | null;\r\n department_head_id: string | null;\r\n cost_code: string;\r\n status: boolean;\r\n description: string;\r\n };\r\n}\r\n\r\nconst departmentValidationSchema = Yup.object().shape({\r\n department: Yup.object().shape({\r\n company_id: Yup.string().nullable().required('Company is required'),\r\n department_code: Yup.string().required('Department Code is required'),\r\n name: Yup.string().required('Department Name is required'),\r\n parent_department_id: Yup.string().nullable(),\r\n department_head_id: Yup.string().nullable(),\r\n cost_code: Yup.string(),\r\n status: Yup.boolean(),\r\n description: Yup.string(),\r\n })\r\n});\r\n\r\nexport const DepartmentAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n onSave,\r\n isLoading,\r\n modalProps,\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n const { control, handleSubmit, reset, trigger, watch } = useForm<any>({\r\n mode: 'all',\r\n resolver: yupResolver(departmentValidationSchema),\r\n defaultValues: {\r\n department: {\r\n company_id: null,\r\n department_code: '',\r\n name: '',\r\n parent_department_id: null,\r\n department_head_id: null,\r\n cost_code: '',\r\n status: true,\r\n description: '',\r\n }\r\n }\r\n });\r\n\r\n const rootCompanyId = watch('department.company_id');\r\n\r\n const handleModalClose = () => {\r\n reset({\r\n department: {\r\n company_id: null,\r\n department_code: '',\r\n name: '',\r\n parent_department_id: null,\r\n department_head_id: null,\r\n cost_code: '',\r\n status: true,\r\n description: '',\r\n }\r\n });\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await onSave(values as any);\r\n handleModalClose();\r\n };\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='sm'\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && <ModalLoader />}\r\n <DialogTitle className='brandAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t('hrms.organization_structure.departmentModal.title', 'Add Department')}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='brandAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n {/* Company - Required */}\r\n <Grid item sm={12}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.departmentModal.company_label', 'Company')}\r\n name='company_id'\r\n placeholder={t('hrms.organization_structure.departmentModal.company_placeholder', 'Select Company')}\r\n fieldArrayName='department'\r\n formControl={control as any}\r\n apiType='company'\r\n required\r\n options={[]}\r\n />\r\n </Grid>\r\n\r\n {/* Department Code - Required */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.departmentModal.code_label', 'Department Code')}\r\n name='department_code'\r\n fieldArrayName='department'\r\n placeholder={t('hrms.organization_structure.departmentModal.code_placeholder', 'Enter Department Code')}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/* Department Name - Required */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.departmentModal.name_label', 'Department Name')}\r\n name='name'\r\n fieldArrayName='department'\r\n placeholder={t('hrms.organization_structure.departmentModal.name_placeholder', 'Enter Department Name')}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/* Parent Department - Optional */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.departmentModal.parent_department_label', 'Parent Department')}\r\n name='parent_department_id'\r\n placeholder={t('hrms.organization_structure.departmentModal.parent_department_placeholder', 'Select Parent Department')}\r\n fieldArrayName='department'\r\n formControl={control as any}\r\n apiType='department'\r\n required={false}\r\n options={[]}\r\n customeFilter={{\r\n 'is_parent.eq': true,\r\n '&company_id.eq': rootCompanyId || 0\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Department Head - Optional */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.departmentModal.department_head_label', 'Department Head')}\r\n name='department_head_id'\r\n placeholder={t('hrms.organization_structure.departmentModal.department_head_placeholder', 'Select Department Head')}\r\n fieldArrayName='department'\r\n formControl={control as any}\r\n apiType='employees'\r\n required={false}\r\n options={[]}\r\n customeFilter={{\r\n '&company_id.eq': rootCompanyId || 0\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Cost Code - Optional */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.departmentModal.cost_code_label', 'Cost Code')}\r\n name='cost_code'\r\n fieldArrayName='department'\r\n placeholder={t('hrms.organization_structure.departmentModal.cost_code_placeholder', 'Enter Cost Code')}\r\n />\r\n </Grid>\r\n\r\n {/* Status Toggle */}\r\n <Grid item sm={6}>\r\n <DynamicToggleButton\r\n formControl={control as any}\r\n name='status'\r\n fieldArrayName='department'\r\n label={t('hrms.organization_structure.departmentModal.status_label', 'Status')}\r\n title={t('common.active', 'Active')}\r\n titlePosition='end'\r\n position={3}\r\n />\r\n </Grid>\r\n\r\n {/* Description - Optional, full width */}\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='textarea'\r\n formControl={control}\r\n label={t('hrms.organization_structure.departmentModal.description_label', 'Description')}\r\n name='description'\r\n fieldArrayName='department'\r\n placeholder={t('hrms.organization_structure.departmentModal.description_placeholder', 'Enter Description')}\r\n is_multiline\r\n rows={3}\r\n />\r\n </Grid>\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='brandAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='brandAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}\r\n >\r\n {t('common.cancel')}\r\n </Button>\r\n <Button type='button' onClick={handleSubmit(onSubmit)}>\r\n {t('common.save')}\r\n </Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </>\r\n </Modal>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useState } from 'react';\n\nimport Modal from '../../../../modal/modal';\nimport Typography from '../../../../typography/typography';\nimport DynamicInput from '../text';\nimport Button from '../../../../button/button';\nimport ModalLoader from '../../../../loaders/modal-loader';\nimport Toast from '../../../../toast/toast';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n Box,\n DialogActions,\n DialogContent,\n DialogProps,\n DialogTitle,\n Grid,\n IconButton\n} from '@mui/material';\nimport Close from '@mui/icons-material/Close';\n\nimport { useForm } from 'react-hook-form';\nimport * as Yup from 'yup';\nimport { yupResolver } from '@hookform/resolvers/yup';\n\nimport './location-add-modal.scss';\nimport DynamicSearchSelect from '../dynamic-select';\ninterface BrandAddModalProps {\n isOpen: boolean;\n setIsOpen: () => void;\n modalProps?: DialogProps;\n onSave: (data: string) => void;\n isLoading?: boolean;\n}\n\ninterface IFormValues {\n location_data: {\n name: string;\n };\n}\n\ninterface IToast {\n type: 'normal' | 'alert';\n message: string;\n}\n\nconst validationSchema = Yup.object().shape({\n location_data: Yup.object().shape({\n name: Yup.string().required('Name is required')\n })\n});\n\nconst LocationAddModal: React.FC<BrandAddModalProps> = ({\n isOpen,\n setIsOpen,\n modalProps,\n onSave,\n isLoading\n}) => {\n const { t } = useTranslation();\n const [toast, setToast] = useState<IToast | null>(null);\n const { control, handleSubmit, reset } = useForm<any>({\n mode: 'all',\n resolver: yupResolver(validationSchema)\n });\n const handleModalClose = () => {\n reset({ location_data: undefined });\n setIsOpen();\n };\n\n const onSubmit = async (values: IFormValues) => {\n // handleModalClose();\n onSave(values?.location_data)\n };\n\n return (\n <Modal\n open={isOpen}\n onClose={handleModalClose}\n maxWidth='sm'\n fullWidth\n {...modalProps}>\n <>\n \n <form onSubmit={handleSubmit(onSubmit)}>\n {isLoading && (\n <ModalLoader />\n )}\n <DialogTitle className='brandAddModal--DialogTitle'>\n <Typography type='s3' color='inherit' weight='medium'>\n {t(\"inventory.item.locationModal.title\")}\n </Typography>\n <IconButton onClick={handleModalClose}>\n <Close fontSize='small' />\n </IconButton>\n </DialogTitle>\n <DialogContent className='brandAddModal--DialogContents'>\n \n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\n <Grid item sm={6}>\n <DynamicInput\n type='text'\n formControl={control}\n label={t(\"inventory.item.locationModal.location_name_label\")}\n name='name'\n fieldArrayName='location_data'\n placeholder={t(\"inventory.item.locationModal.location_name_placeholder\")}\n required\n />\n </Grid>\n <Grid item sm={6}>\n <DynamicInput\n type='text'\n formControl={control}\n label={t(\"inventory.item.locationModal.location_code_label\")}\n name='short_name'\n fieldArrayName='location_data'\n placeholder={t(\"inventory.item.locationModal.location_code_placeholder\")}\n required\n />\n </Grid>\n <Grid item sm={6}>\n <DynamicSearchSelect\n label={t(\n \"accounting.authorize_commission.fields.company_label\"\n )}\n name=\"company_id\"\n placeholder={t(\n \"accounting.authorize_commission.fields.company_placeholder\"\n )}\n fieldArrayName='location_data'\n formControl={control}\n apiType='company'\n getSelectedData={(data: any) =>\n // setSelectedData(name, data)\n console.log(\"data\", data)\n }\n required={true}\n />\n </Grid>\n </Grid>\n \n </DialogContent>\n <DialogActions className='brandAddModal--DialogAction'>\n <span></span>\n <Box display='flex' gap={1.5}>\n <Button\n className='brandAddModal--DialogAction--WhiteBtn'\n onClick={handleModalClose}>\n {t(\"common.cancel\")}\n </Button>\n <Button type='button' onClick={handleSubmit(onSubmit)}>{t(\"common.save\")}</Button>\n </Box>\n </DialogActions>\n </form>\n </>\n <Toast\n open={Boolean(toast)}\n type={toast?.type}\n message={toast?.message}\n handleClose={() => setToast(null)}\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\n />\n </Modal>\n );\n};\n\nexport default LocationAddModal;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, DynamicSearchSelect, DynamicToggleButton, IModalComponentProps } from './form-control';\r\n\r\ninterface IFormValues {\r\n designation: {\r\n company_id: string | null;\r\n designation_code: string;\r\n name: string;\r\n reports_to: string | null;\r\n level: string;\r\n status: boolean;\r\n description: string;\r\n };\r\n}\r\n\r\nconst designationValidationSchema = Yup.object().shape({\r\n designation: Yup.object().shape({\r\n company_id: Yup.string().nullable().required('Company is required'),\r\n designation_code: Yup.string(),\r\n name: Yup.string().required('Designation Name is required'),\r\n reports_to: Yup.string().nullable(),\r\n level: Yup.number().nullable().typeError('Level must be a number'),\r\n status: Yup.boolean(),\r\n description: Yup.string(),\r\n })\r\n});\r\n\r\nexport const DesignationAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n onSave,\r\n isLoading,\r\n modalProps,\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n const { control, handleSubmit, reset, trigger, watch } = useForm<any>({\r\n mode: 'all',\r\n resolver: yupResolver(designationValidationSchema),\r\n defaultValues: {\r\n designation: {\r\n company_id: null,\r\n designation_code: '',\r\n name: '',\r\n reports_to: null,\r\n level: null,\r\n status: true,\r\n description: '',\r\n }\r\n }\r\n });\r\n\r\n const rootCompanyId = watch('designation.company_id');\r\n\r\n const handleModalClose = () => {\r\n reset({\r\n designation: {\r\n company_id: null,\r\n designation_code: '',\r\n name: '',\r\n reports_to: null,\r\n level: null,\r\n status: true,\r\n description: '',\r\n }\r\n });\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await onSave(values as any);\r\n handleModalClose();\r\n };\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='sm'\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && <ModalLoader />}\r\n <DialogTitle className='brandAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t('hrms.organization_structure.designationModal.title', 'Add Designation')}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='brandAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n {/* Company - Required */}\r\n <Grid item sm={12}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.designationModal.company_label', 'Company')}\r\n name='company_id'\r\n placeholder={t('hrms.organization_structure.designationModal.company_placeholder', 'Select Company')}\r\n fieldArrayName='designation'\r\n formControl={control as any}\r\n apiType='company'\r\n required\r\n options={[]}\r\n />\r\n </Grid>\r\n\r\n {/* Designation Code */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.designationModal.code_label', 'Designation Code')}\r\n name='designation_code'\r\n fieldArrayName='designation'\r\n placeholder={t('hrms.organization_structure.designationModal.code_placeholder', 'Enter Designation Code')}\r\n />\r\n </Grid>\r\n\r\n {/* Designation Name - Required */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t('hrms.organization_structure.designationModal.name_label', 'Designation Name')}\r\n name='name'\r\n fieldArrayName='designation'\r\n placeholder={t('hrms.organization_structure.designationModal.name_placeholder', 'Enter Designation Name')}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/* Reports To - Optional (employees) */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t('hrms.organization_structure.designationModal.reports_to_label', 'Reports To')}\r\n name='reports_to'\r\n placeholder={t('hrms.organization_structure.designationModal.reports_to_placeholder', 'Select Reports To')}\r\n fieldArrayName='designation'\r\n formControl={control as any}\r\n apiType='employees'\r\n required={false}\r\n options={[]}\r\n customeFilter={{\r\n '&company_id.eq': rootCompanyId || 0\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Level - Optional */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='number'\r\n formControl={control}\r\n label={t('hrms.organization_structure.designationModal.level_label', 'Level')}\r\n name='level'\r\n fieldArrayName='designation'\r\n placeholder={t('hrms.organization_structure.designationModal.level_placeholder', 'Enter Level')}\r\n />\r\n </Grid>\r\n\r\n {/* Status Toggle */}\r\n <Grid item sm={6}>\r\n <DynamicToggleButton\r\n formControl={control as any}\r\n name='status'\r\n fieldArrayName='designation'\r\n label={t('hrms.organization_structure.designationModal.status_label', 'Status')}\r\n title={t('common.active', 'Active')}\r\n titlePosition='end'\r\n position={3}\r\n />\r\n </Grid>\r\n\r\n {/* Description - Optional, full width */}\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='textarea'\r\n formControl={control}\r\n label={t('hrms.organization_structure.designationModal.description_label', 'Description')}\r\n name='description'\r\n fieldArrayName='designation'\r\n placeholder={t('hrms.organization_structure.designationModal.description_placeholder', 'Enter Description')}\r\n is_multiline\r\n rows={3}\r\n />\r\n </Grid>\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='brandAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='brandAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}\r\n >\r\n {t('common.cancel')}\r\n </Button>\r\n <Button type='button' onClick={handleSubmit(onSubmit)}>\r\n {t('common.save')}\r\n </Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </>\r\n </Modal>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useState, useEffect, useCallback } from 'react';\r\n\r\nimport Modal from '../../../../modal/modal';\r\nimport Typography from '../../../../typography/typography';\r\nimport DynamicInput from '../text';\r\nimport Button from '../../../../button/button';\r\nimport ModalLoader from '../../../../loaders/modal-loader';\r\nimport Toast from '../../../../toast/toast';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\n\r\nimport { FormProvider, useForm, useWatch } from 'react-hook-form';\r\nimport * as Yup from 'yup';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\n\r\nimport DynamicSearchSelect from '../dynamic-select';\r\nimport DynamicSelect from '../select';\r\nimport { IModalComponentProps } from '../../index';\r\nimport { fetchOptions, skuGenerator } from '../../../../../utils/common';\r\n\r\nimport './fixed-asset-item-add-modal.scss';\r\n\r\ninterface IFormValues {\r\n inventory_fixed_asset_item: {\r\n name: string;\r\n sku: string;\r\n category: number | null;\r\n base_unit: number | null;\r\n company: number[];\r\n unit_of_measurement: number | null;\r\n stock_unit: number | null;\r\n purchase_unit: number | null;\r\n sales_unit: number | null;\r\n costing_method: string;\r\n depreciation_method: string;\r\n computation_method: string;\r\n default_tax_id: number | null;\r\n income_account_id: number | null;\r\n asset_account_id: number | null;\r\n cogs_account_id: number | null;\r\n fixed_asset_account_id: number | null;\r\n depreciation_account_id: number | null;\r\n declining_factor: number | null;\r\n };\r\n}\r\n\r\ninterface IToast {\r\n type: 'normal' | 'alert';\r\n message: string;\r\n}\r\n\r\nconst COSTING_METHODS = [\r\n { label: 'FIFO', value: 'FIFO' },\r\n { label: 'LIFO', value: 'LIFO' },\r\n { label: 'Weighted Average Cost', value: 'Weighted Average Cost' }\r\n];\r\n\r\nconst DEPRECIATION_METHODS = [\r\n { label: 'Straight line', value: 'Straight line' },\r\n { label: 'Declining', value: 'Declining' }\r\n];\r\n\r\nconst COMPUTATION_METHODS = [\r\n { label: 'Constant periods', value: 'Constant periods' },\r\n { label: 'Based on days per period', value: 'Based on days per period' }\r\n];\r\n\r\nconst validationSchema = Yup.object().shape({\r\n inventory_fixed_asset_item: Yup.object().shape({\r\n name: Yup.string().required('Name is required'),\r\n sku: Yup.string().required('SKU is required'),\r\n category: Yup.mixed().required('Category is required'),\r\n base_unit: Yup.mixed().required('Base Unit is required'),\r\n company: Yup.array().min(1, 'At least one company is required').required('Company is required'),\r\n unit_of_measurement: Yup.mixed().required('Unit of Measurement is required'),\r\n stock_unit: Yup.mixed().nullable(),\r\n purchase_unit: Yup.mixed().nullable(),\r\n sales_unit: Yup.mixed().nullable(),\r\n costing_method: Yup.string().required('Costing Method is required'),\r\n depreciation_method: Yup.string().required('Depreciation Method is required'),\r\n computation_method: Yup.string().required('Computation Method is required'),\r\n default_tax_id: Yup.mixed().required('Default Tax is required'),\r\n income_account_id: Yup.mixed().required('Income Account is required'),\r\n asset_account_id: Yup.mixed().required('Asset Account is required'),\r\n cogs_account_id: Yup.mixed().required('COGS Account is required'),\r\n fixed_asset_account_id: Yup.mixed().required('Fixed Asset Account is required'),\r\n depreciation_account_id: Yup.mixed().required('Depreciation Account is required'),\r\n declining_factor: Yup.number()\r\n .nullable()\r\n .when('depreciation_method', {\r\n is: 'Declining',\r\n then: (schema) => schema.required('Declining Factor is required').min(0, 'Must be positive'),\r\n otherwise: (schema) => schema.nullable(),\r\n }),\r\n })\r\n});\r\n\r\nconst FixedAssetItemAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n modalProps,\r\n onSave,\r\n isLoading\r\n}) => {\r\n const { t } = useTranslation();\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n const [selectedCategoryData, setSelectedCategoryData] = useState<any>(null);\r\n const unitFields = ['stock_unit', 'purchase_unit', 'sales_unit', 'consumption_unit', 'base_unit'];\r\n const defaultValues = {\r\n inventory_fixed_asset_item: {\r\n name: '',\r\n sku: '',\r\n category: null,\r\n base_unit: null,\r\n company: [],\r\n unit_of_measurement: null,\r\n stock_unit: null,\r\n purchase_unit: null,\r\n sales_unit: null,\r\n costing_method: '',\r\n depreciation_method: '',\r\n computation_method: '',\r\n default_tax_id: null,\r\n income_account_id: null,\r\n asset_account_id: null,\r\n cogs_account_id: null,\r\n fixed_asset_account_id: null,\r\n depreciation_account_id: null,\r\n declining_factor: null,\r\n status: 1\r\n }\r\n }\r\n\r\n const methods = useForm<any>({\r\n mode: 'all',\r\n resolver: yupResolver(validationSchema),\r\n defaultValues: defaultValues,\r\n });\r\n const { control, handleSubmit, reset, setValue, trigger } = methods || {};\r\n\r\n // Watch name and category for auto-generating SKU\r\n const [watchedName, watchedCategory, watchedUom, watchedDepreciationMethod] = useWatch({\r\n control, name:\r\n ['inventory_fixed_asset_item.name',\r\n 'inventory_fixed_asset_item.category',\r\n 'inventory_fixed_asset_item.unit_of_measurement',\r\n 'inventory_fixed_asset_item.depreciation_method']\r\n });\r\n\r\n\r\n // Auto-generate SKU when name or category changes\r\n useEffect(() => {\r\n if (watchedName && selectedCategoryData?.category_name) {\r\n const generatedSku = skuGenerator({\r\n name: watchedName,\r\n category: selectedCategoryData.category_name\r\n });\r\n setValue('inventory_fixed_asset_item.sku', generatedSku);\r\n }\r\n }, [watchedName, selectedCategoryData, setValue]);\r\n\r\n const handleModalClose = () => {\r\n reset(defaultValues);\r\n setSelectedCategoryData(null);\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await onSave({\r\n ...values.inventory_fixed_asset_item as any,\r\n type: 'inventory-fixed-asset',\r\n status: 1\r\n });\r\n handleModalClose();\r\n };\r\n\r\n const handleCategorySelect = useCallback((data: any) => {\r\n setSelectedCategoryData(data);\r\n }, []);\r\n\r\n const updateUomFields = useCallback(async () => {\r\n if (!watchedUom) return\r\n const filter = {\r\n '&template_id.eq': watchedUom,\r\n '&is_base_unit.eq': 1\r\n }\r\n const uomData = await fetchOptions('uom', filter, [], false)\r\n unitFields.forEach((item) => {\r\n setValue(`inventory_fixed_asset_item.${item}`, uomData?.id)\r\n })\r\n }, [watchedUom])\r\n useEffect(() => {\r\n updateUomFields()\r\n }, [updateUomFields])\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='md'\r\n fullWidth\r\n {...modalProps}>\r\n <>\r\n <FormProvider {...methods}>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && (\r\n <ModalLoader />\r\n )}\r\n <DialogTitle className='fixedAssetItemAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t(\"inventory.fixed_asset_items.modal.title\", \"Add Fixed Asset Item\")}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='fixedAssetItemAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n {/* Name */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.fixed_asset_items.modal.name_label\", \"Name\")}\r\n name='name'\r\n fieldArrayName='inventory_fixed_asset_item'\r\n placeholder={t(\"inventory.fixed_asset_items.modal.name_placeholder\", \"Enter Name\")}\r\n required\r\n />\r\n </Grid>\r\n\r\n {/* SKU - Auto-generated */}\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.fixed_asset_items.modal.sku_label\", \"SKU\")}\r\n name='sku'\r\n fieldArrayName='inventory_fixed_asset_item'\r\n placeholder={t(\"inventory.fixed_asset_items.modal.sku_placeholder\", \"Auto-generated\")}\r\n required\r\n disabled\r\n />\r\n </Grid>\r\n\r\n {/* Category */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.category_label\", \"Category\")}\r\n name=\"category\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.category_placeholder\", \"Select Category\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='categoryItems'\r\n options={[]}\r\n required={true}\r\n getSelectedData={handleCategorySelect}\r\n />\r\n </Grid>\r\n\r\n\r\n {/* Company */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.company_label\", \"Company\")}\r\n name=\"company\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.company_placeholder\", \"Select Company\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='company'\r\n options={[]}\r\n is_multiselect={true}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Costing Method */}\r\n <Grid item sm={6}>\r\n <DynamicSelect\r\n label={t(\"inventory.fixed_asset_items.modal.costing_method_label\", \"Costing Method\")}\r\n name=\"costing_method\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.costing_method_placeholder\", \"Select Costing Method\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n options={COSTING_METHODS}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Unit of Measurement Section Header */}\r\n <Grid item xs={12} pt={2}>\r\n <Typography type='s3' weight='medium' color='theme.neutral.900'>\r\n {t(\"inventory.fixed_asset_items.modal.uom_section\", \"Unit of Measurement\")}\r\n </Typography>\r\n </Grid>\r\n\r\n {/* UOM Template */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.unit_of_measurement_label\", \"UOM Template\")}\r\n name=\"unit_of_measurement\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.unit_of_measurement_placeholder\", \"Select UOM Template\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='uom_templates'\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Stock Unit */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.stock_unit_label\", \"Stock Unit\")}\r\n name=\"stock_unit\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.stock_unit_placeholder\", \"Select Stock Unit\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='uom'\r\n customFilter={{\r\n '&template_id.eq': watchedUom || 0\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Purchase Unit */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.purchase_unit_label\", \"Purchase Unit\")}\r\n name=\"purchase_unit\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.purchase_unit_placeholder\", \"Select Purchase Unit\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='uom'\r\n customFilter={{\r\n '&template_id.eq': watchedUom || 0\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Sales Unit */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.sales_unit_label\", \"Consumption Unit\")}\r\n name=\"sales_unit\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.sales_unit_placeholder\", \"Select Sales Unit\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='uom'\r\n customFilter={{\r\n '&template_id.eq': watchedUom || 0\r\n }}\r\n />\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.sales_unit_label\", \"Consumption Unit\")}\r\n name=\"consumption_unit\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.sales_unit_placeholder\", \"Select Sales Unit\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='uom'\r\n customFilter={{\r\n '&template_id.eq': watchedUom || 0\r\n }}\r\n />\r\n </Grid>\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.base_unit_label\", \"Base Unit\")}\r\n name=\"base_unit\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.base_unit_placeholder\", \"Select Base Unit\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n disabled\r\n apiType='uom'\r\n customFilter={{\r\n '&template_id.eq': watchedUom || 0,\r\n '&is_base_unit.eq': 1\r\n }}\r\n />\r\n </Grid>\r\n\r\n {/* Depreciation Method */}\r\n <Grid item sm={6}>\r\n <DynamicSelect\r\n label={t(\"inventory.fixed_asset_items.modal.depreciation_method_label\", \"Depreciation Method\")}\r\n name=\"depreciation_method\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.depreciation_method_placeholder\", \"Select Depreciation Method\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n options={DEPRECIATION_METHODS}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Declining Factor */}\r\n {watchedDepreciationMethod === 'Declining' && (\r\n <Grid item sm={6}>\r\n <DynamicInput\r\n type='number'\r\n formControl={control}\r\n label={t(\"inventory.fixed_asset_items.modal.declining_factor_label\", \"Declining Factor\")}\r\n name='declining_factor'\r\n fieldArrayName='inventory_fixed_asset_item'\r\n placeholder={t(\"inventory.fixed_asset_items.modal.declining_factor_placeholder\", \"Enter Declining Factor\")}\r\n required\r\n />\r\n </Grid>\r\n )}\r\n\r\n {/* Computation Method */}\r\n <Grid item sm={6}>\r\n <DynamicSelect\r\n label={t(\"inventory.fixed_asset_items.modal.computation_method_label\", \"Computation Method\")}\r\n name=\"computation_method\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.computation_method_placeholder\", \"Select Computation Method\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n options={COMPUTATION_METHODS}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Accounting Section Header */}\r\n <Grid item xs={12} pt={2}>\r\n <Typography type='s3' weight='medium' color='theme.neutral.900'>\r\n {t(\"inventory.fixed_asset_items.modal.accounting_section\", \"Accounting\")}\r\n </Typography>\r\n </Grid>\r\n\r\n {/* Default Tax */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.default_tax_label\", \"Default Tax\")}\r\n name=\"default_tax_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.default_tax_placeholder\", \"Select Default Tax\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='taxTemplate'\r\n options={[]}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Income Account */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.income_account_label\", \"Income Account\")}\r\n name=\"income_account_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.income_account_placeholder\", \"Select Income Account\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='accounts'\r\n options={[]}\r\n required={true}\r\n customeFilter={{ '&account_parent_type.in': ['Income', 'Assets'] }}\r\n />\r\n </Grid>\r\n\r\n {/* Asset Account */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.asset_account_label\", \"Asset Account\")}\r\n name=\"asset_account_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.asset_account_placeholder\", \"Select Asset Account\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='accounts'\r\n options={[]}\r\n required={true}\r\n customeFilter={{ '&account_parent_type.eq': 'Assets' }}\r\n />\r\n </Grid>\r\n\r\n {/* COGS Account */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.cogs_account_label\", \"COGS Account\")}\r\n name=\"cogs_account_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.cogs_account_placeholder\", \"Select COGS Account\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='accounts'\r\n options={[]}\r\n required={true}\r\n />\r\n </Grid>\r\n\r\n {/* Fixed Asset Account */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.fixed_asset_account_label\", \"Fixed Asset Account\")}\r\n name=\"fixed_asset_account_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.fixed_asset_account_placeholder\", \"Select Fixed Asset Account\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='accounts'\r\n options={[]}\r\n required={true}\r\n customeFilter={{ '&account_parent_type.eq': 'Assets' }}\r\n />\r\n </Grid>\r\n\r\n {/* Depreciation Account */}\r\n <Grid item sm={6}>\r\n <DynamicSearchSelect\r\n label={t(\"inventory.fixed_asset_items.modal.depreciation_account_label\", \"Depreciation Account\")}\r\n name=\"depreciation_account_id\"\r\n placeholder={t(\"inventory.fixed_asset_items.modal.depreciation_account_placeholder\", \"Select Depreciation Account\")}\r\n fieldArrayName='inventory_fixed_asset_item'\r\n formControl={control}\r\n apiType='accounts'\r\n options={[]}\r\n required={true}\r\n customeFilter={{ '&account_parent_type.eq': 'Assets' }}\r\n />\r\n </Grid>\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='fixedAssetItemAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='fixedAssetItemAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}>\r\n {t(\"common.cancel\")}\r\n </Button>\r\n <Button type=\"button\" onClick={handleSubmit(onSubmit)}>{t(\"common.save\")}</Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </FormProvider>\r\n </>\r\n <Toast\r\n open={Boolean(toast)}\r\n type={toast?.type}\r\n message={toast?.message}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\r\n />\r\n </Modal>\r\n );\r\n};\r\n\r\nexport default FixedAssetItemAddModal;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, IModalComponentProps } from './form-control';\r\n\r\ninterface IFormValues {\r\n brand_data: {\r\n name: string;\r\n };\r\n}\r\n\r\nconst brandValidationSchema = Yup.object().shape({\r\n brand_data: Yup.object().shape({\r\n name: Yup.string().required('Name is required')\r\n })\r\n});\r\n\r\nexport const BrandAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n onSave,\r\n isLoading,\r\n modalProps,\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n const { control, handleSubmit, reset, trigger } = useForm<any>({\r\n mode: 'all',\r\n resolver: yupResolver(brandValidationSchema),\r\n defaultValues: {\r\n brand_data: {\r\n name: '',\r\n }\r\n }\r\n });\r\n\r\n const handleModalClose = () => {\r\n reset({ brand_data: { name: '' } });\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await onSave(values?.brand_data as any);\r\n handleModalClose();\r\n };\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='sm'\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && <ModalLoader />}\r\n <DialogTitle className='brandAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t(\"inventory.item.brandModal.title\")}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='brandAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.item.brandModal.brand_name_label\")}\r\n name='name'\r\n fieldArrayName='brand_data'\r\n placeholder={t(\"inventory.item.brandModal.brand_name_placeholder\")}\r\n required\r\n />\r\n </Grid>\r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='brandAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='brandAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}\r\n >\r\n {t(\"common.cancel\")}\r\n </Button>\r\n <Button type='button' onClick={handleSubmit(onSubmit)}>{t(\"common.save\")}</Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </>\r\n </Modal>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n Box,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, IModalComponentProps } from './form-control';\r\n\r\ninterface IFormValues {\r\n category_data: {\r\n category_name: string;\r\n };\r\n}\r\n\r\nconst categoryValidationSchema = Yup.object().shape({\r\n category_data: Yup.object().shape({\r\n category_name: Yup.string().required('Category Name is required'),\r\n })\r\n});\r\n\r\nexport const CategoryAddModal: React.FC<IModalComponentProps> = ({\r\n isOpen,\r\n setIsOpen,\r\n onSave,\r\n isLoading,\r\n modalProps,\r\n}) => {\r\n const { t } = useTranslation();\r\n\r\n const { control, handleSubmit, reset, trigger } = useForm<any>({\r\n mode: 'all',\r\n resolver: yupResolver(categoryValidationSchema),\r\n defaultValues: {\r\n category_data: {\r\n category_name: '',\r\n }\r\n }\r\n });\r\n\r\n const handleModalClose = () => {\r\n reset({ category_data: { category_name: '' } });\r\n setIsOpen();\r\n };\r\n\r\n const onSubmit = async (values: IFormValues) => {\r\n const isValid = await trigger();\r\n if (!isValid) return;\r\n await onSave({\r\n category_data: {\r\n category_name: values.category_data.category_name,\r\n sku_prefix : values.category_data.sku_prefix,\r\n unique_items : values.category_data.unique_items,\r\n status: true,\r\n },\r\n attribute_data: [],\r\n } as any);\r\n handleModalClose();\r\n };\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n onClose={handleModalClose}\r\n maxWidth='sm'\r\n fullWidth\r\n {...modalProps}\r\n >\r\n <>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n {isLoading && <ModalLoader />}\r\n <DialogTitle className='categoryAddModal--DialogTitle'>\r\n <Typography type='s3' color='inherit' weight='medium'>\r\n {t(\"inventory.item.categoryModal.title\")}\r\n </Typography>\r\n <IconButton onClick={handleModalClose}>\r\n <Close fontSize='small' />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent className='categoryAddModal--DialogContents'>\r\n <Grid container rowGap={1.5} columnSpacing={3} pt={3}>\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.item.categoryModal.category_name_label\")}\r\n name='category_name'\r\n fieldArrayName='category_data'\r\n placeholder={t(\"inventory.item.categoryModal.category_name_placeholder\")}\r\n required\r\n />\r\n </Grid> \r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.item.categoryModal.sku_prefix_label\")}\r\n name='sku_prefix'\r\n fieldArrayName='category_data'\r\n placeholder={t(\"inventory.item.categoryModal.sku_prefix_placeholder\")}\r\n />\r\n </Grid> \r\n\r\n <Grid item sm={12}>\r\n <DynamicInput\r\n type='text'\r\n formControl={control}\r\n label={t(\"inventory.item.categoryModal.unique_items_label\")}\r\n name='unique_items'\r\n fieldArrayName='category_data'\r\n placeholder={t(\"inventory.item.categoryModal.unique_items_placeholder\")}\r\n />\r\n </Grid> \r\n </Grid>\r\n </DialogContent>\r\n <DialogActions className='categoryAddModal--DialogAction'>\r\n <span></span>\r\n <Box display='flex' gap={1.5}>\r\n <Button\r\n className='categoryAddModal--DialogAction--WhiteBtn'\r\n onClick={handleModalClose}\r\n >\r\n {t(\"common.cancel\")}\r\n </Button>\r\n <Button type='button' onClick={handleSubmit(onSubmit)}>{t(\"common.save\")}</Button>\r\n </Box>\r\n </DialogActions>\r\n </form>\r\n </>\r\n </Modal>\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { useState } from 'react';\r\nimport {\r\n\tBox,\r\n\tDialogActions,\r\n\tDialogContent,\r\n\tDialogTitle,\r\n\tGrid,\r\n\tIconButton,\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Button from '../button/button';\r\nimport { DynamicInput } from '../form-control';\r\nimport Modal from '../modal/modal';\r\nimport ModalLoader from '../loaders/modal-loader';\r\nimport Typography from '../typography/typography';\r\n\r\ninterface SourceTypeAddModalProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: (isOpen?: boolean) => void;\r\n\tisLoading?: boolean;\r\n\tonSave: (data: any) => Promise<void> | void;\r\n\tmodalProps?: any;\r\n}\r\n\r\ninterface SourceTypeFormValues {\r\n\tsource_type: {\r\n\t\tname: string;\r\n\t\tdescription: string;\r\n\t};\r\n}\r\n\r\nconst validationSchema = Yup.object().shape({\r\n\tsource_type: Yup.object().shape({\r\n\t\tname: Yup.string()\r\n\t\t\t.trim()\r\n\t\t\t.required('common.source_type.source_type_name_required')\r\n\t\t\t.max(255, 'common.source_type.source_type_name_max'),\r\n\t\tdescription: Yup.string()\r\n\t\t\t.nullable()\r\n\t\t\t.max(1000, 'common.source_type.description_max'),\r\n\t}),\r\n});\r\n\r\nconst defaultValues: SourceTypeFormValues = {\r\n\tsource_type: {\r\n\t\tname: '',\r\n\t\tdescription: '',\r\n\t},\r\n};\r\n\r\nconst SourceTypeAddModal: React.FC<SourceTypeAddModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tisLoading = false,\r\n\tonSave,\r\n\tmodalProps,\r\n}) => {\r\n\tconst { t } = useTranslation();\r\n\tconst [isSubmitting, setIsSubmitting] = useState(false);\r\n\r\n\tconst { control, handleSubmit, reset } = useForm<SourceTypeFormValues>({\r\n\t\tmode: 'all',\r\n\t\tresolver: yupResolver(validationSchema),\r\n\t\tdefaultValues,\r\n\t});\r\n\r\n\tconst handleClose = () => {\r\n\t\treset(defaultValues);\r\n\t\tsetIsOpen(false);\r\n\t};\r\n\r\n\tconst onSubmit = async (values: SourceTypeFormValues) => {\r\n\t\tsetIsSubmitting(true);\r\n\t\ttry {\r\n\t\t\tawait onSave({\r\n\t\t\t\t...values.source_type,\r\n\t\t\t\tdescription: values.source_type.description?.trim() || null,\r\n\t\t\t});\r\n\t\t\thandleClose();\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(t('common.source_type.error_creating_source_type'), error);\r\n\t\t} finally {\r\n\t\t\tsetIsSubmitting(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleSubmitForm = (e: React.FormEvent<HTMLFormElement>) => {\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t\thandleSubmit(onSubmit)(e);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\topen={isOpen}\r\n\t\t\tonClose={handleClose}\r\n\t\t\tmaxWidth={modalProps?.maxWidth || 'sm'}\r\n\t\t\tfullWidth={modalProps?.fullWidth ?? true}\r\n\t\t\t{...modalProps}\r\n\t\t>\r\n\t\t\t<form onSubmit={handleSubmitForm}>\r\n\t\t\t\t{(isSubmitting || isLoading) && <ModalLoader />}\r\n\t\t\t\t<DialogTitle className=\"brandAddModal--DialogTitle\">\r\n\t\t\t\t\t<Typography type=\"s3\" color=\"inherit\" weight=\"medium\">\r\n\t\t\t\t\t\t{t('common.source_type.create_new_source_type')}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t<IconButton onClick={(e) => {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\thandleClose();\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Close fontSize=\"small\" />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</DialogTitle>\r\n\t\t\t\t<DialogContent dividers>\r\n\t\t\t\t\t<Grid container spacing={2}>\r\n\t\t\t\t\t\t<Grid item xs={12}>\r\n\t\t\t\t\t\t\t<DynamicInput\r\n\t\t\t\t\t\t\t\tlabel={t('common.source_type.source_type_name')}\r\n\t\t\t\t\t\t\t\tname=\"name\"\r\n\t\t\t\t\t\t\t\tfieldArrayName=\"source_type\"\r\n\t\t\t\t\t\t\t\tplaceholder={t('common.source_type.enter_source_type_name')}\r\n\t\t\t\t\t\t\t\tformControl={control}\r\n\t\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t\t<Grid item xs={12}>\r\n\t\t\t\t\t\t\t<DynamicInput\r\n\t\t\t\t\t\t\t\tlabel={t('common.source_type.description')}\r\n\t\t\t\t\t\t\t\tname=\"description\"\r\n\t\t\t\t\t\t\t\tfieldArrayName=\"source_type\"\r\n\t\t\t\t\t\t\t\tplaceholder={t('common.source_type.enter_description_optional')}\r\n\t\t\t\t\t\t\t\tformControl={control}\r\n\t\t\t\t\t\t\t\tis_multiline\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</DialogContent>\r\n\t\t\t\t<DialogActions>\r\n\t\t\t\t\t<Box display=\"flex\" gap={1.5} width=\"100%\" justifyContent=\"flex-end\">\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\thandleClose();\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tdisabled={isSubmitting || isLoading}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{t('common.cancel')}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"contained\"\r\n\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\t\t\t\tloading={isSubmitting || isLoading}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{t('common.source_type.create_source_type')}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</DialogActions>\r\n\t\t\t</form>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n\r\nexport { SourceTypeAddModal };\r\n","import { getErrorMessage, getToken } from '../../../../utils/common';\r\nimport { postV1WarehouseLocation, postV1InventoryFixedAssetItems, postV1CategoryItems, postV1Brand } from '../../../../api-client/api.inventory/api';\r\nimport { PostV1WarehouseLocationRequest } from '../../../../api-client/api.inventory/api-types';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { postV1Parties, postV1PartiesIndustry } from '../../../../api-client/api.accounting/api';\r\nimport { postV1Teams, postV1Designation, postV1Departments, postV1DepartmentsTeams } from '../../../../api-client/api.hrms/api';\r\nimport { postV1SourceTypes } from '../../../../api-client/api.sales/api';\r\nimport { CustomerVendorModal } from '@/components/parties-modal';\r\nimport { TeamAddModal } from '../../../team-add-modal';\r\nimport { DepartmentAddModal } from '@/components/department-add-modal';\r\nimport { LocationAddModal } from './location-add-modal';\r\nimport { DesignationAddModal } from '@/components/designation-add-modal';\r\nimport { FixedAssetItemAddModal } from './fixed-asset-item-add-modal';\r\nimport { DialogProps } from '@mui/material';\r\nimport { BrandAddModal } from '@/components/brand-add-modal';\r\nimport { CategoryAddModal } from '@/components/category-add-modal';\r\nimport { IndustryAddModal } from '@/components/industry-add-modal';\r\nimport { SourceTypeAddModal } from '@/components/source-type-add-modal/source-type-add-modal';\r\n\r\nexport const createApiThunk = async (api: (payload: any) => Promise<any>, payload: any) => {\r\n\ttry {\r\n\t\treturn await api({ ...payload, ...getToken() })\r\n\t} catch (error) {\r\n\t\tenqueueSnackbar(getErrorMessage(error?.message), { variant: 'error' });\r\n\t\tthrow error;\r\n\t}\r\n}\r\n\r\nexport interface IAddConfig {\r\n\tapi: (payload: any) => Promise<any>;\r\n\tcomponent: any;\r\n}\r\n\r\nexport interface IModalComponentProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: () => void;\r\n\tmodalProps?: DialogProps;\r\n\tonSave: (data: string) => void;\r\n\tisLoading?: boolean;\r\n}\r\n\r\nconst addMapper: Record<string, IAddConfig> = {\r\n\tlocation: {\r\n\t\tapi: (payload: PostV1WarehouseLocationRequest) => createApiThunk(postV1WarehouseLocation, payload),\r\n\t\tcomponent: LocationAddModal,\r\n\t},\r\n\tparty: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1Parties, payload),\r\n\t\tcomponent: CustomerVendorModal,\r\n\t},\r\n\tdepartment: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1Departments, payload),\r\n\t\tcomponent: DepartmentAddModal,\r\n\t},\r\n\tteam: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1DepartmentsTeams, payload),\r\n\t\tcomponent: TeamAddModal,\r\n\t},\r\n\tdesignation: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1Designation, payload),\r\n\t\tcomponent: DesignationAddModal,\r\n\t},\r\n\tfixedAssetItem: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1InventoryFixedAssetItems, payload),\r\n\t\tcomponent: FixedAssetItemAddModal,\r\n\t},\r\n\tbrand: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1Brand, payload),\r\n\t\tcomponent: BrandAddModal,\r\n\t},\r\n\tcategory: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1CategoryItems, payload),\r\n\t\tcomponent: CategoryAddModal,\r\n\t},\r\n\tindustry: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1PartiesIndustry, payload),\r\n\t\tcomponent: IndustryAddModal,\r\n\t},\r\n\tsourceType: {\r\n\t\tapi: (payload: any) => createApiThunk(postV1SourceTypes, payload),\r\n\t\tcomponent: SourceTypeAddModal,\r\n\t},\r\n};\r\n\r\nexport const dynamicSelectAdd = (addType: string): IAddConfig | null => {\r\n\tconst config = addMapper[addType];\r\n\r\n\tif (!config) {\r\n\t\tconsole.warn(`No configuration found for addType: ${addType}`);\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn {\r\n\t\t...config\r\n\t};\r\n};","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\nimport * as Yup from 'yup';\r\nimport {\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Modal from './modal/modal';\r\nimport Typography from './typography/typography';\r\nimport Button from './button/button';\r\nimport ModalLoader from './loaders/modal-loader';\r\nimport { DynamicInput, IModalComponentProps } from './form-control';\r\n\r\ninterface IndustryFormValues {\r\n\tindustry: {\r\n\t\tname: string;\r\n\t};\r\n}\r\n\r\ninterface IndustryAddModalProps extends IModalComponentProps {\r\n\ttype?: string;\r\n}\r\n\r\nexport const IndustryAddModal: React.FC<IndustryAddModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tonSave,\r\n\tisLoading,\r\n\tmodalProps,\r\n}) => {\r\n\tconst { t } = useTranslation();\r\n\r\n\tconst validationSchema = Yup.object().shape({\r\n\t\tindustry: Yup.object().shape({\r\n\t\t\tname: Yup.string()\r\n\t\t\t\t.required('Industry name is required')\r\n\t\t\t\t.max(255, 'Industry name must be at most 255 characters'),\r\n\t\t}),\r\n\t});\r\n\r\n\tconst { control, handleSubmit, reset } = useForm<IndustryFormValues>({\r\n\t\tresolver: yupResolver(validationSchema),\r\n\t\tmode: 'all',\r\n\t\tdefaultValues: {\r\n\t\t\tindustry: {\r\n\t\t\t\tname: '',\r\n\t\t\t},\r\n\t\t},\r\n\t});\r\n\r\n\tconst handleClose = () => {\r\n\t\treset({\r\n\t\t\tindustry: {\r\n\t\t\t\tname: '',\r\n\t\t\t},\r\n\t\t});\r\n\t\tsetIsOpen(false);\r\n\t};\r\n\r\n\tconst handleFormSubmit = (event?: React.BaseSyntheticEvent) => {\r\n\t\tevent?.preventDefault();\r\n\t\tevent?.stopPropagation();\r\n\r\n\t\treturn handleSubmit(onSubmit)(event);\r\n\t};\r\n\r\n\tconst onSubmit = async (data: IndustryFormValues) => {\r\n\t\ttry {\r\n\t\t\tawait onSave(data.industry as any);\r\n\t\t\thandleClose();\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('❌ ~ Error saving industry:', error);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\topen={isOpen}\r\n\t\t\tonClose={handleClose}\r\n\t\t\tmaxWidth={modalProps?.maxWidth || 'sm'}\r\n\t\t\tfullWidth={modalProps?.fullWidth || true}\r\n\t\t\tclassName=\"industry-add-modal\"\r\n\t\t>\r\n\t\t\t<DialogTitle>\r\n\t\t\t\t<Typography type=\"h5\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n\t\t\t\t\t{t('crm.leads.fields.create_industry_label', 'Create New Industry')}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t<Close fontSize='small' />\r\n\t\t\t\t</IconButton>\r\n\t\t\t</DialogTitle>\r\n\r\n\t\t\t<form onSubmit={handleFormSubmit}>\r\n\t\t\t\t<DialogContent>\r\n\t\t\t\t\t{isLoading ? (\r\n\t\t\t\t\t\t<ModalLoader />\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<Grid container spacing={3}>\r\n\t\t\t\t\t\t\t<Grid item xs={12}>\r\n\t\t\t\t\t\t\t\t<DynamicInput\r\n\t\t\t\t\t\t\t\t\tlabel={t('crm.leads.fields.industry_name_label', 'Industry Name')}\r\n\t\t\t\t\t\t\t\t\tname=\"name\"\r\n\t\t\t\t\t\t\t\t\tplaceholder={t('crm.leads.fields.industry_name_placeholder', 'Enter Industry Name')}\r\n\t\t\t\t\t\t\t\t\tfieldArrayName=\"industry\"\r\n\t\t\t\t\t\t\t\t\tformControl={control}\r\n\t\t\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t\t</Grid>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</DialogContent>\r\n\r\n\t\t\t\t<DialogActions>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tonClick={handleClose}\r\n\t\t\t\t\t\tdisabled={isLoading}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{t('common.cancel', 'Cancel')}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\tvariant=\"contained\"\r\n\t\t\t\t\t\tdisabled={isLoading}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{t('common.save', 'Save')}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</DialogActions>\r\n\t\t\t</form>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n","import { useEffect, useState } from 'react';\r\nimport { useAuth } from './useAuth';\r\n\r\nconst setCompany = (user: any) => {\r\n return {\r\n value: user?.company_id,\r\n options: [{\r\n label: user?.company_data?.name,\r\n value: user?.company_id\r\n }]\r\n }\r\n}\r\n\r\n// const setCurrency = (user: any) => {\r\n// return {\r\n// value: user?.currency_id,\r\n// options: [{\r\n// label: user?.currency_data?.name,\r\n// value: user?.currency_id\r\n// }]\r\n// }\r\n// }\r\n\r\n// const setLocation = (user: any) => {\r\n// return {\r\n// value: user?.location_id,\r\n// options: user?.location_id ? [{\r\n// label: user?.location_data?.name,\r\n// value: user?.location_id\r\n// }] : []\r\n// }\r\n// }\r\n\r\n// const setDepartment = (user: any) => {\r\n// return {\r\n// value: user?.department_id,\r\n// options: user?.department_id ? [{\r\n// label: user?.department_data?.name,\r\n// value: user?.department_id\r\n// }] : []\r\n// }\r\n// }\r\n\r\nexport const configMapper: Record<string, any> = {\r\n 'company': {\r\n callBack: setCompany,\r\n },\r\n 'company_id': {\r\n callBack: setCompany,\r\n },\r\n // 'currency': {\r\n // callBack: setCurrency,\r\n // },\r\n // 'currency_id': {\r\n // callBack: setCurrency,\r\n // },\r\n // 'location': {\r\n // callBack: setLocation,\r\n // },\r\n // 'location_id': {\r\n // callBack: setLocation,\r\n // },\r\n // 'department': {\r\n // callBack: setDepartment,\r\n // },\r\n // 'department_id': {\r\n // callBack: setDepartment,\r\n // }\r\n}\r\n\r\nexport const getDefaultConfig = (props: any, user: any) => {\r\n const { apiType, name } = props;\r\n const config = configMapper[apiType || name];\r\n if (config) {\r\n return config.callBack(user)\r\n }\r\n return {\r\n value: null,\r\n options: []\r\n }\r\n}\r\n\r\nexport const useDefaultConfig = ({\r\n props,\r\n setValue,\r\n isInternalOptions\r\n}: {\r\n props: any;\r\n setValue?: any;\r\n isInternalOptions: boolean;\r\n}) => {\r\n const { user } = useAuth();\r\n const [defaultOptions, setDefaultOptions] = useState<any>([]);\r\n useEffect(() => {\r\n const { value, options } = getDefaultConfig(props, user);\r\n if (value === null || value === undefined) return;\r\n if (typeof setValue === 'function') {\r\n setValue(`${props.fieldArrayName}.${props.name}`, props?.is_multiselect ? [value] : value);\r\n }\r\n if (!isInternalOptions) {\r\n setDefaultOptions(options);\r\n }\r\n }, [props?.name, user, setValue]);\r\n\r\n return {\r\n defaultOptions\r\n }\r\n}","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { Controller, useFormContext, useWatch, Control } from 'react-hook-form';\r\nimport { dynamicSelectAdd } from './select-configuration';\r\nimport {\r\n Box,\r\n CircularProgress,\r\n Divider,\r\n IconButton,\r\n InputAdornment,\r\n MenuItem,\r\n MenuItemProps,\r\n OutlinedInput,\r\n Tooltip\r\n} from '@mui/material';\r\nimport PropTypes from 'prop-types';\r\nimport { debounce } from 'lodash';\r\nimport { sortBy } from \"lodash\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Add, Close } from '@mui/icons-material';\r\n\r\nimport Select from '../../../select/select';\r\nimport ChipOrPlaceholder from './chip-or-placeholder';\r\nimport Checkbox from '../../../checkbox/checkbox';\r\nimport Typography from '../../../typography/typography';\r\nimport Chip from '../../../chip/chip';\r\nimport { MoreIcon } from '../../../icons';\r\nimport { fetchApi } from '../../../../utils/api';\r\nimport './element.scss';\r\nimport { useLanguage } from '@/hooks';\r\nimport { useDefaultConfig } from '@/hooks/useSetDefaultConfig';\r\n\r\n// Types\r\ninterface IOption {\r\n id: string | number;\r\n value: string | number;\r\n label: string | React.ReactNode;\r\n disabled?: boolean;\r\n isGroup?: boolean;\r\n options?: IOption[];\r\n searchLabel?: string;\r\n}\r\n\r\n// Custom API fetch function type for parent components\r\ninterface CustomFetchApiParams {\r\n search?: string;\r\n filters?: any;\r\n limit: number;\r\n skip: number;\r\n select?: string;\r\n order?: string;\r\n}\r\n\r\ninterface CustomFetchApiResponse {\r\n data: IOption[];\r\n pagination?: {\r\n totalCount: number;\r\n };\r\n}\r\n\r\ninterface IMenuItemsProps extends MenuItemProps {\r\n options: IOption[];\r\n multiple: boolean;\r\n placeholder: string;\r\n with_checkboxes: boolean;\r\n values: string | string[];\r\n field: IDynamicSearchSelectProps;\r\n disabledIds: (string | number)[];\r\n onChange: (value: string | string[]) => void;\r\n handleChange?: (value: string | string[]) => void;\r\n hasParent: boolean;\r\n t: (key: string) => string;\r\n // onFooterClick?: () => void;\r\n}\r\n\r\ninterface IDynamicSearchSelectProps {\r\n name: string;\r\n placeholder: string;\r\n label: string;\r\n size?: 'small' | 'medium';\r\n options: IOption[];\r\n formControl: Control<any>;\r\n defaultValue?: string | string[];\r\n fieldArrayName: string;\r\n id?: string;\r\n required?: boolean;\r\n is_multiselect?: boolean;\r\n position?: number;\r\n formType?: string;\r\n typeOfField?: string;\r\n disabled?: boolean;\r\n onChipRemove?: (value: string) => void;\r\n enable_footer?: boolean;\r\n footer_action?: string;\r\n onFooterClick?: () => void;\r\n is_loading?: boolean;\r\n selectedLabel?: string;\r\n isInternal?: boolean;\r\n disabledIds?: (string | number)[];\r\n getSelectedData?: (data: IOption | IOption[] | null, name: string) => void;\r\n attributes?: string[];\r\n handleChange?: (value: string | string[]) => void;\r\n hasParent?: boolean;\r\n sortOrder?: string;\r\n apiType?: string;\r\n handleOptions?: (value: any) => void;\r\n filterKey?: string;\r\n customeFilter?: Record<string, any>;\r\n refresh?: boolean;\r\n addType?: string;\r\n showCancelButton?: boolean;\r\n /** Custom API function to fetch options from parent component */\r\n customFetchApi?: (params: CustomFetchApiParams) => Promise<CustomFetchApiResponse>;\r\n isMergeOptions?: boolean;\r\n showItemTooltip?: boolean;\r\n}\r\n\r\ninterface IPaginationState {\r\n page: number;\r\n hasMore: boolean;\r\n isLoadingMore: boolean;\r\n total: number;\r\n}\r\n\r\n// Helper function to generate menu items\r\nconst generateMenuItems = ({\r\n options,\r\n multiple,\r\n placeholder,\r\n with_checkboxes,\r\n values,\r\n // field,\r\n disabledIds,\r\n onChange,\r\n handleChange,\r\n hasParent,\r\n t,\r\n // onFooterClick\r\n}: IMenuItemsProps): React.ReactElement[] => {\r\n const itemDisabled = (id: string | number) => disabledIds?.includes(id);\r\n const items: React.ReactElement[] = [];\r\n\r\n if (!multiple) {\r\n items.push(\r\n <MenuItem disabled value='' key=\"placeholder\" sx={{ opacity: `0 !important`, height: `0 !important`, p: `0 !important`, m: `0 !important` }}>\r\n <Typography type='s3' color='theme.secondary.1000'>\r\n <em>{t(placeholder)}</em>\r\n </Typography>\r\n </MenuItem>\r\n );\r\n }\r\n const selectedValues = (Array.isArray(values) && values?.length > 0) ? values?.filter((value) => value) : values;\r\n\r\n const handleParentChange = (parentValue: string, childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n\r\n const isParentSelected = valueArray.includes(parentValue);\r\n const updatedValues = isParentSelected\r\n ? valueArray.filter((value) => value !== parentValue && !childValues.includes(value))\r\n : [...new Set([...valueArray, parentValue, ...childValues])];\r\n\r\n onChange(updatedValues);\r\n handleChange?.(updatedValues);\r\n };\r\n\r\n const isAllOptionsSelected = (parentValue: string, childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n return childValues.every((childValue) => valueArray.includes(childValue));\r\n };\r\n\r\n const isSomeOptionsSelected = (childOptions: IOption[]) => {\r\n const childValues = childOptions.map((child) => child.value);\r\n const valueArray = Array.isArray(selectedValues) ? selectedValues : [selectedValues];\r\n return childValues.some((childValue) => valueArray.includes(childValue));\r\n };\r\n\r\n if (Array.isArray(options) && options.length > 0) {\r\n options.forEach((option) => {\r\n items.push(\r\n <MenuItem\r\n value={option.value}\r\n key={option.value}\r\n disabled={Boolean(option.disabled) || itemDisabled(option.id || option.value)}\r\n className={option.isGroup ? 'select--MenuItemHeader' : ''}\r\n >\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n {multiple && with_checkboxes && (\r\n <Checkbox\r\n checked={\r\n hasParent\r\n ? isAllOptionsSelected(option.value, option.options || [])\r\n : Boolean(Array.isArray(selectedValues) ? selectedValues.includes(option.value) : selectedValues == option.value)\r\n }\r\n indeterminate={\r\n hasParent && isSomeOptionsSelected(option.options || [])\r\n }\r\n onChange={() => hasParent ? handleParentChange(option.value, option.options || []) : handleChange?.(option.value)}\r\n />\r\n )}\r\n <Typography\r\n type='s3'\r\n color='theme.secondary.1000'\r\n onClick={() => handleChange?.(option.value)}\r\n >\r\n {option.label}\r\n </Typography>\r\n </Box>\r\n </MenuItem>\r\n );\r\n\r\n if (option.isGroup && Array.isArray(option.options)) {\r\n option.options.forEach((opt) => {\r\n items.push(\r\n <MenuItem\r\n value={opt.value}\r\n disabled={Boolean(opt.disabled) || itemDisabled(opt.id || opt.value)}\r\n sx={{ pl: 5 }}\r\n key={`${option.value}-${opt.value}`}\r\n >\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n {multiple && with_checkboxes && (\r\n <Checkbox\r\n checked={Boolean(Array.isArray(values) && values.includes(opt.value))}\r\n />\r\n )}\r\n <Typography\r\n type='s3'\r\n color='theme.secondary.1000'\r\n onClick={() => handleChange?.(String(opt.value))}\r\n >\r\n {opt.label == \"Payment Entries\" ? \"Payment and Collection Entries\" : opt.label || opt.value}\r\n </Typography>\r\n </Box>\r\n </MenuItem>\r\n );\r\n });\r\n }\r\n });\r\n }\r\n\r\n // if (field.enable_footer) {\r\n\r\n // }\r\n\r\n if (!items.length || (items.length == 1 && !multiple)) {\r\n items.push(\r\n <MenuItem disabled key=\"no-data\">\r\n No data available\r\n </MenuItem>\r\n );\r\n }\r\n\r\n return items;\r\n};\r\n\r\n// Selected items component\r\nconst SelectedItems: React.FC<{\r\n data: (string | number)[];\r\n options: IOption[];\r\n}> = ({ data, options }) => {\r\n const displayTitle = data.map(\r\n (selectedItem) =>\r\n options?.find((option) => option.value == selectedItem)?.label || ''\r\n );\r\n const filteredDisplayTitle = displayTitle.filter(Boolean);\r\n\r\n return (\r\n <Typography\r\n type='s4'\r\n color='inherit'\r\n sx={{ display: 'flex', gap: 1, alignItems: 'center', mt: 0.5 }}\r\n >\r\n {filteredDisplayTitle.slice(0, 4).join(', ')}\r\n {data.length > 4 && (\r\n <Chip variant='outlined' type='normal' label={<MoreIcon />} />\r\n )}\r\n </Typography>\r\n );\r\n};\r\n\r\nconst Loading = () => (\r\n <Typography fontStyle='italic' color='inherit' type='s3'>Loading...</Typography>\r\n)\r\n\r\nconst DynamicSearchSelect: React.FC<IDynamicSearchSelectProps> = React.memo((props) => {\r\n const watchedValue = useWatch({\r\n control: props.formControl,\r\n name: `${props.fieldArrayName}.${props.name}`\r\n });\r\n\r\n const formContext = useFormContext();\r\n const { setValue } = formContext || {};\r\n const { t } = useTranslation();\r\n const { isRtl } = useLanguage();\r\n const selectRef = useRef<HTMLDivElement>(null);\r\n\r\n // State management\r\n const [options, setOptions] = useState<IOption[]>([]);\r\n const [selectedValue, setSelectedValue] = useState<any>(null);\r\n const [selectedOptions, setSelectedOptions] = useState<IOption[]>([]);\r\n const [loading, setLoading] = useState<boolean>(false);\r\n const [open, setOpen] = useState<boolean>(false);\r\n const [isAlreadyLoaded, setIsAlreadyLoaded] = useState<boolean>(false);\r\n const [prevFilter, setPrevFilter] = useState<any>(null);\r\n const [initialLoading, setInitialLoading] = useState<boolean>(false);\r\n const [searchQuery, setSearchQuery] = useState<string>(\"\");\r\n const [searchInitiate, setSearchInitiate] = useState<boolean>(false);\r\n const [addConfig, setAddConfig] = useState<any>(null);\r\n\r\n // Modal states\r\n const [isModalOpen, setIsModalOpen] = useState<boolean>(false);\r\n const [isAddLoading, setIsAddLoading] = useState<boolean>(false);\r\n\r\n\r\n // Pagination state\r\n const [pagination, setPagination] = useState<IPaginationState>({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n\r\n // Props destructuring with defaults\r\n const {\r\n handleOptions,\r\n isInternal = false,\r\n disabledIds = [],\r\n getSelectedData,\r\n attributes = [],\r\n filterKey = 'id',\r\n customeFilter = {},\r\n refresh,\r\n handleChange,\r\n hasParent = false,\r\n sortOrder = 'id:-1',\r\n apiType,\r\n addType,\r\n showCancelButton = true,\r\n customFetchApi,\r\n isMergeOptions = false,\r\n } = props;\r\n\r\n const showItemTooltip = props.showItemTooltip ?? (apiType === 'salesItems');\r\n\r\n const limit = 25;\r\n\r\n // Memoized values\r\n // Memoized values\r\n const isInternalOptions = useMemo(() => {\r\n if (isMergeOptions && (apiType || customFetchApi)) return false;\r\n return (!apiType && !customFetchApi) || (isInternal ? (apiType || customFetchApi) && props.options?.length == 0 ? false : true : false);\r\n }, [isInternal, apiType, customFetchApi, props.options?.length, isMergeOptions]);\r\n\r\n\r\n //eslint-disable-next-line\r\n const cf = useMemo(() => customeFilter, [JSON.stringify(customeFilter)]);\r\n\r\n\r\n\r\n\r\n const { defaultOptions = [] } = useDefaultConfig({\r\n props,\r\n setValue,\r\n isInternalOptions\r\n });\r\n\r\n\r\n // Local search function\r\n const searchOptionsLocally = useCallback((searchTerm: string, value: any): IOption[] => {\r\n const currentOptions: IOption[] = (props.options && props.options.length > 0) ? props.options : (defaultOptions || []);\r\n if (!searchTerm) return currentOptions;\r\n\r\n const lowercasedSearchTerm = searchTerm.toLowerCase();\r\n\r\n const filteredOptions = hasParent\r\n ? currentOptions?.reduce((acc: IOption[], opt: IOption) => {\r\n const searchedOptions = opt.options?.filter((item: IOption) => {\r\n const label = React.isValidElement(item.label) ? item.searchLabel : String(item.label);\r\n return label?.toLowerCase().includes(lowercasedSearchTerm);\r\n });\r\n\r\n if (searchedOptions?.length) {\r\n acc.push({ ...opt, options: searchedOptions });\r\n }\r\n\r\n return acc;\r\n }, []) || []\r\n : currentOptions?.filter((opt: IOption) => {\r\n const label = React.isValidElement(opt.label) ? opt.searchLabel : String(opt.label);\r\n return label?.toLowerCase().includes(lowercasedSearchTerm);\r\n }) || [];\r\n\r\n //eslint-disable-next-line\r\n return sortBySelectedValues(filteredOptions, value);\r\n //eslint-disable-next-line\r\n }, [props.options, hasParent, defaultOptions]);\r\n\r\n // Get unique options\r\n const getUniqueOptions = useCallback((data: IOption[]): IOption[] => {\r\n const uniqueOptions = [\r\n ...new Map(data?.map(item => [item.value, item])).values()\r\n ];\r\n return uniqueOptions;\r\n }, []);\r\n\r\n // Sort by selected values\r\n const sortBySelectedValues = useCallback((arrayToSort: IOption[], value: any): IOption[] => {\r\n let selectedValues = Array.isArray(value) ? value : [value];\r\n selectedValues = selectedValues.map((item) => Number(item));\r\n const sortedValue = sortBy(arrayToSort, (item) => {\r\n const index = selectedValues.indexOf(item.id || item.value);\r\n return index == -1 ? Infinity : index;\r\n });\r\n return sortedValue;\r\n }, []);\r\n\r\n // Filtered options with pagination support\r\n const filteredOptions = useMemo(() => {\r\n if (isInternalOptions) {\r\n return searchOptionsLocally(searchQuery, watchedValue);\r\n }\r\n const apiOptions = sortBySelectedValues(getUniqueOptions([...options, ...selectedOptions]), watchedValue);\r\n if (isMergeOptions) {\r\n const localOptions = searchOptionsLocally(searchQuery, watchedValue);\r\n return getUniqueOptions([...localOptions, ...apiOptions]);\r\n }\r\n return apiOptions;\r\n //eslint-disable-next-line\r\n }, [options, selectedOptions, isInternalOptions, props.options, watchedValue, searchQuery, searchOptionsLocally, sortBySelectedValues, getUniqueOptions, isMergeOptions]);\r\n\r\n // Helper to get selected item data for tooltip\r\n const getSelectedDataOptions = useMemo(() => {\r\n if (!watchedValue || !filteredOptions.length) return null;\r\n const selected = filteredOptions.find(opt => \r\n opt.id === watchedValue || opt.value === watchedValue\r\n );\r\n return selected || null;\r\n }, [watchedValue, filteredOptions]);\r\n\r\n // API Functions\r\n const fetchOptions = useCallback(async (searchTerm = '', flt = cf, page = 1, append = false) => {\r\n // Skip if neither apiType nor customFetchApi is provided\r\n if (!apiType && !customFetchApi) return [];\r\n\r\n setLoading(true);\r\n if (page > 1) {\r\n setPagination(prev => ({ ...prev, isLoadingMore: true }));\r\n }\r\n\r\n try {\r\n let data: IOption[] = [];\r\n let paginationResult: { totalCount?: number } = {};\r\n\r\n // Use custom API if provided, otherwise use default fetchApi\r\n if (customFetchApi) {\r\n const response = await customFetchApi({\r\n search: searchTerm,\r\n filters: flt,\r\n limit,\r\n skip: (page - 1) * limit,\r\n select: attributes?.join(','),\r\n order: sortOrder\r\n });\r\n data = response?.data || [];\r\n paginationResult = response?.pagination || {};\r\n } else {\r\n const response = await fetchApi({\r\n apiKey: apiType!,\r\n filters: {\r\n limit,\r\n skip: (page - 1) * limit,\r\n search: searchTerm,\r\n filters: flt,\r\n select: attributes,\r\n order: sortOrder\r\n }\r\n });\r\n data = response?.data || [];\r\n paginationResult = response?.pagination || {};\r\n }\r\n\r\n if (data && Array.isArray(data)) {\r\n const newOptions = append ? [...options, ...data] : data;\r\n\r\n updateOptions(newOptions, append);\r\n handleSelectedValue(data);\r\n // Update pagination\r\n setPagination(prev => ({\r\n ...prev,\r\n page,\r\n hasMore: (paginationResult?.totalCount || 0) > (page * limit),\r\n total: paginationResult?.totalCount || 0,\r\n isLoadingMore: false\r\n }));\r\n }\r\n\r\n return data || [];\r\n } catch (error) {\r\n console.error('Error fetching options:', error);\r\n setPagination(prev => ({ ...prev, isLoadingMore: false }));\r\n return [];\r\n } finally {\r\n setLoading(false);\r\n }\r\n //eslint-disable-next-line\r\n }, [apiType, customFetchApi, options, attributes, sortOrder, limit, cf]);\r\n\r\n // Handle scroll pagination\r\n const handleScroll = useCallback((event: React.UIEvent<HTMLDivElement>) => {\r\n const { scrollTop, scrollHeight, clientHeight } = event.currentTarget;\r\n const isBottom = scrollHeight - scrollTop <= clientHeight + 10;\r\n\r\n if (isBottom && pagination.hasMore && !pagination.isLoadingMore && !isInternalOptions) {\r\n const nextPage = pagination.page + 1;\r\n fetchOptions(searchQuery, cf, nextPage, true);\r\n }\r\n }, [pagination.hasMore, pagination.isLoadingMore, pagination.page, isInternalOptions, searchQuery, cf, fetchOptions]);\r\n\r\n // Update options\r\n const updateOptions = useCallback((newOptions: IOption[], append = false) => {\r\n const oldOptions = append ? options : selectedOptions;\r\n const uniqueOptions = getUniqueOptions([...oldOptions, ...newOptions]);\r\n setOptions(uniqueOptions);\r\n }, [options, selectedOptions, getUniqueOptions]);\r\n\r\n // Handle selected value\r\n const handleSelectedValue = useCallback(async (updateOptions: IOption[]) => {\r\n if (!watchedValue) return;\r\n let filterValue = props.is_multiselect ? watchedValue : [watchedValue];\r\n filterValue = Array.isArray(filterValue) ? filterValue?.filter(i => i) : [];\r\n filterValue = Array.isArray(filterValue) ? filterValue?.map((item) => Number(item)) : [];\r\n const isInOptions = updateOptions?.filter((item) =>\r\n Array.isArray(filterValue) ? filterValue.includes(item.id || item.value) : (item[filterKey] || item.value || item.id) == filterValue\r\n );\r\n\r\n if (Array.isArray(isInOptions) && isInOptions.length > 0) {\r\n getSelectedData?.(props.is_multiselect ? isInOptions : isInOptions[0], props.name);\r\n return true;\r\n }\r\n return false;\r\n //eslint-disable-next-line\r\n }, [props.is_multiselect, props.name, watchedValue, filterKey, getSelectedData, filteredOptions]);\r\n\r\n // Fetch options by ID\r\n const fetchIdOptions = useCallback(async () => {\r\n if (open) return;\r\n if (await handleSelectedValue(filteredOptions)) return;\r\n\r\n const condition = props.is_multiselect ?\r\n Array.isArray(watchedValue) && watchedValue.length > 0 :\r\n Boolean(watchedValue);\r\n\r\n if (condition) {\r\n setInitialLoading(true);\r\n const response = await fetchOptions('', { ...cf, '&id.in': watchedValue }, 1, false);\r\n setInitialLoading(false);\r\n\r\n if (response.length == 0 && setValue && !isInternalOptions) {\r\n // setValue(`${props.fieldArrayName}.${props.name}`, props.is_multiselect ? [] : null);\r\n }\r\n }\r\n //eslint-disable-next-line\r\n }, [open, watchedValue, JSON.stringify(cf)]);\r\n\r\n // Initial fetch\r\n const initialFetch = useCallback(async () => {\r\n const condition = JSON.stringify(cf) !== JSON.stringify(prevFilter);\r\n\r\n if (condition) {\r\n setPrevFilter(cf);\r\n setOptions([]);\r\n setIsAlreadyLoaded(false);\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n }\r\n\r\n if (!isInternalOptions && !isAlreadyLoaded) {\r\n await fetchOptions(searchQuery, cf, 1, false);\r\n setIsAlreadyLoaded(true);\r\n }\r\n //eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [cf, isInternalOptions, isAlreadyLoaded]);\r\n\r\n // Debounced search\r\n const debouncedSearch = useMemo(\r\n () => debounce(async (searchTerm: string) => {\r\n if (loading) return;\r\n\r\n if (!searchTerm && !isInternalOptions && searchInitiate) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n await fetchOptions('', cf, 1, false);\r\n }\r\n if (searchTerm.length > 1 && !isInternalOptions) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n await fetchOptions(searchTerm, cf, 1, false);\r\n }\r\n }, 700),\r\n //eslint-disable-next-line\r\n [isInternalOptions, searchInitiate, cf]\r\n );\r\n\r\n // Reset value function\r\n const resetValue = useCallback((field: any) => {\r\n field.onChange(props.is_multiselect ? [] : null);\r\n if (getSelectedData) {\r\n getSelectedData(null, props.name);\r\n }\r\n }, [props.is_multiselect, props.name, getSelectedData]);\r\n\r\n // Handle close\r\n const handleClose = useCallback(() => {\r\n setOpen(false);\r\n if (searchQuery.length > 0) {\r\n setIsAlreadyLoaded(false);\r\n }\r\n setSearchInitiate(false);\r\n setSearchQuery('');\r\n }, [searchQuery]);\r\n\r\n const handleModalOpen = useCallback(() => {\r\n setIsModalOpen(true);\r\n }, []);\r\n\r\n\r\n\r\n // Handle modal save\r\n const handleModalSave = useCallback(async (payload: any) => {\r\n if (!addConfig || !addConfig.api) {\r\n console.error('Add configuration is not properly set');\r\n return;\r\n }\r\n\r\n setIsAddLoading(true);\r\n try {\r\n const result = await addConfig.api(payload);\r\n setIsAddLoading(false);\r\n setIsModalOpen(false);\r\n if (!isInternalOptions) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n setIsAlreadyLoaded(false);\r\n await fetchOptions('', cf, 1, false);\r\n }\r\n if (result && result.data) {\r\n const newValue = props.is_multiselect\r\n ? [...(watchedValue || []), result.data.id]\r\n : result.data.id;\r\n\r\n if (setValue) {\r\n setValue(`${props.fieldArrayName}.${props.name}`, newValue);\r\n }\r\n }\r\n } catch (error) {\r\n console.log(\"error\", error);\r\n setIsAddLoading(false);\r\n }\r\n\r\n\r\n }, [addConfig, isInternalOptions, fetchOptions, cf, props.is_multiselect, props.fieldArrayName, props.name, watchedValue, setValue]);\r\n\r\n // Effects\r\n useEffect(() => {\r\n if (handleOptions) {\r\n handleOptions(selectedValue);\r\n }\r\n }, [handleOptions, selectedValue]);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n initialFetch();\r\n }\r\n }, [open, initialFetch]);\r\n\r\n useEffect(() => {\r\n fetchIdOptions();\r\n }, [fetchIdOptions]);\r\n\r\n useEffect(() => {\r\n if (refresh) {\r\n setPagination({\r\n page: 1,\r\n hasMore: true,\r\n isLoadingMore: false,\r\n total: 0\r\n });\r\n fetchOptions('', cf, 1, false);\r\n }\r\n }, [refresh, fetchOptions, cf]);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n debouncedSearch(searchQuery);\r\n }\r\n return () => debouncedSearch.cancel();\r\n }, [searchQuery, open, debouncedSearch]);\r\n\r\n useEffect(() => {\r\n if (watchedValue && !open) {\r\n const selectedData = options?.filter((item) =>\r\n props.is_multiselect ?\r\n Array.isArray(watchedValue) && watchedValue.includes(item.id || item.value) :\r\n (item.id || item.value) == watchedValue\r\n );\r\n setSelectedOptions(selectedData || []);\r\n }\r\n }, [watchedValue, options, props.is_multiselect]);\r\n\r\n const removeUndefined = useCallback((selectOptions: any[]) => {\r\n return Array.isArray(selectOptions) ? selectOptions.filter(Boolean) : [];\r\n }, []);\r\n\r\n useEffect(() => {\r\n const config = dynamicSelectAdd(addType);\r\n console.log(\"🚀 ~ config:\", config)\r\n setAddConfig(config);\r\n }, [addType])\r\n\r\n\r\n\r\n return (\r\n <Controller\r\n control={props.formControl}\r\n name={`${props.fieldArrayName}.${props.name}`}\r\n render={({ field, fieldState }) => (\r\n <>\r\n {props.placeholder == 'Select Currency' && setSelectedValue(field.value)}\r\n {showItemTooltip ? (\r\n <Tooltip\r\n title={getSelectedDataOptions?.label ? String(getSelectedDataOptions.label) : ''}\r\n placement='top'\r\n arrow\r\n slotProps={{\r\n popper: {\r\n modifiers: [{ name: 'offset', options: { offset: [0, -25] } }],\r\n },\r\n tooltip: {\r\n sx: { maxWidth: 500 },\r\n },\r\n }}\r\n >\r\n <span>\r\n <Select\r\n {...field}\r\n ref={selectRef}\r\n open={open}\r\n onOpen={() => {\r\n setOpen(true);\r\n setTimeout(() => {\r\n const searchInput = document.querySelector(\r\n `input[placeholder=\"Search ${props.label}\"]`\r\n ) as HTMLInputElement;\r\n console.log('Active Search input:', searchInput);\r\n searchInput?.focus();\r\n }, 150);\r\n }}\r\n onClose={handleClose}\r\n fullWidth\r\n dataPosition={props.position}\r\n dataName={`${props.fieldArrayName}.${props.name}`}\r\n placeholder={props.placeholder}\r\n label={props.label}\r\n defaultValue={props.defaultValue || (props.is_multiselect ? [] : '')}\r\n searchValue={searchQuery}\r\n required={props.formType == 'builder' ? false : props.required}\r\n size={props.size || 'small'}\r\n multiple={props.is_multiselect || false}\r\n disabled={props.disabled}\r\n sx={(props.is_multiselect && field?.value?.length) ? { \"& .MuiSelect-select\": { padding: '5.5px !important' } } : {}}\r\n variant='outlined'\r\n value={\r\n initialLoading\r\n ? (props.is_multiselect ? [] : '')\r\n : (field.value?.id || field.value || (props.is_multiselect ? [] : ''))\r\n }\r\n className={\r\n props.is_multiselect && removeUndefined(field.value)?.length\r\n ? 'MultiSelect filter-select'\r\n : ''\r\n }\r\n MenuProps={{\r\n PaperProps: {\r\n onScroll: handleScroll,\r\n style: { maxHeight: 300 }\r\n }\r\n }}\r\n\r\n renderValue={(selected: any) => {\r\n if (Array.isArray(selected)) {\r\n return (\r\n <ChipOrPlaceholder\r\n selectedLabel={props.selectedLabel}\r\n data={removeUndefined(selected)}\r\n placeholder={(loading || props.is_loading) ? <Loading /> : `${t('common.search')} ${props.label}`}\r\n onDelete={props.onChipRemove}\r\n disabled={props.disabled}\r\n chipProps={{\r\n sx: {\r\n background: '#ebf9f2',\r\n border: 0,\r\n // borderRadius: '15px',\r\n '& .MuiTypography-body1': {\r\n color: '#289b64',\r\n fontWeight: \"500\",\r\n }\r\n }\r\n }}\r\n />\r\n );\r\n } else {\r\n const selectedOption = filteredOptions.find(\r\n (option) => (option.value?.id || option.value) == selected\r\n );\r\n return (loading || props.is_loading) ? <Loading /> : selectedOption?.label ||\r\n (typeof props.label == 'string' ?\r\n `${t('common.search')} ${props.label}` :\r\n props.placeholder);\r\n }\r\n }}\r\n searchPlaceholder={`${t('common.search')} ${props.label}`}\r\n handleSearch={(text: string) => {\r\n setSearchQuery(text);\r\n setSearchInitiate(true);\r\n }}\r\n error={Boolean(fieldState.error?.message)}\r\n helperText={fieldState.error?.message || ''}\r\n onBlur={field.onBlur}\r\n input={\r\n <OutlinedInput\r\n label=''\r\n endAdornment={\r\n <InputAdornment position='end'>\r\n {(loading || props.is_loading) ? (\r\n <CircularProgress\r\n size={20}\r\n sx={{ mr: 3, color: \"#4AC08C\" }}\r\n />\r\n ) : (\r\n !props.disabled &&\r\n (props.is_multiselect ?\r\n (Array.isArray(field.value) && field.value.length > 0) :\r\n Boolean(field.value)) && showCancelButton && (\r\n <IconButton\r\n aria-label='clear selection'\r\n onClick={() => resetValue(field)}\r\n edge='end'\r\n sx={isRtl ? { ml: 2.5 } : { mr: 1.5 }}\r\n size='small'\r\n >\r\n <Close sx={{ fontSize: '1rem' }} />\r\n </IconButton>\r\n )\r\n )}\r\n </InputAdornment>\r\n }\r\n />\r\n }\r\n >\r\n {generateMenuItems({\r\n options: filteredOptions,\r\n multiple: Boolean(props.is_multiselect),\r\n placeholder: props.placeholder,\r\n values: field.value,\r\n with_checkboxes: true,\r\n field: props,\r\n disabledIds,\r\n onChange: field.onChange,\r\n handleChange,\r\n hasParent,\r\n t,\r\n // onFooterClick: () => {\r\n // if (props?.onFooterClick) {\r\n // props?.onFooterClick();\r\n // } else {\r\n // handleModalOpen();\r\n // }\r\n // }\r\n })}\r\n {props?.enable_footer &&\r\n <Box key=\"footer\" sx={{ position: 'sticky', bottom: 0, background: '#fff', zIndex: 1 }}>\r\n <Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n <MenuItem sx={{ gap: 1 }} onClick={\r\n () => {\r\n if (props?.onFooterClick) {\r\n props?.onFooterClick();\r\n } else {\r\n handleModalOpen();\r\n }\r\n }\r\n\r\n }>\r\n <Add fontSize='small' />\r\n <Typography type='s4' color='theme.secondary.1000'>\r\n Create New {props.label}\r\n </Typography>\r\n </MenuItem>\r\n </Box>}\r\n {pagination.isLoadingMore && (\r\n <MenuItem disabled>\r\n <Box sx={{ display: 'flex', justifyContent: 'center', width: '100%' }}>\r\n <CircularProgress size={20} />\r\n </Box>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n </span>\r\n </Tooltip>\r\n ) : (\r\n <Select\r\n {...field}\r\n ref={selectRef}\r\n open={open}\r\n onOpen={() => {\r\n setOpen(true);\r\n setTimeout(() => {\r\n const searchInput = document.querySelector(\r\n `input[placeholder=\"Search ${props.label}\"]`\r\n ) as HTMLInputElement;\r\n console.log('Active Search input:', searchInput);\r\n searchInput?.focus();\r\n }, 150);\r\n }}\r\n onClose={handleClose}\r\n fullWidth\r\n dataPosition={props.position}\r\n dataName={`${props.fieldArrayName}.${props.name}`}\r\n placeholder={props.placeholder}\r\n label={props.label}\r\n defaultValue={props.defaultValue || (props.is_multiselect ? [] : '')}\r\n searchValue={searchQuery}\r\n required={props.formType == 'builder' ? false : props.required}\r\n size={props.size || 'small'}\r\n multiple={props.is_multiselect || false}\r\n disabled={props.disabled}\r\n sx={(props.is_multiselect && field?.value?.length) ? { \"& .MuiSelect-select\": { padding: '5.5px !important' } } : {}}\r\n variant='outlined'\r\n value={\r\n initialLoading\r\n ? (props.is_multiselect ? [] : '')\r\n : (field.value?.id || field.value || (props.is_multiselect ? [] : ''))\r\n }\r\n className={\r\n props.is_multiselect && removeUndefined(field.value)?.length\r\n ? 'MultiSelect filter-select'\r\n : ''\r\n }\r\n MenuProps={{\r\n PaperProps: {\r\n onScroll: handleScroll,\r\n style: { maxHeight: 300 }\r\n }\r\n }}\r\n\r\n renderValue={(selected: any) => {\r\n if (Array.isArray(selected)) {\r\n return (\r\n <ChipOrPlaceholder\r\n selectedLabel={props.selectedLabel}\r\n data={removeUndefined(selected)}\r\n placeholder={(loading || props.is_loading) ? <Loading /> : `${t('common.search')} ${props.label}`}\r\n onDelete={props.onChipRemove}\r\n disabled={props.disabled}\r\n chipProps={{\r\n sx: {\r\n background: '#ebf9f2',\r\n border: 0,\r\n // borderRadius: '15px',\r\n '& .MuiTypography-body1': {\r\n color: '#289b64',\r\n fontWeight: \"500\",\r\n }\r\n }\r\n }}\r\n />\r\n );\r\n } else {\r\n const selectedOption = filteredOptions.find(\r\n (option) => (option.value?.id || option.value) == selected\r\n );\r\n return (loading || props.is_loading) ? <Loading /> : selectedOption?.label ||\r\n (typeof props.label == 'string' ?\r\n `${t('common.search')} ${props.label}` :\r\n props.placeholder);\r\n }\r\n }}\r\n searchPlaceholder={`${t('common.search')} ${props.label}`}\r\n handleSearch={(text: string) => {\r\n setSearchQuery(text);\r\n setSearchInitiate(true);\r\n }}\r\n error={Boolean(fieldState.error?.message)}\r\n helperText={fieldState.error?.message || ''}\r\n onBlur={field.onBlur}\r\n input={\r\n <OutlinedInput\r\n label=''\r\n endAdornment={\r\n <InputAdornment position='end'>\r\n {(loading || props.is_loading) ? (\r\n <CircularProgress\r\n size={20}\r\n sx={{ mr: 3, color: \"#4AC08C\" }}\r\n />\r\n ) : (\r\n !props.disabled &&\r\n (props.is_multiselect ?\r\n (Array.isArray(field.value) && field.value.length > 0) :\r\n Boolean(field.value)) && showCancelButton && (\r\n <IconButton\r\n aria-label='clear selection'\r\n onClick={() => resetValue(field)}\r\n edge='end'\r\n sx={isRtl ? { ml: 2.5 } : { mr: 1.5 }}\r\n size='small'\r\n >\r\n <Close sx={{ fontSize: '1rem' }} />\r\n </IconButton>\r\n )\r\n )}\r\n </InputAdornment>\r\n }\r\n />\r\n }\r\n >\r\n {generateMenuItems({\r\n options: filteredOptions,\r\n multiple: Boolean(props.is_multiselect),\r\n placeholder: props.placeholder,\r\n values: field.value,\r\n with_checkboxes: true,\r\n field: props,\r\n disabledIds,\r\n onChange: field.onChange,\r\n handleChange,\r\n hasParent,\r\n t,\r\n // onFooterClick: () => {\r\n // if (props?.onFooterClick) {\r\n // props?.onFooterClick();\r\n // } else {\r\n // handleModalOpen();\r\n // }\r\n // }\r\n })}\r\n {props?.enable_footer &&\r\n <Box key=\"footer\" sx={{ position: 'sticky', bottom: 0, background: '#fff', zIndex: 1 }}>\r\n <Divider flexItem sx={{ mt: '0.25rem !important', mb: '0.25rem !important' }} />\r\n <MenuItem sx={{ gap: 1 }} onClick={\r\n () => {\r\n if (props?.onFooterClick) {\r\n props?.onFooterClick();\r\n } else {\r\n handleModalOpen();\r\n }\r\n }\r\n\r\n }>\r\n <Add fontSize='small' />\r\n <Typography type='s4' color='theme.secondary.1000'>\r\n Create New {props.label}\r\n </Typography>\r\n </MenuItem>\r\n </Box>}\r\n {pagination.isLoadingMore && (\r\n <MenuItem disabled>\r\n <Box sx={{ display: 'flex', justifyContent: 'center', width: '100%' }}>\r\n <CircularProgress size={20} />\r\n </Box>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n )}\r\n\r\n {/* Modal for adding new items */}\r\n {addConfig && addConfig.component && (\r\n <>\r\n {React.createElement(addConfig.component, {\r\n isOpen: isModalOpen,\r\n setIsOpen: setIsModalOpen,\r\n isLoading: isAddLoading,\r\n onSave: handleModalSave,\r\n modalProps: {\r\n maxWidth: 'md',\r\n fullWidth: true\r\n },\r\n ...props?.modalComponentProps\r\n })}\r\n </>\r\n )}\r\n\r\n {props.is_multiselect && Array.isArray(field.value) && (\r\n <SelectedItems\r\n data={field.value}\r\n options={filteredOptions}\r\n />\r\n )}\r\n </>\r\n )}\r\n />\r\n );\r\n});\r\n\r\nDynamicSearchSelect.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n placeholder: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n options: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n value: PropTypes.any\r\n })\r\n ).isRequired,\r\n formControl: PropTypes.object.isRequired,\r\n defaultValue: PropTypes.any,\r\n fieldArrayName: PropTypes.string.isRequired,\r\n id: PropTypes.string,\r\n required: PropTypes.bool,\r\n is_multiselect: PropTypes.bool,\r\n position: PropTypes.number,\r\n formType: PropTypes.string,\r\n typeOfField: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n onChipRemove: PropTypes.func,\r\n enable_footer: PropTypes.bool,\r\n footer_action: PropTypes.string,\r\n onFooterClick: PropTypes.func,\r\n is_loading: PropTypes.bool,\r\n selectedLabel: PropTypes.string,\r\n isInternal: PropTypes.bool,\r\n disabledIds: PropTypes.array,\r\n getSelectedData: PropTypes.func,\r\n attributes: PropTypes.array,\r\n handleChange: PropTypes.func,\r\n hasParent: PropTypes.bool,\r\n sortOrder: PropTypes.string,\r\n apiType: PropTypes.string,\r\n handleOptions: PropTypes.func,\r\n filterKey: PropTypes.string,\r\n customeFilter: PropTypes.object,\r\n refresh: PropTypes.bool,\r\n addType: PropTypes.string,\r\n modalComponentProps: PropTypes.object,\r\n showCancelButton: PropTypes.bool,\r\n customFetchApi: PropTypes.func\r\n};\r\n\r\nexport default DynamicSearchSelect;","import {\r\n\tUseFormSetValue,\r\n\tFieldValues,\r\n\tuseFormContext,\r\n\tUseFormWatch,\r\n\tUseFormGetFieldState,\r\n\tControl\r\n} from 'react-hook-form';\r\nimport { useLocationFilter } from '../hooks/useLocationFilter';\r\nimport DynamicSearchSelect from './form-control/form-builder/form-builder-element/dynamic-select';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { memo, useEffect, useMemo, useRef } from 'react';\r\nimport _ from 'lodash';\r\n\r\n\r\nexport interface LocationSearchSelectProps<\r\n\tT extends FieldValues = FieldValues\r\n> {\r\n\tselectedCompany?: string[] | string | number | null | undefined;\r\n\tcontrol?: Control<T>;\r\n\tsetValue?: UseFormSetValue<T>;\r\n\tfieldArrayName: string;\r\n\tlocationFieldName?: string;\r\n\tlabel?: string;\r\n\tplaceholder?: string;\r\n\tresetValue?: any;\r\n\tfilterKey?: string;\r\n\t[key: string]: any;\r\n}\r\n\r\nexport interface LocationFilterType {\r\n\t[key: string]: string[] | string | number;\r\n}\r\n\r\nexport const LocationSearchSelect = memo(\r\n\t<T extends FieldValues = FieldValues>({\r\n\t\tselectedCompany,\r\n\t\tcontrol: propControl,\r\n\t\tsetValue: propSetValue,\r\n\t\tfieldArrayName,\r\n\t\tlocationFieldName = 'location_id',\r\n\t\tlabel,\r\n\t\tplaceholder,\r\n\t\tresetValue = undefined,\r\n\t\tfilterKey = '&company_id.in',\r\n\t\tfilterField = 'company_id',\r\n\t\t...dynamicSearchSelectProps\r\n\t}: LocationSearchSelectProps<T>): JSX.Element => {\r\n\t\tconst formContext = useFormContext();\r\n\t\tconst {\r\n\t\t\tcontrol: contextControl,\r\n\t\t\twatch: contextWatch,\r\n\t\t\tsetValue: contextSetValue,\r\n\t\t\tgetFieldState: contextGetFieldState\r\n\t\t} = formContext || {};\r\n\r\n\t\tconst controlToUse = propControl || contextControl;\r\n\t\tconst setValueToUse = propSetValue || contextSetValue;\r\n\t\tconst watchToUse: UseFormWatch<T> = contextWatch || (() => undefined);\r\n\t\tconst getFieldStateToUse: UseFormGetFieldState<T> =\r\n\t\t\tcontextGetFieldState || (() => ({}));\r\n\r\n\t\tconst filterFieldValue = watchToUse(`${fieldArrayName}.${filterField}`);\r\n\t\tconst isDirty = getFieldStateToUse(\r\n\t\t\t`${fieldArrayName}.${filterField}`\r\n\t\t)?.isDirty;\r\n\r\n\t\tconst prevFilterFieldValue = useRef<any>();\r\n\r\n\t\tconst { t } = useTranslation();\r\n\r\n\t\tconst isValueChanged = useMemo(() => {\r\n\t\t\treturn filterFieldValue && prevFilterFieldValue.current\r\n\t\t\t\t? !_.isEqual(prevFilterFieldValue.current, filterFieldValue)\r\n\t\t\t\t: false;\r\n\t\t}, [filterFieldValue]);\r\n\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (filterFieldValue) {\r\n\t\t\t\tprevFilterFieldValue.current = filterFieldValue;\r\n\t\t\t}\r\n\t\t}, [filterFieldValue]);\r\n\r\n\t\tconst locationFilter: LocationFilterType = useLocationFilter({\r\n\t\t\tselectedCompany: filterFieldValue || selectedCompany,\r\n\t\t\tsetValue: setValueToUse,\r\n\t\t\tfieldArrayName,\r\n\t\t\tlocationFieldName,\r\n\t\t\tresetValue,\r\n\t\t\tfilterKey,\r\n\t\t\tisDirty: isValueChanged || isDirty\r\n\t\t});\r\n\r\n\t\t// Now safely do the conditional render\r\n\t\tif (!controlToUse) {\r\n\t\t\tconsole.warn('LocationSearchSelect: No form control available.');\r\n\t\t\treturn <div>Location Search Select</div>;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<DynamicSearchSelect\r\n\t\t\t\tlabel={t(label) || t('crm.salesOrder.fields.location_label')}\r\n\t\t\t\tapiType='location'\r\n\t\t\t\taddType='location'\r\n\t\t\t\tenable_footer={true}\r\n\t\t\t\tname={locationFieldName}\r\n\t\t\t\tplaceholder={\r\n\t\t\t\t\tt(placeholder) || t('crm.salesOrder.fields.location_placeholder')\r\n\t\t\t\t}\r\n\t\t\t\tfieldArrayName={fieldArrayName}\r\n\t\t\t\tformControl={controlToUse}\r\n\t\t\t\tcustomeFilter={locationFilter}\r\n\t\t\t\t{...dynamicSearchSelectProps}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nLocationSearchSelect.defaultProps = {\r\n\tlocationFieldName: 'location_id',\r\n\tresetValue: undefined,\r\n\tfilterKey: '&company_id.in'\r\n};\r\n\r\nexport default LocationSearchSelect","import { Link } from \"react-router-dom\";\nimport CardMedia from \"@mui/material/CardMedia\";\nimport Box from \"@mui/material/Box\";\nimport Typography from \"../typography/typography\";\nimport \"./module-button.scss\"; // Import the external CSS file\n\nexport interface IModuleTile {\n module: {\n bg: string;\n icon: string;\n label: string;\n link: string;\n };\n}\n\nexport const ModuleTile = (props: IModuleTile) => {\n const bgClass = props.module.bg === \"transparent\" ? \"transparent\" : \"\";\n\n return (\n <Link to={props.module.link}>\n <Box className=\"module-tile-container\">\n <Box\n className={`module-box ${bgClass}`}\n style={{ background: props.module.bg }}\n >\n <CardMedia\n component=\"img\"\n image={props.module.icon}\n alt={`${props.module.label} logo`}\n />\n </Box>\n <Typography type=\"s3\" className=\"module-label\">\n {props.module.label}\n </Typography>\n </Box>\n </Link>\n );\n}\n\nexport default ModuleTile;","import { Switch, styled } from \"@mui/material\";\r\n\r\nconst Android12Switch = styled(Switch)(({ theme }) => ({\r\n padding: 8,\r\n '& .MuiSwitch-track': {\r\n borderRadius: 22 / 2,\r\n '&::before, &::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n width: 16,\r\n height: 16,\r\n },\r\n '&::before': {\r\n backgroundImage: `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16\" width=\"16\" viewBox=\"0 0 24 24\"><path fill=\"${encodeURIComponent(\r\n theme.palette.getContrastText(theme.palette.primary.main),\r\n )}\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"/></svg>')`,\r\n left: 12,\r\n },\r\n '&::after': {\r\n backgroundImage: `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16\" width=\"16\" viewBox=\"0 0 24 24\"><path fill=\"${encodeURIComponent(\r\n theme.palette.getContrastText(theme.palette.primary.main),\r\n )}\" d=\"M19,13H5V11H19V13Z\" /></svg>')`,\r\n right: 12,\r\n },\r\n },\r\n '& .MuiSwitch-thumb': {\r\n boxShadow: 'none',\r\n width: 16,\r\n height: 16,\r\n margin: 2,\r\n // color: theme.palette.theme.primary[800]\r\n },\r\n '& .Mui-checked': {\r\n color: `${theme.palette.theme.primary[800]} !important`,\r\n },\r\n '& .Mui-checked+.MuiSwitch-track': {\r\n backgroundColor: `${theme.palette.theme.primary[800]} !important`,\r\n },\r\n}));\r\n\r\nexport { Android12Switch };\r\nexport default Android12Switch;","import { InputAdornment } from \"@mui/material\";\nimport TextField from \"../text-field/text-field\";\nimport ColorLensIcon from '@mui/icons-material/ColorLens';\nimport _ from \"lodash\";\nimport React from \"react\";\n\nconst ColorPickerInput = ({value, onChange, label, ...props}) => {\n\n // Debounced function to update text\n const debouncedSetColor = (\n _.debounce((value) => {\n onChange(value)\n }, 500)\n );\n\n const handleColorChange = (e) => {\n debouncedSetColor(e.target.value);\n };\n\n return (\n <TextField\n label={label || ''}\n variant='outlined'\n type=\"color\"\n value={value}\n onChange={handleColorChange}\n size=\"small\"\n fullWidth\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <ColorLensIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n {...props}\n />\n );\n}\n \nexport { ColorPickerInput };\nexport default ColorPickerInput;","import Typography from \"../typography/typography\";\nimport { Box } from \"@mui/material\";\nimport \"./fallback.scss\";\n\ninterface FallbackProps {\n heading: string;\n subHeading: string;\n icon: React.ReactNode;\n children?: React.ReactNode;\n}\n\nconst Fallback = (props: FallbackProps) => {\n const { heading, subHeading, icon, children, ...rest } = props;\n return (\n <Box className=\"fallback\" {...rest}>\n {icon}\n <Typography\n type=\"h5\"\n weight=\"medium\"\n color=\"theme.secondary.1000\"\n className=\"fallback--Text\"\n >\n {heading}\n </Typography>\n <Typography\n type=\"s3\"\n weight=\"medium\"\n color=\"theme.secondary.800\"\n className=\"fallback--Text\"\n >\n {subHeading}\n </Typography>\n <div>{children}</div>\n </Box>\n );\n};\n\nexport { Fallback };\nexport default Fallback;\n","import React from \"react\";\nimport BreadCrumb from \"../bread-crumb/bread-crumb\";\nimport \"./form-header.scss\";\n\ninterface BreadCrumbSlot {\n link: string;\n label: string | JSX.Element;\n linkState?: any;\n}\n\ninterface FormHeaderProps {\n breadCrumbPath: BreadCrumbSlot[];\n children?: React.ReactNode;\n containerProps?:any;\n}\nconst FormHeader = (props: FormHeaderProps) => {\n const { breadCrumbPath, children, containerProps } = props;\n return (\n <div className=\"formHeader--Header\" {...containerProps}>\n <BreadCrumb path={breadCrumbPath} />\n <div>{children}</div>\n </div>\n );\n};\n\nexport { FormHeader };\nexport default FormHeader;\n","const Loader = () => {\n return (\n <div className=\"loader loader--style1\" title=\"0\">\n <svg\n version=\"1.1\"\n id=\"loader-1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n x=\"0px\"\n y=\"0px\"\n width=\"80px\"\n height=\"80px\"\n viewBox=\"0 0 40 40\"\n enableBackground=\"new 0 0 40 40\"\n >\n <path\n opacity=\"0.2\"\n fill=\"#333\"\n d=\"M20.201,5.169c-8.254,0-14.946,6.692-14.946,14.946c0,8.255,6.692,14.946,14.946,14.946\n s14.946-6.691,14.946-14.946C35.146,11.861,28.455,5.169,20.201,5.169z M20.201,31.749c-6.425,0-11.634-5.208-11.634-11.634\n c0-6.425,5.209-11.634,11.634-11.634c6.425,0,11.633,5.209,11.633,11.634C31.834,26.541,26.626,31.749,20.201,31.749z\"\n />\n <path\n fill=\"#333\"\n d=\"M26.013,10.047l1.654-2.866c-2.198-1.272-4.743-2.012-7.466-2.012h0v3.312h0\n C22.32,8.481,24.301,9.057,26.013,10.047z\"\n >\n <animateTransform\n attributeType=\"xml\"\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 20 20\"\n to=\"360 20 20\"\n dur=\"0.9s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </svg>\n </div>\n );\n};\n\nexport { Loader };\nexport default Loader;\n"],"names":["Accordion","memo","props","title","children","accordionProps","accordianProps","jsxs","StyledAccordion","jsx","AccordionSummary","expandIcon","ExpandMoreIcon","id","AccordionDetails","styled","MUIAccordion","theme","palette","color","_a","secondary","fontSize","boxShadow","padding","minHeight","borderBottomWidth","borderBottomStyle","borderBottomColor","_b","margin","ViewModal","data","setData","setActive","disabledViews","openModal","setOpenModal","useState","value","setValue","disable","setDisable","useTheme","isMdUp","useMediaQuery","breakpoints","up","TabData","label","icon","logo","TableIcon","desc","image","src","table","GridIcon","grid","className","Button","variant","startIcon","AddIcon","sx","pr","onClick","Boolean","find","item","toLowerCase","Modal","open","onClose","DialogTitle","Typography","type","weight","IconButton","CloseIcon","Tabs","orientation","onChange","_","newValue","map","Tab","iconPosition","disabled","includes","hidden","viewTypes","KANBAN","CALENDAR","Select","placeholder","size","defaultValue","MenuItem","DialogActions","backgroundColor","selectedTabData","some","position","length","HeaderCard","active","key","rest","TABLE","GRID","GANTT","GanttIcon","CalenderIcon","KanbanIcon","CHART","ChartIcon","ToggleWrapper","Box","primary","display","Toggle","CombinatorSelect","handleOnChange","options","showDropdown","path","Fragment","e","target","name","RemoveAction","isRtl","useLanguage","btnStyles","marginRight","handleOnClick","disableRipple","Trash","FieldSelect","t","useTranslation","filteredOptions","setFilteredOptions","useEffect","filter","o","trim","width","fullWidth","renderValue","formatText","_c","opttion","replace","replaceAll","SearchBar","handleSearch","searchText","filteredData","option","handleSearchEvent","op","StyledAddButton","AddFilterButton","Add","AddGroupButton","StyledDatePicker","Date","borderColor","borderWidth","borderStyle","_d","_e","error","background","_f","_g","_h","opacity","marginLeft","_i","_j","fontWeight","DatePicker","helperText","dataName","dataPosition","disableFutureDates","required","disablePastDates","textFieldProps","format","LocalizationProvider","dateAdapter","AdapterDayjs","mb","disableFuture","disablePast","slotProps","textField","desktopPaper","bgcolor","slots","openPickerIcon","dayjs","StyledCheckbox","MUICheckbox","borderRadius","Checkbox","RecgtangleIcon","checkedIcon","CheckBoxIcon","ChipOrPlaceholder","onDelete","chipProps","selectedLabel","Chip","onMouseDown","event","stopPropagation","generateMenuItems","multiple","with_checkboxes","values","field","disabledIds","handleClear","handleChange","hasParent","itemDisabled","ls","items","push","height","p","m","selectedValues","Array","isArray","isAllOptionsSelected","parentValue","childOptions","childValues","child","valueArray","every","childValue","isSomeOptionsSelected","forEach","index","isGroup","gap","checked","indexOf","indeterminate","updatedValues","Set","handleParentChange","opt","pl","String","enable_footer","Divider","flexItem","onFooterClick","SearchableSelect","labelId","searchPlaceholder","apiType","isInternal","autoFocus","customeFilter","attributes","getSelectedData","onChipRemove","is_loading","customStyle","CustomDropDownIcon","labelKey","valueKey","inputStyle","sortOrder","showCancelButton","customFetchApi","searchQuery","setSearchQuery","loading","setLoading","dynamicOptions","setOptions","selectedOptions","setSelectedOptions","isAlredyLoaded","setIsAlredyLoaded","initailLoading","setInitialLoading","searchInitiate","setSearchInitiate","setOpen","prevFilter","setPrevFilter","pagination","setPagination","page","hasMore","isLoadingMore","total","limit","isInternalOptions","useMemo","searchOptionsLocally","useCallback","searchTerm","lowercasedSearchTerm","reduce","acc","searchedOptions","React","isValidElement","searchLabel","sortBySelectedValues","getUniqueOptions","Map","arrayToSort","sortBy","Infinity","handleScroll","scrollTop","scrollHeight","clientHeight","currentTarget","nextPage","fetchOptions","JSON","stringify","updateOptions","newOptions","append","uniqueOptions","async","filters","prev","paginationResult","response","search","skip","select","order","fetchApi","apiKey","totalCount","setSelectedData","debounceSearch","debounce","initialFetch","hasOptions","isInOptions","i","fetchIdOptions","fValue","v","Number","hasValue","cancel","condition","selectedData","showGroupLabel","mergedOptions","flatMap","onOpen","selected","displayEmpty","CustomDropdownIcon","MenuProps","PaperProps","onScroll","style","maxHeight","maxWidth","input","OutlinedInput","endAdornment","InputAdornment","CircularProgress","mr","edge","ml","Close","selectOptions","border","text","justifyContent","ValueEditor","fieldData","rule","inputType","isDisabled","operator","customFetch","params","offset","tableName","tokenObj","getToken","getV1FilterFilterTable","result","r","getFilterTableFields","optionData","formatLabel","mappedValue","val","isValid","TextField","inputProps","OperatorSelect","dValue","RemoveGroupAction","SaveFilterModal","handleSubmit","oldName","setName","alignItems","FolderSave","DialogContent","dividers","handleSave","initialQuery","combinator","rules","Filter","savedFilters","fetchSavedFilters","onSaveFilter","onSelectedFilter","applyFilter","fields","isUseFields","location","useLocation","token","localStorage","getItem","auth","storageTokenKeyName","updatePageInfo","activePage","schemaFields","setActivePage","usePages","generateFields","query","setQuery","filteredSavedFilters","setFilteredSavedFilters","selectedFilter","setSelectedFilter","openRenameFilter","setIsOpenRenameFilter","errorMessage","setErrorMessage","resources","routeToResourceMap","pathname","handleApplyFilter","clear","q","isDuplicatedFilters","generatedSQLQuery","generateQueryString","filterQueryString","handleFilterSwitch","sf","filteredFilters","handleSubmitRename","filterId","newName","putFilterRequest","module","fieldResource","pageResource","putV1FilterId","enqueueSnackbar","Error","getErrorMessage","message","handleRenameFilter","isEmpty","f","uniques","isRuleInvalid","Dialog","setTimeout","savedFilter","preventDefault","Edit","deleteFilterRequest","deleteV1FilterId","then","catch","err","handleDeleteFilter","Alert","severity","px","pt","QueryBuilderMaterial","QueryBuilder","onQueryChange","updatedRules","showCombinatorsBetweenRules","controlClassnames","header","controlElements","addRuleAction","addGroupAction","combinatorSelector","fieldSelector","operatorSelector","removeRuleAction","valueEditor","removeGroupAction","DropdownButton","isMenuThirdItemDisabled","isOnlyDropDownButton","onlyDropDownButtonProps","buttonGroupProps","dropdownButtonProps","toggleCallback","anchorRef","useRef","handleToggle","prevOpen","handleClose","current","contains","ButtonGroup","flexDirection","ref","borderRightColor","borderRight","borderTopRightRadius","borderBottomRightRadius","minWidth","borderTopLeftRadius","borderBottomLeftRadius","ArrowDownTwo","Popper","zIndex","anchorEl","role","transition","disablePortal","TransitionProps","placement","Grow","transformOrigin","Paper","elevation","mt","ClickAwayListener","onClickAway","MenuList","autoFocusItem","callback","disableToggle","TitleDropdownButton","currentTitle","cursor","Loader","LoaderContainer","left","top","ModalLoader","formatBytes","bytes","decimals","dm","Math","floor","log","parseFloat","pow","toFixed","UploadExcel","onConfirm","onSubmit","accept","importModuleName","handleSuccessImport","files","setFiles","isCollapsed","setIsCollapsed","isDialogMinimized","setIsDialogMinimized","isDragOver","setIsDragOver","dataResult","setDataResult","isLoading","setIsLoading","getRootProps","getInputProps","isDragActive","useDropzone","onDropAccepted","newFiles","file","isPrivate","checkboxDisabled","status","uploadProgress","fileSize","fileName","fileType","onDragEnter","onDragLeave","noClick","noKeyboard","types","accepts","split","convertAcceptObject","fileInputRef","handleBeforeUnload","returnValue","window","addEventListener","removeEventListener","renderFileIcon","Avatar","images","upload","documentPDF","alt","docFile","removeFile","indexToRemove","prevFiles","documentUpload","setAttribute","removeAttribute","click","monitor","successful","failed","join","in","timeout","formData","FormData","postImportSheet","Upload","RemoveIcon","prevIsCollapsed","KeyboardArrowUp","KeyboardArrowDown","empty","close","tick","folder","ActionBar","handleAddButton","button","isDropdownMenuButton","itemListingDropdownOptions","isTitleMenu","titleMenus","isToggleButton","handleToggleButton","showSearch","showFilter","showView","customButtons","pageName","actionBtn","selectedIds","useAppDispatch","isToggledForItem","setIsToggledForItem","openFilterPopup","setOpenFilterPopup","openSaveFilter","setIsOpenSaveFilter","rowAnchorEl","setRowAnchorEl","isUploadModalOpen","setIsUploadModalOpen","setSavedFilters","searchedText","setSearchedText","isLgUp","getV1FilterResource","resource","_id","rowActionMenu","handleAction","moduleName","templateURL","getExcelExportTemplate","blob","link","document","createElement","url","URL","createObjectURL","href","download","body","appendChild","removeChild","revokeObjectURL","exportExcel","Export","columns","visible_columns","col","getPdfExportTemplate","exportPdf","getExcelTemplateGenerateTemplate","downloadTemplate","DocumentDownload","Import","getFilterChipLabels","opLabel","getOperatorLabel","rv","getFilterChip","rr","grey","deleteIcon","Cancel","removeSignleFilter","clickable","ruleIndex","uRules","uFilters","searchAnchorEl","setSearchAnchorEl","ele","sort","a","b","debounceTime","isDrivePage","Search","Menu","anchorOrigin","vertical","horizontal","FilterIcon","more","activeView","setSelectedSavedFilter","flt","isFilterApplied","rIndex","rrIndex","FilterRemove","initialFilter","filterQuery","postFilterRequest","is_applied","postV1Filter","showCameraButton","StyledAlert","MUIAlert","letterSpacing","tertiary6","svg","BreadCrumb","Breadcrumbs","slot","component","Link","to","state","linkState","ChipContainer","flexWrap","spacing","main","action","disabledBackground","paddingLeft","InlineInput","outline","flexGrow","fontFamily","typography","InlineChip","ChipGenerator","control","validation","maxChips","allowDuplicates","fieldArrayName","endIcon","externalError","onChipAdd","customChipProps","allowMultipleAdd","delimiters","dataType","separator","inputValue","setInputValue","validationError","setValidationError","focused","setFocused","inputRef","containerRef","validateChip","trimmedValue","isValidEmail","test","isValidPhone","pattern","validator","stringToArray","str","arrayToString","arr","addChips","inputStr","currentChips","valuesToAdd","delimiterPattern","d","regex","RegExp","parseMultipleValues","newChips","errors","addedCount","errorMessages","removeChip","chipToRemove","processInput","currentValue","handleContainerClick","focus","fieldName","Controller","render","fieldState","hasError","FormControl","chip","outputValue","onKeyDown","lastIndex","handleKeyPress","onFocus","onBlur","handleBlur","onPaste","pastedText","clipboardData","getData","handlePaste","max","FormHelperText","DateTimePicker","Pagination","paginationModel","totalPages","handlePaginationModel","pageNo","pageSizeOptions","setIsChanged","borderTop","newModel","parseInt","ChevronRightICon","ChevronLeftIcon","mx","AddPageModal","pages","setError","pageNames","newPage","SharedPageView","pageValue","viewStyle","renderViewName","sharedPage","kanbanView","calendarView","tableView","ganttView","gridView","_event","centered","TabPanel","other","a11yProps","SharedPageModal","sharedPages","setSharedPages","dispatch","useDispatch","setSharedPage","PageDescription","viewsMessage","filtersMessage","details","views","_l","_k","prevPages","isPinToDashboard","handleSharedView","Grid","container","xs","FormControlLabel","labelPlacement","owner","AddPage","handleAddPage","isAddMenuOpen","setIsAddMenuOpen","isAddPageModalOpen","setIsAddPageModalOpen","isSharedPageModalOpen","setIsSharedPageModalOpen","handleAddMenuClose","AddCircleOutlineRoundedIcon","KeyboardArrowRightIcon","SharePopUp","roles","toggleSwitch","isPeopleAccessVisible","share","useAppSelector","store","isPublic","setIsPublic","selectedUsers","roleValue","setRoleValue","availableRole","setAvailableRole","userDropdownData","setUserDropdownData","isRoleVisible","departments","users","setSelectedUsers","selRole","userRole","role_id","is_role","resetOptions","prevData","getAllUserAndDepartmentDropdown","prevSettings","handleChage","row","List","user","ListItem","ListItemAvatar","ListItemText","email","changeRole","handleRoleChange","uIds","sOptions","u","sharedData","is_private","userRoles","PageAction","setCurrentPage","setPages","handlePageDelete","isEditPageModalOpen","setIsEditPageModalOpen","isShareModalOpen","setIsShareModalOpen","isConfirmOpen","setIsConfirmOpen","deletePageNo","setDeletePageNo","defaultSharedData","setDefaultSharedData","pageSharedData","setPageSharedData","pinToDashboardStore","useSelector","pinToDashboardData","setPinToDashboardData","dashboard","pinToDashboardList","appDispatch","setIsCreatePage","shareUsers","handleDeletePage","deletePinToDashboardPage","updatedPinToDashboardData","actions","func","isShared","labelExists","uniqueNumberId","generateRandomId","newLabel","counter","updatedPage","defaultData","findIndex","updatedData","updatedArray","elementToShift","splice","moveRight","moveLeft","updatedPages","ConfirmPopUp","deletePage","description","pageData","sharePage","res","payload","StyledTabs","StyledTab","MUITab","textTransform","PageNavigator","savePages","isSaving","generatedColumns","isChanged","isCreatePage","addOrDeletePage","isActionsMenuOpen","setIsActionsMenuOpen","setPage","isAllPagesMenuOpen","setIsAllPagesMenuOpen","handleCloseAllPagesMenu","handleAddOrdeletePage","status_code","MenuIcon","pg","handleOpenActionsMenu","clickedPage","Tooltip","arrow","Share","nPage","defaultPageState","column_order","uniq","orderKeys","active_view","Save","Footer","currentPage","savePageConfiguration","enablePages","isPaginationDisplayed","isPageSaving","isDrawerOpen","setIsDrawerOpen","handleStorageChange","interval","setInterval","clearInterval","InfoCard","info","TabBar","tabs","onEditTabTitle","activeValue","setActiveValue","handleTabChange","handleRemoveTab","containerProps","editableTabId","setEditableTabId","TabContext","TabList","scrollButtons","overflowX","tab","tab_order","handleEditTabTitle","tabId","remove_tab","wrapped","onDoubleClick","handleTabDoubleClick","content","toString","Radio","MUIRadio","BlankCircle","FilledCircle","BorderedOption","shouldForwardProp","prop","bordered","divider","shape","alignContent","hover","DynamicRadioButton","formControl","titlePosition","RadioGroup","isSelected","PARTIES_FORM_ARRAY_NAME","PARTIES_FIELDS","partyType","addressPayload","parties_id","address_type","contact_name","street_1","street_2","city","zip_code","country","mobile","phone","street_3","summary","default_shipping_address","default_billing_address","country_code","contactPayload","contact_no","addressColumns","accessorKey","visible","editVariant","editProperties","field_name","validations","msg_en","msg_ar","editSelectOptions","enableEditing","country_name","contactColumns","addressOmitKeys","contactOmitKeys","processPartiesPayload","addresses","contacts","address","omit","contact","StyledInput","ReactPhoneInput","direction","textAlign","right","borderBottom","backgroundRepeat","backgroundPosition","paddingRight","HelperTextWrapper","marginTop","PhoneInput","default_value","setCountryCodeField","isInlineEditing","dropdown","positionDropdown","rect","getBoundingClientRect","bottom","querySelector","fixPhoneDropdown","dialCode","dropdownContainer","specialLabel","enableSearch","searchNotFound","DynamicPhone","formType","propTypes","PropTypes","register","isRequired","string","bool","number","typeOfField","UploadMedia","max_size","VisuallyHiddenInput","clip","clipPath","overflow","whiteSpace","StyledButton","marginBottom","allowedImageTypes","allowedFileTypes","getFileName","File","parts","uploadImage","uploadDocument","filterredFiles","isValidFileType","Document","noWrap","getSelectedFiles","InlineEditFields","column","validationSchema","setValidationErrors","onChangeRowField","isInitialSet","setIsInitialSet","customFilter","editCols","getAllCells","columnDef","fieldProperties","fieldDisbled","_valuesCache","handleCustomFilter","is_multiple","get","original","validateAt","abortEarly","fe","yup","ValidationError","inner","em","validate","editFields","Object","keys","dValues","cell","vl","handleMinDate","filterKey","bindingKey","dateFormat","minDate","min_date","maxDate","defaultChecked","TableWrapper","disableMaxHeight","borderLeft","lineHeight","MaterialTable","enablePagination","rows","columnOrder","updateData","handleColumnOrdering","enableColumnDragging","states","destructiveActionMenu","disableDefaultActionColumn","enableRowSelection","defaultActionColumnItems","enableBottomToolbar","SetSelectedRowId","isResetRow","onCreateRow","onEditRow","onDeleteRow","editDisplayMode","enableRowCreate","onSelectRow","enableColumnResizing","selectedRowIds","onColumnVisibility","onSortingChange","disabledDefaultActionColumnIcon","enableAddCustomField","enableRowDragging","handleColumnResizing","columnSizes","showPreview","handlePreview","aPage","useDeepMemo","setRow","tableColumns","setTableColumns","setAnchorEl","popUpShow","setPopupShow","visibleColumns","hiddenColumns","selectedRow","setSelectedRow","validationErrors","setValidationSchema","isCreatingRow","setIsCreatingRow","isEditingRow","setIsEditingRow","isDeletingRow","setIsDeletingRow","rowToDelete","setRowToDelete","rowSelection","setRowSelection","isChecked","setIsChecked","sorting","setSorting","disableNextEdit","setDisableNextEdit","columnSizing","setColumnSizing","column_sizes","columnSizingInfo","setColumnSizingInfo","columnSizingStart","deltaOffset","deltaPercentage","isResizingColumn","startOffset","startSize","navigate","useNavigate","currentModule","redirectionPath","PathnameAccounting","CUSTOM_FORM","PathnameInventory","PathnameManufacturing","PathnamePurchase","PathnameCrm","PathnameUsers","PathnameRental","PathnameDocument","ADD_CUSTOM_FIELDS","validationReducer","vld","typeError","min","when","relation","is","thenValidations","otherwise","otherWiseValidations","generateValidationSchema","schema","clm","fieldValidations","array","nullable","transform","originalValue","matches","excludeEmptyString","getValidationType","object","handleHeaderClick","formtValues","cells","c","checkRequired","selectedRows","Function","sortingArray","resetRowSelection","getTextWidth","ctx","getContext","measureText","useMaterialReactTable","defaultColumn","minSize","s","Header","maxSize","common","eyeIcon","muiTableHeadCellProps","muiTableBodyCellProps","Cell","handlePreviewClick","arrowIcon","updatedProps","cloneElement","handleActionsClick","muiTableContainerProps","muiTablePaperProps","tableLayout","columnResizeMode","onEditingRowSave","setEditingRow","onCreatingRowSave","setCreatingRow","onCreatingRowCancel","onEditingRowCancel","displayColumnDefOptions","onKeyUp","renderRowActions","enableExpanding","parentId","renderBottomToolbarCustomActions","onRowSelectionChange","enableColumnOrdering","createDisplayMode","enableTopToolbar","enableColumnActions","enableSorting","enableGrouping","enableStickyHeader","enableSortingRemoval","columnPinning","showProgressBars","getRowId","muiTableBodyRowProps","editingRowId","getState","editingRow","creatingRow","isErrorRow","has_error","handleRowClick","rowId","onColumnOrderChange","colOrder","onColumnSizingChange","onColumnSizingInfoChange","renderEmptyRowsFallback","tableNoData","paginationDisplayMode","muiPaginationProps","count","showRowsPerPage","boundaryCount","muiEditTextFieldProps","InputProps","disableUnderline","muiCircularProgressProps","muiTableBodyProps","muiTableHeadProps","muiSelectCheckboxProps","muiSelectAllCheckboxProps","muiBottomToolbarProps","layoutMode","icons","ArrowDownwardIcon","ArrowUpDown","SortIcon","SyncAltIcon","CancelIcon","SaveIcon","getSelectedRowModel","selectedRowModels","selection","traverseRows","parentKey","rowKey","subRows","getRowModel","MaterialReactTable","ListItemIcon","filteredColumns","updatedColumns","parse","updatedFilteredOptions","handleAddColumn","addIcon","handleVisibleColumn","dotsIcon","ChevronRightIcon","handleRowDelete","defaultLocationState","CustomerVendorModal","isOpen","handleModalClose","modalProps","partyCreated","onSave","setIsOpen","locationRef","addressRows","setAddressRows","contactRows","setContactRows","isCreating","setIsCreating","formState","trigger","getValues","resetField","reset","watch","getFieldState","useForm","defaultValues","parties","account_type","mode","resolver","yupResolver","Yup","PARTIES_FIELDS_TYPE","PARTIES_FIELDS_FIRST_NAME","optional","PARTIES_FIELDS_LAST_NAME","PARTIES_FIELDS_COMPANY_NAME","PARTIES_FIELDS_VAT_NUMBER","PARTIES_FIELDS_CRN","PARTIES_FIELDS_COMPANY","PARTIES_FIELDS_CURRENCY","PARTIES_FIELDS_ADDRESS","notRequired","PARTIES_FIELDS_CONTACTS","PARTIES_FIELDS_RECEIVABLE_ACCOUNT","PARTIES_FIELDS_TAX_TEMPLATE","fieldToUpdate","useAccountingSetting","companyField","formMethods","isUpdateAccount","selectedType","useWatch","tableRows","phoneNumberCache","transformTableColumns","currencySymbol","translationFn","enableFooter","redirectionLink","redirectionLinkState","statusClasses","customizeValue","columnAccessorKey","pointerEvents","phoneKey","has","parsed","parsePhoneNumberFromString","set","nationalNumber","countryCodeKey","countryCallingCode","handleRowOperation","eData","setState","isAddress","editRow","processedValues","dropdowns","addressValues","validateAddressDefaults","state_name","country_data","state_data","country_id","state_id","ar","Promise","reject","u_data","hasDefault","deleteRow","rowIndex","resolve","onChangeAddressTableField","summaryFields","idx","EMAIL_REGEX","formValues","emailArray","email_ids","email_id","match","party","company_id","createParties","meta","requestStatus","closeModal","resetForm","addressData","contactData","basicDetailsSection","defaultExpanded","sm","DynamicInput","DynamicSearchSelect","is_multiselect","accountingSection","addressSection","contactSection","overflowY","SelectedItems","fDisplayTitle","selectedItem","slice","MoreIcon","DynamicSelect","selectedValue","setSelectedValue","handleOptions","removeUndefine","handleSetOptions","arrayOf","footer_action","any","DynamicButton","node","DynamicCheckBox","titleColor","checkboxProps","stackProps","Stack","DynamicDate","max_date","is_future_dates_allowed","is_past_dates_allowed","displayName","DynamicCurrency","multiline","is_multiline","is_required","step","float_step","min_length","max_length","inputMode","is_negative","startAdornment","currencyType","numericValue","_formState","DynamicElementHOC","useDrag","drop","useDrop","draggedElement","draggedIndex","dropIndex","swap","elementSwap","activeClassName","activeIndex","defaultClassName","element","duplicate","handleDuplicate","removeElement","setElementHoc","elementPerRow","DynamicInputSelect","defaultOption","setSelectOption","handleOptionChange","boxSizing","IconComponent","KeyboardArrowDownOutlinedIcon","DynamicTagsInput","tags","tag","handleKeyDown","trimmedInputValue","newValueString","Autocomplete","clearIcon","freeSolo","renderTags","renderTagProps","renderInput","DynamicInfo","DynamicMedia","field_type","DynamicSectionHOC","fontStyle","handleAccordion","remove_section","removeSection","isFormSwitcher","DynamicTable","onAddClick","is_button","disableTableAddButton","otherButtons","onTableCellChange","useAuth","cs","currency_data","symbol","currencyFormat","number_format","symbolPosition","takeCurencyOrPercentage","isCellChangeAFunc","renderedCellValue","toFixedWithNumbers","formatDate","formatAmount","promotion_map_data","rcv","uRows","valueGet","StyledTimePicker","Time","TimePicker","is24hrFormat","DynamicTime","CustomisedSwitch","Switch","focusVisibleClassName","transitionDuration","transitions","create","duration","ToggleSwitch","labelPosition","typographyProps","DynamicToggleButton","toggleSwitchProps","FormSwitcher","formSwitcherName","MemoizedField","sectionLabel","gridSize","is_fullwidth","custom_width","fieldKey","commonProps","iconSrc","sms","currency","dollar","geoLocation","relationLabel","renderField","handleSetCountryCodeField","field_properties","addType","onSelectFooterClick","call","setCurrencyOptions","refresh","refreshOptions","modalComponentProps","title_position","table_columns","table_rows","handleTableAddClick","isButton","currencyOption","LocationSearchSelect","filterField","locationFieldName","MemoizedFormSwitcher","section","switchForms","handleFieldCleanUp","form_switcher_label","forms","FormSection","members","displayAvtar","setDetailsData","visibleMembers","is_hidden","fieldsWithNames","sectionHeader","avatarDisplay","fieldProps","is_accordion","fieldIndex","teamValidationSchema","team","department_id","team_lead_id","member_ids","DEFAULT_VALUES","departmentValidationSchema","department","department_code","parent_department_id","department_head_id","cost_code","boolean","location_data","designationValidationSchema","designation","designation_code","reports_to","level","COSTING_METHODS","DEPRECIATION_METHODS","COMPUTATION_METHODS","inventory_fixed_asset_item","sku","category","mixed","base_unit","company","unit_of_measurement","stock_unit","purchase_unit","sales_unit","costing_method","depreciation_method","computation_method","default_tax_id","income_account_id","asset_account_id","cogs_account_id","fixed_asset_account_id","depreciation_account_id","declining_factor","brandValidationSchema","brand_data","categoryValidationSchema","category_data","category_name","source_type","SourceTypeAddModal","isSubmitting","setIsSubmitting","createApiThunk","api","addMapper","postV1WarehouseLocation","toast","setToast","rowGap","columnSpacing","Toast","postV1Parties","postV1Departments","rootCompanyId","postV1DepartmentsTeams","selectedDepartmentId","selectedTeamLeadId","leadFilter","membersFilter","postV1Designation","fixedAssetItem","postV1InventoryFixedAssetItems","selectedCategoryData","setSelectedCategoryData","unitFields","methods","watchedName","watchedCategory","watchedUom","watchedDepreciationMethod","generatedSku","skuGenerator","handleCategorySelect","updateUomFields","uomData","FormProvider","brand","postV1Brand","postV1CategoryItems","sku_prefix","unique_items","attribute_data","industry","postV1PartiesIndustry","sourceType","postV1SourceTypes","dynamicSelectAdd","config","setCompany","company_data","configMapper","callBack","useDefaultConfig","defaultOptions","setDefaultOptions","getDefaultConfig","filteredDisplayTitle","Loading","watchedValue","formContext","useFormContext","selectRef","isAlreadyLoaded","setIsAlreadyLoaded","initialLoading","addConfig","setAddConfig","isModalOpen","setIsModalOpen","isAddLoading","setIsAddLoading","isMergeOptions","showItemTooltip","cf","currentOptions","apiOptions","localOptions","getSelectedDataOptions","handleSelectedValue","filterValue","debouncedSearch","resetValue","handleModalOpen","handleModalSave","removeUndefined","popper","modifiers","tooltip","searchInput","searchValue","selectedOption","oneOfType","selectedCompany","propControl","propSetValue","dynamicSearchSelectProps","contextControl","contextWatch","contextSetValue","contextGetFieldState","controlToUse","setValueToUse","getFieldStateToUse","filterFieldValue","isDirty","prevFilterFieldValue","isValueChanged","isEqual","locationFilter","useLocationFilter","defaultProps","Android12Switch","backgroundImage","encodeURIComponent","getContrastText","debouncedSetColor","ColorLensIcon","heading","subHeading","breadCrumbPath","handleFormSubmit","onTableAddClick","handleFormValues","getFormMethods","setFields","setActiveTabValue","activeTab","recieveTabDataLenght","recieveIsValidForm","activeTabs","containerStyles","convertNestedFieldSchemaObject","nestedFields","hasOwn","unregister","yupSchemaObject","nestedFielvalidations","nestedYupSchemaObj","dotNotationString","existingObject","currentLevel","convertToNestedObject","watchedValues","setSchema","tabsData","setTabsData","errorAlert","setErrorAlert","isTabFormValid","setTabFormValid","validateRequiredFields","setValidRequiredFields","getSectionData","sectionMembers","section_type","SECTION_TYPES","FORM_SWITCH_SECTION","form_switcher_name","switcher_forms","form","formMembers","member","section_form_id","selectedSectionForm","is_form_switcher_section","oldVal","country_code_field_name","newVal","is_country_code_separate","memberName","newData","createNestedObjectFromDot","fieldValue","hours","minutes","seconds","removeMatchingKeyValuePairs","obj1","obj2","forOwn","validateRequiredSwitchFormData","switchData","requiredFields","thenValidation","getMissingFields","watchedFields","validationReqFields","missingFields","fieldPath","handleMessage","origin","formBuilderDeConversion","dVals","wVals","nestedFormValues","is_section_field","finalFormValues","validatedFields","switchFormData","selectValue","isFormTabValid","version","xmlns","x","y","viewBox","enableBackground","fill","attributeType","attributeName","from","dur","repeatCount","bgClass","bg","CardMedia"],"mappings":"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"}
|