@erpsquad/common 1.10.10-test → 1.10.11-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/chunks/{android-12-switch-jj9sZdHr.esm.js → android-12-switch-CAuiT5Pz.esm.js} +7 -7
- package/dist/chunks/{android-12-switch-jj9sZdHr.esm.js.map → android-12-switch-CAuiT5Pz.esm.js.map} +1 -1
- package/dist/chunks/{android-12-switch-DXCSLxql.js → android-12-switch-E6mXBkCx.js} +7 -7
- package/dist/chunks/{android-12-switch-DXCSLxql.js.map → android-12-switch-E6mXBkCx.js.map} +1 -1
- package/dist/chunks/{apiHelper-CnW4mhWd.esm.js → apiHelper-73EBSKIp.esm.js} +5 -5
- package/dist/chunks/{apiHelper-CnW4mhWd.esm.js.map → apiHelper-73EBSKIp.esm.js.map} +1 -1
- package/dist/chunks/{apiHelper-Nwi6vehP.js → apiHelper-BVJa3_k8.js} +5 -5
- package/dist/chunks/{apiHelper-Nwi6vehP.js.map → apiHelper-BVJa3_k8.js.map} +1 -1
- package/dist/chunks/{appbar-DM2iBqb4.esm.js → appbar-CqjkuAGQ.esm.js} +3 -3
- package/dist/chunks/{appbar-DM2iBqb4.esm.js.map → appbar-CqjkuAGQ.esm.js.map} +1 -1
- package/dist/chunks/{appbar-rfkAYQdQ.js → appbar-pTs1Yhzo.js} +3 -3
- package/dist/chunks/{appbar-rfkAYQdQ.js.map → appbar-pTs1Yhzo.js.map} +1 -1
- package/dist/chunks/{default-data-B9vVQV5Y.js → default-data-Mq-52KPT.js} +7 -7
- package/dist/chunks/{default-data-B9vVQV5Y.js.map → default-data-Mq-52KPT.js.map} +1 -1
- package/dist/chunks/{default-data-CTj0tV-U.esm.js → default-data-uGbtWbX3.esm.js} +7 -7
- package/dist/chunks/{default-data-CTj0tV-U.esm.js.map → default-data-uGbtWbX3.esm.js.map} +1 -1
- package/dist/chunks/{form-builder-deconversion-v5GvXDZ9.js → form-builder-deconversion-C4DFp-Jv.js} +2 -2
- package/dist/chunks/{form-builder-deconversion-v5GvXDZ9.js.map → form-builder-deconversion-C4DFp-Jv.js.map} +1 -1
- package/dist/chunks/{form-builder-deconversion-CUwBfP4C.esm.js → form-builder-deconversion-CIJWMHun.esm.js} +2 -2
- package/dist/chunks/{form-builder-deconversion-CUwBfP4C.esm.js.map → form-builder-deconversion-CIJWMHun.esm.js.map} +1 -1
- package/dist/chunks/{fullScreen-Bfrr-bT2.js → fullScreen-BNlY6F_Z.js} +2 -2
- package/dist/chunks/{fullScreen-Bfrr-bT2.js.map → fullScreen-BNlY6F_Z.js.map} +1 -1
- package/dist/chunks/{fullScreen-BO0UA3Zr.esm.js → fullScreen-CV8aHM8J.esm.js} +2 -2
- package/dist/chunks/{fullScreen-BO0UA3Zr.esm.js.map → fullScreen-CV8aHM8J.esm.js.map} +1 -1
- package/dist/chunks/{languageContext-BP7EvzMv.js → languageContext-BSEvKGy9.js} +2 -2
- package/dist/chunks/{languageContext-BP7EvzMv.js.map → languageContext-BSEvKGy9.js.map} +1 -1
- package/dist/chunks/{languageContext-DM_LTp53.esm.js → languageContext-D_khAb2z.esm.js} +2 -2
- package/dist/chunks/{languageContext-DM_LTp53.esm.js.map → languageContext-D_khAb2z.esm.js.map} +1 -1
- package/dist/chunks/{migration-utils-CnzZeXcT.esm.js → migration-utils-ChJDhzct.esm.js} +2 -2
- package/dist/chunks/{migration-utils-CnzZeXcT.esm.js.map → migration-utils-ChJDhzct.esm.js.map} +1 -1
- package/dist/chunks/{migration-utils-BWRj500E.js → migration-utils-D_sKDk5V.js} +2 -2
- package/dist/chunks/{migration-utils-BWRj500E.js.map → migration-utils-D_sKDk5V.js.map} +1 -1
- package/dist/chunks/{page-context-BXcrnujq.esm.js → page-context-D0QJui88.esm.js} +46 -58
- package/dist/chunks/page-context-D0QJui88.esm.js.map +1 -0
- package/dist/chunks/{page-context-qX5XKOOF.js → page-context-fgpShY8H.js} +45 -57
- package/dist/chunks/page-context-fgpShY8H.js.map +1 -0
- package/dist/chunks/{sidebar-l49eLo8p.esm.js → sidebar-DGGqCL8z.esm.js} +4 -4
- package/dist/chunks/{sidebar-l49eLo8p.esm.js.map → sidebar-DGGqCL8z.esm.js.map} +1 -1
- package/dist/chunks/{sidebar-C2zkLZyA.js → sidebar-DZ3SNJU4.js} +4 -4
- package/dist/chunks/{sidebar-C2zkLZyA.js.map → sidebar-DZ3SNJU4.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-BQN2N8jx.esm.js → sidebarScreen-D0v7aHxc.esm.js} +4 -4
- package/dist/chunks/{sidebarScreen-BQN2N8jx.esm.js.map → sidebarScreen-D0v7aHxc.esm.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-PoYXto7E.js → sidebarScreen-usZhvsdA.js} +4 -4
- package/dist/chunks/{sidebarScreen-PoYXto7E.js.map → sidebarScreen-usZhvsdA.js.map} +1 -1
- package/dist/chunks/{uom-field-wrapper-Cef0lqA7.esm.js → uom-field-wrapper-DNgu7XcT.esm.js} +10 -10
- package/dist/chunks/{uom-field-wrapper-Cef0lqA7.esm.js.map → uom-field-wrapper-DNgu7XcT.esm.js.map} +1 -1
- package/dist/chunks/{uom-field-wrapper-DXNgxYwv.js → uom-field-wrapper-PUawuRbz.js} +10 -10
- package/dist/chunks/{uom-field-wrapper-DXNgxYwv.js.map → uom-field-wrapper-PUawuRbz.js.map} +1 -1
- package/dist/chunks/{useAccountSetting-Bo-BSaTa.js → useAccountSetting-BUtKbR7D.js} +2 -2
- package/dist/chunks/{useAccountSetting-Bo-BSaTa.js.map → useAccountSetting-BUtKbR7D.js.map} +1 -1
- package/dist/chunks/{useAccountSetting-BZQ6ceiU.esm.js → useAccountSetting-YwdjGrxs.esm.js} +2 -2
- package/dist/chunks/{useAccountSetting-BZQ6ceiU.esm.js.map → useAccountSetting-YwdjGrxs.esm.js.map} +1 -1
- package/dist/chunks/{useAuth-HvZ6U960.js → useAuth-Bn-Dk5iL.js} +3 -1
- package/dist/chunks/{useAuth-HvZ6U960.js.map → useAuth-Bn-Dk5iL.js.map} +1 -1
- package/dist/chunks/{useAuth-Tfx2guEJ.esm.js → useAuth-DatwJNOz.esm.js} +3 -1
- package/dist/chunks/{useAuth-Tfx2guEJ.esm.js.map → useAuth-DatwJNOz.esm.js.map} +1 -1
- package/dist/chunks/{useLangauge-DwsR1jcv.js → useLangauge-CZdmpat2.js} +2 -2
- package/dist/chunks/{useLangauge-DwsR1jcv.js.map → useLangauge-CZdmpat2.js.map} +1 -1
- package/dist/chunks/{useLangauge-BU_fP3ZM.esm.js → useLangauge-ko-Wm4Qq.esm.js} +2 -2
- package/dist/chunks/{useLangauge-BU_fP3ZM.esm.js.map → useLangauge-ko-Wm4Qq.esm.js.map} +1 -1
- package/dist/chunks/{useReduxIntegration-DOk8SnPC.esm.js → useReduxIntegration-B8otN3ek.esm.js} +3 -3
- package/dist/chunks/{useReduxIntegration-DOk8SnPC.esm.js.map → useReduxIntegration-B8otN3ek.esm.js.map} +1 -1
- package/dist/chunks/{useReduxIntegration-Dx22DWpG.js → useReduxIntegration-CZkiPDYL.js} +3 -3
- package/dist/chunks/{useReduxIntegration-Dx22DWpG.js.map → useReduxIntegration-CZkiPDYL.js.map} +1 -1
- package/dist/components/index.esm.js +8 -8
- package/dist/components/index.js +8 -8
- package/dist/contexts/index.esm.js +3 -3
- package/dist/contexts/index.js +3 -3
- package/dist/hooks/index.esm.js +5 -5
- package/dist/hooks/index.js +5 -5
- package/dist/index.esm.js +16 -16
- package/dist/index.js +16 -16
- package/dist/layout/index.esm.js +2 -2
- package/dist/layout/index.js +2 -2
- package/dist/utils/index.esm.js +3 -3
- package/dist/utils/index.js +3 -3
- package/dist/views/index.esm.js +6 -6
- package/dist/views/index.js +5 -5
- package/package.json +1 -1
- package/dist/chunks/page-context-BXcrnujq.esm.js.map +0 -1
- package/dist/chunks/page-context-qX5XKOOF.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-data-B9vVQV5Y.js","sources":["../../src/components/material-table/components/number-aggregation.tsx","../../src/views/404.tsx","../../src/views/privateRoute.tsx","../../src/views/afterAuth/page-view/redux/actionCreator.ts","../../src/views/afterAuth/page-view/utils/default-data.ts","../../src/views/afterAuth/page-view/utils/local-data.ts","../../src/views/afterAuth/page-view/redux/state.ts","../../src/views/afterAuth/page-view/redux/reducer.ts","../../src/views/afterAuth/page-view/page-view.tsx","../../src/views/beforeAuth/change-password/change-password.tsx","../../src/views/beforeAuth/components/activity-tag-data/activity-tag-data.ts","../../src/views/beforeAuth/components/calendar-data/calendar-data.ts","../../src/views/beforeAuth/components/grid-data/grid-data.ts","../../src/views/beforeAuth/components/kanbann-content/kanbann-raw.ts","../../src/views/beforeAuth/components/list-content/column-raw.tsx","../../src/views/beforeAuth/components/list-content/list-data.tsx","../../src/views/beforeAuth/components/multiline-data/multiline-data.ts","../../src/views/beforeAuth/components/tabs-data/tabs-data.ts","../../src/views/beforeAuth/components/user-dropdown-data/user-dropdown-data.ts","../../src/views/beforeAuth/forgot-password/forgot-password.tsx","../../src/views/beforeAuth/landing/landing.tsx","../../src/views/beforeAuth/reset-password/reset-password.tsx","../../src/views/form-builder/field_properties.ts","../../src/views/form-builder/element-edit-forms/field-select.tsx","../../src/views/form-builder/element-edit-forms/text.tsx","../../src/views/form-builder/element-edit-forms/select.tsx","../../src/views/form-builder/element-edit-forms/section.tsx","../../src/views/form-builder/element-edit-forms/checkbox.tsx","../../src/views/form-builder/element-edit-forms/table-form.tsx","../../src/views/form-builder/form-fields.tsx","../../src/views/form-builder/utils/common.ts","../../src/views/form-builder/custom-form.tsx","../../src/views/form-builder/element-edit-forms/column-width.tsx","../../node_modules/@mui/icons-material/CodeOutlined.js","../../src/views/template-editor/services/CSSScopingService.ts","../../src/views/template-editor/utils/common.ts","../../src/views/template-editor/components/EditorHeader.tsx","../../node_modules/@mui/icons-material/DragIndicator.js","../../node_modules/@mui/icons-material/CallSplit.js","../../src/views/template-editor/edit-section-modal/edit-section-modal.tsx","../../src/views/template-editor/utils/style-extractor.ts","../../src/views/template-editor/hooks/useDebouncedUpdate.ts","../../src/views/template-editor/components/EditorSection.tsx","../../node_modules/@mui/icons-material/FormatBold.js","../../node_modules/@mui/icons-material/FormatItalic.js","../../node_modules/@mui/icons-material/FormatUnderlined.js","../../node_modules/@mui/icons-material/FormatAlignLeft.js","../../node_modules/@mui/icons-material/FormatAlignCenter.js","../../node_modules/@mui/icons-material/FormatAlignRight.js","../../node_modules/@mui/icons-material/FormatAlignJustify.js","../../src/views/template-editor/components/controllers/AlignmentControl.tsx","../../src/views/template-editor/components/controllers/TextControls.tsx","../../src/views/template-editor/components/controllers/ButtonControls.tsx","../../src/views/template-editor/components/controllers/border-control.tsx","../../src/views/template-editor/components/controllers/ImageControls.tsx","../../src/views/template-editor/components/controllers/DividerControls.tsx","../../node_modules/@mui/icons-material/Refresh.js","../../node_modules/@mui/icons-material/MergeType.js","../../src/views/template-editor/components/controllers/TableControls.tsx","../../src/views/template-editor/components/controllers/SignatureControls.tsx","../../src/views/template-editor/components/controllers/CodeControls.tsx","../../src/views/template-editor/components/SectionFormatPanel.tsx","../../src/views/template-editor/components/EditorSidebar.tsx","../../node_modules/@mui/icons-material/Check.js","../../src/views/template-editor/components/EditorCanvas.tsx","../../src/views/template-editor/template-name-modal/template-name-modal.tsx","../../src/views/template-editor/components/SectionFlowEditor.tsx","../../src/views/template-editor/add-template/add-template.tsx","../../src/views/template-editor/template-modal/html-thumbnail-preview.tsx","../../src/views/template-editor/template-modal/html-thumbnail-preview-full.tsx","../../src/views/template-editor/template-modal/template-modal.tsx","../../src/views/template-editor/company-selection-modal/company-selection-modal.tsx","../../src/views/template-editor/templates.tsx","../../src/views/template-editor/routes.tsx","../../src/views/template-editor/utils/default-data.ts"],"sourcesContent":["import React, { useEffect } from \"react\";\r\nimport { aggregationFns } from \"../aggregation-fns\";\r\nimport Typography from \"../../typography/typography\";\r\nimport { MenuItem } from \"@mui/material\";\r\nimport Menu from \"../../menu/menu\";\r\nimport { MRT_RowData } from \"material-react-table\";\r\n\r\ntype aggregationType =\r\n | \"none\"\r\n | \"avg\"\r\n | \"min\"\r\n | \"max\"\r\n | \"count_empty\"\r\n | \"count_full\"\r\n | \"sum\"\r\n | \"percentage_empty\"\r\n | \"percentage_full\";\r\n\r\ninterface IAggregation {\r\n label: string;\r\n value: aggregationType;\r\n}\r\n\r\nconst allAggregations: IAggregation[] = [\r\n {\r\n label: \"Average\",\r\n value: \"avg\",\r\n },\r\n {\r\n label: \"Sum\",\r\n value: \"sum\",\r\n },\r\n {\r\n label: \"Min\",\r\n value: \"min\",\r\n },\r\n {\r\n label: \"Max\",\r\n value: \"max\",\r\n },\r\n {\r\n label: \"Count Empty\",\r\n value: \"count_empty\",\r\n },\r\n {\r\n label: \"Count Full\",\r\n value: \"count_full\",\r\n },\r\n {\r\n label: \"Percentage Full\",\r\n value: \"percentage_full\",\r\n },\r\n {\r\n label: \"Percentage Empty\",\r\n value: \"percentage_empty\",\r\n },\r\n {\r\n label: \"None\",\r\n value: \"none\",\r\n },\r\n];\r\n\r\nconst nonNumberAggregations: IAggregation[] = [\r\n {\r\n label: \"Count Empty\",\r\n value: \"count_empty\",\r\n },\r\n {\r\n label: \"Count Full\",\r\n value: \"count_full\",\r\n },\r\n {\r\n label: \"Percentage Full\",\r\n value: \"percentage_full\",\r\n },\r\n {\r\n label: \"Percentage Empty\",\r\n value: \"percentage_empty\",\r\n },\r\n {\r\n label: \"None\",\r\n value: \"none\",\r\n },\r\n];\r\n\r\nconst aggregationFnsLookup = {\r\n avg: aggregationFns.average,\r\n sum: aggregationFns.sum,\r\n max: aggregationFns.max,\r\n count_empty: aggregationFns.countEmpty,\r\n count_full: aggregationFns.countFull,\r\n percentage_empty: aggregationFns.percentageEmpty,\r\n percentage_full: aggregationFns.percentageFull,\r\n min: aggregationFns.min,\r\n none: aggregationFns.none,\r\n};\r\n\r\ninterface INumberAggregation {\r\n data: MRT_RowData[];\r\n column: string;\r\n type?: string;\r\n}\r\n\r\nconst NumberAggregation = ({ data, column, type }: INumberAggregation) => {\r\n const [selectedType, setSelectedType] =\r\n React.useState<aggregationType>(\"none\");\r\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\r\n const [calculatedValue, setCalculatedValue] = React.useState<string | null>();\r\n const open = Boolean(anchorEl);\r\n\r\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleAggregationType = (val: aggregationType) => {\r\n setSelectedType(val);\r\n handleClose();\r\n };\r\n\r\n useEffect(() => {\r\n const func = aggregationFnsLookup[selectedType];\r\n setCalculatedValue(func(data, column));\r\n }, [selectedType, column, data]);\r\n\r\n const aggregations =\r\n type === \"number\" ? allAggregations : nonNumberAggregations;\r\n\r\n return (\r\n <>\r\n <Typography\r\n onClick={handleClick}\r\n sx={{ cursor: \"pointer\" }}\r\n type=\"s4\"\r\n weight=\"normal\"\r\n color={calculatedValue ? \"theme.secondary.1000\" : \"theme.secondary.500\"}\r\n >\r\n {calculatedValue || \"+ Add Calculation\"}\r\n </Typography>\r\n <Menu\r\n id=\"basic-menu\"\r\n anchorEl={anchorEl}\r\n open={open}\r\n onClose={handleClose}\r\n >\r\n {aggregations?.map((aggr) => (\r\n <MenuItem\r\n key={aggr.value}\r\n selected={selectedType == aggr?.value}\r\n onClick={() => handleAggregationType(aggr?.value)}\r\n >\r\n <Typography color=\"theme.secondary.1000\" type=\"s4\">\r\n {aggr?.label}\r\n </Typography>\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </>\r\n );\r\n};\r\n\r\nexport { NumberAggregation };\r\nexport default NumberAggregation;\r\n","import { Component } from \"react\";\r\n\r\nclass NotFound extends Component {\r\n componentDidMount() {\r\n setTimeout(() => {\r\n // this.props.history.push('/');\r\n }, 2000);\r\n }\r\n\r\n render() {\r\n return (\r\n <div\r\n style={{\r\n textAlign: \"center\",\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n transform: \"translate(-50%, -50%)\",\r\n }}\r\n >\r\n <strong>\r\n <p>404</p>\r\n </strong>\r\n <hr />\r\n <p>Not Found</p>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default NotFound;\r\n","import React from \"react\";\r\nimport { Navigate, Outlet } from \"react-router-dom\";\r\n\r\nimport { Pathname } from \"../constants/pathnames/pathname\";\r\nimport { useAuth } from \"../hooks/useAuth\";\r\nimport Loader from \"../components/loader\";\r\n\r\nexport const PrivateRoute = () => {\r\n const { user, loading } = useAuth();\r\n\r\n return loading ? (\r\n <Loader />\r\n ) : user ? (\r\n <Outlet />\r\n ) : (\r\n <Navigate to={Pathname.LOGIN} />\r\n );\r\n};\r\n\r\nexport default PrivateRoute;\r\n","import { createAsyncThunk } from \"@reduxjs/toolkit\";\r\n\r\nexport const fetchPage = createAsyncThunk(\r\n \"pageView/fetchPage\",\r\n (pageId: number, { getState }) => {\r\n const { pages }: any = getState();\r\n const { data } = pages.pages.find((p: any) => p?.value === pageId);\r\n return data;\r\n },\r\n);\r\n","const rows = [\r\n {\r\n name: \"John\",\r\n age: 30,\r\n gender: \"Male\",\r\n company: \"NASA\",\r\n location: \"USA\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n];\r\n\r\nconst columns = [\r\n {\r\n header: \"Name\",\r\n type: \"string\",\r\n accessorKey: \"name\",\r\n },\r\n {\r\n type: \"number\",\r\n header: \"Age\",\r\n accessorKey: \"age\",\r\n },\r\n {\r\n header: \"Gender\",\r\n type: \"string\",\r\n accessorKey: \"gender\",\r\n },\r\n {\r\n header: \"Company\",\r\n type: \"string\",\r\n accessorKey: \"company\",\r\n },\r\n {\r\n header: \"Location\",\r\n type: \"string\",\r\n accessorKey: \"location\", //simple recommended way to define a column\r\n },\r\n {\r\n header: \"Price\",\r\n type: \"number\",\r\n accessorKey: \"price\",\r\n },\r\n];\r\n\r\nconst columnOrder = [\"name\", \"age\", \"gender\", \"company\", \"location\", \"price\"];\r\n\r\nexport const defaultData = { rows, columns, columnOrder };\r\n","const rows = [\r\n {\r\n name: \"John\",\r\n age: 30,\r\n gender: \"Male\",\r\n company: \"NASA\",\r\n location: \"USA\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n];\r\n\r\nconst columns = [\r\n {\r\n type: \"number\",\r\n header: \"Age\",\r\n accessorKey: \"age\",\r\n },\r\n {\r\n header: \"Gender\",\r\n type: \"string\",\r\n accessorKey: \"gender\",\r\n },\r\n {\r\n header: \"Company\",\r\n type: \"string\",\r\n accessorKey: \"company\",\r\n },\r\n {\r\n header: \"Name\",\r\n type: \"string\",\r\n accessorKey: \"name\",\r\n },\r\n {\r\n header: \"Location\",\r\n type: \"string\",\r\n accessorKey: \"location\", //simple recommended way to define a column\r\n },\r\n {\r\n header: \"Price\",\r\n type: \"number\",\r\n accessorKey: \"price\",\r\n },\r\n];\r\n\r\nconst columnOrder = [\"age\", \"gender\", \"company\", \"name\", \"location\", \"price\"];\r\n\r\nexport const local = { rows, columns, columnOrder };\r\n","import { defaultData } from \"../utils/default-data\";\r\nimport { local } from \"../utils/local-data\";\r\n\r\nexport const state = {\r\n currentPage: 1,\r\n rows: [],\r\n columns: [],\r\n columnOrder: [],\r\n loading: true,\r\n error: \"\",\r\n pages: [\r\n {\r\n name: \"Default\",\r\n _id: 1,\r\n data: defaultData,\r\n },\r\n {\r\n name: \"Local\",\r\n _id: 2,\r\n data: local,\r\n },\r\n ],\r\n paginationModel: {\r\n pageNo: 1,\r\n limit: 10,\r\n },\r\n};\r\n\r\nexport default state;\r\n","import { createSlice } from \"@reduxjs/toolkit\";\r\nimport initialState from \"./state\";\r\n\r\nimport { fetchPage } from \"./actionCreator\";\r\n\r\nexport const pageViewSlice = createSlice({\r\n name: \"pageView\",\r\n initialState,\r\n reducers: {\r\n changeCurrentPage(state, action) {\r\n state.currentPage = action.payload;\r\n },\r\n setPages(state, action) {\r\n state.pages = action.payload;\r\n },\r\n setPaginationModel(state, action) {\r\n state.paginationModel = action.payload;\r\n },\r\n setColumnOrder(state, action) {\r\n state.columnOrder = action.payload;\r\n },\r\n setRowData(state, { payload }) {\r\n const rows = JSON.parse(JSON.stringify(state.rows));\r\n const row = rows[payload.rowId];\r\n row[payload.columnId] = payload.value;\r\n state.rows = rows;\r\n },\r\n },\r\n extraReducers: (builder) => {\r\n builder.addCase(fetchPage.pending, (state) => {\r\n state.loading = true;\r\n });\r\n builder.addCase(fetchPage.fulfilled, (state, action) => {\r\n state.loading = false;\r\n state.error = \"\";\r\n state.rows = action.payload.rows;\r\n state.columns = action.payload.columns;\r\n state.columnOrder = action.payload.columnOrder;\r\n });\r\n builder.addCase(fetchPage.rejected, (state) => {\r\n state.loading = false;\r\n state.rows = [];\r\n state.columns = [];\r\n state.error = \"Unable to get data\";\r\n });\r\n },\r\n});\r\n\r\nconst {\r\n changeCurrentPage: pageViewChangeCurrentPage,\r\n setPages: setPageViewPages,\r\n setPaginationModel: setPageViewPaginationModel,\r\n setColumnOrder,\r\n setRowData,\r\n} = pageViewSlice.actions;\r\n\r\nexport {\r\n pageViewChangeCurrentPage,\r\n setPageViewPages,\r\n setPageViewPaginationModel,\r\n setColumnOrder,\r\n setRowData,\r\n};\r\n\r\nexport default pageViewSlice.reducer;\r\n","import { useEffect, useMemo } from \"react\";\r\nimport Footer from \"../../../components/footer/footer\";\r\nimport MaterialTable from \"../../../components/material-table/material-table\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../redux/hooks\";\r\nimport { fetchPage } from \"./redux/actionCreator\";\r\nimport {\r\n pageViewChangeCurrentPage,\r\n setColumnOrder,\r\n setPageViewPages,\r\n setPageViewPaginationModel,\r\n setRowData,\r\n} from \"./redux/reducer\";\r\nimport { IPaginationModel } from \"../../../@types/pagination-model\";\r\nimport NumberAggregation from \"../../../components/material-table/components/number-aggregation\";\r\nimport DefaultAggregation from \"../../../components/material-table/components/default-aggregation\";\r\n// import HeaderCell from \"../../../components/material-table/components/header-cell\";\r\nimport { IPage } from \"../../../@types/page\";\r\nimport Button from \"../../../components/button/button\";\r\n// import Filter from \"../../../components/filter/filter\";\r\n\r\nconst PageView = () => {\r\n // const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n const dispatch = useAppDispatch();\r\n const { pages, currentPage, rows, columns, columnOrder, paginationModel } =\r\n useAppSelector((store) => store?.pages);\r\n const { pageNo, limit } = paginationModel;\r\n\r\n useEffect(() => {\r\n dispatch(fetchPage(1));\r\n }, [dispatch]);\r\n\r\n const handleChangePage = (page: number) =>\r\n dispatch(pageViewChangeCurrentPage(page));\r\n\r\n const handleSetPages = (updatedPages: IPage[]) =>\r\n dispatch(setPageViewPages(updatedPages));\r\n\r\n useEffect(() => {\r\n dispatch(fetchPage(currentPage));\r\n }, [dispatch, currentPage]);\r\n\r\n const tableRows = useMemo(() => {\r\n const start = limit * (pageNo - 1);\r\n return rows.slice(start, start + limit);\r\n }, [rows, pageNo, limit]);\r\n\r\n const tableColumns = useMemo(() => {\r\n return columns?.map((col: any) => {\r\n let updatedCol = {\r\n ...col,\r\n // Header: ({ column }: any) => <HeaderCell column={column} />,\r\n enableSorting: true,\r\n };\r\n\r\n if (col?.type === \"number\") {\r\n updatedCol = {\r\n ...updatedCol,\r\n muiEditTextFieldProps: {\r\n type: \"number\",\r\n },\r\n Footer: ({ column }: any) => {\r\n return <NumberAggregation data={tableRows} column={column?.id} />;\r\n },\r\n };\r\n } else if (col.type === \"string\") {\r\n updatedCol = {\r\n ...updatedCol,\r\n Footer: ({ column }: any) => (\r\n <DefaultAggregation data={tableRows} column={column.id} />\r\n ),\r\n };\r\n }\r\n\r\n return updatedCol;\r\n });\r\n }, [tableRows, columns]);\r\n\r\n const handlePaginationModel = (model: IPaginationModel) => {\r\n dispatch(setPageViewPaginationModel(model));\r\n };\r\n\r\n const total = limit ? Math.ceil(rows.length / limit) : 0;\r\n\r\n const handleColumnOrdering = (colOrder: string[]) => {\r\n dispatch(setColumnOrder(colOrder.slice(1)));\r\n };\r\n\r\n const updateData = (value: string, column: any, rowId: string) => {\r\n const payload = {\r\n value: column?.columnDef?.type === \"number\" ? Number(value) : value,\r\n columnId: column.id,\r\n rowId,\r\n };\r\n\r\n dispatch(setRowData(payload));\r\n };\r\n\r\n // const handleOpenFilter = (event: React.MouseEvent<HTMLButtonElement>) =>\r\n // setAnchorEl(event.currentTarget);\r\n\r\n // const handleCloseFilter = () => setAnchorEl(null);\r\n\r\n return (\r\n <>\r\n <Button>Open Filter</Button>\r\n <MaterialTable\r\n rows={tableRows}\r\n columns={tableColumns}\r\n paginationModel={paginationModel}\r\n totalPages={total}\r\n columnOrder={[\"mrt-row-select\", ...columnOrder]}\r\n handleColumnOrdering={handleColumnOrdering}\r\n updateData={updateData}\r\n />\r\n <Footer\r\n pages={pages}\r\n setPages={handleSetPages}\r\n currentPage={currentPage}\r\n setCurrentPage={handleChangePage}\r\n total={total}\r\n paginationModel={paginationModel}\r\n handlePaginationModel={handlePaginationModel}\r\n />\r\n\r\n {/* {anchorEl && <Filter anchorEl={anchorEl} onClose={handleCloseFilter} />} */}\r\n </>\r\n );\r\n};\r\n\r\nexport { PageView };\r\nexport default PageView;\r\n","import { useState } from \"react\";\r\n// import { useNavigate } from \"react-router-dom\";\r\nimport { Pathname } from \"../../../constants/pathnames/pathname\";\r\nimport { Box, Grid, styled } from \"@mui/material\";\r\n// import { styled } from \"@mui/material/styles\";\r\nimport images from \"../../../assets/images\";\r\nimport DynamicInput from \"../../../components/form-control/form-builder/form-builder-element/text\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport Typography from \"../../../components/typography/typography\";\r\nimport Button from \"../../../components/button/button\";\r\n// import DynamicCheckBox from \"../../../components/form-control/form-builder/form-builder-element/checkbox\";\r\nimport { Eye, EyeOff } from \"../../../components/icons\";\r\nimport { LoginFormValues } from \"../../../contexts/AuthContext\";\r\n// import { useAuth } from \"../../../hooks/useAuth\";\r\nimport Toast from \"../../../components/toast/toast\";\r\nimport * as Yup from \"yup\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport { useAuth } from \"../../../hooks/useAuth\";\r\nimport { useLocation, useNavigate } from \"react-router-dom\";\r\nimport { getApiConfig } from \"@/utils\";\r\n\r\n\r\nconst LoginContainer = styled(Grid)(() => ({\r\n height: \"100vh\",\r\n }));\r\n \r\n const LeftGrid = styled(Grid)(({ theme }) => ({\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n backgroundImage: `url(${images.login.LoginLeftBg})`,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n [theme.breakpoints.down(\"lg\")]: {\r\n \"& img\": {\r\n width: 350,\r\n height: 350,\r\n },\r\n },\r\n [theme.breakpoints.down(\"md\")]: {\r\n \"& img\": {\r\n width: 300,\r\n height: 300,\r\n },\r\n },\r\n }));\r\n \r\n const RightGrid = styled(Grid)(() => ({\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n padding: \"1rem\",\r\n }));\r\n\r\n const FlexBox = styled(Box)(() => ({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }));\r\n\r\n interface FormValeus {\r\n login: LoginFormValues;\r\n }\r\n\r\n const validationSchema = Yup.object({\r\n login: Yup.object({\r\n password: Yup.string()\r\n .required(\"Please enter password\")\r\n .min(8, \"Password must be at least 8 characters\")\r\n .matches(/[A-Z]/, \"Password must contain at least one uppercase letter\")\r\n .matches(/[!@#$%^&*(),.?\":{}|<>]/, \"Password must contain at least one special character\"),\r\n confirm_password: Yup.string().required(\"Please enter confirm password\").oneOf([Yup.ref('password')], \"Passwords must match\"),\r\n }),\r\n });\r\n\r\nexport const ChangePassword = () => {\r\n\r\n const { control, handleSubmit } = useForm<FormValeus>({\r\n resolver: yupResolver(validationSchema),\r\n mode: \"all\",\r\n });\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n\r\n const [showPassword, setShowPassword] = useState<boolean>(false);\r\n const handleShowPassword = () => setShowPassword(!showPassword);\r\n const { changePassword } = useAuth();\r\n const location = useLocation();\r\n const navigate = useNavigate();\r\n\r\n const onSubmit = async (values: FormValeus) => {\r\n const token = location.state?.token;\r\n if (!token) {\r\n setToast({ message: 'Token missing', type: \"alert\" });\r\n return;\r\n } else {\r\n values.login.token = token;\r\n await changePassword(values.login, () => {\r\n setToast({ message: 'Password changed successfully', type: \"normal\" });\r\n setTimeout(() => {\r\n navigate(Pathname.LOGIN);\r\n }, 2000);\r\n });\r\n return values;\r\n }\r\n };\r\n\r\n const appLogo = getApiConfig().appLogo || images.erp_logo\r\n\r\n\r\n return (\r\n <Box>\r\n <LoginContainer container>\r\n <LeftGrid item sm={6}>\r\n <img src={images.login.LoginLeftSiteImage} />\r\n </LeftGrid>\r\n <RightGrid item sm={6} xs={12}>\r\n <FlexBox\r\n display=\"flex\"\r\n flexDirection=\"column\"\r\n gap={4}\r\n sx={(theme) => ({\r\n minWidth: 400,\r\n [theme.breakpoints.down(\"md\")]: {\r\n minWidth: 300,\r\n },\r\n [theme.breakpoints.down(\"sm\")]: {\r\n minWidth: 300,\r\n },\r\n })}\r\n >\r\n <Box textAlign=\"center\">\r\n <img src={appLogo} width={160} height={55}/>\r\n </Box>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n <FlexBox gap={4}>\r\n <FlexBox gap={3}>\r\n <Box>\r\n <Typography\r\n align=\"center\"\r\n type=\"h1\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n Change Password\r\n </Typography>\r\n <Typography\r\n align=\"center\"\r\n type=\"h5\"\r\n weight=\"normal\"\r\n color=\"theme.secondary81000\"\r\n >\r\n Enter Details below\r\n </Typography>\r\n </Box>\r\n <FlexBox gap={2}>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Password\"\r\n name=\"password\"\r\n type={\"password\"}\r\n placeholder=\"Enter Password\"\r\n fieldArrayName=\"login\"\r\n />\r\n </Box>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Confirm Password\"\r\n name=\"confirm_password\"\r\n type={showPassword ? \"text\" : \"password\"}\r\n fieldArrayName=\"login\"\r\n endIcon={\r\n <>\r\n {showPassword ? (\r\n <Eye fontSize=\"small\" htmlColor=\"#292D32\" />\r\n ) : (\r\n <EyeOff fontSize=\"small\" htmlColor=\"#292D32\" />\r\n )}\r\n </>\r\n }\r\n onIconClick={handleShowPassword}\r\n placeholder=\"Enter confirm password\"\r\n />\r\n </Box>\r\n </FlexBox>\r\n </FlexBox>\r\n <FlexBox gap={2}>\r\n <Button type=\"submit\" size=\"large\" variant=\"contained\">\r\n Change Password\r\n </Button>\r\n </FlexBox>\r\n </FlexBox>\r\n </form>\r\n </FlexBox>\r\n </RightGrid>\r\n </LoginContainer>\r\n <Toast\r\n open={Boolean(toast)}\r\n message={toast?.message}\r\n type={toast?.type}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\r\n autoHideDuration={3000}\r\n />\r\n </Box>\r\n );\r\n};","export const activityTag = {\r\n comments: [\r\n {\r\n name: \"You\",\r\n dateTime: \"01-11-2024 12:45:10\",\r\n text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\",\r\n },\r\n {\r\n name: \"Siddhant\",\r\n dateTime: \"01-12-2024 15:05:22\",\r\n text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\",\r\n },\r\n ],\r\n activities: [\r\n {\r\n dateTime: \"12-27-2023 19:17:10\",\r\n text: \"Prasun assigned HR Admin role to Avneet Singh.\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 19:15:10\",\r\n text: \"Prasun created a new user Avneet Singh\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 15:17:10\",\r\n text: \"Prasun created a new role HR Admin\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 14:17:10\",\r\n text: \"Prasun updated a role UI/UX Designer ‣ Product Designer\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 14:17:10\",\r\n text: \"Amrit updated resources for UI/UX Designer role.\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 14:17:10\",\r\n text: \"Amrit updated user Prashant Singh ‣ Prasun Singh\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 14:17:10\",\r\n text: \"Amrit updated user Prashant Singh ‣ Prasun Singh\",\r\n },\r\n ],\r\n};\r\n","// export const calendarData = {\r\n// events: [\r\n// { id: 1, title: \"event 1\", date: \"2019-12-01\" },\r\n// {\r\n// title: \"event 2\",\r\n// start: \"2019-12-01\",\r\n// end: \"2019-12-05\",\r\n// allDay: true,\r\n// HostName: \"William\",\r\n// },\r\n// {\r\n// title: \"event 3\",\r\n// start: \"2019-12-05\",\r\n// end: \"2019-12-07\",\r\n// allDay: true,\r\n// },\r\n// {\r\n// title: \"event 4\",\r\n// start: \"2019-12-05\",\r\n// end: \"2019-12-07\",\r\n// allDay: true,\r\n// },\r\n// {\r\n// title: \"event 5\",\r\n// start: \"2019-12-05\",\r\n// end: \"2019-12-07\",\r\n// allDay: true,\r\n// },\r\n// {\r\n// title: \"event 6\",\r\n// start: \"2019-12-05\",\r\n// end: \"2019-12-07\",\r\n// allDay: true,\r\n// },\r\n// ],\r\n// };\r\n\r\nexport const calendarData = {\r\n events: [\r\n { title: \"All Day Event\", start: getDate(\"YEAR-MONTH-01\") },\r\n {\r\n title: \"Long Event\",\r\n start: getDate(\"YEAR-MONTH-07\"),\r\n end: getDate(\"YEAR-MONTH-10\"),\r\n // allDay: true,\r\n // HostName: \"William\",\r\n },\r\n {\r\n groupId: \"999\",\r\n title: \"Repeating Event\",\r\n start: getDate(\"YEAR-MONTH-09T16:00:00+00:00\"),\r\n },\r\n {\r\n groupId: \"999\",\r\n title: \"Repeating Event\",\r\n start: getDate(\"YEAR-MONTH-16T16:00:00+00:00\"),\r\n },\r\n {\r\n title: \"Conference\",\r\n start: \"YEAR-MONTH-17\",\r\n end: getDate(\"YEAR-MONTH-19\"),\r\n },\r\n {\r\n title: \"Meeting\",\r\n start: getDate(\"YEAR-MONTH-18T10:30:00+00:00\"),\r\n end: getDate(\"YEAR-MONTH-18T12:30:00+00:00\"),\r\n },\r\n { title: \"Lunch\", start: getDate(\"YEAR-MONTH-18T12:00:00+00:00\") },\r\n { title: \"Birthday Party\", start: getDate(\"YEAR-MONTH-19T07:00:00+00:00\") },\r\n { title: \"Meeting\", start: getDate(\"YEAR-MONTH-18T14:30:00+00:00\") },\r\n { title: \"Happy Hour\", start: getDate(\"YEAR-MONTH-18T17:30:00+00:00\") },\r\n { title: \"Dinner\", start: getDate(\"YEAR-MONTH-18T20:00:00+00:00\") },\r\n ],\r\n};\r\n\r\nfunction getDate(dayString: any) {\r\n const today = new Date();\r\n const year = today.getFullYear().toString();\r\n let month = (today.getMonth() + 1).toString();\r\n\r\n if (month.length === 1) {\r\n month = \"0\" + month;\r\n }\r\n\r\n return dayString.replace(\"YEAR\", year).replace(\"MONTH\", month);\r\n}\r\n","const data = [\r\n {\r\n name: \"Naidu Setti\",\r\n company: \"ERP Force\",\r\n status: \"Paid\",\r\n email: \"naidu@gmail.com\",\r\n amount: \"$1,00,000\",\r\n },\r\n {\r\n name: \"Shashank Yadav\",\r\n company: \"Antino Labs\",\r\n status: \"Pending\",\r\n email: \"shashank@gmail.com\",\r\n amount: \"$50,000\",\r\n },\r\n {\r\n name: \"Tarun Prajapati\",\r\n company: \"Goldenflitch\",\r\n status: \"Lost\",\r\n email: \"tarun@gmail.com\",\r\n amount: \"$60,000\",\r\n },\r\n {\r\n name: \"Rajneesh Kumar\",\r\n company: \"ERP Force\",\r\n status: \"Lost\",\r\n email: \"rajneesh@gmail.com\",\r\n amount: \"$10,000\",\r\n },\r\n {\r\n name: \"Radhakanth\",\r\n company: \"Antino\",\r\n status: \"Upcomming\",\r\n email: \"radhakanth@gmail.com\",\r\n amount: \"$1,00,000\",\r\n },\r\n];\r\n\r\nexport { data };\r\nexport default data;\r\n","export const board = {\r\n columns: [\r\n {\r\n id: 1,\r\n title: \"Backlog\",\r\n cards: [\r\n {\r\n id: 1.1,\r\n title: \"Card title 1\",\r\n description: \"Card content\",\r\n },\r\n {\r\n id: 1.2,\r\n title: \"Card title 2\",\r\n description: \"Card content\",\r\n },\r\n {\r\n id: 1.3,\r\n title: \"Card title 3\",\r\n description: \"Card content\",\r\n },\r\n ],\r\n },\r\n {\r\n id: 2,\r\n title: \"Doing\",\r\n cards: [\r\n {\r\n id: 2.1,\r\n title: \"Card title 9\",\r\n description: \"Card content\",\r\n },\r\n ],\r\n },\r\n {\r\n id: 3,\r\n title: \"Q&A\",\r\n cards: [\r\n {\r\n id: 3.1,\r\n title: \"Card title 10\",\r\n description: \"Card content\",\r\n },\r\n {\r\n id: 3.2,\r\n title: \"Card title 11\",\r\n description: \"Card content\",\r\n },\r\n ],\r\n },\r\n {\r\n id: 4,\r\n title: \"Production\",\r\n cards: [\r\n {\r\n id: 4.1,\r\n title: \"Card title 12\",\r\n description: \"Card content\",\r\n },\r\n {\r\n id: 4.2,\r\n title: \"Card title 13\",\r\n description: \"Card content\",\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n","import { GridColumnIcon } from \"@glideapps/glide-data-grid\";\r\n\r\nexport const column = [\r\n {\r\n title: \"Name\",\r\n id: \"name\",\r\n hasMenu: true,\r\n icon: GridColumnIcon.HeaderString,\r\n },\r\n {\r\n title: \"Company\",\r\n id: \"company\",\r\n hasMenu: true,\r\n dataType: \"Bubble\",\r\n },\r\n {\r\n title: \"Age\",\r\n id: \"age\",\r\n hasMenu: true,\r\n dataType: \"Number\",\r\n },\r\n {\r\n title: \"Image dd\",\r\n id: \"image\",\r\n key: \"image\",\r\n dataType: \"Image\",\r\n },\r\n {\r\n title: \"Email\",\r\n id: \"email\",\r\n hasMenu: true,\r\n },\r\n {\r\n title: \"Date\",\r\n id: \"date\",\r\n hasMenu: true,\r\n dataType: \"DatePicker\",\r\n },\r\n {\r\n title: \"Phone\",\r\n id: \"phone\",\r\n },\r\n {\r\n title: \"Address\",\r\n id: \"address\",\r\n },\r\n {\r\n title: \"about\",\r\n id: \"about\",\r\n },\r\n];\r\n","export const tableData = [\r\n {\r\n age: 33,\r\n name: \"Delaney Cortez\",\r\n company: \"IZZBY\",\r\n email: \"delaneycortez@izzby.com\",\r\n phone: \"+1 (844) 567-3740\",\r\n image: \"https://picsum.photos/id/74/900/900\",\r\n address: \"870 Hegeman Avenue, Crawfordsville, Kentucky, 2953\",\r\n about:\r\n \"Nostrud labore esse labore aliquip. Qui excepteur sint exercitation adipisicing deserunt ad veniam sunt ipsum nulla deserunt dolor est culpa. Eu deserunt nostrud ipsum mollit consectetur mollit et. Commodo mollit qui Lorem fugiat eiusmod dolore amet est officia aliqua. Est tempor veniam sit magna. Ullamco veniam eiusmod nostrud sit dolor. Est proident cupidatat proident ullamco irure commodo nisi fugiat adipisicing ullamco adipisicing ad officia.\\r\\n\",\r\n date: \"2023-01-10T09:02:53.870Z\",\r\n },\r\n {\r\n age: 24,\r\n name: \"Williamson Davenport\",\r\n company: \"ONTAGENE\",\r\n email: \"williamsondavenport@ontagene.com\",\r\n phone: \"+1 (844) 564-3345\",\r\n image: \"https://picsum.photos/id/40/900/900\",\r\n address: \"274 Forest Place, Vowinckel, Maine, 9510\",\r\n about:\r\n \"Quis ipsum ad deserunt cillum consequat do ex laboris sit eiusmod pariatur occaecat voluptate. Laborum ea sit duis mollit est sunt culpa ut et commodo consectetur veniam adipisicing amet. Ipsum mollit proident ea deserunt veniam Lorem duis aliquip dolor duis proident ut. Velit esse officia occaecat exercitation magna consequat ullamco ea nisi. Ad ea deserunt occaecat quis occaecat eiusmod ad do. Elit veniam quis aliquip qui nostrud laborum irure minim aute irure fugiat. Ullamco aliquip dolor est sit nulla consectetur.\\r\\n\",\r\n date: \"2023-01-10T09:02:53.870Z\",\r\n },\r\n {\r\n age: 30,\r\n name: \"Alexander Wong\",\r\n company: \"QUADEEBO\",\r\n email: \"alexanderwong@quadeebo.com\",\r\n phone: \"+1 (834) 497-2624\",\r\n image: \"https://picsum.photos/id/8/900/900\",\r\n address: \"420 Borinquen Pl, Kenvil, Vermont, 7377\",\r\n about:\r\n \"Dolor mollit elit est ex. Sit mollit laboris ad pariatur magna est amet veniam ad ad velit incididunt eu. Minim ipsum qui labore eiusmod magna veniam in magna pariatur Lorem.\\r\\n\",\r\n date: \"2023-01-10T09:02:53.870Z\",\r\n },\r\n {\r\n age: 24,\r\n name: \"Blanca Schultz\",\r\n company: \"CUJO\",\r\n email: \"blancaschultz@cujo.com\",\r\n phone: \"+1 (954) 412-2870\",\r\n image: \"https://picsum.photos/id/42/900/900\",\r\n address: \"144 Albemarle Terrace, Watchtower, Delaware, 2829\",\r\n about:\r\n \"Pariatur sunt dolore nostrud cillum cupidatat culpa. Ipsum laborum laboris reprehenderit Lorem culpa. Consequat duis do occaecat ipsum cupidatat sunt minim minim cillum commodo in qui culpa anim. Et ullamco nisi eiusmod laboris veniam laborum ullamco reprehenderit aliqua nulla labore. Elit excepteur sunt exercitation anim sint non ea.\\r\\n\",\r\n date: \"2023-01-10T09:02:53.870Z\",\r\n },\r\n {\r\n age: 34,\r\n name: \"Eunice Romero\",\r\n company: \"CENTREGY\",\r\n email: \"euniceromero@centregy.com\",\r\n phone: \"+1 (949) 568-3290\",\r\n image: \"https://picsum.photos/id/3/900/900\",\r\n address: \"698 Clermont Avenue, Harmon, Washington, 1094\",\r\n about:\r\n \"Nulla aute enim incididunt labore aute id officia fugiat tempor aliqua. Fugiat incididunt sint nisi eiusmod fugiat magna minim in. Officia eu enim magna magna pariatur deserunt esse amet veniam sint consequat est sit.\\r\\n\",\r\n date: \"2023-01-10T09:02:53.870Z\",\r\n },\r\n];\r\n","export const multilineData = [\r\n {\r\n id: 1,\r\n name: \"Customer\",\r\n role: \"Selling\",\r\n },\r\n {\r\n id: 2,\r\n name: \"Producer\",\r\n role: \"sdf\",\r\n },\r\n {\r\n id: 3,\r\n name: \"Director\",\r\n role: \"wer\",\r\n },\r\n];\r\n","export const tabsData = [\r\n {\r\n tab_order: 1,\r\n title: \"Tab One\",\r\n content: \"Tab one Content\",\r\n },\r\n {\r\n tab_order: 2,\r\n title: \"Tab Two\",\r\n content: \"Tab two Content\",\r\n },\r\n {\r\n tab_order: 3,\r\n title: \"Tab Three\",\r\n content: \"Tab three Content\",\r\n },\r\n];\r\n","export const userData = [\r\n {\r\n id: 1,\r\n name: \"Aman Gupta\",\r\n role: \"Accountant & Finance\",\r\n roleId: 2,\r\n },\r\n {\r\n id: 2,\r\n name: \"Deepak Sharma\",\r\n role: \"Sales\",\r\n roleId: 4,\r\n },\r\n {\r\n id: 3,\r\n name: \"Avhinav Dhingra\",\r\n role: \"Operation\",\r\n roleId: 3,\r\n },\r\n {\r\n id: 4,\r\n name: \"Rajiv Mehta\",\r\n role: \"Maintenance\",\r\n roleId: 1,\r\n },\r\n {\r\n id: 5,\r\n name: \"Rajiv Mehta\",\r\n role: \"Stakes\",\r\n roleId: 6,\r\n },\r\n {\r\n id: 6,\r\n name: \"Rajdeep Dutta\",\r\n role: \"Research & Development\",\r\n roleId: 5,\r\n },\r\n {\r\n id: 7,\r\n name: \"Sonia Verma\",\r\n role: \"Accountant & Finance\",\r\n roleId: 2,\r\n },\r\n {\r\n id: 8,\r\n name: \"Vikram Singh\",\r\n role: \"Sales\",\r\n roleId: 4,\r\n },\r\n {\r\n id: 9,\r\n name: \"Neha Patel\",\r\n role: \"Operation\",\r\n roleId: 3,\r\n },\r\n {\r\n id: 10,\r\n name: \"Ankit Kapoor\",\r\n role: \"Maintenance\",\r\n roleId: 1,\r\n },\r\n {\r\n id: 11,\r\n name: \"Kavita Shah\",\r\n role: \"Stakes\",\r\n roleId: 6,\r\n },\r\n {\r\n id: 12,\r\n name: \"Rohit Singh\",\r\n role: \"Research & Development\",\r\n roleId: 5,\r\n },\r\n {\r\n id: 13,\r\n name: \"Priya Agarwal\",\r\n role: \"Human Resources\",\r\n roleId: 7,\r\n },\r\n {\r\n id: 14,\r\n name: \"Amit Trivedi\",\r\n role: \"Marketing\",\r\n roleId: 8,\r\n },\r\n {\r\n id: 15,\r\n name: \"Sara Khan\",\r\n role: \"Customer Support\",\r\n roleId: 9,\r\n },\r\n {\r\n id: 16,\r\n name: \"Amit Gupta\",\r\n role: \"Accountant & Finance\",\r\n roleId: 2,\r\n },\r\n {\r\n id: 17,\r\n name: \"Neha Sharma\",\r\n role: \"Sales\",\r\n roleId: 4,\r\n },\r\n {\r\n id: 18,\r\n name: \"Rahul Verma\",\r\n role: \"Operation\",\r\n roleId: 3,\r\n },\r\n {\r\n id: 19,\r\n name: \"Meera Kapoor\",\r\n role: \"Maintenance\",\r\n roleId: 1,\r\n },\r\n {\r\n id: 20,\r\n name: \"Rajesh Khanna\",\r\n role: \"Stakes\",\r\n roleId: 6,\r\n },\r\n {\r\n id: 21,\r\n name: \"Sonia Dutta\",\r\n role: \"Research & Development\",\r\n roleId: 5,\r\n },\r\n {\r\n id: 22,\r\n name: \"Alok Gupta\",\r\n role: \"Human Resources\",\r\n roleId: 7,\r\n },\r\n {\r\n id: 23,\r\n name: \"Preeti Singh\",\r\n role: \"Marketing\",\r\n roleId: 8,\r\n },\r\n {\r\n id: 24,\r\n name: \"Anuj Kumar\",\r\n role: \"Customer Support\",\r\n roleId: 9,\r\n },\r\n {\r\n id: 25,\r\n name: \"Deepa Patel\",\r\n role: \"IT Support\",\r\n roleId: 10,\r\n },\r\n {\r\n id: 26,\r\n name: \"Vishal Kapoor\",\r\n role: \"Legal\",\r\n roleId: 11,\r\n },\r\n {\r\n id: 27,\r\n name: \"Asha Singh\",\r\n role: \"Quality Assurance\",\r\n roleId: 12,\r\n },\r\n {\r\n id: 28,\r\n name: \"Rajeev Sharma\",\r\n role: \"Logistics\",\r\n roleId: 13,\r\n },\r\n {\r\n id: 29,\r\n name: \"Kavita Trivedi\",\r\n role: \"Public Relations\",\r\n roleId: 14,\r\n },\r\n {\r\n id: 30,\r\n name: \"Alok Singh\",\r\n role: \"Training and Development\",\r\n roleId: 15,\r\n },\r\n {\r\n id: 31,\r\n name: \"Pooja Kapoor\",\r\n role: \"Accountant & Finance\",\r\n roleId: 2,\r\n },\r\n {\r\n id: 32,\r\n name: \"Rohit Verma\",\r\n role: \"Sales\",\r\n roleId: 4,\r\n },\r\n {\r\n id: 33,\r\n name: \"Sanjay Mehta\",\r\n role: \"Operation\",\r\n roleId: 3,\r\n },\r\n {\r\n id: 34,\r\n name: \"Nisha Khanna\",\r\n role: \"Maintenance\",\r\n roleId: 1,\r\n },\r\n {\r\n id: 35,\r\n name: \"Varun Dutta\",\r\n role: \"Stakes\",\r\n roleId: 6,\r\n },\r\n {\r\n id: 36,\r\n name: \"Sapna Gupta\",\r\n role: \"Research & Development\",\r\n roleId: 5,\r\n },\r\n {\r\n id: 37,\r\n name: \"Vikas Sharma\",\r\n role: \"Human Resources\",\r\n roleId: 7,\r\n },\r\n {\r\n id: 38,\r\n name: \"Ritu Verma\",\r\n role: \"Marketing\",\r\n roleId: 8,\r\n },\r\n {\r\n id: 39,\r\n name: \"Manish Singh\",\r\n role: \"Customer Support\",\r\n roleId: 9,\r\n },\r\n {\r\n id: 40,\r\n name: \"Neha Patel\",\r\n role: \"IT Support\",\r\n roleId: 10,\r\n },\r\n {\r\n id: 41,\r\n name: \"Anil Kapoor\",\r\n role: \"Legal\",\r\n roleId: 11,\r\n },\r\n {\r\n id: 42,\r\n name: \"Priya Dutta\",\r\n role: \"Quality Assurance\",\r\n roleId: 12,\r\n },\r\n {\r\n id: 43,\r\n name: \"Rahul Sharma\",\r\n role: \"Logistics\",\r\n roleId: 13,\r\n },\r\n {\r\n id: 44,\r\n name: \"Sneha Trivedi\",\r\n role: \"Public Relations\",\r\n roleId: 14,\r\n },\r\n {\r\n id: 45,\r\n name: \"Anita Singh\",\r\n role: \"Training and Development\",\r\n roleId: 15,\r\n },\r\n {\r\n id: 46,\r\n name: \"Amit Trivedi\",\r\n role: \"Accountant & Finance\",\r\n roleId: 2,\r\n },\r\n {\r\n id: 47,\r\n name: \"Priyanka Sharma\",\r\n role: \"Sales\",\r\n roleId: 4,\r\n },\r\n {\r\n id: 48,\r\n name: \"Rajat Verma\",\r\n role: \"Operation\",\r\n roleId: 3,\r\n },\r\n {\r\n id: 49,\r\n name: \"Anu Khanna\",\r\n role: \"Maintenance\",\r\n roleId: 1,\r\n },\r\n {\r\n id: 50,\r\n name: \"Sumit Dutta\",\r\n role: \"Stakes\",\r\n roleId: 6,\r\n },\r\n];\r\n","import { useEffect, useState } from \"react\";\r\n// import { useNavigate } from \"react-router-dom\";\r\nimport { Pathname } from \"../../../constants/pathnames/pathname\";\r\nimport { Box, Grid } from \"@mui/material\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport images from \"../../../assets/images\";\r\nimport DynamicInput from \"../../../components/form-control/form-builder/form-builder-element/text\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport Typography from \"../../../components/typography/typography\";\r\nimport Button from \"../../../components/button/button\";\r\n// import DynamicCheckBox from \"../../../components/form-control/form-builder/form-builder-element/checkbox\";\r\n// import { Eye, EyeOff } from \"../../../components/icons\";\r\n// import { LoginFormValues } from \"../../../contexts/AuthContext\";\r\n// import { useAuth } from \"../../../hooks/useAuth\";\r\nimport Toast from \"../../../components/toast/toast\";\r\nimport * as Yup from \"yup\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport { useAuth } from \"../../../hooks/useAuth\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport { getApiConfig } from \"@/utils\";\r\n\r\nexport const ForgotPassword = () => {\r\n const { forgotPassword } = useAuth();\r\n const LoginContainer = styled(Grid)(() => ({\r\n height: \"100vh\",\r\n }));\r\n const navigate = useNavigate();\r\n interface IToast {\r\n message: string;\r\n type: \"normal\" | \"alert\";\r\n }\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n\r\n const validationSchema = Yup.object({\r\n login: Yup.object({\r\n email: Yup.string()\r\n .required(\"Please enter email\")\r\n .email(\"Provided email is invalid\")\r\n }),\r\n });\r\n\r\n const { control, handleSubmit } = useForm<FormValeus>({\r\n resolver: yupResolver(validationSchema),\r\n mode: \"all\",\r\n });\r\n\r\n const LeftGrid = styled(Grid)(({ theme }) => ({\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n backgroundImage: `url(${images.login.LoginLeftBg})`,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n [theme.breakpoints.down(\"lg\")]: {\r\n \"& img\": {\r\n width: 350,\r\n height: 350,\r\n },\r\n },\r\n [theme.breakpoints.down(\"md\")]: {\r\n \"& img\": {\r\n width: 300,\r\n height: 300,\r\n },\r\n },\r\n }));\r\n\r\n const RightGrid = styled(Grid)(() => ({\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n padding: \"1rem\",\r\n }));\r\n \r\n const FlexBox = styled(Box)(() => ({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }));\r\n\r\n const onSubmit = async (values: FormValeus) => {\r\n await forgotPassword(values.login, (type, message) => {\r\n if (type) {\r\n setToast({ message: message, type: \"normal\" });\r\n setTimeout(() => {\r\n navigate(Pathname.LOGIN);\r\n }, 1500);\r\n } else {\r\n setToast({ message: message, type: \"alert\" });\r\n }\r\n });\r\n return values;\r\n };\r\n\r\n const handleBackToLogin = () => {\r\n navigate(Pathname.LOGIN);\r\n }\r\n\r\n useEffect(() => {});\r\n\r\n const appLogo = getApiConfig().appLogo || images.erp_logo\r\n\r\n return (\r\n <Box>\r\n <LoginContainer container>\r\n <LeftGrid item sm={6}>\r\n <img src={images.login.LoginLeftSiteImage} />\r\n </LeftGrid>\r\n <RightGrid item sm={6} xs={12}>\r\n <FlexBox\r\n display=\"flex\"\r\n flexDirection=\"column\"\r\n gap={4}\r\n sx={(theme) => ({\r\n minWidth: 400,\r\n [theme.breakpoints.down(\"md\")]: {\r\n minWidth: 300,\r\n },\r\n [theme.breakpoints.down(\"sm\")]: {\r\n minWidth: 300,\r\n },\r\n })}\r\n >\r\n <Box textAlign=\"center\">\r\n <img src={appLogo} width={160} height={55}/>\r\n </Box>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n <FlexBox gap={4}>\r\n <FlexBox gap={3}>\r\n <Box>\r\n <Typography\r\n align=\"center\"\r\n type=\"h1\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n Forgot Password\r\n </Typography>\r\n <Typography\r\n align=\"center\"\r\n type=\"h5\"\r\n weight=\"normal\"\r\n color=\"theme.secondary81000\"\r\n >\r\n Enter your email to reset password\r\n </Typography>\r\n </Box>\r\n <FlexBox gap={2}>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Email\"\r\n name=\"email\"\r\n placeholder=\"Enter email\"\r\n fieldArrayName=\"login\"\r\n />\r\n </Box>\r\n </FlexBox>\r\n </FlexBox>\r\n <FlexBox gap={2}>\r\n <Button type=\"submit\" size=\"large\" variant=\"contained\">\r\n Reset Password\r\n </Button>\r\n <Button\r\n variant=\"text\"\r\n sx={(theme) => ({\r\n color: `${theme.palette.theme?.primary[\"700\"]} !important`,\r\n })}\r\n onClick = {handleBackToLogin}\r\n >\r\n Back to login\r\n </Button>\r\n </FlexBox>\r\n </FlexBox>\r\n </form>\r\n </FlexBox>\r\n </RightGrid>\r\n </LoginContainer>\r\n <Toast\r\n open={Boolean(toast)}\r\n message={toast?.message}\r\n type={toast?.type}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\r\n autoHideDuration={3000}\r\n />\r\n </Box>\r\n )\r\n}","import \"./landing.scss\";\r\n// import MetaComponent from '../../../utils/metaComponent';\r\n\r\nexport function Landing() {\r\n return (\r\n <div className=\"Landing\">\r\n {/* <MetaComponent\r\n\t\t\t\ttitle=\"Hi, This is dummy page title\"\r\n\t\t\t\tdescription=\"This is the dummy page description\"\r\n\t\t\t\tkeywords=\"dummy, keywords, dummy keywords, frontend template, frontend template by antino\"\r\n\t\t\t\tlocation={window.location}\r\n\t\t\t\timage=\"og_image.png\"\r\n\t\t\t/> */}\r\n <div className=\"Landing--Home\" id=\"home\">\r\n <div className=\"Landing--HomeAnimation\">\r\n <video\r\n className=\"Landing--HomeAnimationVideo\"\r\n autoPlay={true}\r\n muted\r\n loop={true}\r\n playsInline\r\n >\r\n <source\r\n src=\"https://ak.picdn.net/shutterstock/videos/1063309405/preview/stock-footage-modern-office-portrait-of-beautiful-authentic-specialist-with-short-pink-hair-standing-holding.webm\"\r\n type=\"video/mp4\"\r\n />\r\n </video>\r\n </div>\r\n <div className=\"Landing--HomeContent\">\r\n <div className=\"Landing--HomeContentTop\">\r\n <h1 className=\"Landing--SubTitle\">\r\n Introducing Dummy\r\n <span style={{ fontWeight: \"700\" }}> Land, </span>\r\n </h1>\r\n <h1 className=\"Landing--Para\">\r\n This is the hero section.Lorem ipsum dolor sit amet, consectetur\r\n adipisicing elit.Dicta fugiat perspiciatis temporibus ut impedit\r\n expedita maiores officiis porro ? At commodi suscipit atque\r\n eligendi cumque ? Impedit magnam eligendi fugiat.Non, quam.\r\n </h1>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Landing;\r\n","import { useEffect } from \"react\";\r\n// // import { useNavigate } from \"react-router-dom\";\r\nimport { Pathname } from \"../../../constants/pathnames/pathname\";\r\nimport { Box } from \"@mui/material\";\r\nimport { useSearchParams } from \"react-router-dom\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport { useAuth } from \"../../../hooks/useAuth\";\r\n\r\n\r\nexport const ResetPassword = () => {\r\n const { resetPassword } = useAuth();\r\n const [searchParams] = useSearchParams();\r\n const navigate = useNavigate();\r\n\r\n useEffect(() => {\r\n const tokenParam = searchParams.get(\"token\");\r\n\r\n if (!tokenParam) {\r\n navigate(Pathname.LOGIN);\r\n } else {\r\n resetPassword({ token: tokenParam }, (response) => {\r\n console.log(\"response \",response)\r\n if (!response) {\r\n navigate(Pathname.LOGIN);\r\n } else {\r\n if (response && response?.data && response?.data?.isValid) {\r\n navigate(Pathname.CHANGE_PASSWORD, { state: { token: tokenParam } });\r\n }\r\n }\r\n });\r\n }\r\n }, [searchParams, resetPassword, navigate]);\r\n\r\n return <Box>Resetting password, please wait...</Box>;\r\n};","import { MRT_ColumnDef, MRT_RowData } from \"material-react-table\";\r\n\r\nexport interface IProperty {\r\n field_type: string;\r\n label: string;\r\n placeholder: string;\r\n default_value?: string;\r\n float_step?: string;\r\n min_length?: number;\r\n max_length?: number;\r\n is_multiline?: boolean;\r\n is_required?: boolean;\r\n is_negative?: boolean;\r\n is_unique?: boolean;\r\n is_checked?: boolean;\r\n // options?: Array<{ text: string; value: string }>;\r\n // is_multiselect?: boolean,\r\n id?: string;\r\n is_future_dates_allowed?: boolean;\r\n is_past_dates_allowed?: boolean;\r\n option?: string;\r\n max_size?: number;\r\n section_id?: string;\r\n section_name?: string;\r\n title_position?: \"start\" | \"end\"\r\n title?:string,\r\n table_columns?:MRT_ColumnDef<MRT_RowData>[]\r\n table?:string\r\n module?:string\r\n field?:string\r\n is_country_code_separate?: boolean;\r\n country_code_field_name?: string;\r\n}\r\n\r\ninterface IMultiOption {\r\n value: string;\r\n label: string;\r\n is_checked: boolean;\r\n}\r\n\r\nexport interface IMultiOptionsProperty extends IProperty {\r\n options: IMultiOption[];\r\n display?: \"row\" | \"column\";\r\n}\r\n\r\nexport interface ISelectProperty {\r\n field_type: string;\r\n label: string;\r\n placeholder: string;\r\n default_value: string;\r\n is_required?: boolean;\r\n is_unique?: boolean;\r\n options: ISelectOption[];\r\n is_multiselect?: boolean;\r\n id?: string;\r\n section_id?: string;\r\n section_name?: string;\r\n}\r\n\r\nexport interface ISwitcherForms {\r\n value?: string;\r\n name: string;\r\n id: string | number | null;\r\n}\r\n\r\nexport interface ISectionProperty {\r\n field_type: string;\r\n label: string;\r\n is_accordion: boolean;\r\n id?: string;\r\n section_order?: string;\r\n section_id?: string;\r\n section_name?: string;\r\n section_type: \"Default\" | \"Form switcher section\";\r\n form_switcher_label?: string;\r\n form_switcher_name?: string;\r\n switcher_forms?: ISwitcherForms[];\r\n members: IProperty[] | ISelectProperty[];\r\n}\r\n\r\n\r\ninterface ISelectOption {\r\n text: string;\r\n value: string;\r\n}\r\n\r\nconst text: IProperty = {\r\n field_type: \"text\",\r\n label: \"label\",\r\n placeholder: \"Enter text\",\r\n default_value: \"\",\r\n min_length: 2,\r\n max_length: 30,\r\n is_multiline: false,\r\n is_required: true,\r\n is_unique: false,\r\n};\r\n\r\nconst number: IProperty = {\r\n field_type: \"number\",\r\n label: \"label\",\r\n placeholder: \"Enter number\",\r\n default_value: \"\",\r\n float_step: \"0.001\", // \"0.001\",\r\n min_length: 0,\r\n max_length: 1000,\r\n is_negative: false,\r\n is_required: true,\r\n is_unique: false,\r\n};\r\n\r\nconst email: IProperty = {\r\n field_type: \"email\",\r\n label: \"label\",\r\n placeholder: \"Enter email\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n};\r\n\r\nconst phone: IProperty = {\r\n field_type: \"phone\",\r\n label: \"label\",\r\n placeholder: \"Enter phone\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n};\r\n\r\nconst select: ISelectProperty = {\r\n field_type: \"select\",\r\n label: \"Select\",\r\n placeholder: \"Choose option\",\r\n default_value: \"\",\r\n options: [],\r\n is_multiselect: false,\r\n is_required: true,\r\n is_unique: false,\r\n};\r\n\r\nconst date: IProperty = {\r\n field_type: \"date\",\r\n label: \"label\",\r\n placeholder: \"Select Date\",\r\n default_value: \"\",\r\n is_future_dates_allowed: false,\r\n is_past_dates_allowed: false,\r\n is_required: false,\r\n is_unique: false,\r\n};\r\n\r\nconst time: IProperty = {\r\n field_type: \"time\",\r\n label: \"label\",\r\n placeholder: \"Select Time\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n option: \"12hr\",\r\n};\r\n\r\nconst url: IProperty = {\r\n field_type: \"url\",\r\n label: \"label\",\r\n placeholder: \"Enter URL\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n};\r\n\r\nconst currency: IProperty = {\r\n field_type: \"currency\",\r\n label: \"label\",\r\n placeholder: \"Enter Currency\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n option: \"inr\",\r\n};\r\n\r\nconst file: IProperty = {\r\n field_type: \"file\",\r\n label: \"label\",\r\n placeholder: \"Upload File or Media\",\r\n is_required: false,\r\n is_unique: false,\r\n max_size: 20,\r\n default_value: \"\",\r\n};\r\n\r\nconst image: IProperty = {\r\n field_type: \"image\",\r\n label: \"label\",\r\n placeholder: \"Upload Image\",\r\n is_required: false,\r\n is_unique: false,\r\n max_size: 20,\r\n default_value: \"\",\r\n};\r\n\r\nconst geoLocation: IProperty = {\r\n field_type: \"geoLocation\",\r\n label: \"label\",\r\n placeholder: \"Enter geo location\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n};\r\n\r\nconst section: ISectionProperty = {\r\n field_type: \"section\",\r\n label: \"section\",\r\n section_type: \"Default\",\r\n form_switcher_label: \"Form section\",\r\n form_switcher_name: \"\",\r\n switcher_forms: [{\r\n value: \"\",\r\n name: \"Form 1\",\r\n id: null,\r\n }],\r\n is_accordion: false,\r\n members: [],\r\n};\r\n\r\nconst info: IProperty = {\r\n field_type: \"info\",\r\n label: \"label\",\r\n placeholder: \"Add Label Text\",\r\n default_value: \"\",\r\n};\r\n\r\nconst relation: IProperty = {\r\n field_type: \"relation\",\r\n label: \"label\",\r\n placeholder: \"Add Label Text\",\r\n is_required: false,\r\n is_unique: false,\r\n module: \"\",\r\n field: \"\",\r\n default_value: \"\",\r\n};\r\n\r\nconst checkbox: IProperty = {\r\n field_type: \"checkbox\",\r\n label: \"label\",\r\n placeholder: \"Add Label Text\",\r\n is_required: false,\r\n is_checked: false,\r\n title_position:'end',\r\n title:\"Checkbox\"\r\n};\r\n\r\nconst toggleButton: IProperty = {\r\n field_type: \"toggleButton\",\r\n label: \"label\",\r\n placeholder: \"Add Label Text\",\r\n is_required: false,\r\n is_checked: false,\r\n title_position:'end',\r\n title:\"Toggle\"\r\n};\r\n\r\nconst table: IProperty = {\r\n field_type: \"table\",\r\n label: \"label\",\r\n placeholder: \"Add Label Text\",\r\n is_required: false,\r\n table_columns: [],\r\n table: \"custom\",\r\n};\r\nconst radioButton: IMultiOptionsProperty = {\r\n field_type: \"radioButton\",\r\n placeholder: \"\",\r\n label: \"label\",\r\n title: \"\",\r\n is_required: false,\r\n title_position:'end',\r\n options: [],\r\n display: \"row\",\r\n default_value: \"\",\r\n};\r\nconst tagsInput: IProperty = {\r\n field_type: \"tagsInput\",\r\n label: \"label\",\r\n placeholder: \"Enter tagsInput\",\r\n default_value: \"\",\r\n min_length: 2,\r\n max_length: 30,\r\n is_multiline: false,\r\n is_required: true,\r\n is_unique: false,\r\n};\r\n\r\nexport const element = {\r\n text,\r\n number,\r\n email,\r\n phone,\r\n select,\r\n date,\r\n time,\r\n url,\r\n currency,\r\n file,\r\n geoLocation,\r\n image,\r\n section,\r\n info,\r\n relation,\r\n checkbox,\r\n toggleButton,\r\n radioButton,\r\n table,\r\n tagsInput\r\n};\r\n","// React imports\r\nimport { useEffect, useState } from \"react\";\r\n\r\n// Material UI imports\r\nimport { MenuItem, SelectProps, Stack } from \"@mui/material\";\r\n\r\n// ERP Common imports\r\nimport {\r\n ArrowCircleDown,\r\n Calendar,\r\n CheckboxSquare,\r\n Clock,\r\n DollarCircle,\r\n Email,\r\n Grid,\r\n Hashtag,\r\n Image,\r\n InfoCircle,\r\n Link,\r\n LinkHorizontal,\r\n Location,\r\n PaperClip,\r\n Paragraph,\r\n Phone,\r\n RadioButton,\r\n ToggleSwitch,\r\n} from \"@/components/icons\";\r\nimport Select from \"@/components/select/select\";\r\nimport Typography from \"@/components/typography/typography\";\r\n\r\ninterface IField {\r\n label: string;\r\n value: string;\r\n icon: typeof Paragraph | string;\r\n}\r\n\r\nconst fields: IField[] = [\r\n { label: \"Text\", value: \"text\", icon: Paragraph },\r\n { label: \"Number\", value: \"number\", icon: Hashtag },\r\n { label: \"Select\", value: \"select\", icon: ArrowCircleDown },\r\n { label: \"Date\", value: \"date\", icon: Calendar },\r\n { label: \"Files & Media\", value: \"file\", icon: PaperClip },\r\n { label: \"URL\", value: \"url\", icon: Link },\r\n { label: \"Email\", value: \"email\", icon: Email },\r\n { label: \"Phone\", value: \"phone\", icon: Phone },\r\n { label: \"Currency\", value: \"currency\", icon: DollarCircle },\r\n { label: \"Time\", value: \"time\", icon: Clock },\r\n { label: \"Table\", value: \"table\", icon: Grid },\r\n { label: \"Geolocation\", value: \"geoLocation\", icon: Location },\r\n { label: \"Check Box\", value: \"checkbox\", icon: CheckboxSquare },\r\n { label: \"Image Upload\", value: \"image\", icon: Image },\r\n { label: \"Relation Field\", value: \"relation\", icon: LinkHorizontal },\r\n { label: \"Info Card\", value: \"info\", icon: InfoCircle },\r\n { label: \"Toggle Button\", value: \"toggleButton\", icon: ToggleSwitch },\r\n { label: \"Radio Button\", value: \"radioButton\", icon: RadioButton },\r\n { label: \"tagsInput\", value: \"tagsInput\", icon: Paragraph },\r\n];\r\n\r\nconst FieldSelect: React.FC<SelectProps> = (props) => {\r\n const [selectFields, setSelectFields] = useState<IField[]>(fields);\r\n const [search, setSearch] = useState<string>(\"\");\r\n\r\n const handleSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n setSearch(event.target.value);\r\n };\r\n\r\n const handleSearchFields = (searchVal: string) => {\r\n if (searchVal) {\r\n setSelectFields([\r\n ...fields.filter((field) => field.value.includes(searchVal)),\r\n ]);\r\n } else {\r\n setSelectFields(fields);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n handleSearchFields(search);\r\n }, [search]);\r\n\r\n return (\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Field\"\r\n size=\"small\"\r\n labelName=\"Field Type\"\r\n renderValue={(value: string) =>\r\n fields.find((field) => field.value === value)?.label\r\n }\r\n handleSearch={() => handleSearch}\r\n searchPlaceholder=\"Search Attributes\"\r\n searchValue={search}\r\n {...props}\r\n >\r\n {selectFields.map((field) => (\r\n <MenuItem value={field.value} onKeyDown={(e) => e.stopPropagation()}>\r\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\r\n {field.icon && <field.icon fontSize=\"small\" />}\r\n <Typography type=\"s3\" color=\"theme.secondary.1000\">\r\n {field.label}\r\n </Typography>\r\n </Stack>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n );\r\n};\r\n\r\nexport default FieldSelect;\r\n","// React imports\r\nimport { useCallback, useEffect, useState, useMemo, useRef } from \"react\";\r\n\r\n// Material UI imports\r\nimport {\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n IconButton,\r\n MenuItem,\r\n Box,\r\n FormControlLabel,\r\n FormControl,\r\n Slider,\r\n} from \"@mui/material\";\r\nimport { Add, Close } from \"@mui/icons-material\";\r\n\r\n// ERP Common imports\r\nimport Button from \"@/components/button/button\";\r\nimport Modal from \"@/components/modal/modal\";\r\nimport Typography from \"@/components/typography/typography\";\r\nimport TextField from \"@/components/text-field/text-field\";\r\nimport Select from \"@/components/select/select\";\r\nimport Checkbox from \"@/components/checkbox/checkbox\";\r\nimport formatText from \"@/utils/format-text\";\r\n\r\n// Local imports\r\nimport FieldSelect from \"./field-select\";\r\nimport { IElementJson } from \"../custom-form\";\r\nimport { ApiFormFields } from \"../../Redux/state\";\r\nimport \"../custom-form.scss\";\r\n\r\ninterface Option {\r\n label: string;\r\n value: string;\r\n}\r\n\r\ninterface ITextEditFormProps {\r\n handleWidthChange: (value?: number) => void;\r\n handleColumnSelect: (value?: number) => void;\r\n handlePropertyValueUpdate: (\r\n event?: React.ChangeEvent<HTMLInputElement>,\r\n numberValue?: number,\r\n value?: any,\r\n fieldType?: string,\r\n ) => void;\r\n element: IElementJson | null;\r\n fields: ApiFormFields | null;\r\n}\r\n\r\n// Constants moved outside to prevent re-creation\r\nconst COLUMN_PER_ROW_OPTIONS = [1, 2, 3, 4, 5, 6] as const;\r\nconst SELECT_OPTIONS = [\r\n { text: \"12 Hour\", value: \"12hr\" },\r\n { text: \"24 Hour\", value: \"24hr\" },\r\n] as const;\r\nconst CURRENCY_OPTIONS = [\r\n { text: \"INR (India)\", value: \"inr\" },\r\n { text: \"USD (US)\", value: \"usd\" },\r\n] as const;\r\n\r\nconst FIELDS_WITHOUT_PLACEHOLDER = new Set([\r\n \"time\", \"file\", \"geoLocation\", \"image\", \"info\", \"relation\"\r\n]);\r\nconst FIELDS_WITH_MIN_MAX = new Set([\"text\", \"number\"]);\r\n\r\n// Memoized components to prevent unnecessary re-renders\r\nconst MemoizedMenuItem = ({ option, index, prefix }: { option: any; index: number; prefix: string }) => (\r\n <MenuItem key={`${prefix}-${index}`} value={option.value}>\r\n {option.text || option.label}\r\n </MenuItem>\r\n);\r\n\r\nconst MemoizedRelationMenuItem = ({ option, index, prefix }: { option: Option; index: number; prefix: string }) => (\r\n <MenuItem key={`${prefix}-${index}`} value={option.value}>\r\n <Typography type=\"s3\" color=\"theme.secondary.1000\">\r\n {option.label}\r\n </Typography>\r\n </MenuItem>\r\n);\r\n\r\nexport function TextEditForm(props: ITextEditFormProps) {\r\n const { \r\n handlePropertyValueUpdate, \r\n handleColumnSelect, \r\n handleWidthChange, \r\n fields, \r\n element \r\n } = props;\r\n\r\n // State management - optimized to prevent unnecessary re-renders\r\n const [elementJSON, setElementJSON] = useState<IElementJson | null>(element);\r\n const [openModal, setOpenModal] = useState(false);\r\n const [relationFields, setRelationFields] = useState<Option[]>([]);\r\n const [functionValue, setFunctionValue] = useState(\"\");\r\n \r\n // Use refs to track previous values and prevent unnecessary updates\r\n const prevElementRef = useRef<IElementJson | null>(element);\r\n const prevFieldsRef = useRef<ApiFormFields | null>(fields);\r\n\r\n // Memoized relation modules with deep comparison prevention\r\n const relationModulesOptions = useMemo(() => {\r\n if (!fields || fields === prevFieldsRef.current) {\r\n if (prevFieldsRef.current && fields) return prevFieldsRef.current;\r\n }\r\n \r\n prevFieldsRef.current = fields;\r\n \r\n if (!fields) return [];\r\n return Object.keys(fields).map((key) => ({\r\n label: formatText(key),\r\n value: key,\r\n }));\r\n }, [fields]);\r\n\r\n // Optimized relation fields setter with memoization\r\n const setRelationFieldsOptions = useCallback(\r\n (moduleValue?: string) => {\r\n if (!fields || !moduleValue) {\r\n setRelationFields(prev => prev.length > 0 ? [] : prev);\r\n return;\r\n }\r\n\r\n const fieldsArr = fields[moduleValue];\r\n if (fieldsArr?.length) {\r\n const options = fieldsArr.map((field) => ({\r\n label: field.field,\r\n value: field.field,\r\n }));\r\n \r\n // Only update if options actually changed\r\n setRelationFields(prev => {\r\n if (prev.length !== options.length) return options;\r\n const isDifferent = prev.some((item, idx) => \r\n item.value !== options[idx]?.value || item.label !== options[idx]?.label\r\n );\r\n return isDifferent ? options : prev;\r\n });\r\n } else {\r\n setRelationFields(prev => prev.length > 0 ? [] : prev);\r\n }\r\n },\r\n [fields]\r\n );\r\n\r\n // Memoized event handlers to prevent child re-renders\r\n const handleSave = useCallback((value: string) => {\r\n if (!elementJSON) return;\r\n \r\n // Only update if value actually changed\r\n if (elementJSON.default_value !== value) {\r\n const updatedElement = { ...elementJSON, default_value: value };\r\n setElementJSON(updatedElement);\r\n handlePropertyValueUpdate(null, null, value);\r\n }\r\n \r\n if (value) {\r\n setFunctionValue(\"\");\r\n setOpenModal(false);\r\n }\r\n }, [elementJSON, handlePropertyValueUpdate]);\r\n\r\n const handleFieldUpdate = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!elementJSON) return;\r\n \r\n const fieldType = e.target.value;\r\n if (elementJSON.field_type !== fieldType) {\r\n const updatedElement = { ...elementJSON, field_type: fieldType };\r\n setElementJSON(updatedElement);\r\n handlePropertyValueUpdate(null, null, null, e.target.value);\r\n }\r\n }, [elementJSON, handlePropertyValueUpdate]);\r\n\r\n const handleSelectUpdate = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!elementJSON) return;\r\n \r\n const option = e.target.value;\r\n if (elementJSON.option !== option) {\r\n const updatedElement = { ...elementJSON, option };\r\n setElementJSON(updatedElement);\r\n handlePropertyValueUpdate(null, null, option);\r\n }\r\n }, [elementJSON, handlePropertyValueUpdate]);\r\n\r\n const handleModuleSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const moduleValue = e.target.value;\r\n if (elementJSON?.module !== moduleValue) {\r\n setRelationFieldsOptions(moduleValue);\r\n handlePropertyValueUpdate(e);\r\n }\r\n }, [elementJSON?.module, setRelationFieldsOptions, handlePropertyValueUpdate]);\r\n\r\n const handleWidthSliderChange = useCallback((_: Event, value: number | number[]) => {\r\n if (!elementJSON) return;\r\n \r\n const widthValue = Array.isArray(value) ? value[0] : value;\r\n if (elementJSON.custom_width !== widthValue) {\r\n const updatedElement = { ...elementJSON, custom_width: widthValue };\r\n setElementJSON(updatedElement);\r\n handleWidthChange(widthValue);\r\n }\r\n }, [elementJSON, handleWidthChange]);\r\n\r\n const handleFullWidthChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!elementJSON) return;\r\n \r\n const isFullWidth = e.target.checked;\r\n if (elementJSON.is_fullwidth !== isFullWidth) {\r\n const updatedElement = { ...elementJSON, is_fullwidth: isFullWidth };\r\n setElementJSON(updatedElement);\r\n handlePropertyValueUpdate(e);\r\n }\r\n }, [elementJSON, handlePropertyValueUpdate]);\r\n\r\n const handleColumnSelectChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const columnValue = Number(e.target.value);\r\n handleColumnSelect(columnValue);\r\n }, [handleColumnSelect]);\r\n\r\n // Memoized helper functions\r\n const getDefaultValue = useCallback((elementJSON: IElementJson) => {\r\n if ([\"number\", \"currency\", \"geoLocation\"].includes(elementJSON.field_type)) {\r\n return elementJSON.default_value?.toString().replace(/[^0-9]/g, \"\") || \"\";\r\n }\r\n return elementJSON.default_value || \"\";\r\n }, []);\r\n\r\n const getMinMaxLabels = useCallback((fieldType: string) => {\r\n return fieldType === \"text\" \r\n ? { min: \"Min character count (with spaces)\", max: \"Max character count (with spaces)\" }\r\n : { min: \"Min number\", max: \"Max number\" };\r\n }, []);\r\n\r\n // Modal handlers\r\n const handleOpenModal = useCallback(() => setOpenModal(true), []);\r\n const handleCloseModal = useCallback(() => {\r\n setOpenModal(false);\r\n setFunctionValue(\"\");\r\n }, []);\r\n\r\n const handleFunctionValueChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n setFunctionValue(e.target.value);\r\n }, []);\r\n\r\n // Optimized effects with proper dependency arrays\r\n useEffect(() => {\r\n // Only update if element actually changed\r\n if (element !== prevElementRef.current) {\r\n setElementJSON(element);\r\n prevElementRef.current = element;\r\n \r\n if (element?.module) {\r\n setRelationFieldsOptions(element.module);\r\n }\r\n }\r\n }, [element, setRelationFieldsOptions]);\r\n\r\n // Memoized render sections to prevent unnecessary re-computation\r\n const currencySelectSection = useMemo(() => {\r\n if (elementJSON?.field_type !== \"currency\") return null;\r\n \r\n return (\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Currency\"\r\n size=\"small\"\r\n onChange={handleSelectUpdate}\r\n defaultValue={elementJSON.option}\r\n label=\"Currency\"\r\n name=\"option\"\r\n variant=\"outlined\"\r\n >\r\n {CURRENCY_OPTIONS.map((option, index) => (\r\n <MemoizedMenuItem \r\n key={`currency-${index}`}\r\n option={option} \r\n index={index} \r\n prefix=\"currency\" \r\n />\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n );\r\n }, [elementJSON?.field_type, elementJSON?.option, handleSelectUpdate]);\r\n\r\n const timeSelectSection = useMemo(() => {\r\n if (elementJSON?.field_type !== \"time\") return null;\r\n \r\n return (\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Time Format\"\r\n size=\"small\"\r\n onChange={handleSelectUpdate}\r\n defaultValue={elementJSON.option}\r\n label=\"Time Format\"\r\n name=\"option\"\r\n variant=\"outlined\"\r\n >\r\n {SELECT_OPTIONS.map((option, index) => (\r\n <MemoizedMenuItem \r\n key={`time-${index}`}\r\n option={option} \r\n index={index} \r\n prefix=\"time\" \r\n />\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n );\r\n }, [elementJSON?.field_type, elementJSON?.option, handleSelectUpdate]);\r\n\r\n const relationSelectSection = useMemo(() => {\r\n if (elementJSON?.field_type !== \"relation\") return null;\r\n \r\n return (\r\n <>\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder={\r\n relationModulesOptions.length\r\n ? \"Select Relation Module\"\r\n : \"No data available\"\r\n }\r\n size=\"small\"\r\n onChange={handleModuleSelect}\r\n value={elementJSON.module || \"\"}\r\n label=\"Relation Module\"\r\n name=\"module\"\r\n >\r\n {relationModulesOptions.length ? (\r\n relationModulesOptions.map((option, index) => (\r\n <MemoizedRelationMenuItem \r\n key={`module-${index}`}\r\n option={option} \r\n index={index} \r\n prefix=\"module\" \r\n />\r\n ))\r\n ) : (\r\n <MenuItem disabled>\r\n <Typography type=\"s3\" color=\"theme.secondary.1000\">\r\n <em>No data available</em>\r\n </Typography>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder={\r\n !elementJSON.module\r\n ? \"Select Module First\"\r\n : relationFields.length\r\n ? \"Select Relation Field\"\r\n : \"No data available\"\r\n }\r\n size=\"small\"\r\n onChange={handlePropertyValueUpdate}\r\n value={elementJSON.field || \"\"}\r\n label=\"Relation Field\"\r\n disabled={!elementJSON.module}\r\n name=\"field\"\r\n >\r\n {relationFields.length ? (\r\n relationFields.map((option, index) => (\r\n <MemoizedRelationMenuItem \r\n key={`field-${index}`}\r\n option={option} \r\n index={index} \r\n prefix=\"field\" \r\n />\r\n ))\r\n ) : (\r\n <MenuItem disabled>\r\n <Typography type=\"s3\" color=\"theme.secondary.1000\">\r\n <em>No data available</em>\r\n </Typography>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n </>\r\n );\r\n }, [\r\n elementJSON?.field_type, \r\n elementJSON?.module, \r\n elementJSON?.field,\r\n relationModulesOptions, \r\n relationFields, \r\n handleModuleSelect, \r\n handlePropertyValueUpdate\r\n ]);\r\n\r\n // Early return if no element\r\n if (!elementJSON) {\r\n return null;\r\n }\r\n\r\n const { field_type } = elementJSON;\r\n const minMaxLabels = getMinMaxLabels(field_type);\r\n\r\n return (\r\n <Box className=\"formSection--FieldContainer\">\r\n {/* Field Type Selection */}\r\n <Box>\r\n <FieldSelect\r\n variant=\"outlined\"\r\n onChange={handleFieldUpdate}\r\n defaultValue={field_type}\r\n label=\"Field Type\"\r\n disabled={elementJSON.type === \"system\" || !elementJSON.is_new}\r\n />\r\n </Box>\r\n\r\n {/* Label Field */}\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Label\"\r\n is_required\r\n name=\"label\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.label}\r\n />\r\n </Box>\r\n\r\n {/* File/Image Max Size */}\r\n {(field_type === \"file\" || field_type === \"image\") && (\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Max File Size (in MB)\"\r\n name=\"max_size\"\r\n type=\"number\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.max_size}\r\n />\r\n </Box>\r\n )}\r\n\r\n {/* Currency Selection - Memoized */}\r\n {currencySelectSection}\r\n\r\n {/* Placeholder and Default Value */}\r\n {!FIELDS_WITHOUT_PLACEHOLDER.has(field_type) && (\r\n <>\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Placeholder\"\r\n name=\"placeholder\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.placeholder}\r\n />\r\n </Box>\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Default Value\"\r\n placeholder=\"Default Value\"\r\n name=\"default_value\"\r\n type={field_type === \"phone\" ? \"tel\" : field_type === \"number\" ? \"number\" : \"text\"}\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={getDefaultValue(elementJSON)}\r\n />\r\n </Box>\r\n </>\r\n )}\r\n\r\n {/* Time Format Selection - Memoized */}\r\n {timeSelectSection}\r\n\r\n {/* Relation Module and Field Selection - Memoized */}\r\n {relationSelectSection}\r\n\r\n {/* Min/Max Length for Text and Number Fields */}\r\n {FIELDS_WITH_MIN_MAX.has(field_type) && (\r\n <>\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label={minMaxLabels.min}\r\n name=\"min_length\"\r\n type=\"number\"\r\n onChange={(e) => handlePropertyValueUpdate(e, Number(e.target.value))}\r\n defaultValue={elementJSON.min_length || elementJSON.min || 1}\r\n />\r\n </Box>\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label={minMaxLabels.max}\r\n name=\"max_length\"\r\n type=\"number\"\r\n onChange={(e) => handlePropertyValueUpdate(e, Number(e.target.value))}\r\n defaultValue={\r\n elementJSON.max_length || \r\n elementJSON.max || \r\n (field_type === 'number' ? 10000 : 255)\r\n }\r\n />\r\n </Box>\r\n </>\r\n )}\r\n\r\n {/* Column Per Row Selection */}\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Column Per Row\"\r\n size=\"small\"\r\n onChange={handleColumnSelectChange}\r\n value={elementJSON.columns_per_row || 1}\r\n label=\"Select Column Per Row\"\r\n name=\"columns_per_row\"\r\n variant=\"outlined\"\r\n >\r\n {COLUMN_PER_ROW_OPTIONS.map((option, index) => (\r\n <MenuItem key={`column-${index}`} value={option}>\r\n {option}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n {/* Width Adjustment Slider */}\r\n <Box>\r\n <Typography sx={{ color: 'black', mb: 1 }}>\r\n Adjust Width:\r\n </Typography>\r\n <Slider\r\n value={elementJSON.custom_width || 12}\r\n name=\"custom_width\"\r\n min={1}\r\n max={12}\r\n step={1}\r\n onChange={handleWidthSliderChange}\r\n aria-labelledby=\"width-slider\"\r\n sx={{ color: \"#4AC08C\" }}\r\n disabled={elementJSON.is_fullwidth}\r\n marks\r\n valueLabelDisplay=\"auto\"\r\n />\r\n </Box>\r\n\r\n {/* Number Field Specific Options */}\r\n {field_type === \"number\" && (\r\n <>\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Float Step\"\r\n name=\"float_step\"\r\n type=\"number\"\r\n step=\"0.01\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.float_step}\r\n />\r\n </Box>\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_negative\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_negative || false}\r\n label=\"Allow Negative Numbers\"\r\n />\r\n </Box>\r\n </>\r\n )}\r\n\r\n {/* Date Field Specific Options */}\r\n {field_type === \"date\" && (\r\n <>\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_future_dates_allowed\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_future_dates_allowed || false}\r\n label=\"Allow Future Dates\"\r\n />\r\n </Box>\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_past_dates_allowed\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_past_dates_allowed || false}\r\n label=\"Allow Past Dates\"\r\n />\r\n </Box>\r\n </>\r\n )}\r\n\r\n {/* Required Field Checkbox */}\r\n {field_type !== \"info\" && (\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_required\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_required || false}\r\n label=\"This field is required\"\r\n />\r\n </Box>\r\n )}\r\n\r\n {/* Email Unique Checkbox */}\r\n {field_type === \"email\" && (\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_unique\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_unique || false}\r\n label=\"Is Unique\"\r\n />\r\n </Box>\r\n )}\r\n\r\n {/* Text Multiline Checkbox */}\r\n {field_type === \"text\" && (\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_multiline\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_multiline || false}\r\n label=\"Is Multiline\"\r\n />\r\n </Box>\r\n )}\r\n\r\n {/* Full Width Checkbox */}\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_fullwidth\"\r\n control={<Checkbox />}\r\n onChange={handleFullWidthChange}\r\n checked={elementJSON.is_fullwidth || false}\r\n label=\"Full Width\"\r\n />\r\n </Box>\r\n\r\n {/* Info Field Function Button */}\r\n {field_type === \"info\" && (\r\n <Box>\r\n <Button\r\n variant=\"outlined\"\r\n startIcon={<Add />}\r\n onClick={handleOpenModal}\r\n className=\"formSection--PreviewButton\"\r\n >\r\n Add Function\r\n </Button>\r\n </Box>\r\n )}\r\n\r\n {/* Function Modal */}\r\n <Modal fullWidth onClose={handleCloseModal} open={openModal}>\r\n <DialogTitle>\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n Add Function\r\n </Typography>\r\n <IconButton\r\n edge=\"end\"\r\n onClick={handleCloseModal}\r\n size=\"small\"\r\n >\r\n <Close fontSize=\"inherit\" />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent dividers>\r\n <Typography weight=\"medium\" type=\"s3\" color=\"theme.secondary.700\" sx={{ mb: 2 }}>\r\n Label: <span style={{ color: \"#1F2125\" }}>{elementJSON.label}</span>\r\n </Typography>\r\n <TextField\r\n name=\"default_value\"\r\n fullWidth\r\n placeholder=\"Add a function\"\r\n multiline\r\n minRows={4}\r\n defaultValue={elementJSON.default_value}\r\n onChange={handleFunctionValueChange}\r\n value={functionValue}\r\n />\r\n </DialogContent>\r\n <DialogActions>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={handleCloseModal}\r\n style={{ color: \"black\" }}\r\n >\r\n Cancel\r\n </Button>\r\n <Button onClick={() => handleSave(functionValue)}>\r\n Save\r\n </Button>\r\n </DialogActions>\r\n </Modal>\r\n </Box>\r\n );\r\n}\r\n\r\nexport default TextEditForm;","// React imports\r\nimport React, { useEffect, useState, useCallback, useMemo } from \"react\";\r\n\r\n// Material UI imports\r\nimport { \r\n MenuItem, \r\n Box, \r\n FormControlLabel, \r\n Slider, \r\n FormControl, \r\n IconButton\r\n} from \"@mui/material\";\r\nimport { Add } from \"@mui/icons-material\";\r\n\r\n// Third-party imports\r\nimport { enqueueSnackbar } from \"notistack\";\r\n\r\n// ERP Common imports\r\nimport Checkbox from \"@/components/checkbox/checkbox\";\r\nimport Select from \"@/components/select/select\";\r\nimport TextField from \"@/components/text-field/text-field\";\r\nimport Typography from \"@/components/typography/typography\";\r\nimport Button from \"@/components/button/button\";\r\nimport { Trash } from \"@/components/icons\";\r\n\r\n// Local imports\r\nimport FieldSelect from \"./field-select\";\r\nimport \"../custom-form.scss\";\r\n\r\ninterface Option {\r\n label: string;\r\n value: string;\r\n [key: string]: string;\r\n}\r\n\r\ninterface ElementJSON {\r\n id: string;\r\n field_type: string;\r\n label: string;\r\n placeholder: string;\r\n default_value: string | null;\r\n is_multiselect: boolean;\r\n is_required: boolean;\r\n is_unique: boolean;\r\n is_fullwidth: boolean;\r\n custom_width: number;\r\n type?: string;\r\n is_new?: boolean;\r\n options: Option[];\r\n}\r\n\r\ninterface SelectEditFormProps {\r\n element: ElementJSON;\r\n handlePropertyValueUpdate: (\r\n event: React.ChangeEvent<HTMLInputElement> | null,\r\n name?: string | null,\r\n value?: any,\r\n fieldType?: string\r\n ) => void;\r\n handleSelectOptionValueUpdate: (options: Option[]) => void;\r\n handleColumnSelect: (event: React.ChangeEvent<{ value: unknown }>) => void;\r\n handleWidthChange: (value: number | number[]) => void;\r\n}\r\n\r\nconst COLUMN_PER_ROW_OPTIONS = [1, 2, 3, 4, 5, 6] as const;\r\n\r\nexport const SelectEditForm: React.FC<SelectEditFormProps> = React.memo(({\r\n element,\r\n handlePropertyValueUpdate,\r\n handleSelectOptionValueUpdate,\r\n handleColumnSelect,\r\n handleWidthChange\r\n}) => {\r\n // Local state management\r\n const [selectOptions, setSelectOptions] = useState<Option[]>(element.options || []);\r\n const [newOption, setNewOption] = useState<Option>({ label: \"\", value: \"\" });\r\n const [isAddingOption, setIsAddingOption] = useState(false);\r\n\r\n // Sync options with parent element when element changes\r\n useEffect(() => {\r\n if (JSON.stringify(selectOptions) !== JSON.stringify(element.options || [])) {\r\n setSelectOptions(element.options || []);\r\n }\r\n }, [element.options, selectOptions]);\r\n\r\n // Memoized computed values\r\n const isFieldDisabled = useMemo(() => \r\n element.type === \"system\" || !element.is_new, \r\n [element.type, element.is_new]\r\n );\r\n\r\n const selectedOptionLabel = useMemo(() => {\r\n const selectedOption = selectOptions.find(option => option.value === element.default_value);\r\n return selectedOption?.label || \"Select Default\";\r\n }, [selectOptions, element.default_value]);\r\n\r\n // Optimized event handlers with useCallback\r\n const handleFieldUpdate = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n handlePropertyValueUpdate(null, null, null, e.target.value);\r\n }, [handlePropertyValueUpdate]);\r\n\r\n const handleSelectUpdate = useCallback((e: React.ChangeEvent<{ value: unknown }>) => {\r\n handlePropertyValueUpdate(null, null, e.target.value);\r\n }, [handlePropertyValueUpdate]);\r\n\r\n const handleMultiSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const isChecked = e.target.checked;\r\n // Reset default value when enabling multiselect\r\n const defaultValue = isChecked ? null : element.default_value;\r\n \r\n // Create a synthetic event for the property update\r\n const syntheticEvent = {\r\n target: {\r\n name: 'is_multiselect',\r\n checked: isChecked,\r\n value: isChecked\r\n }\r\n } as React.ChangeEvent<HTMLInputElement>;\r\n \r\n handlePropertyValueUpdate(syntheticEvent);\r\n \r\n // If enabling multiselect, also clear the default value\r\n if (isChecked && element.default_value) {\r\n handlePropertyValueUpdate(null, 'default_value', null);\r\n }\r\n }, [handlePropertyValueUpdate, element.default_value]);\r\n\r\n const handleNewOptionChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const { name, value } = e.target;\r\n setNewOption(prev => ({ ...prev, [name]: value }));\r\n }, []);\r\n\r\n const handleAddOption = useCallback(() => {\r\n if (!newOption.label.trim() || !newOption.value.trim()) {\r\n return; // Don't add empty options\r\n }\r\n\r\n // Check for duplicate values\r\n const isDuplicate = selectOptions.some(option => \r\n option.value === newOption.value || option.label === newOption.label\r\n );\r\n \r\n if (isDuplicate) {\r\n // Could show an error message here\r\n enqueueSnackbar(\"Option with this value or label already exists.\", { variant: \"error\" });\r\n return;\r\n }\r\n\r\n const updatedOptions = [...selectOptions, { ...newOption }];\r\n setSelectOptions(updatedOptions);\r\n handleSelectOptionValueUpdate(updatedOptions);\r\n \r\n // Reset form\r\n setNewOption({ label: \"\", value: \"\" });\r\n setIsAddingOption(false);\r\n }, [newOption, selectOptions, handleSelectOptionValueUpdate]);\r\n\r\n const handleRemoveOption = useCallback((indexToRemove: number) => {\r\n const updatedOptions = selectOptions.filter((_, index) => index !== indexToRemove);\r\n setSelectOptions(updatedOptions);\r\n handleSelectOptionValueUpdate(updatedOptions);\r\n \r\n // Clear default value if the removed option was selected\r\n const removedOption = selectOptions[indexToRemove];\r\n if (element.default_value === removedOption?.value) {\r\n handlePropertyValueUpdate(null, 'default_value', null);\r\n }\r\n }, [selectOptions, handleSelectOptionValueUpdate, element.default_value, handlePropertyValueUpdate]);\r\n\r\n const handleWidthChangeCallback = useCallback((\r\n _: Event, \r\n newValue: number | number[]\r\n ) => {\r\n handleWidthChange(newValue);\r\n }, [handleWidthChange]);\r\n\r\n return (\r\n <Box className=\"formSection--FieldContainer\">\r\n {/* Field Type Selection */}\r\n <Box>\r\n <FieldSelect\r\n variant=\"outlined\"\r\n onChange={handleFieldUpdate}\r\n defaultValue={element.field_type}\r\n label=\"Field Type\"\r\n disabled={isFieldDisabled}\r\n />\r\n </Box>\r\n\r\n {/* Label Field */}\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Label\"\r\n is_required\r\n name=\"label\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={element.label}\r\n />\r\n </Box>\r\n\r\n {/* Placeholder Field */}\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Placeholder\"\r\n is_required\r\n name=\"placeholder\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={element.placeholder}\r\n />\r\n </Box>\r\n\r\n {/* Default Value Selection */}\r\n <Box>\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Default\"\r\n size=\"small\"\r\n name=\"default_value\"\r\n onChange={handleSelectUpdate}\r\n value={element.default_value || \"\"}\r\n label=\"Default\"\r\n variant=\"outlined\"\r\n disabled={element.is_multiselect}\r\n renderValue={() => selectedOptionLabel}\r\n >\r\n {selectOptions.map((option, index) => (\r\n <MenuItem key={`${option.value}-${index}`} value={option.value}>\r\n {option.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Box>\r\n\r\n {/* Column Per Row Selection */}\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Column Per Row\"\r\n size=\"small\"\r\n onChange={handleColumnSelect}\r\n label=\"Select Column Per Row\"\r\n name=\"columnPerRow\"\r\n variant=\"outlined\"\r\n >\r\n {COLUMN_PER_ROW_OPTIONS.map((option) => (\r\n <MenuItem key={option} value={option}>\r\n {option}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n {/* Width Slider */}\r\n <Box>\r\n <Typography sx={{ color: 'black', mb: 1 }}>\r\n Adjust Width:\r\n </Typography>\r\n <Box pr={2}>\r\n <Slider\r\n value={element.custom_width || 6}\r\n min={1}\r\n max={12}\r\n step={1}\r\n onChange={handleWidthChangeCallback}\r\n aria-labelledby=\"width-slider\"\r\n sx={{ color: \"#4AC08C\" }}\r\n marks\r\n valueLabelDisplay=\"auto\"\r\n />\r\n </Box>\r\n </Box>\r\n\r\n {/* Options Management */}\r\n <Box className=\"formSection--SelectOption\">\r\n <Typography \r\n type=\"s5\" \r\n weight=\"medium\" \r\n color=\"theme.secondary.800\"\r\n sx={{ mb: 0.5 }}\r\n >\r\n Options\r\n </Typography>\r\n \r\n {/* Existing Options */}\r\n {selectOptions.map((option, index) => (\r\n <Box key={`option-${index}`} sx={{ mb: 1, display: 'flex', gap: 1 }}>\r\n <TextField\r\n fullWidth\r\n value={`${option.label} (${option.value})`}\r\n InputProps={{ readOnly: true }}\r\n />\r\n <IconButton\r\n color=\"error\"\r\n size=\"small\"\r\n onClick={() => handleRemoveOption(index)}\r\n >\r\n <Trash />\r\n </IconButton>\r\n </Box>\r\n ))}\r\n\r\n {/* Add New Option Form */}\r\n {isAddingOption && (\r\n <Box className=\"formSection--SelectOption\" sx={{ mt:0.5, p: 2, border: '1px solid #ddd', borderRadius: 1 }}>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Option Label\"\r\n is_required\r\n name=\"label\"\r\n type=\"text\"\r\n placeholder=\"Enter option label\"\r\n value={newOption.label}\r\n onChange={handleNewOptionChange}\r\n />\r\n </Box>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Option Value\"\r\n placeholder=\"Enter option value\"\r\n is_required\r\n name=\"value\"\r\n type=\"text\"\r\n value={newOption.value}\r\n onChange={handleNewOptionChange}\r\n />\r\n </Box>\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n <Button\r\n onClick={handleAddOption}\r\n // className=\"formSection--Button\"\r\n startIcon={<Add />}\r\n disabled={!newOption.label.trim() || !newOption.value.trim()}\r\n >\r\n Add Option\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n setIsAddingOption(false);\r\n setNewOption({ label: \"\", value: \"\" });\r\n }}\r\n variant=\"outlined\"\r\n >\r\n Cancel\r\n </Button>\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n {/* Add Option Button */}\r\n {!isAddingOption && (\r\n <Button\r\n onClick={() => setIsAddingOption(true)}\r\n variant=\"outlined\"\r\n className=\"formSection--Button\"\r\n startIcon={<Add />}\r\n sx={{ mt: 1 }}\r\n >\r\n Add Option\r\n </Button>\r\n )}\r\n </Box>\r\n\r\n {/* Form Controls */}\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\r\n <FormControlLabel\r\n name=\"is_multiselect\"\r\n control={<Checkbox />}\r\n onChange={handleMultiSelect}\r\n checked={element.is_multiselect}\r\n label=\"Enable Multi Select\"\r\n />\r\n\r\n <FormControlLabel\r\n name=\"is_required\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={element.is_required}\r\n label=\"This field is required\"\r\n />\r\n\r\n <FormControlLabel\r\n name=\"is_unique\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={element.is_unique}\r\n label=\"Is Unique\"\r\n />\r\n\r\n <FormControlLabel\r\n name=\"is_fullwidth\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={element.is_fullwidth}\r\n label=\"Full Width\"\r\n />\r\n </Box>\r\n </Box>\r\n );\r\n});\r\n\r\nSelectEditForm.displayName = 'SelectEditForm';\r\n\r\nexport default SelectEditForm;","// React imports\r\nimport { useEffect, useMemo, useState } from \"react\";\r\n\r\n// Material UI imports\r\nimport { MenuItem, Box, FormControlLabel } from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport { Add } from \"@mui/icons-material\";\r\n\r\n// ERP Common imports\r\nimport Select from \"@/components/select/select\";\r\nimport Button from \"@/components/button/button\";\r\nimport Typography from \"@/components/typography/typography\";\r\nimport TextField from \"@/components/text-field/text-field\";\r\nimport Checkbox from \"@/components/checkbox/checkbox\";\r\nimport { generateRandomId } from \"@/utils/common\";\r\nimport { SECTION_TYPES } from \"@/utils/constant\";\r\n\r\n// Local imports\r\nimport { ISwitcherForms } from \"../field_properties\";\r\nimport \"../custom-form.scss\";\r\n\r\nconst SectionEditForm = (props: any) => {\r\n const { handlePropertyValueUpdate } = props;\r\n const [elementJSON, setElementJSON] = useState(props.element);\r\n const [addForm, setAddForm] = useState<boolean>(false);\r\n const [newForm, setNewForm] = useState<string>(\"\");\r\n const selectOption = [\"section\"];\r\n\r\n const isDuplicateFormName = useMemo(\r\n () =>\r\n elementJSON.switcher_forms?.map((ele: any) => ele.name).includes(newForm),\r\n [elementJSON.switcher_forms, newForm]\r\n );\r\n\r\n useEffect(() => {\r\n setElementJSON(props.element);\r\n }, [props.element]);\r\n\r\n return (\r\n <Box className=\"formSection--FieldContainer\" key={elementJSON.id}>\r\n <div>\r\n <Select\r\n key={elementJSON.id}\r\n fullWidth\r\n placeholder=\"Select Field\"\r\n size=\"small\"\r\n disabled\r\n defaultValue={elementJSON.field_type}\r\n label=\"Field Type\"\r\n variant=\"outlined\"\r\n >\r\n {selectOption?.map((item) => (\r\n <MenuItem value={item}>{item}</MenuItem>\r\n ))}\r\n </Select>\r\n </div>\r\n <div>\r\n <Select\r\n key={elementJSON.id}\r\n fullWidth\r\n placeholder=\"Select Field\"\r\n size=\"small\"\r\n name=\"section_type\"\r\n defaultValue={elementJSON.section_type}\r\n label=\"Section Type\"\r\n variant=\"outlined\"\r\n onChange={(e: any) => handlePropertyValueUpdate(e)}\r\n >\r\n {Object.values(SECTION_TYPES).map((type) => {\r\n return (\r\n <MenuItem key={type} value={type}>\r\n {type}\r\n </MenuItem>\r\n );\r\n })}\r\n </Select>\r\n </div>\r\n <div>\r\n <TextField\r\n fullWidth\r\n label=\"Label\"\r\n is_required\r\n key={elementJSON.id}\r\n name=\"label\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.label}\r\n />\r\n </div>\r\n <FormControlLabel\r\n key={elementJSON.id}\r\n name=\"is_accordion\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_accordion}\r\n label=\"Is Accordion\"\r\n />\r\n {elementJSON.section_type === SECTION_TYPES.FORM_SWITCH_SECTION ? (\r\n <div className=\"formSection--SubFieldContainer\">\r\n <div>\r\n <TextField\r\n fullWidth\r\n label=\"Form label\"\r\n is_required\r\n key={elementJSON.id}\r\n name=\"form_switcher_label\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.form_switcher_label}\r\n />\r\n </div>\r\n <div>\r\n <Typography\r\n type=\"s5\"\r\n weight={\"medium\"}\r\n color={\"theme.secondary.800\"}\r\n >\r\n Forms\r\n </Typography>\r\n {elementJSON?.switcher_forms?.map(\r\n (ele: ISwitcherForms) => (\r\n <div className=\"formSection--MultiOptions\" key={elementJSON.id}>\r\n <TextField\r\n fullWidth\r\n key={ele.id}\r\n value={ele.name}\r\n style={{ marginBottom: \"10px\" }}\r\n name=\"switcher_forms\"\r\n onChange={(e: any) => {\r\n const newVal = elementJSON.switcher_forms?.map(\r\n (formEle: ISwitcherForms) =>\r\n ele.id === formEle.id\r\n ? { ...formEle, name: e.target.value }\r\n : { ...formEle }\r\n );\r\n\r\n handlePropertyValueUpdate(e, newVal);\r\n }}\r\n />\r\n <CloseIcon\r\n style={{ fontSize: \"1rem\", color: \"#656669\" }}\r\n onClick={(e: any) => {\r\n const newVal = [...elementJSON.switcher_forms].filter(\r\n (item) => item.id !== ele.id\r\n );\r\n e.target.name = \"switcher_forms\";\r\n handlePropertyValueUpdate(e, newVal);\r\n }}\r\n />\r\n </div>\r\n )\r\n )}\r\n </div>\r\n {addForm ? (\r\n <div>\r\n <div\r\n className=\"formSection--MultiOptions formSection--FullWidth\"\r\n key={elementJSON.id}\r\n >\r\n <div className=\"formSection--FullWidth\">\r\n <TextField\r\n fullWidth\r\n label=\"Form section name\"\r\n placeholder=\"Form section name\"\r\n is_required\r\n key={elementJSON.id}\r\n type=\"text\"\r\n value={newForm}\r\n error={isDuplicateFormName}\r\n helperText={\r\n isDuplicateFormName\r\n ? \"Form section name can not duplicate\"\r\n : \"\"\r\n }\r\n onChange={(e: any) => setNewForm(e.target.value)}\r\n />\r\n </div>\r\n <CloseIcon\r\n style={{ fontSize: \"1rem\", color: \"#656669\" }}\r\n onClick={() => {\r\n setAddForm(false);\r\n setNewForm(\"\");\r\n }}\r\n />\r\n </div>\r\n <Button\r\n onClick={(e: any) => {\r\n const { uniqueStringId: id } = generateRandomId();\r\n const newVal = [\r\n ...elementJSON.switcher_forms,\r\n { name: newForm, id },\r\n ];\r\n handlePropertyValueUpdate(e, newVal);\r\n setNewForm(\"\");\r\n setAddForm(false);\r\n }}\r\n name=\"switcher_forms\"\r\n variant=\"text\"\r\n className=\"formSection--Button\"\r\n disabled={isDuplicateFormName || !newForm}\r\n startIcon={<Add />}\r\n >\r\n Add\r\n </Button>\r\n </div>\r\n ) : null}\r\n {!addForm ? (\r\n <Button\r\n onClick={() => setAddForm(true)}\r\n variant=\"text\"\r\n className=\"formSection--Button\"\r\n startIcon={<Add />}\r\n >\r\n Add forms\r\n </Button>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n </Box>\r\n );\r\n};\r\n\r\nexport { SectionEditForm };\r\nexport default SectionEditForm;\r\n","// React imports\r\nimport { useEffect, useState } from \"react\";\r\n\r\n// Material UI imports\r\nimport {\r\n MenuItem,\r\n Box,\r\n FormControlLabel,\r\n FormControl,\r\n RadioGroup,\r\n Button,\r\n Select,\r\n InputLabel,\r\n Slider,\r\n} from \"@mui/material\";\r\nimport { Add } from \"@mui/icons-material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\n// ERP Common imports\r\nimport Checkbox from \"@/components/checkbox/checkbox\";\r\nimport Radio from \"@/components/radio/radio\";\r\nimport TextField from \"@/components/text-field/text-field\";\r\nimport Typography from \"@/components/typography/typography\";\r\n\r\n// Local imports\r\nimport FieldSelect from \"./field-select\";\r\nimport \"../custom-form.scss\";\r\n\r\ninterface Option {\r\n label: string;\r\n value: string;\r\n is_checked: boolean;\r\n [key: string]: string | boolean; // Index signature to allow any string property\r\n}\r\n\r\nexport function CheckboxEditForm(props: any) {\r\n const [isAddSelectOption, setAddSelectOption] = useState(false);\r\n const { handlePropertyValueUpdate, handleSelectOptionValueUpdate , handleColumnSelect , handleWidthChange } = props;\r\n const columnPerRowOptions = [1, 2, 3, 4, 5, 6];\r\n const [selectOptions, setSelectOptions] = useState(\r\n props.element.options || [],\r\n );\r\n const [elementJSON, setElementJSON] = useState(props.element);\r\n\r\n const allowLabelPositionModification =\r\n elementJSON.field_type !== \"radioButton\";\r\n\r\n const [newOptions, setNewOptions] = useState<Option>({\r\n label: \"\",\r\n value: \"\",\r\n is_checked: false,\r\n });\r\n\r\n\r\n\r\n const handleAddNewOption = (e: any) => {\r\n const label: string = e.target.name;\r\n const value: string = e.target.value;\r\n const option: Option = { ...newOptions };\r\n option[label] = value;\r\n setNewOptions(option);\r\n };\r\n\r\n const handleFieldUpdate = (e: any) => {\r\n elementJSON.field_type = e.target.value;\r\n handlePropertyValueUpdate(null, null, null, e.target.value);\r\n };\r\n\r\n const handleSelectUpdate = (e: any) => {\r\n elementJSON.default_value = e.target.value;\r\n handlePropertyValueUpdate(null, null, e.target.value);\r\n };\r\n\r\n useEffect(() => {\r\n setElementJSON(props.element);\r\n setSelectOptions(props.element.options || []);\r\n }, [props.element]);\r\n\r\n useEffect(() => {\r\n setNewOptions({ label: \"\", value: \"\", is_checked: false });\r\n setAddSelectOption(false);\r\n handleSelectOptionValueUpdate(selectOptions);\r\n // eslint-disable-next-line\r\n }, [selectOptions]);\r\n\r\n return (\r\n <Box className=\"formSection--FieldContainer\" key={elementJSON.id}>\r\n <div key={elementJSON.id}>\r\n <FieldSelect\r\n key={elementJSON.id}\r\n variant=\"outlined\"\r\n onChange={handleFieldUpdate}\r\n defaultValue={elementJSON.field_type}\r\n label=\"Field Type\"\r\n disabled={elementJSON.type === \"system\" || !elementJSON.is_new}\r\n />\r\n </div>\r\n <div key={elementJSON.id}>\r\n <TextField\r\n fullWidth\r\n label=\"Label\"\r\n is_required\r\n key={elementJSON.id}\r\n name=\"label\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.label}\r\n />\r\n </div>\r\n\r\n <div key={elementJSON.id}>\r\n <Select\r\n variant=\"outlined\"\r\n key={elementJSON.id}\r\n fullWidth\r\n placeholder=\"Select Default\"\r\n size=\"small\"\r\n name=\"options\"\r\n onChange={() => handleSelectUpdate}\r\n defaultValue={elementJSON.default_value}\r\n label=\"Default\"\r\n disabled={!selectOptions.length}\r\n >\r\n {selectOptions?.map((option: any, index: number) => (\r\n <MenuItem key={index} value={option.value}>\r\n {option.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </div>\r\n <FormControl>\r\n <Select\r\n key={elementJSON.id}\r\n fullWidth\r\n placeholder=\"Select Column Per Row\"\r\n size=\"small\"\r\n onChange={handleColumnSelect} // need to change\r\n // defaultValue= {} // need to change\r\n label=\"Select Column Per Row\"\r\n name=\"option\"\r\n variant=\"outlined\"\r\n >\r\n {columnPerRowOptions?.map((option: any, index: number) => (\r\n <MenuItem key={index} value={option}>\r\n {option}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n <Box>\r\n <Typography sx={{ color: 'black' }}>Adjust Width:</Typography>\r\n <Slider\r\n value = {elementJSON?.custom_width}\r\n name = \"custom_width\"\r\n min={1}\r\n max={12}\r\n step={1}\r\n onChange={(_, newValue) => handleWidthChange(newValue)}\r\n aria-labelledby=\"width-slider\"\r\n sx = {{color : \"#4AC08C\"}}\r\n />\r\n </Box>\r\n \r\n\r\n <div className=\"formSection--SelectOption\">\r\n <Typography type=\"s5\" weight={\"medium\"} color={\"theme.secondary.800\"}>\r\n Options\r\n </Typography>\r\n {selectOptions.map((option: any, index: number) => (\r\n <div className=\"formSection--MultiOptions\">\r\n <TextField\r\n fullWidth\r\n key={index}\r\n value={`${option.label} (${option.value})`}\r\n InputProps={{\r\n readOnly: true,\r\n }}\r\n />\r\n <CloseIcon\r\n style={{ fontSize: \"1rem\", color: \"#656669\" }}\r\n onClick={() => {\r\n setSelectOptions([\r\n ...selectOptions.filter(\r\n (_: any, filterIndex: number) => filterIndex !== index,\r\n ),\r\n ]);\r\n }}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n {isAddSelectOption ? (\r\n <div className=\"formSection--SelectOption\">\r\n <div>\r\n <TextField\r\n fullWidth\r\n label=\"Label\"\r\n is_required\r\n name=\"label\"\r\n type=\"text\"\r\n placeholder=\"Label\"\r\n defaultValue={newOptions.label}\r\n onChange={handleAddNewOption}\r\n />\r\n </div>\r\n <div>\r\n <TextField\r\n fullWidth\r\n label=\"Value\"\r\n placeholder=\"Value\"\r\n is_required\r\n name=\"value\"\r\n type=\"text\"\r\n defaultValue={newOptions.value}\r\n onChange={handleAddNewOption}\r\n />\r\n </div>\r\n <Button\r\n onClick={() =>\r\n setSelectOptions([...selectOptions, { ...newOptions }])\r\n }\r\n disabled={\r\n !!selectOptions.find(\r\n (ele: Option) => ele.value === newOptions.value,\r\n )\r\n }\r\n variant=\"text\"\r\n className=\"formSection--Button\"\r\n startIcon={<Add />}\r\n >\r\n Add\r\n </Button>\r\n </div>\r\n ) : (\r\n <Button\r\n onClick={() => setAddSelectOption(true)}\r\n variant=\"text\"\r\n className=\"formSection--Button\"\r\n startIcon={<Add />}\r\n >\r\n Add Option\r\n </Button>\r\n )}\r\n\r\n <FormControl>\r\n <Typography type=\"s4\" color=\"theme.secondary.800\">\r\n Display style\r\n </Typography>\r\n <RadioGroup\r\n key={elementJSON.id}\r\n row\r\n aria-labelledby=\"demo-radio-buttons-group-label\"\r\n name=\"display\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.display}\r\n >\r\n <FormControlLabel\r\n value=\"row\"\r\n control={<Radio size=\"small\" />}\r\n label=\"Row\"\r\n slotProps={{ typography: { variant: \"body2\" } }}\r\n />\r\n <FormControlLabel\r\n value=\"column\"\r\n control={<Radio size=\"small\" />}\r\n label=\"Column\"\r\n slotProps={{ typography: { variant: \"body2\" } }}\r\n />\r\n </RadioGroup>\r\n </FormControl>\r\n\r\n <div key={elementJSON.id}>\r\n <TextField\r\n key={elementJSON.id}\r\n fullWidth\r\n label=\"Title\"\r\n is_required\r\n name=\"title\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.title}\r\n />\r\n </div>\r\n\r\n <FormControl disabled={!allowLabelPositionModification}>\r\n <Typography type=\"s4\" color=\"theme.secondary.800\">\r\n Title Position\r\n </Typography>\r\n <RadioGroup\r\n key={elementJSON.id}\r\n row\r\n aria-labelledby=\"demo-radio-buttons-group-label\"\r\n name=\"title_position\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={allowLabelPositionModification ? \"end\" : \"\"}\r\n >\r\n <FormControlLabel\r\n value=\"start\"\r\n control={<Radio size=\"small\" />}\r\n label=\"Start\"\r\n slotProps={{ typography: { variant: \"body2\" } }}\r\n />\r\n <FormControlLabel\r\n value=\"end\"\r\n control={<Radio size=\"small\" />}\r\n label=\"End\"\r\n slotProps={{ typography: { variant: \"body2\" } }}\r\n />\r\n </RadioGroup>\r\n </FormControl>\r\n\r\n <FormControlLabel\r\n key={elementJSON.id}\r\n name=\"is_required\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_required}\r\n label=\"This field is required\"\r\n />\r\n <FormControlLabel\r\n key={elementJSON.id}\r\n name=\"is_unique\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_unique}\r\n label=\"Is Unique\"\r\n />\r\n\r\n <FormControlLabel\r\n key={elementJSON.id}\r\n name=\"is_fullwidth\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate} // need to change this\r\n checked={elementJSON?.is_fullwidth}// need to change \r\n label=\"Full Width \"\r\n />\r\n </Box>\r\n );\r\n}\r\n\r\nexport default CheckboxEditForm;\r\n","// React imports\r\nimport React, { useEffect, useState } from 'react';\r\n\r\n// Material UI imports\r\nimport { MenuItem, Box, SelectChangeEvent } from '@mui/material';\r\n\r\n// Third-party imports\r\nimport { MRT_ColumnDef, MRT_RowData } from 'material-react-table';\r\n\r\n// ERP Common imports\r\nimport Select from '@/components/select/select';\r\nimport TextField from '@/components/text-field/text-field';\r\nimport formatText from '@/utils/format-text';\r\n\r\n// Local imports\r\nimport { IElementJson } from '../custom-form';\r\nimport { ApiFormFields } from '../../Redux/state';\r\nimport FieldSelect from './field-select';\r\nimport '../custom-form.scss';\r\n\r\ninterface ITableEditForm {\r\n\thandlePropertyValueUpdate: (\r\n\t\tevent?: any,\r\n\t\tnumberValue?: any,\r\n\t\tval?: any,\r\n\t\tfieldType?: any\r\n\t) => void;\r\n\thandleColumnsUpdate: (columns: MRT_ColumnDef<MRT_RowData>[]) => void;\r\n\telement: IElementJson | null;\r\n\tfields: ApiFormFields | null;\r\n}\r\n\r\ninterface TableOption {\r\n\tlabel: string;\r\n\tvalue: string;\r\n}\r\n\r\nconst TableEditForm: React.FC<ITableEditForm> = ({\r\n\thandlePropertyValueUpdate,\r\n\telement,\r\n\thandleColumnsUpdate,\r\n\tfields\r\n}) => {\r\n\t/* Local States */\r\n\tconst [elementJSON, setElementJSON] = useState<IElementJson | null>(element);\r\n\tconst [tables, setTables] = useState<TableOption[]>([]);\r\n\r\n\t/* Local Functions */\r\n\tconst handleFieldUpdate = (event: SelectChangeEvent<unknown>) => {\r\n\t\tif (elementJSON) {\r\n\t\t\telementJSON.field_type = event.target.value as string;\r\n\t\t\thandlePropertyValueUpdate(null, null, null, event.target.value as string);\r\n\t\t}\r\n\t};\r\n\tconst handleTableSelect = (event: SelectChangeEvent<unknown>) => {\r\n\t\thandlePropertyValueUpdate(event);\r\n\t};\r\n\r\n\t/* Use Effects */\r\n\tuseEffect(() => {\r\n\t\tsetElementJSON(element);\r\n\t}, [element]);\r\n\tuseEffect(() => {\r\n\t\tif (elementJSON && elementJSON.table && fields) {\r\n\t\t\tconst fieldsArr = fields[elementJSON.table];\r\n\t\t\tlet columns: any[] = [];\r\n\t\t\tif (fieldsArr && fieldsArr?.length) {\r\n\t\t\t\tcolumns = fieldsArr.map((field, index) => ({\r\n\t\t\t\t\theader: formatText(field.field),\r\n\t\t\t\t\taccessorKey: field.field,\r\n\t\t\t\t\tvisible: index > 3 ? false : true,\r\n\t\t\t\t\ttype: field.type\r\n\t\t\t\t}));\r\n\t\t\t} else {\r\n\t\t\t\tcolumns = [\r\n\t\t\t\t\t{ header: 'Column 1', accessorKey: 'column_1', visible: true },\r\n\t\t\t\t\t{ header: 'Column 2', accessorKey: 'column_1', visible: true }\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t\tcolumns && handleColumnsUpdate(columns);\r\n\t\t}\r\n\t}, [elementJSON?.table]);\r\n\tuseEffect(() => {\r\n\t\tif (fields) {\r\n\t\t\tconst options = Object.keys(fields).map((key) => ({\r\n\t\t\t\tlabel: formatText(key),\r\n\t\t\t\tvalue: key\r\n\t\t\t}));\r\n\t\t\tsetTables(options);\r\n\t\t}\r\n\t}, [fields]);\r\n\r\n\tif (!elementJSON) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Box className='formSection--FieldContainer' key={elementJSON.id}>\r\n\t\t\t<div key={elementJSON.id}>\r\n\t\t\t\t<FieldSelect\r\n\t\t\t\t\tkey={elementJSON.id}\r\n\t\t\t\t\tvariant='outlined'\r\n\t\t\t\t\tonChange={handleFieldUpdate}\r\n\t\t\t\t\tdefaultValue={elementJSON.field_type}\r\n\t\t\t\t\tdisabled={elementJSON.type === 'system' || !elementJSON.is_new}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\t\t\t<div key={elementJSON.id}>\r\n\t\t\t\t<TextField\r\n\t\t\t\t\tfullWidth\r\n\t\t\t\t\tlabel='Label'\r\n\t\t\t\t\tis_required\r\n\t\t\t\t\tkey={elementJSON.id}\r\n\t\t\t\t\tname='label'\r\n\t\t\t\t\ttype='text'\r\n\t\t\t\t\tonChange={handlePropertyValueUpdate}\r\n\t\t\t\t\tdefaultValue={elementJSON.label}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div key={elementJSON.id}>\r\n\t\t\t\t<Select\r\n\t\t\t\t\tkey={elementJSON.id}\r\n\t\t\t\t\tvariant='outlined'\r\n\t\t\t\t\tlabel='Table'\r\n\t\t\t\t\tfullWidth\r\n\t\t\t\t\tplaceholder='Select Table'\r\n\t\t\t\t\tsize='small'\r\n\t\t\t\t\tname='table'\r\n\t\t\t\t\tdefaultValue={elementJSON.table}\r\n\t\t\t\t\tdisabled={elementJSON.type === 'system'}\r\n\t\t\t\t\tonChange={handleTableSelect}\r\n\t\t\t\t\trenderValue={(value: string) =>\r\n\t\t\t\t\t\ttables.find((option) => option.value === value)?.label\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t{tables?.map((item) => (\r\n\t\t\t\t\t\t<MenuItem value={item.value}>{item.label}</MenuItem>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Select>\r\n\t\t\t</div>\r\n\t\t</Box>\r\n\t);\r\n};\r\n\r\nexport default TableEditForm;\r\n","// React imports\r\nimport React, { memo, useMemo, useCallback } from 'react';\r\n\r\n// Material UI imports\r\nimport { Grid } from '@mui/material';\r\n\r\n// ERP Common imports - Form builder elements\r\nimport DynamicInput from '@/components/form-control/form-builder/form-builder-element/text';\r\nimport DynamicCheckBox from '@/components/form-control/form-builder/form-builder-element/checkbox';\r\nimport DynamicTable from '@/components/form-control/form-builder/form-builder-element/table';\r\nimport DynamicElementHOC from '@/components/form-control/form-builder/form-builder-element/dynamic-element-hoc';\r\nimport DynamicRadioButton from '@/components/form-control/form-builder/form-builder-element/radio-button';\r\nimport DynamicToggleButton from '@/components/form-control/form-builder/form-builder-element/toggle-button';\r\nimport DynamicInfo from '@/components/form-control/form-builder/form-builder-element/info';\r\nimport DynamicMedia from '@/components/form-control/form-builder/form-builder-element/media';\r\nimport DynamicTime from '@/components/form-control/form-builder/form-builder-element/time';\r\nimport DynamicDate from '@/components/form-control/form-builder/form-builder-element/date';\r\nimport DynamicSelect from '@/components/form-control/form-builder/form-builder-element/select';\r\nimport DynamicPhone from '@/components/form-control/form-builder/form-builder-element/phone';\r\n\r\n// Types\r\ninterface IField {\r\n id: string;\r\n field_type: string;\r\n placeholder?: string;\r\n label: string;\r\n default_value?: any;\r\n is_multiline?: boolean;\r\n is_required?: boolean;\r\n min_length?: number;\r\n max_length?: number;\r\n is_fullwidth?: boolean;\r\n custom_width?: number;\r\n options?: any[];\r\n is_multiselect?: boolean;\r\n is_future_dates_allowed?: boolean;\r\n is_past_dates_allowed?: boolean;\r\n option?: any;\r\n max_size?: number;\r\n title?: string;\r\n display?: string;\r\n title_position?: string;\r\n table_columns?: any[];\r\n float_step?: number;\r\n type: string;\r\n}\r\n\r\ninterface FormFieldsProps {\r\n sectionMembers: IField[];\r\n // Add other required props with proper types\r\n members: IField[];\r\n activeMember?: number;\r\n control: any;\r\n t: (key: string) => string;\r\n element: any;\r\n images: any;\r\n elementJSON?: any;\r\n remove: (index: number) => void;\r\n move: (from: number, to: number) => void;\r\n handleElementSelection: (e: any) => void;\r\n setElementSwap: (value: boolean) => void;\r\n handleDuplicateElement: (index: number) => void;\r\n setSelectedHoc: (value: string) => void;\r\n setActiveMember: (value: number | undefined) => void;\r\n}\r\n\r\n// Field type mapping for better maintainability\r\nconst FIELD_TYPE_MAP = {\r\n TEXT: 'text',\r\n EMAIL: 'email',\r\n NUMBER: 'number',\r\n PHONE: 'phone',\r\n SELECT: 'select',\r\n DATE: 'date',\r\n TIME: 'time',\r\n URL: 'url',\r\n CURRENCY: 'currency',\r\n FILE: 'file',\r\n IMAGE: 'image',\r\n GEO_LOCATION: 'geoLocation',\r\n RELATION: 'relation',\r\n INFO: 'info',\r\n TOGGLE_BUTTON: 'toggleButton',\r\n RADIO_BUTTON: 'radioButton',\r\n TAGS_INPUT: 'tagsInput',\r\n CHECKBOX: 'checkbox',\r\n TABLE: 'table'\r\n} as const;\r\n\r\n// Memoized individual field component\r\nconst FormField = memo<{\r\n field: IField;\r\n index: number;\r\n gridItemSize: number;\r\n activeMember?: number;\r\n control: any;\r\n t: (key: string) => string;\r\n element: any;\r\n images: any;\r\n elementJSON?: any;\r\n remove: (index: number) => void;\r\n move: (from: number, to: number) => void;\r\n handleElementSelection: (e: any) => void;\r\n setElementSwap: (value: boolean) => void;\r\n handleDuplicateElement: (index: number) => void;\r\n setSelectedHoc: (value: string) => void;\r\n setActiveMember: (value: number | undefined) => void;\r\n}>(({\r\n field,\r\n index,\r\n gridItemSize,\r\n activeMember,\r\n control,\r\n t,\r\n element,\r\n images,\r\n elementJSON,\r\n remove,\r\n move,\r\n handleElementSelection,\r\n setElementSwap,\r\n handleDuplicateElement,\r\n setSelectedHoc,\r\n setActiveMember\r\n}) => {\r\n // Common HOC props - memoized to prevent unnecessary re-renders\r\n const hocProps = useMemo(() => ({\r\n activeIndex: activeMember === index,\r\n removeElement: remove,\r\n index,\r\n onClick: handleElementSelection,\r\n swap: move,\r\n elementSwap: () => setElementSwap(true),\r\n handleDuplicate: handleDuplicateElement,\r\n setElementHoc: () => {\r\n setSelectedHoc(\"\");\r\n setActiveMember(undefined);\r\n }\r\n }), [\r\n activeMember, \r\n index, \r\n remove, \r\n handleElementSelection, \r\n move, \r\n setElementSwap, \r\n handleDuplicateElement, \r\n setSelectedHoc, \r\n setActiveMember\r\n ]);\r\n\r\n // Common field props - memoized to prevent unnecessary re-renders\r\n const commonFieldProps = useMemo(() => ({\r\n key: field.id,\r\n position: index,\r\n placeholder: t(field.placeholder || ''),\r\n label: t(field.label),\r\n formControl: control,\r\n name: \"message\",\r\n fieldArrayName: \"members\",\r\n required: field.is_required,\r\n formType: \"builder\" as const,\r\n typeOfField: field.type,\r\n disabled: true\r\n }), [field.id, field.placeholder, field.label, field.is_required, field.type, index, t, control]);\r\n\r\n // Render field based on type\r\n const renderFieldContent = useCallback(() => {\r\n const { field_type } = field;\r\n\r\n switch (field_type) {\r\n case element.text.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n is_multiline={field.is_multiline}\r\n min={field.min_length}\r\n max={field.max_length}\r\n />\r\n );\r\n\r\n case element.email.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n endIcon={<img src={images.sms} alt=\"email\" />}\r\n />\r\n );\r\n\r\n case element.number.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n min={field.min_length}\r\n max={field.max_length}\r\n float_step={field.float_step}\r\n />\r\n );\r\n\r\n case element.phone.field_type:\r\n return (\r\n <DynamicPhone\r\n {...commonFieldProps}\r\n type={field_type}\r\n default_value={field.default_value}\r\n />\r\n );\r\n\r\n case element.select.field_type:\r\n return (\r\n <DynamicSelect\r\n {...commonFieldProps}\r\n options={field.options}\r\n defaultValue={field.default_value}\r\n is_multiselect={field.is_multiselect}\r\n />\r\n );\r\n\r\n case element.date.field_type:\r\n return (\r\n <DynamicDate\r\n {...commonFieldProps}\r\n defaultValue={field.default_value}\r\n is_future_dates_allowed={field.is_future_dates_allowed}\r\n is_past_dates_allowed={field.is_past_dates_allowed}\r\n disable={true}\r\n />\r\n );\r\n\r\n case element.time.field_type:\r\n return (\r\n <DynamicTime\r\n {...commonFieldProps}\r\n option={field.option}\r\n />\r\n );\r\n\r\n case element.url.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n endIcon={<img src={images.url} alt=\"url\" />}\r\n />\r\n );\r\n\r\n case element.currency.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n endIcon={<img src={images.dollar} alt=\"currency\" />}\r\n />\r\n );\r\n\r\n case element.file.field_type:\r\n case element.image.field_type:\r\n return (\r\n <DynamicMedia\r\n {...commonFieldProps}\r\n type={field_type}\r\n max_size={field.max_size}\r\n />\r\n );\r\n\r\n case element.geoLocation.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n endIcon={<img src={images.location} alt=\"location\" />}\r\n />\r\n );\r\n\r\n case element.relation.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n is_multiline={field.is_multiline}\r\n min={field.min_length}\r\n max={field.max_length}\r\n label={\r\n <span\r\n className=\"formSection--Relation\"\r\n data-position={index}\r\n data-name={`members.${index}.message`}\r\n >\r\n {t(field.label)}\r\n <img src={images.relation} alt=\"relation\" />\r\n </span>\r\n }\r\n />\r\n );\r\n\r\n case element.info.field_type:\r\n return (\r\n <DynamicInfo\r\n {...commonFieldProps}\r\n defaultValue={field.default_value}\r\n />\r\n );\r\n\r\n case element.toggleButton.field_type:\r\n return (\r\n <DynamicToggleButton\r\n {...commonFieldProps}\r\n title={t(field.title || '')}\r\n titlePosition={elementJSON?.title_position}\r\n />\r\n );\r\n\r\n case element.radioButton.field_type:\r\n return (\r\n <DynamicRadioButton\r\n {...commonFieldProps}\r\n options={field.options}\r\n display={field.display}\r\n titlePosition={elementJSON?.title_position}\r\n />\r\n );\r\n\r\n case element.tagsInput.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n is_multiline={field.is_multiline}\r\n min={field.min_length}\r\n max={field.max_length}\r\n />\r\n );\r\n\r\n case element.checkbox.field_type:\r\n return (\r\n <DynamicCheckBox\r\n {...commonFieldProps}\r\n title={t(field.title || '')}\r\n titlePosition={field.title_position}\r\n />\r\n );\r\n\r\n case element.table.field_type:\r\n return (\r\n <DynamicTable\r\n {...commonFieldProps}\r\n columns={field.table_columns || elementJSON?.table_columns || []}\r\n />\r\n );\r\n\r\n default:\r\n console.warn(`Unknown field type: ${field_type}`);\r\n return null;\r\n }\r\n }, [field, commonFieldProps, element, images, elementJSON, t, index]);\r\n\r\n return (\r\n <Grid item xs={gridItemSize}>\r\n <DynamicElementHOC\r\n {...hocProps}\r\n element={field.field_type}\r\n >\r\n {renderFieldContent()}\r\n </DynamicElementHOC>\r\n </Grid>\r\n );\r\n});\r\n\r\nFormField.displayName = 'FormField';\r\n\r\n// Main component\r\nconst FormFields: React.FC<FormFieldsProps> = memo(({\r\n sectionMembers,\r\n members,\r\n activeMember,\r\n control,\r\n t,\r\n element,\r\n images,\r\n elementJSON,\r\n remove,\r\n move,\r\n handleElementSelection,\r\n setElementSwap,\r\n handleDuplicateElement,\r\n setSelectedHoc,\r\n setActiveMember\r\n}) => {\r\n // Memoize grid item size calculation\r\n const calculateGridSize = useCallback((field: IField): number => {\r\n if (field.is_fullwidth || field.field_type === \"table\") return 12;\r\n if (field.custom_width) return field.custom_width;\r\n return 6;\r\n }, []);\r\n\r\n // Memoize the rendered fields\r\n const renderedFields = useMemo(() => {\r\n return sectionMembers.map((field: IField) => {\r\n const index = members.findIndex(member => member === field);\r\n const gridItemSize = calculateGridSize(field);\r\n\r\n return (\r\n <FormField\r\n key={`${field.id}-${index}`} // Better key for React reconciliation\r\n field={field}\r\n index={index}\r\n gridItemSize={gridItemSize}\r\n activeMember={activeMember}\r\n control={control}\r\n t={t}\r\n element={element}\r\n images={images}\r\n elementJSON={elementJSON}\r\n remove={remove}\r\n move={move}\r\n handleElementSelection={handleElementSelection}\r\n setElementSwap={setElementSwap}\r\n handleDuplicateElement={handleDuplicateElement}\r\n setSelectedHoc={setSelectedHoc}\r\n setActiveMember={setActiveMember}\r\n />\r\n );\r\n });\r\n }, [\r\n sectionMembers,\r\n members,\r\n activeMember,\r\n control,\r\n t,\r\n element,\r\n images,\r\n elementJSON,\r\n remove,\r\n move,\r\n handleElementSelection,\r\n setElementSwap,\r\n handleDuplicateElement,\r\n setSelectedHoc,\r\n setActiveMember,\r\n calculateGridSize,\r\n elementJSON?.field_type\r\n ]);\r\n\r\n return <>{renderedFields}</>;\r\n});\r\n\r\nFormFields.displayName = 'FormFields';\r\n\r\nexport { FormField };\r\nexport default FormFields;","// React imports\r\nimport { useEffect, useMemo } from \"react\";\r\n\r\n// ERP Common imports\r\nimport formBuilderDeConversion from \"@/utils/form-builder-deconversion\";\r\n\r\n// Module pathname imports\r\nimport { PathnameAccounting } from \"../../../constants/pathnames/pathname.accounting\";\r\nimport { PathnameCrm } from \"../../../constants/pathnames/pathname.crm\";\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 { PathnameRental } from \"../../../constants/pathnames/pathname.rental\";\r\nimport { PathnameUsers } from \"../../../constants/pathnames/pathname.user\";\r\nimport { PathnameHrms } from \"../../../constants/pathnames/pathname.hrms\";\r\n\r\n// Types for better type safety\r\nexport interface TableColumn {\r\n header: string;\r\n accessorKey: string;\r\n visible: boolean;\r\n}\r\n\r\nexport interface FormMember {\r\n field_type: string;\r\n table?: string;\r\n table_columns?: TableColumn[];\r\n [key: string]: any;\r\n}\r\n\r\nexport interface FormSection {\r\n field_type: string;\r\n label: string;\r\n is_accordion: boolean;\r\n id: string;\r\n remove_section: boolean;\r\n form_switcher_label?: string;\r\n form_switcher_name?: string;\r\n is_section_field?: boolean;\r\n section_type?: string;\r\n switcher_forms?: any;\r\n members: FormMember[];\r\n}\r\n\r\nexport interface TabData {\r\n tab_order: number;\r\n data: FormSection[];\r\n}\r\n\r\nexport interface ProcessedData {\r\n tab?: TabData[];\r\n section?: FormSection[];\r\n tabsData?: TabData[];\r\n}\r\n\r\n// Constants for module paths\r\nconst MODULE_PATHS = {\r\n accounting: PathnameAccounting.FORMS,\r\n inventory: PathnameInventory.FORMS,\r\n manufacturing: PathnameManufacturing.FORMS,\r\n procurement: PathnamePurchase.FORMS,\r\n crm: PathnameCrm.FORMS,\r\n rental: PathnameRental.FORMS,\r\n user: PathnameUsers.FORMS,\r\n hrms: PathnameHrms.FORMS,\r\n} as const;\r\n\r\nexport type ModuleType = keyof typeof MODULE_PATHS;\r\n\r\n// Helper function to format text (converts snake_case to Title Case)\r\nexport const formatText = (text: string): string => {\r\n return text\r\n .split('_')\r\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\r\n .join(' ');\r\n};\r\n\r\n// Helper function to get redirection path\r\nconst getRedirectionPath = (currentModule: string): string => {\r\n if (!isValidModule(currentModule)) {\r\n throw new Error(`Invalid module: ${currentModule}`);\r\n }\r\n return MODULE_PATHS[currentModule as ModuleType];\r\n};\r\n\r\n// Type guard for module validation\r\nconst isValidModule = (module: string): module is ModuleType => {\r\n return module in MODULE_PATHS;\r\n};\r\n\r\n// Helper function to create default table columns\r\nexport const createDefaultTableColumns = (): TableColumn[] => [\r\n { header: \"Column 1\", accessorKey: \"column_1\", visible: true },\r\n { header: \"Column 2\", accessorKey: \"column_2\", visible: true },\r\n];\r\n\r\n// Helper function to process table columns\r\nexport const processTableColumns = (\r\n member: FormMember,\r\n formBuilder: any\r\n): TableColumn[] => {\r\n // Return existing columns if they exist\r\n if (member.table_columns?.length) {\r\n return member.table_columns;\r\n }\r\n\r\n // Check if table exists and has fields\r\n if (!member.table || !formBuilder.fields?.[member.table]) {\r\n return createDefaultTableColumns();\r\n }\r\n\r\n const fields = formBuilder.fields[member.table];\r\n if (!Array.isArray(fields) || fields.length === 0) {\r\n return createDefaultTableColumns();\r\n }\r\n\r\n return fields.map((field: any, index: number) => ({\r\n header: formatText(field.field),\r\n accessorKey: field.field,\r\n visible: index <= 3, // Show first 4 columns by default\r\n }));\r\n};\r\n\r\n// Helper function to process members\r\nexport const processMembers = (\r\n sections: FormSection[],\r\n formBuilder: any\r\n): FormMember[] => {\r\n return sections.flatMap((section) =>\r\n section.members.map((member) => {\r\n if (member.field_type === \"table\") {\r\n return {\r\n ...member,\r\n table_columns: processTableColumns(member, formBuilder),\r\n };\r\n }\r\n return { ...member };\r\n })\r\n );\r\n};\r\n\r\n// Helper function to extract sections data\r\nexport const extractSections = (sections: FormSection[]): Omit<FormSection, 'members'>[] => {\r\n return sections.map(({\r\n field_type,\r\n label,\r\n is_accordion,\r\n id,\r\n remove_section,\r\n form_switcher_label,\r\n form_switcher_name,\r\n is_section_field,\r\n section_type,\r\n switcher_forms,\r\n }) => ({\r\n field_type,\r\n label,\r\n is_accordion,\r\n id,\r\n remove_section,\r\n form_switcher_label,\r\n form_switcher_name,\r\n is_section_field,\r\n section_type,\r\n switcher_forms,\r\n }));\r\n};\r\n\r\n// Main processing function\r\nconst processData = (\r\n data: ProcessedData,\r\n activeTabId: number = 0,\r\n formBuilder: any,\r\n tabsData: TabData[] | null,\r\n // Callback functions\r\n callbacks: {\r\n removeSection: () => void;\r\n remove: () => void;\r\n setTabsData: (data: TabData[]) => void;\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n): void => {\r\n const { removeSection, remove, setTabsData, append, appendSection } = callbacks;\r\n\r\n try {\r\n // Clear existing data\r\n removeSection();\r\n remove();\r\n\r\n if (data.tab) {\r\n processTabData(data.tab, activeTabId, formBuilder, callbacks);\r\n } else if (data.section) {\r\n processSectionData(data.section, formBuilder, callbacks);\r\n } else if (data.tabsData && tabsData) {\r\n processExistingTabsData(tabsData, activeTabId, callbacks);\r\n } else {\r\n throw new Error(\"Invalid data format: Missing required properties (tab, section, or tabsData)\");\r\n }\r\n } catch (error) {\r\n console.error(\"Error processing data:\", error);\r\n // You might want to show a user-friendly error message instead of alert\r\n alert(error instanceof Error ? error.message : \"An error occurred while processing data\");\r\n }\r\n};\r\n\r\n// Process tab data\r\nconst processTabData = (\r\n tabs: TabData[],\r\n activeTabId: number,\r\n formBuilder: any,\r\n callbacks: {\r\n setTabsData: (data: TabData[]) => void;\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n): void => {\r\n const { setTabsData, append, appendSection } = callbacks;\r\n\r\n setTabsData(tabs);\r\n\r\n const activeTab = tabs.find(tab => tab.tab_order === activeTabId + 1);\r\n if (!activeTab?.data) {\r\n console.warn(`No active tab found for tab order: ${activeTabId + 1}`);\r\n return;\r\n }\r\n\r\n const sections = extractSections(activeTab.data);\r\n const members = processMembers(activeTab.data, formBuilder);\r\n\r\n append(members);\r\n appendSection(sections);\r\n};\r\n\r\n// Process section data\r\nconst processSectionData = (\r\n sections: FormSection[],\r\n formBuilder: any,\r\n callbacks: {\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n): void => {\r\n const { append, appendSection } = callbacks;\r\n\r\n const extractedSections = extractSections(sections);\r\n const members = processMembers(sections, formBuilder);\r\n\r\n append(members);\r\n appendSection(extractedSections);\r\n};\r\n\r\n// Process existing tabs data\r\nconst processExistingTabsData = (\r\n tabsData: TabData[],\r\n activeTabId: number,\r\n callbacks: {\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n): void => {\r\n const { append, appendSection } = callbacks;\r\n\r\n const activeTab = tabsData.find(tab => tab.tab_order === activeTabId + 1);\r\n if (!activeTab?.data) {\r\n console.warn(`No active tab found for tab order: ${activeTabId + 1}`);\r\n return;\r\n }\r\n\r\n const sections = extractSections(activeTab.data);\r\n const members = activeTab.data.flatMap(section =>\r\n section.members.map(member => ({ ...member }))\r\n );\r\n\r\n if (members.length > 0) append(members);\r\n if (sections.length > 0) appendSection(sections);\r\n};\r\n\r\n// Custom hook for form data processing\r\nexport const useFormDataProcessor = (\r\n formBuilder: any,\r\n tabsData: TabData[],\r\n activeTabValue: number,\r\n callbacks: {\r\n removeSection: () => void;\r\n remove: () => void;\r\n setTabsData: (data: TabData[]) => void;\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n) => {\r\n const { removeSection, remove, append } = callbacks;\r\n\r\n // Memoize the serialized form data to avoid unnecessary re-renders\r\n const serializedFormData = useMemo(() =>\r\n JSON.stringify(formBuilder?.formData),\r\n [formBuilder?.formData]\r\n );\r\n\r\n // Memoize the initial data processing\r\n const initialData = useMemo(() => {\r\n if (!formBuilder?.formData?.length) return null;\r\n\r\n try {\r\n return formBuilderDeConversion(formBuilder.formData);\r\n } catch (error) {\r\n console.error('Error processing form data:', error);\r\n return null;\r\n }\r\n }, [serializedFormData]);\r\n\r\n useEffect(() => {\r\n // Handle case when there's no initial data\r\n if (!initialData) {\r\n removeSection();\r\n remove();\r\n append([]);\r\n return;\r\n }\r\n\r\n // Determine processing strategy based on available data\r\n try {\r\n if (tabsData.length > 0) {\r\n // Process existing tabs data\r\n processData(\r\n { tabsData: tabsData },\r\n activeTabValue,\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else if (initialData.tab) {\r\n // Process new tab data\r\n processData(\r\n initialData,\r\n activeTabValue,\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else if (initialData.section) {\r\n // Process section data\r\n processData(\r\n initialData,\r\n 0, // No active tab for section-only data\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else {\r\n console.warn('No valid data structure found in initialData');\r\n removeSection();\r\n remove();\r\n append([]);\r\n }\r\n } catch (error) {\r\n console.error('Error in form data processing:', error);\r\n // Reset to clean state on error\r\n removeSection();\r\n remove();\r\n append([]);\r\n }\r\n }, [activeTabValue, serializedFormData, tabsData.length, initialData, callbacks, formBuilder]);\r\n\r\n return { initialData };\r\n};\r\n\r\n// Alternative: Direct useEffect implementation (if you prefer not to use custom hook)\r\nexport const useFormDataEffect = (\r\n formBuilder: any,\r\n tabsData: TabData[],\r\n activeTabValue: number = 0,\r\n callbacks: {\r\n removeSection: () => void;\r\n remove: () => void;\r\n setTabsData: (data: TabData[]) => void;\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n) => {\r\n const { removeSection, remove, append } = callbacks;\r\n\r\n useEffect(() => {\r\n let initialData: ProcessedData | null = null;\r\n\r\n // Process initial data\r\n if (formBuilder?.formData?.length) {\r\n try {\r\n initialData = formBuilderDeConversion(formBuilder.formData);\r\n } catch (error) {\r\n console.error('Error converting form data:', error);\r\n }\r\n }\r\n\r\n // Handle empty initial data\r\n if (!initialData) {\r\n removeSection();\r\n remove();\r\n append([]);\r\n return;\r\n }\r\n\r\n // Process data based on available structure\r\n try {\r\n if (tabsData.length > 0) {\r\n processData(\r\n { tabsData: tabsData },\r\n activeTabValue,\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else if (initialData.tab) {\r\n processData(\r\n initialData,\r\n activeTabValue,\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else if (initialData.section) {\r\n processData(\r\n initialData,\r\n 0,\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else {\r\n console.warn('Invalid data structure in initialData');\r\n removeSection();\r\n remove();\r\n append([]);\r\n }\r\n } catch (error) {\r\n console.error('Error processing form data:', error);\r\n // Reset to clean state on error\r\n removeSection();\r\n remove();\r\n append([]);\r\n }\r\n }, [activeTabValue, JSON.stringify(formBuilder?.formData), tabsData.length]);\r\n};\r\n\r\n// Usage example:\r\n/*\r\n// Option 1: Using custom hook\r\nconst { initialData } = useFormDataProcessor(\r\n formBuilder,\r\n tabsData,\r\n activeTabValue,\r\n {\r\n removeSection,\r\n remove,\r\n setTabsData,\r\n append,\r\n appendSection\r\n }\r\n);\r\n\r\n// Option 2: Using direct useEffect\r\nuseFormDataEffect(\r\n formBuilder,\r\n tabsData,\r\n activeTabValue,\r\n {\r\n removeSection,\r\n remove,\r\n setTabsData,\r\n append,\r\n appendSection\r\n }\r\n);\r\n*/\r\n\r\n// Path generation utility (separate from the effect)\r\nexport const generateModulePath = (currentModule: string): string => {\r\n try {\r\n const redirectionPath = getRedirectionPath(currentModule);\r\n return `/dashboard/${currentModule}${redirectionPath}`;\r\n } catch (error) {\r\n console.error('Error generating module path:', error);\r\n throw error;\r\n }\r\n};\r\n\r\nexport const generateCustomFormPath = (currentModule,redirectionPath): any => {\r\n try {\r\n return `/dashboard/${currentModule}${redirectionPath}`;\r\n } catch (error) {\r\n console.error('Error generating module path:', error);\r\n throw error;\r\n }\r\n};","// React imports\r\nimport { useState, useEffect, useMemo, useCallback } from \"react\";\r\n\r\n// React Router imports\r\nimport { useLocation, useNavigate } from \"react-router-dom\";\r\n\r\n// React Hook Form imports\r\nimport { useForm, useFieldArray } from \"react-hook-form\";\r\n\r\n// Material UI imports\r\nimport { Box, FormControlLabel, Grid, RadioGroup } from \"@mui/material\";\r\nimport { Add } from \"@mui/icons-material\";\r\n\r\n// Third-party imports\r\nimport { DndProvider } from \"react-dnd\";\r\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\r\nimport { MRT_ColumnDef, MRT_RowData } from \"material-react-table\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\n\r\n// ERP Common imports\r\nimport DynamicSectionHOC from \"@/components/form-control/form-builder/form-builder-element/section\";\r\nimport Button from \"@/components/form-control/form-builder/form-builder-element/button\";\r\nimport TabBar from \"@/components/tabs/tabs\";\r\nimport images from \"@/assets/images\";\r\nimport { Pathname } from \"@/constants\";\r\nimport FormHeader from \"@/components/form-header/form-header\";\r\nimport Typography from \"@/components/typography/typography\";\r\nimport formBuilderConversion from \"@/utils/form-builder-conversion\";\r\nimport { useAppDispatch, useAppSelector } from \"@/redux/hooks\";\r\nimport { formatLabel } from \"@/utils/format-text\";\r\nimport Toast from \"@/components/toast/toast\";\r\nimport Radio from \"@/components/radio/radio\";\r\nimport { SECTION_TYPES } from \"@/utils/constant\";\r\nimport ErpLoader from \"@/components/loaders/erp-loader\";\r\nimport { getErrorMessage } from \"@/utils/common\";\r\nimport FormParser from \"@/components/form-control/form-parser/form-parser\";\r\nimport { Eye, EyeOff } from \"@/components/icons\";\r\n\r\n// Redux actions\r\nimport {\r\n patchFormDataById,\r\n getFormDataById,\r\n getFieldsByFormId,\r\n} from \"../form-builder/redux/actionCreator\";\r\n\r\n// Local imports\r\nimport {\r\n IProperty,\r\n ISectionProperty,\r\n ISelectProperty,\r\n element,\r\n} from \"./field_properties\";\r\nimport TextEditForm from \"./element-edit-forms/text\";\r\nimport SelectEditForm from \"./element-edit-forms/select\";\r\nimport SectionEditForm from \"./element-edit-forms/section\";\r\nimport CheckboxEditForm from \"./element-edit-forms/checkbox\";\r\nimport TableEditForm from \"./element-edit-forms/table-form\";\r\nimport FormFields from \"./form-fields\";\r\nimport { generateModulePath, useFormDataEffect } from \"./utils/common\";\r\nimport \"./custom-form.scss\";\r\n\r\nexport interface IElementJson extends IProperty {\r\n type: string;\r\n}\r\n\r\nconst FIELD_TYPES = {\r\n TEXT: 'text',\r\n NUMBER: 'number',\r\n EMAIL: 'email',\r\n PHONE: 'phone',\r\n SELECT: 'select',\r\n DATE: 'date',\r\n TIME: 'time',\r\n URL: 'url',\r\n CURRENCY: 'currency',\r\n FILE: 'file',\r\n GEO_LOCATION: 'geoLocation',\r\n IMAGE: 'image',\r\n SECTION: 'section',\r\n INFO: 'info',\r\n RELATION: 'relation',\r\n CHECKBOX: 'checkbox',\r\n TOGGLE_BUTTON: 'toggleButton',\r\n TAGS_INPUT: 'tagsInput'\r\n} as const;\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\nconst DEFAULT_COLUMN_WIDTH = 2;\r\nconst DEFAULT_TAB_TITLE = 'data';\r\n\r\nconst isValidNumber = (value: any): boolean => !isNaN(Number(value)) && isFinite(Number(value));\r\nconst deepClone = (obj: T): T => JSON.parse(JSON.stringify(obj));\r\nconst generateUniqueId = (separator = ''): { uniqueStringId: string } => {\r\n return { uniqueStringId: `${Date.now()}${separator}${Math.random().toString(36).substr(2, 9)}` };\r\n};\r\n\r\n\r\nexport function CustomForm({redirectionPath}:any) {\r\n const { t } = useTranslation();\r\n const dispatch = useAppDispatch();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const rowData = location.state ?? [];\r\n\r\n const formBuilder = useAppSelector((state) => state.formBuilder);\r\n\r\n const { control } = useForm({\r\n reValidateMode: \"onBlur\",\r\n });\r\n\r\n const {\r\n fields: members,\r\n append,\r\n remove,\r\n update,\r\n move,\r\n insert,\r\n } = useFieldArray({\r\n control,\r\n name: \"members\",\r\n });\r\n\r\n const {\r\n fields: section,\r\n append: appendSection,\r\n remove: removeSection,\r\n update: updateSection,\r\n } = useFieldArray({\r\n control,\r\n name: \"section\",\r\n });\r\n\r\n const [selectedHoc, setSelectedHoc] = useState(\"\");\r\n const [activeSection, setActiveSection] = useState<number>();\r\n const [activeMember, setActiveMember] = useState<number>();\r\n\r\n const [formJSON, setFormJSON] = useState<object[]>([]);\r\n const [elementJSON, setElementJSON] = useState<any>(null);\r\n const [positionEditedElement, setPositionEditedElement] = useState<\r\n number | undefined\r\n >();\r\n\r\n const [sectionFormJSON, setSectionFormJSON] = useState<object[]>([]);\r\n const [sectionJSON, setSectionJSON] = useState<any>({});\r\n const [sectionPositionEditedElement, setSectionPositionEditedElement] =\r\n useState<number | undefined>();\r\n const [removeSectionActionPerformed, setRemoveSectionActionPerformed] =\r\n useState(false);\r\n const [removeSectionMembersPerformed, setRemoveSectionMembersPerformed] =\r\n useState(false);\r\n const [removeSectionPosition, setRemoveSectionPosition] = useState<\r\n number | undefined\r\n >();\r\n const [initialLoading, setInitialLoading] = useState(true);\r\n const [tabsData, setTabsData] = useState<any[]>([]);\r\n const [activeTabValue, setActiveTabValue] = useState<number | undefined>(0);\r\n\r\n const [elementSwap, setElementSwap] = useState(false);\r\n const [modifyAccordion, setModifyAccordion] = useState(false);\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n const [previewFieldsData, setPreviewFields] = useState<any>(null);\r\n const [_, setFormParserMethods] = useState<any>();\r\n\r\n let elementPerColumn: any;\r\n\r\n const currentModule = location.pathname.split('/')[2]\r\n\r\n const path =redirectionPath?redirectionPath: generateModulePath(currentModule)\r\n\r\n useFormDataEffect(\r\n formBuilder,\r\n tabsData,\r\n activeTabValue,\r\n {\r\n removeSection,\r\n remove,\r\n setTabsData,\r\n append,\r\n appendSection\r\n }\r\n );\r\n\r\n const pickPropertyEditForm = useCallback((type: string): React.ReactElement => {\r\n try {\r\n if (!type || typeof type !== 'string') {\r\n console.warn('Invalid field type provided to pickPropertyEditForm');\r\n return <div className=\"text-gray-500 p-4\">Select a field to edit</div>;\r\n }\r\n\r\n const normalizedType = type.toLowerCase().trim();\r\n\r\n // Define form type groups for better maintainability\r\n const formGroups = {\r\n text: [\r\n 'text', 'number', 'email', 'phone', 'date', 'time',\r\n 'url', 'currency', 'file', 'geolocation', 'image',\r\n 'relation', 'info', 'tagsinput'\r\n ],\r\n select: ['select'],\r\n section: ['section'],\r\n checkbox: ['checkbox', 'togglebutton', 'radiobutton'],\r\n table: ['table']\r\n };\r\n\r\n // Common props for reusability\r\n const commonTextProps = {\r\n element: elementJSON,\r\n handlePropertyValueUpdate,\r\n handleWidthChange,\r\n handleColumnSelect,\r\n fields: formBuilder?.fields || []\r\n };\r\n\r\n const commonSelectProps = {\r\n element: elementJSON,\r\n handlePropertyValueUpdate,\r\n handleSelectOptionValueUpdate,\r\n handleWidthChange,\r\n handleColumnSelect\r\n };\r\n\r\n // Determine form type and render appropriate component\r\n if (formGroups.text.includes(normalizedType)) {\r\n return (\r\n <TextEditForm\r\n {...commonTextProps}\r\n key={`text-form-${elementJSON?.id || 'default'}`}\r\n />\r\n );\r\n }\r\n\r\n if (formGroups.select.includes(normalizedType)) {\r\n return (\r\n <SelectEditForm\r\n {...commonSelectProps}\r\n key={`select-form-${elementJSON?.id || 'default'}`}\r\n />\r\n );\r\n }\r\n\r\n if (formGroups.section.includes(normalizedType)) {\r\n return (\r\n <SectionEditForm\r\n element={sectionJSON}\r\n handlePropertyValueUpdate={handleSectionPropertyValueUpdate}\r\n key={`section-form-${sectionJSON?.id || 'default'}`}\r\n />\r\n );\r\n }\r\n\r\n if (formGroups.checkbox.includes(normalizedType)) {\r\n return (\r\n <CheckboxEditForm\r\n {...commonSelectProps}\r\n key={`checkbox-form-${elementJSON?.id || 'default'}`}\r\n />\r\n );\r\n }\r\n\r\n if (formGroups.table.includes(normalizedType)) {\r\n return (\r\n <TableEditForm\r\n element={elementJSON}\r\n handlePropertyValueUpdate={handlePropertyValueUpdate}\r\n handleColumnsUpdate={handleColumnsUpdate}\r\n fields={formBuilder?.fields || []}\r\n key={`table-form-${elementJSON?.id || 'default'}`}\r\n />\r\n );\r\n }\r\n\r\n // Default fallback with helpful message\r\n console.warn(`Unknown field type: ${type}`);\r\n return (\r\n <div className=\"text-gray-500 p-4 border border-gray-200 rounded\">\r\n <p className=\"font-medium\">Unknown Field Type</p>\r\n <p className=\"text-sm mt-1\">\r\n Field type \"{type}\" is not supported. Please select a valid field to edit.\r\n </p>\r\n </div>\r\n );\r\n\r\n } catch (error) {\r\n console.error('Error in pickPropertyEditForm:', error);\r\n return (\r\n <div className=\"text-red-500 p-4 border border-red-200 rounded bg-red-50\">\r\n <p className=\"font-medium\">Error Loading Form</p>\r\n <p className=\"text-sm mt-1\">\r\n There was an error loading the property edit form. Please try again.\r\n </p>\r\n </div>\r\n );\r\n }\r\n }, [elementJSON, sectionJSON, formBuilder]);\r\n\r\n const addNewSection = useCallback((): void => {\r\n try {\r\n if (!element?.section) {\r\n console.error('Element section template is not available');\r\n return;\r\n }\r\n\r\n const { uniqueStringId: id } = generateUniqueId('-');\r\n const newSection: ISectionProperty = {\r\n ...deepClone(element.section),\r\n id: id,\r\n };\r\n\r\n // Update switcher forms with new ID if they exist\r\n if (newSection.switcher_forms) {\r\n newSection.switcher_forms = newSection.switcher_forms.map(form => ({\r\n ...form,\r\n id: generateUniqueId('-').uniqueStringId\r\n }));\r\n }\r\n\r\n const newSectionIndex = section.length;\r\n\r\n appendSection(newSection);\r\n setActiveSection(newSectionIndex);\r\n setSelectedHoc('section');\r\n\r\n const sectionData: ISectionProperty = {\r\n field_type: newSection.field_type,\r\n section_type: newSection.section_type,\r\n switcher_forms: newSection.switcher_forms,\r\n form_switcher_label: newSection.form_switcher_label,\r\n form_switcher_name: newSection.form_switcher_name,\r\n label: newSection.label,\r\n is_accordion: newSection.is_accordion,\r\n id: newSection.id ?? newSectionIndex,\r\n };\r\n\r\n setSectionJSON(sectionData);\r\n setSectionPositionEditedElement(newSectionIndex);\r\n pickPropertyEditForm(newSection.field_type);\r\n } catch (error) {\r\n console.error('Error adding new section:', error);\r\n }\r\n }, [element, section, appendSection, setActiveSection, setSelectedHoc, setSectionJSON, setSectionPositionEditedElement, pickPropertyEditForm]);\r\n\r\n /**\r\n * Enhanced handleAddTab with better validation and error handling\r\n */\r\n const handleAddTab = useCallback((): void => {\r\n try {\r\n const formWithMembers = deepClone(sectionFormJSON);\r\n\r\n // Populate sections with their members\r\n formWithMembers.forEach((section: ISectionProperty, sectionIndex: number) => {\r\n section.members = members.filter(\r\n (member: IProperty) => member?.section_order === sectionIndex\r\n );\r\n });\r\n\r\n const hasSystemMembers = formWithMembers.some((section: ISectionProperty) =>\r\n section.members?.some((member: IProperty) => Boolean(member?.is_system_field))\r\n );\r\n\r\n const shouldRemoveTab = !tabsData?.length && hasSystemMembers;\r\n\r\n const newTab: TabData = {\r\n tab_order: tabsData.length + 1,\r\n title: DEFAULT_TAB_TITLE,\r\n remove_tab: shouldRemoveTab,\r\n data: tabsData?.length ? [] : formWithMembers\r\n };\r\n\r\n setTabsData(prevTabs => [...prevTabs, newTab]);\r\n } catch (error) {\r\n console.error('Error adding new tab:', error);\r\n }\r\n }, [sectionFormJSON, members, tabsData, setTabsData]);\r\n\r\n const handleEditTabTitle = useCallback((tabId: number, newTitle: string): void => {\r\n try {\r\n if (!isValidNumber(tabId) || !newTitle?.trim()) {\r\n console.error('Invalid tab ID or title provided');\r\n return;\r\n }\r\n\r\n setTabsData(prevTabs =>\r\n prevTabs.map((tab: TabData) =>\r\n tab.tab_order === tabId ? { ...tab, title: newTitle.trim() } : tab\r\n )\r\n );\r\n } catch (error) {\r\n console.error('Error editing tab title:', error);\r\n }\r\n }, [setTabsData]);\r\n\r\n const handleRemoveTab = useCallback((id: number): void => {\r\n try {\r\n if (!isValidNumber(id)) {\r\n console.error('Invalid tab ID provided');\r\n return;\r\n }\r\n\r\n const filteredTabs = tabsData.filter((tab: TabData) => tab.tab_order !== id);\r\n\r\n // Reorder remaining tabs\r\n const reorderedTabs = filteredTabs.map((tab: TabData) => ({\r\n ...tab,\r\n tab_order: tab.tab_order > id ? tab.tab_order - 1 : tab.tab_order,\r\n }));\r\n\r\n setTabsData(reorderedTabs);\r\n if (activeTabValue == id) {\r\n setActiveTabValue(reorderedTabs?.length - 1)\r\n }\r\n\r\n if (reorderedTabs.length > 0) {\r\n const activeTab = reorderedTabs.find(\r\n (tab: TabData) => tab.tab_order === (activeTabValue ?? 0) + 1\r\n );\r\n\r\n if (activeTab?.data) {\r\n const sections = activeTab.data.map(\r\n ({ field_type, label, is_accordion, id, remove_section }) => ({\r\n field_type,\r\n label,\r\n is_accordion,\r\n id,\r\n remove_section,\r\n })\r\n );\r\n\r\n const membersList = activeTab.data.flatMap((section: ISectionProperty) =>\r\n section.members?.map((member: IProperty) => ({ ...member })) || []\r\n );\r\n\r\n // Clear current data and add new data\r\n remove();\r\n removeSection();\r\n membersList.forEach(member => append(member));\r\n sections.forEach(section => appendSection(section));\r\n }\r\n } else {\r\n // Clear all data if no tabs remain\r\n remove();\r\n removeSection();\r\n }\r\n } catch (error) {\r\n console.error('Error removing tab:', error);\r\n }\r\n }, [tabsData, activeTabValue, setTabsData, remove, removeSection, append, appendSection]);\r\n\r\n const handleElementSelection = useCallback((e: React.MouseEvent<HTMLElement>): void => {\r\n try {\r\n const target = e.target as HTMLElement;\r\n const elementPositionIndex = target.dataset.position;\r\n\r\n if (!elementPositionIndex || !isValidNumber(elementPositionIndex)) {\r\n console.error('Invalid element position index');\r\n return;\r\n }\r\n\r\n const positionIndex = Number(elementPositionIndex);\r\n\r\n if (positionIndex < 0 || positionIndex >= formJSON.length) {\r\n console.error('Element position index out of bounds');\r\n return;\r\n }\r\n\r\n setActiveMember(positionIndex);\r\n\r\n const elementDetails = deepClone(formJSON[positionIndex]);\r\n setPositionEditedElement(positionIndex);\r\n setElementJSON(elementDetails);\r\n setSelectedHoc('element');\r\n } catch (error) {\r\n console.error('Error selecting element:', error);\r\n }\r\n }, [formJSON, setActiveMember, setPositionEditedElement, setElementJSON, setSelectedHoc]);\r\n\r\n const handleSectionSelection = useCallback((e: React.MouseEvent<HTMLElement>): void => {\r\n try {\r\n const target = e.target as HTMLElement;\r\n const sectionPositionIndex = target.dataset.position;\r\n\r\n if (!sectionPositionIndex || !isValidNumber(sectionPositionIndex)) {\r\n console.error('Invalid section position index');\r\n return;\r\n }\r\n\r\n const positionIndex = Number(sectionPositionIndex);\r\n\r\n if (positionIndex < 0 || positionIndex >= sectionFormJSON.length) {\r\n console.error('Section position index out of bounds');\r\n return;\r\n }\r\n\r\n setActiveSection(positionIndex);\r\n\r\n const sectionDetails = deepClone(sectionFormJSON[positionIndex]);\r\n setSectionPositionEditedElement(positionIndex);\r\n setSectionJSON(sectionDetails);\r\n setSelectedHoc('section');\r\n } catch (error) {\r\n console.error('Error selecting section:', error);\r\n }\r\n }, [sectionFormJSON, setActiveSection, setSectionPositionEditedElement, setSectionJSON, setSelectedHoc]);\r\n\r\n const handleAddMember = useCallback((\r\n e: React.SyntheticEvent<HTMLElement>,\r\n otherProperties?: Record<string, any>\r\n ): void => {\r\n try {\r\n const target = e.currentTarget as HTMLElement;\r\n const sectionPositionIndex = target?.dataset?.position;\r\n\r\n if (sectionPositionIndex === undefined || !isValidNumber(sectionPositionIndex)) {\r\n console.error('Invalid section position index for adding member');\r\n return;\r\n }\r\n\r\n const positionIndex = Number(sectionPositionIndex);\r\n\r\n if (positionIndex < 0) {\r\n console.error('Section position index cannot be negative');\r\n return;\r\n }\r\n\r\n if (!element?.text) {\r\n console.error('Element text template is not available');\r\n return;\r\n }\r\n\r\n const newMember: IProperty = {\r\n ...deepClone(element.text),\r\n ...otherProperties,\r\n section_order: positionIndex,\r\n type: 'custom',\r\n is_new: true,\r\n custom_width: Math.floor(DEFAULT_GRID_COLUMNS / DEFAULT_COLUMN_WIDTH),\r\n is_fullwidth: false,\r\n is_system_field: Boolean(otherProperties?.is_system_field),\r\n id: generateUniqueId().uniqueStringId,\r\n };\r\n\r\n setActiveSection(positionIndex);\r\n append(newMember);\r\n\r\n const elementPositionIndex = members.length;\r\n setActiveMember(elementPositionIndex);\r\n setSelectedHoc('element');\r\n setPositionEditedElement(elementPositionIndex);\r\n setElementJSON(newMember);\r\n pickPropertyEditForm(newMember.field_type);\r\n } catch (error) {\r\n console.error('Error adding new member:', error);\r\n }\r\n }, [element, members, setActiveSection, append, setActiveMember, setSelectedHoc, setPositionEditedElement, setElementJSON, pickPropertyEditForm]);\r\n\r\n\r\n const handleSectionPropertyValueUpdate = useCallback((\r\n e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>,\r\n overrideValue?: any\r\n ): void => {\r\n try {\r\n const { name, type, checked, value } = e.target;\r\n\r\n if (!name) {\r\n console.error('Property name is required for update');\r\n return;\r\n }\r\n\r\n const updatedValue = overrideValue !== undefined ? overrideValue : (type === 'checkbox' ? checked : value);\r\n\r\n // Only update if value actually changed\r\n if (sectionJSON[name] !== updatedValue) {\r\n setSectionJSON(prev => ({ ...prev, [name]: updatedValue }));\r\n }\r\n } catch (error) {\r\n console.error('Error updating section property:', error);\r\n }\r\n }, [sectionJSON, setSectionJSON]);\r\n\r\n const handleWidthChange = useCallback((newCustomWidth: number): void => {\r\n try {\r\n if (!isValidNumber(newCustomWidth) || newCustomWidth < 1 || newCustomWidth > DEFAULT_GRID_COLUMNS) {\r\n console.error('Invalid width value provided');\r\n return;\r\n }\r\n\r\n setElementJSON(prevData => ({\r\n ...prevData,\r\n custom_width: newCustomWidth,\r\n }));\r\n } catch (error) {\r\n console.error('Error updating width:', error);\r\n }\r\n }, [setElementJSON]);\r\n\r\n const handleColumnSelect = useCallback((e: React.ChangeEvent<HTMLSelectElement>): void => {\r\n try {\r\n const columnValue = Number(e.target.value);\r\n\r\n if (!isValidNumber(columnValue) || columnValue <= 0) {\r\n console.error('Invalid column value provided');\r\n return;\r\n }\r\n\r\n const elementPerColumn = Math.floor(DEFAULT_GRID_COLUMNS / columnValue);\r\n\r\n if (elementPerColumn <= 0) {\r\n console.error('Calculated element per column is invalid');\r\n return;\r\n }\r\n\r\n // Batch update all members\r\n members.forEach((field: IProperty, index: number) => {\r\n update(index, { ...field, custom_width: elementPerColumn });\r\n });\r\n } catch (error) {\r\n console.error('Error updating column selection:', error);\r\n }\r\n }, [members, update]);\r\n\r\n const handlePropertyValueUpdate = useCallback((\r\n e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>,\r\n numberValue?: number,\r\n val?: string,\r\n fieldType?: keyof typeof FIELD_TYPES\r\n ): void => {\r\n try {\r\n const getValue = (): any => {\r\n if (fieldType) return fieldType;\r\n if (val !== undefined) return val;\r\n if (numberValue !== undefined) return numberValue;\r\n return e?.target?.value;\r\n };\r\n\r\n const value = getValue();\r\n const elementJSONCopy = deepClone(elementJSON);\r\n\r\n if (e?.target?.name) {\r\n elementJSONCopy[e.target.name] = e.target.type === 'checkbox' ? e.target.checked : value;\r\n }\r\n // Only update if there's an actual change\r\n if (fieldType) {\r\n const { uniqueStringId: uniqueId } = generateUniqueId();\r\n const copyOfUpdatedElement: IProperty = {\r\n ...element[fieldType],\r\n section_form_id: elementJSONCopy?.section_form_id,\r\n is_form_switcher_section: elementJSONCopy?.is_form_switcher_section,\r\n section_order: elementJSONCopy.section_order,\r\n id: uniqueId,\r\n type: 'custom',\r\n is_system_field: Boolean(elementJSONCopy?.is_system_field),\r\n is_new: true,\r\n column_width: elementJSONCopy?.column_width || 6,\r\n custom_width: elementJSONCopy?.custom_width || 6\r\n };\r\n setElementJSON(copyOfUpdatedElement);\r\n } else if (JSON.stringify(elementJSON) !== JSON.stringify(elementJSONCopy)) {\r\n setElementJSON({ ...elementJSON, ...elementJSONCopy });\r\n }\r\n } catch (error) {\r\n console.error('Error updating property value:', error);\r\n }\r\n }, [elementJSON, element, setElementJSON]);\r\n\r\n const handleSelectOptionValueUpdate = useCallback((options: any[]): void => {\r\n try {\r\n if (!Array.isArray(options)) {\r\n console.error('Options must be an array');\r\n return;\r\n }\r\n\r\n const elementJSONCopy = deepClone(elementJSON);\r\n elementJSONCopy.options = [...options];\r\n const { uniqueStringId: uniqueId } = generateUniqueId('-');\r\n\r\n if (JSON.stringify(elementJSON.options) !== JSON.stringify(options)) {\r\n setElementJSON({ ...elementJSON, ...elementJSONCopy, id: uniqueId });\r\n }\r\n } catch (error) {\r\n console.error('Error updating select options:', error);\r\n }\r\n }, [elementJSON, setElementJSON]);\r\n\r\n const handleColumnsUpdate = useCallback((columns: MRT_ColumnDef<MRT_RowData>[]): void => {\r\n try {\r\n if (!Array.isArray(columns)) {\r\n console.error('Columns must be an array');\r\n return;\r\n }\r\n\r\n const elementJSONCopy = deepClone(elementJSON);\r\n elementJSONCopy.table_columns = [...columns];\r\n const { uniqueStringId: uniqueId } = generateUniqueId('-');\r\n\r\n if (JSON.stringify(elementJSON.table_columns) !== JSON.stringify(columns)) {\r\n setElementJSON({ ...elementJSON, ...elementJSONCopy, id: uniqueId });\r\n }\r\n } catch (error) {\r\n console.error('Error updating table columns:', error);\r\n }\r\n }, [elementJSON, setElementJSON]);\r\n\r\n const handleRemoveSection = useCallback((sectionIndex: number): void => {\r\n try {\r\n if (!isValidNumber(sectionIndex) || sectionIndex < 0 || sectionIndex >= section.length) {\r\n console.error('Invalid section index for removal');\r\n return;\r\n }\r\n\r\n setRemoveSectionPosition(sectionIndex);\r\n removeSection(sectionIndex);\r\n\r\n // Remove associated members in reverse order to maintain indices\r\n const membersToRemove: number[] = [];\r\n members.forEach((member: IProperty, index: number) => {\r\n if (member?.section_order === sectionIndex) {\r\n membersToRemove.push(index);\r\n }\r\n });\r\n\r\n // Remove members in reverse order to maintain correct indices\r\n membersToRemove.reverse().forEach(memberIndex => {\r\n remove(memberIndex);\r\n });\r\n\r\n setRemoveSectionActionPerformed(true);\r\n } catch (error) {\r\n console.error('Error removing section:', error);\r\n }\r\n }, [section, members, setRemoveSectionPosition, removeSection, remove, setRemoveSectionActionPerformed]);\r\n\r\n const handleMakeAccordion = useCallback((sectionIndex: number): void => {\r\n try {\r\n if (!isValidNumber(sectionIndex) || sectionIndex < 0 || sectionIndex >= section.length) {\r\n console.error('Invalid section index for accordion conversion');\r\n return;\r\n }\r\n\r\n setModifyAccordion(true);\r\n setSectionPositionEditedElement(sectionIndex);\r\n setActiveSection(sectionIndex);\r\n\r\n const copyOfSection: ISectionProperty = {\r\n ...deepClone(section[sectionIndex]),\r\n is_accordion: true\r\n };\r\n\r\n updateSection(sectionIndex, copyOfSection);\r\n setSelectedHoc('section');\r\n setSectionJSON(copyOfSection);\r\n pickPropertyEditForm(copyOfSection.field_type);\r\n } catch (error) {\r\n console.error('Error making section accordion:', error);\r\n }\r\n }, [section, setModifyAccordion, setSectionPositionEditedElement, setActiveSection, updateSection, setSelectedHoc, setSectionJSON, pickPropertyEditForm]);\r\n\r\n const handleTabData = useCallback((): void => {\r\n try {\r\n const formWithMembers = deepClone(sectionFormJSON);\r\n\r\n formWithMembers.forEach((section: ISectionProperty, sectionIndex: number) => {\r\n section.members = members.filter(\r\n (member: IProperty) => member?.section_order === sectionIndex\r\n );\r\n });\r\n\r\n const hasSystemMembers = formWithMembers.some((section: ISectionProperty) =>\r\n section.members?.some((member: IProperty) => Boolean(member?.is_system_field))\r\n );\r\n\r\n const activeTabIndex = Number(activeTabValue);\r\n if (isValidNumber(activeTabIndex) && activeTabIndex >= 0 && activeTabIndex < tabsData.length) {\r\n const updatedTabsData = [...tabsData];\r\n updatedTabsData[activeTabIndex] = {\r\n ...updatedTabsData[activeTabIndex],\r\n data: formWithMembers,\r\n remove_tab: hasSystemMembers,\r\n };\r\n setTabsData(updatedTabsData)\r\n remove();\r\n removeSection();\r\n setActiveMember(undefined);\r\n setSelectedHoc(\"\");\r\n setActiveSection(undefined);\r\n }\r\n } catch (error) {\r\n console.error('Error updating tab data:', error);\r\n }\r\n }, [sectionFormJSON, members, activeTabValue, tabsData, setTabsData]);\r\n\r\n // const handlePreview = () => {\r\n // const formWithMembers = JSON.parse(JSON.stringify(sectionFormJSON));\r\n\r\n // formWithMembers.forEach(\r\n // (section: ISectionProperty, sectionIndex: number) => {\r\n // section.members = members.filter(\r\n // (member: any) => member?.section_order === sectionIndex,\r\n // ) as (IProperty | ISelectProperty)[];\r\n // },\r\n // );\r\n // const state = tabsData?.length\r\n // ? { tab: tabsData }\r\n // : { section: formWithMembers };\r\n\r\n // const FormBuilderConversion = state && formBuilderConversion(state);\r\n\r\n // setPreviewFields(FormBuilderConversion);\r\n // };\r\n\r\n // Option 1: Using useMemo to memoize the expensive computation\r\n const formWithMembers = useMemo(() => {\r\n if (!sectionFormJSON || !members) return null;\r\n\r\n return sectionFormJSON.map((section: ISectionProperty, sectionIndex: number) => ({\r\n ...section,\r\n members: members.filter(\r\n (member: any) => member?.section_order === sectionIndex,\r\n ) as (IProperty | ISelectProperty)[]\r\n }));\r\n }, [sectionFormJSON, members]);\r\n\r\n const previewState = useMemo(() => {\r\n if (!formWithMembers) return null;\r\n\r\n return tabsData?.length\r\n ? { tab: tabsData }\r\n : { section: formWithMembers };\r\n }, [tabsData, formWithMembers]);\r\n\r\n const previewFields = useMemo(() => {\r\n if (!previewState) return null;\r\n return formBuilderConversion(previewState);\r\n }, [previewState]);\r\n\r\n\r\n // Option 2: Optimized handlePreview function using useCallback\r\n const showPreview = useCallback(() => {\r\n if (previewFields) {\r\n setPreviewFields(previewFields);\r\n }\r\n }, [previewFields, setPreviewFields]);\r\n const hidePreview = useCallback(() => {\r\n setPreviewFields(null);\r\n }, []);\r\n\r\n // Enhanced handleFormUpdate with proper error handling and validation\r\n const handleFormUpdate = useCallback(async (): void => {\r\n try {\r\n\r\n\r\n\r\n // Early validation checks\r\n if (!sectionFormJSON || !Array.isArray(sectionFormJSON)) {\r\n console.warn('Invalid sectionFormJSON provided');\r\n return;\r\n }\r\n\r\n if (!members || !Array.isArray(members)) {\r\n console.warn('Invalid members array provided');\r\n return;\r\n }\r\n\r\n if (!rowData?._id) {\r\n console.warn('Missing rowData._id for form update');\r\n return;\r\n }\r\n\r\n // Deep clone with proper error handling\r\n let formWithMembers: IEnhancedSectionProperty[];\r\n\r\n try {\r\n formWithMembers = structuredClone(sectionFormJSON);\r\n } catch (cloneError) {\r\n // Fallback to JSON method if structuredClone is not available\r\n formWithMembers = JSON.parse(JSON.stringify(sectionFormJSON));\r\n }\r\n\r\n // Enhanced member filtering with better type safety and validation\r\n formWithMembers.forEach((section: IEnhancedSectionProperty, sectionIndex: number) => {\r\n // Validate section object\r\n if (!section || typeof section !== 'object') {\r\n console.warn(`Invalid section at index ${sectionIndex}`);\r\n return;\r\n }\r\n\r\n // Filter members with proper type checking and validation\r\n section.members = members.filter((member: IMember) => {\r\n // Validate member object and section_order\r\n return (\r\n member &&\r\n typeof member === 'object' &&\r\n typeof member.section_order === 'number' &&\r\n member.section_order === sectionIndex\r\n );\r\n }) as (IProperty | ISelectProperty)[];\r\n });\r\n\r\n const hasSystemMembers = formWithMembers.some((section: ISectionProperty) =>\r\n section.members?.some((member: IProperty) => Boolean(member?.is_system_field))\r\n );\r\n\r\n const activeTabIndex = Number(activeTabValue);\r\n let updatedTabsData = [...tabsData];\r\n if (isValidNumber(activeTabIndex) && activeTabIndex >= 0 && activeTabIndex < tabsData.length) {\r\n updatedTabsData = [...tabsData];\r\n updatedTabsData[activeTabIndex] = {\r\n ...updatedTabsData[activeTabIndex],\r\n data: formWithMembers,\r\n remove_tab: hasSystemMembers,\r\n };\r\n\r\n setTabsData(updatedTabsData)\r\n }\r\n\r\n // Build state object with proper validation\r\n const state: IFormState = updatedTabsData?.length > 0\r\n ? { tab: updatedTabsData }\r\n : { section: formWithMembers };\r\n\r\n // Validate formBuilderConversion function exists\r\n if (typeof formBuilderConversion !== 'function') {\r\n console.error('formBuilderConversion is not a function');\r\n return;\r\n }\r\n\r\n // Execute conversion with error handling\r\n let formBuilderConversionResult: any;\r\n try {\r\n formBuilderConversionResult = formBuilderConversion(state);\r\n } catch (conversionError) {\r\n console.error('Error during form builder conversion:', conversionError);\r\n return;\r\n }\r\n\r\n // Validate conversion result\r\n if (!formBuilderConversionResult) {\r\n console.warn('Form builder conversion returned empty result');\r\n return;\r\n }\r\n\r\n // Validate elementPerColumn\r\n // if (typeof elementPerColumn !== 'number' || elementPerColumn <= 0) {\r\n\r\n // console.warn('Invalid elementPerColumn value');\r\n // return;\r\n // }\r\n\r\n // Prepare payload with validation\r\n const updatePayload: IFormUpdatePayload = {\r\n gridCol: elementPerColumn || 2,\r\n fields: formBuilderConversionResult\r\n };\r\n\r\n // Dispatch update action\r\n const updateRes = await dispatch(\r\n patchFormDataById({\r\n id: rowData._id,\r\n data: updatePayload\r\n })\r\n );\r\n if (updateRes.meta.requestStatus === 'rejected') {\r\n\r\n const m = getErrorMessage(updateRes?.error?.message);\r\n enqueueSnackbar(m, { variant: 'error' });\r\n } else {\r\n enqueueSnackbar(\"Form updated successfully\", { variant: 'success' });\r\n navigate(path);\r\n }\r\n\r\n } catch (error) {\r\n const m = error?.message || 'Something went wrong while updating the form';\r\n enqueueSnackbar(m, { variant: 'error' });\r\n }\r\n }, [\r\n sectionFormJSON,\r\n members,\r\n tabsData,\r\n rowData?._id,\r\n elementPerColumn,\r\n dispatch,\r\n formBuilderConversion\r\n ]);\r\n\r\n const handleDuplicateElement = (index: number) => {\r\n const copyOfMember: any = { ...members[index], type: \"custom\" };\r\n copyOfMember && insert(index + 1, copyOfMember);\r\n setActiveMember(index + 1);\r\n setSelectedHoc(\"element\");\r\n setPositionEditedElement(index + 1);\r\n setElementJSON(copyOfMember);\r\n pickPropertyEditForm(copyOfMember.field_type);\r\n };\r\n\r\n const breadCrumbPath = [\r\n {\r\n link: path,\r\n label: \"Forms\",\r\n },\r\n {\r\n link: \"\",\r\n label: formatLabel(rowData?.name),\r\n },\r\n {\r\n link: \"\",\r\n label: \"Edit Form\",\r\n },\r\n ];\r\n\r\n\r\n useEffect(() => {\r\n if (removeSectionActionPerformed) {\r\n members.forEach((member: any, index: number) => {\r\n if (\r\n removeSectionPosition !== undefined &&\r\n Boolean(removeSectionPosition?.toString) &&\r\n member.section_order > removeSectionPosition\r\n ) {\r\n update(index, { ...member, section_order: member.section_order - 1 });\r\n }\r\n });\r\n setRemoveSectionActionPerformed(false);\r\n setRemoveSectionMembersPerformed(true);\r\n setRemoveSectionPosition(undefined);\r\n setSelectedHoc(\"\");\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [removeSectionActionPerformed]);\r\n\r\n useEffect(() => {\r\n formBuilder.isSuccess && navigate(path);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [formBuilder.isSuccess]);\r\n\r\n useEffect(() => {\r\n if (formBuilder.isError) {\r\n setToast({\r\n type: 'alert',\r\n message: formBuilder.error\r\n });\r\n }\r\n }, [formBuilder.error, formBuilder.isError]);\r\n\r\n useEffect(() => {\r\n if (\r\n typeof positionEditedElement !== \"number\" ||\r\n typeof positionEditedElement !== \"string\"\r\n ) {\r\n const index = Number(positionEditedElement);\r\n if (formJSON[index]) {\r\n const copyOfUpdatedFormJson = JSON.parse(\r\n JSON.stringify(formJSON[index]),\r\n );\r\n update(index, { ...copyOfUpdatedFormJson });\r\n }\r\n }\r\n // eslint-disable-next-line\r\n }, [formJSON]);\r\n\r\n useEffect(() => {\r\n const updatedFormJSON = formJSON.map((obj: any, index: number) => {\r\n if (index === Number(positionEditedElement)) {\r\n return { ...elementJSON };\r\n } else {\r\n return { ...obj };\r\n }\r\n });\r\n setFormJSON(updatedFormJSON);\r\n\r\n // eslint-disable-next-line\r\n }, [elementJSON]);\r\n\r\n useEffect(() => {\r\n if (members.length !== formJSON.length) {\r\n setFormJSON(JSON.parse(JSON.stringify(members)));\r\n }\r\n if (\r\n Boolean(elementSwap) &&\r\n JSON.stringify(members) !== JSON.stringify(formJSON)\r\n ) {\r\n setFormJSON(JSON.parse(JSON.stringify(members)));\r\n setElementSwap(false);\r\n const newMember: any =\r\n positionEditedElement && members[positionEditedElement];\r\n newMember && setSelectedHoc(\"element\");\r\n newMember && setElementJSON(newMember);\r\n newMember && pickPropertyEditForm(newMember.field_type);\r\n }\r\n if (\r\n removeSectionMembersPerformed &&\r\n JSON.stringify(members) !== JSON.stringify(formJSON)\r\n ) {\r\n setFormJSON(JSON.parse(JSON.stringify(members)));\r\n setRemoveSectionMembersPerformed(false);\r\n }\r\n // eslint-disable-next-line\r\n }, [members, elementSwap]);\r\n\r\n useEffect(() => {\r\n if (\r\n typeof sectionPositionEditedElement !== \"number\" ||\r\n typeof sectionPositionEditedElement !== \"string\"\r\n ) {\r\n const index = Number(sectionPositionEditedElement);\r\n if (sectionFormJSON[index]) {\r\n const copyOfUpdatedFormJson = JSON.parse(\r\n JSON.stringify(sectionFormJSON[index]),\r\n );\r\n updateSection(index, { ...copyOfUpdatedFormJson });\r\n }\r\n }\r\n // eslint-disable-next-line\r\n }, [sectionFormJSON]);\r\n\r\n useEffect(() => {\r\n const updatedFormJSON = sectionFormJSON.map((obj: any, index: number) => {\r\n if (index === Number(sectionPositionEditedElement)) {\r\n return { ...obj, ...sectionJSON };\r\n } else {\r\n return { ...obj };\r\n }\r\n });\r\n setSectionFormJSON(updatedFormJSON);\r\n // eslint-disable-next-line\r\n }, [sectionJSON]);\r\n\r\n useEffect(() => {\r\n if (section.length !== sectionFormJSON.length) {\r\n setSectionFormJSON(JSON.parse(JSON.stringify(section)));\r\n }\r\n if (\r\n JSON.stringify(sectionFormJSON) !== JSON.stringify(section) &&\r\n modifyAccordion\r\n ) {\r\n setSectionFormJSON(JSON.parse(JSON.stringify(section)));\r\n setModifyAccordion(false);\r\n }\r\n // eslint-disable-next-line\r\n }, [section]);\r\n\r\n useEffect(() => {\r\n () => setInitialLoading(true);\r\n }, [])\r\n\r\n const handleFormData = useCallback(async () => {\r\n setInitialLoading(true)\r\n try {\r\n if (rowData?._id) {\r\n setTabsData([])\r\n await dispatch(getFormDataById(rowData?._id));\r\n await dispatch(getFieldsByFormId({ id: rowData?._id }));\r\n\r\n }\r\n } finally {\r\n setInitialLoading(false);\r\n }\r\n\r\n }, [rowData?._id])\r\n\r\n useEffect(() => {\r\n handleFormData();\r\n }, [handleFormData]);\r\n\r\n type SelectedHoc = \"element\" | \"section\" | null;\r\n\r\n // Constants\r\n const DEFAULT_FIELD_TYPE = \"text\";\r\n const HOC_TYPES = {\r\n ELEMENT: \"element\",\r\n SECTION: \"section\"\r\n } as const;\r\n\r\n // Helper function to check if object has meaningful content\r\n const hasValidContent = (obj: Record<string, any>): boolean => {\r\n return obj && Object.keys(obj).length > 0;\r\n };\r\n\r\n const EmptyStateMessage = () => (\r\n <Typography type=\"s5\" color={\"theme.secondary.800\"} className=\"formSection--Text\">Select a field to edit its properties.</Typography>\r\n )\r\n\r\n // Helper function to get field type with fallback\r\n const getFieldTypeWithFallback = (\r\n json: ElementJSON | SectionJSON | null | undefined,\r\n fallback: string = DEFAULT_FIELD_TYPE\r\n ): string => {\r\n return json?.field_type || fallback;\r\n };\r\n\r\n const memoizedForm = useMemo(() => {\r\n // Early return for empty state\r\n if (!selectedHoc) {\r\n\r\n return <EmptyStateMessage />;\r\n }\r\n\r\n // Handle element selection\r\n if (selectedHoc === HOC_TYPES.ELEMENT) {\r\n if (!hasValidContent(members)) {\r\n console.warn('Element selected but no members data available');\r\n return <EmptyStateMessage />;\r\n }\r\n\r\n const fieldType = getFieldTypeWithFallback(elementJSON);\r\n return pickPropertyEditForm(fieldType);\r\n }\r\n\r\n // Handle section selection\r\n if (selectedHoc === HOC_TYPES.SECTION) {\r\n if (!hasValidContent(section)) {\r\n console.warn('Section selected but no section data available');\r\n return <EmptyStateMessage />;\r\n }\r\n\r\n const fieldType = getFieldTypeWithFallback(sectionJSON);\r\n return pickPropertyEditForm(fieldType);\r\n }\r\n\r\n // Fallback for unknown selection type\r\n console.warn(`Unknown selectedHoc type: ${selectedHoc}`);\r\n return <EmptyStateMessage />;\r\n }, [\r\n // Core dependencies\r\n selectedHoc,\r\n\r\n // Data dependencies\r\n Object.keys(members).length,\r\n Object.keys(section).length,\r\n\r\n // JSON dependencies with deep comparison consideration\r\n elementJSON?.field_type,\r\n elementJSON?.field_properties,\r\n sectionJSON?.field_type,\r\n sectionJSON?.field_properties,\r\n\r\n // Function dependency\r\n pickPropertyEditForm\r\n ]);\r\n\r\n return (\r\n // <FullScreenLayout className=\"formSection--Layout\">\r\n <Box position='relative'>\r\n {initialLoading ? <ErpLoader /> :\r\n <DndProvider backend={HTML5Backend}>\r\n <FormHeader breadCrumbPath={breadCrumbPath}>\r\n <div className=\"formSection--Buttons\">\r\n <Button\r\n variant=\"outlined\"\r\n className=\"formSection--PreviewButton\"\r\n text=\"Preview\"\r\n onClick={() => { !previewFieldsData ? showPreview() : hidePreview() }}\r\n disable={!members?.length}\r\n startIcon={previewFieldsData ? <EyeOff /> : <Eye />}\r\n />\r\n <Button\r\n variant=\"contained\"\r\n type=\"submit\"\r\n text=\"Update\"\r\n onClick={handleFormUpdate}\r\n disable={previewFieldsData}\r\n />\r\n </div>\r\n </FormHeader>\r\n {!previewFieldsData ?\r\n <Grid className=\"formSection--Grid\" container>\r\n <Grid\r\n item\r\n xs={9}\r\n component=\"form\"\r\n sx={{\r\n position: \"relative\",\r\n background: \"#F5F6F5\",\r\n padding: \"0.75rem\",\r\n }}\r\n >\r\n <Grid className=\"formSection--GridContainer\">\r\n <Box className=\"formSection--Tab\">\r\n {tabsData && (\r\n <TabBar\r\n tabs={tabsData}\r\n onEditTabTitle={handleEditTabTitle}\r\n activeValue={activeTabValue}\r\n setActiveValue={setActiveTabValue}\r\n handleTabChange={() => {\r\n handleTabData()\r\n }}\r\n handleRemoveTab={handleRemoveTab}\r\n containerProps={{ mb: 0 }}\r\n />\r\n )}\r\n <Button\r\n variant=\"outlined\"\r\n text=\"Add Tab\"\r\n onClick={handleAddTab}\r\n style={{ color: \"#292D32\", margin: \"0.5rem\" }}\r\n />\r\n </Box>\r\n <div className=\"formSection--Form\">\r\n {section?.map((item: any, i: number) => {\r\n const sectionMembers = members.filter(\r\n (member: any) => member.section_order === i,\r\n );\r\n const isFormSwitcher = item.section_type === SECTION_TYPES.FORM_SWITCH_SECTION\r\n const switchForms = item?.switcher_forms?.map((form: any) => ({\r\n ...form,\r\n formMembers: members.filter(\r\n (member: any) => member.section_form_id === form.id,\r\n )\r\n }))\r\n\r\n return (\r\n <DynamicSectionHOC\r\n index={i}\r\n label={t(item.label)}\r\n onClick={handleSectionSelection}\r\n position={i}\r\n fieldArrayName=\"section\"\r\n isFormSwitcher={isFormSwitcher}\r\n activeIndex={activeSection === i}\r\n removeSection={() => handleRemoveSection(i)}\r\n handleAccordion={() => handleMakeAccordion(i)}\r\n handleAddButton={(e) => handleAddMember(e)}\r\n remove_section={item.remove_section}\r\n >\r\n {isFormSwitcher ? (\r\n <div style={{ width: '100%' }} >\r\n <Typography type=\"s5\" style={{ fontWeight: 500 }} color={\"theme.secondary.800\"}>\r\n {item.form_switcher_label}\r\n </Typography>\r\n <RadioGroup\r\n aria-labelledby=\"theme-radio-buttons-group-label\"\r\n name={item.form_switcher_name || item.form_switcher_label}\r\n >\r\n\r\n {switchForms?.map(({ name, id, formMembers }: { name: string, id: number, formMembers: any }) => (\r\n <>\r\n <div>\r\n <FormControlLabel\r\n key={id}\r\n value={name}\r\n control={<Radio />}\r\n label={t(name)}\r\n disabled\r\n />\r\n </div>\r\n\r\n <Grid container sx={{ mb: 3 }}>\r\n <FormFields\r\n sectionMembers={formMembers || []}\r\n members={members}\r\n activeMember={activeMember}\r\n control={control}\r\n t={t}\r\n element={element}\r\n images={images}\r\n elementJSON={elementJSON}\r\n remove={remove}\r\n move={move}\r\n handleElementSelection={handleElementSelection}\r\n setElementSwap={setElementSwap}\r\n handleDuplicateElement={handleDuplicateElement}\r\n setSelectedHoc={setSelectedHoc}\r\n setActiveMember={setActiveMember}\r\n />\r\n </Grid>\r\n <Button\r\n text=\"Add\"\r\n variant=\"outlined\"\r\n className=\"formSection--PreviewButton\"\r\n data-position={i}\r\n onClick={(e) => handleAddMember(e, {\r\n section_form_id: id,\r\n is_form_switcher_section: true\r\n })}\r\n startIcon={<Add />}\r\n />\r\n </>\r\n ))}\r\n </RadioGroup>\r\n </div>\r\n ) : null}\r\n {!isFormSwitcher &&\r\n <FormFields\r\n sectionMembers={sectionMembers || []}\r\n members={members}\r\n activeMember={activeMember}\r\n control={control}\r\n t={t}\r\n element={element}\r\n images={images}\r\n elementJSON={elementJSON}\r\n remove={remove}\r\n move={move}\r\n handleElementSelection={handleElementSelection}\r\n setElementSwap={setElementSwap}\r\n handleDuplicateElement={handleDuplicateElement}\r\n setSelectedHoc={setSelectedHoc}\r\n setActiveMember={setActiveMember}\r\n />\r\n }\r\n </DynamicSectionHOC>\r\n );\r\n })}\r\n <div className=\"formSection--Section\">\r\n <Button\r\n text=\"Add a section\"\r\n variant=\"outlined\"\r\n className=\"formSection--PreviewButton\"\r\n onClick={addNewSection}\r\n startIcon={<Add />}\r\n />\r\n </div>\r\n </div>\r\n </Grid>\r\n\r\n </Grid>\r\n <Grid\r\n item\r\n xs={3}\r\n className={\r\n Boolean(selectedHoc) && (members?.length || section.length)\r\n ? \"formSection--RightGrid\"\r\n : \"formSection--RightGrid formSection--Text\"\r\n }\r\n >\r\n {memoizedForm}\r\n </Grid>\r\n </Grid>\r\n :\r\n <FormParser\r\n data={previewFieldsData || []}\r\n handleFormSubmit={(data) => console.log(\"Preview Data\", data)}\r\n className='form-container'\r\n fieldArrayName='form-builder-preview'\r\n getFormMethods={(methods: any) =>\r\n setFormParserMethods({ ...methods })\r\n }\r\n />\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 </DndProvider>}\r\n </Box>\r\n // </FullScreenLayout>\r\n );\r\n}\r\n\r\nexport default CustomForm;\r\n","// React imports\r\nimport React, { useEffect, useState } from 'react';\r\n\r\n// Material UI imports\r\nimport { Box, IconButton, TextField, InputAdornment } from '@mui/material';\r\nimport { Add, Remove } from '@mui/icons-material';\r\n\r\nexport interface IColumnWidthProps {\r\n onChange: (value: number) => void;\r\n}\r\n\r\nexport const ColumnWidth = ({onChange}: IColumnWidthProps) => {\r\n const [value, setValue] = useState(6);\r\n\r\n const handleIncrement = () => {\r\n setValue(prev => prev + 1);\r\n };\r\n\r\n const handleDecrement = () => {\r\n setValue(prev => Math.max(0, prev - 1)); // Prevent negative values\r\n };\r\n\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const newValue = Number.parseInt(event.target.value) || 0;\r\n setValue(Math.max(0, newValue));\r\n };\r\n\r\n useEffect(() => {\r\n onChange(value);\r\n }, [value]);\r\n\r\n return (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, p: 4 }}>\r\n <TextField\r\n value={value}\r\n onChange={handleInputChange}\r\n name='custom_width'\r\n size=\"small\"\r\n sx={{\r\n width: '120px',\r\n '& .MuiOutlinedInput-root': {\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n '& input': {\r\n textAlign: 'center',\r\n padding: '8px 4px',\r\n }\r\n }\r\n }}\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <IconButton\r\n onClick={handleDecrement}\r\n size=\"small\"\r\n sx={{\r\n marginLeft: '-4px',\r\n borderRadius: '4px 0 0 4px',\r\n border: 'none',\r\n '&:hover': {\r\n backgroundColor: 'rgba(0, 0, 0, 0.04)'\r\n }\r\n }}\r\n >\r\n <Remove fontSize=\"small\" />\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n endAdornment: (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n onClick={handleIncrement}\r\n size=\"small\"\r\n sx={{\r\n marginRight: '-4px',\r\n borderRadius: '0 4px 4px 0',\r\n border: 'none',\r\n '&:hover': {\r\n backgroundColor: 'rgba(0, 0, 0, 0.04)'\r\n }\r\n }}\r\n >\r\n <Add fontSize=\"small\" />\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n }}\r\n inputProps={{\r\n type: 'number',\r\n min: 0,\r\n }}\r\n />\r\n \r\n <Box sx={{ ml: 2, color: 'text.secondary' }}>\r\n Current value: {value}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ColumnWidth;","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6z\"\n}), 'CodeOutlined');","/**\r\n * CSS Scoping Service\r\n * \r\n * Provides utilities for generating unique scope identifiers and scoping CSS\r\n * to prevent style conflicts between different email templates.\r\n */\r\n\r\nexport interface ScopedResult {\r\n scopeId: string;\r\n scopedCSS: string;\r\n wrappedHTML: string;\r\n}\r\n\r\nexport class CSSScopingService {\r\n /**\r\n * Generate a unique scope identifier using timestamp and random string\r\n * Format: email-tpl-{timestamp}-{random}\r\n */\r\n generateScopeId(): string {\r\n const timestamp = Date.now();\r\n const random = Math.random().toString(36).substring(2, 11);\r\n return `email-tpl-${timestamp}-${random}`;\r\n }\r\n\r\n /**\r\n * Scope CSS selectors by prefixing them with the scope identifier\r\n * Skips :root and :host pseudo-classes\r\n * \r\n * @param css - The CSS stylesheet to scope\r\n * @param scopeId - The unique scope identifier\r\n * @returns Scoped CSS with prefixed selectors\r\n */\r\n scopeCSS(css: string, scopeId: string): string {\r\n if (!css || !scopeId) return css;\r\n\r\n // Split CSS into rules\r\n const rules = this.parseCSS(css);\r\n const scopedRules = rules.map(rule => this.scopeRule(rule, scopeId));\r\n \r\n return scopedRules.join('\\n');\r\n }\r\n\r\n /**\r\n * Parse CSS into individual rules\r\n * Simple parser that handles basic CSS syntax\r\n */\r\n private parseCSS(css: string): string[] {\r\n const rules: string[] = [];\r\n let currentRule = '';\r\n let braceCount = 0;\r\n let inComment = false;\r\n\r\n for (let i = 0; i < css.length; i++) {\r\n const char = css[i];\r\n const nextChar = css[i + 1];\r\n\r\n // Handle comments\r\n if (char === '/' && nextChar === '*') {\r\n inComment = true;\r\n currentRule += char;\r\n continue;\r\n }\r\n if (inComment && char === '*' && nextChar === '/') {\r\n inComment = false;\r\n currentRule += char;\r\n continue;\r\n }\r\n\r\n currentRule += char;\r\n\r\n if (!inComment) {\r\n if (char === '{') {\r\n braceCount++;\r\n } else if (char === '}') {\r\n braceCount--;\r\n \r\n if (braceCount === 0 && currentRule.trim()) {\r\n rules.push(currentRule.trim());\r\n currentRule = '';\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Handle any remaining content\r\n if (currentRule.trim()) {\r\n rules.push(currentRule.trim());\r\n }\r\n\r\n return rules;\r\n }\r\n\r\n /**\r\n * Scope a single CSS rule\r\n */\r\n private scopeRule(rule: string, scopeId: string): string {\r\n // Extract selector and body\r\n const braceIndex = rule.indexOf('{');\r\n if (braceIndex === -1) return rule;\r\n\r\n const selector = rule.substring(0, braceIndex).trim();\r\n const body = rule.substring(braceIndex);\r\n\r\n // Split multiple selectors (comma-separated)\r\n const selectors = selector.split(',').map(s => s.trim());\r\n const scopedSelectors = selectors.map(sel => this.scopeSelector(sel, scopeId));\r\n\r\n return `${scopedSelectors.join(', ')} ${body}`;\r\n }\r\n\r\n /**\r\n * Scope a single selector\r\n * Skip :root, :host, and other pseudo-classes that shouldn't be scoped\r\n */\r\n private scopeSelector(selector: string, scopeId: string): string {\r\n // Don't scope :root or :host\r\n if (selector.startsWith(':root') || selector.startsWith(':host')) {\r\n return selector;\r\n }\r\n\r\n // Don't scope @-rules (like @media, @keyframes)\r\n if (selector.startsWith('@')) {\r\n return selector;\r\n }\r\n\r\n // Prefix the selector with the scope class\r\n return `.${scopeId} ${selector}`;\r\n }\r\n\r\n /**\r\n * Wrap HTML content with a scope wrapper div\r\n * \r\n * @param html - The HTML content to wrap\r\n * @param scopeId - The unique scope identifier\r\n * @returns HTML wrapped with scope div\r\n */\r\n wrapHTMLWithScope(html: string, scopeId: string): string {\r\n if (!html || !scopeId) return html;\r\n \r\n return `<div class=\"${scopeId}\">\\n${html}\\n</div>`;\r\n }\r\n\r\n /**\r\n * Extract inline styles from HTML elements\r\n * Returns a map of element identifiers to their inline styles\r\n */\r\n extractInlineStyles(html: string): Map<string, Record<string, string>> {\r\n const styleMap = new Map<string, Record<string, string>>();\r\n \r\n // Create a temporary DOM element to parse HTML\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(html, 'text/html');\r\n \r\n // Find all elements with inline styles\r\n const elementsWithStyles = doc.querySelectorAll('[style]');\r\n \r\n elementsWithStyles.forEach((element, index) => {\r\n const styleAttr = element.getAttribute('style');\r\n if (styleAttr) {\r\n const styles = this.parseInlineStyles(styleAttr);\r\n // Use element tag + index as identifier\r\n const identifier = `${element.tagName.toLowerCase()}-${index}`;\r\n styleMap.set(identifier, styles);\r\n }\r\n });\r\n \r\n return styleMap;\r\n }\r\n\r\n /**\r\n * Parse inline style attribute into an object\r\n */\r\n private parseInlineStyles(styleAttr: string): Record<string, string> {\r\n const styles: Record<string, string> = {};\r\n \r\n const declarations = styleAttr.split(';').filter(d => d.trim());\r\n \r\n declarations.forEach(declaration => {\r\n const colonIndex = declaration.indexOf(':');\r\n if (colonIndex > -1) {\r\n const property = declaration.substring(0, colonIndex).trim();\r\n const value = declaration.substring(colonIndex + 1).trim();\r\n styles[property] = value;\r\n }\r\n });\r\n \r\n return styles;\r\n }\r\n\r\n /**\r\n * Merge two style objects, with override taking precedence\r\n */\r\n mergeStyles(\r\n base: Record<string, string>,\r\n override: Record<string, string>\r\n ): Record<string, string> {\r\n return { ...base, ...override };\r\n }\r\n\r\n /**\r\n * Complete scoping workflow: generate scope ID, scope CSS, and wrap HTML\r\n * \r\n * @param html - The HTML content\r\n * @param css - The CSS stylesheet\r\n * @returns Object containing scopeId, scopedCSS, and wrappedHTML\r\n */\r\n scopeTemplate(html: string, css: string = ''): ScopedResult {\r\n const scopeId = this.generateScopeId();\r\n const scopedCSS = css ? this.scopeCSS(css, scopeId) : '';\r\n const wrappedHTML = this.wrapHTMLWithScope(html, scopeId);\r\n\r\n return {\r\n scopeId,\r\n scopedCSS,\r\n wrappedHTML\r\n };\r\n }\r\n}\r\n\r\n// Export singleton instance\r\nexport const cssScopingService = new CSSScopingService();\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ElementType, EnhancedSectionData } from '../types/editor';\r\nimport { initialStyles, TEMPLATE_EDITOR_PATHS } from './constant';\r\nimport { cssScopingService } from '../services/CSSScopingService';\r\n\r\n\r\nexport const templateRoutes = (modulePath: string, type: string) => {\r\n const list = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_LIST(type)}`\r\n const add = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_ADD(type)}`\r\n const edit = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_EDIT(type)}`\r\n return {\r\n LIST: list,\r\n ADD_TEMPLATE: (id: string) => add.replace(':id', id),\r\n EDIT_TEMPLATE: (id: string, templateId: string) => edit.replace(':id', id).replace(':template_id', templateId),\r\n }\r\n};\r\n\r\n\r\nexport const generateEmailPreview = (sections: EnhancedSectionData[], headerSections?: EnhancedSectionData[] = [], footerSections?: EnhancedSectionData[] = [], isSaving = false, scopeId?: string) => {\r\n const headerHtml = (headerSections && headerSections?.length) ? generateHeaderFooterPreview(headerSections, 'header') : '';\r\n const footerHtml = (footerSections && footerSections?.length) ? generateHeaderFooterPreview(footerSections, 'footer') : '';\r\n \r\n // Generate or use provided scope ID\r\n const templateScopeId = scopeId || cssScopingService.generateScopeId();\r\n \r\n let html = `\r\n <html>\r\n <head>\r\n <style>\r\n .email-container {\r\n margin: 0 auto;\r\n margin-bottom: 20px;\r\n background-color: #fff;\r\n border-radius: 8px;\r\n max-width: ${isSaving ? '65%' : '800px'};\r\n width: 100%;\r\n }\r\n a {\r\n color: #007bff !important;\r\n text-decoration: none !important;\r\n }\r\n a:hover {\r\n text-decoration: underline;\r\n }\r\n * {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n }\r\n\r\n body {\r\n font-family: \"Inter\", sans-serif !important;\r\n font-size: 16px;\r\n font-weight: 400;\r\n color: #00011c;\r\n font-style: normal;\r\n }\r\n\r\n img {\r\n display: block;\r\n height: auto;\r\n }\r\n\r\n table,\r\n tr,\r\n td {\r\n border-collapse: collapse;\r\n }\r\n\r\n a {\r\n text-decoration: none;\r\n }\r\n\r\n table.our-details,\r\n .our-details td,\r\n .our-details th {\r\n border: 1px solid #d3d3d4;\r\n }\r\n\r\n table.amount-word-table,\r\n table.amount-word-table td,\r\n table.amount-word-table th {\r\n border: 1px solid #d6d6d6;\r\n }\r\n\r\n .amount-word-table thead th {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table thead td {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table tbody tr:nth-child(even) {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table tbody tr td {\r\n border-top: 0;\r\n border-bottom: 0;\r\n }\r\n\r\n .deliver-table thead th {\r\n background-color: transparent;\r\n }\r\n </style>\r\n </head>\r\n <body>\r\n <div class=\"email-container ${templateScopeId}\">\r\n ${headerHtml}\r\n ${headerHtml ? '<hr/>' : ''}\r\n `;\r\n\r\n // Group sections by splitGroupId\r\n const groupedSections = [];\r\n let currentGroup = [];\r\n let lastSplitGroupId = null;\r\n\r\n for (const section of sections) {\r\n if (section.isSplitPair && section.splitGroupId !== 0) {\r\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n }\r\n currentGroup.push(section);\r\n lastSplitGroupId = section.splitGroupId;\r\n } else {\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n lastSplitGroupId = null;\r\n }\r\n groupedSections.push([section]);\r\n }\r\n }\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n }\r\n\r\n // Generate HTML\r\n for (const group of groupedSections) {\r\n if (group.length === 1 && !group[0].isSplitPair) {\r\n // Concatenate normal section content directly\r\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\r\n } else {\r\n // Generate table for split sections\r\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\r\n for (const section of group) {\r\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\r\n ${section.content}\r\n </td>`;\r\n }\r\n html += '</tr></table>';\r\n }\r\n }\r\n\thtml += `\r\n ${footerHtml ? '<hr/>' : ''}\r\n ${footerHtml}\r\n </div></body></html>`;\r\n\r\n return html;\r\n}\r\nexport const generateHeaderFooterPreview = (sections: EnhancedSectionData[], type = 'header', scopeId?: string) => {\r\n const scopeClass = scopeId ? ` ${scopeId}` : '';\r\n let html = `<${type} class=\"${type}${scopeClass}\">`;\r\n\r\n // Group sections by splitGroupId\r\n const groupedSections = [];\r\n let currentGroup = [];\r\n let lastSplitGroupId = null;\r\n\r\n for (const section of sections) {\r\n if (section.isSplitPair && section.splitGroupId !== 0) {\r\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n }\r\n currentGroup.push(section);\r\n lastSplitGroupId = section.splitGroupId;\r\n } else {\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n lastSplitGroupId = null;\r\n }\r\n groupedSections.push([section]);\r\n }\r\n }\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n }\r\n\r\n // Generate HTML\r\n for (const group of groupedSections) {\r\n if (group.length === 1 && !group[0].isSplitPair) {\r\n // Concatenate normal section content directly\r\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\r\n } else {\r\n // Generate table for split sections\r\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\r\n for (const section of group) {\r\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\r\n ${section.content}\r\n </td>`;\r\n }\r\n html += '</tr></table>';\r\n }\r\n }\r\n\thtml += `</${type}>`;\r\n\r\n return html;\r\n}\r\n\r\nexport const extractStyles = (html: string, sectionType: string) => {\r\n // Create a temporary div to parse the HTML\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = html;\r\n \r\n // Get the first element (our styled element)\r\n const element = tempDiv.firstChild as HTMLElement;\r\n \r\n if (!element) return {};\r\n\r\n if(element?.getAttribute instanceof Function === false) {\r\n return {};\r\n }\r\n \r\n // Get the inline styles\r\n const styleAttr = element?.getAttribute('style');\r\n\r\n const allAttributes = element?.attributes || [];\r\n \r\n // const attrObj: Record<string, any> = {};\r\n const attrObj = Array.from(allAttributes).reduce((obj, attr) => {\r\n obj[attr.name] = attr.value;\r\n return obj;\r\n }, {});\r\n\r\n if (!styleAttr) return {};\r\n \r\n // Parse the style attribute into an object\r\n const styleObj: Record<string, any> = {};\r\n const stylePairs = styleAttr.split(';').filter(pair => pair.trim() !== '');\r\n \r\n stylePairs.forEach(pair => {\r\n const [prop, value] = pair.split(':').map(part => part.trim());\r\n if (prop && value) {\r\n // Convert CSS property names to camelCase for React\r\n const propName = prop.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\r\n styleObj[propName] = value;\r\n }\r\n });\r\n attrObj.styles = styleObj\r\n return attrObj\r\n}\r\n\r\n\r\ntype StyleValue = string | number | boolean | null | undefined | StyleObject;\r\ninterface StyleObject {\r\n [key: string]: StyleValue;\r\n}\r\n\r\nconst EMAIL_SAFE_PROPERTIES = new Set([\r\n 'background', 'background-color',\r\n 'border', 'border-style', 'border-collapse', 'border-top', 'border-right', 'border-bottom', 'border-left', 'border-color', 'border-radius',\r\n 'color', 'display', 'font', 'font-family', 'font-size', 'font-style', 'font-weight',\r\n 'height', 'line-height',\r\n 'margin', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left',\r\n 'padding', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left',\r\n 'text-align', 'text-decoration',\r\n 'vertical-align', 'width',\r\n 'max-width', 'min-width', 'max-height', 'min-height'\r\n]);\r\n\r\nexport const generateInlineStyles = (\r\n styles: StyleObject,\r\n parentKey = ''\r\n): string => {\r\n if (!styles || typeof styles !== 'object') return '';\r\n\r\n const styleEntries = Object.entries(styles).reduce<string[]>((acc, [key, value]) => {\r\n if (value === undefined || value === null) return acc;\r\n\r\n const fullKey = parentKey ? `${parentKey}-${key}` : key;\r\n\r\n // Recursively flatten nested objects\r\n if (typeof value === 'object' && !Array.isArray(value)) {\r\n acc.push(generateInlineStyles(value as StyleObject, fullKey));\r\n return acc;\r\n }\r\n\r\n // Convert camelCase to kebab-case\r\n const cssKey = fullKey.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n\r\n // Skip non-email-safe properties\r\n if (!EMAIL_SAFE_PROPERTIES.has(cssKey) && key !== 'fullWidth' && key !== 'alignment') {\r\n return acc;\r\n }\r\n\r\n // Special case: fullWidth\r\n if (key === 'fullWidth' && value === true) {\r\n acc.push('width: 100%');\r\n return acc;\r\n }\r\n\r\n // Special case: alignment (converted to text-align)\r\n if (key === 'alignment' && typeof value === 'string') {\r\n acc.push(`text-align: ${value}`);\r\n return acc;\r\n }\r\n\r\n // Ignore other boolean values\r\n if (typeof value === 'boolean') return acc;\r\n\r\n const cssValue =\r\n typeof value === 'number' && !['z-index', 'opacity', 'line-height'].includes(key)\r\n ? `${value}px`\r\n : value;\r\n\r\n acc.push(`${cssKey}: ${cssValue}`);\r\n return acc;\r\n }, []);\r\n\r\n return styleEntries.filter(Boolean).join('; ');\r\n};\r\n\r\nexport const getInitialSectionData = (type: ElementType, attrs: Record<string, any> = {}): EnhancedSectionData => {\r\n let content = '';\r\n const styles = initialStyles[type] || {};\r\n const inlineStyles: string = generateInlineStyles(styles);\r\n\r\n switch (type) {\r\n case 'heading':\r\n content = `<h1 style=\"${inlineStyles}\">Heading 1</h1>`;\r\n break;\r\n case 'heading-2':\r\n content = `<h2 style=\"${inlineStyles}\">Heading 2</h2>`;\r\n break;\r\n case 'heading-3':\r\n content = `<h3 style=\"${inlineStyles}\">Heading 3</h3>`;\r\n break;\r\n case 'heading-4':\r\n content = `<h4 style=\"${inlineStyles}\">Heading 4</h4>`;\r\n break;\r\n case 'text':\r\n content = `<p style=\"${inlineStyles}\">Hello, enter your text here...</p>`;\r\n break;\r\n case 'image':\r\n content = `<img src=\"${attrs?.src || ''}\" alt=\"${attrs?.alt || ''}\" style=\"${inlineStyles};\" />`;\r\n break;\r\n case 'buttons':\r\n attrs.text = attrs?.text || 'Button text';\r\n content = `<button style=\"${inlineStyles}\">${attrs.text}</button>`;\r\n break;\r\n case 'divider':\r\n content = `<hr style=\"${inlineStyles}\" />`;\r\n break;\r\n case 'table': {\r\n const { border, borderStyle, borderColor, ...rest } = styles;\r\n const tInlineStyles = generateInlineStyles(styles.is_bordered ? styles : rest);\r\n const tHeadInlineStyles: string = generateInlineStyles(styles.tHead);\r\n const tBodyInlineStyles: string = generateInlineStyles(styles.tBody);\r\n const thCellInlineStyles: string = generateInlineStyles({...styles.thCells, border, borderStyle, borderColor });\r\n const tbCellInlineStyles: string = generateInlineStyles({...styles.tbCells, border, borderStyle, borderColor});\r\n content = `\r\n <table style=\"${tInlineStyles}\">\r\n <thead style=\"${tHeadInlineStyles}\">\r\n <tr style=\"background-color: #f5f5f5;\">\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n </tr>\r\n </thead>\r\n <tbody style=\"${tBodyInlineStyles}\">\r\n <tr>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n `;\r\n break;\r\n }\r\n case 'signature':\r\n content = `<div style=\"${inlineStyles}\">Signature: <input type='text' style=\"border:0; border-bottom:1px solid black\" class='signature-input'/></div>`;\r\n break;\r\n case 'qr-code':\r\n attrs.placeholder = attrs?.placeholder || '{{qr_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n case 'bar-code':\r\n attrs.placeholder = attrs?.placeholder || '{{barcode_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n default:\r\n content = '<p style=\"font-size: 16px; color: #333333; line-height: 1.5;\">New section</p>';\r\n }\r\n\r\n let attributes: Record<string, any> = {};\r\n attributes = extractStyles(content, type);\r\n\r\n return {\r\n content, \r\n type, \r\n attributes: {...(attrs || {}), styles}\r\n };\r\n};\r\n\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport {\r\n AppBar,\r\n Toolbar,\r\n Box,\r\n Link,\r\n Stack,\r\n IconButton,\r\n Divider,\r\n} from '@mui/material';\r\nimport { ZoomIn, ZoomOut, ZoomOutMap } from '@mui/icons-material';\r\nimport Button from '../../../components/button/button';\r\nimport Typography from '../../../components/typography/typography';\r\nimport { Edit, Eye, EyeOff } from '../../../components/icons';\r\nimport CodeOutlinedIcon from '@mui/icons-material/CodeOutlined';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { templateRoutes } from '../utils/common';\r\nimport { EnhancedSectionData } from '../types/editor';\r\n\r\ninterface EditorHeaderProps {\r\n onSave: () => void;\r\n onPreview: () => void;\r\n preview: boolean;\r\n editHtml: boolean;\r\n onEditHtml: () => void;\r\n onEditModeChange?: () => void;\r\n sections: EnhancedSectionData[];\r\n isEditingHeaderFooter: boolean;\r\n setIsEditingHeaderFooter: (value: boolean) => void;\r\n onSaveHeaderFooter: (value: boolean) => void;\r\n modulePath: string;\r\n type: string;\r\n mode: 'add' | 'edit';\r\n templateData: Record<string, any> | null;\r\n isSaving?: boolean;\r\n editMode: boolean;\r\n fromPreview?: boolean;\r\n zoom: number;\r\n onZoomIn: () => void;\r\n onZoomOut: () => void;\r\n onResetZoom: () => void;\r\n}\r\n\r\nconst EditorHeader: React.FC<EditorHeaderProps> = ({\r\n onSave,\r\n onPreview,\r\n preview,\r\n editHtml,\r\n onEditHtml,\r\n sections,\r\n isEditingHeaderFooter,\r\n onEditModeChange,\r\n setIsEditingHeaderFooter,\r\n onSaveHeaderFooter,\r\n modulePath,\r\n type,\r\n mode = 'add',\r\n templateData,\r\n isSaving = false,\r\n editMode,\r\n fromPreview = false,\r\n zoom,\r\n onZoomIn,\r\n onZoomOut,\r\n onResetZoom,\r\n}) => {\r\n const ROUTES = templateRoutes(modulePath, type);\r\n return (\r\n <AppBar\r\n position=\"static\"\r\n color=\"default\"\r\n elevation={0}\r\n sx={{\r\n borderColor: 'divider',\r\n bgcolor: 'background.paper'\r\n }}\r\n >\r\n <Toolbar variant=\"dense\" sx={{ justifyContent: 'space-between', p: 3 }}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <Link\r\n component={RouterLink}\r\n to={ROUTES.LIST}\r\n underline=\"hover\"\r\n color=\"text.secondary\"\r\n sx={{ fontSize: '0.875rem' }}\r\n >\r\n <Typography type=\"s5\" color='theme.secondary.800'>{type === 'email' ? 'Emails' : 'PDF'}</Typography>\r\n </Link>\r\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>/</Typography>\r\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>\r\n {mode === 'add' ? 'Add New' : editMode ? 'Edit' : 'Preview'} Template\r\n </Typography>\r\n {templateData && templateData?.name &&\r\n <>\r\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>/</Typography>\r\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>\r\n {templateData?.name}\r\n </Typography>\r\n </>\r\n }\r\n </Box>\r\n\r\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\r\n {/* Zoom Controls - Only show in preview mode */}\r\n {preview && (\r\n <>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 1,\r\n borderRadius: 1,\r\n bgcolor: 'rgba(74, 192, 140, 0.08)',\r\n border: '1px solid rgba(74, 192, 140, 0.2)',\r\n }}\r\n >\r\n <IconButton\r\n size=\"small\"\r\n onClick={onZoomOut}\r\n disabled={zoom <= 50}\r\n color='#4AC08C'\r\n sx={{\r\n color: '#4AC08C',\r\n '&:hover': {\r\n bgcolor: 'rgba(74, 192, 140, 0.15)',\r\n },\r\n '&.Mui-disabled': {\r\n opacity: 0.3,\r\n color: '#4AC08C'\r\n }\r\n }}\r\n >\r\n <ZoomOut fontSize=\"small\" />\r\n </IconButton>\r\n\r\n <Typography\r\n type=\"s5\"\r\n weight='medium'\r\n sx={{\r\n minWidth: '50px',\r\n textAlign: 'center',\r\n color: '#4AC08C'\r\n }}\r\n >\r\n {zoom}%\r\n </Typography>\r\n\r\n <IconButton\r\n size=\"small\"\r\n onClick={onZoomIn}\r\n disabled={zoom >= 150}\r\n sx={{\r\n color: '#4AC08C',\r\n '&:hover': {\r\n bgcolor: 'rgba(74, 192, 140, 0.15)',\r\n },\r\n '&.Mui-disabled': {\r\n opacity: 0.3,\r\n color: '#4AC08C'\r\n }\r\n }}\r\n >\r\n <ZoomIn fontSize=\"small\" />\r\n </IconButton>\r\n\r\n <Divider\r\n orientation=\"vertical\"\r\n flexItem\r\n sx={{\r\n mx: 0.5,\r\n bgcolor: 'rgba(74, 192, 140, 0.3)'\r\n }}\r\n />\r\n\r\n <IconButton\r\n size=\"small\"\r\n onClick={onResetZoom}\r\n disabled={zoom === 100}\r\n title=\"Reset Zoom\"\r\n sx={{\r\n color: '#4AC08C',\r\n '&:hover': {\r\n bgcolor: 'rgba(74, 192, 140, 0.15)',\r\n },\r\n '&.Mui-disabled': {\r\n opacity: 0.3,\r\n color: '#4AC08C'\r\n }\r\n }}\r\n >\r\n <ZoomOutMap fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n\r\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 1 }} />\r\n </>\r\n )}\r\n\r\n {!fromPreview ? (\r\n <>\r\n <Button\r\n onClick={() => setIsEditingHeaderFooter(true)}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n startIcon={<Edit fontSize='small' />}\r\n disabled={preview}\r\n >\r\n Edit Header/Footer\r\n </Button>\r\n <Button\r\n onClick={onPreview}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n startIcon={preview ? <EyeOff fontSize='small' /> : <Eye fontSize='small' />}\r\n disabled={!sections?.length}\r\n >\r\n Preview\r\n </Button>\r\n <Button\r\n onClick={onEditHtml}\r\n size=\"small\"\r\n variant={editHtml ? 'contained' : 'outlined'}\r\n color={editHtml ? 'primary' : 'inherit'}\r\n sx={(theme) => ({ color: editHtml ? undefined : `${theme.palette.theme.secondary[1000]} !important` })}\r\n startIcon={<CodeOutlinedIcon fontSize='small' />}\r\n disabled={!sections?.length || preview}\r\n >\r\n {editHtml ? 'Exit HTML Edit' : 'Edit HTML'}\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n onClick={onSave}\r\n size=\"small\"\r\n sx={{ boxShadow: 'none' }}\r\n disabled={!sections?.length || isSaving}\r\n >\r\n {isSaving ? 'Saving...' : 'Save'}\r\n </Button>\r\n </>\r\n ) : (\r\n editMode ? (\r\n <>\r\n {isEditingHeaderFooter ? (\r\n <>\r\n <Button\r\n onClick={() => setIsEditingHeaderFooter(false)}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n >\r\n Cancel Editing\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n onClick={onSaveHeaderFooter}\r\n size=\"small\"\r\n sx={{ boxShadow: 'none' }}\r\n >\r\n Save Changes\r\n </Button>\r\n </>\r\n ) : (\r\n <>\r\n <Button\r\n onClick={() => setIsEditingHeaderFooter(true)}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n startIcon={<Edit fontSize='small' />}\r\n disabled={preview}\r\n >\r\n Edit Header/Footer\r\n </Button>\r\n <Button\r\n onClick={onPreview}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n startIcon={preview ? <EyeOff fontSize='small' /> : <Eye fontSize='small' />}\r\n disabled={!sections?.length}\r\n >\r\n Preview\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n onClick={onSave}\r\n size=\"small\"\r\n sx={{ boxShadow: 'none' }}\r\n disabled={!sections?.length}\r\n >\r\n Save\r\n </Button>\r\n <Button\r\n onClick={() => onEditModeChange && onEditModeChange()}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n >\r\n Cancel\r\n </Button>\r\n </>\r\n )}\r\n </>\r\n ) : (\r\n <Button\r\n variant=\"contained\"\r\n onClick={() => onEditModeChange && onEditModeChange()}\r\n size=\"small\"\r\n sx={{ boxShadow: 'none' }}\r\n startIcon={<Edit fontSize='small' />}\r\n disabled={!sections?.length}\r\n >\r\n Edit\r\n </Button>\r\n )\r\n )}\r\n </Stack>\r\n </Toolbar>\r\n </AppBar>\r\n );\r\n};\r\n\r\nexport default EditorHeader;","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2m-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2m0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2\"\n}), 'DragIndicator');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m14 4 2.29 2.29-2.88 2.88 1.42 1.42 2.88-2.88L20 10V4zm-4 0H4v6l2.29-2.29 4.71 4.7V20h2v-8.41l-5.29-5.3z\"\n}), 'CallSplit');","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { lazy, Suspense } from 'react';\r\n\r\nimport Modal from '../../../components/modal/modal';\r\nimport Typography from '../../../components/typography/typography';\r\nimport Button from '../../../components/button/button';\r\nimport Select from '../../../components/select/select';\r\n\r\nimport {\r\n\tBox,\r\n\tDialogActions,\r\n\tDialogContent,\r\n\tDialogProps,\r\n\tDialogTitle,\r\n\tIconButton,\r\n\tMenuItem\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\n\r\nimport './edit-section-modal.scss';\r\nimport { IEmail } from '../utils/types';\r\nconst CustomEditor = lazy(() => import('../../../components/editor/custom-editor'));\r\nimport { SectionData } from '../types/editor';\r\n\r\ninterface EditSectionModalProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: (value: boolean) => void;\r\n\tmodalProps: DialogProps;\r\n\tsection: SectionData;\r\n\tplaceholders: Record<string, any>[];\r\n\thandleSave: (e: any) => void;\r\n\thandleAddPlaceholder: (placeholder: string) => void;\r\n\thandleEditorReady: (placeholder: string) => void;\r\n}\r\n\r\nconst EditSectionModal: React.FC<EditSectionModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tmodalProps,\r\n\tsection,\r\n\tplaceholders,\r\n\thandleSave,\r\n\thandleAddPlaceholder,\r\n\thandleEditorReady,\r\n}) => {\r\n\r\n\tconst handleModalClose = () => {\r\n\t\tsetIsOpen(null);\r\n\t};\r\n\r\n\tconst handleContinue = (e) => {\r\n\t\thandleSave(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={handleModalClose}\r\n\t\t\tmaxWidth='lg'\r\n\t\t\tmaxHeight='md'\r\n\t\t\tfullWidth\r\n\t\t\t{...modalProps}>\r\n\t\t\t<DialogTitle className='editSectionModal--DialogTitle'>\r\n\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\r\n\t\t\t\t\tEdit Content\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<Box display='flex' alignItems={'center'} gap={1} position='absolute' right='1%' top='4px'>\r\n\t\t\t\t\t<Select\r\n\t\t\t\t\t\tdisplayEmpty\r\n\t\t\t\t\t\tvalue=''\r\n\t\t\t\t\t\tsize='small'\r\n\t\t\t\t\t\trenderValue={() => 'Add placeholder'}\r\n\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tbgcolor: 'white',\r\n\t\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\t\t'& .MuiSelect-select': { py: 0.75 }\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\tif (e.target.value) {\r\n\t\t\t\t\t\t\t\thandleAddPlaceholder(e.target.value as string);\r\n\t\t\t\t\t\t\t\te.target.value = '';\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{placeholders.map((option) => (\r\n\t\t\t\t\t\t\t<MenuItem key={option.value} value={option.value}>\r\n\t\t\t\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>{option.label}</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</Select>\r\n\t\t\t\t\t<IconButton onClick={handleModalClose}>\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</Box>\r\n\t\t\t</DialogTitle>\r\n\t\t\t<DialogContent className='editSectionModal--DialogContents'>\r\n\t\t\t\t<Suspense>\r\n\t\t\t\t\t<CustomEditor handleEditorReady={handleEditorReady} data={section.content}/>\r\n\t\t\t\t</Suspense>\r\n\t\t\t</DialogContent>\r\n\t\t\t<DialogActions className='editSectionModal--DialogAction'>\r\n\t\t\t\t<Box display='flex' gap={1.5}>\r\n\t\t\t\t\t<Button className='editSectionModal--DialogAction--WhiteBtn' onClick={handleModalClose}>Cancel</Button>\r\n\t\t\t\t\t<Button onClick={(e) => handleContinue(e)}>Save</Button>\r\n\t\t\t\t</Box>\r\n\t\t\t</DialogActions>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n\r\nexport default EditSectionModal;\r\n","/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n\r\nimport { useCallback, useMemo } from 'react';\r\n\r\n// Enhanced Custom hook for CKEditor style extraction and reverse conversion\r\nexport const useCKEditorStyleExtractor = () => {\r\n // HTML tag to CSS style mappings\r\n const tagStyleMap = useMemo(() => ({\r\n 'i': { fontStyle: 'italic' },\r\n 'em': { fontStyle: 'italic' },\r\n 'b': { fontWeight: 'bold' },\r\n 'strong': { fontWeight: 'bold' },\r\n 'u': { textDecoration: 'underline' },\r\n 's': { textDecoration: 'line-through' },\r\n 'strike': { textDecoration: 'line-through' },\r\n 'del': { textDecoration: 'line-through' },\r\n 'sup': { verticalAlign: 'super', fontSize: 'smaller' },\r\n 'sub': { verticalAlign: 'sub', fontSize: 'smaller' },\r\n 'small': { fontSize: 'smaller' },\r\n 'big': { fontSize: 'larger' },\r\n 'mark': { backgroundColor: 'yellow' },\r\n 'code': { fontFamily: 'monospace' },\r\n 'kbd': { fontFamily: 'monospace', backgroundColor: '#f1f1f1', padding: '2px 4px', borderRadius: '3px' },\r\n 'samp': { fontFamily: 'monospace' },\r\n 'var': { fontStyle: 'italic', fontFamily: 'monospace' }\r\n }), []);\r\n\r\n // Reverse mapping: CSS styles to HTML tags (for reverse conversion)\r\n const styleTagMap = useMemo(() => {\r\n const reverseMap = {};\r\n \r\n // Create reverse mapping with priority for semantic tags\r\n const tagPriority = {\r\n 'fontStyle-italic': 'i',\r\n 'fontWeight-bold': 'b',\r\n 'textDecoration-underline': 'u',\r\n 'textDecoration-line-through': 's',\r\n 'verticalAlign-super': 'sup',\r\n 'verticalAlign-sub': 'sub',\r\n 'fontSize-smaller': 'small',\r\n 'fontSize-larger': 'big',\r\n 'backgroundColor-yellow': 'mark'\r\n };\r\n\r\n Object.entries(tagPriority).forEach(([styleKey, tag]) => {\r\n reverseMap[styleKey] = tag;\r\n });\r\n\r\n return reverseMap;\r\n }, []);\r\n\r\n // CSS property mappings for camelCase conversion\r\n const cssPropertyMap = useMemo(() => ({\r\n 'font-family': 'fontFamily',\r\n 'font-size': 'fontSize',\r\n 'font-weight': 'fontWeight',\r\n 'font-style': 'fontStyle',\r\n 'text-align': 'textAlign',\r\n 'text-decoration': 'textDecoration',\r\n 'text-transform': 'textTransform',\r\n 'line-height': 'lineHeight',\r\n 'letter-spacing': 'letterSpacing',\r\n 'word-spacing': 'wordSpacing',\r\n 'color': 'color',\r\n 'background-color': 'backgroundColor',\r\n 'background-image': 'backgroundImage',\r\n 'background-size': 'backgroundSize',\r\n 'background-position': 'backgroundPosition',\r\n 'background-repeat': 'backgroundRepeat',\r\n 'border': 'border',\r\n 'border-color': 'borderColor',\r\n 'border-width': 'borderWidth',\r\n 'border-style': 'borderStyle',\r\n 'border-radius': 'borderRadius',\r\n 'margin': 'margin',\r\n 'margin-top': 'marginTop',\r\n 'margin-right': 'marginRight',\r\n 'margin-bottom': 'marginBottom',\r\n 'margin-left': 'marginLeft',\r\n 'padding': 'padding',\r\n 'padding-top': 'paddingTop',\r\n 'padding-right': 'paddingRight',\r\n 'padding-bottom': 'paddingBottom',\r\n 'padding-left': 'paddingLeft',\r\n 'width': 'width',\r\n 'height': 'height',\r\n 'max-width': 'maxWidth',\r\n 'max-height': 'maxHeight',\r\n 'min-width': 'minWidth',\r\n 'min-height': 'minHeight',\r\n 'display': 'display',\r\n 'position': 'position',\r\n 'top': 'top',\r\n 'right': 'right',\r\n 'bottom': 'bottom',\r\n 'left': 'left',\r\n 'float': 'float',\r\n 'clear': 'clear',\r\n 'overflow': 'overflow',\r\n 'opacity': 'opacity',\r\n 'z-index': 'zIndex',\r\n 'box-shadow': 'boxShadow',\r\n 'text-shadow': 'textShadow',\r\n 'vertical-align': 'verticalAlign'\r\n }), []);\r\n\r\n // Convert CSS property to camelCase\r\n const toCamelCase = useCallback((property) => {\r\n return cssPropertyMap[property] || \r\n property.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());\r\n }, [cssPropertyMap]);\r\n\r\n // Convert camelCase to kebab-case\r\n const toKebabCase = useCallback((property) => {\r\n return property.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n }, []);\r\n\r\n // Parse inline styles from element.style object\r\n const parseInlineStyles = useCallback((styleDeclaration) => {\r\n const styles = {};\r\n\r\n for (let i = 0; i < styleDeclaration.length; i++) {\r\n const property = styleDeclaration[i];\r\n const value = styleDeclaration.getPropertyValue(property);\r\n \r\n if (value) {\r\n const camelCaseProperty = toCamelCase(property);\r\n styles[camelCaseProperty] = value.trim();\r\n }\r\n }\r\n\r\n return styles;\r\n }, [toCamelCase]);\r\n\r\n // Extract styles based on semantic HTML tags\r\n const extractTagStyles = useCallback((element) => {\r\n const tagName = element.tagName.toLowerCase();\r\n return tagStyleMap[tagName] || {};\r\n }, [tagStyleMap]);\r\n\r\n // Extract nested/inherited styles from parent elements\r\n const extractNestedStyles = useCallback((element) => {\r\n const nestedStyles = {};\r\n let currentElement = element.parentElement;\r\n\r\n // Traverse up the DOM tree to collect inherited styles\r\n while (currentElement && currentElement.tagName !== 'BODY') {\r\n const tagName = currentElement.tagName.toLowerCase();\r\n \r\n // Add tag-based styles from parents\r\n if (tagStyleMap[tagName]) {\r\n Object.entries(tagStyleMap[tagName]).forEach(([prop, value]) => {\r\n // Only add if not already defined (child takes precedence)\r\n if (!nestedStyles[prop]) {\r\n nestedStyles[prop] = value;\r\n }\r\n });\r\n }\r\n\r\n // Add inline styles from parents that can be inherited\r\n if (currentElement.style.length > 0) {\r\n const inheritableProps = ['color', 'fontFamily', 'fontSize', 'lineHeight', 'textAlign'];\r\n const parentStyles = parseInlineStyles(currentElement.style);\r\n \r\n inheritableProps.forEach(prop => {\r\n if (parentStyles[prop] && !nestedStyles[prop]) {\r\n nestedStyles[prop] = parentStyles[prop];\r\n }\r\n });\r\n }\r\n\r\n currentElement = currentElement.parentElement;\r\n }\r\n\r\n return nestedStyles;\r\n }, [tagStyleMap, parseInlineStyles]);\r\n\r\n // Extract image-specific styles\r\n const extractImageStyles = useCallback((imgElement, styleData) => {\r\n const imageStyles = {};\r\n\r\n if (imgElement.width) imageStyles.width = `${imgElement.width}px`;\r\n if (imgElement.height) imageStyles.height = `${imgElement.height}px`;\r\n if (imgElement.getAttribute('align')) {\r\n imageStyles.textAlign = imgElement.getAttribute('align');\r\n }\r\n\r\n // Merge with existing styles\r\n Object.assign(styleData.styles, imageStyles);\r\n \r\n // Add image-specific metadata\r\n styleData.src = imgElement.src;\r\n styleData.alt = imgElement.alt;\r\n }, []);\r\n\r\n // Main extraction function\r\n const extractStyles = useCallback((editorContent, options = {}) => {\r\n const {\r\n includeInlineStyles = true,\r\n includeTagStyles = true,\r\n includeComputedStyles = false,\r\n groupByElement = false,\r\n filterEmptyStyles = true,\r\n mergeNestedStyles = true\r\n } = options;\r\n\r\n // Create a temporary DOM element to parse the content\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = editorContent;\r\n\r\n const results = [];\r\n const elements = tempDiv.querySelectorAll('*');\r\n\r\n elements.forEach((element, index) => {\r\n const styleData = {\r\n elementType: element.tagName.toLowerCase(),\r\n elementIndex: index,\r\n className: element.className || null,\r\n id: element.id || null,\r\n styles: {},\r\n textContent: element.textContent?.trim() || null\r\n };\r\n\r\n // Extract inline styles\r\n if (includeInlineStyles && element.style.length > 0) {\r\n styleData.styles = { ...styleData.styles, ...parseInlineStyles(element.style) };\r\n }\r\n\r\n // Extract semantic tag styles (like <i>, <b>, etc.)\r\n if (includeTagStyles) {\r\n const tagStyles = extractTagStyles(element);\r\n styleData.styles = { ...styleData.styles, ...tagStyles };\r\n }\r\n\r\n // Extract nested styling context\r\n if (mergeNestedStyles) {\r\n const nestedStyles = extractNestedStyles(element);\r\n styleData.styles = { ...styleData.styles, ...nestedStyles };\r\n styleData.inheritedStyles = nestedStyles;\r\n }\r\n\r\n // Handle special cases for images\r\n if (element.tagName.toLowerCase() === 'img') {\r\n extractImageStyles(element, styleData);\r\n }\r\n\r\n // Filter empty styles if requested\r\n if (filterEmptyStyles && Object.keys(styleData.styles).length === 0 && !styleData.textContent) {\r\n return;\r\n }\r\n\r\n results.push(styleData);\r\n });\r\n\r\n return results;\r\n }, [parseInlineStyles, extractTagStyles, extractNestedStyles, extractImageStyles]);\r\n\r\n // Extract styles specifically for formatting tags\r\n const extractFormattingStyles = useCallback((editorContent) => {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = editorContent;\r\n \r\n const formattingTags = ['i', 'em', 'b', 'strong', 'u', 's', 'strike', 'del', 'sup', 'sub'];\r\n const formattingStyles = {};\r\n\r\n formattingTags.forEach(tag => {\r\n const elements = tempDiv.querySelectorAll(tag);\r\n elements.forEach((element, index) => {\r\n const key = `${tag}_${index}`;\r\n formattingStyles[key] = {\r\n ...tagStyleMap[tag],\r\n textContent: element.textContent,\r\n };\r\n });\r\n });\r\n\r\n return formattingStyles;\r\n }, [tagStyleMap]);\r\n\r\n // NEW: Convert styles object to HTML with semantic tags\r\n const stylesToHtml = useCallback((text, styles = {}, options = {}) => {\r\n const {\r\n preferSemanticTags = true,\r\n wrapInParagraph = true,\r\n preserveWhitespace = true\r\n } = options;\r\n\r\n if (!text || typeof text !== 'string') {\r\n return '';\r\n }\r\n\r\n let wrappedText = text;\r\n const inlineStyles = {};\r\n\r\n // Process each style property\r\n Object.entries(styles).forEach(([property, value]) => {\r\n const styleKey = `${property}-${value}`;\r\n \r\n // Check if this style can be converted to a semantic tag\r\n if (preferSemanticTags && styleTagMap[styleKey]) {\r\n const tag = styleTagMap[styleKey];\r\n wrappedText = `<${tag}>${wrappedText}</${tag}>`;\r\n } else {\r\n // Add to inline styles for non-semantic styles\r\n inlineStyles[property] = value;\r\n }\r\n });\r\n\r\n // Apply remaining inline styles\r\n if (Object.keys(inlineStyles).length > 0) {\r\n const styleAttr = Object.entries(inlineStyles)\r\n .map(([prop, val]) => `${toKebabCase(prop)}: ${val}`)\r\n .join('; ');\r\n \r\n wrappedText = `<span style=\"${styleAttr}\">${wrappedText}</span>`;\r\n }\r\n\r\n // Wrap in paragraph if requested\r\n if (wrapInParagraph) {\r\n wrappedText = `<p>${wrappedText}</p>`;\r\n }\r\n\r\n return wrappedText;\r\n }, [styleTagMap, toKebabCase]);\r\n\r\n // NEW: Convert multiple styled text segments to HTML\r\n const multipleStylesToHtml = useCallback((segments, options = {}) => {\r\n const {\r\n wrapInContainer = true,\r\n containerTag = 'div',\r\n separateElements = false\r\n } = options;\r\n\r\n if (!Array.isArray(segments)) {\r\n return '';\r\n }\r\n\r\n const htmlSegments = segments.map(segment => {\r\n const { text, styles = {}, wrapInParagraph = false } = segment;\r\n return stylesToHtml(text, styles, { ...options, wrapInParagraph });\r\n });\r\n\r\n let result = separateElements ? htmlSegments.join('\\n') : htmlSegments.join(' ');\r\n\r\n if (wrapInContainer) {\r\n result = `<${containerTag}>${result}</${containerTag}>`;\r\n }\r\n\r\n return result;\r\n }, [stylesToHtml]);\r\n\r\n // NEW: Apply styles to existing HTML content\r\n const applyStylesToHtml = useCallback((htmlContent, styles = {}, targetSelector = '*') => {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = htmlContent;\r\n\r\n const targetElements = targetSelector === '*' \r\n ? tempDiv.querySelectorAll('*') \r\n : tempDiv.querySelectorAll(targetSelector);\r\n\r\n targetElements.forEach(element => {\r\n Object.entries(styles).forEach(([property, value]) => {\r\n const styleKey = `${property}-${value}`;\r\n \r\n // Check if this style should be converted to semantic tag\r\n if (styleTagMap[styleKey]) {\r\n const tag = styleTagMap[styleKey];\r\n const wrapper = document.createElement(tag);\r\n \r\n // Move the element's content to the wrapper\r\n while (element.firstChild) {\r\n wrapper.appendChild(element.firstChild);\r\n }\r\n \r\n element.appendChild(wrapper);\r\n } else {\r\n // Apply as inline style\r\n const kebabProperty = toKebabCase(property);\r\n element.style[kebabProperty] = value;\r\n }\r\n });\r\n });\r\n\r\n return tempDiv.innerHTML;\r\n }, [styleTagMap, toKebabCase]);\r\n\r\n // NEW: Extract and convert - one-step process\r\n const extractAndConvert = useCallback((editorContent, targetStyles = {}) => {\r\n const extracted = extractStyles(editorContent);\r\n const converted = {};\r\n\r\n extracted.forEach(item => {\r\n const key = item.className || item.id || `${item.elementType}_${item.elementIndex}`;\r\n const mergedStyles = { ...item.styles, ...targetStyles };\r\n \r\n if (item.textContent) {\r\n converted[key] = stylesToHtml(item.textContent, mergedStyles, { wrapInParagraph: false });\r\n }\r\n });\r\n\r\n return converted;\r\n }, [extractStyles, stylesToHtml]);\r\n\r\n // Generate CSS string from extracted styles\r\n const generateCSS = useCallback((extractedStyles) => {\r\n let css = '';\r\n \r\n extractedStyles.forEach((item, index) => {\r\n const selector = item.className \r\n ? `.${item.className}` \r\n : item.id \r\n ? `#${item.id}` \r\n : `${item.elementType}-${index}`;\r\n\r\n const styleRules = Object.entries(item.styles)\r\n .map(([prop, value]) => ` ${toKebabCase(prop)}: ${value};`)\r\n .join('\\n');\r\n\r\n if (styleRules) {\r\n css += `${selector} {\\n${styleRules}\\n}\\n\\n`;\r\n }\r\n });\r\n\r\n return css;\r\n }, [toKebabCase]);\r\n\r\n // Get flattened styles object\r\n const getFlattenedStyles = useCallback((extractedStyles) => {\r\n const flattened = {};\r\n \r\n extractedStyles.forEach((item, index) => {\r\n const prefix = item.className || item.id || `${item.elementType}_${index}`;\r\n Object.entries(item.styles).forEach(([prop, value]) => {\r\n flattened[`${prefix}_${prop}`] = value;\r\n });\r\n });\r\n\r\n return flattened;\r\n }, []);\r\n\r\n const getSingleStyles = useCallback((extractedStyles) => {\r\n const flattened = {};\r\n \r\n extractedStyles.forEach((item, index) => {\r\n // const prefix = item.className || item.id || `${item.elementType}_${index}`;\r\n Object.entries(item.styles).forEach(([prop, value]) => {\r\n flattened[prop] = value;\r\n });\r\n });\r\n\r\n return flattened;\r\n }, []);\r\n\r\n return {\r\n // Original functions\r\n extractStyles,\r\n extractFormattingStyles,\r\n generateCSS,\r\n getFlattenedStyles,\r\n getSingleStyles,\r\n \r\n \r\n // New reverse conversion functions\r\n stylesToHtml,\r\n multipleStylesToHtml,\r\n applyStylesToHtml,\r\n extractAndConvert\r\n };\r\n};","import { useCallback, useRef } from 'react';\r\n\r\n/**\r\n * Custom hook for debouncing section content updates\r\n * @param callback - The function to debounce\r\n * @param delay - Delay in milliseconds (default: 300ms)\r\n * @returns Debounced function\r\n */\r\nexport const useDebouncedUpdate = <T extends (...args: any[]) => void>(\r\n callback: T,\r\n delay: number = 300\r\n): T => {\r\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\r\n\r\n const debouncedCallback = useCallback(\r\n (...args: Parameters<T>) => {\r\n // Clear existing timeout\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n\r\n // Set new timeout\r\n timeoutRef.current = setTimeout(() => {\r\n callback(...args);\r\n }, delay);\r\n },\r\n [callback, delay]\r\n ) as T;\r\n\r\n return debouncedCallback;\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useRef, useState, lazy, Suspense, useCallback, useMemo } from 'react';\r\nimport { useDraggable, useDroppable } from '@dnd-kit/core';\r\nimport {\r\n\tBox,\r\n\tPaper,\r\n\tMenuItem,\r\n\tFormControl,\r\n\tIconButton,\r\n\tFade,\r\n\tFormControlLabel,\r\n\tSkeleton\r\n} from '@mui/material';\r\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\r\nimport SplitIcon from '@mui/icons-material/CallSplit';\r\nimport { SectionData } from '../types/editor';\r\nimport { Edit, Save, Trash } from '../../../components/icons';\r\nimport Select from '../../../components/select/select';\r\nimport Typography from '../../../components/typography/typography';\r\nimport EditSectionModal from '../edit-section-modal/edit-section-modal';\r\nimport Checkbox from '../../../components/checkbox/checkbox';\r\nimport Chip from '../../../components/chip/chip';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useCKEditorStyleExtractor } from '../utils/style-extractor';\r\nimport { useDebouncedUpdate } from '../hooks/useDebouncedUpdate';\r\n\r\nconst CustomEditor = lazy(() => import('../../../components/editor/custom-editor'));\r\n\r\ninterface EditorSectionProps {\r\n\tsection: SectionData;\r\n\tisSelected: boolean;\r\n\tisDragging: boolean;\r\n\tisOver: boolean;\r\n\tonSelect: () => void;\r\n\tonUpdate: (content: string, options?: any) => void;\r\n\tonSplit: (content1: string, content2: string) => void;\r\n\tonDelete: () => void;\r\n\tplaceholders: Array<{ value: string; label: string }>;\r\n\tsetIsSectionEditing:(value: boolean)=> void;\r\n}\r\n\r\nconst editableSections = ['text', 'text-block', 'heading', 'heading-1', 'heading-2', 'heading-3', 'heading-4'];\r\n\r\nconst EditorSection: React.FC<EditorSectionProps> = ({\r\n\tsection,\r\n\tisSelected,\r\n\tisDragging,\r\n\tisOver,\r\n\tonSelect,\r\n\tonUpdate,\r\n\tonSplit,\r\n\tonDelete,\r\n\tplaceholders,\r\n\tsetIsSectionEditing\r\n}) => {\r\n\tconst { extractStyles, getSingleStyles } = useCKEditorStyleExtractor();\r\n\r\n\tconst {\r\n\t\tattributes,\r\n\t\tlisteners,\r\n\t\tsetNodeRef: setDraggableRef,\r\n\t\ttransform\r\n\t} = useDraggable({ id: section.id });\r\n\r\n\tconst { setNodeRef: setDroppableRef } = useDroppable({ id: section.id });\r\n\tconst [isEditing, setIsEditing] = useState(false);\r\n\tconst [isHovered, setIsHovered] = useState(false);\r\n\tconst [isOpenEditSectionModal, setIsOpenEditSectionModal] = useState(false);\r\n\tconst [isEditedFromSource, setIsEditedFromSource] = useState(Boolean(section?.is_edited_from_source));\r\n\tconst [localContent, setLocalContent] = useState(section.content);\r\n\tconst [hasUserEdited, setHasUserEdited] = useState(false); // Track if user actually made changes\r\n\tconst editorRef = useRef<any>(null);\r\n\tconst mouseHoverTimeoutRef = useRef<number | null>(null);\r\n\tconst cursorPositionRef = useRef<{ from: number; to: number } | null>(null);\r\n\tconst isRestoringCursorRef = useRef(false);\r\n\t\r\n\t// Ref-based content tracking for contentEditable optimization\r\n\t// This ref tracks content changes without triggering re-renders during editing,\r\n\t// improving performance and preventing cursor position loss\r\n\tconst contentRef = useRef<string>(section.content);\r\n\tconst originalContentRef = useRef<string>(section.content); // Store original content\r\n\r\n\t// Create debounced version of onUpdate with 300ms delay\r\n\tconst debouncedUpdate = useDebouncedUpdate(onUpdate, 300);\r\n\r\n\t// Memoize style calculation\r\n\tconst style = useMemo(() => {\r\n\t\treturn transform\r\n\t\t\t? {\r\n\t\t\t\t\ttransform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,\r\n\t\t\t\t\ttransition: 'none'\r\n\t\t\t\t}\r\n\t\t\t: { transition: 'all 0.2s ease' };\r\n\t}, [transform]);\r\n\r\n\t// Memoize sx prop for Paper to prevent re-creation\r\n\tconst paperSx = useMemo(() => ({\r\n\t\tposition: 'relative',\r\n\t\tborder: '1px dashed',\r\n\t\tborderColor: isSelected ? 'primary.main' : isOver ? 'primary.main' : 'grey.400',\r\n\t\tborderRadius: 1,\r\n\t\tbgcolor: 'white',\r\n\t\topacity: isDragging ? 0.7 : 1,\r\n\t\tboxShadow: 'none',\r\n\t\ttransition: 'all 0.2s ease',\r\n\t\t'&:hover': {\r\n\t\t\tboxShadow: 'none'\r\n\t\t},\r\n\t\t...(isOver && { borderColor: 'primary.main', boxShadow: 'none' })\r\n\t}), [isSelected, isOver, isDragging]);\r\n\r\n\t// Memoize merged ref to prevent re-creation\r\n\tconst mergedRef = useCallback((node: HTMLElement | null) => {\r\n\t\tsetDraggableRef(node);\r\n\t\tsetDroppableRef(node);\r\n\t}, [setDraggableRef, setDroppableRef]);\r\n\r\n\t// Memoize event handlers\r\n\tconst handleDblClick = useCallback(() => {\r\n\t\tif (editableSections.includes(section.type)) {\r\n\t\t\thandleEditing();\r\n\t\t}\r\n\t}, [section.type]);\r\n\r\n\tconst handleEditing = useCallback(() => {\r\n\t\t// Store original content when entering edit mode\r\n\t\toriginalContentRef.current = section.content;\r\n\t\tsetHasUserEdited(false);\r\n\t\t\r\n\t\tif (section?.isSplitPair) {\r\n\t\t\tsetIsOpenEditSectionModal(true);\r\n\t\t} else {\r\n\t\t\tsetIsEditing(true);\r\n\t\t\tsetIsSectionEditing(true);\r\n\t\t}\r\n\t}, [section?.isSplitPair, section.content, setIsSectionEditing]);\r\n\r\n\tconst handleEditorReady = useCallback((editor: any) => {\r\n\t\teditorRef.current = editor;\r\n\t\t\r\n\t\t// Track cursor position changes in the editor\r\n\t\tif (editor?._tiptap) {\r\n\t\t\teditor._tiptap.on('selectionUpdate', () => {\r\n\t\t\t\tif (!isRestoringCursorRef.current && editor._tiptap) {\r\n\t\t\t\t\tconst { from, to } = editor._tiptap.state.selection;\r\n\t\t\t\t\tcursorPositionRef.current = { from, to };\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t// Track when user actually makes changes\r\n\t\t\teditor._tiptap.on('update', ({ transaction }) => {\r\n\t\t\t\t// Only mark as edited if the transaction actually changed the document\r\n\t\t\t\tif (transaction.docChanged) {\r\n\t\t\t\t\tsetHasUserEdited(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst handleSave = useCallback((e: React.MouseEvent) => {\r\n\t\te.stopPropagation();\r\n\t\tif (editorRef.current) {\r\n\t\t\t// Save cursor position before getting content\r\n\t\t\tif (editorRef.current._tiptap) {\r\n\t\t\t\tconst { from, to } = editorRef.current._tiptap.state.selection;\r\n\t\t\t\tcursorPositionRef.current = { from, to };\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Get content from editor\r\n\t\t\t// Use getData() which returns sourceCodeRef.current from CustomEditor\r\n\t\t\t// This preserves the HTML structure better than getHTML()\r\n\t\t\tconst content = editorRef.current.getData();\r\n\t\t\t\r\n\t\t\t// Update ref immediately for instant tracking\r\n\t\t\tcontentRef.current = content;\r\n\t\t\t\r\n\t\t\t// Update local state for UI feedback\r\n\t\t\tsetLocalContent(content);\r\n\t\t\t\r\n\t\t\tconst styles = extractStyles(section.content, {\r\n\t\t\t\tincludeTagStyles: true,\r\n\t\t\t\tincludeInlineStyles: true,\r\n\t\t\t\tmergeNestedStyles: true,\r\n\t\t\t\tfilterEmptyStyles: true\r\n\t\t\t});\r\n\t\t\tconst single = getSingleStyles(styles);\r\n\t\t\t// Merge styles safely\r\n\t\t\tconst mergedStyles = {\r\n\t\t\t\t...(section.attributes?.styles || {}),\r\n\t\t\t\t...single\r\n\t\t\t};\r\n\t\r\n\t\t\t// Merge attributes, giving priority to new props\r\n\t\t\tconst mergedAttributes = {\r\n\t\t\t\t...(section.attributes || {}),\r\n\t\t\t\tstyles: mergedStyles,\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\t// Use debounced update to prevent excessive re-renders and API calls\r\n\t\t\tdebouncedUpdate(content, { is_edited_from_source: isEditedFromSource, attributes: mergedAttributes });\r\n\t\t}\r\n\t\tsetIsEditing(false);\r\n\t\tsetIsSectionEditing(false)\r\n\t\tsetIsOpenEditSectionModal(false);\r\n\t\tsetHasUserEdited(false); // Reset edit flag\r\n\t}, [debouncedUpdate, isEditedFromSource, extractStyles, getSingleStyles, section.content, section.attributes, setIsSectionEditing, hasUserEdited]);\r\n\r\n\tconst handleSplit = useCallback(() => {\r\n\t\tconst content = section.content || '';\r\n\t\tconst firstHalf = content;\r\n\t\tconst secondHalf = '';\r\n\t\tonSplit(firstHalf, secondHalf);\r\n\t}, [section.content, onSplit]);\r\n\r\n\tconst handleAddPlaceholder = useCallback((placeholder: string) => {\r\n\t\tif (editorRef.current) {\r\n\t\t\tconst viewFragment = editorRef.current.data.processor.toView(\r\n\t\t\t\t`{{${placeholder}}}`\r\n\t\t\t);\r\n\t\t\tconst modelFragment = editorRef.current.data.toModel(viewFragment);\r\n\t\t\teditorRef.current.model.insertContent(modelFragment);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst handleMouseEnter = useCallback(() => {\r\n\t\tif (mouseHoverTimeoutRef.current !== null) {\r\n\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\r\n\t\t}\r\n\t\tmouseHoverTimeoutRef.current = window.setTimeout(() => {\r\n\t\t\tsetIsHovered(true);\r\n\t\t}, 50);\r\n\t}, []);\r\n\r\n\tconst handleMouseLeave = useCallback(() => {\r\n\t\tif (mouseHoverTimeoutRef.current !== null) {\r\n\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\r\n\t\t}\r\n\t\tmouseHoverTimeoutRef.current = window.setTimeout(() => {\r\n\t\t\tsetIsHovered(false);\r\n\t\t}, 50);\r\n\t}, []);\r\n\r\n\tconst handleClick = useCallback((e: React.MouseEvent) => {\r\n\t\te.stopPropagation();\r\n\t\tonSelect();\r\n\t}, [onSelect]);\r\n\r\n\tconst handleDeleteClick = useCallback((e: React.MouseEvent) => {\r\n\t\te.stopPropagation();\r\n\t\tonDelete();\r\n\t}, [onDelete]);\r\n\r\n\tconst handleCancelEdit = useCallback(() => {\r\n\t\tsetIsEditing(false);\r\n\t\tsetIsSectionEditing(false)\r\n\t}, [setIsSectionEditing]);\r\n\r\n\tconst handleCheckboxChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n\t\tsetIsEditedFromSource(e.target.checked);\r\n\t}, []);\r\n\r\n\tconst handleSelectChange = useCallback((e: any) => {\r\n\t\tif (e.target.value) {\r\n\t\t\thandleAddPlaceholder(e.target.value as string);\r\n\t\t\te.target.value = '';\r\n\t\t}\r\n\t}, [handleAddPlaceholder]);\r\n\r\n\t// Cleanup function for hover timeout\r\n\tReact.useEffect(() => {\r\n\t\treturn () => {\r\n\t\t\tif (mouseHoverTimeoutRef.current !== null) {\r\n\t\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\r\n\t\t\t}\r\n\t\t};\r\n\t}, []);\r\n\r\n\t// Sync local content with section content when it changes externally\r\n\t// and restore cursor position if editor is focused\r\n\tReact.useEffect(() => {\r\n\t\t// Only update if content actually changed from external source\r\n\t\t// Skip if we're currently editing (content changes come from user input)\r\n\t\tif (contentRef.current === section.content) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\t// Update both ref and state for consistency\r\n\t\tcontentRef.current = section.content;\r\n\t\tsetLocalContent(section.content);\r\n\t\t\r\n\t\t// Only restore cursor position if:\r\n\t\t// 1. Editor is active (isEditing)\r\n\t\t// 2. Content change came from external source (not from user typing)\r\n\t\t// 3. We're not currently in the middle of restoring cursor\r\n\t\tif (isEditing && editorRef.current?._tiptap && cursorPositionRef.current && !isRestoringCursorRef.current) {\r\n\t\t\tconst editor = editorRef.current._tiptap;\r\n\t\t\tconst { from, to } = cursorPositionRef.current;\r\n\t\t\t\r\n\t\t\t// Use requestAnimationFrame to ensure DOM has updated\r\n\t\t\trequestAnimationFrame(() => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tisRestoringCursorRef.current = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Validate that the cursor position is still valid after content update\r\n\t\t\t\t\tconst docSize = editor.state.doc.content.size;\r\n\t\t\t\t\tconst validFrom = Math.min(from, docSize);\r\n\t\t\t\t\tconst validTo = Math.min(to, docSize);\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Restore selection\r\n\t\t\t\t\teditor.commands.setTextSelection({ from: validFrom, to: validTo });\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Ensure editor maintains focus\r\n\t\t\t\t\tif (!editor.isFocused) {\r\n\t\t\t\t\t\teditor.commands.focus();\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tconsole.warn('Failed to restore cursor position:', error);\r\n\t\t\t\t} finally {\r\n\t\t\t\t\tisRestoringCursorRef.current = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}, [section.content, isEditing]);\r\n\r\n\t// Memoize content rendering to prevent unnecessary re-renders\r\n\t// Only re-render when isEditing state changes or when not editing and localContent changes\r\n\tconst contentRenderer = useMemo(() => {\r\n\t\tif (isEditing) {\r\n\t\t\treturn (\r\n\t\t\t\t<Suspense fallback={<Skeleton />}>\r\n\t\t\t\t\t<CustomEditor \r\n\t\t\t\t\t\tkey={`editor-${section.id}`}\r\n\t\t\t\t\t\teditorRef={editorRef}\r\n\t\t\t\t\t\thandleEditorReady={handleEditorReady} \r\n\t\t\t\t\t\tdata={localContent}\r\n\t\t\t\t\t\tonError={(error: Error) => console.error('Editor error:', error)}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Suspense>\r\n\t\t\t);\r\n\t\t}\r\n\t\t\r\n\t\treturn (\r\n\t\t\t<Box\r\n\t\t\t\tdangerouslySetInnerHTML={{ __html: localContent }}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tposition: 'relative',\r\n\t\t\t\t\tpy: section.type === 'divider' ? 1 : 0,\r\n\t\t\t\t\tlineHeight: 1.6,\r\n\t\t\t\t\t'& p': { margin: 0 }\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}, [isEditing, localContent, section.type, section.id]);\r\n\r\n\t// Memoize placeholder options\r\n\tconst placeholderOptions = useMemo(() => \r\n\t\tplaceholders.map((option) => (\r\n\t\t\t<MenuItem key={option.value} value={option.value}>\r\n\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>{option.label}</Typography>\r\n\t\t\t</MenuItem>\r\n\t\t))\r\n\t, [placeholders]);\r\n\r\n\treturn (\r\n\t\t<Paper\r\n\t\t\tref={mergedRef}\r\n\t\t\tstyle={style}\r\n\t\t\televation={isHovered || isSelected ? 3 : 1}\r\n\t\t\tsx={paperSx}\r\n\t\t\tonClick={handleClick}\r\n\t\t\tonDoubleClick={handleDblClick}\r\n\t\t\tonMouseEnter={handleMouseEnter}\r\n\t\t\tonMouseLeave={handleMouseLeave}>\r\n\t\t\t{isOver && !isDragging && (\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\tright: 0,\r\n\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\tborder: '2px dashed',\r\n\t\t\t\t\t\tborderColor: 'primary.main',\r\n\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\tbgcolor: 'rgba(25, 118, 210, 0.04)',\r\n\t\t\t\t\t\tzIndex: 10,\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: 'center',\r\n\t\t\t\t\t\tpointerEvents: 'none'\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Typography type='s2' color='primary' weight='medium'>Drop here</Typography>\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t<Box\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tbgcolor: 'grey.50',\r\n\t\t\t\t\tp: 1,\r\n\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\tjustifyContent: 'space-between',\r\n\t\t\t\t\tborderBottom: '1px solid',\r\n\t\t\t\t\tborderColor: 'grey.200'\r\n\t\t\t\t}}>\r\n\t\t\t\t<Box\r\n\t\t\t\t\t{...listeners}\r\n\t\t\t\t\t{...attributes}\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\tcursor: 'grab',\r\n\t\t\t\t\t\tpx: 1,\r\n\t\t\t\t\t\tpy: 0.5,\r\n\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\ttransition: 'background-color 0.2s ease',\r\n\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.100' },\r\n\t\t\t\t\t\t'&:active': { cursor: 'grabbing' }\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t<DragIndicatorIcon\r\n\t\t\t\t\t\tsx={{ color: 'grey.600', fontSize: '1.2rem', mr: 0.5 }}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<Typography type='s3' color='theme.secondary.600' weight='medium'>Move</Typography>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n\t\t\t\t\t{isEditing ? (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<FormControlLabel control={\r\n\t\t\t\t\t\t\t\t<Checkbox \r\n\t\t\t\t\t\t\t\t\tonChange={handleCheckboxChange} \r\n\t\t\t\t\t\t\t\t\tdefaultChecked={isEditedFromSource}/>} \r\n\t\t\t\t\t\t\t\t\tlabel={<Typography type='s2' color='theme.secondary.1000'>Edited from source</Typography>} />\r\n\t\t\t\t\t\t\t<FormControl size='small' sx={{ minWidth: 160 }}>\r\n\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\tdisplayEmpty\r\n\t\t\t\t\t\t\t\t\tvalue=''\r\n\t\t\t\t\t\t\t\t\tsize='small'\r\n\t\t\t\t\t\t\t\t\trenderValue={() => 'Add placeholder...'}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'white',\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\t\t\t\t\t'& .MuiSelect-select': { py: 0.75 }\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tonChange={handleSelectChange}>\r\n\t\t\t\t\t\t\t\t\t{placeholderOptions}\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t</FormControl>\r\n\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t<IconButton size='small' onClick={handleSave}>\r\n\t\t\t\t\t\t\t\t\t<Save fontSize='small' color='inherit' />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t<IconButton size='small' onClick={handleCancelEdit} color='error'>\r\n\t\t\t\t\t\t\t\t\t<Close fontSize='small' color='inherit' />\r\n\t\t\t\t\t\t\t\t</IconButton>\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\t\t<Fade in={isHovered || isSelected} timeout={200}>\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t{section?.is_edited_from_source && (\r\n\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Edited From Source\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tsx={(theme) => ({ \r\n\t\t\t\t\t\t\t\t\t\t\ttextTransform: 'capitalize', \r\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette.theme?.tertiary1?.[200], \r\n\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette.theme?.tertiary1?.[900]\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{editableSections.includes(section.type) &&\r\n\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\tsize='small'\r\n\t\t\t\t\t\t\t\t\t\tonClick={handleEditing}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\r\n\t\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' }\r\n\t\t\t\t\t\t\t\t\t\t}}>\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}\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\tonClick={handleSplit}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\r\n\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' },\r\n\t\t\t\t\t\t\t\t\t\topacity: section?.splitWidth === 25 ? 0.5 : 1\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tdisabled={section?.splitWidth === 25}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<SplitIcon fontSize='small' color='primary' />\r\n\t\t\t\t\t\t\t\t</IconButton>\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\tonClick={handleDeleteClick}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\r\n\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' }\r\n\t\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.error.500' }} />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Fade>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t\t<Box sx={{ p: 3, bgcolor: 'white' }}>\r\n\t\t\t\t<style>\r\n {`\r\n\t\t\t\t\t\ta {\r\n\t\t\t\t\t\t\tcolor: #007bff !important;\r\n\t\t\t\t\t\t\ttext-decoration: none !important;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ta:hover {\r\n\t\t\t\t\t\t\ttext-decoration: underline;\r\n\t\t\t\t\t\t}\r\n `}\r\n </style>\r\n\t\t\t\t{contentRenderer}\r\n\t\t\t</Box>\r\n\t\t\t{isOpenEditSectionModal && <EditSectionModal\r\n\t\t\t\tisOpen={isOpenEditSectionModal}\r\n\t\t\t\tsetIsOpen={setIsOpenEditSectionModal}\r\n\t\t\t\tmodalProps={{ open: isOpenEditSectionModal }}\r\n\t\t\t\tplaceholders={placeholders}\r\n\t\t\t\thandleSave={handleSave}\r\n\t\t\t\thandleAddPlaceholder={handleAddPlaceholder}\r\n\t\t\t\thandleEditorReady={handleEditorReady}\r\n\t\t\t\tsection={section}\r\n\t\t\t/>}\r\n\t\t</Paper>\r\n\t);\r\n};\r\n\r\n// Custom comparison function to prevent unnecessary re-renders\r\n// Return true if props are equal (skip re-render), false if different (re-render)\r\nconst arePropsEqual = (prevProps: EditorSectionProps, nextProps: EditorSectionProps): boolean => {\r\n\t// Check if section data has changed\r\n\tif (prevProps.section.id !== nextProps.section.id) return false;\r\n\tif (prevProps.section.content !== nextProps.section.content) return false;\r\n\tif (prevProps.section.type !== nextProps.section.type) return false;\r\n\tif (prevProps.section.is_edited_from_source !== nextProps.section.is_edited_from_source) return false;\r\n\tif (prevProps.section.isSplitPair !== nextProps.section.isSplitPair) return false;\r\n\tif (prevProps.section.splitWidth !== nextProps.section.splitWidth) return false;\r\n\t\r\n\t// Check if interaction states have changed\r\n\tif (prevProps.isSelected !== nextProps.isSelected) return false;\r\n\tif (prevProps.isDragging !== nextProps.isDragging) return false;\r\n\tif (prevProps.isOver !== nextProps.isOver) return false;\r\n\t\r\n\t// Check if placeholders array reference has changed\r\n\tif (prevProps.placeholders !== nextProps.placeholders) return false;\r\n\t\r\n\t// Deep comparison for section attributes (styles, etc.)\r\n\tconst prevAttrs = JSON.stringify(prevProps.section.attributes);\r\n\tconst nextAttrs = JSON.stringify(nextProps.section.attributes);\r\n\tif (prevAttrs !== nextAttrs) return false;\r\n\t\r\n\t// All props are equal, skip re-render\r\n\treturn true;\r\n};\r\n\r\n// Wrap component with React.memo and custom comparison function\r\nconst MemoizedEditorSection = React.memo(EditorSection, arePropsEqual);\r\nMemoizedEditorSection.displayName = 'EditorSection';\r\n\r\nexport default MemoizedEditorSection;","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42M10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5\"\n}), 'FormatBold');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z\"\n}), 'FormatItalic');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6m-7 2v2h14v-2z\"\n}), 'FormatUnderlined');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M15 15H3v2h12zm0-8H3v2h12zM3 13h18v-2H3zm0 8h18v-2H3zM3 3v2h18V3z\"\n}), 'FormatAlignLeft');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M7 15v2h10v-2zm-4 6h18v-2H3zm0-8h18v-2H3zm4-6v2h10V7zM3 3v2h18V3z\"\n}), 'FormatAlignCenter');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M3 21h18v-2H3zm6-4h12v-2H9zm-6-4h18v-2H3zm6-4h12V7H9zM3 3v2h18V3z\"\n}), 'FormatAlignRight');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M3 21h18v-2H3zm0-4h18v-2H3zm0-4h18v-2H3zm0-4h18V7H3zm0-6v2h18V3z\"\n}), 'FormatAlignJustify');","/* eslint-disable unused-imports/no-unused-vars */\r\nimport { Box, ToggleButton, ToggleButtonGroup, Tooltip, styled, toggleButtonGroupClasses } from \"@mui/material\";\r\nimport FormatAlignLeftIcon from '@mui/icons-material/FormatAlignLeft';\r\nimport FormatAlignCenterIcon from '@mui/icons-material/FormatAlignCenter';\r\nimport FormatAlignRightIcon from '@mui/icons-material/FormatAlignRight';\r\nimport FormatAlignJustifyIcon from '@mui/icons-material/FormatAlignJustify';\r\nimport Typography from \"../../../../components/typography/typography\";\r\n\r\nconst StyledToggleButtonGroup = styled(ToggleButtonGroup)(({ theme, item }) => ({\r\n display: 'grid',\r\n borderRadius: 4,\r\n border: `1px solid #e3e3e3`,\r\n width: `100%`,\r\n gridTemplateColumns: `repeat(${item || 4}, 1fr)`,\r\n [`& .${toggleButtonGroupClasses.grouped}`]: {\r\n margin: theme.spacing(0.5),\r\n border: 0,\r\n borderRadius: theme.shape.borderRadius,\r\n [`&.${toggleButtonGroupClasses.disabled}`]: {\r\n border: 0,\r\n },\r\n },\r\n [`& .${toggleButtonGroupClasses.middleButton},& .${toggleButtonGroupClasses.lastButton}`]:\r\n {\r\n marginLeft: -1,\r\n borderLeft: '1px solid transparent',\r\n },\r\n [`& .${toggleButtonGroupClasses.selected}`] : {\r\n backgroundColor: `${theme.palette.theme.primary[800]}!important`,\r\n color: `#fff !important`\r\n }\r\n}))\r\n\r\ninterface AlignmentControlProps {\r\n alignment: string;\r\n onAlignmentChange: (event: React.MouseEvent<HTMLElement>, newAlignment: string | null) => void;\r\n displayLabel?: boolean;\r\n}\r\n\r\nconst AlignmentControl: React.FC<AlignmentControlProps> = ({\r\n alignment,\r\n onAlignmentChange,\r\n displayLabel = false,\r\n // disableJustify = false\r\n}) => {\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n {displayLabel &&\r\n <Typography type=\"s5\" weight=\"medium\" color={\"theme.secondary.800\"}>Alignment</Typography>\r\n }\r\n <StyledToggleButtonGroup\r\n value={alignment}\r\n exclusive\r\n onChange={onAlignmentChange}\r\n aria-label=\"text alignment\"\r\n size=\"small\"\r\n >\r\n <Tooltip title=\"Align Left\">\r\n <ToggleButton value=\"left\" aria-label=\"left aligned\">\r\n <FormatAlignLeftIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n <Tooltip title=\"Align Center\">\r\n <ToggleButton value=\"center\" aria-label=\"centered\">\r\n <FormatAlignCenterIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n <Tooltip title=\"Align Right\">\r\n <ToggleButton value=\"right\" aria-label=\"right aligned\">\r\n <FormatAlignRightIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n {/* {!disableJustify && */}\r\n <Tooltip title=\"Justify\">\r\n <ToggleButton value=\"justify\" aria-label=\"justified\">\r\n <FormatAlignJustifyIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n {/* } */}\r\n </StyledToggleButtonGroup>\r\n </Box>\r\n );\r\n}\r\n \r\nexport default AlignmentControl;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport {\r\n Box,\r\n TextField,\r\n ToggleButtonGroup,\r\n ToggleButton,\r\n InputAdornment,\r\n Tooltip,\r\n FormControl,\r\n MenuItem,\r\n styled,\r\n toggleButtonGroupClasses\r\n} from '@mui/material';\r\nimport FormatBoldIcon from '@mui/icons-material/FormatBold';\r\nimport FormatItalicIcon from '@mui/icons-material/FormatItalic';\r\nimport FormatUnderlinedIcon from '@mui/icons-material/FormatUnderlined';\r\nimport ColorLensIcon from '@mui/icons-material/ColorLens';\r\nimport { debounce } from 'lodash';\r\nimport Select from '../../../../components/select/select';\r\nimport AlignmentControl from './AlignmentControl';\r\n\r\n// Styled component with better typing\r\nconst StyledToggleButtonGroup = styled(ToggleButtonGroup)<{ item?: number }>(\r\n ({ theme, item = 4 }) => ({\r\n display: 'grid',\r\n borderRadius: 4,\r\n border: `1px solid #e3e3e3`,\r\n width: '100%',\r\n gridTemplateColumns: `repeat(${item}, 1fr)`,\r\n [`& .${toggleButtonGroupClasses.grouped}`]: {\r\n margin: theme.spacing(0.5),\r\n border: 0,\r\n borderRadius: theme.shape.borderRadius,\r\n [`&.${toggleButtonGroupClasses.disabled}`]: {\r\n border: 0,\r\n },\r\n },\r\n [`& .${toggleButtonGroupClasses.middleButton}, & .${toggleButtonGroupClasses.lastButton}`]:\r\n {\r\n marginLeft: -1,\r\n borderLeft: '1px solid transparent',\r\n },\r\n [`& .${toggleButtonGroupClasses.selected}`]: {\r\n backgroundColor: `${theme.palette.theme.primary[800]} !important`,\r\n color: '#fff !important',\r\n },\r\n })\r\n);\r\n\r\n// Type definitions\r\ninterface TextStyles {\r\n fontFamily?: string;\r\n fontSize?: number;\r\n lineHeight?: string | number;\r\n textAlign?: string;\r\n fontWeight?: string;\r\n fontStyle?: string;\r\n textDecoration?: string;\r\n color?: string;\r\n}\r\n\r\ninterface TextControlsProps {\r\n attrs: {\r\n styles?: TextStyles;\r\n [key: string]: any;\r\n };\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\ntype FormatType = 'bold' | 'italic' | 'underline';\r\n\r\n// Constants\r\nconst FONT_SIZES = [10, 12, 14, 16, 20, 24, 28, 32] as const;\r\nconst LINE_HEIGHTS = [1, 1.2, 1.5, 2] as const;\r\nconst FONT_FAMILIES = [\r\n 'Arial',\r\n 'Times New Roman', \r\n 'Roboto',\r\n 'Helvetica',\r\n 'Georgia',\r\n 'Courier New'\r\n] as const;\r\n\r\nconst DEBOUNCE_DELAY = 300;\r\n\r\nconst TextControls: React.FC<TextControlsProps> = ({ attrs, updateAttrs }) => {\r\n const styles = useMemo(() => attrs.styles || {}, [JSON.stringify(attrs.styles)]);\r\n \r\n // Derive format options from current styles instead of separate state\r\n const formatOptions = useMemo(() => {\r\n const options: FormatType[] = [];\r\n if (styles.fontWeight === 'bold') options.push('bold');\r\n if (styles.fontStyle === 'italic') options.push('italic');\r\n if (styles.textDecoration === 'underline') options.push('underline');\r\n return options;\r\n }, [styles.fontWeight, styles.fontStyle, styles.textDecoration]);\r\n\r\n // Stable update function using useCallback\r\n const updateStyles = useCallback(\r\n (newStyles: Partial<TextStyles>) => {\r\n updateAttrs({ \r\n styles: { \r\n ...styles, \r\n ...newStyles \r\n } \r\n });\r\n },\r\n [styles, updateAttrs]\r\n );\r\n\r\n // Fixed debounced color update function\r\n const debouncedColorUpdate = useCallback(\r\n debounce((color: string) => {\r\n updateStyles({color});\r\n }, DEBOUNCE_DELAY),\r\n [updateStyles]\r\n );\r\n\r\n // Format toggle handler\r\n const toggleFormat = useCallback(\r\n (format: FormatType) => {\r\n const isCurrentlyApplied = formatOptions.includes(format);\r\n \r\n const formatStyleMap: Record<FormatType, Partial<TextStyles>> = {\r\n bold: { fontWeight: isCurrentlyApplied ? 'normal' : 'bold' },\r\n italic: { fontStyle: isCurrentlyApplied ? 'normal' : 'italic' },\r\n underline: { textDecoration: isCurrentlyApplied ? 'none' : 'underline' }\r\n };\r\n\r\n updateStyles(formatStyleMap[format]);\r\n },\r\n [formatOptions, updateStyles]\r\n );\r\n\r\n // Alignment change handler\r\n const handleAlignmentChange = useCallback(\r\n (event: React.MouseEvent<HTMLElement>, newAlignment: string | null) => {\r\n if (newAlignment !== null) {\r\n updateStyles({ textAlign: newAlignment });\r\n }\r\n },\r\n [updateStyles]\r\n );\r\n\r\n // Color change handler\r\n const handleColorChange = useCallback(\r\n (event: React.ChangeEvent<HTMLInputElement>) => {\r\n debouncedColorUpdate(event.target.value);\r\n },\r\n [debouncedColorUpdate]\r\n );\r\n\r\n // Generic style change handlers\r\n const handleFontFamilyChange = useCallback(\r\n (event: any) => updateStyles({ fontFamily: event.target.value }),\r\n [updateStyles]\r\n );\r\n\r\n const handleFontSizeChange = useCallback(\r\n (event: any) => updateStyles({ fontSize: Number(event.target.value) }),\r\n [updateStyles]\r\n );\r\n\r\n const handleLineHeightChange = useCallback(\r\n (event: any) => updateStyles({ lineHeight: String(event.target.value) }),\r\n [updateStyles]\r\n );\r\n\r\n return (\r\n <>\r\n {/* Font Family Selection */}\r\n <Box sx={{ mb: 2 }}>\r\n <FormControl size=\"small\" fullWidth>\r\n <Select\r\n value={styles.fontFamily || ''}\r\n onChange={handleFontFamilyChange}\r\n displayEmpty\r\n label=\"Select Font\"\r\n >\r\n {FONT_FAMILIES.map((family) => (\r\n <MenuItem key={family} value={family}>\r\n {family}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n {/* Font Size and Line Height */}\r\n <Box sx={{ mb: 2, display: 'flex', gap: 1 }}>\r\n <FormControl size=\"small\" fullWidth>\r\n <Select\r\n value={styles.fontSize || ''}\r\n onChange={handleFontSizeChange}\r\n renderValue={(v) => `${v}px`}\r\n label=\"Size\"\r\n displayEmpty\r\n >\r\n {FONT_SIZES.map((size) => (\r\n <MenuItem key={size} value={size}>\r\n {size}px\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n\r\n <FormControl size=\"small\" fullWidth>\r\n <Select\r\n value={styles.lineHeight || ''}\r\n onChange={handleLineHeightChange}\r\n renderValue={(v) => `${v}x`}\r\n label=\"Line Height\"\r\n displayEmpty\r\n >\r\n {LINE_HEIGHTS.map((height) => (\r\n <MenuItem key={height} value={height}>\r\n {height}x\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n {/* Text Alignment */}\r\n <AlignmentControl \r\n alignment={styles.textAlign} \r\n onAlignmentChange={handleAlignmentChange} \r\n />\r\n\r\n {/* Format Options */}\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n <StyledToggleButtonGroup item={3}>\r\n <Tooltip title=\"Bold\">\r\n <ToggleButton\r\n value=\"bold\"\r\n selected={formatOptions.includes('bold')}\r\n onClick={() => toggleFormat('bold')}\r\n aria-label=\"bold\"\r\n size=\"small\"\r\n sx={{ borderRadius: 1 }}\r\n >\r\n <FormatBoldIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n\r\n <Tooltip title=\"Italic\">\r\n <ToggleButton\r\n value=\"italic\"\r\n selected={formatOptions.includes('italic')}\r\n onClick={() => toggleFormat('italic')}\r\n aria-label=\"italic\"\r\n size=\"small\"\r\n sx={{ borderRadius: 1 }}\r\n >\r\n <FormatItalicIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n\r\n <Tooltip title=\"Underline\">\r\n <ToggleButton\r\n value=\"underline\"\r\n selected={formatOptions.includes('underline')}\r\n onClick={() => toggleFormat('underline')}\r\n aria-label=\"underline\"\r\n size=\"small\"\r\n sx={{ borderRadius: 1 }}\r\n >\r\n <FormatUnderlinedIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n </StyledToggleButtonGroup>\r\n </Box>\r\n\r\n {/* Color Picker */}\r\n <Box sx={{ mb: 2, width: '100%' }}>\r\n <TextField\r\n label=\"Text Color\"\r\n variant=\"outlined\"\r\n type=\"color\"\r\n value={styles.color || '#000000'}\r\n onChange={handleColorChange}\r\n size=\"small\"\r\n fullWidth\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <ColorLensIcon fontSize=\"small\" />\r\n </InputAdornment>\r\n ),\r\n }}\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default React.memo(TextControls);","/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport {\r\n Box,\r\n FormControl,\r\n MenuItem,\r\n Slider,\r\n} from '@mui/material';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport TextField from '../../../../components/text-field/text-field';\r\nimport AlignmentControl from './AlignmentControl';\r\nimport Select from '../../../../components/select/select';\r\nimport ColorPickerInput from '../../../../components/color-picker-input/color-picker-input';\r\n\r\ninterface ButtonControlsProps {\r\n attrs: Record<string, any>;\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\nconst borderOptions = [\r\n {label: 'None', value: 'none'},\r\n {value: '1px solid #e0e0e0', label: 'Solid'},\r\n {value: '1px dashed #e0e0e0', label: 'Dashed'},\r\n {value: '1px dotted #e0e0e0', label: 'Dotted'},\r\n]\r\n\r\nconst ButtonControls: React.FC<ButtonControlsProps> = ({\r\n attrs,\r\n updateAttrs\r\n}) => {\r\n\r\n const { text, styles } = attrs\r\n const handleAlignmentChange = (\r\n event: React.MouseEvent<HTMLElement>,\r\n newAlignment: string | null,\r\n ) => {\r\n if(newAlignment) {\r\n let margin = '0';\r\n switch (newAlignment) {\r\n \r\n case 'justify':\r\n margin = '0 auto';\r\n break;\r\n case 'right':\r\n margin = '0 0 0 auto';\r\n break;\r\n case 'center':\r\n margin = '0 auto';\r\n break;\r\n case 'left':\r\n margin = 'auto 0 0 0';\r\n break;\r\n default:\r\n margin = '0 auto';\r\n break;\r\n }\r\n updateAttrs({ styles : { margin } });\r\n }\r\n };\r\n\r\n const getAlignment = () => {\r\n if (styles?.margin === '0 auto') {\r\n return 'center';\r\n } else if (styles?.margin === '0 0 0 auto') {\r\n return 'right';\r\n } else if (styles?.margin === 'auto 0 0 0') {\r\n return 'left';\r\n } else {\r\n return 'justify';\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <TextField\r\n label=\"Button Text\"\r\n fullWidth\r\n value={text}\r\n onChange={(e) => updateAttrs({ text: e.target.value })}\r\n size=\"small\"\r\n sx={{ mb: 2 }}\r\n />\r\n <Box sx={{ mb: 2 }}>\r\n <ColorPickerInput\r\n value={styles?.backgroundColor || '#333333'}\r\n onChange={(color) => updateAttrs({ styles :{ backgroundColor: color }})}\r\n label='Background Color'\r\n />\r\n </Box>\r\n <Box sx={{ mb: 2 }}>\r\n <ColorPickerInput\r\n value={styles?.color || '#333333'}\r\n onChange={(color) => updateAttrs({ styles :{ color: color }})}\r\n label='Text Color'\r\n // sx={{ maxWidth: 150 }}\r\n />\r\n </Box>\r\n <FormControl fullWidth size=\"small\" sx={{ mb: 2 }}>\r\n <Select\r\n value={styles?.border}\r\n renderValue={(value) => borderOptions.find((option) => option.value === value)?.label || 'None'}\r\n onChange={(e) => updateAttrs({ styles :{ border :e.target.value }})}\r\n label='Border'\r\n >\r\n <MenuItem value=\"none\">None</MenuItem>\r\n <MenuItem value=\"1px solid #e0e0e0\">Solid</MenuItem>\r\n <MenuItem value=\"1px dashed #e0e0e0\">Dashed</MenuItem>\r\n </Select>\r\n </FormControl>\r\n <Box sx={{ mb: 2 }}>\r\n <Typography type=\"s3\" color='theme.neutral.800'>\r\n Border Radius\r\n </Typography>\r\n <Slider\r\n value={styles?.borderRadius}\r\n onChange={(_, value) => updateAttrs({ styles :{ borderRadius: value as number }})}\r\n min={0}\r\n max={20}\r\n step={1}\r\n valueLabelDisplay=\"auto\"\r\n size=\"small\"\r\n marks\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Box>\r\n <Box sx={{ mb: 2 }}>\r\n <Typography type=\"s3\" color='theme.neutral.800'>\r\n Font Size\r\n </Typography>\r\n <Slider\r\n value={styles?.fontSize}\r\n onChange={(_, value) => updateAttrs({ styles :{ fontSize: value as number }})}\r\n min={10}\r\n max={20}\r\n step={1}\r\n valueLabelDisplay=\"auto\"\r\n size=\"small\"\r\n marks\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Box>\r\n <AlignmentControl alignment={getAlignment()} onAlignmentChange={handleAlignmentChange}/>\r\n </>\r\n );\r\n};\r\n\r\nexport default ButtonControls;","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport { FormControl, FormControlLabel, Grid, MenuItem, Slider, Switch, styled } from \"@mui/material\";\r\nimport ColorPickerInput from \"../../../../components/color-picker-input/color-picker-input\";\r\nimport Select from \"../../../../components/select/select\";\r\nimport Typography from \"../../../../components/typography/typography\";\r\nimport formatText from \"../../../../utils/format-text\";\r\nimport { useEffect } from \"react\";\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 interface BorderControlProps {\r\n styles: Record<string, any>,\r\n onChange: (key: string, value: any) => void\r\n isBordered: boolean;\r\n disableWidth?: boolean;\r\n disableStyle?: boolean;\r\n disableColor?: boolean;\r\n disableCollapse?: boolean;\r\n disableRadius?: boolean;\r\n initiateStyles?: (styles: Record<string, any>) => void;\r\n}\r\n\r\nconst borderStyles = [\r\n 'none',\r\n 'solid',\r\n 'dashed',\r\n 'dotted',\r\n 'double',\r\n 'groove',\r\n 'ridge',\r\n 'inset',\r\n 'outset'\r\n];\r\n\r\nconst BorderControl:React.FC<BorderControlProps> = ({\r\n styles,\r\n onChange,\r\n isBordered,\r\n disableWidth = false,\r\n disableStyle = false,\r\n disableColor = false,\r\n disableCollapse = false,\r\n disableRadius = false,\r\n initiateStyles\r\n}) => {\r\n\r\n useEffect(() => {\r\n if(initiateStyles instanceof Function) {\r\n if (!isBordered) {\r\n initiateStyles({\r\n 'border': 0,\r\n 'borderStyle':'none',\r\n 'borderColor':'#000000',\r\n 'borderCollapse':'separate',\r\n 'borderRadius':0,\r\n });\r\n } else{\r\n initiateStyles({\r\n 'border': 1,\r\n 'borderStyle':'solid',\r\n 'borderColor':'#000000',\r\n 'borderCollapse':'collapse',\r\n 'borderRadius':0,\r\n });\r\n }\r\n }\r\n }, [isBordered]);\r\n return (\r\n <Grid container spacing={2}>\r\n <Grid item xs={12}>\r\n <FormControlLabel\r\n control={\r\n <Android12Switch\r\n checked={isBordered}\r\n onChange={(e) => onChange('is_bordered', e.target.checked)}\r\n />\r\n }\r\n label={<Typography type='s5' weight='medium' color='theme.secondary.800'>Bordered Table</Typography>}\r\n labelPlacement=\"start\"\r\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', margin: 'auto'}}\r\n />\r\n </Grid>\r\n \r\n {isBordered && (\r\n <>\r\n {/* Width */}\r\n {!disableWidth && (\r\n <Grid item xs={6}>\r\n <Select\r\n value={styles.border || 1}\r\n onChange={(e) => onChange('border', e.target.value)}\r\n label=\"Border Width\"\r\n fullWidth\r\n size=\"small\"\r\n >\r\n {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((wd) => (\r\n <MenuItem key={wd} value={wd}>\r\n <Typography type='s5' color='theme.secondary.1000'>{wd}</Typography>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n )}\r\n \r\n {/* Style */}\r\n {!disableStyle && ( \r\n <Grid item xs={6}>\r\n <FormControl fullWidth size=\"small\">\r\n <Select\r\n value={styles.borderStyle || 'solid'}\r\n onChange={(e) => onChange('borderStyle', e.target.value)}\r\n renderValue={(value) => formatText(value)}\r\n label=\"Border Style\"\r\n >\r\n {borderStyles.map((style) => (\r\n <MenuItem key={style} value={style}>\r\n <Typography type='s5' color='theme.secondary.1000'>{formatText(style)}</Typography>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n )}\r\n \r\n {/* Color */}\r\n {!disableColor && ( \r\n <Grid item xs={6}>\r\n <Typography type='s5' weight='medium' color='theme.secondary.800' mb={0.5}>Border Color</Typography>\r\n <ColorPickerInput\r\n value={styles.borderColor || '#e0e0e0'}\r\n onChange={(color) => onChange('borderColor', color)}\r\n fullWidth\r\n />\r\n </Grid>\r\n )}\r\n\r\n {/* Collapse */}\r\n {!disableCollapse && ( \r\n <Grid item xs={6}>\r\n <FormControl fullWidth size=\"small\">\r\n <Select\r\n value={styles.borderCollapse || 'collapse'}\r\n onChange={(e) => onChange('borderCollapse', e.target.value)}\r\n label=\"Border Collapse\"\r\n renderValue={(value) => formatText(value)}\r\n >\r\n <MenuItem value=\"collapse\"><Typography type='s5' color='theme.secondary.1000'>Collapse</Typography></MenuItem>\r\n <MenuItem value=\"separate\"><Typography type='s5' color='theme.secondary.1000'>Separate</Typography></MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n )}\r\n\r\n {/* Radius */}\r\n {!disableRadius && (\r\n <Grid item xs={12}>\r\n <Typography type='s5' weight='medium' color='theme.secondary.800' variant=\"caption\">Border Radius</Typography>\r\n <Slider\r\n value={typeof styles.borderRadius === 'number' ? styles.borderRadius : 1}\r\n min={0}\r\n max={20}\r\n step={1}\r\n marks\r\n onChange={(_, value) => onChange('borderRadius', value)}\r\n valueLabelDisplay=\"auto\"\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Grid>\r\n )}\r\n </>\r\n )}\r\n \r\n </Grid>\r\n );\r\n}\r\n \r\nexport default BorderControl;","/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport {\r\n Box,\r\n FormControl,\r\n // Select,\r\n MenuItem,\r\n styled,\r\n Switch,\r\n Grid,\r\n FormControlLabel\r\n} from '@mui/material';\r\nimport TextField from '../../../../components/text-field/text-field';\r\nimport Select from '../../../../components/select/select';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport AlignmentControl from './AlignmentControl';\r\nimport BorderControl from './border-control';\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]\r\n },\r\n '& .Mui-checked+.MuiSwitch-track': {\r\n backgroundColor: `${theme.palette.theme.primary[700]}`,\r\n },\r\n}));\r\n\r\ninterface ImageControlsProps {\r\n attrs: Record<string, any>;\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\nconst ImageControls: React.FC<ImageControlsProps> = ({\r\n attrs,\r\n updateAttrs\r\n}) => {\r\n const { src, alt, styles } = attrs || {}\r\n\r\n const handleAlignmentChange = (\r\n event: React.MouseEvent<HTMLElement>,\r\n newAlignment: string | null,\r\n ) => {\r\n if(newAlignment) {\r\n let margin = '0';\r\n switch (newAlignment) {\r\n case 'justify':\r\n margin = '0 auto';\r\n break;\r\n case 'right':\r\n margin = '0 0 0 auto';\r\n break;\r\n case 'center':\r\n margin = '0 auto';\r\n break;\r\n case 'left':\r\n margin = 'auto 0 0 0';\r\n break;\r\n default:\r\n margin = '0 auto';\r\n break;\r\n }\r\n updateAttrs({ styles : { margin, alignment: newAlignment } });\r\n\r\n }\r\n };\r\n\r\n const getAlignment = () => {\r\n if (styles?.margin === '0 auto' || styles?.alignment === 'center') {\r\n return 'center';\r\n } else if (styles?.margin === '0 0 0 auto' || styles?.alignment === 'right') {\r\n return 'right';\r\n } else if (styles?.margin === 'auto 0 0 0' || styles?.alignment === 'left') {\r\n return 'left';\r\n } else {\r\n return 'justify';\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {/* Image URL */}\r\n <TextField\r\n label=\"Image URL\"\r\n fullWidth\r\n value={src}\r\n onChange={(e) => updateAttrs({ src: e.target.value })}\r\n size=\"small\"\r\n sx={{ mb: 2 }}\r\n />\r\n\r\n {/* Alt Text */}\r\n <TextField\r\n label=\"Alt Text\"\r\n fullWidth\r\n value={alt}\r\n onChange={(e) => updateAttrs({ alt: e.target.value })}\r\n size=\"small\"\r\n sx={{ mb: 2 }}\r\n />\r\n <FormControlLabel\r\n control={<Android12Switch defaultChecked checked={Boolean(styles?.fullWidth)}/>}\r\n label={<Typography type=\"s5\" color=\"theme.secondary.800\" weight='medium'>Full Width</Typography>}\r\n labelPlacement=\"start\"\r\n value={Boolean(styles?.fullWidth)}\r\n onClick={(e) => {\r\n const checked = e.target.checked\r\n updateAttrs({ styles: { fullWidth: checked, width: checked ? 100 : 150, height: checked ? 'auto' : 150 }})\r\n }}\r\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', margin: 'auto', mb:2 }}\r\n />\r\n\r\n {/* Width Input */}\r\n <Grid container spacing={2}>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"Width (px)\"\r\n type=\"number\"\r\n fullWidth\r\n value={styles?.fullWidth ? '' : styles?.width}\r\n onChange={(e) =>\r\n updateAttrs({ styles: { width: Number(e.target.value) }})\r\n }\r\n size=\"small\"\r\n sx={{ mb: 2 }}\r\n inputProps={{ min: 1 }}\r\n disabled={styles?.fullWidth}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n {/* Height Input */}\r\n <TextField\r\n label=\"Height (px)\"\r\n type=\"number\"\r\n fullWidth\r\n value={styles?.fullWidth ? '' : styles?.height}\r\n onChange={(e) =>\r\n updateAttrs({ styles: { height: Number(e.target.value) }})\r\n }\r\n size=\"small\"\r\n sx={{ mb: 2 }}\r\n inputProps={{ min: 1 }}\r\n disabled={styles?.fullWidth}\r\n />\r\n\r\n </Grid>\r\n\r\n </Grid>\r\n\r\n\r\n {/* Object Fit Dropdown */}\r\n <Box sx={{ mb: 2 }}>\r\n <FormControl size=\"small\" fullWidth>\r\n <Select\r\n label='Object Fit'\r\n value={styles?.objectFit}\r\n onChange={(e) =>\r\n updateAttrs({ styles: { objectFit: e.target.value }})\r\n }\r\n displayEmpty\r\n >\r\n <MenuItem value=\"contain\">Contain</MenuItem>\r\n <MenuItem value=\"cover\">Cover</MenuItem>\r\n <MenuItem value=\"fill\">Fill</MenuItem>\r\n <MenuItem value=\"none\">None</MenuItem>\r\n <MenuItem value=\"scale-down\">Scale Down</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n {/* Alignment Toggle Buttons */}\r\n <AlignmentControl\r\n alignment={getAlignment()}\r\n onAlignmentChange={handleAlignmentChange}\r\n displayLabel\r\n />\r\n\r\n <BorderControl\r\n styles={styles}\r\n onChange={(key, value) => updateAttrs({ styles: { [key]: value } })}\r\n isBordered={styles?.is_bordered}\r\n disableCollapse\r\n initiateStyles={(styles) => updateAttrs({ styles })}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default ImageControls;","/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport {\r\n Box,\r\n FormControl,\r\n MenuItem,\r\n Slider,\r\n InputAdornment,\r\n} from '@mui/material';\r\nimport ColorLensIcon from '@mui/icons-material/ColorLens';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport TextField from '../../../../components/text-field/text-field';\r\nimport Select from '../../../../components/select/select';\r\nimport formatText from '../../../../utils/format-text';\r\n\r\ninterface DividerControlsProps {\r\n attrs: Record<string, any>;\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\nconst DividerControls: React.FC<DividerControlsProps> = ({\r\n attrs,\r\n updateAttrs,\r\n}) => {\r\n const { styles } = attrs\r\n return (\r\n <>\r\n <FormControl fullWidth size=\"small\" sx={{ mb: 2 }}>\r\n <Select\r\n label='Style'\r\n value={styles?.borderStyle}\r\n onChange={(e) => updateAttrs({ styles: { borderStyle: e.target.value } })}\r\n renderValue={(value) => formatText(value)}\r\n >\r\n <MenuItem value=\"solid\">Solid</MenuItem>\r\n <MenuItem value=\"dashed\">Dashed</MenuItem>\r\n <MenuItem value=\"dotted\">Dotted</MenuItem>\r\n </Select>\r\n </FormControl>\r\n <Box sx={{ mb: 1 }}>\r\n <Typography type=\"s5\" color='theme.secondary.800' weight='medium'>\r\n Thickness (px)\r\n </Typography>\r\n <Slider\r\n value={styles?.borderWidth}\r\n onChange={(_, value) => updateAttrs({ styles: { borderWidth: value as number }})}\r\n min={1}\r\n max={10}\r\n step={1}\r\n valueLabelDisplay=\"auto\"\r\n size=\"small\"\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Box>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n label=\"Divider Color\"\r\n type=\"color\"\r\n value={styles?.borderColor}\r\n onChange={(e) => updateAttrs({ styles: { borderColor: e.target.value }})}\r\n size=\"small\"\r\n fullWidth\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <ColorLensIcon fontSize=\"small\" />\r\n </InputAdornment>\r\n ),\r\n }}\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default DividerControls;","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z\"\n}), 'Refresh');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M17 20.41 18.41 19 15 15.59 13.59 17zM7.5 8H11v5.59L5.59 19 7 20.41l6-6V8h3.5L12 3.5z\"\n}), 'MergeType');","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable no-mixed-spaces-and-tabs */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\nimport {\r\n Box,\r\n MenuItem,\r\n Accordion as MuiAccordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n Grid,\r\n FormControlLabel,\r\n Tabs,\r\n Tab,\r\n AccordionProps,\r\n styled,\r\n Divider,\r\n IconButton,\r\n Chip,\r\n Alert,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n Table,\r\n TableHead,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n} from '@mui/material';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport RefreshIcon from '@mui/icons-material/Refresh';\r\nimport MergeIcon from '@mui/icons-material/MergeType';\r\nimport SplitIcon from '@mui/icons-material/CallSplit';\r\nimport ColorPickerInput from '../../../../components/color-picker-input/color-picker-input';\r\nimport TextField from '../../../../components/text-field/text-field';\r\nimport Select from '../../../../components/select/select';\r\nimport formatText from '../../../../utils/format-text';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport Android12Switch from '../../../../components/switches/android-12-switch';\r\nimport BorderControl from './border-control';\r\nimport Button from '../../../../components/button/button';\r\nimport Checkbox from '../../../../components/checkbox/checkbox';\r\nimport { Trash } from '../../../../components/icons';\r\nimport SearchableSelect from '../../../../components/searchable-select';\r\n\r\n// Type definitions\r\ninterface TableColumn {\r\n id: string;\r\n header: string;\r\n}\r\n\r\ninterface TableRow {\r\n [key: string]: string;\r\n}\r\n\r\ninterface CellMerge {\r\n section: 'thead' | 'tbody';\r\n rowStart: number;\r\n rowEnd: number;\r\n colStart: number;\r\n colEnd: number;\r\n value: string;\r\n}\r\n\r\ninterface TableData {\r\n columns: TableColumn[];\r\n rows: TableRow[];\r\n mergedCells?: CellMerge[];\r\n}\r\n\r\nconst Accordion = styled(\r\n (props: AccordionProps) => (\r\n <MuiAccordion disableGutters elevation={0} square {...props} />\r\n )\r\n)(({ theme }) => ({\r\n border: `1px solid ${theme.palette.divider}`,\r\n borderRadius: 0,\r\n '&:not(:last-child)': {\r\n borderBottom: 0,\r\n },\r\n '&::before': {\r\n display: 'none',\r\n },\r\n}));\r\n\r\ninterface TableControlsProps {\r\n tableData: TableData;\r\n setTableData: (value: TableData) => void;\r\n attrs: any;\r\n updateAttrs: (value: any) => void;\r\n placeholders: Record<string, any>[];\r\n handleSave?: () => void;\r\n setParentRowLevel?: (value: boolean) => void;\r\n levelType?: boolean;\r\n relation_table?: any;\r\n}\r\n\r\nconst textAlignOptions = ['left', 'center', 'right', 'justify'];\r\nconst fontWeightOptions = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\r\nconst fontFamilyOptions = [\r\n 'Arial, sans-serif',\r\n 'Helvetica, sans-serif',\r\n 'Times New Roman, serif',\r\n 'Georgia, serif',\r\n 'Courier New, monospace',\r\n 'Verdana, sans-serif',\r\n 'Tahoma, sans-serif',\r\n 'Trebuchet MS, sans-serif'\r\n];\r\n\r\nconst TableControls: React.FC<TableControlsProps> = ({\r\n tableData,\r\n setTableData,\r\n attrs,\r\n updateAttrs,\r\n placeholders,\r\n handleSave,\r\n setParentRowLevel,\r\n levelType,\r\n relation_table\r\n}) => {\r\n\r\n const [tabValue, setTabValue] = useState(0);\r\n const [expanded, setExpanded] = useState('tableBasic');\r\n const [autoPopulateEnabled, setAutoPopulateEnabled] = useState(true);\r\n const [mergeDialogOpen, setMergeDialogOpen] = useState(false);\r\n const [selectedCells, setSelectedCells] = useState<{section: 'thead' | 'tbody', row: number, col: number}[]>([]);\r\n const [mergeValue, setMergeValue] = useState('');\r\n const [rowLevel, setRowLevel] = useState(false);\r\n const { placeholders: tPlaceholders } = attrs;\r\n const [selectedTable, setSelectedTable] = useState<string | null>(null);\r\n // Fix: Change customText to an object type\r\n const [customText, setCustomText] = useState<{ [rowIndex: number]: { [columnId: string]: string } }>({});\r\n // New state to track row-level placeholder assignments\r\n const [rowPlaceholders, setRowPlaceholders] = useState<{ [rowIndex: number]: { [columnId: string]: string } }>({});\r\n // Initialize merged cells from attrs\r\n const mergedCells = tableData.mergedCells || [];\r\nconst [isUpdating, setIsUpdating] = useState(false);\r\n\r\nconst getAttributes = (tableId: string) => {\r\n\r\n if (!relation_table || !Array.isArray(relation_table)) {\r\n return [];\r\n }\r\n \r\n const table = relation_table.find((table: any) => {\r\n return table?.dataKey == tableId\r\n })\r\n if (!table || !table.fields || !Array.isArray(table.fields)) {\r\n return [];\r\n }\r\n\r\n return table.fields\r\n // .map(field => {\r\n // const fieldName = field.key;\r\n // return {\r\n // label: fieldName?.replace(/_id$/, '') || '', \r\n // value: field?.select,\r\n // };\r\n // });\r\n};\r\n\r\nconst tableAttributes = useMemo(() => \r\n selectedTable ? getAttributes(selectedTable) : placeholders,\r\n [placeholders, selectedTable, relation_table] \r\n)\r\n // Initialize styles from attrs or use default styles\r\n const [tableStyles, setTableStyles] = useState(attrs?.styles || {\r\n is_bordered: true,\r\n border: 1,\r\n borderStyle: 'solid',\r\n borderColor: '#e0e0e0',\r\n borderCollapse: 'collapse',\r\n width: '100%',\r\n thCells: {\r\n padding: 8\r\n },\r\n tbCells: {\r\n padding: 8\r\n },\r\n tHead: {\r\n backgroundColor: '#f5f5f5',\r\n color: '#333333',\r\n fontSize: 14,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n margin: '0.5em 0',\r\n },\r\n tBody: {\r\n backgroundColor: '#ffffff',\r\n color: '#333333',\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n }\r\n });\r\n\r\n // Apply styles to attrs when tableStyles change\r\n useEffect(() => {\r\n updateAttrs({ styles: tableStyles });\r\n }, [JSON.stringify(tableStyles)]);\r\n\r\n // Auto-populate rows when placeholders change\r\n useEffect(() => {\r\n if (autoPopulateEnabled && (tPlaceholders || rowLevel)) {\r\n populateRowsWithPlaceholders();\r\n }\r\n }, [tPlaceholders, autoPopulateEnabled, rowLevel, rowPlaceholders]);\r\n\r\n // Generate unique column ID\r\n const generateColumnId = () => {\r\n const existingIds = tableData.columns.map(col => col.id);\r\n let counter = 1;\r\n while (existingIds.includes(`col${counter}`)) {\r\n counter++;\r\n }\r\n return `col${counter}`;\r\n };\r\n\r\n // Get placeholder value by key\r\n const getPlaceholderValue = (placeholderKey: string): string => {\r\n const placeholder = tableAttributes.find(p => p.value === placeholderKey);\r\n if (!placeholder) return '';\r\n \r\n // Return the placeholder syntax for row-level mode\r\n if (rowLevel) {\r\n return `{{${placeholder.value}}}`;\r\n }\r\n \r\n // Return the actual value or a sample value if it's dynamic\r\n if (typeof placeholder.actualValue !== 'undefined') {\r\n return String(placeholder.actualValue);\r\n }\r\n \r\n // For dynamic placeholders, return a sample/preview value\r\n switch (placeholder.type) {\r\n case 'date':\r\n return new Date().toLocaleDateString();\r\n case 'datetime':\r\n return new Date().toLocaleString();\r\n case 'number':\r\n return '123';\r\n case 'currency':\r\n return '$1,234.56';\r\n case 'email':\r\n return 'example@domain.com';\r\n case 'phone':\r\n return '+1 (555) 123-4567';\r\n case 'url':\r\n return 'https://example.com';\r\n default:\r\n return `{{${placeholder.value}}}` || placeholder.label;\r\n }\r\n };\r\n\r\n // Modified: Populate rows with placeholder values for both column and row level\r\n const populateRowsWithPlaceholders = () => {\r\n if (!tPlaceholders && !rowLevel) return;\r\n\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.map((row, rowIndex) => {\r\n const updatedRow = { ...row };\r\n \r\n prev.columns.forEach(column => {\r\n let placeholderKey: string | undefined;\r\n \r\n // Priority: Row-level placeholders take precedence when rowLevel is true\r\n if (rowLevel && rowPlaceholders[rowIndex]?.[column.id]) {\r\n placeholderKey = rowPlaceholders[rowIndex][column.id];\r\n } else if (tPlaceholders?.[column.id]) {\r\n placeholderKey = tPlaceholders[column.id];\r\n }\r\n\r\n if (placeholderKey) {\r\n updatedRow[column.id] = getPlaceholderValue(placeholderKey);\r\n // Preserve static text in the _static field\r\n const staticText = customText[rowIndex]?.[column.id] || '';\r\n if (staticText) {\r\n updatedRow[`${column.id}_static`] = `${staticText} ${updatedRow[column.id]}`;\r\n }\r\n }\r\n });\r\n \r\n return updatedRow;\r\n })\r\n }));\r\n setIsUpdating(false);\r\n };\r\n\r\n // Check if a cell is merged or covered by a merge\r\n const getCellMergeInfo = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\r\n const merge = mergedCells?.find(m => \r\n m.section === section &&\r\n rowIndex >= m.rowStart && rowIndex <= m.rowEnd &&\r\n colIndex >= m.colStart && colIndex <= m.colEnd\r\n );\r\n \r\n if (!merge) return null;\r\n \r\n return {\r\n merge,\r\n isTopLeft: rowIndex === merge.rowStart && colIndex === merge.colStart,\r\n isCovered: !(rowIndex === merge.rowStart && colIndex === merge.colStart)\r\n };\r\n };\r\n\r\n // Check if cell is selected for merging\r\n const isCellSelected = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\r\n return selectedCells.some(cell => \r\n cell.section === section && cell.row === rowIndex && cell.col === colIndex\r\n );\r\n };\r\n\r\n // Toggle cell selection for merging\r\n const toggleCellSelection = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\r\n const cellKey = { section, row: rowIndex, col: colIndex };\r\n const isSelected = isCellSelected(section, rowIndex, colIndex);\r\n \r\n if (isSelected) {\r\n setSelectedCells(prev => prev.filter(cell => \r\n !(cell.section === section && cell.row === rowIndex && cell.col === colIndex)\r\n ));\r\n } else {\r\n // Prevent mixing header and body cells in the same merge\r\n const hasDifferentSection = selectedCells.some(cell => cell.section !== section);\r\n if (hasDifferentSection) {\r\n alert('Cannot select cells from both header and body for the same merge');\r\n return;\r\n }\r\n setSelectedCells(prev => [...prev, cellKey]);\r\n }\r\n };\r\n\r\n // Open merge dialog\r\n const openMergeDialog = () => {\r\n if (selectedCells.length < 2) {\r\n alert('Please select at least 2 cells to merge');\r\n return;\r\n }\r\n \r\n // Get value from first selected cell\r\n const firstCell = selectedCells[0];\r\n let firstCellValue = '';\r\n let customTextValue = '';\r\n\r\n if (firstCell.section === 'tbody') {\r\n const columnId = tableData.columns[firstCell.col]?.id;\r\n firstCellValue = tableData.rows[firstCell.row]?.[columnId] || '';\r\n if (rowLevel) {\r\n customTextValue = customText[firstCell.row]?.[columnId] || '';\r\n }\r\n } else {\r\n firstCellValue = tableData.columns[firstCell.col]?.header || '';\r\n }\r\n\r\n // Combine customText with cell value only in row-level mode\r\n const initialMergeValue = rowLevel && customTextValue \r\n ? `${customTextValue} ${firstCellValue}`.trim() \r\n : firstCellValue;\r\n\r\n setMergeValue(initialMergeValue);\r\n setMergeDialogOpen(true);\r\n};\r\n\r\n // Perform cell merge\r\n const mergeCells = () => {\r\n if (selectedCells.length < 2) return;\r\n\r\n const section = selectedCells[0].section;\r\n const rowIndices = selectedCells.map(cell => cell.row);\r\n const colIndices = selectedCells.map(cell => cell.col);\r\n \r\n const rowStart = Math.min(...rowIndices);\r\n const rowEnd = Math.max(...rowIndices);\r\n const colStart = Math.min(...colIndices);\r\n const colEnd = Math.max(...colIndices);\r\n\r\n // Check if selection forms a rectangle\r\n const expectedCells = (rowEnd - rowStart + 1) * (colEnd - colStart + 1);\r\n if (selectedCells.length !== expectedCells) {\r\n alert('Please select a rectangular area of cells to merge');\r\n return;\r\n }\r\n\r\n // Check for overlapping merges\r\n const hasOverlap = mergedCells.some(existing => \r\n existing.section === section &&\r\n !(rowEnd < existing.rowStart || rowStart > existing.rowEnd ||\r\n colEnd < existing.colStart || colStart > existing.colEnd)\r\n );\r\n\r\n if (hasOverlap) {\r\n alert('Cannot merge cells that overlap with existing merged cells');\r\n return;\r\n }\r\n\r\n const newMerge: CellMerge = {\r\n section,\r\n rowStart,\r\n rowEnd,\r\n colStart,\r\n colEnd,\r\n value: mergeValue\r\n };\r\n\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n mergedCells: [...(prev.mergedCells || []), newMerge],\r\n columns: section === 'thead' ? prev.columns.map((col, index) => \r\n index === colStart ? { ...col, header: mergeValue } : col\r\n ) : prev.columns\r\n }));\r\n\r\n setSelectedCells([]);\r\n setMergeValue('');\r\n setMergeDialogOpen(false);\r\n };\r\n\r\n // Split merged cell\r\n const splitMergedCell = (mergeIndex: number) => {\r\n const merge = mergedCells[mergeIndex];\r\n \r\n setTableData(prev => {\r\n const updatedRows = [...prev.rows];\r\n const updatedColumns = [...prev.columns];\r\n \r\n if (merge.section === 'tbody') {\r\n for (let row = merge.rowStart; row <= merge.rowEnd; row++) {\r\n for (let col = merge.colStart; col <= merge.colEnd; col++) {\r\n const columnId = prev.columns[col]?.id;\r\n if (columnId && updatedRows[row]) {\r\n updatedRows[row][columnId] = merge.value;\r\n }\r\n }\r\n }\r\n } else {\r\n if (updatedColumns[merge.colStart]) {\r\n updatedColumns[merge.colStart].header = merge.value;\r\n }\r\n }\r\n \r\n return {\r\n ...prev,\r\n rows: updatedRows,\r\n name:selectedTable||'',\r\n columns: updatedColumns,\r\n mergedCells: prev.mergedCells?.filter((_, index) => index !== mergeIndex) || []\r\n };\r\n });\r\n };\r\n\r\n // Add new column\r\n const addColumn = () => {\r\n const newColumnId = generateColumnId();\r\n const newColumn: TableColumn = {\r\n id: newColumnId,\r\n header: `Column ${tableData.columns.length + 1}`\r\n };\r\n\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n columns: [...prev.columns, newColumn],\r\n rows: prev.rows.map(row => ({\r\n ...row,\r\n [newColumnId]: ''\r\n })),\r\n mergedCells: prev.mergedCells?.map(merge => ({\r\n ...merge\r\n })) || []\r\n }));\r\n };\r\n\r\n // Remove column\r\n const removeColumn = (columnId: string) => {\r\n const columnIndex = tableData.columns.findIndex(col => col.id === columnId);\r\n \r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n columns: prev.columns.filter(col => col.id !== columnId),\r\n rows: prev.rows.map(row => {\r\n const { [columnId]: removed, ...rest } = row;\r\n return rest;\r\n }),\r\n mergedCells: prev.mergedCells\r\n ?.filter(merge => !(merge.colStart <= columnIndex && merge.colEnd >= columnIndex))\r\n .map(merge => ({\r\n ...merge,\r\n colStart: merge.colStart > columnIndex ? merge.colStart - 1 : merge.colStart,\r\n colEnd: merge.colEnd > columnIndex ? merge.colEnd - 1 : merge.colEnd\r\n })) || []\r\n }));\r\n\r\n if (tPlaceholders && tPlaceholders[columnId]) {\r\n const updatedPlaceholders = { ...tPlaceholders };\r\n delete updatedPlaceholders[columnId];\r\n updateAttrs({ placeholders: updatedPlaceholders });\r\n }\r\n };\r\n\r\n // Update column header\r\n const updateColumnHeader = (columnId: string, newHeader: string) => {\r\n setTableData(prev => ({\r\n ...prev,\r\n columns: prev.columns.map(col =>\r\n col.id === columnId ? { ...col, header: newHeader } : col\r\n )\r\n }));\r\n };\r\n\r\n // Add new row\r\nconst addRow = () => {\r\n const newRow: TableRow = {};\r\n\r\n tableData.columns.forEach(col => {\r\n if (tPlaceholders?.[col.id]) {\r\n const placeholderKey = tPlaceholders[col.id];\r\n newRow[col.id] = `{{${placeholderKey}}}`;\r\n if(rowLevel){\r\n newRow[`${col.id}_static`] = newRow[col.id];\r\n }\r\n \r\n } else if (tableData.rows.length > 0) {\r\n // Copy first row's data if no placeholder\r\n newRow[col.id] = tableData.rows[0][col.id] || '';\r\n if(rowLevel){\r\n newRow[`${col.id}_static`] = tableData.rows[0][`${col.id}_static`] || ''\r\n }\r\n } else {\r\n // Default to empty\r\n if(rowLevel){\r\n newRow[`${col.id}_static`] = '';\r\n }\r\n newRow[col.id] = '';\r\n }\r\n });\r\n\r\n setTableData(prev => {\r\n const updatedRows = [...prev.rows, newRow];\r\n return {\r\n ...prev,\r\n rows: updatedRows,\r\n name:selectedTable||'',\r\n mergedCells: prev.mergedCells?.map(merge => ({ ...merge })) || []\r\n };\r\n });\r\n handleSave()\r\n};\r\n\r\n // Remove row\r\n const removeRow = (rowIndex: number) => {\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.filter((_, index) => index !== rowIndex),\r\n mergedCells: prev.mergedCells\r\n ?.filter(merge => !(merge.section === 'tbody' && merge.rowStart <= rowIndex && merge.rowEnd >= rowIndex))\r\n .map(merge => ({\r\n ...merge,\r\n rowStart: merge.section === 'tbody' && merge.rowStart > rowIndex ? merge.rowStart - 1 : merge.rowStart,\r\n rowEnd: merge.section === 'tbody' && merge.rowEnd > rowIndex ? merge.rowEnd - 1 : merge.rowEnd\r\n })) || []\r\n }));\r\n\r\n // Clean up rowPlaceholders and customText for the removed row\r\n setRowPlaceholders(prev => {\r\n const updated = { ...prev };\r\n delete updated[rowIndex];\r\n return updated;\r\n });\r\n setCustomText(prev => {\r\n const updated = { ...prev };\r\n delete updated[rowIndex];\r\n return updated;\r\n });\r\n };\r\n\r\n // Modified: Update cell value and trigger placeholder population\r\nconst updateRowCellValue = (rowIndex: number, columnId: string, value: string) => {\r\n setIsUpdating(true);\r\n const colIndex = tableData.columns.findIndex(col => col.id === columnId);\r\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\r\n const staticText = rowLevel ? (customText[rowIndex]?.[columnId] || '') : '';\r\n\r\n if (mergeInfo) {\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n mergedCells: prev.mergedCells?.map(merge => \r\n merge === mergeInfo.merge ? { ...merge, value } : merge\r\n ) || []\r\n }));\r\n } else {\r\n if (rowLevel && value) {\r\n setRowPlaceholders(prev => {\r\n const updated = { ...prev };\r\n if (!updated[rowIndex]) {\r\n updated[rowIndex] = {};\r\n }\r\n updated[rowIndex][columnId] = value;\r\n return updated;\r\n });\r\n } else if (rowLevel && !value) {\r\n setRowPlaceholders(prev => {\r\n const updated = { ...prev };\r\n if (updated[rowIndex]?.[columnId]) {\r\n delete updated[rowIndex][columnId];\r\n if (Object.keys(updated[rowIndex]).length === 0) {\r\n delete updated[rowIndex];\r\n }\r\n }\r\n return updated;\r\n });\r\n }\r\n\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.map((row, idx) =>\r\n idx === rowIndex ? { \r\n ...row, \r\n [columnId]: rowLevel ? (value ? `{{${value}}}` : '') : (value ? getPlaceholderValue(value) : ''),\r\n [`${columnId}_static`]: staticText ? `${staticText} ${value ? getPlaceholderValue(value) : ''}`.trim() : (value ? getPlaceholderValue(value) : '')\r\n } : row\r\n )\r\n }));\r\n\r\n populateRowsWithPlaceholders();\r\n }\r\n };\r\nconst updateCellValue = (rowIndex: number, columnId: string, value: string) => {\r\n setIsUpdating(true);\r\n const colIndex = tableData.columns.findIndex(col => col.id === columnId);\r\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\r\n const staticText = customText[rowIndex]?.[columnId] || '';\r\n\r\n if (mergeInfo) {\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n mergedCells: prev.mergedCells?.map(merge => \r\n merge === mergeInfo.merge ? { ...merge, value } : merge\r\n ) || []\r\n }));\r\n } else {\r\n if (rowLevel) {\r\n setRowPlaceholders(prev => {\r\n const updated = { ...prev };\r\n if (!updated[rowIndex]) {\r\n updated[rowIndex] = {};\r\n }\r\n if (value) {\r\n updated[rowIndex][columnId] = value;\r\n } else {\r\n delete updated[rowIndex][columnId];\r\n if (Object.keys(updated[rowIndex]).length === 0) {\r\n delete updated[rowIndex];\r\n }\r\n }\r\n return updated;\r\n });\r\n }\r\n\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.map((row, idx) =>\r\n idx === rowIndex ? { \r\n ...row, \r\n [columnId]: rowLevel ? (value ? `{{${value}}}` : '') : value,\r\n [`${columnId}_static`]: staticText ? `${staticText} ${value || ''}`.trim() : (value || '')\r\n } : row\r\n )\r\n }));\r\n\r\n if (rowLevel || (autoPopulateEnabled && tPlaceholders?.[columnId])) {\r\n populateRowsWithPlaceholders();\r\n }\r\n setIsUpdating(false);\r\n }\r\n };\r\n\r\n // Modified: Update column placeholder\r\n const updateColumnPlaceholder = (columnId: string, placeholderValue: string) => {\r\n setIsUpdating(true);\r\n const updatedPlaceholders = {\r\n ...tPlaceholders,\r\n [columnId]: placeholderValue\r\n };\r\n \r\n if (!placeholderValue) {\r\n delete updatedPlaceholders[columnId];\r\n }\r\n \r\n updateAttrs({ placeholders: updatedPlaceholders });\r\n\r\n if (autoPopulateEnabled) {\r\n const newCellValue = placeholderValue ? getPlaceholderValue(placeholderValue) : '';\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.map(row => ({\r\n ...row,\r\n [columnId]: newCellValue\r\n }))\r\n }));\r\n }\r\n setIsUpdating(false);\r\n };\r\n\r\n // Refresh all rows with current placeholder values\r\n const refreshPlaceholderData = () => {\r\n populateRowsWithPlaceholders();\r\n };\r\n\r\n // Get placeholder info for display\r\n const getPlaceholderInfo = (placeholderKey: string) => {\r\n const placeholder = placeholders.find(p => p.value === placeholderKey);\r\n return placeholder ? {\r\n label: placeholder.label,\r\n type: placeholder.type || 'text',\r\n description: placeholder.description || ''\r\n } : null;\r\n };\r\n\r\n const handleTabChange = (event: React.SyntheticEvent, newValue: number) => {\r\n setTabValue(newValue);\r\n };\r\n\r\n const handleAccordionChange = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => {\r\n setExpanded(isExpanded ? panel : '');\r\n };\r\n\r\n const updateTableStyle = (key: string, value: any) => {\r\n setTableStyles(prev => ({\r\n ...prev,\r\n [key]: value\r\n }));\r\n };\r\n\r\n const updateHeaderStyle = (key: string, value: any) => {\r\n setTableStyles(prev => ({\r\n ...prev,\r\n tHead: {\r\n ...prev.tHead,\r\n [key]: value\r\n }\r\n }));\r\n };\r\n\r\n const updateHeaderCellStyle = (key: string, value: any) => {\r\n setTableStyles(prev => ({\r\n ...prev,\r\n thCells: {\r\n ...prev.thCells,\r\n [key]: value\r\n }\r\n }));\r\n };\r\n\r\n const updateBodyStyle = (key: string, value: any) => {\r\n setTableStyles(prev => ({\r\n ...prev,\r\n tBody: {\r\n ...prev.tBody,\r\n [key]: value\r\n }\r\n }));\r\n };\r\n\r\n const updateBodyCellStyle = (key: string, value: any) => {\r\n setTableStyles(prev => ({\r\n ...prev,\r\n tbCells: {\r\n ...prev.tbCells,\r\n [key]: value\r\n }\r\n }));\r\n };\r\n\r\n const resetTable=()=>{\r\n setTableData((prev: TableData) => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.map((row: TableRow) => {\r\n return {...Object.fromEntries(prev.columns.map((col: TableColumn) => [col?.id, '']))\r\n \t}\r\n })\r\n }));\r\n }\r\n // Count columns with placeholders\r\n const columnsWithPlaceholders = tPlaceholders ? Object.keys(tPlaceholders).length : 0;\r\nuseEffect(() => {\r\n // Determine if rowLevel should be enabled\r\n setRowLevel(levelType);\r\n setSelectedTable(tableData?.name || null); // Set default table if available\r\n // Update custom text by extracting values from _static fields\r\n setCustomText((prev: { [rowIndex: number]: { [columnId: string]: string } }) => {\r\n const updated: { [rowIndex: number]: { [columnId: string]: string } } = {}; // Fixed missing bracket here\r\n \r\n tableData.rows.forEach((row, rowIndex) => {\r\n Object.keys(row).forEach(columnId => {\r\n if (columnId.endsWith('_static')) {\r\n const originalColumnId = columnId.replace('_static', '');\r\n if (!updated[rowIndex]) {\r\n updated[rowIndex] = {};\r\n }\r\n\r\n // Get the original column value (without _static suffix)\r\n const columnValue = row[originalColumnId] || '';\r\n \r\n // Get the static value and remove the original column value if it appears\r\n let staticValue = row[columnId] || '';\r\n if (columnValue && staticValue.includes(columnValue)) {\r\n staticValue = staticValue.replace(columnValue, '').trim();\r\n }\r\n \r\n // Also remove any {{value}} placeholders\r\n staticValue = staticValue.replace(/\\{\\{\\s*value\\s*\\}\\}/g, '').trim();\r\n \r\n updated[rowIndex][originalColumnId] = staticValue;\r\n }\r\n });\r\n });\r\n \r\n return updated;\r\n });\r\n\r\n}, [tableData]);\r\n\r\nuseEffect(()=>{\r\n if(!selectedTable) {\r\n resetTable()\r\n }\r\n\r\n},[selectedTable]);\r\n return (\r\n <>\r\n <Box sx={{ mb: 2, borderBottom: 1,paddingBottom: 5, borderColor: 'divider' }}>\r\n <Tabs value={tabValue} onChange={handleTabChange} variant=\"fullWidth\" sx={(theme) => ({\r\n '& .MuiTabs-indicator': {\r\n backgroundColor: theme.palette.theme?.primary[700]\r\n },\r\n '& .MuiTab-root.Mui-selected': {\r\n color: theme.palette.theme?.primary[700],\r\n },\r\n '& .MuiTab-root': {\r\n textTransform: 'none'\r\n },\r\n })}>\r\n <Tab label=\"Content\" />\r\n <Tab label=\"Styles\" />\r\n <Tab label=\"Cell Merging\" />\r\n </Tabs>\r\n </Box>\r\n\r\n {tabValue === 0 && (\r\n <>\r\n <Box sx={{ mb: 2, p: 2, bgcolor: 'grey.50', borderRadius: 1, border: '1px solid', borderColor: 'divider' }}>\r\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.primary.700\">\r\n Dynamic Data Settings\r\n </Typography>\r\n <Chip \r\n label={`${columnsWithPlaceholders} columns linked`} \r\n size=\"small\" \r\n color=\"primary\" \r\n variant=\"outlined\"\r\n sx={theme => ({\r\n color: theme.palette.theme?.primary[700],\r\n borderColor: theme.palette.theme?.primary[700]\r\n })}\r\n />\r\n </Box>\r\n \r\n <FormControlLabel\r\n control={\r\n <Android12Switch\r\n checked={autoPopulateEnabled}\r\n onChange={(e) => setAutoPopulateEnabled(e.target.checked)}\r\n />\r\n }\r\n label={\r\n <Typography type=\"s5\" color=\"theme.secondary.800\">\r\n Auto-populate rows with placeholder data\r\n </Typography>\r\n }\r\n />\r\n <FormControlLabel\r\n control={\r\n <Android12Switch\r\n checked={rowLevel}\r\n onChange={(e) => {\r\n setRowLevel(e.target.checked);\r\n setSelectedTable(null); // Reset selected table when toggling row level\r\n setParentRowLevel(e.target.checked);\r\n resetTable();\r\n }}\r\n />\r\n }\r\n label={\r\n <Typography type=\"s5\" color=\"theme.secondary.800\">\r\n Row Level Management\r\n </Typography>\r\n }\r\n />\r\n \r\n {autoPopulateEnabled && (\r\n <Box sx={{ mt: 1 }}>\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={refreshPlaceholderData}\r\n startIcon={<RefreshIcon />}\r\n className='black-outlined-btn'\r\n >\r\n Refresh Data\r\n </Button>\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n <Box sx={{ mb: 2 }}>\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 1 }}>\r\n Columns\r\n </Typography>\r\n {tableData.columns?.map((column, index) => (\r\n <Box key={column.id} sx={{ mb: 1, display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <TextField\r\n label={`Column ${index + 1} Header`}\r\n value={column.header}\r\n onChange={(e) => updateColumnHeader(column.id, e.target.value)}\r\n size=\"small\"\r\n sx={{ flex: 1 }}\r\n />\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => removeColumn(column.id)}\r\n disabled={tableData.columns.length <= 1}\r\n color=\"error\"\r\n >\r\n <Trash />\r\n </IconButton>\r\n </Box>\r\n ))}\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={addColumn}\r\n startIcon={<AddIcon />}\r\n sx={{ mt: 1 }}\r\n className='black-outlined-btn'\r\n >\r\n Add Column\r\n </Button>\r\n </Box>\r\n\r\n <Divider sx={{ my: 2 }} />\r\n\r\n <Box sx={{ mb: 2 }}>\r\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n Rows ({tableData.rows.length})\r\n </Typography>\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n disabled={selectedTable}\r\n onClick={() => addRow()}\r\n startIcon={<AddIcon />}\r\n className='black-outlined-btn'\r\n >\r\n Add Row\r\n </Button>\r\n </Box>\r\n {!rowLevel &&\r\n <Box sx={{ mb: 2 }}>\r\n <SearchableSelect\r\n value={selectedTable || ''}\r\n label={'Select Table'}\r\n options={relation_table?.map(table=>(\r\n { value: table?.dataKey, label: (table.name.charAt(0).toUpperCase() + table.name.slice(1)).replaceAll('_', ' ') }\r\n )) || []}\r\n onChange={(e) => {\r\n setSelectedTable(e.target.value);\r\n }}\r\n />\r\n </Box>\r\n\r\n }\r\n {tableData.rows.map((row, rowIndex) => (\r\n <Box key={rowIndex} sx={{ mb: 2, p: 2, border: 1, borderColor: 'divider', borderRadius: 1 }}>\r\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.800\">\r\n Row {rowIndex + 1}\r\n </Typography>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => removeRow(rowIndex)}\r\n disabled={tableData.rows.length <= 1}\r\n color=\"error\"\r\n >\r\n <Trash />\r\n </IconButton>\r\n </Box>\r\n <Grid container spacing={1}>\r\n \r\n {tableData.columns.map((column, colIndex) => {\r\n const hasPlaceholder = rowLevel ? rowPlaceholders[rowIndex]?.[column.id] : tPlaceholders?.[column.id];\r\n const placeholderInfo = hasPlaceholder ? getPlaceholderInfo(tPlaceholders?.[column.id] || rowPlaceholders[rowIndex]?.[column.id]) : null;\r\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\r\n\r\n return (\r\n <Grid item xs={12} key={column.id}>\r\n \r\n {rowLevel ? (\r\n <>\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.800\"> {column.header} </Typography>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: 1,\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n }}\r\n >\r\n <TextField\r\n value={customText[rowIndex]?.[column.id] || ''}\r\n onChange={(e) => {\r\n const newValue = e.target.value;\r\n setCustomText(prev => {\r\n const updated = { ...prev };\r\n if (!updated[rowIndex]) {\r\n updated[rowIndex] = {};\r\n }\r\n updated[rowIndex][column.id] = newValue;\r\n return updated;\r\n });\r\n\r\n // Update table data on custom text change\r\n setTableData(prev => ({\r\n ...prev,\r\n rows: prev.rows.map((row, idx) =>\r\n idx === rowIndex\r\n ? {\r\n ...row,\r\n [`${column.id}_static`]: newValue\r\n ? `${newValue} ${row[column.id] || ''}`.trim()\r\n : '',\r\n }\r\n : row\r\n ),\r\n }));\r\n }}\r\n size=\"small\"\r\n placeholder=\"Enter custom text...\"\r\n sx={{ flex: 1, minWidth: 150 }}\r\n />\r\n <Box sx={{ flex: 1, minWidth: 150 }}>\r\n <SearchableSelect\r\n value={mergeInfo ? mergeInfo.merge.value : (rowPlaceholders[rowIndex]?.[column.id] ||row[column.id]|| '')}\r\n onChange={(e) => updateRowCellValue(rowIndex, column.id, e.target.value)}\r\n size=\"small\"\r\n options={placeholders || []}\r\n // disabled={isUpdating}\r\n sx={{\r\n flex: 1,\r\n maxWidth: 150,\r\n minWidth: 150,\r\n '& .MuiInputBase-input': {\r\n bgcolor:\r\n hasPlaceholder && autoPopulateEnabled\r\n ? 'grey.100'\r\n : mergeInfo\r\n ? 'blue.50'\r\n : 'transparent',\r\n width: 150,\r\n \r\n },\r\n }}\r\n />\r\n </Box>\r\n </Box>\r\n </>\r\n ) : (\r\n <TextField\r\n label={column.header}\r\n value={mergeInfo ? mergeInfo.merge.value : (row[column.id] || '')}\r\n onChange={(e) => updateCellValue(rowIndex, column.id, e.target.value)}\r\n size=\"small\"\r\n fullWidth\r\n disabled={autoPopulateEnabled || hasPlaceholder}\r\n helperText={\r\n mergeInfo\r\n ? `Merged cell (${mergeInfo.merge.rowEnd - mergeInfo.merge.rowStart + 1}×${mergeInfo.merge.colEnd - mergeInfo.merge.colStart + 1})`\r\n : hasPlaceholder && placeholderInfo\r\n ? `Linked to: ${placeholderInfo.label}`\r\n : undefined\r\n }\r\n sx={{\r\n '& .MuiInputBase-input': {\r\n bgcolor:\r\n hasPlaceholder && autoPopulateEnabled\r\n ? 'grey.100'\r\n : mergeInfo\r\n ? 'blue.50'\r\n : 'transparent',\r\n },\r\n }}\r\n />\r\n )}\r\n </Grid>\r\n );\r\n })}\r\n </Grid>\r\n </Box>\r\n ))}\r\n </Box>\r\n\r\n <Divider sx={{ my: 2 }} />\r\n\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 1 }}>\r\n Column Data Sources\r\n </Typography>\r\n \r\n {placeholders.length === 0 && (\r\n <Alert severity=\"info\" sx={{ mb: 2 }}>\r\n No placeholders available. Add placeholders to dynamically populate table data.\r\n </Alert>\r\n )}\r\n \r\n <Grid container spacing={1} alignItems='center'>\r\n {tableData.columns.map((column) => {\r\n const currentPlaceholder =tPlaceholders?.[column.id]|| tableData.rows?.[0]?.[column.id];\r\n\r\n const placeholderInfo = currentPlaceholder ? getPlaceholderInfo(currentPlaceholder) : null;\r\n \r\n return (\r\n <React.Fragment key={column.id}>\r\n <Grid item xs={4}>\r\n <Typography type=\"s5\" weight=\"medium\" color=\"theme.secondary.800\">\r\n {column.header}\r\n </Typography>\r\n {placeholderInfo && (\r\n <Typography type=\"s6\" color=\"theme.secondary.600\" sx={{ fontStyle: 'italic' }}>\r\n {placeholderInfo.type}\r\n </Typography>\r\n )}\r\n </Grid>\r\n <Grid item xs={8}>\r\n <SearchableSelect\r\n value={rowLevel ? '' : (currentPlaceholder || '')}\r\n onChange={(e) => {\r\n updateColumnPlaceholder(column.id, e.target.value as string)\r\n }}\r\n size=\"small\"\r\n options={tableAttributes.map(attr => ({\r\n value: attr.value,\r\n label: attr.label,\r\n // Include description if available in your tableAttributes\r\n description: attr.description \r\n }))}\r\n disabled={isUpdating || rowLevel}\r\n sx={{\r\n flex: 1,\r\n maxWidth: 150,\r\n minWidth: 150,\r\n '& .MuiInputBase-input': {\r\n bgcolor: 'transparent',\r\n width: 150,\r\n },\r\n }}\r\n renderOption={(props, option) => (\r\n <MenuItem {...props} key={option.value}>\r\n <Box>\r\n <Typography type=\"s5\" color=\"theme.secondary.1000\">\r\n {option.label}\r\n </Typography>\r\n {option.description && (\r\n <Typography type=\"s6\" color=\"theme.secondary.600\" sx={{ fontStyle: 'italic' }}>\r\n {option.description}\r\n </Typography>\r\n )}\r\n </Box>\r\n </MenuItem>\r\n )}\r\n noOptionsText={\r\n <MenuItem disabled>\r\n <Typography type=\"s5\" color=\"theme.secondary.600\">\r\n No Data Source\r\n </Typography>\r\n </MenuItem>\r\n }\r\n />\r\n {/* <Select\r\n value={rowLevel ? '' : (currentPlaceholder || '')}\r\n onChange={(e) => updateColumnPlaceholder(column.id, e.target.value as string)}\r\n renderValue={(value) => {\r\n if (!value) return 'Select Data Source';\r\n const placeholder = placeholders.find(p => p.value === value);\r\n return placeholder?.label||currentPlaceholder || 'Unknown Placeholder';\r\n }}\r\n fullWidth\r\n disabled={isUpdating}\r\n size=\"small\"\r\n displayEmpty\r\n disabled={rowLevel}\r\n >\r\n <MenuItem value=\"\">\r\n <Typography type=\"s5\" color=\"theme.secondary.600\">No Data Source</Typography>\r\n </MenuItem>\r\n {tableAttributes.map((placeholder) => (\r\n <MenuItem key={placeholder.value} value={placeholder.value}>\r\n <Box>\r\n <Typography type=\"s5\" color=\"theme.secondary.1000\">\r\n {placeholder.label}\r\n </Typography>\r\n {placeholder.description && (\r\n <Typography type=\"s6\" color=\"theme.secondary.600\" sx={{ fontStyle: 'italic' }}>\r\n {placeholder.description}\r\n </Typography>\r\n )}\r\n </Box>\r\n </MenuItem>\r\n ))}\r\n </Select> */}\r\n </Grid>\r\n </React.Fragment>\r\n );\r\n })}\r\n </Grid>\r\n </>\r\n )}\r\n\r\n {tabValue === 1 && (\r\n <Box sx={{\r\n '& >:first-child': { borderTopLeftRadius: 8, borderTopRightRadius: 8 },\r\n '& >:last-child': { borderBottomLeftRadius: 8, borderBottomRightRadius: 8 }\r\n }}>\r\n <Accordion \r\n expanded={expanded === 'tableBasic'} \r\n onChange={handleAccordionChange('tableBasic')}\r\n disableGutters\r\n >\r\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\r\n <Typography type='s3' color='theme.secondary.1000'>Table Basic Properties</Typography>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <BorderControl\r\n styles={tableStyles}\r\n onChange={(key, value) => updateTableStyle(key, value)}\r\n isBordered={tableStyles.is_bordered}\r\n disableRadius\r\n />\r\n </AccordionDetails>\r\n </Accordion>\r\n\r\n <Accordion \r\n expanded={expanded === 'tableHeader'} \r\n onChange={handleAccordionChange('tableHeader')}\r\n disableGutters\r\n >\r\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\r\n <Typography type='s3' color='theme.secondary.1000'>Table Header Styles</Typography>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <Grid container spacing={2}>\r\n <Grid item xs={12}>\r\n <ColorPickerInput\r\n value={tableStyles.tHead?.backgroundColor || '#f5f5f5'}\r\n onChange={(color) => updateHeaderStyle('backgroundColor', color)}\r\n fullWidth\r\n label='Background Color'\r\n />\r\n </Grid>\r\n \r\n <Grid item xs={12}>\r\n <ColorPickerInput\r\n value={tableStyles.tHead?.color || '#333333'}\r\n onChange={(color) => updateHeaderStyle('color', color)}\r\n fullWidth\r\n label='Text Color'\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <TextField\r\n label='Font Size'\r\n type='number'\r\n value={tableStyles.tHead?.fontSize || 14}\r\n onChange={(e) => updateHeaderStyle('fontSize', parseInt(e.target.value) || 14)}\r\n size='small'\r\n fullWidth\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <Select\r\n value={tableStyles.tHead?.fontWeight || 'bold'}\r\n onChange={(e) => updateHeaderStyle('fontWeight', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Font Weight'\r\n >\r\n {fontWeightOptions.map(weight => (\r\n <MenuItem key={weight} value={weight}>\r\n {formatText(weight)}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={12}>\r\n <Select\r\n value={tableStyles.tHead?.fontFamily || 'Arial, sans-serif'}\r\n onChange={(e) => updateHeaderStyle('fontFamily', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Font Family'\r\n >\r\n {fontFamilyOptions.map(font => (\r\n <MenuItem key={font} value={font}>\r\n {font.split(',')[0]}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <Select\r\n value={tableStyles.tHead?.textAlign || 'left'}\r\n onChange={(e) => updateHeaderStyle('textAlign', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Text Align'\r\n >\r\n {textAlignOptions.map(align => (\r\n <MenuItem key={align} value={align}>\r\n {formatText(align)}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <TextField\r\n label='Cell Padding'\r\n type='number'\r\n value={tableStyles.thCells?.padding || 8}\r\n onChange={(e) => updateHeaderCellStyle('padding', parseInt(e.target.value) || 8)}\r\n size='small'\r\n fullWidth\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={12}>\r\n <FormControlLabel\r\n control={\r\n <Android12Switch\r\n checked={!!tableStyles.tBody?.zebraStriping}\r\n onChange={(e) => updateBodyStyle('zebraStriping', e.target.checked)}\r\n />\r\n }\r\n label=\"Zebra Striping\"\r\n />\r\n </Grid>\r\n\r\n {tableStyles.tBody?.zebraStriping && (\r\n <Grid item xs={12}>\r\n <Typography type='s5' weight='medium' color='theme.secondary.1000' variant=\"caption\">Alternating Row Color</Typography>\r\n <ColorPickerInput\r\n value={tableStyles.tBody?.alternateRowColor || '#f9f9f9'}\r\n onChange={(color) => updateBodyStyle('alternateRowColor', color)}\r\n fullWidth\r\n />\r\n </Grid>\r\n )}\r\n </Grid>\r\n </AccordionDetails>\r\n </Accordion>\r\n\r\n <Accordion \r\n expanded={expanded === 'tableBody'} \r\n onChange={handleAccordionChange('tableBody')}\r\n disableGutters\r\n >\r\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\r\n <Typography type='s3' color='theme.secondary.1000'>Table Body Styles</Typography>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <Grid container spacing={2}>\r\n <Grid item xs={12}>\r\n <ColorPickerInput\r\n value={tableStyles.tBody?.backgroundColor || '#ffffff'}\r\n onChange={(color) => updateBodyStyle('backgroundColor', color)}\r\n fullWidth\r\n label='Background Color'\r\n />\r\n </Grid>\r\n \r\n <Grid item xs={12}>\r\n <ColorPickerInput\r\n value={tableStyles.tBody?.color || '#333333'}\r\n onChange={(color) => updateBodyStyle('color', color)}\r\n fullWidth\r\n label='Text Color'\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <TextField\r\n label='Font Size'\r\n type='number'\r\n value={tableStyles.tBody?.fontSize || 14}\r\n onChange={(e) => updateBodyStyle('fontSize', parseInt(e.target.value) || 14)}\r\n size='small'\r\n fullWidth\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <Select\r\n value={tableStyles.tBody?.fontWeight || 'normal'}\r\n onChange={(e) => updateBodyStyle('fontWeight', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Font Weight'\r\n >\r\n {fontWeightOptions.map(weight => (\r\n <MenuItem key={weight} value={weight}>\r\n {formatText(weight)}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={12}>\r\n <Select\r\n value={tableStyles.tBody?.fontFamily || 'Arial, sans-serif'}\r\n onChange={(e) => updateBodyStyle('fontFamily', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Font Family'\r\n >\r\n {fontFamilyOptions.map(font => (\r\n <MenuItem key={font} value={font}>\r\n {font.split(',')[0]}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <Select\r\n value={tableStyles.tBody?.textAlign || 'left'}\r\n onChange={(e) => updateBodyStyle('textAlign', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Text Align'\r\n >\r\n {textAlignOptions.map(align => (\r\n <MenuItem key={align} value={align}>\r\n {formatText(align)}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <TextField\r\n label='Cell Padding'\r\n type='number'\r\n value={tableStyles.tbCells?.padding || 8}\r\n onChange={(e) => updateBodyCellStyle('padding', parseInt(e.target.value) || 8)}\r\n size='small'\r\n fullWidth\r\n />\r\n </Grid>\r\n </Grid>\r\n </AccordionDetails>\r\n </Accordion>\r\n </Box>\r\n )}\r\n\r\n {tabValue === 2 && (\r\n <Box>\r\n <Box sx={{ mb: 3 }}>\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 2 }}>\r\n Cell Selection & Merging\r\n </Typography>\r\n \r\n <Alert severity=\"info\" sx={{ mb: 2 }}>\r\n Click on cells in the table below to select them for merging. Selected cells will be highlighted. You can merge cells within the header or body, but not across both.\r\n </Alert>\r\n\r\n <Box sx={{ display: 'flex', gap: 1, mb: 2, flexWrap: 'wrap' }}>\r\n <Button\r\n variant=\"contained\"\r\n size=\"small\"\r\n onClick={openMergeDialog}\r\n startIcon={<MergeIcon />}\r\n disabled={selectedCells.length < 2}\r\n color=\"primary\"\r\n >\r\n Merge Selected ({selectedCells.length})\r\n </Button>\r\n \r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={() => setSelectedCells([])}\r\n disabled={selectedCells.length === 0}\r\n className='black-outlined-btn'\r\n >\r\n Clear Selection\r\n </Button>\r\n </Box>\r\n\r\n <Box sx={{ \r\n border: 1, \r\n borderColor: 'divider', \r\n borderRadius: 1, \r\n overflow: 'auto',\r\n maxHeight: 400\r\n }}>\r\n <Table size=\"small\" sx={{ minWidth: 300 }}>\r\n <TableHead>\r\n <TableRow>\r\n {tableData.columns.map((column, colIndex) => {\r\n const mergeInfo = getCellMergeInfo('thead', 0, colIndex);\r\n const isSelected = isCellSelected('thead', 0, colIndex);\r\n \r\n if (mergeInfo?.isCovered) {\r\n return null;\r\n }\r\n\r\n const cellContent = mergeInfo ? mergeInfo.merge.value : column.header;\r\n const rowSpan = mergeInfo ? mergeInfo.merge.rowEnd - mergeInfo.merge.rowStart + 1 : 1;\r\n const colSpan = mergeInfo ? mergeInfo.merge.colEnd - mergeInfo.merge.colStart + 1 : 1;\r\n\r\n return (\r\n <TableCell \r\n key={column.id}\r\n rowSpan={rowSpan}\r\n colSpan={colSpan}\r\n onClick={() => !mergeInfo && toggleCellSelection('thead', 0, colIndex)}\r\n sx={(theme) => ({ \r\n fontWeight: 'bold',\r\n bgcolor: mergeInfo ? 'blue.50' : \r\n isSelected ? 'primary.100' : 'grey.100',\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1,\r\n cursor: mergeInfo ? 'default' : 'pointer',\r\n border: isSelected ? 2 : 1,\r\n borderColor: isSelected ? theme.palette.theme.primary[800] : 'divider',\r\n '&:hover': mergeInfo ? {} : {\r\n bgcolor: isSelected ? 'primary.200' : 'grey.50'\r\n }\r\n })}\r\n >\r\n {cellContent}\r\n {mergeInfo && (\r\n <Chip\r\n label={`${rowSpan}×${colSpan}`}\r\n size=\"small\"\r\n color=\"primary\"\r\n variant=\"outlined\"\r\n sx={(theme) => ({\r\n position: 'absolute',\r\n top: 2,\r\n right: 2,\r\n fontSize: '0.6rem',\r\n height: 16,\r\n color: theme.palette.theme.primary[800],\r\n borderColor: theme.palette.theme.primary[800]\r\n })}\r\n />\r\n )}\r\n {isSelected && (\r\n <Checkbox\r\n checked={true}\r\n size=\"small\"\r\n sx={{\r\n position: 'absolute',\r\n top: 2,\r\n left: 2,\r\n padding: 0\r\n }}\r\n />\r\n )}\r\n </TableCell>\r\n );\r\n })}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {tableData.rows.map((row, rowIndex) => (\r\n <TableRow key={rowIndex}>\r\n {tableData.columns.map((column, colIndex) => {\r\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\r\n const isSelected = isCellSelected('tbody', rowIndex, colIndex);\r\n \r\n if (mergeInfo?.isCovered) {\r\n return null;\r\n }\r\n\r\n // Get customText for the cell\r\n const customTextValue = customText[rowIndex]?.[column.id] || '';\r\n // Combine customText with cell value or merge value\r\n const cellContent = mergeInfo \r\n ? mergeInfo.merge.value // Already includes customText from mergeCells\r\n : customTextValue \r\n ? `${customTextValue} ${row[column.id] || ''}`.trim() \r\n : row[column.id] || '';\r\n\r\n const rowSpan = mergeInfo ? mergeInfo.merge.rowEnd - mergeInfo.merge.rowStart + 1 : 1;\r\n const colSpan = mergeInfo ? mergeInfo.merge.colEnd - mergeInfo.merge.colStart + 1 : 1;\r\n\r\n return (\r\n <TableCell\r\n key={column.id}\r\n rowSpan={rowSpan}\r\n colSpan={colSpan}\r\n onClick={() => !mergeInfo && toggleCellSelection('tbody', rowIndex, colIndex)}\r\n sx={(theme) => ({ \r\n cursor: mergeInfo ? 'default' : 'pointer',\r\n bgcolor: mergeInfo ? 'blue.50' : \r\n isSelected ? 'primary.100' : \r\n 'transparent',\r\n border: isSelected ? 2 : 1,\r\n borderColor: isSelected ? theme.palette.theme?.primary[800] : 'divider',\r\n '&:hover': mergeInfo ? {} : {\r\n bgcolor: isSelected ? 'primary.200' : 'grey.50'\r\n },\r\n position: 'relative'\r\n })}\r\n >\r\n {cellContent}\r\n {mergeInfo && (\r\n <Chip\r\n label={`${rowSpan}×${colSpan}`}\r\n size=\"small\"\r\n color=\"primary\"\r\n variant=\"outlined\"\r\n sx={(theme) => ({\r\n position: 'absolute',\r\n top: 2,\r\n right: 2,\r\n fontSize: '0.6rem',\r\n height: 16,\r\n color: theme.palette.theme?.primary[800],\r\n borderColor: theme.palette.theme?.primary[800]\r\n })}\r\n />\r\n )}\r\n {isSelected && (\r\n <Checkbox\r\n checked={true}\r\n size=\"small\"\r\n sx={{\r\n position: 'absolute',\r\n top: 2,\r\n left: 2,\r\n padding: 0\r\n }}\r\n />\r\n )}\r\n </TableCell>\r\n );\r\n })}\r\n </TableRow>\r\n ))}\r\n</TableBody>\r\n </Table>\r\n </Box>\r\n </Box>\r\n\r\n {mergedCells.length > 0 && (\r\n <Box sx={{ mt: 3 }}>\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 2 }}>\r\n Merged Cells ({mergedCells.length})\r\n </Typography>\r\n \r\n {mergedCells.map((merge, index) => (\r\n <Box \r\n key={index}\r\n sx={{ \r\n p: 2, \r\n mb: 1, \r\n border: 1, \r\n borderColor: 'divider', \r\n borderRadius: 1,\r\n bgcolor: 'blue.25'\r\n }}\r\n >\r\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', mb: 1 }}>\r\n <Box>\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.900\">\r\n Merge {index + 1}: {merge.rowEnd - merge.rowStart + 1}×{merge.colEnd - merge.colStart + 1} cells ({merge.section})\r\n </Typography>\r\n <Typography type=\"s5\" color=\"theme.secondary.700\">\r\n Rows {merge.rowStart + 1}-{merge.rowEnd + 1}, Columns {merge.colStart + 1}-{merge.colEnd + 1}\r\n </Typography>\r\n </Box>\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={() => splitMergedCell(index)}\r\n startIcon={<SplitIcon />}\r\n className='black-outlined-btn'\r\n >\r\n Split\r\n </Button>\r\n </Box>\r\n \r\n <TextField\r\n label=\"Merged Cell Value\"\r\n value={merge.value}\r\n onChange={(e) => {\r\n setTableData(prev => ({\r\n ...prev,\r\n mergedCells: prev.mergedCells?.map((m, i) => \r\n i === index ? { ...m, value: e.target.value } : m\r\n ) || []\r\n }));\r\n }}\r\n size=\"small\"\r\n fullWidth\r\n multiline\r\n rows={2}\r\n />\r\n </Box>\r\n ))}\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n\r\n <Dialog\r\n open={mergeDialogOpen}\r\n onClose={() => setMergeDialogOpen(false)}\r\n maxWidth=\"sm\"\r\n fullWidth\r\n >\r\n <DialogTitle>\r\n <Typography type=\"s2\" weight=\"medium\">\r\n Merge Selected Cells\r\n </Typography>\r\n </DialogTitle>\r\n <DialogContent>\r\n <Typography type=\"s4\" color=\"theme.secondary.700\" sx={{ mb: 2 }}>\r\n You are about to merge {selectedCells.length} selected cells in {selectedCells[0]?.section}. \r\n Enter the value for the merged cell:\r\n </Typography>\r\n \r\n <TextField\r\n label=\"Merged Cell Value\"\r\n value={mergeValue}\r\n onChange={(e) => setMergeValue(e.target.value)}\r\n fullWidth\r\n multiline\r\n rows={3}\r\n sx={{ mt: 1 }}\r\n />\r\n \r\n <Alert severity=\"info\" sx={{ mt: 2 }}>\r\n The merged cell will span from row {Math.min(...selectedCells.map(c => c.row)) + 1} to {Math.max(...selectedCells.map(c => c.row)) + 1} \r\n and column {Math.min(...selectedCells.map(c => c.col)) + 1} to {Math.max(...selectedCells.map(c => c.col)) + 1} in {selectedCells[0]?.section}.\r\n </Alert>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button onClick={() => setMergeDialogOpen(false)}>\r\n Cancel\r\n </Button>\r\n <Button \r\n onClick={mergeCells}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n Merge Cells\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n </>\r\n );\r\n};\r\n\r\nexport default TableControls;","/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport {\r\n Box,\r\n Slider,\r\n InputAdornment,\r\n} from '@mui/material';\r\nimport ColorLensIcon from '@mui/icons-material/ColorLens';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport TextField from '../../../../components/text-field/text-field';\r\n\r\ninterface SignatureControlsProps {\r\n attrs: Record<string, any>;\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\nconst SignatureControls: React.FC<SignatureControlsProps> = ({\r\n attrs,\r\n updateAttrs,\r\n}) => {\r\n const { styles } = attrs\r\n return (\r\n <>\r\n <Box sx={{ mb: 1 }}>\r\n <Typography type=\"s5\" color='theme.secondary.800' weight='medium'>\r\n Font Size\r\n </Typography>\r\n <Slider\r\n value={styles?.fontSize}\r\n onChange={(_, value) => updateAttrs({ styles :{ fontSize: value as number }})}\r\n min={10}\r\n max={20}\r\n step={1}\r\n valueLabelDisplay=\"auto\"\r\n size=\"small\"\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Box>\r\n <Box sx={{ mb: 2, }}>\r\n <TextField\r\n label=\"Text Color\"\r\n type=\"color\"\r\n value={styles?.color}\r\n onChange={(e) => updateAttrs({ styles :{ color: e.target.value }})}\r\n fullWidth\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <ColorLensIcon fontSize=\"small\" />\r\n </InputAdornment>\r\n ),\r\n }}\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default SignatureControls;","/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport { Box, Slider} from '@mui/material';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport AlignmentControl from './AlignmentControl';\r\n\r\ninterface CodeControlsProps {\r\n // type: 'qr-code' | 'bar-code';\r\n attrs: Record<string, any>;\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\nconst CodeControls: React.FC<CodeControlsProps> = ({\r\n // type,\r\n attrs,\r\n updateAttrs,\r\n}) => {\r\n const { styles } = attrs\r\n\r\n const updateStyles = (styles: Record<string, any>) => {\r\n updateAttrs({ styles });\r\n }\r\n\r\n const handleAlignmentChange = (\r\n event: React.MouseEvent<HTMLElement>,\r\n newAlignment: string | null,\r\n ) => {\r\n if (newAlignment !== null) {\r\n updateStyles({ textAlign: newAlignment });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <Box sx={{ mb: 2 }}>\r\n <Typography type=\"s3\" color='theme.neutral.800'>\r\n Size (px)\r\n </Typography>\r\n <Slider\r\n value={styles.fontSize}\r\n onChange={(_, value) => updateStyles({ fontSize: value as number })}\r\n min={10}\r\n max={25}\r\n step={5}\r\n valueLabelDisplay=\"auto\"\r\n size=\"small\"\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Box>\r\n <AlignmentControl alignment={styles?.textAlign} onAlignmentChange={handleAlignmentChange} displayLabel/>\r\n </>\r\n );\r\n};\r\n\r\nexport default CodeControls;","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useEffect, useMemo, useCallback } from 'react';\r\nimport {\r\n Box,\r\n Paper,\r\n IconButton,\r\n FormControl,\r\n MenuItem,\r\n Tooltip,\r\n} from '@mui/material';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport { Save } from '../../../components/icons';\r\nimport Typography from '../../../components/typography/typography';\r\n\r\n// Import sub-components\r\nimport TextControls from './controllers/TextControls';\r\nimport ButtonControls from './controllers/ButtonControls';\r\nimport ImageControls from './controllers/ImageControls';\r\nimport DividerControls from './controllers/DividerControls';\r\nimport TableControls from './controllers/TableControls';\r\nimport SignatureControls from './controllers/SignatureControls';\r\nimport CodeControls from './controllers/CodeControls';\r\nimport Select from '../../../components/select/select';\r\nimport { EnhancedSectionData, ElementType } from '../types/editor';\r\nimport { initialStyles } from '../utils/constant';\r\nimport { extractStyles, generateInlineStyles, getInitialSectionData } from '../utils/common';\r\n// import { useCKEditorStyleExtractor } from '../utils/style-extractor';\r\n\r\n// Shared types for SectionFormatPanel and sub-components\r\nexport interface TableColumn {\r\n id: string;\r\n header: string;\r\n placeholder?: string;\r\n}\r\n\r\nexport interface TableRow {\r\n [key: string]: string | number | boolean;\r\n}\r\n\r\nexport interface CellMerge {\r\n section: 'thead' | 'tbody';\r\n rowStart: number;\r\n rowEnd: number;\r\n colStart: number;\r\n colEnd: number;\r\n value: string;\r\n}\r\n\r\nexport interface TableData {\r\n name?: string; // Added name property for #each iteration\r\n columns: TableColumn[];\r\n rows: TableRow[];\r\n border: boolean;\r\n mergedCells?: CellMerge[];\r\n}\r\n\r\ninterface SectionData {\r\n type: 'text' | 'text-block' | 'heading' | 'heading-2' | 'heading-3' | 'heading-4' | 'buttons' | 'image' | 'divider' | 'table' | 'signature' | 'qr-code' | 'bar-code';\r\n content: string;\r\n attributes?: {\r\n styles?: any;\r\n placeholders?: Record<string, string>;\r\n tableData?: TableData;\r\n [key: string]: any;\r\n };\r\n}\r\n\r\ninterface SectionFormatPanelProps {\r\n section: SectionData | undefined;\r\n onClose: () => void;\r\n onUpdate: (data: Partial<EnhancedSectionData>) => void;\r\n placeholders: Record<string, any>[];\r\n relation_table?:any;\r\n handleSave?: () => void;\r\n}\r\n\r\nconst sectionTypes = ['text','text-block','heading','heading-2','heading-3','heading-4','buttons','image','divider','table','signature','qr-code','bar-code']\r\n\r\nconst SectionFormatPanel: React.FC<SectionFormatPanelProps> = ({ \r\n section, \r\n onClose, \r\n onUpdate,\r\n placeholders,\r\n relation_table,\r\n handleSave }) => {\r\n // const { applyStylesToHtml } = useCKEditorStyleExtractor()\r\n // const [plainContent, setPlainContent] = useState('');\r\n const sectionType = useMemo(() => section?.type || 'text', [section?.type]);\r\n const content = useMemo(() => section?.content || 'text', [section?.content]);\r\n const [formatOptions, setFormatOptions] = useState<string[]>([]);\r\n const[rowLevel, setRowLevel] = useState<boolean>((section?.attributes as any)?.rowLevel || false);\r\n const [tableData, setTableData] = useState<TableData>({\r\n name: '', // Initialize with empty name\r\n columns: [\r\n { id: 'col1', header: 'Column 1' },\r\n { id: 'col2', header: 'Column 2' },\r\n { id: 'col3', header: 'Column 3' }\r\n ],\r\n rows: [\r\n { col1: '', col2: '', col3: '' }\r\n ],\r\n border: true,\r\n mergedCells: []\r\n });\r\n const [isInitialLoad, setIsInitialLoad] = useState(true);\r\n const [selectedContentAttrObj, setSelectedContentAttrObj] = useState(extractStyles(content, section?.type));\r\n\r\n // Initialize table data from section attributes\r\n useEffect(() => {\r\n if (section && section.type === 'table') {\r\n // If section has stored table data, use it\r\n if (section.attributes?.tableData) {\r\n setTableData(section.attributes.tableData);\r\n } else {\r\n // Try to extract table data from HTML content\r\n const extractedTableData = extractTableDataFromHTML(section.content);\r\n if (extractedTableData) {\r\n setTableData(extractedTableData);\r\n setRowLevel((section?.attributes as any)?.rowLevel || false);\r\n }\r\n }\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (section && !isInitialLoad) {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = section.content;\r\n const text = tempDiv.textContent || '';\r\n // setPlainContent(text);\r\n setSelectedContentAttrObj(extractStyles(section.content, section?.type)?.styles)\r\n setIsInitialLoad(false);\r\n }\r\n }, [section]);\r\n\r\n // Extract table data from HTML content\r\n const extractTableDataFromHTML = (htmlContent: string): TableData | null => {\r\n try {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(htmlContent, 'text/html');\r\n const table = doc.querySelector('table');\r\n \r\n if (!table) return null;\r\n\r\n const headerRows = table.querySelectorAll('thead tr');\r\n const bodyRows = table.querySelectorAll('tbody tr');\r\n\r\n if (headerRows.length === 0) return null;\r\n\r\n // Extract columns from the first header row\r\n const headerCells = headerRows[0].querySelectorAll('th');\r\n const columns: TableColumn[] = Array.from(headerCells).map((th, index) => ({\r\n id: `col${index + 1}`,\r\n header: th.textContent?.trim() || `Column ${index + 1}`\r\n }));\r\n\r\n // Extract merged cells from thead\r\n const mergedCells: CellMerge[] = [];\r\n Array.from(headerRows).forEach((row, rowIndex) => {\r\n const cells = row.querySelectorAll('th');\r\n cells.forEach((cell, colIndex) => {\r\n const rowSpan = parseInt(cell.getAttribute('rowspan') || '1');\r\n const colSpan = parseInt(cell.getAttribute('colspan') || '1');\r\n if (rowSpan > 1 || colSpan > 1) {\r\n mergedCells.push({\r\n section: 'thead',\r\n rowStart: rowIndex,\r\n rowEnd: rowIndex + rowSpan - 1,\r\n colStart: colIndex,\r\n colEnd: colIndex + colSpan - 1,\r\n value: cell.textContent?.trim() || ''\r\n });\r\n }\r\n });\r\n });\r\n\r\n // Extract rows\r\n const rows: TableRow[] = Array.from(bodyRows).map(row => {\r\n const cells = row.querySelectorAll('td');\r\n const rowData: TableRow = {};\r\n \r\n cells.forEach((cell, index) => {\r\n if (index < columns.length) {\r\n rowData[columns[index].id] = cell.textContent?.trim() || '';\r\n }\r\n });\r\n \r\n return rowData;\r\n });\r\n\r\n // Extract merged cells from tbody\r\n Array.from(bodyRows).forEach((row, rowIndex) => {\r\n const cells = row.querySelectorAll('td');\r\n cells.forEach((cell, colIndex) => {\r\n const rowSpan = parseInt(cell.getAttribute('rowspan') || '1');\r\n const colSpan = parseInt(cell.getAttribute('colspan') || '1');\r\n if (rowSpan > 1 || colSpan > 1) {\r\n mergedCells.push({\r\n section: 'tbody',\r\n rowStart: rowIndex,\r\n rowEnd: rowIndex + rowSpan - 1,\r\n colStart: colIndex,\r\n colEnd: colIndex + colSpan - 1,\r\n value: cell.textContent?.trim() || ''\r\n });\r\n }\r\n });\r\n });\r\n\r\n return {\r\n name: '', // Default empty name\r\n columns,\r\n rows: rows.length > 0 ? rows : [{}],\r\n border: true,\r\n mergedCells\r\n };\r\n } catch (error) {\r\n return null;\r\n }\r\n };\r\n\r\n // Get placeholder value for table generation\r\n const getPlaceholderValue = (placeholderKey: string): string => {\r\n const placeholder = placeholders.find(p => p.value === placeholderKey);\r\n if (!placeholder) return '';\r\n \r\n // Return actual value or generate sample based on type\r\n if (typeof placeholder.actualValue !== 'undefined') {\r\n return String(placeholder.actualValue);\r\n }\r\n \r\n switch (placeholder.type) {\r\n case 'date':\r\n return new Date().toLocaleDateString();\r\n case 'datetime':\r\n return new Date().toLocaleString();\r\n case 'number':\r\n return '123';\r\n case 'currency':\r\n return '$1,234.56';\r\n case 'email':\r\n return 'example@domain.com';\r\n case 'phone':\r\n return '+1 (555) 123-4567';\r\n case 'url':\r\n return 'https://example.com';\r\n default:\r\n return placeholder.label || placeholder.value;\r\n }\r\n };\r\n\r\n const generateContent = useCallback((attrs?: Record<any, any>): string => {\r\n const { src, alt, styles: eStyles, text, placeholder, placeholders: tPlaceholders } = attrs || section?.attributes || selectedContentAttrObj || {}\r\n const styles = {\r\n ...initialStyles[sectionType],\r\n ...eStyles,\r\n ...selectedContentAttrObj?.styles,\r\n ...attrs?.styles\r\n }\r\n\r\n const inlineStyles = generateInlineStyles(styles);\r\n \r\n // For buttons, images, dividers, and codes - use the existing logic\r\n if (sectionType === 'buttons') {\r\n return `<button style=\"${inlineStyles}\">${text || 'Button Text'}</button>`;\r\n } else if (sectionType === 'image') {\r\n let imgInlineStyles: string = inlineStyles;\r\n if(styles?.is_bordered) {\r\n styles.padding = '10px';\r\n imgInlineStyles = generateInlineStyles(styles);\r\n } else{\r\n styles.padding = '0';\r\n imgInlineStyles = generateInlineStyles(styles);\r\n }\r\n return `<img src=\"${src || ''}\" alt=\"${alt || ''}\" style=\"${imgInlineStyles}\" />`;\r\n } else if (sectionType === 'divider') {\r\n return `<hr style=\"${inlineStyles}\" />`;\r\n } else if (sectionType === 'table') {\r\n const { border, borderStyle, borderColor, ...rest } = styles;\r\n const tInlineStyles = generateInlineStyles(styles.is_bordered ? styles : rest); \r\n const tHeadInlineStyles: string = generateInlineStyles(styles.tHead || {});\r\n const tBodyInlineStyles: string = generateInlineStyles(styles.tBody || {});\r\n const thCellInlineStyles: string = generateInlineStyles({\r\n ...(styles.thCells || {}), \r\n ...(styles.is_bordered ? { border, borderStyle, borderColor } : {}) \r\n });\r\n const tbCellInlineStyles: string = generateInlineStyles({\r\n ...(styles.tbCells || {}), \r\n ...(styles.is_bordered ? { border, borderStyle, borderColor } : {})\r\n });\r\n\r\n // Helper function to check if a cell is part of a merge\r\n const getCellMergeInfo = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\r\n return tableData.mergedCells?.find(m => \r\n m.section === section &&\r\n rowIndex >= m.rowStart && rowIndex <= m.rowEnd &&\r\n colIndex >= m.colStart && colIndex <= m.colEnd\r\n );\r\n };\r\n\r\n // Generate header row with merge support\r\n const headerCellsHTML = tableData.columns.map((column, colIndex) => {\r\n const mergeInfo = getCellMergeInfo('thead', 0, colIndex);\r\n \r\n if (mergeInfo && (colIndex !== mergeInfo.colStart)) {\r\n return '';\r\n }\r\n\r\n const mergeAttributes = mergeInfo ? \r\n ` rowspan=\"${mergeInfo.rowEnd - mergeInfo.rowStart + 1}\" colspan=\"${mergeInfo.colEnd - mergeInfo.colStart + 1}\"` : '';\r\n \r\n const cellValue = mergeInfo ? mergeInfo.value : column.header;\r\n\r\n return `<th style=\"${thCellInlineStyles}\"${mergeAttributes}>${cellValue}</th>`;\r\n }).filter(cell => cell !== '').join('');\r\n\r\n // Generate table body with #each loop using tableData.name\r\n let tableRowsHTML = '';\r\n \r\n // Check if we should use #each loop with tableData.name\r\n if (tableData.name) {\r\n // Generate template with #each handlebars syntax\r\n const rowTemplate = tableData.columns.map((column, colIndex) => {\r\n const mergeInfo = getCellMergeInfo('tbody', 0, colIndex); // Use first row as template\r\n \r\n if (mergeInfo && (colIndex !== mergeInfo.colStart)) {\r\n return '';\r\n }\r\n\r\n const mergeAttributes = mergeInfo ? \r\n ` rowspan=\"${mergeInfo.rowEnd - mergeInfo.rowStart + 1}\" colspan=\"${mergeInfo.colEnd - mergeInfo.colStart + 1}\"` : '';\r\n \r\n // Use handlebars template syntax for dynamic content\r\n let cellTemplate = '';\r\n \r\n // Handle special cases\r\n if (column.id === 'index' || column.id === 'incrementIndex') {\r\n cellTemplate = `{{incrementIndex @index}}`;\r\n } else if (column.id.includes('.')) {\r\n // Handle nested properties (like items.sku, tax_code_data.[0].rate)\r\n const cellValue = tableData?.rows?.[0][column.id];\r\n cellTemplate = typeof cellValue === 'string' ? cellValue.replace(tableData.name + '.', '') : String(cellValue || '');\r\n } else {\r\n // Direct property access\r\n const cellValue = tableData?.rows?.[0][column.id];\r\n cellTemplate = typeof cellValue === 'string' ? cellValue.replace(tableData.name + '.', '') : String(cellValue || '');\r\n }\r\n\r\n return `<td style=\"${tbCellInlineStyles}\"${mergeAttributes}>${cellTemplate}</td>`;\r\n }).filter(cell => cell !== '').join('');\r\n\r\n // Add zebra striping logic if enabled\r\n const rowStyleTemplate = styles.tBody?.zebraStriping \r\n ? `{{#if (isOdd @index)}}${tBodyInlineStyles}; background-color: ${styles.tBody.alternateRowColor || '#f9f9f9'}{{else}}${tBodyInlineStyles}{{/if}}`\r\n : tBodyInlineStyles;\r\n\r\n tableRowsHTML = `{{#each ${tableData.name}}}\r\n <tr style=\"${rowStyleTemplate}\">\r\n ${rowTemplate}\r\n </tr>\r\n {{/each}}`;\r\n \r\n } else {\r\n // Fallback to static rows when no tableData.name is provided\r\n tableRowsHTML = tableData.rows.map((row, rowIndex) => {\r\n const rowStyleAddition = styles.tBody?.zebraStriping && rowIndex % 2 === 1 \r\n ? `; background-color: ${styles.tBody.alternateRowColor || '#f9f9f9'}` \r\n : '';\r\n \r\n const cellsHTML = tableData.columns.map((column, colIndex) => {\r\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\r\n \r\n if (mergeInfo && (rowIndex !== mergeInfo.rowStart || colIndex !== mergeInfo.colStart)) {\r\n return '';\r\n }\r\n\r\n let cellValue = row[column.id] || '';\r\n const keys = Object.keys(row)\r\n if(keys.includes(`${column.id}_static`)) {\r\n cellValue = row[`${column.id}_static`] || '';\r\n }\r\n if (!cellValue && tPlaceholders?.[column.id]) {\r\n cellValue = getPlaceholderValue(tPlaceholders[column.id]);\r\n }\r\n\r\n const mergeAttributes = mergeInfo ? \r\n ` rowspan=\"${mergeInfo.rowEnd - mergeInfo.rowStart + 1}\" colspan=\"${mergeInfo.colEnd - mergeInfo.colStart + 1}\"` : '';\r\n \r\n const finalCellValue = mergeInfo ? mergeInfo.value : cellValue;\r\n\r\n return `<td style=\"${tbCellInlineStyles}\"${mergeAttributes}>${finalCellValue}</td>`;\r\n }).filter(cell => cell !== '').join('');\r\n \r\n return `<tr style=\"${tBodyInlineStyles}${rowStyleAddition}\">${cellsHTML}</tr>`;\r\n }).join('');\r\n }\r\n \r\n return `\r\n <table style=\"${tInlineStyles}\">\r\n <thead>\r\n <tr style=\"${tHeadInlineStyles}\">\r\n ${headerCellsHTML}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n ${tableRowsHTML}\r\n </tbody>\r\n </table>\r\n `;\r\n } else if (sectionType === 'qr-code' || sectionType === 'bar-code') {\r\n return `<div style=\"${inlineStyles}\">${placeholder}</div>`;\r\n }\r\n \r\n // For text-based sections, parse and apply styles to existing HTML tags\r\n const hasHtmlTags = /<\\/?[a-z][\\s\\S]*>/i.test(content);\r\n \r\n if (!hasHtmlTags) {\r\n // If no HTML tags, wrap according to section type\r\n switch (sectionType) {\r\n case 'text':\r\n case 'text-block':\r\n return `<p style=\"${inlineStyles}\">${content}</p>`;\r\n case 'heading':\r\n return `<h1 style=\"${inlineStyles}\">${content}</h1>`;\r\n case 'heading-2':\r\n return `<h2 style=\"${inlineStyles}\">${content}</h2>`;\r\n case 'heading-3':\r\n return `<h3 style=\"${inlineStyles}\">${content}</h3>`;\r\n case 'heading-4':\r\n return `<h4 style=\"${inlineStyles}\">${content}</h4>`;\r\n case 'signature':\r\n return `<div style=\"${inlineStyles}\">${content}</div>`;\r\n default:\r\n return `<p style=\"${inlineStyles}\">${content}</p>`;\r\n }\r\n } else {\r\n // Create a temporary DOM element to manipulate the HTML\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(`<div>${content}</div>`, 'text/html');\r\n const container = doc.body.firstChild as Element;\r\n \r\n // Process all child elements\r\n if (container && container.nodeType === Node.ELEMENT_NODE) {\r\n const elements = container.querySelectorAll('*');\r\n\r\n elements.forEach(element => {\r\n // Skip processing script tags or other special elements\r\n if (element.tagName === 'SCRIPT' || element.tagName === 'STYLE') {\r\n return;\r\n }\r\n \r\n // Get existing style and merge with new style\r\n const existingStyle = element.getAttribute('style') || '';\r\n \r\n // Extract properties from existing style\r\n const existingProps = {};\r\n existingStyle.split(';').forEach(prop => {\r\n const [key, value] = prop.split(':').map(item => item.trim());\r\n if (key && value) {\r\n existingProps[key] = value;\r\n }\r\n });\r\n \r\n // Parse the base style and prepare for merging\r\n const newStyleProps = {};\r\n inlineStyles.split(';').forEach(prop => {\r\n const [key, value] = prop.split(':').map(item => item.trim());\r\n if (key && value) {\r\n newStyleProps[key] = value;\r\n }\r\n });\r\n \r\n // Additional styles based on tag type\r\n if (element.tagName === 'P' || element.tagName === 'DIV') {\r\n newStyleProps['line-height'] = '1.5';\r\n } else if (['H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(element.tagName)) {\r\n newStyleProps['line-height'] = '1.2';\r\n newStyleProps['margin'] = '0.5em 0';\r\n }\r\n \r\n // Merge styles, new styles override existing ones\r\n const mergedProps = { ...existingProps, ...newStyleProps };\r\n \r\n // Convert back to style string\r\n const mergedStyle = Object.entries(mergedProps)\r\n .filter(([key, value]) => key && value)\r\n .map(([key, value]) => `${key}: ${value}`)\r\n .join('; ');\r\n \r\n element.setAttribute('style', mergedStyle);\r\n });\r\n \r\n return container.innerHTML;\r\n }\r\n \r\n // Fallback to original content if parsing fails\r\n return content;\r\n }\r\n }, [JSON.stringify(section)]);\r\n\r\n // Local save function - renamed to avoid conflict with handleSave prop\r\n const saveSection = () => {\r\n const updatedContent = generateContent();\r\n \r\n const updatedSection = {\r\n content: updatedContent, \r\n type: sectionType as ElementType,\r\n rowLevel: rowLevel,\r\n name: tableData.name || '',\r\n attributes: {\r\n ...(section?.attributes || {}),\r\n ...(sectionType === 'table' ? { tableData } : {})\r\n },\r\n is_edited_from_source: (section as EnhancedSectionData)?.is_edited_from_source || false\r\n };\r\n \r\n onUpdate(updatedSection);\r\n };\r\nuseEffect(() => {\r\n saveSection();\r\n},[tableData])\r\n /**\r\n * Updates section attributes and triggers content regeneration.\r\n * Optimized to avoid unnecessary property spreading and glitches.\r\n */\r\n const updateAttrs = (prop: Record<string, any>) => {\r\n if (!section) return;\r\n\r\n // Merge styles safely\r\n const mergedStyles = {\r\n ...(section.attributes?.styles || {}),\r\n ...(prop.styles || {})\r\n };\r\n\r\n // Merge attributes, giving priority to new props\r\n const mergedAttributes = {\r\n ...(section.attributes || {}),\r\n ...prop,\r\n styles: mergedStyles,\r\n ...(sectionType === 'table' ? { tableData } : {})\r\n };\r\n\r\n // Prepare updated section object (exclude 'id' if present)\r\n const { id, ...sectionRest } = section as any;\r\n\r\n // Generate updated content based on new attributes\r\n const updatedContent = generateContent(mergedAttributes);\r\n setSelectedContentAttrObj(mergedAttributes)\r\n\r\n // Compose the update payload, omitting unknown properties\r\n onUpdate({\r\n ...sectionRest,\r\n content: updatedContent,\r\n attributes: mergedAttributes\r\n });\r\n };\r\n\r\n // Update table data and trigger content regeneration\r\n const handleTableDataUpdate = (newTableData: TableData) => {\r\n setTableData(newTableData);\r\n \r\n // Trigger immediate update with new table data\r\n const updatedAttrs = {\r\n ...(section?.attributes || {}),\r\n tableData: newTableData\r\n };\r\n \r\n // const updatedContent = generateContent(updatedAttrs);\r\n // onUpdate({\r\n // ...section,\r\n // content: updatedContent,\r\n // attributes: updatedAttrs\r\n // });\r\n saveSection();\r\n };\r\n\r\n const handleTypeChange = (t) => {\r\n const dt = getInitialSectionData(t)\r\n \r\n onUpdate({ \r\n ...section, \r\n ...dt\r\n });\r\n \r\n // Reset table data when switching types\r\n if (t === 'table') {\r\n setTableData({\r\n name: '', // Initialize with empty name\r\n columns: [\r\n { id: 'col1', header: 'Column 1' },\r\n { id: 'col2', header: 'Column 2' },\r\n { id: 'col3', header: 'Column 3' }\r\n ],\r\n rows: [\r\n { col1: '', col2: '', col3: '' }\r\n ],\r\n border: true,\r\n mergedCells: []\r\n });\r\n }\r\n }\r\n\r\n return (\r\n <Paper\r\n elevation={3}\r\n sx={{\r\n width: { xs: '100%', sm: 320, lg: 390 },\r\n height: '100%',\r\n overflow: 'auto',\r\n borderLeft: '1px solid',\r\n borderColor: 'divider',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n bgcolor: 'background.paper',\r\n boxShadow: 'none',\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n p: 2,\r\n borderBottom: '1px solid',\r\n borderColor: 'divider',\r\n bgcolor: 'grey.50',\r\n }}\r\n >\r\n <Typography type=\"s1\" weight='bold' color='theme.neutral.1000'>\r\n Format {sectionType ? sectionType?.charAt(0)?.toUpperCase() + sectionType?.slice(1).replace(/-/g, ' ') : ''}\r\n </Typography>\r\n <Tooltip title=\"Save and Close\">\r\n <Box>\r\n <IconButton size=\"small\" onClick={() => {\r\n saveSection();\r\n handleSave?.();\r\n onClose();\r\n }} aria-label=\"Save\">\r\n <Save fontSize=\"small\" />\r\n </IconButton>\r\n <IconButton size=\"small\" onClick={onClose} aria-label=\"Close\">\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n </Tooltip>\r\n </Box>\r\n\r\n <Box sx={{ p: 2, flex: 1,pb:10, overflowY: 'auto' }}>\r\n <Box sx={{ mb: 2 }}>\r\n <FormControl size=\"small\" fullWidth>\r\n <Select\r\n value={section?.type}\r\n onChange={(e) => handleTypeChange(e.target.value)}\r\n renderValue={v => v ? v.charAt(0).toUpperCase() + v.slice(1).replace(/-/g, ' ') : ''}\r\n label='Select Preset'\r\n displayEmpty\r\n >\r\n {sectionTypes.map((type) => (\r\n <MenuItem key={type} value={type}>\r\n <Typography type='s4' color='theme.secondary.1000'>{type.charAt(0).toUpperCase() + type.slice(1).replace(/-/g, ' ')}</Typography>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n \r\n {section && (sectionType === 'text' || \r\n sectionType === 'heading' || \r\n sectionType === 'heading-2' || \r\n sectionType === 'heading-3' || \r\n sectionType === 'heading-4') && (\r\n <TextControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n {sectionType === 'buttons' && (\r\n <ButtonControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n {sectionType === 'image' && (\r\n <ImageControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n {sectionType === 'divider' && (\r\n <DividerControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n {sectionType === 'table' && (\r\n <TableControls\r\n tableData={{\r\n ...tableData,\r\n rows: tableData.rows.map(row => {\r\n const convertedRow: Record<string, string> = {};\r\n Object.keys(row).forEach(key => {\r\n convertedRow[key] = String(row[key] ?? '');\r\n });\r\n return convertedRow;\r\n })\r\n }}\r\n setTableData={(value) => {\r\n handleTableDataUpdate({\r\n ...value,\r\n border: tableData.border,\r\n name: tableData.name || ''\r\n });\r\n }}\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n placeholders={placeholders}\r\n handleSave={handleSave}\r\n setParentRowLevel={setRowLevel}\r\n levelType={rowLevel}\r\n relation_table={relation_table}\r\n />\r\n )}\r\n {sectionType === 'signature' && (\r\n <SignatureControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n {section && (sectionType === 'qr-code' || sectionType === 'bar-code') && (\r\n <CodeControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n </Box>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default SectionFormatPanel;","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useCallback, useEffect } from 'react';\r\nimport { useDraggable } from '@dnd-kit/core';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport {\r\n Box,\r\n Divider,\r\n ListItem,\r\n ListItemIcon,\r\n ListItemText,\r\n Grid,\r\n Accordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n Typography,\r\n CircularProgress,\r\n Alert,\r\n} from '@mui/material';\r\nimport {\r\n Heading,\r\n Text as TextIcon,\r\n Image as ImageIcon,\r\n Table as TableIcon,\r\n Blocks as SignatureIcon,\r\n QrCode as QrCodeIcon,\r\n Barcode as BarcodeIcon,\r\n FileCode,\r\n} from 'lucide-react';\r\nimport { styled } from '@mui/material/styles';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport { getV1Drive, postV1Drive } from '../../../api-client/api.drive/api';\r\nimport SearchBar from '../../../components/search-bar/search-bar';\r\nimport { getToken, uploadFiles } from '../../../utils/common';\r\nimport { getApiConfig } from '@/utils';\r\nimport Button from '../../../components/button/button';\r\n\r\nconst StyledListItem = styled(ListItem)(({ theme }) => ({\r\n padding: theme.spacing(1.5),\r\n cursor: 'grab',\r\n borderRadius: theme.shape.borderRadius,\r\n '&:hover': {\r\n backgroundColor: theme.palette.grey[100],\r\n },\r\n '&.dragging': {\r\n opacity: 0.5,\r\n },\r\n}));\r\n\r\nconst DropzoneBox = styled(Box)(({ theme }) => ({\r\n border: `2px dashed ${theme.palette.grey[400]}`,\r\n borderRadius: theme.shape.borderRadius,\r\n padding: theme.spacing(2),\r\n textAlign: 'center',\r\n backgroundColor: theme.palette.grey[50],\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: theme.palette.grey[100],\r\n },\r\n}));\r\n\r\nconst SidebarItem = ({ id, icon, label, imageUrl }: { id: string; icon?: React.ReactElement; label: string; imageUrl?: string }) => {\r\n // Extract the element type from the sidebar item id\r\n const elementType = typeof id === 'string' ? id.replace('sidebar-', '') : id;\r\n\r\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\r\n id,\r\n data: {\r\n // Pass the correct type based on the id\r\n type: imageUrl ? 'image' : elementType,\r\n imageUrl,\r\n label,\r\n },\r\n });\r\n\r\n return (\r\n <StyledListItem\r\n ref={setNodeRef}\r\n {...listeners}\r\n {...attributes}\r\n className={isDragging ? 'dragging' : ''}\r\n sx={{ border: '1px solid', borderColor: 'grey.200', p: 0.75 }}\r\n >\r\n {imageUrl ? (\r\n <img\r\n src={imageUrl}\r\n alt={label}\r\n style={{ width: '100%', height: 140, objectFit: 'cover', marginRight: 8 }}\r\n />\r\n ) : (\r\n <>\r\n <ListItemIcon sx={{ minWidth: 40 }}>{icon}</ListItemIcon>\r\n <ListItemText primary={label} primaryTypographyProps={{ variant: 'body2' }} />\r\n </>\r\n )}\r\n </StyledListItem>\r\n );\r\n};\r\n\r\ninterface EditorSidebarProps {\r\n onHtmlUpload?: (html: string) => void;\r\n}\r\n\r\nconst EditorSidebar = ({ onHtmlUpload }: EditorSidebarProps) => {\r\n const [expanded, setExpanded] = useState('text');\r\n const [uploadedImages, setUploadedImages] = useState([]);\r\n const [uploading, setUploading] = useState(false);\r\n const [uploadingHtml, setUploadingHtml] = useState(false);\r\n const [error, setError] = useState(null);\r\n\r\n const handleChange = (panel) => (event, isExpanded) => {\r\n setExpanded(isExpanded ? panel : false);\r\n };\r\n\r\n const onDrop = useCallback(async (acceptedFiles) => {\r\n setUploading(true);\r\n setError(null);\r\n try {\r\n for (const file of acceptedFiles) {\r\n const uFiles = await uploadFiles([file], \"document\");\r\n const token = getToken();\r\n const payload = {\r\n ...token,\r\n \"x-timezone\": String(token[\"x-timezone\"] || \"\"),\r\n \"title\": file?.name.split(\".\")[0],\r\n \"path\": \"/\",\r\n \"is_private\": true,\r\n \"is_directory\": false,\r\n \"file_size\": file.size,\r\n \"is_child\": false,\r\n \"file_extension\": file?.name.split(\".\")[1],\r\n \"type\": \"image\",\r\n \"mime_type\": file.type,\r\n \"url\": `${getApiConfig().s3BucketUrl}${uFiles[0]}`\r\n }\r\n // Replace with your actual API endpoint\r\n await postV1Drive(payload);\r\n\r\n setUploadedImages((prev) => [\r\n ...prev,\r\n {\r\n id: `uploaded-image-${Date.now()}-${Math.random()}`,\r\n url: `${getApiConfig().s3BucketUrl}${uFiles[0]}`, // Assume API returns imageUrl\r\n name: file.name,\r\n },\r\n ]);\r\n }\r\n } catch (err) {\r\n setError('Failed to upload image. Please try again.');\r\n } finally {\r\n setUploading(false);\r\n }\r\n }, []);\r\n\r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDrop,\r\n accept: { 'image/*': ['.jpeg', '.png', '.jpg', '.gif'] },\r\n multiple: true,\r\n });\r\n\r\n const onHtmlDrop = useCallback(async (acceptedFiles) => {\r\n if (!onHtmlUpload) return;\r\n \r\n setUploadingHtml(true);\r\n setError(null);\r\n \r\n try {\r\n const file = acceptedFiles[0];\r\n if (!file) return;\r\n\r\n const reader = new FileReader();\r\n \r\n reader.onload = (e) => {\r\n const htmlContent = e.target?.result as string;\r\n if (htmlContent) {\r\n onHtmlUpload(htmlContent);\r\n setUploadingHtml(false);\r\n }\r\n };\r\n\r\n reader.onerror = () => {\r\n setError('Failed to read HTML file. Please try again.');\r\n setUploadingHtml(false);\r\n };\r\n\r\n reader.readAsText(file);\r\n } catch (err) {\r\n setError('Failed to process HTML file. Please try again.');\r\n setUploadingHtml(false);\r\n }\r\n }, [onHtmlUpload]);\r\n\r\n const { getRootProps: getHtmlRootProps, getInputProps: getHtmlInputProps, isDragActive: isHtmlDragActive } = useDropzone({\r\n onDrop: onHtmlDrop,\r\n accept: { 'text/html': ['.html', '.htm'] },\r\n multiple: false,\r\n maxFiles: 1,\r\n });\r\n\r\n const sections = [\r\n {\r\n id: 'html-upload',\r\n icon: <FileCode size={18} />,\r\n label: 'Upload HTML',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <DropzoneBox {...getHtmlRootProps()}>\r\n <input {...getHtmlInputProps()} />\r\n {isHtmlDragActive ? (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n Drop the HTML file here...\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n Drag and drop HTML file here, or click to select\r\n </Typography>\r\n )}\r\n {uploadingHtml && (\r\n <Box sx={{ mt: 1 }}>\r\n <CircularProgress size={20} />\r\n </Box>\r\n )}\r\n </DropzoneBox>\r\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mt: 1, display: 'block' }}>\r\n Upload an HTML file to replace current sections with the file content\r\n </Typography>\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'text',\r\n icon: <TextIcon size={18} />,\r\n label: 'Text',\r\n content: (\r\n <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 1 }}>\r\n <SidebarItem id=\"sidebar-heading\" icon={<Heading size={20} />} label=\"Heading 1\" />\r\n <SidebarItem id=\"sidebar-heading-2\" icon={<Heading size={18} />} label=\"Heading 2\" />\r\n <SidebarItem id=\"sidebar-heading-3\" icon={<Heading size={16} />} label=\"Heading 3\" />\r\n <SidebarItem id=\"sidebar-heading-4\" icon={<Heading size={14} />} label=\"Heading 4\" />\r\n <SidebarItem id=\"sidebar-text\" icon={<TextIcon size={20} />} label=\"Body\" />\r\n <SidebarItem id=\"sidebar-text-block\" icon={<TextIcon size={20} />} label=\"Text Block\" />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'images',\r\n icon: <ImageIcon size={18} />,\r\n label: 'Images',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <Box sx={{ mt: 2 }}>\r\n <DropzoneBox {...getRootProps()}>\r\n <input {...getInputProps()} />\r\n {isDragActive ? (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n Drop the images here...\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n Drag and drop images here, or click to select\r\n </Typography>\r\n )}\r\n {uploading && (\r\n <Box sx={{ mt: 1 }}>\r\n <CircularProgress size={20} />\r\n </Box>\r\n )}\r\n </DropzoneBox>\r\n {error && (\r\n <Alert severity=\"error\" sx={{ mt: 2 }}>\r\n {error}\r\n </Alert>\r\n )}\r\n {uploadedImages.length > 0 && (\r\n <Box sx={{ mt: 2 }}>\r\n <Typography variant=\"body2\" sx={{ mb: 1, color: 'grey.500' }}>\r\n Uploaded Images\r\n </Typography>\r\n <Grid container spacing={1}>\r\n {uploadedImages.map((image) => (\r\n <Grid item xs={6} key={image.id}>\r\n <SidebarItem\r\n id={image.id}\r\n label={image.name}\r\n imageUrl={image.url}\r\n />\r\n </Grid>\r\n ))}\r\n </Grid>\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'buttons',\r\n icon: (\r\n <Box\r\n sx={{\r\n width: 16,\r\n height: 16,\r\n bgcolor: 'grey.400',\r\n borderRadius: 1,\r\n color: 'white',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '8px',\r\n }}\r\n >\r\n BTN\r\n </Box>\r\n ),\r\n label: 'Buttons',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem\r\n id=\"sidebar-buttons\"\r\n icon={\r\n <Box\r\n sx={{\r\n width: 20,\r\n height: 20,\r\n bgcolor: 'success.main',\r\n borderRadius: 1,\r\n color: 'white',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '10px',\r\n }}\r\n >\r\n BTN\r\n </Box>\r\n }\r\n label=\"Buttons\"\r\n />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'divider',\r\n icon: <Divider sx={{ width: 18 }} />,\r\n label: 'Divider',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem id=\"sidebar-divider\" icon={<Divider sx={{ width: 20 }} />} label=\"Divider\" />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'table',\r\n icon: <TableIcon size={18} />,\r\n label: 'Table',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem id=\"sidebar-table\" icon={<TableIcon size={20} />} label=\"Table\" />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'signature',\r\n icon: <SignatureIcon size={18} />,\r\n label: 'Signature',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem id=\"sidebar-signature\" icon={<SignatureIcon size={20} />} label=\"Signature\" />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'qr-code',\r\n icon: <QrCodeIcon size={18} />,\r\n label: 'QR Code',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem id=\"sidebar-qr-code\" icon={<QrCodeIcon size={20} />} label=\"QR Code\" />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'bar-code',\r\n icon: <BarcodeIcon size={18} />,\r\n label: 'Bar Code',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem id=\"sidebar-bar-code\" icon={<BarcodeIcon size={20} />} label=\"Bar Code\" />\r\n </Box>\r\n ),\r\n },\r\n ];\r\n\r\n const getDriveFiles = async () => {\r\n try {\r\n const token = getToken();\r\n const response = await getV1Drive({\r\n ...token,\r\n \"x-timezone\": String(token[\"x-timezone\"] || \"\"),\r\n skip: 0,\r\n limit: 10,\r\n filters: `(is_directory.eq=0)`\r\n });\r\n // Check if response is successful and has data\r\n if ('data' in response && response.data && typeof response.data === 'object' && 'drive' in response.data) {\r\n const files = (response.data as any).drive || [];\r\n setUploadedImages(files);\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n getDriveFiles()\r\n }, [])\r\n\r\n return (\r\n <Box\r\n sx={{\r\n bgcolor: 'background.paper',\r\n borderRight: 1,\r\n borderColor: 'grey.200',\r\n width: 390,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: 'calc(100vh - 104px)',\r\n boxShadow: '0 2px 8px rgba(0,0,0,0.05)',\r\n fontFamily: 'Inter, system-ui, Avenir, Helvetica, Arial, sans-serif',\r\n }}\r\n >\r\n <Box sx={{ p: 2, borderBottom: 1, borderColor: 'grey.200' }}>\r\n <SearchBar\r\n handleSearch={(key) => console.log('Search:', key)}\r\n sx={{ backgroundColor: \"#fff !important\", border: \"1px solid grey\" }}\r\n />\r\n </Box>\r\n <Box sx={{ flexGrow: 1, overflowY: 'auto', p: 1 }}>\r\n {sections.map((section) => (\r\n <Accordion\r\n key={section.id}\r\n expanded={expanded === section.id}\r\n onChange={handleChange(section.id)}\r\n sx={{\r\n border: 'none',\r\n boxShadow: 'none',\r\n backgroundColor: 'transparent',\r\n '&:before': { display: 'none' },\r\n marginBottom: 1,\r\n }}\r\n >\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon sx={{ color: 'grey.600' }} />}\r\n sx={{\r\n borderRadius: '8px',\r\n padding: '0 12px',\r\n backgroundColor: expanded === section.id ? 'grey.200' : 'grey.50',\r\n '&:hover': {\r\n backgroundColor: 'grey.50',\r\n },\r\n transition: 'background-color 0.2s ease',\r\n minHeight: 42,\r\n '& .MuiAccordionSummary-content': {\r\n alignItems: 'center',\r\n margin: '8px 0',\r\n },\r\n '&.Mui-expanded': {\r\n minHeight: 42,\r\n },\r\n }}\r\n >\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n {section.icon}\r\n <Typography\r\n variant=\"body2\"\r\n sx={{ fontWeight: 500, color: 'text.primary' }}\r\n >\r\n {section.label}\r\n </Typography>\r\n </Box>\r\n </AccordionSummary>\r\n <AccordionDetails sx={{ padding: '8px 16px' }}>\r\n {section.content}\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport { EditorSidebar };\r\nexport default EditorSidebar;","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\n}), 'Check');","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';\r\nimport { useDroppable } from '@dnd-kit/core';\r\nimport EditorSection from './EditorSection';\r\nimport { Box, Container, Paper, Tooltip } from '@mui/material';\r\nimport Typography from '../../../components/typography/typography';\r\nimport SectionFormatPanel from './SectionFormatPanel';\r\nimport EditorSidebar from './EditorSidebar';\r\nimport { generateEmailPreview, generateHeaderFooterPreview } from '../utils/common';\r\nimport { EnhancedSectionData } from '../types/editor';\r\nimport Button from '../../../components/button/button';\r\nimport CheckIcon from '@mui/icons-material/Check';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\n\r\nconst CANVAS_TYPES = {\r\n HEADER: 'header',\r\n MAIN: 'main',\r\n FOOTER: 'footer'\r\n};\r\n\r\ninterface DropPosition {\r\n id: string | null;\r\n type: 'before' | 'after' | 'inside' | 'left' | 'right';\r\n canvasType: string;\r\n}\r\n\r\ninterface EditorCanvasProps {\r\n sections: EnhancedSectionData[];\r\n headerSections: EnhancedSectionData[];\r\n footerSections: EnhancedSectionData[];\r\n activeId: string | null;\r\n overSection: string | null;\r\n selectedSection: string | null;\r\n onSelectSection: (id: string | null) => void;\r\n onUpdateSection: (id: string, data: any, canvasType?: string) => void;\r\n onSplitSection: (id: string, content1: string, content2: string, canvasType?: string) => void;\r\n onDeleteSection: (id: string, canvasType?: string) => void;\r\n preview: boolean;\r\n editHtml: boolean;\r\n onApplyHtmlEdit: (html: string) => void;\r\n onCancelHtmlEdit: () => void;\r\n editMode: boolean;\r\n isFromPreview: boolean;\r\n zoom?: number;\r\n placeholders: Record<string, any>[];\r\n isEditingHeaderFooter: boolean;\r\n relation_table: any[];\r\n handleSave?: () => Promise<void>;\r\n}\r\n\r\nconst EditorCanvas: React.FC<EditorCanvasProps> = ({\r\n sections,\r\n headerSections,\r\n footerSections,\r\n activeId,\r\n selectedSection,\r\n onSelectSection,\r\n onUpdateSection,\r\n onSplitSection,\r\n onDeleteSection,\r\n preview,\r\n editHtml,\r\n onApplyHtmlEdit,\r\n onCancelHtmlEdit,\r\n editMode,\r\n isFromPreview,\r\n placeholders,\r\n isEditingHeaderFooter,\r\n handleSave,\r\n relation_table,\r\n zoom = 100\r\n}) => {\r\n // Convert placeholders to the expected format\r\n const formattedPlaceholders = useMemo(() => {\r\n return placeholders.map((p: Record<string, any>) => ({\r\n value: p.value || p.key || '',\r\n label: p.label || p.name || String(p.value || p.key || '')\r\n }));\r\n }, [placeholders]);\r\n\r\n const { setNodeRef: setMainCanvasRef } = useDroppable({ id: 'main-canvas' });\r\n const { setNodeRef: setHeaderCanvasRef } = useDroppable({ id: 'header-canvas' });\r\n const { setNodeRef: setFooterCanvasRef } = useDroppable({ id: 'footer-canvas' });\r\n\r\n const selectedSectionData = useMemo(() => {\r\n return [...sections, ...headerSections, ...footerSections].find((section) => section.id === selectedSection);\r\n }, [sections, selectedSection]);\r\n\r\n const [dropTarget, setDropTarget] = useState<DropPosition>({\r\n id: null,\r\n type: 'inside',\r\n canvasType: CANVAS_TYPES.MAIN\r\n });\r\n const [isDraggingFromSidebar, setIsDraggingFromSidebar] = useState(false);\r\n const [isSectionEditing, setIsSectionEditing] = useState(false);\r\n const [htmlEditValue, setHtmlEditValue] = useState('');\r\n\r\n // Sync textarea content when entering HTML edit mode\r\n useEffect(() => {\r\n if (editHtml) {\r\n setHtmlEditValue(generateEmailPreview(sections, headerSections, footerSections));\r\n }\r\n }, [editHtml]);\r\n\r\n const lastUpdateTimeRef = useRef(0);\r\n const lastPositionRef = useRef({ x: 0, y: 0 });\r\n const activeIdRef = useRef<string | null>(null);\r\n const mainCanvasRef = useRef<HTMLDivElement | null>(null);\r\n const headerCanvasRef = useRef<HTMLDivElement | null>(null);\r\n const footerCanvasRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const DEBOUNCE_MS = 50;\r\n const MIN_MOUSE_MOVE = 5;\r\n const POSITION_HYSTERESIS = 0.1;\r\n\r\n const getTargetSections = (canvasType: string) => {\r\n switch (canvasType) {\r\n case CANVAS_TYPES.HEADER:\r\n return headerSections;\r\n case CANVAS_TYPES.FOOTER:\r\n return footerSections;\r\n default:\r\n return sections;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n activeIdRef.current = activeId;\r\n\r\n if (activeId && String(activeId).includes('sidebar-')) {\r\n setIsDraggingFromSidebar(true);\r\n\r\n if (sections?.length > 0) {\r\n updateDropTarget(sections[0].id, 'before', CANVAS_TYPES.MAIN);\r\n } else if (headerSections?.length > 0 && isEditingHeaderFooter) {\r\n updateDropTarget(headerSections[0].id, 'before', CANVAS_TYPES.HEADER);\r\n } else if (footerSections?.length > 0 && isEditingHeaderFooter) {\r\n updateDropTarget(footerSections[0].id, 'before', CANVAS_TYPES.FOOTER);\r\n } else {\r\n updateDropTarget(null, 'inside', CANVAS_TYPES.MAIN);\r\n }\r\n } else if (!activeId) {\r\n setIsDraggingFromSidebar(false);\r\n setDropTarget({ id: null, type: 'inside', canvasType: CANVAS_TYPES.MAIN });\r\n }\r\n }, [activeId, sections, headerSections, footerSections, isEditingHeaderFooter]);\r\n\r\n const updateDropTarget = useCallback((id: string | null, type: DropPosition['type'], canvasType: string) => {\r\n const now = Date.now();\r\n if (now - lastUpdateTimeRef.current < DEBOUNCE_MS) return;\r\n\r\n // Prevent state updates if position hasn't actually changed\r\n setDropTarget(prev => {\r\n if (prev.id === id && prev.type === type && prev.canvasType === canvasType) {\r\n return prev; // Return same reference to prevent re-render\r\n }\r\n lastUpdateTimeRef.current = now;\r\n return { id, type, canvasType };\r\n });\r\n }, []);\r\n\r\n const handleMouseMove = useCallback((e: React.MouseEvent, canvasType: string) => {\r\n if (!activeIdRef.current) return;\r\n if (canvasType !== CANVAS_TYPES.MAIN && !isEditingHeaderFooter) return;\r\n\r\n const dx = e.clientX - lastPositionRef.current.x;\r\n const dy = e.clientY - lastPositionRef.current.y;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n if (distance < MIN_MOUSE_MOVE) return;\r\n\r\n lastPositionRef.current = { x: e.clientX, y: e.clientY };\r\n\r\n const elementsUnderCursor = document.elementsFromPoint(e.clientX, e.clientY);\r\n const sectionElement = elementsUnderCursor.find(el =>\r\n el.hasAttribute('data-section-id')\r\n );\r\n\r\n const targetSections = getTargetSections(canvasType);\r\n\r\n if (!sectionElement) {\r\n if (targetSections.length === 0) {\r\n updateDropTarget(null, 'inside', canvasType);\r\n } else if (isDraggingFromSidebar) {\r\n updateDropTarget(targetSections[targetSections.length - 1].id, 'after', canvasType);\r\n }\r\n return;\r\n }\r\n\r\n const sectionId = sectionElement.getAttribute('data-section-id');\r\n if (!sectionId) return;\r\n\r\n const sectionCanvasType = sectionElement.hasAttribute('data-canvas-type')\r\n ? sectionElement.getAttribute('data-canvas-type') as string\r\n : canvasType;\r\n\r\n const rect = sectionElement.getBoundingClientRect();\r\n const relativeY = e.clientY - rect.top;\r\n const relativeX = e.clientX - rect.left;\r\n const sectionHeight = rect.height;\r\n const sectionWidth = rect.width;\r\n\r\n const canvasSections = getTargetSections(sectionCanvasType);\r\n const section = canvasSections.find(s => s.id === sectionId);\r\n\r\n const isSplitGroup = sectionId.startsWith('split-group-');\r\n\r\n if (isSplitGroup || (section && section.isSplitPair)) {\r\n if (relativeX < sectionWidth * (0.5 - POSITION_HYSTERESIS)) {\r\n updateDropTarget(sectionId, 'left', sectionCanvasType);\r\n } else if (relativeX > sectionWidth * (0.5 + POSITION_HYSTERESIS)) {\r\n updateDropTarget(sectionId, 'right', sectionCanvasType);\r\n } else {\r\n updateDropTarget(sectionId, 'inside', sectionCanvasType);\r\n }\r\n } else {\r\n let position: DropPosition['type'] = 'inside';\r\n if (relativeY < sectionHeight * (0.3 - POSITION_HYSTERESIS)) {\r\n position = 'before';\r\n } else if (relativeY > sectionHeight * (0.7 + POSITION_HYSTERESIS)) {\r\n position = 'after';\r\n } else {\r\n position = 'inside';\r\n }\r\n updateDropTarget(sectionId, position, sectionCanvasType);\r\n }\r\n }, [isEditingHeaderFooter, isDraggingFromSidebar, updateDropTarget]);\r\n\r\n const handleMouseEnter = useCallback((e: React.MouseEvent, canvasType: string) => {\r\n if (!activeIdRef.current || !isDraggingFromSidebar) return;\r\n if (canvasType !== CANVAS_TYPES.MAIN && !isEditingHeaderFooter) return;\r\n\r\n const targetSections = getTargetSections(canvasType);\r\n\r\n if (targetSections.length > 0) {\r\n updateDropTarget(targetSections[0].id, 'before', canvasType);\r\n } else {\r\n updateDropTarget(null, 'inside', canvasType);\r\n }\r\n\r\n lastPositionRef.current = { x: e.clientX, y: e.clientY };\r\n }, [isDraggingFromSidebar, isEditingHeaderFooter, updateDropTarget]);\r\n\r\n const renderSectionsForCanvas = useCallback((canvasSections: EnhancedSectionData[], canvasType: string) => {\r\n const result: React.ReactNode[] = [];\r\n const processedGroups = new Set<string>();\r\n let i = 0;\r\n\r\n const renderDropIndicator = (key: string, isHorizontal = false) => (\r\n <Box\r\n key={key}\r\n sx={{\r\n [isHorizontal ? 'width' : 'height']: '50px',\r\n border: '2px dashed',\r\n borderColor: 'primary.main',\r\n borderRadius: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n bgcolor: 'rgba(25, 118, 210, 0.04)',\r\n [isHorizontal ? 'mx' : 'mb']: 2,\r\n opacity: 0,\r\n animation: 'fadeIn 0.3s ease-in-out forwards',\r\n '@keyframes fadeIn': {\r\n '0%': { opacity: 0, transform: isHorizontal ? 'translateX(-10px)' : 'translateY(-10px)' },\r\n '100%': { opacity: 1, transform: 'translate(0)' },\r\n },\r\n }}\r\n >\r\n <Typography type='s2' color='primary' weight='medium'>\r\n Drop here\r\n </Typography>\r\n </Box>\r\n );\r\n\r\n if (isDraggingFromSidebar &&\r\n canvasSections?.length > 0 &&\r\n dropTarget.type === 'before' &&\r\n dropTarget.id === canvasSections[0].id &&\r\n dropTarget.canvasType === canvasType) {\r\n result.push(renderDropIndicator(`drop-before-first-${canvasType}`));\r\n }\r\n\r\n while (i < canvasSections?.length) {\r\n const section = canvasSections[i];\r\n const sectionId = section.id;\r\n\r\n if (dropTarget.id === sectionId &&\r\n dropTarget.type === 'before' &&\r\n dropTarget.canvasType === canvasType &&\r\n !(isDraggingFromSidebar && i === 0)) {\r\n result.push(renderDropIndicator(`drop-before-${sectionId}-${canvasType}`));\r\n }\r\n\r\n if (!section.isSplitPair) {\r\n result.push(\r\n <Box\r\n key={section.id}\r\n data-section-id={section.id}\r\n data-canvas-type={canvasType}\r\n >\r\n <EditorSection\r\n section={section}\r\n isSelected={selectedSection === section.id}\r\n isDragging={activeId === section.id}\r\n isOver={dropTarget.id === section.id && dropTarget.type === 'inside' && dropTarget.canvasType === canvasType}\r\n onSelect={() => onSelectSection(section.id)}\r\n onUpdate={(content, extra) => {\r\n onUpdateSection(section.id, { content, ...extra }, canvasType);\r\n onSelectSection(null);\r\n }}\r\n onSplit={(content1, content2) => onSplitSection(section.id, content1, content2, canvasType)}\r\n onDelete={() => onDeleteSection(section.id, canvasType)}\r\n placeholders={formattedPlaceholders}\r\n setIsSectionEditing={setIsSectionEditing}\r\n />\r\n </Box>\r\n );\r\n i++;\r\n } else {\r\n const splitGroupId = section.splitGroupId;\r\n if (splitGroupId && processedGroups.has(splitGroupId)) {\r\n i++;\r\n continue;\r\n }\r\n\r\n const splitSections = canvasSections.filter(s => s.splitGroupId === splitGroupId);\r\n if (splitSections.length > 0) {\r\n if (splitGroupId) processedGroups.add(splitGroupId);\r\n\r\n // Split sections use stable keys based on section IDs and splitGroupId\r\n // This ensures React doesn't unnecessarily re-render or lose component state\r\n // when sections are reordered or updated\r\n const splitRow = (\r\n <Box\r\n key={`split-row-${splitGroupId}`}\r\n sx={{\r\n display: 'flex',\r\n gap: 2,\r\n mb: 2,\r\n bgcolor: 'rgba(0, 0, 0, 0.02)',\r\n p: 1,\r\n borderRadius: 1\r\n }}\r\n data-section-id={`split-group-${splitGroupId}`}\r\n data-canvas-type={canvasType}\r\n >\r\n {splitSections.map((splitSection, index) => (\r\n <React.Fragment key={splitSection.id}>\r\n {dropTarget.id === splitSection.id &&\r\n dropTarget.type === 'left' &&\r\n dropTarget.canvasType === canvasType && (\r\n renderDropIndicator(`drop-left-${splitSection.id}-${canvasType}`, true)\r\n )}\r\n <Box\r\n sx={{\r\n width: splitSection.splitWidth ? `${splitSection.splitWidth}%` : `${100 / splitSections.length}%`,\r\n transition: 'width 0.3s ease-in-out',\r\n }}\r\n data-section-id={splitSection.id}\r\n data-canvas-type={canvasType}\r\n >\r\n <EditorSection\r\n section={splitSection}\r\n isSelected={selectedSection === splitSection.id}\r\n isDragging={activeId === splitSection.id}\r\n isOver={dropTarget.id === splitSection.id && dropTarget.type === 'inside' && dropTarget.canvasType === canvasType}\r\n onSelect={() => onSelectSection(splitSection.id)}\r\n onUpdate={(content, extra) => {\r\n onUpdateSection(splitSection.id, { content, ...extra }, canvasType);\r\n onSelectSection(null);\r\n }}\r\n onSplit={(content1, content2) => onSplitSection(splitSection.id, content1, content2, canvasType)}\r\n onDelete={() => onDeleteSection(splitSection.id, canvasType)}\r\n placeholders={formattedPlaceholders}\r\n setIsSectionEditing={setIsSectionEditing}\r\n />\r\n </Box>\r\n {dropTarget.id === splitSection.id &&\r\n dropTarget.type === 'right' &&\r\n dropTarget.canvasType === canvasType && (\r\n renderDropIndicator(`drop-right-${splitSection.id}-${canvasType}`, true)\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </Box>\r\n );\r\n result.push(splitRow);\r\n i += splitSections.length;\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n if (dropTarget.id === sectionId &&\r\n dropTarget.type === 'after' &&\r\n dropTarget.canvasType === canvasType) {\r\n result.push(renderDropIndicator(`drop-after-${sectionId}-${canvasType}`));\r\n }\r\n }\r\n\r\n if ((canvasSections?.length === 0 && activeId && dropTarget.canvasType === canvasType) ||\r\n (canvasSections?.length === 0 && isDraggingFromSidebar && dropTarget.canvasType === canvasType)) {\r\n result.push(renderDropIndicator(`drop-empty-canvas-${canvasType}`));\r\n }\r\n\r\n return result;\r\n }, [\r\n isDraggingFromSidebar,\r\n dropTarget,\r\n activeId,\r\n selectedSection,\r\n onSelectSection,\r\n onUpdateSection,\r\n onSplitSection,\r\n onDeleteSection,\r\n formattedPlaceholders\r\n ]);\r\n\r\n const renderedMainSections = useMemo(() =>\r\n renderSectionsForCanvas(sections, CANVAS_TYPES.MAIN),\r\n [sections, dropTarget, activeId, isDraggingFromSidebar, selectedSection]\r\n );\r\n\r\n const renderedHeaderSections = useMemo(() =>\r\n renderSectionsForCanvas(headerSections, CANVAS_TYPES.HEADER),\r\n [headerSections, dropTarget, activeId, isDraggingFromSidebar, selectedSection, isEditingHeaderFooter]\r\n );\r\n\r\n const renderedFooterSections = useMemo(() =>\r\n renderSectionsForCanvas(footerSections, CANVAS_TYPES.FOOTER),\r\n [footerSections, dropTarget, activeId, isDraggingFromSidebar, selectedSection, isEditingHeaderFooter]\r\n );\r\n\r\n const renderPreview = () => {\r\n return (\r\n <Box\r\n sx={{\r\n transform: `scale(${zoom / 100})`,\r\n transformOrigin: 'top center',\r\n transition: 'transform 0.2s ease-in-out',\r\n bgcolor: 'white',\r\n p: 2,\r\n borderRadius: 1,\r\n boxShadow: 1,\r\n }}\r\n >\r\n <Box dangerouslySetInnerHTML={{ __html: generateEmailPreview(sections, headerSections, footerSections) }} />\r\n </Box>\r\n );\r\n };\r\n\r\n const renderHtmlEditor = () => (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n px: 2,\r\n py: 1,\r\n bgcolor: '#1e1e1e',\r\n borderBottom: '1px solid #333',\r\n borderRadius: '4px 4px 0 0',\r\n }}\r\n >\r\n <Typography type='s3' sx={{ color: '#ccc', fontFamily: 'monospace' }}>\r\n HTML Source Editor — changes will replace current sections\r\n </Typography>\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n <Button\r\n size='small'\r\n variant='contained'\r\n color='primary'\r\n startIcon={<CheckIcon fontSize='small' />}\r\n onClick={() => onApplyHtmlEdit(htmlEditValue)}\r\n sx={{ boxShadow: 'none' }}\r\n >\r\n Apply\r\n </Button>\r\n <Button\r\n size='small'\r\n variant='outlined'\r\n startIcon={<CloseIcon fontSize='small' />}\r\n onClick={() => onCancelHtmlEdit()}\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important`, borderColor: '#555 !important' })}\r\n >\r\n Cancel\r\n </Button>\r\n </Box>\r\n </Box>\r\n <textarea\r\n value={htmlEditValue}\r\n onChange={(e) => setHtmlEditValue(e.target.value)}\r\n spellCheck={false}\r\n style={{\r\n flex: 1,\r\n width: '100%',\r\n minHeight: 'calc(100vh - 220px)',\r\n padding: '16px',\r\n fontFamily: '\"Fira Code\", \"Cascadia Code\", \"Consolas\", monospace',\r\n fontSize: '13px',\r\n lineHeight: '1.6',\r\n color: '#d4d4d4',\r\n backgroundColor: '#1e1e1e',\r\n border: 'none',\r\n outline: 'none',\r\n resize: 'none',\r\n boxSizing: 'border-box',\r\n borderRadius: '0 0 4px 4px',\r\n tabSize: 2,\r\n }}\r\n />\r\n </Box>\r\n );\r\n\r\n const renderCanvas = (\r\n title: string,\r\n canvasType: string,\r\n renderedSections: React.ReactNode[],\r\n setCanvasRef: (node: HTMLElement | null) => void,\r\n ref: React.MutableRefObject<HTMLDivElement | null>,\r\n visible: boolean = true\r\n ) => {\r\n if (!visible) return null;\r\n\r\n return (\r\n <Box sx={{ mb: 3 }}>\r\n {CANVAS_TYPES.MAIN === canvasType && visible && headerSections.length > 0 && (\r\n <>\r\n {/* <Accordion\r\n sx= {{\r\n boxShadow: 'none !important',\r\n \".MuiAccordionSummary-root\": {\r\n backgroundColor: '#fafafa !important',\r\n border: `0 !important`,\r\n p: 0,\r\n pb: 1,\r\n // mb: 1,\r\n m:0,\r\n minHeight: 'unset'\r\n }\r\n }}\r\n >\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n aria-controls=\"panel1-content\"\r\n id=\"panel1-header\"\r\n > */}\r\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'}>Header</Typography>\r\n {/* </AccordionSummary> */}\r\n <Paper sx={{ mb: 1, boxShadow: 'none', opacity: 0.5 }} dangerouslySetInnerHTML={{ __html: generateHeaderFooterPreview(headerSections) }} />\r\n {/* </Accordion> */}\r\n </>\r\n )}\r\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'} sx={{ mb: 1 }}>{title}</Typography>\r\n <Paper\r\n ref={(node) => {\r\n setCanvasRef(node);\r\n ref.current = node;\r\n }}\r\n elevation={0}\r\n sx={{\r\n p: 4,\r\n border: '1px dashed',\r\n borderColor: isDraggingFromSidebar && dropTarget.canvasType === canvasType\r\n ? 'primary.main'\r\n : 'primary.light',\r\n borderRadius: 1,\r\n bgcolor: 'background.paper',\r\n position: 'relative',\r\n minHeight: title === 'Header' || title === 'Footer' ? '100px' : '200px',\r\n transition: 'border-color 0.3s ease, background-color 0.3s ease',\r\n '&:hover': {\r\n bgcolor: isDraggingFromSidebar && dropTarget.canvasType === canvasType\r\n ? 'rgba(25, 118, 210, 0.04)'\r\n : 'background.paper',\r\n },\r\n pointerEvents: (canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter\r\n ? 'none'\r\n : 'auto',\r\n opacity: (canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter\r\n ? 0.5\r\n : 1,\r\n }}\r\n onClick={() => {\r\n if ((canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter) return;\r\n onSelectSection(null);\r\n }}\r\n onMouseMove={(e) => handleMouseMove(e, canvasType)}\r\n onMouseEnter={(e) => handleMouseEnter(e, canvasType)}\r\n >\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\r\n {renderedSections}\r\n {getTargetSections(canvasType)?.length === 0 &&\r\n !activeId &&\r\n !isDraggingFromSidebar && (\r\n <Box sx={{ borderRadius: 1, p: 2, textAlign: 'center', color: 'text.secondary' }}>\r\n <Typography type='s2' color='theme.secondary.600' weight='medium'>\r\n Drag Sections from side panel to start building the {title.toLowerCase()}\r\n </Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n </Paper>\r\n {CANVAS_TYPES.MAIN === canvasType && visible && footerSections.length > 0 && (\r\n <>\r\n {/* <Accordion\r\n sx= {{\r\n boxShadow: 'none !important',\r\n \".MuiAccordionSummary-root\": {\r\n backgroundColor: '#fafafa !important',\r\n border: `0 !important`,\r\n p: 0,\r\n pb: 1,\r\n // mb: 1,\r\n m:0,\r\n minHeight: 'unset'\r\n }\r\n }}\r\n >\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n aria-controls=\"panel1-content\"\r\n id=\"panel1-header\"\r\n > */}\r\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'} sx={{ mt: 1 }}>Footer</Typography>\r\n {/* </AccordionSummary> */}\r\n <Paper sx={{ mb: 1, boxShadow: 'none', opacity: 0.5 }} dangerouslySetInnerHTML={{ __html: generateHeaderFooterPreview(footerSections) }} />\r\n {/* </Accordion> */}\r\n </>\r\n )}\r\n </Box>\r\n );\r\n };\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\r\n <Box sx={{ flex: 1, overflow: 'auto', height: 'calc(100vh - 104px)' }}>\r\n <Container maxWidth={editHtml ? false : 'lg'} sx={{ py: editHtml ? 0 : 4, height: editHtml ? '100%' : undefined }}>\r\n {editHtml ? (\r\n renderHtmlEditor()\r\n ) : preview ? (\r\n renderPreview()\r\n ) : (\r\n <>\r\n {renderCanvas(\r\n 'Header',\r\n CANVAS_TYPES.HEADER,\r\n renderedHeaderSections,\r\n setHeaderCanvasRef,\r\n headerCanvasRef,\r\n isEditingHeaderFooter\r\n )}\r\n {renderCanvas(\r\n 'Content',\r\n CANVAS_TYPES.MAIN,\r\n renderedMainSections,\r\n setMainCanvasRef,\r\n mainCanvasRef,\r\n !isEditingHeaderFooter\r\n )}\r\n {renderCanvas(\r\n 'Footer',\r\n CANVAS_TYPES.FOOTER,\r\n renderedFooterSections,\r\n setFooterCanvasRef,\r\n footerCanvasRef,\r\n isEditingHeaderFooter\r\n )}\r\n </>\r\n )}\r\n </Container>\r\n </Box >\r\n {!editHtml && (\r\n <Box\r\n sx={{\r\n width: isFromPreview ? (editMode ? 400 : 0) : 400,\r\n flexShrink: 0,\r\n position: 'sticky',\r\n top: 0,\r\n alignSelf: 'flex-start',\r\n height: 'calc(100vh - 104px)',\r\n overflowY: 'auto',\r\n borderLeft: '1px solid',\r\n borderColor: 'divider',\r\n bgcolor: 'background.paper',\r\n zIndex: 1,\r\n }}\r\n >\r\n {(selectedSection && !selectedSectionData?.is_edited_from_source && !isSectionEditing) ? (\r\n <SectionFormatPanel\r\n section={selectedSectionData}\r\n onClose={() => onSelectSection(null)}\r\n onUpdate={(data) => {\r\n if (selectedSection) {\r\n const canvasType = headerSections.some(s => s.id === selectedSection)\r\n ? CANVAS_TYPES.HEADER\r\n : footerSections.some(s => s.id === selectedSection)\r\n ? CANVAS_TYPES.FOOTER\r\n : CANVAS_TYPES.MAIN;\r\n onUpdateSection(selectedSection, data, canvasType);\r\n }\r\n }}\r\n placeholders={placeholders}\r\n handleSave={handleSave}\r\n relation_table={relation_table}\r\n />\r\n ) : (\r\n isFromPreview ? (editMode && <EditorSidebar />) : <EditorSidebar />\r\n )}\r\n </Box>\r\n )}\r\n </Box >\r\n );\r\n};\r\n\r\nexport default EditorCanvas;","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nimport Modal from '../../../components/modal/modal';\r\nimport Typography from '../../../components/typography/typography';\r\nimport Button from '../../../components/button/button';\r\n\r\nimport {\r\n\tBox,\r\n\tCircularProgress,\r\n\tDialogActions,\r\n\tDialogContent,\r\n\tDialogProps,\r\n\tDialogTitle,\r\n\tIconButton,\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\n\r\nimport './template-name-modal.scss';\r\nimport { IEmail } from '../utils/types';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport DynamicInput from '../../../components/form-control/form-builder/form-builder-element/text';\r\nimport { useForm } from 'react-hook-form';\r\nimport { patchV1TemplatesId, postV1Templates } from '../../../api-client/api.system-feature/api';\r\nimport * as Yup from 'yup';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\n\r\ninterface TemplateNameModalProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: (value: IEmail | null) => void;\r\n\tmodalProps?: DialogProps;\r\n\ttemplateRoutes: Record<string, any>;\r\n\tpayload: Record<string, any>;\r\n\tmode: 'add' | 'edit';\r\n\ttemplateData: Record<string, any> | null;\r\n\tonSaveSuccess?: () => void;\r\n\tonSaveError?: () => void;\r\n\tisSaving?: boolean;\r\n}\r\n\r\nconst generateValidationSchema = () => {\r\n\treturn yupResolver(\r\n\t\tYup.object().shape({\r\n\t\t\ttemplate_name: Yup.object().shape({\r\n\t\t\t\tname: Yup.string().trim().required('Template name is required'),\r\n\t\t\t})\r\n\t\t})\r\n\t)\r\n}\r\n\r\nconst TemplateNameModal: React.FC<TemplateNameModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tmodalProps,\r\n\ttemplateRoutes,\r\n\tpayload,\r\n\tmode = 'add',\r\n\ttemplateData,\r\n\tonSaveSuccess,\r\n\tonSaveError,\r\n\tisSaving: parentIsSaving = false,\r\n}) => {\r\n\tconsole.log(\"is saving...........\",parentIsSaving)\r\n\tconst { handleSubmit, control, setValue } = useForm({ mode: 'all', resolver: generateValidationSchema() });\r\n\tconst navigate = useNavigate();\r\n\tconst [isSubmitting, setIsSubmitting] = useState<boolean>(false);\r\n\tconsole.log(\"isSubmitting............\",isSubmitting)\r\n\r\n\tconst handleModalClose = () => {\r\n\t\tif (!isSubmitting && !parentIsSaving) {\r\n\t\t\tsetIsOpen(null);\r\n\t\t}\r\n\t};\r\n\r\n\tconst onSubmit = async (values: any) => {\r\n\t\tsetIsSubmitting(true);\r\n\t\ttry {\r\n\t\t\tconst { name = ''} = values?.template_name || {}\r\n\t\t\tpayload.name = name\r\n\t\t\tconst res = await (mode === 'edit' ? patchV1TemplatesId(payload) : postV1Templates(payload));\r\n\t\t\tif(res.status_code === 200) {\r\n\t\t\t\tenqueueSnackbar('Template saved successfully', { variant: 'success' });\r\n\t\t\t\tonSaveSuccess?.();\r\n\t\t\t\tnavigate(templateRoutes.LIST);\r\n\t\t\t}\r\n\t\t\tsetIsSubmitting(false);\r\n\t\t} catch (error) {\r\n\t\t\tconst m = error?.message || 'Something went wrong'\r\n\t\t\tsetIsSubmitting(false);\r\n\t\t\tenqueueSnackbar(m, { variant: 'error' });\r\n\t\t\tonSaveError?.();\r\n\t\t}\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tif(templateData && templateData?.name) {\r\n\t\t\tsetValue('template_name.name', templateData?.name)\r\n\t\t}\r\n\t}, [setValue, templateData])\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\topen={isOpen}\r\n\t\t\tonClose={handleModalClose}\r\n\t\t\tmaxWidth='xs'\r\n\t\t\tfullWidth\r\n\t\t\t{...modalProps}>\r\n\t\t\t<DialogTitle className='companySelectionModal--DialogTitle'>\r\n\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\r\n\t\t\t\t\t{parentIsSaving ? 'Saving Template...' : 'Template Name'}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<IconButton onClick={handleModalClose} disabled={isSubmitting || parentIsSaving}>\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\t\t\t<DialogContent className='companySelectionModal--DialogContents'>\r\n\t\t\t\t<form onSubmit={handleSubmit(onSubmit)} id='template_name'>\r\n\t\t\t\t\t<DynamicInput \r\n\t\t\t\t\t\tlabel={'Name'}\r\n\t\t\t\t\t\tname='name'\r\n\t\t\t\t\t\tplaceholder={'Enter Name'}\r\n\t\t\t\t\t\tfieldArrayName='template_name'\r\n\t\t\t\t\t\tformControl={control}\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t/>\r\n\t\t\t\t</form>\r\n\t\t\t</DialogContent>\r\n\t\t\t<DialogActions className='companySelectionModal--DialogAction'>\r\n\t\t\t\t<Box display='flex' gap={1.5}>\r\n\t\t\t\t\t<Button className='companySelectionModal--DialogAction--WhiteBtn' onClick={handleModalClose} disabled={isSubmitting || parentIsSaving}>Cancel</Button>\r\n\t\t\t\t\t<Button type='submit' form='template_name' disabled={isSubmitting || parentIsSaving} endIcon={(isSubmitting || parentIsSaving) && <CircularProgress size={15}/>}>\r\n\t\t\t\t\t\t{parentIsSaving ? 'Saving...' : 'Save'}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</Box>\r\n\t\t\t</DialogActions>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n\r\nexport default TemplateNameModal;\r\n","/* eslint-disable no-case-declarations */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useEffect, useCallback, useMemo } from 'react';\r\nimport EditorHeader from './EditorHeader';\r\nimport EditorCanvas from './EditorCanvas';\r\nimport {\r\n DndContext,\r\n DragEndEvent,\r\n DragOverEvent,\r\n DragStartEvent,\r\n pointerWithin,\r\n} from '@dnd-kit/core';\r\nimport { SectionData, ElementType } from '../types/editor';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { Box } from '@mui/material';\r\nimport { useLocation, useParams } from 'react-router-dom';\r\nimport { getErrorMessage, getToken } from '../../../utils/common';\r\nimport { getV1FormBuilderRelationalSchemaFieldsName, getV1SubjectsId, getV1TemplateHeaderFooterCompanyIdHeaderFooter, getV1TemplatesId, patchV1TemplateHeaderFooterId, postV1TemplateHeaderFooter } from '../../../api-client/api.system-feature/api';\r\nimport { templateRoutes, extractStyles, generateEmailPreview, generateHeaderFooterPreview, generateInlineStyles } from '../utils/common';\r\nimport { initialStyles } from '../utils/constant';\r\nimport _ from 'lodash';\r\nimport formatText from '../../../utils/format-text';\r\nimport TemplateNameModal from \"../template-name-modal/template-name-modal\";\r\nimport { useDebouncedUpdate } from '../hooks/useDebouncedUpdate';\r\n\r\ninterface EnhancedSectionData extends SectionData {\r\n isSplitPair?: boolean;\r\n splitGroupId?: string;\r\n splitWidth?: number;\r\n}\r\n\r\ninterface SectionFlowEditorProps {\r\n modulePath: string;\r\n module: string;\r\n type: string;\r\n}\r\n\r\nconst SectionFlowEditor: React.FC<SectionFlowEditorProps> = ({ modulePath, module, type }) => {\r\n const { id, template_id } = useParams();\r\n const { state: locationState } = useLocation();\r\n\r\n const [sections, setSections] = useState<EnhancedSectionData[]>([]);\r\n const [headerSections, setHeaderSections] = useState<EnhancedSectionData[]>([]);\r\n const [footerSections, setFooterSections] = useState<EnhancedSectionData[]>([]);\r\n const [activeId, setActiveId] = useState<string | null>(null);\r\n const [editMode, setEditMode] = useState<true | false>(false);\r\n const [fromPreview, setFromPreview] = useState<boolean>(false);\r\n const [selectedSection, setSelectedSection] = useState<string | null>(null);\r\n const [overSection, setOverSection] = useState<string | null>(null);\r\n const [preview, setPreview] = useState<boolean>(locationState?.fromPreview ? true : false);\r\n const [editHtml, setEditHtml] = useState<boolean>(false);\r\n const [placeholders, setPlaceholders] = useState<Record<string, any>[]>([]);\r\n const [activeCanvas, setActiveCanvas] = useState<'main' | 'header' | 'footer'>('main');\r\n const [isEditingHeaderFooter, setIsEditingHeaderFooter] = useState<boolean>(false);\r\n const [payload, setPayload] = useState<any>(null);\r\n const [headerFooterId, setHeaderFooterId] = useState<string>('');\r\n const ROUTES = templateRoutes(modulePath, type);\r\n const [relation_table, setRelationTable] = useState<any[]>([]);\r\n const [templateData, setTemplateData] = useState<Record<string, any> | null>(null);\r\n\r\n // Optimistic update state\r\n const [isSaving, setIsSaving] = useState<boolean>(false);\r\n const [savedSnapshot, setSavedSnapshot] = useState<{\r\n sections: EnhancedSectionData[];\r\n headerSections: EnhancedSectionData[];\r\n footerSections: EnhancedSectionData[];\r\n } | null>(null);\r\n const [zoom, setZoom] = useState<number>(100);\r\n\r\n const handleZoomIn = () => {\r\n setZoom(prev => Math.min(prev + 10, 150));\r\n };\r\n\r\n const handleZoomOut = () => {\r\n setZoom(prev => Math.max(prev - 10, 50));\r\n };\r\n\r\n const handleResetZoom = () => {\r\n setZoom(100);\r\n };\r\n // History state for undo/redo functionality\r\n const [history, setHistory] = useState<{\r\n past: Array<{ sections: EnhancedSectionData[]; headerSections: EnhancedSectionData[]; footerSections: EnhancedSectionData[] }>;\r\n future: Array<{ sections: EnhancedSectionData[]; headerSections: EnhancedSectionData[]; footerSections: EnhancedSectionData[] }>;\r\n }>({\r\n past: [],\r\n future: [],\r\n });\r\n const MAX_HISTORY_SIZE = 50;\r\n\r\n // Memoize placeholders to prevent recreation on every render\r\n const memoizedPlaceholders = useMemo(() => placeholders, [JSON.stringify(placeholders)]);\r\n\r\n // Helper function to save current state to history\r\n const saveToHistory = useCallback(() => {\r\n setHistory((prev) => {\r\n const newPast = [\r\n ...prev.past,\r\n {\r\n sections: [...sections],\r\n headerSections: [...headerSections],\r\n footerSections: [...footerSections],\r\n },\r\n ].slice(-MAX_HISTORY_SIZE); // Keep only last 50 operations\r\n\r\n return {\r\n past: newPast,\r\n future: [], // Clear future when new action is performed\r\n };\r\n });\r\n }, [sections, headerSections, footerSections]);\r\n\r\n // Undo handler\r\n const handleUndo = useCallback(() => {\r\n if (history.past.length === 0) return;\r\n\r\n const previous = history.past[history.past.length - 1];\r\n const newPast = history.past.slice(0, -1);\r\n\r\n setHistory({\r\n past: newPast,\r\n future: [\r\n {\r\n sections: [...sections],\r\n headerSections: [...headerSections],\r\n footerSections: [...footerSections],\r\n },\r\n ...history.future,\r\n ].slice(0, MAX_HISTORY_SIZE),\r\n });\r\n\r\n setSections(previous.sections);\r\n setHeaderSections(previous.headerSections);\r\n setFooterSections(previous.footerSections);\r\n }, [history, sections, headerSections, footerSections]);\r\n\r\n // Redo handler\r\n const handleRedo = useCallback(() => {\r\n if (history.future.length === 0) return;\r\n\r\n const next = history.future[0];\r\n const newFuture = history.future.slice(1);\r\n\r\n setHistory({\r\n past: [\r\n ...history.past,\r\n {\r\n sections: [...sections],\r\n headerSections: [...headerSections],\r\n footerSections: [...footerSections],\r\n },\r\n ].slice(-MAX_HISTORY_SIZE),\r\n future: newFuture,\r\n });\r\n\r\n setSections(next.sections);\r\n setHeaderSections(next.headerSections);\r\n setFooterSections(next.footerSections);\r\n }, [history, sections, headerSections, footerSections]);\r\n\r\n // Keyboard shortcuts for undo/redo\r\n useEffect(() => {\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n // Ctrl+Z or Cmd+Z for undo\r\n if ((event.ctrlKey || event.metaKey) && event.key === 'z' && !event.shiftKey) {\r\n event.preventDefault();\r\n handleUndo();\r\n }\r\n // Ctrl+Y or Cmd+Shift+Z for redo\r\n else if (\r\n ((event.ctrlKey || event.metaKey) && event.key === 'y') ||\r\n ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key === 'z')\r\n ) {\r\n event.preventDefault();\r\n handleRedo();\r\n }\r\n };\r\n\r\n window.addEventListener('keydown', handleKeyDown);\r\n return () => {\r\n window.removeEventListener('keydown', handleKeyDown);\r\n };\r\n }, [handleUndo, handleRedo]);\r\n\r\n const createNewSection = useCallback((type: ElementType, attrs: Record<string, any> = {}): EnhancedSectionData => {\r\n let content = '';\r\n const styles = initialStyles[type] || {};\r\n const inlineStyles: string = generateInlineStyles(styles);\r\n\r\n const idPrefix = activeCanvas === 'header' && isEditingHeaderFooter ? 'header-' :\r\n activeCanvas === 'footer' && isEditingHeaderFooter ? 'footer-' : '';\r\n\r\n switch (type) {\r\n case 'heading':\r\n content = `<h1 style=\"${inlineStyles}\">Heading 1</h1>`;\r\n break;\r\n case 'heading-2':\r\n content = `<h2 style=\"${inlineStyles}\">Heading 2</h2>`;\r\n break;\r\n case 'heading-3':\r\n content = `<h3 style=\"${inlineStyles}\">Heading 3</h3>`;\r\n break;\r\n case 'heading-4':\r\n content = `<h4 style=\"${inlineStyles}\">Heading 4</h4>`;\r\n break;\r\n case 'text':\r\n content = `<p style=\"${inlineStyles}\">Hello, enter your text here...</p>`;\r\n break;\r\n case 'image':\r\n content = `<img src=\"${attrs.src}\" alt=\"${attrs.alt}\" style=\"${inlineStyles};\" />`;\r\n break;\r\n case 'buttons':\r\n attrs.text = attrs?.text || 'Button text';\r\n content = `<button style=\"${inlineStyles}\">${attrs.text}</button>`;\r\n break;\r\n case 'divider':\r\n content = `<hr style=\"${inlineStyles}\" />`;\r\n break;\r\n case 'table':\r\n const tableStyles = styles as any;\r\n const { border, borderStyle, borderColor, ...rest } = tableStyles;\r\n const tInlineStyles = generateInlineStyles(tableStyles.is_bordered ? tableStyles : rest);\r\n const tHeadInlineStyles: string = generateInlineStyles(tableStyles.tHead);\r\n const tBodyInlineStyles: string = generateInlineStyles(tableStyles.tBody);\r\n const thCellInlineStyles: string = generateInlineStyles({ ...tableStyles.thCells, border, borderStyle, borderColor });\r\n const tbCellInlineStyles: string = generateInlineStyles({ ...tableStyles.tbCells, border, borderStyle, borderColor });\r\n content = `\r\n <table style=\"${tInlineStyles}\">\r\n <thead style=\"${tHeadInlineStyles}\">\r\n <tr style=\"background-color: #f5f5f5;\">\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n </tr>\r\n </thead>\r\n <tbody style=\"${tBodyInlineStyles}\">\r\n <tr>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n `;\r\n break;\r\n case 'signature':\r\n content = `<div style=\"${inlineStyles}\">Signature: <input type='text' style=\"border:0; border-bottom:1px solid black\" class='signature-input'/></div>`;\r\n break;\r\n case 'qr-code':\r\n attrs.placeholder = attrs?.placeholder || '{{qr_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n case 'bar-code':\r\n attrs.placeholder = attrs?.placeholder || '{{barcode_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n default:\r\n content = '<p style=\"font-size: 16px; color: #333333; line-height: 1.5;\">New section</p>';\r\n }\r\n\r\n let attributes: Record<string, any> = {};\r\n attributes = extractStyles(content, type);\r\n\r\n return {\r\n id: `${idPrefix}section-${uuidv4()}`,\r\n content,\r\n type,\r\n attributes: { ...(attrs || {}), styles },\r\n is_edited_from_source: false\r\n };\r\n }, [activeCanvas, isEditingHeaderFooter]);\r\n\r\n const handleDragStart = useCallback((event: DragStartEvent) => {\r\n const { active } = event;\r\n setActiveId(active.id as string);\r\n }, []);\r\n\r\n const handleDragOver = useCallback((event: DragOverEvent) => {\r\n const { /* active, */ over } = event;\r\n\r\n if (!over) {\r\n setOverSection(null);\r\n return;\r\n }\r\n\r\n if (over.id === 'header-canvas' && isEditingHeaderFooter) {\r\n setActiveCanvas('header');\r\n } else if (over.id === 'footer-canvas' && isEditingHeaderFooter) {\r\n setActiveCanvas('footer');\r\n } else if (over.id === 'main-canvas') {\r\n setActiveCanvas('main');\r\n }\r\n\r\n if (over.id !== 'header-canvas' && over.id !== 'main-canvas' && over.id !== 'footer-canvas') {\r\n setOverSection(over.id as string);\r\n }\r\n }, [isEditingHeaderFooter]);\r\n\r\n const handleDragEnd = useCallback((event: DragEndEvent) => {\r\n const { active, over } = event;\r\n\r\n setActiveId(null);\r\n setOverSection(null);\r\n\r\n if (!over) return;\r\n\r\n let targetSections = sections;\r\n let setTargetSections = setSections;\r\n\r\n if ((over.id === 'header-canvas' || overSection?.startsWith('header-')) && isEditingHeaderFooter) {\r\n targetSections = headerSections;\r\n setTargetSections = setHeaderSections;\r\n setActiveCanvas('header');\r\n } else if ((over.id === 'footer-canvas' || overSection?.startsWith('footer-')) && isEditingHeaderFooter) {\r\n targetSections = footerSections;\r\n setTargetSections = setFooterSections;\r\n setActiveCanvas('footer');\r\n } else {\r\n setActiveCanvas('main');\r\n }\r\n\r\n if (active.data.current?.type === 'image') {\r\n saveToHistory(); // Save state before adding image section\r\n const imageUrl = active.data.current.imageUrl;\r\n const newSection: EnhancedSectionData = createNewSection('image', { src: imageUrl, alt: 'Image' });\r\n\r\n const overIndex = targetSections.findIndex((section) => section.id === over.id);\r\n const newSections = [...targetSections];\r\n\r\n if (over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas' || overIndex === -1) {\r\n setTargetSections([...targetSections, newSection]);\r\n } else {\r\n newSections.splice(overIndex, 0, newSection);\r\n setTargetSections(newSections);\r\n }\r\n\r\n enqueueSnackbar('Added uploaded image section');\r\n return;\r\n }\r\n\r\n if (typeof active.id === 'string' && active.id.startsWith('sidebar-')) {\r\n saveToHistory(); // Save state before adding new section\r\n const type = active.id.replace('sidebar-', '') as ElementType;\r\n const newSection = createNewSection(type);\r\n\r\n const overIndex = targetSections.findIndex((section) => section.id === over.id);\r\n const isOverSection = overIndex !== -1;\r\n\r\n if (!isOverSection || over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas') {\r\n setTargetSections([...targetSections, newSection]);\r\n } else {\r\n const targetSection = targetSections[overIndex];\r\n const isEmpty =\r\n !targetSection.content ||\r\n targetSection.content.includes('Click to add') ||\r\n targetSection.content.includes('enter your text');\r\n\r\n if (isEmpty) {\r\n const updatedSections = [...targetSections];\r\n updatedSections[overIndex] = {\r\n ...targetSection,\r\n type,\r\n content: newSection.content,\r\n };\r\n setTargetSections(updatedSections);\r\n // enqueueSnackbar(`Changed section to ${type}`);\r\n } else {\r\n const updatedSections = [...targetSections];\r\n updatedSections.splice(overIndex, 0, newSection);\r\n setTargetSections(updatedSections);\r\n // enqueueSnackbar(`Added new ${type} section`);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (\r\n active.id !== over.id &&\r\n typeof active.id === 'string' &&\r\n typeof over.id === 'string'\r\n ) {\r\n saveToHistory(); // Save state before reordering sections\r\n let sourceSections: EnhancedSectionData[] = [];\r\n let sourceSetSections: React.Dispatch<React.SetStateAction<EnhancedSectionData[]>> | null = null;\r\n let canvasId = '';\r\n\r\n if (active.id.startsWith('header-') && isEditingHeaderFooter) {\r\n sourceSections = headerSections;\r\n sourceSetSections = setHeaderSections;\r\n canvasId = 'header-canvas';\r\n } else if (active.id.startsWith('footer-') && isEditingHeaderFooter) {\r\n sourceSections = footerSections;\r\n sourceSetSections = setFooterSections;\r\n canvasId = 'footer-canvas';\r\n } else {\r\n sourceSections = sections;\r\n sourceSetSections = setSections;\r\n canvasId = 'main-canvas';\r\n }\r\n\r\n const cleanActiveId = active.id.replace(/^(header-|footer-)/, '');\r\n\r\n const oldIndex = sourceSections.findIndex((section) =>\r\n section.id === cleanActiveId || section.id === active.id\r\n );\r\n\r\n let newIndex = targetSections.findIndex((section) =>\r\n section.id === String(over.id).replace(/^(header-|footer-)/, '')\r\n );\r\n\r\n if (over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas') {\r\n newIndex = targetSections.length;\r\n }\r\n\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n if (sourceSections === targetSections) {\r\n const newSections = [...sourceSections];\r\n const [movedSection] = newSections.splice(oldIndex, 1);\r\n\r\n if (movedSection.isSplitPair && movedSection.splitGroupId) {\r\n const groupId = movedSection.splitGroupId;\r\n const groupSections = [movedSection, ...sourceSections.filter(\r\n s => s.splitGroupId === groupId && s.id !== movedSection.id\r\n )];\r\n\r\n const cleaned = newSections.filter(s => s.splitGroupId !== groupId);\r\n cleaned.splice(newIndex, 0, ...groupSections);\r\n sourceSetSections(cleaned);\r\n } else {\r\n newSections.splice(newIndex, 0, movedSection);\r\n sourceSetSections(newSections);\r\n }\r\n } else {\r\n const originalSection = sourceSections[oldIndex];\r\n\r\n const newSourceSections = [...sourceSections];\r\n newSourceSections.splice(oldIndex, 1);\r\n sourceSetSections(newSourceSections);\r\n\r\n const newTargetSections = [...targetSections];\r\n\r\n const movedSection = { ...originalSection };\r\n\r\n if ((over.id === 'header-canvas' || over.id.startsWith('header-')) && isEditingHeaderFooter) {\r\n if (!movedSection.id.startsWith('header-')) {\r\n movedSection.id = `header-${movedSection.id}`;\r\n }\r\n } else if ((over.id === 'footer-canvas' || over.id.startsWith('footer-')) && isEditingHeaderFooter) {\r\n if (!movedSection.id.startsWith('footer-')) {\r\n movedSection.id = `footer-${movedSection.id}`;\r\n }\r\n } else {\r\n movedSection.id = movedSection.id.replace(/^(header-|footer-)/, '');\r\n }\r\n\r\n newTargetSections.splice(newIndex, 0, movedSection);\r\n setTargetSections(newTargetSections);\r\n }\r\n }\r\n }\r\n }, [sections, headerSections, footerSections, overSection, isEditingHeaderFooter, activeCanvas, createNewSection, saveToHistory]);\r\n\r\n const getRelevantSections = useCallback((canvasType: string) => {\r\n if (canvasType === 'header' && isEditingHeaderFooter) return headerSections;\r\n if (canvasType === 'footer' && isEditingHeaderFooter) return footerSections;\r\n return sections;\r\n }, [sections, headerSections, footerSections, isEditingHeaderFooter]);\r\n\r\n const getRelevantSetSections = useCallback((canvasType: string) => {\r\n if (canvasType === 'header' && isEditingHeaderFooter) return setHeaderSections;\r\n if (canvasType === 'footer' && isEditingHeaderFooter) return setFooterSections;\r\n return setSections;\r\n }, [isEditingHeaderFooter]);\r\n\r\n // Internal update function (not debounced)\r\n const updateSectionImmediate = useCallback((id: string, data: Partial<EnhancedSectionData>, canvasType: string) => {\r\n const relevantSections = getRelevantSections(canvasType);\r\n const relevantSetSections = getRelevantSetSections(canvasType);\r\n\r\n const cleanId = id.replace(/^(header-|footer-)/, '');\r\n\r\n relevantSetSections(\r\n relevantSections.map((section) =>\r\n section.id === cleanId || section.id === id ? { ...section, ...data } : section\r\n )\r\n );\r\n }, [getRelevantSections, getRelevantSetSections]);\r\n\r\n // Debounced version for section content updates (300ms delay)\r\n const handleUpdateSectionDebounced = useDebouncedUpdate(updateSectionImmediate, 300);\r\n\r\n // Main handler that decides whether to debounce\r\n const handleUpdateSection = useCallback((id: string, data: Partial<EnhancedSectionData>, canvasType: string) => {\r\n // Only debounce content updates, apply other updates immediately\r\n if (data.content !== undefined && Object.keys(data).length === 1) {\r\n handleUpdateSectionDebounced(id, data, canvasType);\r\n } else {\r\n updateSectionImmediate(id, data, canvasType);\r\n }\r\n }, [updateSectionImmediate, handleUpdateSectionDebounced]);\r\n\r\n const handleSplitSection = useCallback((id: string, content1: string, content2: string, canvasType: string) => {\r\n saveToHistory(); // Save state before splitting section\r\n\r\n const relevantSections = getRelevantSections(canvasType);\r\n const relevantSetSections = getRelevantSetSections(canvasType);\r\n\r\n const cleanId = id.replace(/^(header-|footer-)/, '');\r\n\r\n const index = relevantSections.findIndex((section) => section.id === cleanId || section.id === id);\r\n if (index === -1) return;\r\n\r\n const section = relevantSections[index];\r\n const newSections = [...relevantSections];\r\n\r\n const sectionPrefix = canvasType === 'header' ? 'header-' : canvasType === 'footer' ? 'footer-' : '';\r\n\r\n if (section.isSplitPair && section.splitGroupId) {\r\n const splitGroupId = section.splitGroupId;\r\n const splitSections = newSections.filter(s => s.splitGroupId === splitGroupId);\r\n const totalSections = splitSections.length + 1;\r\n const newWidth = 100 / totalSections;\r\n\r\n newSections[index] = {\r\n ...section,\r\n content: content1,\r\n splitWidth: newWidth\r\n };\r\n\r\n const newSection: EnhancedSectionData = {\r\n id: `${sectionPrefix}section-${uuidv4()}`,\r\n content: content2,\r\n type: section.type,\r\n isSplitPair: true,\r\n splitGroupId: splitGroupId,\r\n splitWidth: newWidth,\r\n attributes: section.attributes,\r\n is_edited_from_source: false\r\n };\r\n\r\n newSections.splice(index + 1, 0, newSection);\r\n\r\n for (let i = 0; i < newSections.length; i++) {\r\n if (newSections[i].splitGroupId === splitGroupId) {\r\n newSections[i].splitWidth = newWidth;\r\n }\r\n }\r\n } else {\r\n const splitGroupId = uuidv4();\r\n const initialWidth = 50;\r\n\r\n newSections[index] = {\r\n ...section,\r\n content: content1,\r\n isSplitPair: true,\r\n splitGroupId,\r\n splitWidth: initialWidth\r\n };\r\n\r\n const newSection: EnhancedSectionData = {\r\n id: `${sectionPrefix}section-${uuidv4()}`,\r\n content: content2,\r\n type: section.type,\r\n isSplitPair: true,\r\n splitGroupId,\r\n splitWidth: initialWidth,\r\n attributes: section.attributes,\r\n is_edited_from_source: false\r\n };\r\n\r\n newSections.splice(index + 1, 0, newSection);\r\n }\r\n\r\n relevantSetSections(newSections);\r\n // enqueueSnackbar('Section split successfully');\r\n }, [getRelevantSections, getRelevantSetSections, activeCanvas, isEditingHeaderFooter, saveToHistory]);\r\n\r\n const handleDeleteSection = useCallback((id: string, canvasType: string) => {\r\n saveToHistory(); // Save state before deleting section\r\n\r\n const relevantSections = getRelevantSections(canvasType);\r\n const relevantSetSections = getRelevantSetSections(canvasType);\r\n\r\n const cleanId = id.replace(/^(header-|footer-)/, '');\r\n\r\n const sectionToDelete = relevantSections.find(s => s.id === cleanId || s.id === id);\r\n\r\n if (!sectionToDelete) return;\r\n\r\n if (sectionToDelete.isSplitPair && sectionToDelete.splitGroupId) {\r\n const splitSections = relevantSections.filter(s => s.splitGroupId === sectionToDelete.splitGroupId);\r\n\r\n if (splitSections.length <= 2) {\r\n const remainingSection = splitSections.find(s => s.id !== cleanId && s.id !== id);\r\n if (remainingSection) {\r\n remainingSection.isSplitPair = false;\r\n remainingSection.splitGroupId = undefined;\r\n remainingSection.splitWidth = undefined;\r\n }\r\n relevantSetSections(relevantSections.filter(s => s.id !== cleanId && s.id !== id));\r\n } else {\r\n const remainingSplitSections = splitSections.filter(s => s.id !== cleanId && s.id !== id);\r\n const newWidth = 100 / remainingSplitSections.length;\r\n\r\n const updatedSections = relevantSections.filter(section => section.id !== cleanId && section.id !== id).map(section => {\r\n if (section.splitGroupId === sectionToDelete.splitGroupId) {\r\n return { ...section, splitWidth: newWidth };\r\n }\r\n return section;\r\n });\r\n\r\n relevantSetSections(updatedSections);\r\n // enqueueSnackbar('Section removed from split group');\r\n }\r\n } else {\r\n relevantSetSections(relevantSections.filter(section => section.id !== cleanId && section.id !== id));\r\n // enqueueSnackbar('Section deleted');\r\n }\r\n\r\n if (selectedSection === id) {\r\n setSelectedSection(null);\r\n }\r\n }, [getRelevantSections, getRelevantSetSections, selectedSection, saveToHistory]);\r\n\r\n useEffect(() => {\r\n if (locationState?.fromPreview) {\r\n setEditMode(locationState?.isViewOnly ? false : true);\r\n setFromPreview(true);\r\n }\r\n document.body.style.overflow = 'hidden';\r\n const main = document.getElementsByTagName('main')?.[0];\r\n if (main) {\r\n main.style.marginTop = '4.125rem';\r\n }\r\n return () => {\r\n document.body.removeAttribute('style');\r\n }\r\n }, []);\r\n\r\n const getData = async () => {\r\n if (id) {\r\n const token = getToken();\r\n const subjRes = await getV1SubjectsId({\r\n ...token,\r\n 'x-timezone': token['x-timezone']?.toString() || '',\r\n id\r\n });\r\n\r\n if ('data' in subjRes && subjRes.data && typeof subjRes.data === 'object' && 'resource' in subjRes.data) {\r\n const resource = (subjRes.data as any).resource;\r\n const token2 = getToken();\r\n const fRes = await getV1FormBuilderRelationalSchemaFieldsName({\r\n ...token2,\r\n 'x-timezone': token2['x-timezone']?.toString() || '',\r\n name: resource,\r\n });\r\n const schemaFields = ('data' in fRes && fRes.data && typeof fRes.data === 'object' && 'fields' in fRes.data)\r\n ? ((fRes.data as any).fields || [])\r\n : [];\r\n const relation_table = ('data' in fRes && fRes.data && typeof fRes.data === 'object' && 'relational_fields' in fRes.data)\r\n ? ((fRes.data as any).relational_fields || [])\r\n : [];\r\n\r\n // Process main schema fields\r\n const updatedFields = schemaFields\r\n .map((field) => ({\r\n ...field,\r\n key: field.key.replace('__replaceKey', ''),\r\n }))\r\n .filter((field) => !field.is_inner_join && field.alias !== 'id' && !field?.alias?.includes('_id'));\r\n\r\n // Process relation tables - separate array and object types\r\n const arrayRelationTables = [];\r\n const objectRelationFields = [];\r\n\r\n relation_table.forEach((table) => {\r\n if (!table) return;\r\n\r\n const updatedTableFields = (table.fields || []).map((field) => {\r\n const updatedField = {\r\n ...field,\r\n key: field.key.replace('__replaceKey', ''),\r\n alias: field?.templateKey ? field?.templateKey : field.alias,\r\n };\r\n\r\n // Prepend dataKey to field keys for object types\r\n if (table.type === 'object' && table.dataKey) {\r\n updatedField.key = `${table.dataKey}.${updatedField.key}`;\r\n }\r\n\r\n return updatedField;\r\n }).filter(\r\n (field) =>\r\n !field.is_inner_join &&\r\n field.alias !== 'id' &&\r\n !field.alias.includes('_id')\r\n );\r\n\r\n const uniqueTableFields = _.differenceWith(\r\n updatedTableFields,\r\n updatedTableFields,\r\n (fieldA: any, fieldB: any) => fieldA.key === fieldB?.joinKey\r\n );\r\n\r\n const tableFields = uniqueTableFields.map((f: any) => {\r\n const field = formatText(f.alias.replace(/_data$/, '').replace(/_/g, ' '));\r\n const value = table.type === 'object' && table.dataKey\r\n ? `${table.dataKey}.${f.alias.replace(/ /g, '_').toLowerCase()}`\r\n : f.alias.replace(/ /g, '_').toLowerCase();\r\n\r\n return {\r\n label: field,\r\n value: value\r\n };\r\n });\r\n\r\n if (table.type === 'object') {\r\n // Merge object type fields into main fields\r\n objectRelationFields.push(...tableFields);\r\n } else {\r\n // Keep array types separate\r\n arrayRelationTables.push({\r\n ...table,\r\n fields: tableFields\r\n });\r\n }\r\n });\r\n\r\n // Combine main fields and object relation fields\r\n const allFields = [\r\n ...updatedFields.map((f) => {\r\n const n = f?.alias || f?.key\r\n const field = formatText(n.replace(/_data$/, '').replace(/_/g, ' '));\r\n return {\r\n label: field,\r\n value: field.replace(/ /g, '_').toLowerCase()\r\n };\r\n }),\r\n ...objectRelationFields\r\n ];\r\n\r\n const uniqueAllFields = _.uniqBy(allFields, 'value');\r\n\r\n setPlaceholders(uniqueAllFields);\r\n setRelationTable(arrayRelationTables);\r\n }\r\n }\r\n\r\n // Rest of the function remains the same...\r\n if (template_id) {\r\n const token3 = getToken();\r\n const res = await getV1TemplatesId({\r\n ...token3,\r\n 'x-timezone': token3['x-timezone']?.toString() || '',\r\n id: template_id\r\n });\r\n const templateSections = ('data' in res && res.data && typeof res.data === 'object' && 'sections' in res.data)\r\n ? ((res.data as any).sections || [])\r\n : [];\r\n const mainSecs = templateSections.map((s: any) => ({\r\n ...s,\r\n id: s.id || `section-${uuidv4()}`,\r\n attributes: {\r\n ...s.attributes,\r\n styles: s.attributes?.styles || initialStyles[s.type] || {}\r\n }\r\n }));\r\n setTemplateData(('data' in res && res.data) ? res.data as any : null);\r\n\r\n setSections(mainSecs);\r\n }\r\n\r\n if (locationState?.company_id) {\r\n const token4 = getToken();\r\n const res = await getV1TemplateHeaderFooterCompanyIdHeaderFooter({\r\n ...token4,\r\n 'x-timezone': token4['x-timezone']?.toString() || '',\r\n company_id: locationState.company_id,\r\n });\r\n const resData = ('data' in res && res.data && typeof res.data === 'object') ? res.data as any : null;\r\n setHeaderFooterId(resData?._id || '');\r\n const headerSections = resData?.header_sections || [];\r\n const footerSections = resData?.footer_sections || [];\r\n const headerSecs = headerSections.map((s) => ({\r\n ...s,\r\n id: s.id || `header-section-${uuidv4()}`,\r\n attributes: {\r\n ...s.attributes,\r\n styles: s.attributes?.styles || initialStyles[s.type] || {}\r\n }\r\n }));\r\n const footerSecs = footerSections.map((s) => ({\r\n ...s,\r\n id: s.id || `footer-section-${uuidv4()}`,\r\n attributes: {\r\n ...s.attributes,\r\n styles: s.attributes?.styles || initialStyles[s.type] || {}\r\n }\r\n }));\r\n\r\n setHeaderSections(headerSecs);\r\n setFooterSections(footerSecs);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n getData();\r\n }, [template_id, id, locationState?.company_id]);\r\n\r\n const handleApplyHtmlEdit = useCallback((html: string) => {\r\n saveToHistory(); // Save state before applying HTML edit\r\n const newSection: EnhancedSectionData = {\r\n id: `section-${uuidv4()}`,\r\n content: html,\r\n type: 'text',\r\n is_edited_from_source: true,\r\n };\r\n setSections([newSection]);\r\n setEditHtml(false);\r\n }, [saveToHistory]);\r\n\r\n const handleCancelHtmlEdit = useCallback(() => {\r\n setEditHtml(false);\r\n }, []);\r\n\r\n const handleSave = useCallback(async () => {\r\n if (sections.length === 0 && headerSections.length === 0 && footerSections.length === 0) {\r\n enqueueSnackbar('Please add at least one section');\r\n return;\r\n }\r\n\r\n // Save snapshot for potential rollback\r\n setSavedSnapshot({\r\n sections: [...sections],\r\n headerSections: [...headerSections],\r\n footerSections: [...footerSections],\r\n });\r\n\r\n const mainHtml = generateEmailPreview(sections, headerSections, footerSections, true);\r\n try {\r\n const p = {\r\n ...getToken(),\r\n ...(template_id ? { id: template_id } : { subject_id: id, is_default: false, company_id: locationState.company_id }),\r\n sections: sections.map(s => ({ ...s, attributes: s.attributes })),\r\n contents: mainHtml\r\n }\r\n setPayload(p);\r\n } catch (error) {\r\n const m = getErrorMessage(error?.message);\r\n enqueueSnackbar(m, { variant: 'error' });\r\n setSavedSnapshot(null);\r\n }\r\n }, [sections, headerSections, footerSections, template_id, id, locationState]);\r\n\r\n const handleSaveHeaderFooter = useCallback(async () => {\r\n if (sections.length === 0 && headerSections.length === 0 && footerSections.length === 0) {\r\n enqueueSnackbar('Please add at least one section', { variant: 'error' });\r\n return;\r\n } else if (!locationState?.company_id) {\r\n enqueueSnackbar('Company has not been selected', { variant: 'error' });\r\n return;\r\n }\r\n\r\n // Save snapshot for potential rollback\r\n setSavedSnapshot({\r\n sections: [...sections],\r\n headerSections: [...headerSections],\r\n footerSections: [...footerSections],\r\n });\r\n\r\n // Show loading state immediately (optimistic update)\r\n setIsSaving(true);\r\n\r\n const headerHtml = generateHeaderFooterPreview(headerSections, 'header');\r\n const footerHtml = generateHeaderFooterPreview(footerSections, 'footer');\r\n const combinedHtml = `${headerHtml}${footerHtml}`;\r\n\r\n // Convert splitWidth from number to string for API\r\n const convertSectionForApi = (section: EnhancedSectionData) => ({\r\n id: section.id,\r\n content: section.content,\r\n type: section.type,\r\n isSplitPair: section.isSplitPair,\r\n splitGroupId: section.splitGroupId,\r\n splitWidth: section.splitWidth !== undefined ? String(section.splitWidth) : undefined,\r\n attributes: section.attributes,\r\n });\r\n\r\n const convertedHeaderSections = headerSections.map(convertSectionForApi);\r\n const convertedFooterSections = footerSections.map(convertSectionForApi);\r\n\r\n try {\r\n if (headerFooterId) {\r\n const token5 = getToken();\r\n const res = await patchV1TemplateHeaderFooterId({\r\n ...token5,\r\n 'x-timezone': token5['x-timezone']?.toString() || '',\r\n id: headerFooterId,\r\n header_sections: convertedHeaderSections,\r\n footer_sections: convertedFooterSections,\r\n contents: combinedHtml\r\n });\r\n if (res.status_code === 200) {\r\n enqueueSnackbar('Header/Footer saved successfully', { variant: 'success' });\r\n setIsEditingHeaderFooter(false);\r\n setSavedSnapshot(null);\r\n }\r\n } else {\r\n const token6 = getToken();\r\n const res = await postV1TemplateHeaderFooter({\r\n ...token6,\r\n 'x-timezone': token6['x-timezone']?.toString() || '',\r\n header_sections: convertedHeaderSections,\r\n footer_sections: convertedFooterSections,\r\n contents: combinedHtml,\r\n company_id: locationState.company_id\r\n });\r\n if (res.status_code === 200) {\r\n enqueueSnackbar('Header/Footer saved successfully', { variant: 'success' });\r\n setIsEditingHeaderFooter(false);\r\n setSavedSnapshot(null);\r\n }\r\n }\r\n } catch (error) {\r\n const m = getErrorMessage(error?.message);\r\n enqueueSnackbar(m, { variant: 'error' });\r\n\r\n // Revert to saved snapshot on error\r\n if (savedSnapshot) {\r\n setSections(savedSnapshot.sections);\r\n setHeaderSections(savedSnapshot.headerSections);\r\n setFooterSections(savedSnapshot.footerSections);\r\n enqueueSnackbar('Changes reverted due to save error', { variant: 'warning' });\r\n }\r\n } finally {\r\n setIsSaving(false);\r\n setSavedSnapshot(null);\r\n }\r\n }, [sections, headerSections, footerSections, headerFooterId, locationState, savedSnapshot]);\r\n\r\n const toggleHeaderFooterEditing = useCallback(() => {\r\n setIsEditingHeaderFooter(!isEditingHeaderFooter);\r\n if (isEditingHeaderFooter) {\r\n setActiveCanvas('main');\r\n }\r\n }, [isEditingHeaderFooter]);\r\n\r\n // Handle save success from TemplateNameModal\r\n const handleSaveSuccess = useCallback(() => {\r\n setSavedSnapshot(null);\r\n setPayload(null);\r\n }, []);\r\n\r\n // Handle save error from TemplateNameModal\r\n const handleSaveError = useCallback(() => {\r\n // Revert to saved snapshot on error\r\n if (savedSnapshot) {\r\n setSections(savedSnapshot.sections);\r\n setHeaderSections(savedSnapshot.headerSections);\r\n setFooterSections(savedSnapshot.footerSections);\r\n enqueueSnackbar('Changes reverted due to save error', { variant: 'warning' });\r\n }\r\n\r\n setSavedSnapshot(null);\r\n setPayload(null);\r\n }, [savedSnapshot]);\r\n\r\n const toggleEditMode = () => {\r\n setEditMode(!editMode);\r\n if (editMode) {\r\n setPreview(true);\r\n } else {\r\n setPreview(false);\r\n }\r\n }\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', height: '100vh' }}>\r\n <EditorHeader\r\n fromPreview={fromPreview}\r\n onPreview={() => setPreview(!preview)}\r\n onSave={handleSave}\r\n onEditModeChange={toggleEditMode}\r\n zoom={zoom}\r\n onZoomIn={handleZoomIn}\r\n onZoomOut={handleZoomOut}\r\n onResetZoom={handleResetZoom}\r\n editMode={editMode}\r\n preview={preview}\r\n editHtml={editHtml}\r\n onEditHtml={() => setEditHtml(!editHtml)}\r\n sections={sections}\r\n isEditingHeaderFooter={isEditingHeaderFooter}\r\n setIsEditingHeaderFooter={toggleHeaderFooterEditing}\r\n onSaveHeaderFooter={handleSaveHeaderFooter}\r\n modulePath={modulePath}\r\n type={type}\r\n mode={template_id ? 'edit' : 'add'}\r\n templateData={templateData}\r\n isSaving={isSaving}\r\n />\r\n <Box sx={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\r\n <DndContext\r\n onDragStart={handleDragStart}\r\n onDragOver={handleDragOver}\r\n onDragEnd={handleDragEnd}\r\n collisionDetection={pointerWithin}\r\n >\r\n <EditorCanvas\r\n sections={sections}\r\n headerSections={headerSections}\r\n footerSections={footerSections}\r\n activeId={activeId}\r\n overSection={overSection}\r\n selectedSection={selectedSection}\r\n onSelectSection={setSelectedSection}\r\n onUpdateSection={handleUpdateSection}\r\n onSplitSection={handleSplitSection}\r\n onDeleteSection={handleDeleteSection}\r\n preview={preview}\r\n editHtml={editHtml}\r\n onApplyHtmlEdit={handleApplyHtmlEdit}\r\n onCancelHtmlEdit={handleCancelHtmlEdit}\r\n zoom={zoom}\r\n editMode={editMode}\r\n isFromPreview={fromPreview}\r\n handleSave={handleSave}\r\n placeholders={memoizedPlaceholders}\r\n isEditingHeaderFooter={isEditingHeaderFooter}\r\n relation_table={relation_table}\r\n />\r\n </DndContext>\r\n </Box>\r\n {payload !== null &&\r\n <TemplateNameModal\r\n isOpen={payload !== null}\r\n setIsOpen={() => setPayload(null)}\r\n payload={payload}\r\n templateRoutes={ROUTES}\r\n mode={template_id ? 'edit' : 'add'}\r\n templateData={templateData}\r\n onSaveSuccess={handleSaveSuccess}\r\n onSaveError={handleSaveError}\r\n isSaving={isSaving}\r\n />\r\n }\r\n </Box>\r\n );\r\n};\r\n\r\nexport default SectionFlowEditor;","/* eslint-disable unused-imports/no-unused-vars */\r\nimport { Box } from '@mui/material';\r\nimport SectionFlowEditor from '../components/SectionFlowEditor';\r\nimport './add-template.scss';\r\nimport { ITemplateFormProps } from '../utils/types';\r\n\r\nconst AddTemplate: React.FC<ITemplateFormProps> = ({ modulePath, module, type}) => {\r\n return (\r\n <Box sx={{ minHeight: '100vh', bgcolor: 'grey.50' }}>\r\n <SectionFlowEditor modulePath={modulePath} module={module} type={type}/>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default AddTemplate;","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useRef, useEffect, useCallback } from 'react';\r\nimport { Box, Skeleton, IconButton, Tooltip, Divider, Fade } from '@mui/material';\r\nimport { ZoomIn, ZoomOut, Refresh } from '@mui/icons-material';\r\nimport { Trash } from '../../../components/icons';\r\nimport Typography from '../../../components/typography/typography';\r\n\r\nconst HtmlThumbnailPreview = ({ \r\n template, \r\n width = 300, \r\n height = 200, \r\n scale = 0.25,\r\n showControls = false,\r\n onClick = null,\r\n selectedTemplateId = '',\r\n isFetching = false,\r\n onDelete,\r\n minScale = 0.1,\r\n maxScale = 1,\r\n scaleStep = 1.2,\r\n loadingDelay = 500,\r\n refreshDelay = 300,\r\n normalView = false,\r\n}) => {\r\n const [isLoading, setIsLoading] = useState(isFetching || true);\r\n const [currentScale, setCurrentScale] = useState(scale);\r\n const [error, setError] = useState(null);\r\n const [isHovered, setIsHovered] = useState(false);\r\n const containerRef = useRef(null);\r\n const contentRef = useRef(null);\r\n const loadingTimeoutRef = useRef(null);\r\n const refreshTimeoutRef = useRef(null);\r\n\r\n // Calculate dimensions based on scale\r\n const scaledWidth = width / currentScale;\r\n const scaledHeight = height / currentScale;\r\n\r\n // Cleanup timeouts on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (loadingTimeoutRef.current) {\r\n clearTimeout(loadingTimeoutRef.current);\r\n }\r\n if (refreshTimeoutRef.current) {\r\n clearTimeout(refreshTimeoutRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n // Handle initial loading\r\n useEffect(() => {\r\n if (loadingTimeoutRef.current) {\r\n clearTimeout(loadingTimeoutRef.current);\r\n }\r\n \r\n loadingTimeoutRef.current = setTimeout(() => {\r\n setIsLoading(false);\r\n }, loadingDelay);\r\n\r\n return () => {\r\n if (loadingTimeoutRef.current) {\r\n clearTimeout(loadingTimeoutRef.current);\r\n }\r\n };\r\n }, [template.contents, loadingDelay]);\r\n\r\n // Handle external loading state\r\n useEffect(() => {\r\n setIsLoading(isFetching);\r\n }, [isFetching]);\r\n\r\n // Memoized event handlers\r\n const handleZoomIn = useCallback(() => {\r\n setCurrentScale(prev => Math.min(prev * scaleStep, maxScale));\r\n }, [scaleStep, maxScale]);\r\n\r\n const handleZoomOut = useCallback(() => {\r\n setCurrentScale(prev => Math.max(prev / scaleStep, minScale));\r\n }, [scaleStep, minScale]);\r\n\r\n const handleRefresh = useCallback(() => {\r\n setIsLoading(true);\r\n setError(null);\r\n \r\n if (refreshTimeoutRef.current) {\r\n clearTimeout(refreshTimeoutRef.current);\r\n }\r\n \r\n refreshTimeoutRef.current = setTimeout(() => {\r\n setIsLoading(false);\r\n }, refreshDelay);\r\n }, [refreshDelay]);\r\n\r\n const handleClick = useCallback(() => {\r\n if (onClick && !isLoading) {\r\n onClick(template);\r\n }\r\n }, [onClick, template, isLoading]);\r\n\r\n const handleDelete = useCallback((e) => {\r\n e.stopPropagation(); // Prevent triggering onClick\r\n if (onDelete && !template?.is_default) {\r\n onDelete(template);\r\n }\r\n }, [onDelete, template]);\r\n\r\n const handleMouseEnter = useCallback(() => {\r\n setIsHovered(true);\r\n }, []);\r\n\r\n const handleMouseLeave = useCallback(() => {\r\n setIsHovered(false);\r\n }, []);\r\n\r\n // Loading state\r\n if (isLoading) {\r\n return (\r\n <Box \r\n sx={{ \r\n width, \r\n height,\r\n borderRadius: 1,\r\n overflow: 'hidden',\r\n border: '1px solid',\r\n borderColor: 'divider'\r\n }}\r\n >\r\n <Skeleton \r\n variant=\"rectangular\" \r\n width=\"100%\" \r\n height=\"100%\" \r\n animation=\"wave\"\r\n />\r\n </Box>\r\n );\r\n }\r\n\r\n // Error state\r\n if (error) {\r\n return (\r\n <Box \r\n sx={{ \r\n width, \r\n height,\r\n borderRadius: 1,\r\n overflow: 'hidden',\r\n border: '1px solid',\r\n borderColor: 'error.main',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: 'error.light',\r\n color: 'error.contrastText'\r\n }}\r\n >\r\n Failed to load template\r\n </Box>\r\n );\r\n }\r\n\r\n const isSelected = selectedTemplateId === template._id;\r\n const canZoomIn = currentScale < maxScale;\r\n const canZoomOut = currentScale > minScale;\r\n const canDelete = !template?.is_default;\r\n\r\n return (\r\n <Box \r\n sx={{ position: 'relative', display: 'inline-block' }}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n >\r\n {/* Main Container */}\r\n <Box\r\n ref={containerRef}\r\n onClick={handleClick}\r\n sx={(theme) => ({\r\n width,\r\n height,\r\n border: '1px solid',\r\n borderRadius: 1,\r\n overflow: 'hidden',\r\n position: 'relative',\r\n cursor: onClick ? 'pointer' : 'default',\r\n backgroundColor: '#fff',\r\n // boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\r\n transition: 'all 0.2s ease-in-out',\r\n '&:hover': onClick ? {\r\n boxShadow: '0 4px 16px rgba(0,0,0,0.15)',\r\n transform: 'translateY(-1px)',\r\n } : {},\r\n borderColor: normalView && isSelected ? theme.palette.theme.primary[800] : 'grey.300',\r\n borderWidth: isSelected ? 2 : 1,\r\n })}\r\n >\r\n {/* Scaled Content Wrapper */}\r\n <Box\r\n sx={{\r\n width: scaledWidth,\r\n height: scaledHeight,\r\n transform: `scale(${currentScale})`,\r\n transformOrigin: 'top left',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n overflow: 'hidden',\r\n }}\r\n >\r\n {/* HTML Content */}\r\n <Box\r\n ref={contentRef}\r\n sx={{\r\n width: '100%',\r\n height: '100%',\r\n userSelect: 'none',\r\n pointerEvents: 'none',\r\n pt: 2,\r\n '& *': {\r\n maxWidth: '100% !important',\r\n boxSizing: 'border-box !important',\r\n },\r\n // Reset common problematic styles\r\n '& body': {\r\n margin: '0 !important',\r\n padding: '0 !important',\r\n overflow: 'hidden !important',\r\n },\r\n // Handle images\r\n '& img': {\r\n maxWidth: '100% !important',\r\n height: 'auto !important',\r\n },\r\n // Handle tables\r\n '& table': {\r\n width: '100% !important',\r\n tableLayout: 'fixed !important',\r\n },\r\n // Prevent absolute positioning issues\r\n '& *[style*=\"position: absolute\"]': {\r\n position: 'relative !important',\r\n },\r\n '& .email-container': {\r\n width: '85% !important',\r\n }\r\n }}\r\n dangerouslySetInnerHTML={{ __html: template.contents }}\r\n />\r\n </Box>\r\n\r\n {/* Loading Overlay */}\r\n {isLoading && (\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n backgroundColor: 'rgba(255,255,255,0.8)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 2,\r\n }}\r\n >\r\n <Skeleton variant=\"rectangular\" width=\"90%\" height=\"90%\" />\r\n </Box>\r\n )}\r\n\r\n {/* Selection Indicator */}\r\n {template?.is_default && (\r\n <Box\r\n sx={(theme) => ({\r\n position: 'absolute',\r\n top: 8,\r\n left: 8,\r\n width: 12,\r\n height: 12,\r\n borderRadius: '50%',\r\n backgroundColor: theme.palette.theme?.primary[800],\r\n zIndex: 3,\r\n })}\r\n />\r\n )}\r\n </Box>\r\n {template?.name && <Typography type='s3' weight='medium' color='theme.secondary.1000' align='center' sx={{width, mt:0.5}}>{template?.name}</Typography>}\r\n\r\n {/* Hover Controls */}\r\n {showControls && (\r\n <Fade in={isHovered} timeout={200}>\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n top: -8,\r\n right: -8,\r\n display: 'flex',\r\n gap: 0.5,\r\n zIndex: 4,\r\n backgroundColor: 'rgba(255,255,255,0.95)',\r\n border: '1px solid',\r\n borderColor: 'grey.300',\r\n borderRadius: 2,\r\n padding: 0.5,\r\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\r\n backdropFilter: 'blur(4px)',\r\n }}\r\n >\r\n <Tooltip title={`Zoom In (${Math.round(currentScale * 100)}%)`} arrow>\r\n <span>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleZoomIn}\r\n disabled={!canZoomIn}\r\n sx={{\r\n backgroundColor: 'transparent',\r\n '&:hover': { \r\n backgroundColor: 'primary.light',\r\n color: 'primary.contrastText' \r\n },\r\n '&:disabled': {\r\n opacity: 0.5\r\n }\r\n }}\r\n >\r\n <ZoomIn fontSize=\"small\" />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n\r\n <Tooltip title={`Zoom Out (${Math.round(currentScale * 100)}%)`} arrow>\r\n <span>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleZoomOut}\r\n disabled={!canZoomOut}\r\n sx={{\r\n backgroundColor: 'transparent',\r\n '&:hover': { \r\n backgroundColor: 'primary.light',\r\n color: 'primary.contrastText' \r\n },\r\n '&:disabled': {\r\n opacity: 0.5\r\n }\r\n }}\r\n >\r\n <ZoomOut fontSize=\"small\" />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n\r\n <Tooltip title=\"Refresh Preview\" arrow>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleRefresh}\r\n sx={{\r\n backgroundColor: 'transparent',\r\n '&:hover': { \r\n backgroundColor: 'primary.light',\r\n color: 'primary.contrastText' \r\n },\r\n }}\r\n >\r\n <Refresh fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n\r\n {onDelete && (\r\n <>\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n <Tooltip \r\n title={canDelete ? \"Delete Template\" : \"Cannot delete default template\"} \r\n arrow\r\n >\r\n <span>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleDelete}\r\n disabled={!canDelete}\r\n sx={{\r\n backgroundColor: 'transparent',\r\n '&:hover': !canDelete ? {} : { \r\n backgroundColor: 'error.light',\r\n color: 'error.contrastText' \r\n },\r\n '&:disabled': {\r\n opacity: 0.5\r\n }\r\n }}\r\n >\r\n <Trash fontSize=\"small\" />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n </>\r\n )}\r\n </Box>\r\n </Fade>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport { HtmlThumbnailPreview };\r\nexport default HtmlThumbnailPreview;","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useRef, useEffect, useCallback } from 'react';\r\nimport { Box, Skeleton, IconButton, Tooltip, Divider, Fade } from '@mui/material';\r\nimport { ZoomIn, ZoomOut, Refresh } from '@mui/icons-material';\r\nimport { Trash } from '../../../components/icons';\r\nimport Typography from '../../../components/typography/typography';\r\n\r\ninterface HtmlThumbnailPreviewProps {\r\n template: any;\r\n width?: number | string; \r\n height?: number;\r\n scale?: number;\r\n showControls?: boolean;\r\n onClick?: (template: any) => void;\r\n selectedTemplateId?: string;\r\n isFetching?: boolean;\r\n onDelete?: (template: any) => void;\r\n normalView?: boolean;\r\n minScale?: number;\r\n maxScale?: number;\r\n scaleStep?: number;\r\n loadingDelay?: number;\r\n refreshDelay?: number;\r\n}\r\n\r\nconst HtmlThumbnailPreviewFull: React.FC<HtmlThumbnailPreviewProps> = ({\r\n template,\r\n width = '100%',\r\n height = 800,\r\n scale = 0.25,\r\n showControls = false,\r\n onClick = null,\r\n selectedTemplateId = '',\r\n isFetching = false,\r\n onDelete,\r\n normalView = false,\r\n minScale = 0.1,\r\n maxScale = 1,\r\n scaleStep = 1.2,\r\n loadingDelay = 500,\r\n refreshDelay = 300,\r\n}) => {\r\n const [isLoading, setIsLoading] = useState(isFetching || true);\r\n const [currentScale, setCurrentScale] = useState(scale);\r\n const [error, setError] = useState<null | string>(null);\r\n const [isHovered, setIsHovered] = useState(false);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n const loadingTimeoutRef = useRef<any>(null);\r\n const refreshTimeoutRef = useRef<any>(null);\r\n\r\n const [containerPixelWidth, setContainerPixelWidth] = useState<number>(typeof width === 'number' ? width : 800);\r\n\r\n // Measure container width for responsive scaling\r\n useEffect(() => {\r\n const updateWidth = () => {\r\n if (containerRef.current) {\r\n const newWidth = containerRef.current.offsetWidth;\r\n setContainerPixelWidth(newWidth);\r\n }\r\n };\r\n updateWidth();\r\n window.addEventListener('resize', updateWidth);\r\n return () => window.removeEventListener('resize', updateWidth);\r\n }, []);\r\n\r\n const scaledWidth = containerPixelWidth / currentScale;\r\n const scaledHeight = height / currentScale;\r\n\r\n useEffect(() => {\r\n return () => {\r\n clearTimeout(loadingTimeoutRef.current);\r\n clearTimeout(refreshTimeoutRef.current);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n clearTimeout(loadingTimeoutRef.current);\r\n loadingTimeoutRef.current = setTimeout(() => setIsLoading(false), loadingDelay);\r\n return () => clearTimeout(loadingTimeoutRef.current);\r\n }, [template.contents, loadingDelay]);\r\n\r\n useEffect(() => setIsLoading(isFetching), [isFetching]);\r\n\r\n const handleZoomIn = useCallback(() => setCurrentScale(prev => Math.min(prev * scaleStep, maxScale)), [scaleStep, maxScale]);\r\n const handleZoomOut = useCallback(() => setCurrentScale(prev => Math.max(prev / scaleStep, minScale)), [scaleStep, minScale]);\r\n const handleRefresh = useCallback(() => {\r\n setIsLoading(true);\r\n setError(null);\r\n clearTimeout(refreshTimeoutRef.current);\r\n refreshTimeoutRef.current = setTimeout(() => setIsLoading(false), refreshDelay);\r\n }, [refreshDelay]);\r\n\r\n const handleClick = useCallback(() => {\r\n if (onClick && !isLoading) onClick(template);\r\n }, [onClick, template, isLoading]);\r\n\r\n const handleDelete = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\r\n e.stopPropagation();\r\n if (onDelete && !template?.is_default) onDelete(template);\r\n }, [onDelete, template]);\r\n\r\n const handleMouseEnter = useCallback(() => setIsHovered(true), []);\r\n const handleMouseLeave = useCallback(() => setIsHovered(false), []);\r\n\r\n if (isLoading) return (\r\n <Box sx={{ width, height, borderRadius: 1, overflow: 'hidden', border: '1px solid', borderColor: 'divider' }}>\r\n <Skeleton variant=\"rectangular\" width=\"100%\" height=\"100%\" animation=\"wave\" />\r\n </Box>\r\n );\r\n\r\n if (error) return (\r\n <Box sx={{\r\n width, height, borderRadius: 1, overflow: 'hidden', border: '1px solid',\r\n borderColor: 'error.main', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n backgroundColor: 'error.light', color: 'error.contrastText'\r\n }}>\r\n Failed to load template\r\n </Box>\r\n );\r\n\r\n const isSelected = selectedTemplateId === template._id;\r\n const canZoomIn = currentScale < maxScale;\r\n const canZoomOut = currentScale > minScale;\r\n const canDelete = !template?.is_default;\r\n\r\n return (\r\n <Box\r\n ref={containerRef}\r\n sx={{ position: 'relative', width, marginInline: 'auto', display: 'inline-block' }}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n >\r\n <Box\r\n onClick={handleClick}\r\n sx={(theme) => ({\r\n width: '100%',\r\n height,\r\n marginBlock: 0,\r\n overflow: 'hidden',\r\n position: 'relative',\r\n backgroundColor: '#fff',\r\n transition: 'all 0.2s ease-in-out',\r\n '&:hover': onClick ? { boxShadow: '0 4px 16px rgba(0,0,0,0.15)', transform: 'translateY(-1px)' } : {},\r\n })}\r\n >\r\n <Box\r\n sx={{\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n justifyContent: 'center', \r\n alignItems: 'center', \r\n overflow: 'auto',\r\n backgroundColor: '#fff',\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n transform: `scale(${currentScale})`,\r\n transformOrigin: 'top left',\r\n pointerEvents: 'none',\r\n userSelect: 'none',\r\n width: containerPixelWidth,\r\n height: height,\r\n }}\r\n >\r\n <Box\r\n ref={contentRef}\r\n sx={{\r\n width: '100%',\r\n height: '100%',\r\n '& *': { maxWidth: '100% !important', boxSizing: 'border-box !important' },\r\n '& body': { margin: 0, padding: 0, overflow: 'hidden' },\r\n '& img': { maxWidth: '100% !important', height: 'auto !important' },\r\n '& table': { width: '100% !important', tableLayout: 'fixed !important' },\r\n '& *[style*=\"position: absolute\"]': { position: 'relative !important' },\r\n '& .email-container': { width: '85% !important' },\r\n }}\r\n dangerouslySetInnerHTML={{ __html: template.contents }}\r\n />\r\n </Box>\r\n </Box>\r\n\r\n {template?.is_default && (\r\n <Box sx={(theme) => ({ position: 'absolute', top: 8, left: 8, width: 12, height: 12, borderRadius: '50%', backgroundColor: theme.palette.theme.primary[800], zIndex: 3 })} />\r\n )}\r\n </Box>\r\n\r\n {template?.name && <Typography type='s3' weight='medium' color='theme.secondary.1000' align='center' sx={{ width, mt: 0.5 }}>{template?.name}</Typography>}\r\n\r\n {showControls && (\r\n <Fade in={isHovered} timeout={200}>\r\n <Box sx={{ position: 'absolute', top: -8, right: -8, display: 'flex', gap: 0.5, zIndex: 4, backgroundColor: 'rgba(255,255,255,0.95)', border: '1px solid', borderColor: 'grey.300', borderRadius: 2, padding: 0.5, boxShadow: '0 4px 12px rgba(0,0,0,0.15)', backdropFilter: 'blur(4px)' }}>\r\n <Tooltip title={`Zoom In (${Math.round(currentScale * 100)}%)`} arrow>\r\n <span><IconButton size=\"small\" onClick={handleZoomIn} disabled={!canZoomIn}><ZoomIn fontSize=\"small\" /></IconButton></span>\r\n </Tooltip>\r\n <Divider orientation=\"vertical\" flexItem />\r\n <Tooltip title={`Zoom Out (${Math.round(currentScale * 100)}%)`} arrow>\r\n <span><IconButton size=\"small\" onClick={handleZoomOut} disabled={!canZoomOut}><ZoomOut fontSize=\"small\" /></IconButton></span>\r\n </Tooltip>\r\n <Divider orientation=\"vertical\" flexItem />\r\n <Tooltip title=\"Refresh Preview\" arrow>\r\n <IconButton size=\"small\" onClick={handleRefresh}><Refresh fontSize=\"small\" /></IconButton>\r\n </Tooltip>\r\n {onDelete && <>\r\n <Divider orientation=\"vertical\" flexItem />\r\n <Tooltip title={canDelete ? \"Delete Template\" : \"Cannot delete default template\"} arrow>\r\n <span><IconButton size=\"small\" onClick={handleDelete} disabled={!canDelete}><Trash fontSize=\"small\" /></IconButton></span>\r\n </Tooltip>\r\n </>}\r\n </Box>\r\n </Fade>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default HtmlThumbnailPreviewFull;","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { \r\n DialogTitle, \r\n DialogContent, \r\n DialogActions,\r\n IconButton,\r\n Box,\r\n MenuItem\r\n} from '@mui/material';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Typography from '../../../components/typography/typography';\r\nimport Modal from '../../../components/modal/modal';\r\nimport { deleteV1TemplatesId, getV1Templates, patchV1TemplatesIdSetDefault } from '../../../api-client/api.system-feature/api';\r\nimport { getErrorMessage, getToken } from '../../../utils/common';\r\nimport Button from '../../../components/button/button';\r\n// import ModalLoader from '../../../components/loader/modal-loader';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport Select from '../../../components/select/select';\r\nimport HtmlThumbnailPreview from './html-thumbnail-preview';\r\nimport HtmlThumbnailPreviewFull from './html-thumbnail-preview-full';\r\nimport ConfirmPopUp from '../../../components/confirm-modal/confirm-modal';\r\n\r\nconst TemplateModal = ({ email, onClose, open, companies = [], templateRoutes, source = 'add' }) => {\r\n const [templates, setTemplates] = useState([]);\r\n const [selectedTemplate, setSelectedTemplate] = useState('');\r\n const [defaultTemplate, setDefaultTemplate] = useState('');\r\n const [loading, setLoding] = useState(true);\r\n const [selectedCompany, setSelectedCompany] = React.useState<number>(companies?.[0]?.id || 0);\r\n const [templateToDelete, setTemplateToDelete] = React.useState<Record<string, any> | null>(null);\r\n const [selectedTemplateForPreview, setSelectedTemplateForPreview] = useState(null);\r\n\r\n const navigate = useNavigate();\r\n\r\n const handleClose = () => {\r\n onClose();\r\n };\r\n\r\n const handleViewTemplate = () => {\r\n navigate(templateRoutes.EDIT_TEMPLATE(email._id, selectedTemplate), { \r\n state: { company_id: selectedCompany, isViewOnly: true, fromPreview: true }\r\n });\r\n };\r\n\r\n const handleTemplateSelect = (id: any) => {\r\n if (source === 'view') {\r\n const template = templates.find((t: any) => t?._id === id);\r\n setSelectedTemplateForPreview(template);\r\n setSelectedTemplate(id);\r\n handleViewTemplate();\r\n } else {\r\n setSelectedTemplate(id);\r\n }\r\n }\r\n\r\n const getTemplatesViaSubject = async () => {\r\n setLoding(true)\r\n const res = await getV1Templates({ ...getToken(), filters: `(company_id.eq=${selectedCompany}&subject_id.eq=${email._id})` })\r\n if(res?.data) {\r\n const dTemplate = res?.data?.find(t => t.is_default === true)\r\n setDefaultTemplate(dTemplate)\r\n setSelectedTemplate(dTemplate?._id)\r\n setTemplates(res?.data)\r\n }\r\n\r\n setLoding(false)\r\n }\r\n\r\n const handleDefaultTemplate = async () => {\r\n try {\r\n await patchV1TemplatesIdSetDefault({ ...getToken(), id: selectedTemplate })\r\n enqueueSnackbar('Template has been set as default');\r\n } catch (error) {\r\n const m = getErrorMessage(error?.message);\r\n enqueueSnackbar(m, { variant: 'error' });\r\n }\r\n }\r\n\r\n const handleDeleteTemplate = async () => {\r\n try {\r\n if(templateToDelete) {\r\n await deleteV1TemplatesId({ ...getToken(), id: templateToDelete?._id })\r\n enqueueSnackbar('Template has been deleted');\r\n setTemplateToDelete(null)\r\n await getTemplatesViaSubject()\r\n }\r\n } catch (error) {\r\n const m = getErrorMessage(error?.message);\r\n enqueueSnackbar(m, { variant: 'error' });\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n getTemplatesViaSubject()\r\n return () => { setLoding(true) }\r\n }, [selectedCompany])\r\n\r\n return (\r\n <div>\r\n <Modal \r\n open={open} \r\n onClose={handleClose} \r\n maxWidth=\"lg\" \r\n fullWidth\r\n aria-labelledby=\"email-template-selection\"\r\n sx={{\r\n '& .MuiDialog-paper': {\r\n height: '85vh',\r\n display: 'flex',\r\n flexDirection: 'column'\r\n }\r\n }}\r\n >\r\n\r\n {console.log(source, \"soure in modal +++++++++++++++++++++++debug\")}\r\n {/* {loading && <ModalLoader/>} */}\r\n <DialogTitle sx={{ marginBottom: '1rem', padding: '0.75rem 1rem 0.75rem 1.5rem', borderBottom: '1px solid #D3D3D4'}}>\r\n <Box display='flex' alignItems='center' gap={2}>\r\n {selectedTemplateForPreview && (\r\n <IconButton\r\n onClick={() => setSelectedTemplateForPreview(null)}\r\n size='small'\r\n sx={{ color: (theme) => theme.palette.grey[700] }}\r\n >\r\n <Typography>← Back</Typography>\r\n </IconButton>\r\n )}\r\n <Typography type='s1' weight='medium' color='theme.secondary.1000' sx={{ flex: 1, textAlign: 'center' }}> \r\n {selectedTemplateForPreview ? 'Template Preview' : (source === 'view' ? 'Template Preview' : 'Select Template')}\r\n </Typography>\r\n </Box>\r\n <Box display='flex' alignItems={'center'} gap={1} position='absolute' right='1%' top='4px'>\r\n <Typography type='s3' weight='medium' color='theme.secondary.800'> Company</Typography>\r\n <Select\r\n displayEmpty\r\n value={selectedCompany}\r\n size='small'\r\n renderValue={(value) => value ? companies.find((option) => option.value === value)?.label : 'Select Company'}\r\n // fullWidth\r\n // sx={{\r\n // bgcolor: 'white',\r\n // borderRadius: 1,\r\n // '& .MuiSelect-select': { py: 0.75 }\r\n // }}\r\n onChange={(e) => {\r\n if (e.target.value) {\r\n setSelectedCompany(e.target.value as number);\r\n }\r\n }}>\r\n {companies.map((option) => (\r\n <MenuItem key={option.value} value={option.value}>\r\n <Typography type='s3' color='theme.secondary.1000'>{option.label}</Typography>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n <IconButton\r\n aria-label=\"close\"\r\n onClick={handleClose}\r\n size='small'\r\n sx={{\r\n color: (theme) => theme.palette.grey[500],\r\n }}\r\n >\r\n <CloseIcon fontSize='small'/>\r\n </IconButton>\r\n </Box>\r\n </DialogTitle>\r\n \r\n {\r\n selectedTemplateForPreview ? (\r\n <DialogContent sx={{ display: 'flex', flexDirection: 'column', gap: 3, width: '100%', p: 3, flex: 1, overflow: 'auto', scrollbarWidth: 'none', msOverflowStyle: 'none', '&::-webkit-scrollbar': { display: 'none' } }}>\r\n {/* Main Preview */}\r\n <Box sx={{ width: '100%', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\r\n <HtmlThumbnailPreviewFull\r\n template={selectedTemplateForPreview}\r\n width={'100%'}\r\n height={600}\r\n scale={1}\r\n showControls={true}\r\n isFetching={loading}\r\n normalView={true}\r\n />\r\n </Box>\r\n </DialogContent>\r\n ) : (\r\n <DialogContent sx={{ flex: 1, overflow: 'auto', display: 'flex', flexDirection: 'column', scrollbarWidth: 'none', msOverflowStyle: 'none', '&::-webkit-scrollbar': { display: 'none' } }}>\r\n {/* <Grid container spacing={6}> */}\r\n {!templates.length && (\r\n // <Grid item xs={12} sx={{ minHeight: 350}}>\r\n <Box display='flex' alignItems='center' width='100%' height='100%' justifyContent='center'>\r\n {!loading && <Typography type='s1' weight='medium' color='theme.secondary.1000' sx={{ textAlign: 'center' }}>No templates found</Typography>}\r\n </Box>\r\n // </Grid>\r\n )}\r\n <Box sx={{ \r\n display: 'grid', \r\n gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))', \r\n gap: 2, \r\n p: 2,\r\n justifyItems: 'center',\r\n alignItems: 'center'\r\n }}>\r\n {templates.map((template, index) => (\r\n <HtmlThumbnailPreview\r\n key={template._id || index}\r\n template={template}\r\n width={300}\r\n height={200}\r\n showControls={source === 'add'}\r\n selectedTemplateId={selectedTemplate}\r\n onClick={(template: any) => {\r\n handleTemplateSelect(template._id)\r\n }}\r\n normalView={source === 'add'}\r\n isFetching={loading}\r\n onDelete={(template: any) => setTemplateToDelete(template)}\r\n />\r\n ))}\r\n </Box>\r\n </DialogContent>\r\n )}\r\n {source === 'add' && (\r\n <DialogActions sx={{ p: 2, justifyContent: 'center', borderTop: '1px solid #D3D3D4' }}>\r\n <Button\r\n onClick={() => navigate(templateRoutes.EDIT_TEMPLATE(email._id, selectedTemplate), { state: { company_id: selectedCompany } })}\r\n disabled={!selectedTemplate}\r\n >\r\n Continue\r\n </Button>\r\n <Button\r\n onClick={() => handleDefaultTemplate()}\r\n disabled={!selectedTemplate || defaultTemplate?._id === selectedTemplate}\r\n >\r\n Set to Default\r\n </Button>\r\n </DialogActions>\r\n )}\r\n </Modal>\r\n <ConfirmPopUp\r\n open={templateToDelete !== null}\r\n onClose={() => setTemplateToDelete(null)}\r\n title='Remove Template'\r\n description='Are you sure you want to delete ?'\r\n onConfirm={() => handleDeleteTemplate()}\r\n loading={loading}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport { TemplateModal };\r\nexport default TemplateModal;","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\n\r\nimport Modal from '../../../components/modal/modal';\r\nimport Typography from '../../../components/typography/typography';\r\nimport Button from '../../../components/button/button';\r\nimport Select from '../../../components/select/select';\r\n\r\nimport {\r\n\tBox,\r\n\tDialogActions,\r\n\tDialogContent,\r\n\tDialogProps,\r\n\tDialogTitle,\r\n\tIconButton,\r\n\tMenuItem\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\n\r\nimport './company-selection-modal.scss';\r\nimport { IEmail } from '../utils/types';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\ninterface CompanySelectionModalProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: (value: IEmail | null) => void;\r\n\tmodalProps?: DialogProps;\r\n\temail: IEmail;\r\n\tcompanies: Record<string, any>[];\r\n\ttemplateRoutes: Record<string, any>\r\n}\r\n\r\nconst CompanySelectionModal: React.FC<CompanySelectionModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tmodalProps,\r\n\tcompanies,\r\n\temail,\r\n\ttemplateRoutes\r\n}) => {\r\n\r\n\tconst navigate = useNavigate();\r\n\tconst [selectedCompany, setSelectedCompany] = React.useState<number>(0);\r\n\r\n\tconst handleModalClose = () => {\r\n\t\tsetIsOpen(null);\r\n\t};\r\n\r\n\tconst handleContinue = () => {\r\n\t\tif(!selectedCompany) {\r\n\t\t\tenqueueSnackbar('Please select a company', { variant: 'error' });\r\n\t\t\treturn;\r\n\t\t} else if(!email) {\r\n\t\t\tenqueueSnackbar('Something went wrong for a subject', { variant: 'error' });\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnavigate(templateRoutes.ADD_TEMPLATE(email._id), { state: { company_id: selectedCompany }})\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\topen={isOpen}\r\n\t\t\tonClose={handleModalClose}\r\n\t\t\tmaxWidth='xs'\r\n\t\t\tfullWidth\r\n\t\t\t{...modalProps}>\r\n\t\t\t<DialogTitle className='companySelectionModal--DialogTitle'>\r\n\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\r\n\t\t\t\t\tSelect Company\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<IconButton onClick={handleModalClose}>\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\t\t\t<DialogContent className='companySelectionModal--DialogContents'>\r\n\t\t\t\t<Select\r\n\t\t\t\t\tdisplayEmpty\r\n\t\t\t\t\tvalue={selectedCompany}\r\n\t\t\t\t\tsize='small'\r\n\t\t\t\t\trenderValue={(value) => value ? companies.find((option) => option.value === value)?.label : 'Select Company'}\r\n\t\t\t\t\tfullWidth\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tbgcolor: 'white',\r\n\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\t'& .MuiSelect-select': { py: 0.75 }\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\tif (e.target.value) {\r\n\t\t\t\t\t\t\tsetSelectedCompany(e.target.value as number);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t{companies.map((option) => (\r\n\t\t\t\t\t\t<MenuItem key={option.value} value={option.value}>\r\n\t\t\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>{option.label}</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Select>\r\n\t\t\t</DialogContent>\r\n\t\t\t<DialogActions className='companySelectionModal--DialogAction'>\r\n\t\t\t\t<Box display='flex' gap={1.5}>\r\n\t\t\t\t\t<Button className='companySelectionModal--DialogAction--WhiteBtn' onClick={handleModalClose}>Cancel</Button>\r\n\t\t\t\t\t<Button onClick={() => handleContinue()} disabled={!selectedCompany}>Continue</Button>\r\n\t\t\t\t</Box>\r\n\t\t\t</DialogActions>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n\r\nexport default CompanySelectionModal;\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport { useCallback, useEffect, useMemo, useState } from 'react';\r\n\r\nimport ActionBar from '../../components/action-bar/action-bar';\r\nimport viewTypes from '../../constants/action-bar';\r\nimport MaterialTable, { MaterialTableColumnProps } from '../../components/material-table/material-table';\r\nimport Typography from '../../components/typography/typography';\r\nimport Fallback from '../../components/fallback/fallback';\r\nimport Menu from '../../components/menu/menu';\r\nimport Footer from '../../components/footer/footer';\r\nimport useDeepMemo from '../../hooks/use-deep-memo';\r\nimport { PageState } from '../../contexts/page-context';\r\nimport { usePages } from '../../hooks/use-pages';\r\nimport { transformTableColumns } from '../../utils/common-utility';\r\nimport { appendConditionSafely, defaultCurrencySymbol, getToken } from '../../utils/common';\r\nimport logo from '../../assets/images';\r\nimport { IPaginationModel } from '../../@types/pagination-model';\r\nimport { fetchApi } from '../../utils/api';\r\n\r\nimport { MenuItem } from '@mui/material';\r\n\r\n// import GridCard from './grid-view/grid-view';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { enqueueSnackbar } from 'notistack';\r\n\r\nimport { templateRoutes } from './utils/common';\r\nimport { IEmail, ITemplateProps, Pagination } from './utils/types';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\nimport { usePermissions } from '../../hooks/use-permissions';\r\nimport { getV1Subjects } from '../../api-client/api.system-feature/api';\r\nimport TemplateModal from './template-modal/template-modal';\r\nimport CompanySelectionModal from './company-selection-modal/company-selection-modal';\r\n\r\nimport './templates.scss';\r\n\r\n\r\ninterface ActionData {\r\n\tlabel: string;\r\n\tposition: number;\r\n}\r\n\r\nconst Templates: React.FC<ITemplateProps> = ({ type, module, modulePath }) => {\r\n\tconst { t } = useTranslation();\r\n\tconst {\r\n\t\tactivePage: aPage,\r\n\t\tupdatePageInfo,\r\n\t\tschemaFields,\r\n\t\tgeneratedColumns,\r\n\t\tupdateGeneratedColumns,\r\n\t\t// error: pageError\r\n\t} = usePages();\r\n\tconst activePage = useDeepMemo<PageState>(aPage);\r\n\t/* LOCAL STATES */\r\n\tconst [actionAnchorEl, setActionAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst viewEmails = localStorage.getItem('email-subjects-view');\r\n\tconst [actionBarData, setActionBarData] = useState<ActionData[]>(viewEmails ? JSON.parse(viewEmails) : [{ label: 'Table', position: 0 }]);\r\n\r\n\tconst [actionBarActiveTab, setActionBarActiveTab] = useState<string>(viewTypes.TABLE);\r\n\tconst [paginationModel, setPaginationModel] = useState<Pagination>({ pageNo: 1, limit: 10, totalCount: 0, skip: 0 });\r\n\tconst [rows, setRows] = useState<any[]>([]);\r\n\tconst [isFetching, setIsFetching] = useState<boolean>(false);\r\n\tconst [selectedRow, setSelectedRow] = useState([]);\r\n\tconst [showTemplateModal, setShowTemplateModal] = useState<IEmail | null>(null);\r\n\tconst [templateModalSource, setTemplateModalSource] = useState<'view' | 'add'>('add');\r\n\tconst [showCompanySelectionModal, setShowCompanySelectionModal] = useState<IEmail | null>(null);\r\n\tconst [companies, setCompanies] = useState<Record<string, any>[]>([]);\r\n\t/* VARS */\r\n\tconst navigate = useNavigate();\r\n\tconst { pageNo, limit: pLimit, totalCount } = paginationModel;\r\n\tconst limit = activePage.page_size || pLimit;\r\n\tconst total = limit ? Math.ceil(totalCount / limit) : 0;\r\n\tconst skip = limit * (pageNo - 1);\r\n\tconst permissions = usePermissions();\r\n\tconst ROUTES = templateRoutes(modulePath, type);\r\n\r\n\tconst SubjectPermissions = permissions?.Subjects || {};\r\n\tconst ConditionsImport = permissions?.RentalTerms?.ConditionsImport || {};\r\n\r\n\tconst {\r\n\t\tcanAdd = false,\r\n\t\tcanEdit = false,\r\n\t\tcanDelete = false,\r\n\t} = SubjectPermissions;\r\n\r\n\tconst { canAdd: canImport = false } = ConditionsImport;\r\n\r\n\tconst handleNewEmail = (email) => {\r\n\t\tif (!companies?.length) {\r\n\t\t\tenqueueSnackbar('Please add a company first', { variant: 'error' })\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tif (companies?.length > 1) {\r\n\t\t\tsetShowCompanySelectionModal(email)\r\n\t\t} else {\r\n\t\t\tnavigate(ROUTES.ADD_TEMPLATE(email._id), { state: { company_id: companies[0]?.id || companies[0]?.value } })\r\n\t\t}\r\n\t};\r\n\r\n\tconst rowActionMenu = [\r\n\t\t{\r\n\t\t\tlabel: 'New Template',\r\n\t\t\thandleAction: (email: IEmail) => handleNewEmail(email),\r\n\t\t\tdisabled: (row: any) => !canEdit\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'Add From Template',\r\n\t\t\thandleAction: (email: IEmail) => {\r\n setTemplateModalSource('add'); \r\n setShowTemplateModal(email); },\r\n\t\t\tdisabled: (row: any) => !canAdd\r\n\t\t}\r\n\t];\r\n\r\n\t/* LOCAL FUNCTIONS */\r\n\tconst getEmails = useCallback(\r\n\t\tasync () => {\r\n\t\t\tconst { sort, filterQueryString, search } = activePage;\r\n\t\t\tconst searchFiters = search ? `&subject.like=${search}` : '';\r\n\t\t\tconst types = [];\r\n\t\t\ttypes.push(type)\r\n\t\t\tif (type == \"email\") {\r\n\t\t\t\ttypes.push(\"approval_email\")\r\n\t\t\t}\r\n\t\t\tconst uFilters = appendConditionSafely(filterQueryString, `&type.in=[${types.join(\",\")}]&module.eq=${module}${searchFiters}`);\r\n\r\n\t\t\tconst response = await getV1Subjects({\r\n\t\t\t\t...getToken(),\r\n\t\t\t\tskip,\r\n\t\t\t\tlimit,\r\n\t\t\t\t// search,\r\n\t\t\t\t...(sort && { order: `${sort.id}:${sort.desc ? -1 : 1}` }),\r\n\t\t\t\t...(uFilters && uFilters !== '()' && { filters: uFilters })\r\n\t\t\t});\r\n\r\n\t\t\tsetRows(response?.data || []);\r\n\t\t\tsetPaginationModel({ ...paginationModel, ...(response?.pagination || {}) });\r\n\t\t},\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t[\r\n\t\t\tlimit,\r\n\t\t\tskip,\r\n\t\t\tactivePage?.search,\r\n\t\t\tactivePage?.filterQueryString,\r\n\t\t\tactivePage?.sort\r\n\t\t]\r\n\t);\r\n\r\n\tconst getCopmanies = async () => {\r\n\t\tconst companiesArr = await fetchApi({ apiKey: 'company', filters: { skip: 0, limit: 100, order: \"id:1\" } });\r\n\t\tsetCompanies(companiesArr?.data || []);\r\n\t}\r\n\r\n\tconst tableRows = useMemo(() => rows || [], [rows]);\r\n\r\n\tconst tableColumns = useMemo(\r\n\t\t() =>\r\n\t\t\ttransformTableColumns({\r\n\t\t\t\tcolumns: generatedColumns.columns,\r\n\t\t\t\tcurrencySymbol: (row) =>\r\n\t\t\t\t\trow.original?.currency_data?.symbol || defaultCurrencySymbol(),\r\n\t\t\t\ttranslationFn: t,\r\n\t\t\t\tenableFooter: true,\r\n\t\t\t\t// redirectionLink: ROUTES.VIEW,\r\n\t\t\t\t// redirectionLinkState: (row) => ({ termsAndCondition: row.original }),\r\n\t\t\t\trows: tableRows,\r\n\t\t\t\tstatusClasses: ``,\r\n\t\t\t}),\r\n\t\t[tableRows, t, generatedColumns.columns]\r\n\t);\r\n\r\n\tconst handlePaginationModel = (model: IPaginationModel) => {\r\n\t\tif (activePage.page_size != model?.limit) {\r\n\t\t\tupdatePageInfo({ page_size: model.limit });\r\n\t\t}\r\n\t\tsetPaginationModel(model);\r\n\t};\r\n\r\n\tconst cleanUp = () => {\r\n\t\tconst pModel = { pageNo: 1, limit: 10, totalCount: 0 };\r\n\t\tsetPaginationModel(pModel);\r\n\t};\r\n\r\n\t/* USE EFFECTS */\r\n\tuseEffect(() => {\r\n\t\tgetEmails();\r\n\t}, [getEmails]);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tgetCopmanies();\r\n\t\treturn cleanUp;\r\n\t}, []);\r\n\tuseEffect(() => {\r\n\t\tif (actionBarData?.length) {\r\n\t\t\tlocalStorage.setItem('email-subjects-view', JSON.stringify(actionBarData));\r\n\t\t}\r\n\t}, [actionBarData]);\r\n\r\n\t/* JSX STRUCTURE STARTED */\r\n\treturn (\r\n\t\t<section className='templates'>\r\n\t\t\t<ActionBar\r\n\t\t\t\ttitle={type === 'email' ? 'Emails' : 'PDFs'}\r\n\t\t\t\tdata={actionBarData}\r\n\t\t\t\tsetData={setActionBarData}\r\n\t\t\t\tactive={actionBarActiveTab}\r\n\t\t\t\tsetActive={setActionBarActiveTab}\r\n\t\t\t\thandleSearch={(search) => {\r\n\t\t\t\t\tupdatePageInfo({ search });\r\n\t\t\t\t\tsetPaginationModel({ ...paginationModel, pageNo: 1 });\r\n\t\t\t\t}}\r\n\t\t\t\tdisabledViews={['Kanban', 'Calendar', 'Gantt', viewTypes.GRID]}\r\n\t\t\t\tfields={schemaFields}\r\n\t\t\t\tselectedIds={selectedRow}\r\n\t\t\t\tbutton={false}\r\n\t\t\t/>\r\n\t\t\t{actionBarActiveTab === viewTypes.TABLE && (\r\n\t\t\t\t<MaterialTable\r\n\t\t\t\t\trows={tableRows || []}\r\n\t\t\t\t\tcolumns={tableColumns}\r\n\t\t\t\t\tpaginationModel={paginationModel}\r\n\t\t\t\t\ttotalPages={total}\r\n\t\t\t\t\tcolumnOrder={['mrt-row-select', ...generatedColumns.orderKeys]}\r\n\t\t\t\t\tstates={{ isLoading: isFetching }}\r\n\t\t\t\t\tonSortingChange={(sort) => updatePageInfo({ sort })}\r\n\t\t\t\t\tenableColumnDragging={false}\r\n\t\t\t\t\tenableEditing={false}\r\n\t\t\t\t\tonSelectRow={(r) =>\r\n\t\t\t\t\t\tsetSelectedRow(r.map((ele) => ele.original.id))\r\n\t\t\t\t\t}\r\n\t\t\t\t\tenableAddCustomField={false}\r\n\t\t\t\t\trowActionMenu={rowActionMenu}\r\n\t\t\t\t\tisResetRow={false}\r\n\t\t\t\t\thandleColumnOrdering={(colOrder) =>\r\n\t\t\t\t\t\tupdateGeneratedColumns({ orderKeys: colOrder.slice(1) })\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonColumnVisibility={(columns: MaterialTableColumnProps[]) =>\r\n\t\t\t\t\t\tupdateGeneratedColumns({ columns: columns })\r\n\t\t\t\t\t}\r\n\t\t\t\t\tshowPreview={true}\r\n\t\t\t\t\t\t\thandlePreview={(item) => {\r\n\t\t\t\t\t\t\t\t\tsetTemplateModalSource('view');\r\n\t\t\t\t\t\t\t\t\tsetShowTemplateModal(item);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{actionBarActiveTab === viewTypes.GRID && (\r\n\t\t\t\t<GridCard\r\n\t\t\t\t\tdata={tableRows}\r\n\t\t\t\t\trowActionMenu={rowActionMenu}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\r\n\t\t\t{!actionBarActiveTab && (\r\n\t\t\t\t<Fallback\r\n\t\t\t\t\theading={t('rental.settings.termsAndConditions.title')}\r\n\t\t\t\t\tsubHeading='No data available'\r\n\t\t\t\t\ticon={<img src={logo.invoiceFallback} />}>\r\n\t\t\t\t</Fallback>\r\n\t\t\t)}\r\n\r\n\t\t\t<Footer\r\n\t\t\t\ttotal={total}\r\n\t\t\t\tpaginationModel={{\r\n\t\t\t\t\t...paginationModel,\r\n\t\t\t\t\tlimit: activePage.page_size\r\n\t\t\t\t}}\r\n\t\t\t\thandlePaginationModel={handlePaginationModel}\r\n\t\t\t\tresource=''\r\n\t\t\t/>\r\n\r\n\t\t\t{/* Action Menu */}\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={actionAnchorEl}\r\n\t\t\t\topen={Boolean(actionAnchorEl)}\r\n\t\t\t\tonClose={() => setActionAnchorEl(null)}>\r\n\t\t\t\t<MenuItem>\r\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>\r\n\t\t\t\t\t\t{t('common.upload')}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t</MenuItem>\r\n\t\t\t\t<MenuItem>\r\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>\r\n\t\t\t\t\t\t{t('common.print')}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t</MenuItem>\r\n\t\t\t</Menu>\r\n\t\t\t{showTemplateModal && (\r\n\t\t\t\t<TemplateModal\r\n\t\t\t\t\temail={showTemplateModal}\r\n\t\t\t\t\tonClose={() => setShowTemplateModal(null)}\r\n\t\t\t\t\topen={showTemplateModal !== null}\r\n\t\t\t\t\tcompanies={companies}\r\n\t\t\t\t\ttemplateRoutes={ROUTES}\r\n\t\t\t\t\tsource={templateModalSource}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{showCompanySelectionModal && (\r\n\t\t\t\t<CompanySelectionModal\r\n\t\t\t\t\tisOpen={showCompanySelectionModal !== null}\r\n\t\t\t\t\tsetIsOpen={setShowCompanySelectionModal}\r\n\t\t\t\t\tcompanies={companies}\r\n\t\t\t\t\temail={showCompanySelectionModal}\r\n\t\t\t\t\ttemplateRoutes={ROUTES}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</section>\r\n\t);\r\n};\r\n\r\nexport default Templates;\r\n","import React from \"react\";\r\nimport AddTemplate from \"./add-template/add-template\";\r\nimport Templates from \"./templates\";\r\nimport { TEMPLATE_EDITOR_PATHS } from \"./utils/constant\";\r\n\r\nexport const templateEditorRoutes = (modulePath: string, module: string) => [\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_LIST('email')}`,\r\n\t\telement: <Templates type=\"email\" module={module} modulePath={modulePath}/>\r\n\t},\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_ADD('email')}`,\r\n\t\telement: <AddTemplate modulePath={modulePath} type=\"email\" module={module}/>\r\n\t},\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_EDIT('email')}`,\r\n\t\telement: <AddTemplate modulePath={modulePath} type=\"email\" module={module}/>\r\n\t},\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_LIST('pdf')}`,\r\n\t\telement: <Templates module={module} type=\"pdf\" modulePath={modulePath}/>\r\n\t},\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_ADD('pdf')}`,\r\n\t\telement: <AddTemplate modulePath={modulePath} type=\"pdf\" module={module}/>\r\n\t},\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_EDIT('pdf')}`,\r\n\t\telement: <AddTemplate modulePath={modulePath} type=\"pdf\" module={module}/>\r\n\t}\r\n]","import { MaterialTableColumnProps } from \"../../../components/material-table/material-table\";\r\n\r\nexport const textOptions = [\r\n { label: 'Heading 1', value: 'heading' },\r\n { label: 'Heading 2', value: 'heading-2' },\r\n { label: 'Heading 3', value: 'heading-3' },\r\n { label: 'Heading 4', value: 'heading-4' },\r\n { label: 'Body', value: 'text' },\r\n { label: 'Text Block', value: 'text-block' },\r\n]\r\n\r\nexport const emailColumns:MaterialTableColumnProps[] = [\r\n {\r\n header: 'ID',\r\n accessorKey: '_id',\r\n visible: true,\r\n type: 'string'\r\n },\r\n {\r\n header: 'Date',\r\n accessorKey: 'created_at',\r\n visible: true,\r\n type: 'date'\r\n },\r\n {\r\n header: 'Subject',\r\n accessorKey: 'subject',\r\n visible: true,\r\n type: 'string'\r\n },\r\n]"],"names":["aggregationFns","data","column","useEffect","jsxs","Fragment","jsx","Typography","Menu","MenuItem","Component","useAuth","Loader","Outlet","Navigate","Pathname","createAsyncThunk","rows","columns","columnOrder","createSlice","initialState","state","useAppDispatch","useAppSelector","useMemo","DefaultAggregation","Button","MaterialTable","Footer","styled","Grid","images","Box","Yup","useForm","yupResolver","useState","useLocation","useNavigate","getApiConfig","DynamicInput","Eye","EyeOff","Toast","GridColumnIcon","LoginContainer","validationSchema","LeftGrid","RightGrid","FlexBox","useSearchParams","Paragraph","Hashtag","ArrowCircleDown","Calendar","PaperClip","Link","Email","Phone","DollarCircle","Clock","Location","CheckboxSquare","Image","LinkHorizontal","InfoCircle","ToggleSwitch","RadioButton","Select","Stack","COLUMN_PER_ROW_OPTIONS","fields","element","useRef","formatText","useCallback","_","elementJSON","FormControl","TextField","Slider","FormControlLabel","Checkbox","Add","Modal","DialogTitle","IconButton","Close","DialogContent","DialogActions","enqueueSnackbar","Trash","_a","SECTION_TYPES","CloseIcon","generateRandomId","RadioGroup","Radio","memo","DynamicPhone","DynamicSelect","DynamicDate","DynamicTime","DynamicMedia","DynamicInfo","DynamicToggleButton","DynamicRadioButton","DynamicCheckBox","DynamicTable","DynamicElementHOC","PathnameAccounting","PathnameInventory","PathnameManufacturing","PathnamePurchase","PathnameCrm","PathnameRental","PathnameUsers","PathnameHrms","text","module","section","tabsData","formBuilderDeConversion","useTranslation","useFieldArray","createElement","formWithMembers","id","elementPerColumn","formBuilderConversion","patchFormDataById","getErrorMessage","formatLabel","getFormDataById","getFieldsByFormId","ErpLoader","DndProvider","HTML5Backend","FormHeader","TabBar","DynamicSectionHOC","FormParser","InputAdornment","Remove","_interopRequireDefault","require$$0","default_1","_createSvgIcon","require$$1","_jsxRuntime","require$$2","identifier","TEMPLATE_EDITOR_PATHS","initialStyles","AppBar","Toolbar","RouterLink","ZoomOut","ZoomIn","Divider","ZoomOutMap","Edit","CodeOutlinedIcon","CustomEditor","lazy","Suspense","extractStyles","useDraggable","useDroppable","Skeleton","Paper","DragIndicatorIcon","Save","Fade","Chip","SplitIcon","StyledToggleButtonGroup","ToggleButtonGroup","toggleButtonGroupClasses","Tooltip","ToggleButton","FormatAlignLeftIcon","FormatAlignCenterIcon","FormatAlignRightIcon","FormatAlignJustifyIcon","TextControls","debounce","FormatBoldIcon","FormatItalicIcon","FormatUnderlinedIcon","ColorLensIcon","ColorPickerInput","Android12Switch","Switch","styles","MuiAccordion","tableData","table","_b","_c","_d","Tabs","Tab","RefreshIcon","AddIcon","SearchableSelect","row","Alert","AccordionSummary","ExpandMoreIcon","AccordionDetails","MergeIcon","Table","TableHead","TableRow","TableCell","TableBody","Dialog","ListItem","ListItemIcon","ListItemText","file","uploadFiles","getToken","postV1Drive","useDropzone","FileCode","CircularProgress","TextIcon","Heading","ImageIcon","image","TableIcon","SignatureIcon","QrCodeIcon","BarcodeIcon","getV1Drive","error","SearchBar","Accordion","EditorSection","CheckIcon","Container","templateRoutes","patchV1TemplatesId","postV1Templates","useParams","type","uuidv4","getV1SubjectsId","getV1FormBuilderRelationalSchemaFieldsName","relation_table","getV1TemplatesId","getV1TemplateHeaderFooterCompanyIdHeaderFooter","headerSections","footerSections","patchV1TemplateHeaderFooterId","postV1TemplateHeaderFooter","DndContext","pointerWithin","Refresh","email","getV1Templates","patchV1TemplatesIdSetDefault","deleteV1TemplatesId","template","ConfirmPopUp","usePages","useDeepMemo","viewTypes","usePermissions","appendConditionSafely","getV1Subjects","fetchApi","transformTableColumns","defaultCurrencySymbol","ActionBar","Fallback","logo"],"mappings":"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,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN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","x_google_ignoreList":[33,37,38,43,44,45,46,47,48,49,56,57,63]}
|
|
1
|
+
{"version":3,"file":"default-data-Mq-52KPT.js","sources":["../../src/components/material-table/components/number-aggregation.tsx","../../src/views/404.tsx","../../src/views/privateRoute.tsx","../../src/views/afterAuth/page-view/redux/actionCreator.ts","../../src/views/afterAuth/page-view/utils/default-data.ts","../../src/views/afterAuth/page-view/utils/local-data.ts","../../src/views/afterAuth/page-view/redux/state.ts","../../src/views/afterAuth/page-view/redux/reducer.ts","../../src/views/afterAuth/page-view/page-view.tsx","../../src/views/beforeAuth/change-password/change-password.tsx","../../src/views/beforeAuth/components/activity-tag-data/activity-tag-data.ts","../../src/views/beforeAuth/components/calendar-data/calendar-data.ts","../../src/views/beforeAuth/components/grid-data/grid-data.ts","../../src/views/beforeAuth/components/kanbann-content/kanbann-raw.ts","../../src/views/beforeAuth/components/list-content/column-raw.tsx","../../src/views/beforeAuth/components/list-content/list-data.tsx","../../src/views/beforeAuth/components/multiline-data/multiline-data.ts","../../src/views/beforeAuth/components/tabs-data/tabs-data.ts","../../src/views/beforeAuth/components/user-dropdown-data/user-dropdown-data.ts","../../src/views/beforeAuth/forgot-password/forgot-password.tsx","../../src/views/beforeAuth/landing/landing.tsx","../../src/views/beforeAuth/reset-password/reset-password.tsx","../../src/views/form-builder/field_properties.ts","../../src/views/form-builder/element-edit-forms/field-select.tsx","../../src/views/form-builder/element-edit-forms/text.tsx","../../src/views/form-builder/element-edit-forms/select.tsx","../../src/views/form-builder/element-edit-forms/section.tsx","../../src/views/form-builder/element-edit-forms/checkbox.tsx","../../src/views/form-builder/element-edit-forms/table-form.tsx","../../src/views/form-builder/form-fields.tsx","../../src/views/form-builder/utils/common.ts","../../src/views/form-builder/custom-form.tsx","../../src/views/form-builder/element-edit-forms/column-width.tsx","../../node_modules/@mui/icons-material/CodeOutlined.js","../../src/views/template-editor/services/CSSScopingService.ts","../../src/views/template-editor/utils/common.ts","../../src/views/template-editor/components/EditorHeader.tsx","../../node_modules/@mui/icons-material/DragIndicator.js","../../node_modules/@mui/icons-material/CallSplit.js","../../src/views/template-editor/edit-section-modal/edit-section-modal.tsx","../../src/views/template-editor/utils/style-extractor.ts","../../src/views/template-editor/hooks/useDebouncedUpdate.ts","../../src/views/template-editor/components/EditorSection.tsx","../../node_modules/@mui/icons-material/FormatBold.js","../../node_modules/@mui/icons-material/FormatItalic.js","../../node_modules/@mui/icons-material/FormatUnderlined.js","../../node_modules/@mui/icons-material/FormatAlignLeft.js","../../node_modules/@mui/icons-material/FormatAlignCenter.js","../../node_modules/@mui/icons-material/FormatAlignRight.js","../../node_modules/@mui/icons-material/FormatAlignJustify.js","../../src/views/template-editor/components/controllers/AlignmentControl.tsx","../../src/views/template-editor/components/controllers/TextControls.tsx","../../src/views/template-editor/components/controllers/ButtonControls.tsx","../../src/views/template-editor/components/controllers/border-control.tsx","../../src/views/template-editor/components/controllers/ImageControls.tsx","../../src/views/template-editor/components/controllers/DividerControls.tsx","../../node_modules/@mui/icons-material/Refresh.js","../../node_modules/@mui/icons-material/MergeType.js","../../src/views/template-editor/components/controllers/TableControls.tsx","../../src/views/template-editor/components/controllers/SignatureControls.tsx","../../src/views/template-editor/components/controllers/CodeControls.tsx","../../src/views/template-editor/components/SectionFormatPanel.tsx","../../src/views/template-editor/components/EditorSidebar.tsx","../../node_modules/@mui/icons-material/Check.js","../../src/views/template-editor/components/EditorCanvas.tsx","../../src/views/template-editor/template-name-modal/template-name-modal.tsx","../../src/views/template-editor/components/SectionFlowEditor.tsx","../../src/views/template-editor/add-template/add-template.tsx","../../src/views/template-editor/template-modal/html-thumbnail-preview.tsx","../../src/views/template-editor/template-modal/html-thumbnail-preview-full.tsx","../../src/views/template-editor/template-modal/template-modal.tsx","../../src/views/template-editor/company-selection-modal/company-selection-modal.tsx","../../src/views/template-editor/templates.tsx","../../src/views/template-editor/routes.tsx","../../src/views/template-editor/utils/default-data.ts"],"sourcesContent":["import React, { useEffect } from \"react\";\r\nimport { aggregationFns } from \"../aggregation-fns\";\r\nimport Typography from \"../../typography/typography\";\r\nimport { MenuItem } from \"@mui/material\";\r\nimport Menu from \"../../menu/menu\";\r\nimport { MRT_RowData } from \"material-react-table\";\r\n\r\ntype aggregationType =\r\n | \"none\"\r\n | \"avg\"\r\n | \"min\"\r\n | \"max\"\r\n | \"count_empty\"\r\n | \"count_full\"\r\n | \"sum\"\r\n | \"percentage_empty\"\r\n | \"percentage_full\";\r\n\r\ninterface IAggregation {\r\n label: string;\r\n value: aggregationType;\r\n}\r\n\r\nconst allAggregations: IAggregation[] = [\r\n {\r\n label: \"Average\",\r\n value: \"avg\",\r\n },\r\n {\r\n label: \"Sum\",\r\n value: \"sum\",\r\n },\r\n {\r\n label: \"Min\",\r\n value: \"min\",\r\n },\r\n {\r\n label: \"Max\",\r\n value: \"max\",\r\n },\r\n {\r\n label: \"Count Empty\",\r\n value: \"count_empty\",\r\n },\r\n {\r\n label: \"Count Full\",\r\n value: \"count_full\",\r\n },\r\n {\r\n label: \"Percentage Full\",\r\n value: \"percentage_full\",\r\n },\r\n {\r\n label: \"Percentage Empty\",\r\n value: \"percentage_empty\",\r\n },\r\n {\r\n label: \"None\",\r\n value: \"none\",\r\n },\r\n];\r\n\r\nconst nonNumberAggregations: IAggregation[] = [\r\n {\r\n label: \"Count Empty\",\r\n value: \"count_empty\",\r\n },\r\n {\r\n label: \"Count Full\",\r\n value: \"count_full\",\r\n },\r\n {\r\n label: \"Percentage Full\",\r\n value: \"percentage_full\",\r\n },\r\n {\r\n label: \"Percentage Empty\",\r\n value: \"percentage_empty\",\r\n },\r\n {\r\n label: \"None\",\r\n value: \"none\",\r\n },\r\n];\r\n\r\nconst aggregationFnsLookup = {\r\n avg: aggregationFns.average,\r\n sum: aggregationFns.sum,\r\n max: aggregationFns.max,\r\n count_empty: aggregationFns.countEmpty,\r\n count_full: aggregationFns.countFull,\r\n percentage_empty: aggregationFns.percentageEmpty,\r\n percentage_full: aggregationFns.percentageFull,\r\n min: aggregationFns.min,\r\n none: aggregationFns.none,\r\n};\r\n\r\ninterface INumberAggregation {\r\n data: MRT_RowData[];\r\n column: string;\r\n type?: string;\r\n}\r\n\r\nconst NumberAggregation = ({ data, column, type }: INumberAggregation) => {\r\n const [selectedType, setSelectedType] =\r\n React.useState<aggregationType>(\"none\");\r\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\r\n const [calculatedValue, setCalculatedValue] = React.useState<string | null>();\r\n const open = Boolean(anchorEl);\r\n\r\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleAggregationType = (val: aggregationType) => {\r\n setSelectedType(val);\r\n handleClose();\r\n };\r\n\r\n useEffect(() => {\r\n const func = aggregationFnsLookup[selectedType];\r\n setCalculatedValue(func(data, column));\r\n }, [selectedType, column, data]);\r\n\r\n const aggregations =\r\n type === \"number\" ? allAggregations : nonNumberAggregations;\r\n\r\n return (\r\n <>\r\n <Typography\r\n onClick={handleClick}\r\n sx={{ cursor: \"pointer\" }}\r\n type=\"s4\"\r\n weight=\"normal\"\r\n color={calculatedValue ? \"theme.secondary.1000\" : \"theme.secondary.500\"}\r\n >\r\n {calculatedValue || \"+ Add Calculation\"}\r\n </Typography>\r\n <Menu\r\n id=\"basic-menu\"\r\n anchorEl={anchorEl}\r\n open={open}\r\n onClose={handleClose}\r\n >\r\n {aggregations?.map((aggr) => (\r\n <MenuItem\r\n key={aggr.value}\r\n selected={selectedType == aggr?.value}\r\n onClick={() => handleAggregationType(aggr?.value)}\r\n >\r\n <Typography color=\"theme.secondary.1000\" type=\"s4\">\r\n {aggr?.label}\r\n </Typography>\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </>\r\n );\r\n};\r\n\r\nexport { NumberAggregation };\r\nexport default NumberAggregation;\r\n","import { Component } from \"react\";\r\n\r\nclass NotFound extends Component {\r\n componentDidMount() {\r\n setTimeout(() => {\r\n // this.props.history.push('/');\r\n }, 2000);\r\n }\r\n\r\n render() {\r\n return (\r\n <div\r\n style={{\r\n textAlign: \"center\",\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n transform: \"translate(-50%, -50%)\",\r\n }}\r\n >\r\n <strong>\r\n <p>404</p>\r\n </strong>\r\n <hr />\r\n <p>Not Found</p>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default NotFound;\r\n","import React from \"react\";\r\nimport { Navigate, Outlet } from \"react-router-dom\";\r\n\r\nimport { Pathname } from \"../constants/pathnames/pathname\";\r\nimport { useAuth } from \"../hooks/useAuth\";\r\nimport Loader from \"../components/loader\";\r\n\r\nexport const PrivateRoute = () => {\r\n const { user, loading } = useAuth();\r\n\r\n return loading ? (\r\n <Loader />\r\n ) : user ? (\r\n <Outlet />\r\n ) : (\r\n <Navigate to={Pathname.LOGIN} />\r\n );\r\n};\r\n\r\nexport default PrivateRoute;\r\n","import { createAsyncThunk } from \"@reduxjs/toolkit\";\r\n\r\nexport const fetchPage = createAsyncThunk(\r\n \"pageView/fetchPage\",\r\n (pageId: number, { getState }) => {\r\n const { pages }: any = getState();\r\n const { data } = pages.pages.find((p: any) => p?.value === pageId);\r\n return data;\r\n },\r\n);\r\n","const rows = [\r\n {\r\n name: \"John\",\r\n age: 30,\r\n gender: \"Male\",\r\n company: \"NASA\",\r\n location: \"USA\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n];\r\n\r\nconst columns = [\r\n {\r\n header: \"Name\",\r\n type: \"string\",\r\n accessorKey: \"name\",\r\n },\r\n {\r\n type: \"number\",\r\n header: \"Age\",\r\n accessorKey: \"age\",\r\n },\r\n {\r\n header: \"Gender\",\r\n type: \"string\",\r\n accessorKey: \"gender\",\r\n },\r\n {\r\n header: \"Company\",\r\n type: \"string\",\r\n accessorKey: \"company\",\r\n },\r\n {\r\n header: \"Location\",\r\n type: \"string\",\r\n accessorKey: \"location\", //simple recommended way to define a column\r\n },\r\n {\r\n header: \"Price\",\r\n type: \"number\",\r\n accessorKey: \"price\",\r\n },\r\n];\r\n\r\nconst columnOrder = [\"name\", \"age\", \"gender\", \"company\", \"location\", \"price\"];\r\n\r\nexport const defaultData = { rows, columns, columnOrder };\r\n","const rows = [\r\n {\r\n name: \"John\",\r\n age: 30,\r\n gender: \"Male\",\r\n company: \"NASA\",\r\n location: \"USA\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n {\r\n name: \"Sara\",\r\n age: 35,\r\n gender: \"Female\",\r\n company: \"SpaceX\",\r\n location: \"Russia\",\r\n price: 10000,\r\n },\r\n];\r\n\r\nconst columns = [\r\n {\r\n type: \"number\",\r\n header: \"Age\",\r\n accessorKey: \"age\",\r\n },\r\n {\r\n header: \"Gender\",\r\n type: \"string\",\r\n accessorKey: \"gender\",\r\n },\r\n {\r\n header: \"Company\",\r\n type: \"string\",\r\n accessorKey: \"company\",\r\n },\r\n {\r\n header: \"Name\",\r\n type: \"string\",\r\n accessorKey: \"name\",\r\n },\r\n {\r\n header: \"Location\",\r\n type: \"string\",\r\n accessorKey: \"location\", //simple recommended way to define a column\r\n },\r\n {\r\n header: \"Price\",\r\n type: \"number\",\r\n accessorKey: \"price\",\r\n },\r\n];\r\n\r\nconst columnOrder = [\"age\", \"gender\", \"company\", \"name\", \"location\", \"price\"];\r\n\r\nexport const local = { rows, columns, columnOrder };\r\n","import { defaultData } from \"../utils/default-data\";\r\nimport { local } from \"../utils/local-data\";\r\n\r\nexport const state = {\r\n currentPage: 1,\r\n rows: [],\r\n columns: [],\r\n columnOrder: [],\r\n loading: true,\r\n error: \"\",\r\n pages: [\r\n {\r\n name: \"Default\",\r\n _id: 1,\r\n data: defaultData,\r\n },\r\n {\r\n name: \"Local\",\r\n _id: 2,\r\n data: local,\r\n },\r\n ],\r\n paginationModel: {\r\n pageNo: 1,\r\n limit: 10,\r\n },\r\n};\r\n\r\nexport default state;\r\n","import { createSlice } from \"@reduxjs/toolkit\";\r\nimport initialState from \"./state\";\r\n\r\nimport { fetchPage } from \"./actionCreator\";\r\n\r\nexport const pageViewSlice = createSlice({\r\n name: \"pageView\",\r\n initialState,\r\n reducers: {\r\n changeCurrentPage(state, action) {\r\n state.currentPage = action.payload;\r\n },\r\n setPages(state, action) {\r\n state.pages = action.payload;\r\n },\r\n setPaginationModel(state, action) {\r\n state.paginationModel = action.payload;\r\n },\r\n setColumnOrder(state, action) {\r\n state.columnOrder = action.payload;\r\n },\r\n setRowData(state, { payload }) {\r\n const rows = JSON.parse(JSON.stringify(state.rows));\r\n const row = rows[payload.rowId];\r\n row[payload.columnId] = payload.value;\r\n state.rows = rows;\r\n },\r\n },\r\n extraReducers: (builder) => {\r\n builder.addCase(fetchPage.pending, (state) => {\r\n state.loading = true;\r\n });\r\n builder.addCase(fetchPage.fulfilled, (state, action) => {\r\n state.loading = false;\r\n state.error = \"\";\r\n state.rows = action.payload.rows;\r\n state.columns = action.payload.columns;\r\n state.columnOrder = action.payload.columnOrder;\r\n });\r\n builder.addCase(fetchPage.rejected, (state) => {\r\n state.loading = false;\r\n state.rows = [];\r\n state.columns = [];\r\n state.error = \"Unable to get data\";\r\n });\r\n },\r\n});\r\n\r\nconst {\r\n changeCurrentPage: pageViewChangeCurrentPage,\r\n setPages: setPageViewPages,\r\n setPaginationModel: setPageViewPaginationModel,\r\n setColumnOrder,\r\n setRowData,\r\n} = pageViewSlice.actions;\r\n\r\nexport {\r\n pageViewChangeCurrentPage,\r\n setPageViewPages,\r\n setPageViewPaginationModel,\r\n setColumnOrder,\r\n setRowData,\r\n};\r\n\r\nexport default pageViewSlice.reducer;\r\n","import { useEffect, useMemo } from \"react\";\r\nimport Footer from \"../../../components/footer/footer\";\r\nimport MaterialTable from \"../../../components/material-table/material-table\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../redux/hooks\";\r\nimport { fetchPage } from \"./redux/actionCreator\";\r\nimport {\r\n pageViewChangeCurrentPage,\r\n setColumnOrder,\r\n setPageViewPages,\r\n setPageViewPaginationModel,\r\n setRowData,\r\n} from \"./redux/reducer\";\r\nimport { IPaginationModel } from \"../../../@types/pagination-model\";\r\nimport NumberAggregation from \"../../../components/material-table/components/number-aggregation\";\r\nimport DefaultAggregation from \"../../../components/material-table/components/default-aggregation\";\r\n// import HeaderCell from \"../../../components/material-table/components/header-cell\";\r\nimport { IPage } from \"../../../@types/page\";\r\nimport Button from \"../../../components/button/button\";\r\n// import Filter from \"../../../components/filter/filter\";\r\n\r\nconst PageView = () => {\r\n // const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n const dispatch = useAppDispatch();\r\n const { pages, currentPage, rows, columns, columnOrder, paginationModel } =\r\n useAppSelector((store) => store?.pages);\r\n const { pageNo, limit } = paginationModel;\r\n\r\n useEffect(() => {\r\n dispatch(fetchPage(1));\r\n }, [dispatch]);\r\n\r\n const handleChangePage = (page: number) =>\r\n dispatch(pageViewChangeCurrentPage(page));\r\n\r\n const handleSetPages = (updatedPages: IPage[]) =>\r\n dispatch(setPageViewPages(updatedPages));\r\n\r\n useEffect(() => {\r\n dispatch(fetchPage(currentPage));\r\n }, [dispatch, currentPage]);\r\n\r\n const tableRows = useMemo(() => {\r\n const start = limit * (pageNo - 1);\r\n return rows.slice(start, start + limit);\r\n }, [rows, pageNo, limit]);\r\n\r\n const tableColumns = useMemo(() => {\r\n return columns?.map((col: any) => {\r\n let updatedCol = {\r\n ...col,\r\n // Header: ({ column }: any) => <HeaderCell column={column} />,\r\n enableSorting: true,\r\n };\r\n\r\n if (col?.type === \"number\") {\r\n updatedCol = {\r\n ...updatedCol,\r\n muiEditTextFieldProps: {\r\n type: \"number\",\r\n },\r\n Footer: ({ column }: any) => {\r\n return <NumberAggregation data={tableRows} column={column?.id} />;\r\n },\r\n };\r\n } else if (col.type === \"string\") {\r\n updatedCol = {\r\n ...updatedCol,\r\n Footer: ({ column }: any) => (\r\n <DefaultAggregation data={tableRows} column={column.id} />\r\n ),\r\n };\r\n }\r\n\r\n return updatedCol;\r\n });\r\n }, [tableRows, columns]);\r\n\r\n const handlePaginationModel = (model: IPaginationModel) => {\r\n dispatch(setPageViewPaginationModel(model));\r\n };\r\n\r\n const total = limit ? Math.ceil(rows.length / limit) : 0;\r\n\r\n const handleColumnOrdering = (colOrder: string[]) => {\r\n dispatch(setColumnOrder(colOrder.slice(1)));\r\n };\r\n\r\n const updateData = (value: string, column: any, rowId: string) => {\r\n const payload = {\r\n value: column?.columnDef?.type === \"number\" ? Number(value) : value,\r\n columnId: column.id,\r\n rowId,\r\n };\r\n\r\n dispatch(setRowData(payload));\r\n };\r\n\r\n // const handleOpenFilter = (event: React.MouseEvent<HTMLButtonElement>) =>\r\n // setAnchorEl(event.currentTarget);\r\n\r\n // const handleCloseFilter = () => setAnchorEl(null);\r\n\r\n return (\r\n <>\r\n <Button>Open Filter</Button>\r\n <MaterialTable\r\n rows={tableRows}\r\n columns={tableColumns}\r\n paginationModel={paginationModel}\r\n totalPages={total}\r\n columnOrder={[\"mrt-row-select\", ...columnOrder]}\r\n handleColumnOrdering={handleColumnOrdering}\r\n updateData={updateData}\r\n />\r\n <Footer\r\n pages={pages}\r\n setPages={handleSetPages}\r\n currentPage={currentPage}\r\n setCurrentPage={handleChangePage}\r\n total={total}\r\n paginationModel={paginationModel}\r\n handlePaginationModel={handlePaginationModel}\r\n />\r\n\r\n {/* {anchorEl && <Filter anchorEl={anchorEl} onClose={handleCloseFilter} />} */}\r\n </>\r\n );\r\n};\r\n\r\nexport { PageView };\r\nexport default PageView;\r\n","import { useState } from \"react\";\r\n// import { useNavigate } from \"react-router-dom\";\r\nimport { Pathname } from \"../../../constants/pathnames/pathname\";\r\nimport { Box, Grid, styled } from \"@mui/material\";\r\n// import { styled } from \"@mui/material/styles\";\r\nimport images from \"../../../assets/images\";\r\nimport DynamicInput from \"../../../components/form-control/form-builder/form-builder-element/text\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport Typography from \"../../../components/typography/typography\";\r\nimport Button from \"../../../components/button/button\";\r\n// import DynamicCheckBox from \"../../../components/form-control/form-builder/form-builder-element/checkbox\";\r\nimport { Eye, EyeOff } from \"../../../components/icons\";\r\nimport { LoginFormValues } from \"../../../contexts/AuthContext\";\r\n// import { useAuth } from \"../../../hooks/useAuth\";\r\nimport Toast from \"../../../components/toast/toast\";\r\nimport * as Yup from \"yup\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport { useAuth } from \"../../../hooks/useAuth\";\r\nimport { useLocation, useNavigate } from \"react-router-dom\";\r\nimport { getApiConfig } from \"@/utils\";\r\n\r\n\r\nconst LoginContainer = styled(Grid)(() => ({\r\n height: \"100vh\",\r\n }));\r\n \r\n const LeftGrid = styled(Grid)(({ theme }) => ({\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n backgroundImage: `url(${images.login.LoginLeftBg})`,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n [theme.breakpoints.down(\"lg\")]: {\r\n \"& img\": {\r\n width: 350,\r\n height: 350,\r\n },\r\n },\r\n [theme.breakpoints.down(\"md\")]: {\r\n \"& img\": {\r\n width: 300,\r\n height: 300,\r\n },\r\n },\r\n }));\r\n \r\n const RightGrid = styled(Grid)(() => ({\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n padding: \"1rem\",\r\n }));\r\n\r\n const FlexBox = styled(Box)(() => ({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }));\r\n\r\n interface FormValeus {\r\n login: LoginFormValues;\r\n }\r\n\r\n const validationSchema = Yup.object({\r\n login: Yup.object({\r\n password: Yup.string()\r\n .required(\"Please enter password\")\r\n .min(8, \"Password must be at least 8 characters\")\r\n .matches(/[A-Z]/, \"Password must contain at least one uppercase letter\")\r\n .matches(/[!@#$%^&*(),.?\":{}|<>]/, \"Password must contain at least one special character\"),\r\n confirm_password: Yup.string().required(\"Please enter confirm password\").oneOf([Yup.ref('password')], \"Passwords must match\"),\r\n }),\r\n });\r\n\r\nexport const ChangePassword = () => {\r\n\r\n const { control, handleSubmit } = useForm<FormValeus>({\r\n resolver: yupResolver(validationSchema),\r\n mode: \"all\",\r\n });\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n\r\n const [showPassword, setShowPassword] = useState<boolean>(false);\r\n const handleShowPassword = () => setShowPassword(!showPassword);\r\n const { changePassword } = useAuth();\r\n const location = useLocation();\r\n const navigate = useNavigate();\r\n\r\n const onSubmit = async (values: FormValeus) => {\r\n const token = location.state?.token;\r\n if (!token) {\r\n setToast({ message: 'Token missing', type: \"alert\" });\r\n return;\r\n } else {\r\n values.login.token = token;\r\n await changePassword(values.login, () => {\r\n setToast({ message: 'Password changed successfully', type: \"normal\" });\r\n setTimeout(() => {\r\n navigate(Pathname.LOGIN);\r\n }, 2000);\r\n });\r\n return values;\r\n }\r\n };\r\n\r\n const appLogo = getApiConfig().appLogo || images.erp_logo\r\n\r\n\r\n return (\r\n <Box>\r\n <LoginContainer container>\r\n <LeftGrid item sm={6}>\r\n <img src={images.login.LoginLeftSiteImage} />\r\n </LeftGrid>\r\n <RightGrid item sm={6} xs={12}>\r\n <FlexBox\r\n display=\"flex\"\r\n flexDirection=\"column\"\r\n gap={4}\r\n sx={(theme) => ({\r\n minWidth: 400,\r\n [theme.breakpoints.down(\"md\")]: {\r\n minWidth: 300,\r\n },\r\n [theme.breakpoints.down(\"sm\")]: {\r\n minWidth: 300,\r\n },\r\n })}\r\n >\r\n <Box textAlign=\"center\">\r\n <img src={appLogo} width={160} height={55}/>\r\n </Box>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n <FlexBox gap={4}>\r\n <FlexBox gap={3}>\r\n <Box>\r\n <Typography\r\n align=\"center\"\r\n type=\"h1\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n Change Password\r\n </Typography>\r\n <Typography\r\n align=\"center\"\r\n type=\"h5\"\r\n weight=\"normal\"\r\n color=\"theme.secondary81000\"\r\n >\r\n Enter Details below\r\n </Typography>\r\n </Box>\r\n <FlexBox gap={2}>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Password\"\r\n name=\"password\"\r\n type={\"password\"}\r\n placeholder=\"Enter Password\"\r\n fieldArrayName=\"login\"\r\n />\r\n </Box>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Confirm Password\"\r\n name=\"confirm_password\"\r\n type={showPassword ? \"text\" : \"password\"}\r\n fieldArrayName=\"login\"\r\n endIcon={\r\n <>\r\n {showPassword ? (\r\n <Eye fontSize=\"small\" htmlColor=\"#292D32\" />\r\n ) : (\r\n <EyeOff fontSize=\"small\" htmlColor=\"#292D32\" />\r\n )}\r\n </>\r\n }\r\n onIconClick={handleShowPassword}\r\n placeholder=\"Enter confirm password\"\r\n />\r\n </Box>\r\n </FlexBox>\r\n </FlexBox>\r\n <FlexBox gap={2}>\r\n <Button type=\"submit\" size=\"large\" variant=\"contained\">\r\n Change Password\r\n </Button>\r\n </FlexBox>\r\n </FlexBox>\r\n </form>\r\n </FlexBox>\r\n </RightGrid>\r\n </LoginContainer>\r\n <Toast\r\n open={Boolean(toast)}\r\n message={toast?.message}\r\n type={toast?.type}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\r\n autoHideDuration={3000}\r\n />\r\n </Box>\r\n );\r\n};","export const activityTag = {\r\n comments: [\r\n {\r\n name: \"You\",\r\n dateTime: \"01-11-2024 12:45:10\",\r\n text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\",\r\n },\r\n {\r\n name: \"Siddhant\",\r\n dateTime: \"01-12-2024 15:05:22\",\r\n text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\",\r\n },\r\n ],\r\n activities: [\r\n {\r\n dateTime: \"12-27-2023 19:17:10\",\r\n text: \"Prasun assigned HR Admin role to Avneet Singh.\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 19:15:10\",\r\n text: \"Prasun created a new user Avneet Singh\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 15:17:10\",\r\n text: \"Prasun created a new role HR Admin\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 14:17:10\",\r\n text: \"Prasun updated a role UI/UX Designer ‣ Product Designer\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 14:17:10\",\r\n text: \"Amrit updated resources for UI/UX Designer role.\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 14:17:10\",\r\n text: \"Amrit updated user Prashant Singh ‣ Prasun Singh\",\r\n },\r\n {\r\n dateTime: \"12-27-2023 14:17:10\",\r\n text: \"Amrit updated user Prashant Singh ‣ Prasun Singh\",\r\n },\r\n ],\r\n};\r\n","// export const calendarData = {\r\n// events: [\r\n// { id: 1, title: \"event 1\", date: \"2019-12-01\" },\r\n// {\r\n// title: \"event 2\",\r\n// start: \"2019-12-01\",\r\n// end: \"2019-12-05\",\r\n// allDay: true,\r\n// HostName: \"William\",\r\n// },\r\n// {\r\n// title: \"event 3\",\r\n// start: \"2019-12-05\",\r\n// end: \"2019-12-07\",\r\n// allDay: true,\r\n// },\r\n// {\r\n// title: \"event 4\",\r\n// start: \"2019-12-05\",\r\n// end: \"2019-12-07\",\r\n// allDay: true,\r\n// },\r\n// {\r\n// title: \"event 5\",\r\n// start: \"2019-12-05\",\r\n// end: \"2019-12-07\",\r\n// allDay: true,\r\n// },\r\n// {\r\n// title: \"event 6\",\r\n// start: \"2019-12-05\",\r\n// end: \"2019-12-07\",\r\n// allDay: true,\r\n// },\r\n// ],\r\n// };\r\n\r\nexport const calendarData = {\r\n events: [\r\n { title: \"All Day Event\", start: getDate(\"YEAR-MONTH-01\") },\r\n {\r\n title: \"Long Event\",\r\n start: getDate(\"YEAR-MONTH-07\"),\r\n end: getDate(\"YEAR-MONTH-10\"),\r\n // allDay: true,\r\n // HostName: \"William\",\r\n },\r\n {\r\n groupId: \"999\",\r\n title: \"Repeating Event\",\r\n start: getDate(\"YEAR-MONTH-09T16:00:00+00:00\"),\r\n },\r\n {\r\n groupId: \"999\",\r\n title: \"Repeating Event\",\r\n start: getDate(\"YEAR-MONTH-16T16:00:00+00:00\"),\r\n },\r\n {\r\n title: \"Conference\",\r\n start: \"YEAR-MONTH-17\",\r\n end: getDate(\"YEAR-MONTH-19\"),\r\n },\r\n {\r\n title: \"Meeting\",\r\n start: getDate(\"YEAR-MONTH-18T10:30:00+00:00\"),\r\n end: getDate(\"YEAR-MONTH-18T12:30:00+00:00\"),\r\n },\r\n { title: \"Lunch\", start: getDate(\"YEAR-MONTH-18T12:00:00+00:00\") },\r\n { title: \"Birthday Party\", start: getDate(\"YEAR-MONTH-19T07:00:00+00:00\") },\r\n { title: \"Meeting\", start: getDate(\"YEAR-MONTH-18T14:30:00+00:00\") },\r\n { title: \"Happy Hour\", start: getDate(\"YEAR-MONTH-18T17:30:00+00:00\") },\r\n { title: \"Dinner\", start: getDate(\"YEAR-MONTH-18T20:00:00+00:00\") },\r\n ],\r\n};\r\n\r\nfunction getDate(dayString: any) {\r\n const today = new Date();\r\n const year = today.getFullYear().toString();\r\n let month = (today.getMonth() + 1).toString();\r\n\r\n if (month.length === 1) {\r\n month = \"0\" + month;\r\n }\r\n\r\n return dayString.replace(\"YEAR\", year).replace(\"MONTH\", month);\r\n}\r\n","const data = [\r\n {\r\n name: \"Naidu Setti\",\r\n company: \"ERP Force\",\r\n status: \"Paid\",\r\n email: \"naidu@gmail.com\",\r\n amount: \"$1,00,000\",\r\n },\r\n {\r\n name: \"Shashank Yadav\",\r\n company: \"Antino Labs\",\r\n status: \"Pending\",\r\n email: \"shashank@gmail.com\",\r\n amount: \"$50,000\",\r\n },\r\n {\r\n name: \"Tarun Prajapati\",\r\n company: \"Goldenflitch\",\r\n status: \"Lost\",\r\n email: \"tarun@gmail.com\",\r\n amount: \"$60,000\",\r\n },\r\n {\r\n name: \"Rajneesh Kumar\",\r\n company: \"ERP Force\",\r\n status: \"Lost\",\r\n email: \"rajneesh@gmail.com\",\r\n amount: \"$10,000\",\r\n },\r\n {\r\n name: \"Radhakanth\",\r\n company: \"Antino\",\r\n status: \"Upcomming\",\r\n email: \"radhakanth@gmail.com\",\r\n amount: \"$1,00,000\",\r\n },\r\n];\r\n\r\nexport { data };\r\nexport default data;\r\n","export const board = {\r\n columns: [\r\n {\r\n id: 1,\r\n title: \"Backlog\",\r\n cards: [\r\n {\r\n id: 1.1,\r\n title: \"Card title 1\",\r\n description: \"Card content\",\r\n },\r\n {\r\n id: 1.2,\r\n title: \"Card title 2\",\r\n description: \"Card content\",\r\n },\r\n {\r\n id: 1.3,\r\n title: \"Card title 3\",\r\n description: \"Card content\",\r\n },\r\n ],\r\n },\r\n {\r\n id: 2,\r\n title: \"Doing\",\r\n cards: [\r\n {\r\n id: 2.1,\r\n title: \"Card title 9\",\r\n description: \"Card content\",\r\n },\r\n ],\r\n },\r\n {\r\n id: 3,\r\n title: \"Q&A\",\r\n cards: [\r\n {\r\n id: 3.1,\r\n title: \"Card title 10\",\r\n description: \"Card content\",\r\n },\r\n {\r\n id: 3.2,\r\n title: \"Card title 11\",\r\n description: \"Card content\",\r\n },\r\n ],\r\n },\r\n {\r\n id: 4,\r\n title: \"Production\",\r\n cards: [\r\n {\r\n id: 4.1,\r\n title: \"Card title 12\",\r\n description: \"Card content\",\r\n },\r\n {\r\n id: 4.2,\r\n title: \"Card title 13\",\r\n description: \"Card content\",\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n","import { GridColumnIcon } from \"@glideapps/glide-data-grid\";\r\n\r\nexport const column = [\r\n {\r\n title: \"Name\",\r\n id: \"name\",\r\n hasMenu: true,\r\n icon: GridColumnIcon.HeaderString,\r\n },\r\n {\r\n title: \"Company\",\r\n id: \"company\",\r\n hasMenu: true,\r\n dataType: \"Bubble\",\r\n },\r\n {\r\n title: \"Age\",\r\n id: \"age\",\r\n hasMenu: true,\r\n dataType: \"Number\",\r\n },\r\n {\r\n title: \"Image dd\",\r\n id: \"image\",\r\n key: \"image\",\r\n dataType: \"Image\",\r\n },\r\n {\r\n title: \"Email\",\r\n id: \"email\",\r\n hasMenu: true,\r\n },\r\n {\r\n title: \"Date\",\r\n id: \"date\",\r\n hasMenu: true,\r\n dataType: \"DatePicker\",\r\n },\r\n {\r\n title: \"Phone\",\r\n id: \"phone\",\r\n },\r\n {\r\n title: \"Address\",\r\n id: \"address\",\r\n },\r\n {\r\n title: \"about\",\r\n id: \"about\",\r\n },\r\n];\r\n","export const tableData = [\r\n {\r\n age: 33,\r\n name: \"Delaney Cortez\",\r\n company: \"IZZBY\",\r\n email: \"delaneycortez@izzby.com\",\r\n phone: \"+1 (844) 567-3740\",\r\n image: \"https://picsum.photos/id/74/900/900\",\r\n address: \"870 Hegeman Avenue, Crawfordsville, Kentucky, 2953\",\r\n about:\r\n \"Nostrud labore esse labore aliquip. Qui excepteur sint exercitation adipisicing deserunt ad veniam sunt ipsum nulla deserunt dolor est culpa. Eu deserunt nostrud ipsum mollit consectetur mollit et. Commodo mollit qui Lorem fugiat eiusmod dolore amet est officia aliqua. Est tempor veniam sit magna. Ullamco veniam eiusmod nostrud sit dolor. Est proident cupidatat proident ullamco irure commodo nisi fugiat adipisicing ullamco adipisicing ad officia.\\r\\n\",\r\n date: \"2023-01-10T09:02:53.870Z\",\r\n },\r\n {\r\n age: 24,\r\n name: \"Williamson Davenport\",\r\n company: \"ONTAGENE\",\r\n email: \"williamsondavenport@ontagene.com\",\r\n phone: \"+1 (844) 564-3345\",\r\n image: \"https://picsum.photos/id/40/900/900\",\r\n address: \"274 Forest Place, Vowinckel, Maine, 9510\",\r\n about:\r\n \"Quis ipsum ad deserunt cillum consequat do ex laboris sit eiusmod pariatur occaecat voluptate. Laborum ea sit duis mollit est sunt culpa ut et commodo consectetur veniam adipisicing amet. Ipsum mollit proident ea deserunt veniam Lorem duis aliquip dolor duis proident ut. Velit esse officia occaecat exercitation magna consequat ullamco ea nisi. Ad ea deserunt occaecat quis occaecat eiusmod ad do. Elit veniam quis aliquip qui nostrud laborum irure minim aute irure fugiat. Ullamco aliquip dolor est sit nulla consectetur.\\r\\n\",\r\n date: \"2023-01-10T09:02:53.870Z\",\r\n },\r\n {\r\n age: 30,\r\n name: \"Alexander Wong\",\r\n company: \"QUADEEBO\",\r\n email: \"alexanderwong@quadeebo.com\",\r\n phone: \"+1 (834) 497-2624\",\r\n image: \"https://picsum.photos/id/8/900/900\",\r\n address: \"420 Borinquen Pl, Kenvil, Vermont, 7377\",\r\n about:\r\n \"Dolor mollit elit est ex. Sit mollit laboris ad pariatur magna est amet veniam ad ad velit incididunt eu. Minim ipsum qui labore eiusmod magna veniam in magna pariatur Lorem.\\r\\n\",\r\n date: \"2023-01-10T09:02:53.870Z\",\r\n },\r\n {\r\n age: 24,\r\n name: \"Blanca Schultz\",\r\n company: \"CUJO\",\r\n email: \"blancaschultz@cujo.com\",\r\n phone: \"+1 (954) 412-2870\",\r\n image: \"https://picsum.photos/id/42/900/900\",\r\n address: \"144 Albemarle Terrace, Watchtower, Delaware, 2829\",\r\n about:\r\n \"Pariatur sunt dolore nostrud cillum cupidatat culpa. Ipsum laborum laboris reprehenderit Lorem culpa. Consequat duis do occaecat ipsum cupidatat sunt minim minim cillum commodo in qui culpa anim. Et ullamco nisi eiusmod laboris veniam laborum ullamco reprehenderit aliqua nulla labore. Elit excepteur sunt exercitation anim sint non ea.\\r\\n\",\r\n date: \"2023-01-10T09:02:53.870Z\",\r\n },\r\n {\r\n age: 34,\r\n name: \"Eunice Romero\",\r\n company: \"CENTREGY\",\r\n email: \"euniceromero@centregy.com\",\r\n phone: \"+1 (949) 568-3290\",\r\n image: \"https://picsum.photos/id/3/900/900\",\r\n address: \"698 Clermont Avenue, Harmon, Washington, 1094\",\r\n about:\r\n \"Nulla aute enim incididunt labore aute id officia fugiat tempor aliqua. Fugiat incididunt sint nisi eiusmod fugiat magna minim in. Officia eu enim magna magna pariatur deserunt esse amet veniam sint consequat est sit.\\r\\n\",\r\n date: \"2023-01-10T09:02:53.870Z\",\r\n },\r\n];\r\n","export const multilineData = [\r\n {\r\n id: 1,\r\n name: \"Customer\",\r\n role: \"Selling\",\r\n },\r\n {\r\n id: 2,\r\n name: \"Producer\",\r\n role: \"sdf\",\r\n },\r\n {\r\n id: 3,\r\n name: \"Director\",\r\n role: \"wer\",\r\n },\r\n];\r\n","export const tabsData = [\r\n {\r\n tab_order: 1,\r\n title: \"Tab One\",\r\n content: \"Tab one Content\",\r\n },\r\n {\r\n tab_order: 2,\r\n title: \"Tab Two\",\r\n content: \"Tab two Content\",\r\n },\r\n {\r\n tab_order: 3,\r\n title: \"Tab Three\",\r\n content: \"Tab three Content\",\r\n },\r\n];\r\n","export const userData = [\r\n {\r\n id: 1,\r\n name: \"Aman Gupta\",\r\n role: \"Accountant & Finance\",\r\n roleId: 2,\r\n },\r\n {\r\n id: 2,\r\n name: \"Deepak Sharma\",\r\n role: \"Sales\",\r\n roleId: 4,\r\n },\r\n {\r\n id: 3,\r\n name: \"Avhinav Dhingra\",\r\n role: \"Operation\",\r\n roleId: 3,\r\n },\r\n {\r\n id: 4,\r\n name: \"Rajiv Mehta\",\r\n role: \"Maintenance\",\r\n roleId: 1,\r\n },\r\n {\r\n id: 5,\r\n name: \"Rajiv Mehta\",\r\n role: \"Stakes\",\r\n roleId: 6,\r\n },\r\n {\r\n id: 6,\r\n name: \"Rajdeep Dutta\",\r\n role: \"Research & Development\",\r\n roleId: 5,\r\n },\r\n {\r\n id: 7,\r\n name: \"Sonia Verma\",\r\n role: \"Accountant & Finance\",\r\n roleId: 2,\r\n },\r\n {\r\n id: 8,\r\n name: \"Vikram Singh\",\r\n role: \"Sales\",\r\n roleId: 4,\r\n },\r\n {\r\n id: 9,\r\n name: \"Neha Patel\",\r\n role: \"Operation\",\r\n roleId: 3,\r\n },\r\n {\r\n id: 10,\r\n name: \"Ankit Kapoor\",\r\n role: \"Maintenance\",\r\n roleId: 1,\r\n },\r\n {\r\n id: 11,\r\n name: \"Kavita Shah\",\r\n role: \"Stakes\",\r\n roleId: 6,\r\n },\r\n {\r\n id: 12,\r\n name: \"Rohit Singh\",\r\n role: \"Research & Development\",\r\n roleId: 5,\r\n },\r\n {\r\n id: 13,\r\n name: \"Priya Agarwal\",\r\n role: \"Human Resources\",\r\n roleId: 7,\r\n },\r\n {\r\n id: 14,\r\n name: \"Amit Trivedi\",\r\n role: \"Marketing\",\r\n roleId: 8,\r\n },\r\n {\r\n id: 15,\r\n name: \"Sara Khan\",\r\n role: \"Customer Support\",\r\n roleId: 9,\r\n },\r\n {\r\n id: 16,\r\n name: \"Amit Gupta\",\r\n role: \"Accountant & Finance\",\r\n roleId: 2,\r\n },\r\n {\r\n id: 17,\r\n name: \"Neha Sharma\",\r\n role: \"Sales\",\r\n roleId: 4,\r\n },\r\n {\r\n id: 18,\r\n name: \"Rahul Verma\",\r\n role: \"Operation\",\r\n roleId: 3,\r\n },\r\n {\r\n id: 19,\r\n name: \"Meera Kapoor\",\r\n role: \"Maintenance\",\r\n roleId: 1,\r\n },\r\n {\r\n id: 20,\r\n name: \"Rajesh Khanna\",\r\n role: \"Stakes\",\r\n roleId: 6,\r\n },\r\n {\r\n id: 21,\r\n name: \"Sonia Dutta\",\r\n role: \"Research & Development\",\r\n roleId: 5,\r\n },\r\n {\r\n id: 22,\r\n name: \"Alok Gupta\",\r\n role: \"Human Resources\",\r\n roleId: 7,\r\n },\r\n {\r\n id: 23,\r\n name: \"Preeti Singh\",\r\n role: \"Marketing\",\r\n roleId: 8,\r\n },\r\n {\r\n id: 24,\r\n name: \"Anuj Kumar\",\r\n role: \"Customer Support\",\r\n roleId: 9,\r\n },\r\n {\r\n id: 25,\r\n name: \"Deepa Patel\",\r\n role: \"IT Support\",\r\n roleId: 10,\r\n },\r\n {\r\n id: 26,\r\n name: \"Vishal Kapoor\",\r\n role: \"Legal\",\r\n roleId: 11,\r\n },\r\n {\r\n id: 27,\r\n name: \"Asha Singh\",\r\n role: \"Quality Assurance\",\r\n roleId: 12,\r\n },\r\n {\r\n id: 28,\r\n name: \"Rajeev Sharma\",\r\n role: \"Logistics\",\r\n roleId: 13,\r\n },\r\n {\r\n id: 29,\r\n name: \"Kavita Trivedi\",\r\n role: \"Public Relations\",\r\n roleId: 14,\r\n },\r\n {\r\n id: 30,\r\n name: \"Alok Singh\",\r\n role: \"Training and Development\",\r\n roleId: 15,\r\n },\r\n {\r\n id: 31,\r\n name: \"Pooja Kapoor\",\r\n role: \"Accountant & Finance\",\r\n roleId: 2,\r\n },\r\n {\r\n id: 32,\r\n name: \"Rohit Verma\",\r\n role: \"Sales\",\r\n roleId: 4,\r\n },\r\n {\r\n id: 33,\r\n name: \"Sanjay Mehta\",\r\n role: \"Operation\",\r\n roleId: 3,\r\n },\r\n {\r\n id: 34,\r\n name: \"Nisha Khanna\",\r\n role: \"Maintenance\",\r\n roleId: 1,\r\n },\r\n {\r\n id: 35,\r\n name: \"Varun Dutta\",\r\n role: \"Stakes\",\r\n roleId: 6,\r\n },\r\n {\r\n id: 36,\r\n name: \"Sapna Gupta\",\r\n role: \"Research & Development\",\r\n roleId: 5,\r\n },\r\n {\r\n id: 37,\r\n name: \"Vikas Sharma\",\r\n role: \"Human Resources\",\r\n roleId: 7,\r\n },\r\n {\r\n id: 38,\r\n name: \"Ritu Verma\",\r\n role: \"Marketing\",\r\n roleId: 8,\r\n },\r\n {\r\n id: 39,\r\n name: \"Manish Singh\",\r\n role: \"Customer Support\",\r\n roleId: 9,\r\n },\r\n {\r\n id: 40,\r\n name: \"Neha Patel\",\r\n role: \"IT Support\",\r\n roleId: 10,\r\n },\r\n {\r\n id: 41,\r\n name: \"Anil Kapoor\",\r\n role: \"Legal\",\r\n roleId: 11,\r\n },\r\n {\r\n id: 42,\r\n name: \"Priya Dutta\",\r\n role: \"Quality Assurance\",\r\n roleId: 12,\r\n },\r\n {\r\n id: 43,\r\n name: \"Rahul Sharma\",\r\n role: \"Logistics\",\r\n roleId: 13,\r\n },\r\n {\r\n id: 44,\r\n name: \"Sneha Trivedi\",\r\n role: \"Public Relations\",\r\n roleId: 14,\r\n },\r\n {\r\n id: 45,\r\n name: \"Anita Singh\",\r\n role: \"Training and Development\",\r\n roleId: 15,\r\n },\r\n {\r\n id: 46,\r\n name: \"Amit Trivedi\",\r\n role: \"Accountant & Finance\",\r\n roleId: 2,\r\n },\r\n {\r\n id: 47,\r\n name: \"Priyanka Sharma\",\r\n role: \"Sales\",\r\n roleId: 4,\r\n },\r\n {\r\n id: 48,\r\n name: \"Rajat Verma\",\r\n role: \"Operation\",\r\n roleId: 3,\r\n },\r\n {\r\n id: 49,\r\n name: \"Anu Khanna\",\r\n role: \"Maintenance\",\r\n roleId: 1,\r\n },\r\n {\r\n id: 50,\r\n name: \"Sumit Dutta\",\r\n role: \"Stakes\",\r\n roleId: 6,\r\n },\r\n];\r\n","import { useEffect, useState } from \"react\";\r\n// import { useNavigate } from \"react-router-dom\";\r\nimport { Pathname } from \"../../../constants/pathnames/pathname\";\r\nimport { Box, Grid } from \"@mui/material\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport images from \"../../../assets/images\";\r\nimport DynamicInput from \"../../../components/form-control/form-builder/form-builder-element/text\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport Typography from \"../../../components/typography/typography\";\r\nimport Button from \"../../../components/button/button\";\r\n// import DynamicCheckBox from \"../../../components/form-control/form-builder/form-builder-element/checkbox\";\r\n// import { Eye, EyeOff } from \"../../../components/icons\";\r\n// import { LoginFormValues } from \"../../../contexts/AuthContext\";\r\n// import { useAuth } from \"../../../hooks/useAuth\";\r\nimport Toast from \"../../../components/toast/toast\";\r\nimport * as Yup from \"yup\";\r\nimport { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport { useAuth } from \"../../../hooks/useAuth\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport { getApiConfig } from \"@/utils\";\r\n\r\nexport const ForgotPassword = () => {\r\n const { forgotPassword } = useAuth();\r\n const LoginContainer = styled(Grid)(() => ({\r\n height: \"100vh\",\r\n }));\r\n const navigate = useNavigate();\r\n interface IToast {\r\n message: string;\r\n type: \"normal\" | \"alert\";\r\n }\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n\r\n const validationSchema = Yup.object({\r\n login: Yup.object({\r\n email: Yup.string()\r\n .required(\"Please enter email\")\r\n .email(\"Provided email is invalid\")\r\n }),\r\n });\r\n\r\n const { control, handleSubmit } = useForm<FormValeus>({\r\n resolver: yupResolver(validationSchema),\r\n mode: \"all\",\r\n });\r\n\r\n const LeftGrid = styled(Grid)(({ theme }) => ({\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n backgroundImage: `url(${images.login.LoginLeftBg})`,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n [theme.breakpoints.down(\"lg\")]: {\r\n \"& img\": {\r\n width: 350,\r\n height: 350,\r\n },\r\n },\r\n [theme.breakpoints.down(\"md\")]: {\r\n \"& img\": {\r\n width: 300,\r\n height: 300,\r\n },\r\n },\r\n }));\r\n\r\n const RightGrid = styled(Grid)(() => ({\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n padding: \"1rem\",\r\n }));\r\n \r\n const FlexBox = styled(Box)(() => ({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }));\r\n\r\n const onSubmit = async (values: FormValeus) => {\r\n await forgotPassword(values.login, (type, message) => {\r\n if (type) {\r\n setToast({ message: message, type: \"normal\" });\r\n setTimeout(() => {\r\n navigate(Pathname.LOGIN);\r\n }, 1500);\r\n } else {\r\n setToast({ message: message, type: \"alert\" });\r\n }\r\n });\r\n return values;\r\n };\r\n\r\n const handleBackToLogin = () => {\r\n navigate(Pathname.LOGIN);\r\n }\r\n\r\n useEffect(() => {});\r\n\r\n const appLogo = getApiConfig().appLogo || images.erp_logo\r\n\r\n return (\r\n <Box>\r\n <LoginContainer container>\r\n <LeftGrid item sm={6}>\r\n <img src={images.login.LoginLeftSiteImage} />\r\n </LeftGrid>\r\n <RightGrid item sm={6} xs={12}>\r\n <FlexBox\r\n display=\"flex\"\r\n flexDirection=\"column\"\r\n gap={4}\r\n sx={(theme) => ({\r\n minWidth: 400,\r\n [theme.breakpoints.down(\"md\")]: {\r\n minWidth: 300,\r\n },\r\n [theme.breakpoints.down(\"sm\")]: {\r\n minWidth: 300,\r\n },\r\n })}\r\n >\r\n <Box textAlign=\"center\">\r\n <img src={appLogo} width={160} height={55}/>\r\n </Box>\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n <FlexBox gap={4}>\r\n <FlexBox gap={3}>\r\n <Box>\r\n <Typography\r\n align=\"center\"\r\n type=\"h1\"\r\n weight=\"medium\"\r\n color=\"theme.secondary.1000\"\r\n >\r\n Forgot Password\r\n </Typography>\r\n <Typography\r\n align=\"center\"\r\n type=\"h5\"\r\n weight=\"normal\"\r\n color=\"theme.secondary81000\"\r\n >\r\n Enter your email to reset password\r\n </Typography>\r\n </Box>\r\n <FlexBox gap={2}>\r\n <Box>\r\n <DynamicInput\r\n formControl={control}\r\n label=\"Email\"\r\n name=\"email\"\r\n placeholder=\"Enter email\"\r\n fieldArrayName=\"login\"\r\n />\r\n </Box>\r\n </FlexBox>\r\n </FlexBox>\r\n <FlexBox gap={2}>\r\n <Button type=\"submit\" size=\"large\" variant=\"contained\">\r\n Reset Password\r\n </Button>\r\n <Button\r\n variant=\"text\"\r\n sx={(theme) => ({\r\n color: `${theme.palette.theme?.primary[\"700\"]} !important`,\r\n })}\r\n onClick = {handleBackToLogin}\r\n >\r\n Back to login\r\n </Button>\r\n </FlexBox>\r\n </FlexBox>\r\n </form>\r\n </FlexBox>\r\n </RightGrid>\r\n </LoginContainer>\r\n <Toast\r\n open={Boolean(toast)}\r\n message={toast?.message}\r\n type={toast?.type}\r\n handleClose={() => setToast(null)}\r\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\r\n autoHideDuration={3000}\r\n />\r\n </Box>\r\n )\r\n}","import \"./landing.scss\";\r\n// import MetaComponent from '../../../utils/metaComponent';\r\n\r\nexport function Landing() {\r\n return (\r\n <div className=\"Landing\">\r\n {/* <MetaComponent\r\n\t\t\t\ttitle=\"Hi, This is dummy page title\"\r\n\t\t\t\tdescription=\"This is the dummy page description\"\r\n\t\t\t\tkeywords=\"dummy, keywords, dummy keywords, frontend template, frontend template by antino\"\r\n\t\t\t\tlocation={window.location}\r\n\t\t\t\timage=\"og_image.png\"\r\n\t\t\t/> */}\r\n <div className=\"Landing--Home\" id=\"home\">\r\n <div className=\"Landing--HomeAnimation\">\r\n <video\r\n className=\"Landing--HomeAnimationVideo\"\r\n autoPlay={true}\r\n muted\r\n loop={true}\r\n playsInline\r\n >\r\n <source\r\n src=\"https://ak.picdn.net/shutterstock/videos/1063309405/preview/stock-footage-modern-office-portrait-of-beautiful-authentic-specialist-with-short-pink-hair-standing-holding.webm\"\r\n type=\"video/mp4\"\r\n />\r\n </video>\r\n </div>\r\n <div className=\"Landing--HomeContent\">\r\n <div className=\"Landing--HomeContentTop\">\r\n <h1 className=\"Landing--SubTitle\">\r\n Introducing Dummy\r\n <span style={{ fontWeight: \"700\" }}> Land, </span>\r\n </h1>\r\n <h1 className=\"Landing--Para\">\r\n This is the hero section.Lorem ipsum dolor sit amet, consectetur\r\n adipisicing elit.Dicta fugiat perspiciatis temporibus ut impedit\r\n expedita maiores officiis porro ? At commodi suscipit atque\r\n eligendi cumque ? Impedit magnam eligendi fugiat.Non, quam.\r\n </h1>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Landing;\r\n","import { useEffect } from \"react\";\r\n// // import { useNavigate } from \"react-router-dom\";\r\nimport { Pathname } from \"../../../constants/pathnames/pathname\";\r\nimport { Box } from \"@mui/material\";\r\nimport { useSearchParams } from \"react-router-dom\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport { useAuth } from \"../../../hooks/useAuth\";\r\n\r\n\r\nexport const ResetPassword = () => {\r\n const { resetPassword } = useAuth();\r\n const [searchParams] = useSearchParams();\r\n const navigate = useNavigate();\r\n\r\n useEffect(() => {\r\n const tokenParam = searchParams.get(\"token\");\r\n\r\n if (!tokenParam) {\r\n navigate(Pathname.LOGIN);\r\n } else {\r\n resetPassword({ token: tokenParam }, (response) => {\r\n console.log(\"response \",response)\r\n if (!response) {\r\n navigate(Pathname.LOGIN);\r\n } else {\r\n if (response && response?.data && response?.data?.isValid) {\r\n navigate(Pathname.CHANGE_PASSWORD, { state: { token: tokenParam } });\r\n }\r\n }\r\n });\r\n }\r\n }, [searchParams, resetPassword, navigate]);\r\n\r\n return <Box>Resetting password, please wait...</Box>;\r\n};","import { MRT_ColumnDef, MRT_RowData } from \"material-react-table\";\r\n\r\nexport interface IProperty {\r\n field_type: string;\r\n label: string;\r\n placeholder: string;\r\n default_value?: string;\r\n float_step?: string;\r\n min_length?: number;\r\n max_length?: number;\r\n is_multiline?: boolean;\r\n is_required?: boolean;\r\n is_negative?: boolean;\r\n is_unique?: boolean;\r\n is_checked?: boolean;\r\n // options?: Array<{ text: string; value: string }>;\r\n // is_multiselect?: boolean,\r\n id?: string;\r\n is_future_dates_allowed?: boolean;\r\n is_past_dates_allowed?: boolean;\r\n option?: string;\r\n max_size?: number;\r\n section_id?: string;\r\n section_name?: string;\r\n title_position?: \"start\" | \"end\"\r\n title?:string,\r\n table_columns?:MRT_ColumnDef<MRT_RowData>[]\r\n table?:string\r\n module?:string\r\n field?:string\r\n is_country_code_separate?: boolean;\r\n country_code_field_name?: string;\r\n}\r\n\r\ninterface IMultiOption {\r\n value: string;\r\n label: string;\r\n is_checked: boolean;\r\n}\r\n\r\nexport interface IMultiOptionsProperty extends IProperty {\r\n options: IMultiOption[];\r\n display?: \"row\" | \"column\";\r\n}\r\n\r\nexport interface ISelectProperty {\r\n field_type: string;\r\n label: string;\r\n placeholder: string;\r\n default_value: string;\r\n is_required?: boolean;\r\n is_unique?: boolean;\r\n options: ISelectOption[];\r\n is_multiselect?: boolean;\r\n id?: string;\r\n section_id?: string;\r\n section_name?: string;\r\n}\r\n\r\nexport interface ISwitcherForms {\r\n value?: string;\r\n name: string;\r\n id: string | number | null;\r\n}\r\n\r\nexport interface ISectionProperty {\r\n field_type: string;\r\n label: string;\r\n is_accordion: boolean;\r\n id?: string;\r\n section_order?: string;\r\n section_id?: string;\r\n section_name?: string;\r\n section_type: \"Default\" | \"Form switcher section\";\r\n form_switcher_label?: string;\r\n form_switcher_name?: string;\r\n switcher_forms?: ISwitcherForms[];\r\n members: IProperty[] | ISelectProperty[];\r\n}\r\n\r\n\r\ninterface ISelectOption {\r\n text: string;\r\n value: string;\r\n}\r\n\r\nconst text: IProperty = {\r\n field_type: \"text\",\r\n label: \"label\",\r\n placeholder: \"Enter text\",\r\n default_value: \"\",\r\n min_length: 2,\r\n max_length: 30,\r\n is_multiline: false,\r\n is_required: true,\r\n is_unique: false,\r\n};\r\n\r\nconst number: IProperty = {\r\n field_type: \"number\",\r\n label: \"label\",\r\n placeholder: \"Enter number\",\r\n default_value: \"\",\r\n float_step: \"0.001\", // \"0.001\",\r\n min_length: 0,\r\n max_length: 1000,\r\n is_negative: false,\r\n is_required: true,\r\n is_unique: false,\r\n};\r\n\r\nconst email: IProperty = {\r\n field_type: \"email\",\r\n label: \"label\",\r\n placeholder: \"Enter email\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n};\r\n\r\nconst phone: IProperty = {\r\n field_type: \"phone\",\r\n label: \"label\",\r\n placeholder: \"Enter phone\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n};\r\n\r\nconst select: ISelectProperty = {\r\n field_type: \"select\",\r\n label: \"Select\",\r\n placeholder: \"Choose option\",\r\n default_value: \"\",\r\n options: [],\r\n is_multiselect: false,\r\n is_required: true,\r\n is_unique: false,\r\n};\r\n\r\nconst date: IProperty = {\r\n field_type: \"date\",\r\n label: \"label\",\r\n placeholder: \"Select Date\",\r\n default_value: \"\",\r\n is_future_dates_allowed: false,\r\n is_past_dates_allowed: false,\r\n is_required: false,\r\n is_unique: false,\r\n};\r\n\r\nconst time: IProperty = {\r\n field_type: \"time\",\r\n label: \"label\",\r\n placeholder: \"Select Time\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n option: \"12hr\",\r\n};\r\n\r\nconst url: IProperty = {\r\n field_type: \"url\",\r\n label: \"label\",\r\n placeholder: \"Enter URL\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n};\r\n\r\nconst currency: IProperty = {\r\n field_type: \"currency\",\r\n label: \"label\",\r\n placeholder: \"Enter Currency\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n option: \"inr\",\r\n};\r\n\r\nconst file: IProperty = {\r\n field_type: \"file\",\r\n label: \"label\",\r\n placeholder: \"Upload File or Media\",\r\n is_required: false,\r\n is_unique: false,\r\n max_size: 20,\r\n default_value: \"\",\r\n};\r\n\r\nconst image: IProperty = {\r\n field_type: \"image\",\r\n label: \"label\",\r\n placeholder: \"Upload Image\",\r\n is_required: false,\r\n is_unique: false,\r\n max_size: 20,\r\n default_value: \"\",\r\n};\r\n\r\nconst geoLocation: IProperty = {\r\n field_type: \"geoLocation\",\r\n label: \"label\",\r\n placeholder: \"Enter geo location\",\r\n default_value: \"\",\r\n is_required: false,\r\n is_unique: false,\r\n};\r\n\r\nconst section: ISectionProperty = {\r\n field_type: \"section\",\r\n label: \"section\",\r\n section_type: \"Default\",\r\n form_switcher_label: \"Form section\",\r\n form_switcher_name: \"\",\r\n switcher_forms: [{\r\n value: \"\",\r\n name: \"Form 1\",\r\n id: null,\r\n }],\r\n is_accordion: false,\r\n members: [],\r\n};\r\n\r\nconst info: IProperty = {\r\n field_type: \"info\",\r\n label: \"label\",\r\n placeholder: \"Add Label Text\",\r\n default_value: \"\",\r\n};\r\n\r\nconst relation: IProperty = {\r\n field_type: \"relation\",\r\n label: \"label\",\r\n placeholder: \"Add Label Text\",\r\n is_required: false,\r\n is_unique: false,\r\n module: \"\",\r\n field: \"\",\r\n default_value: \"\",\r\n};\r\n\r\nconst checkbox: IProperty = {\r\n field_type: \"checkbox\",\r\n label: \"label\",\r\n placeholder: \"Add Label Text\",\r\n is_required: false,\r\n is_checked: false,\r\n title_position:'end',\r\n title:\"Checkbox\"\r\n};\r\n\r\nconst toggleButton: IProperty = {\r\n field_type: \"toggleButton\",\r\n label: \"label\",\r\n placeholder: \"Add Label Text\",\r\n is_required: false,\r\n is_checked: false,\r\n title_position:'end',\r\n title:\"Toggle\"\r\n};\r\n\r\nconst table: IProperty = {\r\n field_type: \"table\",\r\n label: \"label\",\r\n placeholder: \"Add Label Text\",\r\n is_required: false,\r\n table_columns: [],\r\n table: \"custom\",\r\n};\r\nconst radioButton: IMultiOptionsProperty = {\r\n field_type: \"radioButton\",\r\n placeholder: \"\",\r\n label: \"label\",\r\n title: \"\",\r\n is_required: false,\r\n title_position:'end',\r\n options: [],\r\n display: \"row\",\r\n default_value: \"\",\r\n};\r\nconst tagsInput: IProperty = {\r\n field_type: \"tagsInput\",\r\n label: \"label\",\r\n placeholder: \"Enter tagsInput\",\r\n default_value: \"\",\r\n min_length: 2,\r\n max_length: 30,\r\n is_multiline: false,\r\n is_required: true,\r\n is_unique: false,\r\n};\r\n\r\nexport const element = {\r\n text,\r\n number,\r\n email,\r\n phone,\r\n select,\r\n date,\r\n time,\r\n url,\r\n currency,\r\n file,\r\n geoLocation,\r\n image,\r\n section,\r\n info,\r\n relation,\r\n checkbox,\r\n toggleButton,\r\n radioButton,\r\n table,\r\n tagsInput\r\n};\r\n","// React imports\r\nimport { useEffect, useState } from \"react\";\r\n\r\n// Material UI imports\r\nimport { MenuItem, SelectProps, Stack } from \"@mui/material\";\r\n\r\n// ERP Common imports\r\nimport {\r\n ArrowCircleDown,\r\n Calendar,\r\n CheckboxSquare,\r\n Clock,\r\n DollarCircle,\r\n Email,\r\n Grid,\r\n Hashtag,\r\n Image,\r\n InfoCircle,\r\n Link,\r\n LinkHorizontal,\r\n Location,\r\n PaperClip,\r\n Paragraph,\r\n Phone,\r\n RadioButton,\r\n ToggleSwitch,\r\n} from \"@/components/icons\";\r\nimport Select from \"@/components/select/select\";\r\nimport Typography from \"@/components/typography/typography\";\r\n\r\ninterface IField {\r\n label: string;\r\n value: string;\r\n icon: typeof Paragraph | string;\r\n}\r\n\r\nconst fields: IField[] = [\r\n { label: \"Text\", value: \"text\", icon: Paragraph },\r\n { label: \"Number\", value: \"number\", icon: Hashtag },\r\n { label: \"Select\", value: \"select\", icon: ArrowCircleDown },\r\n { label: \"Date\", value: \"date\", icon: Calendar },\r\n { label: \"Files & Media\", value: \"file\", icon: PaperClip },\r\n { label: \"URL\", value: \"url\", icon: Link },\r\n { label: \"Email\", value: \"email\", icon: Email },\r\n { label: \"Phone\", value: \"phone\", icon: Phone },\r\n { label: \"Currency\", value: \"currency\", icon: DollarCircle },\r\n { label: \"Time\", value: \"time\", icon: Clock },\r\n { label: \"Table\", value: \"table\", icon: Grid },\r\n { label: \"Geolocation\", value: \"geoLocation\", icon: Location },\r\n { label: \"Check Box\", value: \"checkbox\", icon: CheckboxSquare },\r\n { label: \"Image Upload\", value: \"image\", icon: Image },\r\n { label: \"Relation Field\", value: \"relation\", icon: LinkHorizontal },\r\n { label: \"Info Card\", value: \"info\", icon: InfoCircle },\r\n { label: \"Toggle Button\", value: \"toggleButton\", icon: ToggleSwitch },\r\n { label: \"Radio Button\", value: \"radioButton\", icon: RadioButton },\r\n { label: \"tagsInput\", value: \"tagsInput\", icon: Paragraph },\r\n];\r\n\r\nconst FieldSelect: React.FC<SelectProps> = (props) => {\r\n const [selectFields, setSelectFields] = useState<IField[]>(fields);\r\n const [search, setSearch] = useState<string>(\"\");\r\n\r\n const handleSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n setSearch(event.target.value);\r\n };\r\n\r\n const handleSearchFields = (searchVal: string) => {\r\n if (searchVal) {\r\n setSelectFields([\r\n ...fields.filter((field) => field.value.includes(searchVal)),\r\n ]);\r\n } else {\r\n setSelectFields(fields);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n handleSearchFields(search);\r\n }, [search]);\r\n\r\n return (\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Field\"\r\n size=\"small\"\r\n labelName=\"Field Type\"\r\n renderValue={(value: string) =>\r\n fields.find((field) => field.value === value)?.label\r\n }\r\n handleSearch={() => handleSearch}\r\n searchPlaceholder=\"Search Attributes\"\r\n searchValue={search}\r\n {...props}\r\n >\r\n {selectFields.map((field) => (\r\n <MenuItem value={field.value} onKeyDown={(e) => e.stopPropagation()}>\r\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\r\n {field.icon && <field.icon fontSize=\"small\" />}\r\n <Typography type=\"s3\" color=\"theme.secondary.1000\">\r\n {field.label}\r\n </Typography>\r\n </Stack>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n );\r\n};\r\n\r\nexport default FieldSelect;\r\n","// React imports\r\nimport { useCallback, useEffect, useState, useMemo, useRef } from \"react\";\r\n\r\n// Material UI imports\r\nimport {\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n IconButton,\r\n MenuItem,\r\n Box,\r\n FormControlLabel,\r\n FormControl,\r\n Slider,\r\n} from \"@mui/material\";\r\nimport { Add, Close } from \"@mui/icons-material\";\r\n\r\n// ERP Common imports\r\nimport Button from \"@/components/button/button\";\r\nimport Modal from \"@/components/modal/modal\";\r\nimport Typography from \"@/components/typography/typography\";\r\nimport TextField from \"@/components/text-field/text-field\";\r\nimport Select from \"@/components/select/select\";\r\nimport Checkbox from \"@/components/checkbox/checkbox\";\r\nimport formatText from \"@/utils/format-text\";\r\n\r\n// Local imports\r\nimport FieldSelect from \"./field-select\";\r\nimport { IElementJson } from \"../custom-form\";\r\nimport { ApiFormFields } from \"../../Redux/state\";\r\nimport \"../custom-form.scss\";\r\n\r\ninterface Option {\r\n label: string;\r\n value: string;\r\n}\r\n\r\ninterface ITextEditFormProps {\r\n handleWidthChange: (value?: number) => void;\r\n handleColumnSelect: (value?: number) => void;\r\n handlePropertyValueUpdate: (\r\n event?: React.ChangeEvent<HTMLInputElement>,\r\n numberValue?: number,\r\n value?: any,\r\n fieldType?: string,\r\n ) => void;\r\n element: IElementJson | null;\r\n fields: ApiFormFields | null;\r\n}\r\n\r\n// Constants moved outside to prevent re-creation\r\nconst COLUMN_PER_ROW_OPTIONS = [1, 2, 3, 4, 5, 6] as const;\r\nconst SELECT_OPTIONS = [\r\n { text: \"12 Hour\", value: \"12hr\" },\r\n { text: \"24 Hour\", value: \"24hr\" },\r\n] as const;\r\nconst CURRENCY_OPTIONS = [\r\n { text: \"INR (India)\", value: \"inr\" },\r\n { text: \"USD (US)\", value: \"usd\" },\r\n] as const;\r\n\r\nconst FIELDS_WITHOUT_PLACEHOLDER = new Set([\r\n \"time\", \"file\", \"geoLocation\", \"image\", \"info\", \"relation\"\r\n]);\r\nconst FIELDS_WITH_MIN_MAX = new Set([\"text\", \"number\"]);\r\n\r\n// Memoized components to prevent unnecessary re-renders\r\nconst MemoizedMenuItem = ({ option, index, prefix }: { option: any; index: number; prefix: string }) => (\r\n <MenuItem key={`${prefix}-${index}`} value={option.value}>\r\n {option.text || option.label}\r\n </MenuItem>\r\n);\r\n\r\nconst MemoizedRelationMenuItem = ({ option, index, prefix }: { option: Option; index: number; prefix: string }) => (\r\n <MenuItem key={`${prefix}-${index}`} value={option.value}>\r\n <Typography type=\"s3\" color=\"theme.secondary.1000\">\r\n {option.label}\r\n </Typography>\r\n </MenuItem>\r\n);\r\n\r\nexport function TextEditForm(props: ITextEditFormProps) {\r\n const { \r\n handlePropertyValueUpdate, \r\n handleColumnSelect, \r\n handleWidthChange, \r\n fields, \r\n element \r\n } = props;\r\n\r\n // State management - optimized to prevent unnecessary re-renders\r\n const [elementJSON, setElementJSON] = useState<IElementJson | null>(element);\r\n const [openModal, setOpenModal] = useState(false);\r\n const [relationFields, setRelationFields] = useState<Option[]>([]);\r\n const [functionValue, setFunctionValue] = useState(\"\");\r\n \r\n // Use refs to track previous values and prevent unnecessary updates\r\n const prevElementRef = useRef<IElementJson | null>(element);\r\n const prevFieldsRef = useRef<ApiFormFields | null>(fields);\r\n\r\n // Memoized relation modules with deep comparison prevention\r\n const relationModulesOptions = useMemo(() => {\r\n if (!fields || fields === prevFieldsRef.current) {\r\n if (prevFieldsRef.current && fields) return prevFieldsRef.current;\r\n }\r\n \r\n prevFieldsRef.current = fields;\r\n \r\n if (!fields) return [];\r\n return Object.keys(fields).map((key) => ({\r\n label: formatText(key),\r\n value: key,\r\n }));\r\n }, [fields]);\r\n\r\n // Optimized relation fields setter with memoization\r\n const setRelationFieldsOptions = useCallback(\r\n (moduleValue?: string) => {\r\n if (!fields || !moduleValue) {\r\n setRelationFields(prev => prev.length > 0 ? [] : prev);\r\n return;\r\n }\r\n\r\n const fieldsArr = fields[moduleValue];\r\n if (fieldsArr?.length) {\r\n const options = fieldsArr.map((field) => ({\r\n label: field.field,\r\n value: field.field,\r\n }));\r\n \r\n // Only update if options actually changed\r\n setRelationFields(prev => {\r\n if (prev.length !== options.length) return options;\r\n const isDifferent = prev.some((item, idx) => \r\n item.value !== options[idx]?.value || item.label !== options[idx]?.label\r\n );\r\n return isDifferent ? options : prev;\r\n });\r\n } else {\r\n setRelationFields(prev => prev.length > 0 ? [] : prev);\r\n }\r\n },\r\n [fields]\r\n );\r\n\r\n // Memoized event handlers to prevent child re-renders\r\n const handleSave = useCallback((value: string) => {\r\n if (!elementJSON) return;\r\n \r\n // Only update if value actually changed\r\n if (elementJSON.default_value !== value) {\r\n const updatedElement = { ...elementJSON, default_value: value };\r\n setElementJSON(updatedElement);\r\n handlePropertyValueUpdate(null, null, value);\r\n }\r\n \r\n if (value) {\r\n setFunctionValue(\"\");\r\n setOpenModal(false);\r\n }\r\n }, [elementJSON, handlePropertyValueUpdate]);\r\n\r\n const handleFieldUpdate = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!elementJSON) return;\r\n \r\n const fieldType = e.target.value;\r\n if (elementJSON.field_type !== fieldType) {\r\n const updatedElement = { ...elementJSON, field_type: fieldType };\r\n setElementJSON(updatedElement);\r\n handlePropertyValueUpdate(null, null, null, e.target.value);\r\n }\r\n }, [elementJSON, handlePropertyValueUpdate]);\r\n\r\n const handleSelectUpdate = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!elementJSON) return;\r\n \r\n const option = e.target.value;\r\n if (elementJSON.option !== option) {\r\n const updatedElement = { ...elementJSON, option };\r\n setElementJSON(updatedElement);\r\n handlePropertyValueUpdate(null, null, option);\r\n }\r\n }, [elementJSON, handlePropertyValueUpdate]);\r\n\r\n const handleModuleSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const moduleValue = e.target.value;\r\n if (elementJSON?.module !== moduleValue) {\r\n setRelationFieldsOptions(moduleValue);\r\n handlePropertyValueUpdate(e);\r\n }\r\n }, [elementJSON?.module, setRelationFieldsOptions, handlePropertyValueUpdate]);\r\n\r\n const handleWidthSliderChange = useCallback((_: Event, value: number | number[]) => {\r\n if (!elementJSON) return;\r\n \r\n const widthValue = Array.isArray(value) ? value[0] : value;\r\n if (elementJSON.custom_width !== widthValue) {\r\n const updatedElement = { ...elementJSON, custom_width: widthValue };\r\n setElementJSON(updatedElement);\r\n handleWidthChange(widthValue);\r\n }\r\n }, [elementJSON, handleWidthChange]);\r\n\r\n const handleFullWidthChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!elementJSON) return;\r\n \r\n const isFullWidth = e.target.checked;\r\n if (elementJSON.is_fullwidth !== isFullWidth) {\r\n const updatedElement = { ...elementJSON, is_fullwidth: isFullWidth };\r\n setElementJSON(updatedElement);\r\n handlePropertyValueUpdate(e);\r\n }\r\n }, [elementJSON, handlePropertyValueUpdate]);\r\n\r\n const handleColumnSelectChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const columnValue = Number(e.target.value);\r\n handleColumnSelect(columnValue);\r\n }, [handleColumnSelect]);\r\n\r\n // Memoized helper functions\r\n const getDefaultValue = useCallback((elementJSON: IElementJson) => {\r\n if ([\"number\", \"currency\", \"geoLocation\"].includes(elementJSON.field_type)) {\r\n return elementJSON.default_value?.toString().replace(/[^0-9]/g, \"\") || \"\";\r\n }\r\n return elementJSON.default_value || \"\";\r\n }, []);\r\n\r\n const getMinMaxLabels = useCallback((fieldType: string) => {\r\n return fieldType === \"text\" \r\n ? { min: \"Min character count (with spaces)\", max: \"Max character count (with spaces)\" }\r\n : { min: \"Min number\", max: \"Max number\" };\r\n }, []);\r\n\r\n // Modal handlers\r\n const handleOpenModal = useCallback(() => setOpenModal(true), []);\r\n const handleCloseModal = useCallback(() => {\r\n setOpenModal(false);\r\n setFunctionValue(\"\");\r\n }, []);\r\n\r\n const handleFunctionValueChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n setFunctionValue(e.target.value);\r\n }, []);\r\n\r\n // Optimized effects with proper dependency arrays\r\n useEffect(() => {\r\n // Only update if element actually changed\r\n if (element !== prevElementRef.current) {\r\n setElementJSON(element);\r\n prevElementRef.current = element;\r\n \r\n if (element?.module) {\r\n setRelationFieldsOptions(element.module);\r\n }\r\n }\r\n }, [element, setRelationFieldsOptions]);\r\n\r\n // Memoized render sections to prevent unnecessary re-computation\r\n const currencySelectSection = useMemo(() => {\r\n if (elementJSON?.field_type !== \"currency\") return null;\r\n \r\n return (\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Currency\"\r\n size=\"small\"\r\n onChange={handleSelectUpdate}\r\n defaultValue={elementJSON.option}\r\n label=\"Currency\"\r\n name=\"option\"\r\n variant=\"outlined\"\r\n >\r\n {CURRENCY_OPTIONS.map((option, index) => (\r\n <MemoizedMenuItem \r\n key={`currency-${index}`}\r\n option={option} \r\n index={index} \r\n prefix=\"currency\" \r\n />\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n );\r\n }, [elementJSON?.field_type, elementJSON?.option, handleSelectUpdate]);\r\n\r\n const timeSelectSection = useMemo(() => {\r\n if (elementJSON?.field_type !== \"time\") return null;\r\n \r\n return (\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Time Format\"\r\n size=\"small\"\r\n onChange={handleSelectUpdate}\r\n defaultValue={elementJSON.option}\r\n label=\"Time Format\"\r\n name=\"option\"\r\n variant=\"outlined\"\r\n >\r\n {SELECT_OPTIONS.map((option, index) => (\r\n <MemoizedMenuItem \r\n key={`time-${index}`}\r\n option={option} \r\n index={index} \r\n prefix=\"time\" \r\n />\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n );\r\n }, [elementJSON?.field_type, elementJSON?.option, handleSelectUpdate]);\r\n\r\n const relationSelectSection = useMemo(() => {\r\n if (elementJSON?.field_type !== \"relation\") return null;\r\n \r\n return (\r\n <>\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder={\r\n relationModulesOptions.length\r\n ? \"Select Relation Module\"\r\n : \"No data available\"\r\n }\r\n size=\"small\"\r\n onChange={handleModuleSelect}\r\n value={elementJSON.module || \"\"}\r\n label=\"Relation Module\"\r\n name=\"module\"\r\n >\r\n {relationModulesOptions.length ? (\r\n relationModulesOptions.map((option, index) => (\r\n <MemoizedRelationMenuItem \r\n key={`module-${index}`}\r\n option={option} \r\n index={index} \r\n prefix=\"module\" \r\n />\r\n ))\r\n ) : (\r\n <MenuItem disabled>\r\n <Typography type=\"s3\" color=\"theme.secondary.1000\">\r\n <em>No data available</em>\r\n </Typography>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder={\r\n !elementJSON.module\r\n ? \"Select Module First\"\r\n : relationFields.length\r\n ? \"Select Relation Field\"\r\n : \"No data available\"\r\n }\r\n size=\"small\"\r\n onChange={handlePropertyValueUpdate}\r\n value={elementJSON.field || \"\"}\r\n label=\"Relation Field\"\r\n disabled={!elementJSON.module}\r\n name=\"field\"\r\n >\r\n {relationFields.length ? (\r\n relationFields.map((option, index) => (\r\n <MemoizedRelationMenuItem \r\n key={`field-${index}`}\r\n option={option} \r\n index={index} \r\n prefix=\"field\" \r\n />\r\n ))\r\n ) : (\r\n <MenuItem disabled>\r\n <Typography type=\"s3\" color=\"theme.secondary.1000\">\r\n <em>No data available</em>\r\n </Typography>\r\n </MenuItem>\r\n )}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n </>\r\n );\r\n }, [\r\n elementJSON?.field_type, \r\n elementJSON?.module, \r\n elementJSON?.field,\r\n relationModulesOptions, \r\n relationFields, \r\n handleModuleSelect, \r\n handlePropertyValueUpdate\r\n ]);\r\n\r\n // Early return if no element\r\n if (!elementJSON) {\r\n return null;\r\n }\r\n\r\n const { field_type } = elementJSON;\r\n const minMaxLabels = getMinMaxLabels(field_type);\r\n\r\n return (\r\n <Box className=\"formSection--FieldContainer\">\r\n {/* Field Type Selection */}\r\n <Box>\r\n <FieldSelect\r\n variant=\"outlined\"\r\n onChange={handleFieldUpdate}\r\n defaultValue={field_type}\r\n label=\"Field Type\"\r\n disabled={elementJSON.type === \"system\" || !elementJSON.is_new}\r\n />\r\n </Box>\r\n\r\n {/* Label Field */}\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Label\"\r\n is_required\r\n name=\"label\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.label}\r\n />\r\n </Box>\r\n\r\n {/* File/Image Max Size */}\r\n {(field_type === \"file\" || field_type === \"image\") && (\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Max File Size (in MB)\"\r\n name=\"max_size\"\r\n type=\"number\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.max_size}\r\n />\r\n </Box>\r\n )}\r\n\r\n {/* Currency Selection - Memoized */}\r\n {currencySelectSection}\r\n\r\n {/* Placeholder and Default Value */}\r\n {!FIELDS_WITHOUT_PLACEHOLDER.has(field_type) && (\r\n <>\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Placeholder\"\r\n name=\"placeholder\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.placeholder}\r\n />\r\n </Box>\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Default Value\"\r\n placeholder=\"Default Value\"\r\n name=\"default_value\"\r\n type={field_type === \"phone\" ? \"tel\" : field_type === \"number\" ? \"number\" : \"text\"}\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={getDefaultValue(elementJSON)}\r\n />\r\n </Box>\r\n </>\r\n )}\r\n\r\n {/* Time Format Selection - Memoized */}\r\n {timeSelectSection}\r\n\r\n {/* Relation Module and Field Selection - Memoized */}\r\n {relationSelectSection}\r\n\r\n {/* Min/Max Length for Text and Number Fields */}\r\n {FIELDS_WITH_MIN_MAX.has(field_type) && (\r\n <>\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label={minMaxLabels.min}\r\n name=\"min_length\"\r\n type=\"number\"\r\n onChange={(e) => handlePropertyValueUpdate(e, Number(e.target.value))}\r\n defaultValue={elementJSON.min_length || elementJSON.min || 1}\r\n />\r\n </Box>\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label={minMaxLabels.max}\r\n name=\"max_length\"\r\n type=\"number\"\r\n onChange={(e) => handlePropertyValueUpdate(e, Number(e.target.value))}\r\n defaultValue={\r\n elementJSON.max_length || \r\n elementJSON.max || \r\n (field_type === 'number' ? 10000 : 255)\r\n }\r\n />\r\n </Box>\r\n </>\r\n )}\r\n\r\n {/* Column Per Row Selection */}\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Column Per Row\"\r\n size=\"small\"\r\n onChange={handleColumnSelectChange}\r\n value={elementJSON.columns_per_row || 1}\r\n label=\"Select Column Per Row\"\r\n name=\"columns_per_row\"\r\n variant=\"outlined\"\r\n >\r\n {COLUMN_PER_ROW_OPTIONS.map((option, index) => (\r\n <MenuItem key={`column-${index}`} value={option}>\r\n {option}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n {/* Width Adjustment Slider */}\r\n <Box>\r\n <Typography sx={{ color: 'black', mb: 1 }}>\r\n Adjust Width:\r\n </Typography>\r\n <Slider\r\n value={elementJSON.custom_width || 12}\r\n name=\"custom_width\"\r\n min={1}\r\n max={12}\r\n step={1}\r\n onChange={handleWidthSliderChange}\r\n aria-labelledby=\"width-slider\"\r\n sx={{ color: \"#4AC08C\" }}\r\n disabled={elementJSON.is_fullwidth}\r\n marks\r\n valueLabelDisplay=\"auto\"\r\n />\r\n </Box>\r\n\r\n {/* Number Field Specific Options */}\r\n {field_type === \"number\" && (\r\n <>\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Float Step\"\r\n name=\"float_step\"\r\n type=\"number\"\r\n step=\"0.01\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.float_step}\r\n />\r\n </Box>\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_negative\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_negative || false}\r\n label=\"Allow Negative Numbers\"\r\n />\r\n </Box>\r\n </>\r\n )}\r\n\r\n {/* Date Field Specific Options */}\r\n {field_type === \"date\" && (\r\n <>\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_future_dates_allowed\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_future_dates_allowed || false}\r\n label=\"Allow Future Dates\"\r\n />\r\n </Box>\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_past_dates_allowed\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_past_dates_allowed || false}\r\n label=\"Allow Past Dates\"\r\n />\r\n </Box>\r\n </>\r\n )}\r\n\r\n {/* Required Field Checkbox */}\r\n {field_type !== \"info\" && (\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_required\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_required || false}\r\n label=\"This field is required\"\r\n />\r\n </Box>\r\n )}\r\n\r\n {/* Email Unique Checkbox */}\r\n {field_type === \"email\" && (\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_unique\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_unique || false}\r\n label=\"Is Unique\"\r\n />\r\n </Box>\r\n )}\r\n\r\n {/* Text Multiline Checkbox */}\r\n {field_type === \"text\" && (\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_multiline\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_multiline || false}\r\n label=\"Is Multiline\"\r\n />\r\n </Box>\r\n )}\r\n\r\n {/* Full Width Checkbox */}\r\n <Box>\r\n <FormControlLabel\r\n name=\"is_fullwidth\"\r\n control={<Checkbox />}\r\n onChange={handleFullWidthChange}\r\n checked={elementJSON.is_fullwidth || false}\r\n label=\"Full Width\"\r\n />\r\n </Box>\r\n\r\n {/* Info Field Function Button */}\r\n {field_type === \"info\" && (\r\n <Box>\r\n <Button\r\n variant=\"outlined\"\r\n startIcon={<Add />}\r\n onClick={handleOpenModal}\r\n className=\"formSection--PreviewButton\"\r\n >\r\n Add Function\r\n </Button>\r\n </Box>\r\n )}\r\n\r\n {/* Function Modal */}\r\n <Modal fullWidth onClose={handleCloseModal} open={openModal}>\r\n <DialogTitle>\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n Add Function\r\n </Typography>\r\n <IconButton\r\n edge=\"end\"\r\n onClick={handleCloseModal}\r\n size=\"small\"\r\n >\r\n <Close fontSize=\"inherit\" />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent dividers>\r\n <Typography weight=\"medium\" type=\"s3\" color=\"theme.secondary.700\" sx={{ mb: 2 }}>\r\n Label: <span style={{ color: \"#1F2125\" }}>{elementJSON.label}</span>\r\n </Typography>\r\n <TextField\r\n name=\"default_value\"\r\n fullWidth\r\n placeholder=\"Add a function\"\r\n multiline\r\n minRows={4}\r\n defaultValue={elementJSON.default_value}\r\n onChange={handleFunctionValueChange}\r\n value={functionValue}\r\n />\r\n </DialogContent>\r\n <DialogActions>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={handleCloseModal}\r\n style={{ color: \"black\" }}\r\n >\r\n Cancel\r\n </Button>\r\n <Button onClick={() => handleSave(functionValue)}>\r\n Save\r\n </Button>\r\n </DialogActions>\r\n </Modal>\r\n </Box>\r\n );\r\n}\r\n\r\nexport default TextEditForm;","// React imports\r\nimport React, { useEffect, useState, useCallback, useMemo } from \"react\";\r\n\r\n// Material UI imports\r\nimport { \r\n MenuItem, \r\n Box, \r\n FormControlLabel, \r\n Slider, \r\n FormControl, \r\n IconButton\r\n} from \"@mui/material\";\r\nimport { Add } from \"@mui/icons-material\";\r\n\r\n// Third-party imports\r\nimport { enqueueSnackbar } from \"notistack\";\r\n\r\n// ERP Common imports\r\nimport Checkbox from \"@/components/checkbox/checkbox\";\r\nimport Select from \"@/components/select/select\";\r\nimport TextField from \"@/components/text-field/text-field\";\r\nimport Typography from \"@/components/typography/typography\";\r\nimport Button from \"@/components/button/button\";\r\nimport { Trash } from \"@/components/icons\";\r\n\r\n// Local imports\r\nimport FieldSelect from \"./field-select\";\r\nimport \"../custom-form.scss\";\r\n\r\ninterface Option {\r\n label: string;\r\n value: string;\r\n [key: string]: string;\r\n}\r\n\r\ninterface ElementJSON {\r\n id: string;\r\n field_type: string;\r\n label: string;\r\n placeholder: string;\r\n default_value: string | null;\r\n is_multiselect: boolean;\r\n is_required: boolean;\r\n is_unique: boolean;\r\n is_fullwidth: boolean;\r\n custom_width: number;\r\n type?: string;\r\n is_new?: boolean;\r\n options: Option[];\r\n}\r\n\r\ninterface SelectEditFormProps {\r\n element: ElementJSON;\r\n handlePropertyValueUpdate: (\r\n event: React.ChangeEvent<HTMLInputElement> | null,\r\n name?: string | null,\r\n value?: any,\r\n fieldType?: string\r\n ) => void;\r\n handleSelectOptionValueUpdate: (options: Option[]) => void;\r\n handleColumnSelect: (event: React.ChangeEvent<{ value: unknown }>) => void;\r\n handleWidthChange: (value: number | number[]) => void;\r\n}\r\n\r\nconst COLUMN_PER_ROW_OPTIONS = [1, 2, 3, 4, 5, 6] as const;\r\n\r\nexport const SelectEditForm: React.FC<SelectEditFormProps> = React.memo(({\r\n element,\r\n handlePropertyValueUpdate,\r\n handleSelectOptionValueUpdate,\r\n handleColumnSelect,\r\n handleWidthChange\r\n}) => {\r\n // Local state management\r\n const [selectOptions, setSelectOptions] = useState<Option[]>(element.options || []);\r\n const [newOption, setNewOption] = useState<Option>({ label: \"\", value: \"\" });\r\n const [isAddingOption, setIsAddingOption] = useState(false);\r\n\r\n // Sync options with parent element when element changes\r\n useEffect(() => {\r\n if (JSON.stringify(selectOptions) !== JSON.stringify(element.options || [])) {\r\n setSelectOptions(element.options || []);\r\n }\r\n }, [element.options, selectOptions]);\r\n\r\n // Memoized computed values\r\n const isFieldDisabled = useMemo(() => \r\n element.type === \"system\" || !element.is_new, \r\n [element.type, element.is_new]\r\n );\r\n\r\n const selectedOptionLabel = useMemo(() => {\r\n const selectedOption = selectOptions.find(option => option.value === element.default_value);\r\n return selectedOption?.label || \"Select Default\";\r\n }, [selectOptions, element.default_value]);\r\n\r\n // Optimized event handlers with useCallback\r\n const handleFieldUpdate = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n handlePropertyValueUpdate(null, null, null, e.target.value);\r\n }, [handlePropertyValueUpdate]);\r\n\r\n const handleSelectUpdate = useCallback((e: React.ChangeEvent<{ value: unknown }>) => {\r\n handlePropertyValueUpdate(null, null, e.target.value);\r\n }, [handlePropertyValueUpdate]);\r\n\r\n const handleMultiSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const isChecked = e.target.checked;\r\n // Reset default value when enabling multiselect\r\n const defaultValue = isChecked ? null : element.default_value;\r\n \r\n // Create a synthetic event for the property update\r\n const syntheticEvent = {\r\n target: {\r\n name: 'is_multiselect',\r\n checked: isChecked,\r\n value: isChecked\r\n }\r\n } as React.ChangeEvent<HTMLInputElement>;\r\n \r\n handlePropertyValueUpdate(syntheticEvent);\r\n \r\n // If enabling multiselect, also clear the default value\r\n if (isChecked && element.default_value) {\r\n handlePropertyValueUpdate(null, 'default_value', null);\r\n }\r\n }, [handlePropertyValueUpdate, element.default_value]);\r\n\r\n const handleNewOptionChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const { name, value } = e.target;\r\n setNewOption(prev => ({ ...prev, [name]: value }));\r\n }, []);\r\n\r\n const handleAddOption = useCallback(() => {\r\n if (!newOption.label.trim() || !newOption.value.trim()) {\r\n return; // Don't add empty options\r\n }\r\n\r\n // Check for duplicate values\r\n const isDuplicate = selectOptions.some(option => \r\n option.value === newOption.value || option.label === newOption.label\r\n );\r\n \r\n if (isDuplicate) {\r\n // Could show an error message here\r\n enqueueSnackbar(\"Option with this value or label already exists.\", { variant: \"error\" });\r\n return;\r\n }\r\n\r\n const updatedOptions = [...selectOptions, { ...newOption }];\r\n setSelectOptions(updatedOptions);\r\n handleSelectOptionValueUpdate(updatedOptions);\r\n \r\n // Reset form\r\n setNewOption({ label: \"\", value: \"\" });\r\n setIsAddingOption(false);\r\n }, [newOption, selectOptions, handleSelectOptionValueUpdate]);\r\n\r\n const handleRemoveOption = useCallback((indexToRemove: number) => {\r\n const updatedOptions = selectOptions.filter((_, index) => index !== indexToRemove);\r\n setSelectOptions(updatedOptions);\r\n handleSelectOptionValueUpdate(updatedOptions);\r\n \r\n // Clear default value if the removed option was selected\r\n const removedOption = selectOptions[indexToRemove];\r\n if (element.default_value === removedOption?.value) {\r\n handlePropertyValueUpdate(null, 'default_value', null);\r\n }\r\n }, [selectOptions, handleSelectOptionValueUpdate, element.default_value, handlePropertyValueUpdate]);\r\n\r\n const handleWidthChangeCallback = useCallback((\r\n _: Event, \r\n newValue: number | number[]\r\n ) => {\r\n handleWidthChange(newValue);\r\n }, [handleWidthChange]);\r\n\r\n return (\r\n <Box className=\"formSection--FieldContainer\">\r\n {/* Field Type Selection */}\r\n <Box>\r\n <FieldSelect\r\n variant=\"outlined\"\r\n onChange={handleFieldUpdate}\r\n defaultValue={element.field_type}\r\n label=\"Field Type\"\r\n disabled={isFieldDisabled}\r\n />\r\n </Box>\r\n\r\n {/* Label Field */}\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Label\"\r\n is_required\r\n name=\"label\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={element.label}\r\n />\r\n </Box>\r\n\r\n {/* Placeholder Field */}\r\n <Box>\r\n <TextField\r\n fullWidth\r\n label=\"Placeholder\"\r\n is_required\r\n name=\"placeholder\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={element.placeholder}\r\n />\r\n </Box>\r\n\r\n {/* Default Value Selection */}\r\n <Box>\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Default\"\r\n size=\"small\"\r\n name=\"default_value\"\r\n onChange={handleSelectUpdate}\r\n value={element.default_value || \"\"}\r\n label=\"Default\"\r\n variant=\"outlined\"\r\n disabled={element.is_multiselect}\r\n renderValue={() => selectedOptionLabel}\r\n >\r\n {selectOptions.map((option, index) => (\r\n <MenuItem key={`${option.value}-${index}`} value={option.value}>\r\n {option.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Box>\r\n\r\n {/* Column Per Row Selection */}\r\n <Box>\r\n <FormControl fullWidth>\r\n <Select\r\n fullWidth\r\n placeholder=\"Select Column Per Row\"\r\n size=\"small\"\r\n onChange={handleColumnSelect}\r\n label=\"Select Column Per Row\"\r\n name=\"columnPerRow\"\r\n variant=\"outlined\"\r\n >\r\n {COLUMN_PER_ROW_OPTIONS.map((option) => (\r\n <MenuItem key={option} value={option}>\r\n {option}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n {/* Width Slider */}\r\n <Box>\r\n <Typography sx={{ color: 'black', mb: 1 }}>\r\n Adjust Width:\r\n </Typography>\r\n <Box pr={2}>\r\n <Slider\r\n value={element.custom_width || 6}\r\n min={1}\r\n max={12}\r\n step={1}\r\n onChange={handleWidthChangeCallback}\r\n aria-labelledby=\"width-slider\"\r\n sx={{ color: \"#4AC08C\" }}\r\n marks\r\n valueLabelDisplay=\"auto\"\r\n />\r\n </Box>\r\n </Box>\r\n\r\n {/* Options Management */}\r\n <Box className=\"formSection--SelectOption\">\r\n <Typography \r\n type=\"s5\" \r\n weight=\"medium\" \r\n color=\"theme.secondary.800\"\r\n sx={{ mb: 0.5 }}\r\n >\r\n Options\r\n </Typography>\r\n \r\n {/* Existing Options */}\r\n {selectOptions.map((option, index) => (\r\n <Box key={`option-${index}`} sx={{ mb: 1, display: 'flex', gap: 1 }}>\r\n <TextField\r\n fullWidth\r\n value={`${option.label} (${option.value})`}\r\n InputProps={{ readOnly: true }}\r\n />\r\n <IconButton\r\n color=\"error\"\r\n size=\"small\"\r\n onClick={() => handleRemoveOption(index)}\r\n >\r\n <Trash />\r\n </IconButton>\r\n </Box>\r\n ))}\r\n\r\n {/* Add New Option Form */}\r\n {isAddingOption && (\r\n <Box className=\"formSection--SelectOption\" sx={{ mt:0.5, p: 2, border: '1px solid #ddd', borderRadius: 1 }}>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Option Label\"\r\n is_required\r\n name=\"label\"\r\n type=\"text\"\r\n placeholder=\"Enter option label\"\r\n value={newOption.label}\r\n onChange={handleNewOptionChange}\r\n />\r\n </Box>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Option Value\"\r\n placeholder=\"Enter option value\"\r\n is_required\r\n name=\"value\"\r\n type=\"text\"\r\n value={newOption.value}\r\n onChange={handleNewOptionChange}\r\n />\r\n </Box>\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n <Button\r\n onClick={handleAddOption}\r\n // className=\"formSection--Button\"\r\n startIcon={<Add />}\r\n disabled={!newOption.label.trim() || !newOption.value.trim()}\r\n >\r\n Add Option\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n setIsAddingOption(false);\r\n setNewOption({ label: \"\", value: \"\" });\r\n }}\r\n variant=\"outlined\"\r\n >\r\n Cancel\r\n </Button>\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n {/* Add Option Button */}\r\n {!isAddingOption && (\r\n <Button\r\n onClick={() => setIsAddingOption(true)}\r\n variant=\"outlined\"\r\n className=\"formSection--Button\"\r\n startIcon={<Add />}\r\n sx={{ mt: 1 }}\r\n >\r\n Add Option\r\n </Button>\r\n )}\r\n </Box>\r\n\r\n {/* Form Controls */}\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\r\n <FormControlLabel\r\n name=\"is_multiselect\"\r\n control={<Checkbox />}\r\n onChange={handleMultiSelect}\r\n checked={element.is_multiselect}\r\n label=\"Enable Multi Select\"\r\n />\r\n\r\n <FormControlLabel\r\n name=\"is_required\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={element.is_required}\r\n label=\"This field is required\"\r\n />\r\n\r\n <FormControlLabel\r\n name=\"is_unique\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={element.is_unique}\r\n label=\"Is Unique\"\r\n />\r\n\r\n <FormControlLabel\r\n name=\"is_fullwidth\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={element.is_fullwidth}\r\n label=\"Full Width\"\r\n />\r\n </Box>\r\n </Box>\r\n );\r\n});\r\n\r\nSelectEditForm.displayName = 'SelectEditForm';\r\n\r\nexport default SelectEditForm;","// React imports\r\nimport { useEffect, useMemo, useState } from \"react\";\r\n\r\n// Material UI imports\r\nimport { MenuItem, Box, FormControlLabel } from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport { Add } from \"@mui/icons-material\";\r\n\r\n// ERP Common imports\r\nimport Select from \"@/components/select/select\";\r\nimport Button from \"@/components/button/button\";\r\nimport Typography from \"@/components/typography/typography\";\r\nimport TextField from \"@/components/text-field/text-field\";\r\nimport Checkbox from \"@/components/checkbox/checkbox\";\r\nimport { generateRandomId } from \"@/utils/common\";\r\nimport { SECTION_TYPES } from \"@/utils/constant\";\r\n\r\n// Local imports\r\nimport { ISwitcherForms } from \"../field_properties\";\r\nimport \"../custom-form.scss\";\r\n\r\nconst SectionEditForm = (props: any) => {\r\n const { handlePropertyValueUpdate } = props;\r\n const [elementJSON, setElementJSON] = useState(props.element);\r\n const [addForm, setAddForm] = useState<boolean>(false);\r\n const [newForm, setNewForm] = useState<string>(\"\");\r\n const selectOption = [\"section\"];\r\n\r\n const isDuplicateFormName = useMemo(\r\n () =>\r\n elementJSON.switcher_forms?.map((ele: any) => ele.name).includes(newForm),\r\n [elementJSON.switcher_forms, newForm]\r\n );\r\n\r\n useEffect(() => {\r\n setElementJSON(props.element);\r\n }, [props.element]);\r\n\r\n return (\r\n <Box className=\"formSection--FieldContainer\" key={elementJSON.id}>\r\n <div>\r\n <Select\r\n key={elementJSON.id}\r\n fullWidth\r\n placeholder=\"Select Field\"\r\n size=\"small\"\r\n disabled\r\n defaultValue={elementJSON.field_type}\r\n label=\"Field Type\"\r\n variant=\"outlined\"\r\n >\r\n {selectOption?.map((item) => (\r\n <MenuItem value={item}>{item}</MenuItem>\r\n ))}\r\n </Select>\r\n </div>\r\n <div>\r\n <Select\r\n key={elementJSON.id}\r\n fullWidth\r\n placeholder=\"Select Field\"\r\n size=\"small\"\r\n name=\"section_type\"\r\n defaultValue={elementJSON.section_type}\r\n label=\"Section Type\"\r\n variant=\"outlined\"\r\n onChange={(e: any) => handlePropertyValueUpdate(e)}\r\n >\r\n {Object.values(SECTION_TYPES).map((type) => {\r\n return (\r\n <MenuItem key={type} value={type}>\r\n {type}\r\n </MenuItem>\r\n );\r\n })}\r\n </Select>\r\n </div>\r\n <div>\r\n <TextField\r\n fullWidth\r\n label=\"Label\"\r\n is_required\r\n key={elementJSON.id}\r\n name=\"label\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.label}\r\n />\r\n </div>\r\n <FormControlLabel\r\n key={elementJSON.id}\r\n name=\"is_accordion\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_accordion}\r\n label=\"Is Accordion\"\r\n />\r\n {elementJSON.section_type === SECTION_TYPES.FORM_SWITCH_SECTION ? (\r\n <div className=\"formSection--SubFieldContainer\">\r\n <div>\r\n <TextField\r\n fullWidth\r\n label=\"Form label\"\r\n is_required\r\n key={elementJSON.id}\r\n name=\"form_switcher_label\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.form_switcher_label}\r\n />\r\n </div>\r\n <div>\r\n <Typography\r\n type=\"s5\"\r\n weight={\"medium\"}\r\n color={\"theme.secondary.800\"}\r\n >\r\n Forms\r\n </Typography>\r\n {elementJSON?.switcher_forms?.map(\r\n (ele: ISwitcherForms) => (\r\n <div className=\"formSection--MultiOptions\" key={elementJSON.id}>\r\n <TextField\r\n fullWidth\r\n key={ele.id}\r\n value={ele.name}\r\n style={{ marginBottom: \"10px\" }}\r\n name=\"switcher_forms\"\r\n onChange={(e: any) => {\r\n const newVal = elementJSON.switcher_forms?.map(\r\n (formEle: ISwitcherForms) =>\r\n ele.id === formEle.id\r\n ? { ...formEle, name: e.target.value }\r\n : { ...formEle }\r\n );\r\n\r\n handlePropertyValueUpdate(e, newVal);\r\n }}\r\n />\r\n <CloseIcon\r\n style={{ fontSize: \"1rem\", color: \"#656669\" }}\r\n onClick={(e: any) => {\r\n const newVal = [...elementJSON.switcher_forms].filter(\r\n (item) => item.id !== ele.id\r\n );\r\n e.target.name = \"switcher_forms\";\r\n handlePropertyValueUpdate(e, newVal);\r\n }}\r\n />\r\n </div>\r\n )\r\n )}\r\n </div>\r\n {addForm ? (\r\n <div>\r\n <div\r\n className=\"formSection--MultiOptions formSection--FullWidth\"\r\n key={elementJSON.id}\r\n >\r\n <div className=\"formSection--FullWidth\">\r\n <TextField\r\n fullWidth\r\n label=\"Form section name\"\r\n placeholder=\"Form section name\"\r\n is_required\r\n key={elementJSON.id}\r\n type=\"text\"\r\n value={newForm}\r\n error={isDuplicateFormName}\r\n helperText={\r\n isDuplicateFormName\r\n ? \"Form section name can not duplicate\"\r\n : \"\"\r\n }\r\n onChange={(e: any) => setNewForm(e.target.value)}\r\n />\r\n </div>\r\n <CloseIcon\r\n style={{ fontSize: \"1rem\", color: \"#656669\" }}\r\n onClick={() => {\r\n setAddForm(false);\r\n setNewForm(\"\");\r\n }}\r\n />\r\n </div>\r\n <Button\r\n onClick={(e: any) => {\r\n const { uniqueStringId: id } = generateRandomId();\r\n const newVal = [\r\n ...elementJSON.switcher_forms,\r\n { name: newForm, id },\r\n ];\r\n handlePropertyValueUpdate(e, newVal);\r\n setNewForm(\"\");\r\n setAddForm(false);\r\n }}\r\n name=\"switcher_forms\"\r\n variant=\"text\"\r\n className=\"formSection--Button\"\r\n disabled={isDuplicateFormName || !newForm}\r\n startIcon={<Add />}\r\n >\r\n Add\r\n </Button>\r\n </div>\r\n ) : null}\r\n {!addForm ? (\r\n <Button\r\n onClick={() => setAddForm(true)}\r\n variant=\"text\"\r\n className=\"formSection--Button\"\r\n startIcon={<Add />}\r\n >\r\n Add forms\r\n </Button>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n </Box>\r\n );\r\n};\r\n\r\nexport { SectionEditForm };\r\nexport default SectionEditForm;\r\n","// React imports\r\nimport { useEffect, useState } from \"react\";\r\n\r\n// Material UI imports\r\nimport {\r\n MenuItem,\r\n Box,\r\n FormControlLabel,\r\n FormControl,\r\n RadioGroup,\r\n Button,\r\n Select,\r\n InputLabel,\r\n Slider,\r\n} from \"@mui/material\";\r\nimport { Add } from \"@mui/icons-material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\n// ERP Common imports\r\nimport Checkbox from \"@/components/checkbox/checkbox\";\r\nimport Radio from \"@/components/radio/radio\";\r\nimport TextField from \"@/components/text-field/text-field\";\r\nimport Typography from \"@/components/typography/typography\";\r\n\r\n// Local imports\r\nimport FieldSelect from \"./field-select\";\r\nimport \"../custom-form.scss\";\r\n\r\ninterface Option {\r\n label: string;\r\n value: string;\r\n is_checked: boolean;\r\n [key: string]: string | boolean; // Index signature to allow any string property\r\n}\r\n\r\nexport function CheckboxEditForm(props: any) {\r\n const [isAddSelectOption, setAddSelectOption] = useState(false);\r\n const { handlePropertyValueUpdate, handleSelectOptionValueUpdate , handleColumnSelect , handleWidthChange } = props;\r\n const columnPerRowOptions = [1, 2, 3, 4, 5, 6];\r\n const [selectOptions, setSelectOptions] = useState(\r\n props.element.options || [],\r\n );\r\n const [elementJSON, setElementJSON] = useState(props.element);\r\n\r\n const allowLabelPositionModification =\r\n elementJSON.field_type !== \"radioButton\";\r\n\r\n const [newOptions, setNewOptions] = useState<Option>({\r\n label: \"\",\r\n value: \"\",\r\n is_checked: false,\r\n });\r\n\r\n\r\n\r\n const handleAddNewOption = (e: any) => {\r\n const label: string = e.target.name;\r\n const value: string = e.target.value;\r\n const option: Option = { ...newOptions };\r\n option[label] = value;\r\n setNewOptions(option);\r\n };\r\n\r\n const handleFieldUpdate = (e: any) => {\r\n elementJSON.field_type = e.target.value;\r\n handlePropertyValueUpdate(null, null, null, e.target.value);\r\n };\r\n\r\n const handleSelectUpdate = (e: any) => {\r\n elementJSON.default_value = e.target.value;\r\n handlePropertyValueUpdate(null, null, e.target.value);\r\n };\r\n\r\n useEffect(() => {\r\n setElementJSON(props.element);\r\n setSelectOptions(props.element.options || []);\r\n }, [props.element]);\r\n\r\n useEffect(() => {\r\n setNewOptions({ label: \"\", value: \"\", is_checked: false });\r\n setAddSelectOption(false);\r\n handleSelectOptionValueUpdate(selectOptions);\r\n // eslint-disable-next-line\r\n }, [selectOptions]);\r\n\r\n return (\r\n <Box className=\"formSection--FieldContainer\" key={elementJSON.id}>\r\n <div key={elementJSON.id}>\r\n <FieldSelect\r\n key={elementJSON.id}\r\n variant=\"outlined\"\r\n onChange={handleFieldUpdate}\r\n defaultValue={elementJSON.field_type}\r\n label=\"Field Type\"\r\n disabled={elementJSON.type === \"system\" || !elementJSON.is_new}\r\n />\r\n </div>\r\n <div key={elementJSON.id}>\r\n <TextField\r\n fullWidth\r\n label=\"Label\"\r\n is_required\r\n key={elementJSON.id}\r\n name=\"label\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.label}\r\n />\r\n </div>\r\n\r\n <div key={elementJSON.id}>\r\n <Select\r\n variant=\"outlined\"\r\n key={elementJSON.id}\r\n fullWidth\r\n placeholder=\"Select Default\"\r\n size=\"small\"\r\n name=\"options\"\r\n onChange={() => handleSelectUpdate}\r\n defaultValue={elementJSON.default_value}\r\n label=\"Default\"\r\n disabled={!selectOptions.length}\r\n >\r\n {selectOptions?.map((option: any, index: number) => (\r\n <MenuItem key={index} value={option.value}>\r\n {option.label}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </div>\r\n <FormControl>\r\n <Select\r\n key={elementJSON.id}\r\n fullWidth\r\n placeholder=\"Select Column Per Row\"\r\n size=\"small\"\r\n onChange={handleColumnSelect} // need to change\r\n // defaultValue= {} // need to change\r\n label=\"Select Column Per Row\"\r\n name=\"option\"\r\n variant=\"outlined\"\r\n >\r\n {columnPerRowOptions?.map((option: any, index: number) => (\r\n <MenuItem key={index} value={option}>\r\n {option}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n <Box>\r\n <Typography sx={{ color: 'black' }}>Adjust Width:</Typography>\r\n <Slider\r\n value = {elementJSON?.custom_width}\r\n name = \"custom_width\"\r\n min={1}\r\n max={12}\r\n step={1}\r\n onChange={(_, newValue) => handleWidthChange(newValue)}\r\n aria-labelledby=\"width-slider\"\r\n sx = {{color : \"#4AC08C\"}}\r\n />\r\n </Box>\r\n \r\n\r\n <div className=\"formSection--SelectOption\">\r\n <Typography type=\"s5\" weight={\"medium\"} color={\"theme.secondary.800\"}>\r\n Options\r\n </Typography>\r\n {selectOptions.map((option: any, index: number) => (\r\n <div className=\"formSection--MultiOptions\">\r\n <TextField\r\n fullWidth\r\n key={index}\r\n value={`${option.label} (${option.value})`}\r\n InputProps={{\r\n readOnly: true,\r\n }}\r\n />\r\n <CloseIcon\r\n style={{ fontSize: \"1rem\", color: \"#656669\" }}\r\n onClick={() => {\r\n setSelectOptions([\r\n ...selectOptions.filter(\r\n (_: any, filterIndex: number) => filterIndex !== index,\r\n ),\r\n ]);\r\n }}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n {isAddSelectOption ? (\r\n <div className=\"formSection--SelectOption\">\r\n <div>\r\n <TextField\r\n fullWidth\r\n label=\"Label\"\r\n is_required\r\n name=\"label\"\r\n type=\"text\"\r\n placeholder=\"Label\"\r\n defaultValue={newOptions.label}\r\n onChange={handleAddNewOption}\r\n />\r\n </div>\r\n <div>\r\n <TextField\r\n fullWidth\r\n label=\"Value\"\r\n placeholder=\"Value\"\r\n is_required\r\n name=\"value\"\r\n type=\"text\"\r\n defaultValue={newOptions.value}\r\n onChange={handleAddNewOption}\r\n />\r\n </div>\r\n <Button\r\n onClick={() =>\r\n setSelectOptions([...selectOptions, { ...newOptions }])\r\n }\r\n disabled={\r\n !!selectOptions.find(\r\n (ele: Option) => ele.value === newOptions.value,\r\n )\r\n }\r\n variant=\"text\"\r\n className=\"formSection--Button\"\r\n startIcon={<Add />}\r\n >\r\n Add\r\n </Button>\r\n </div>\r\n ) : (\r\n <Button\r\n onClick={() => setAddSelectOption(true)}\r\n variant=\"text\"\r\n className=\"formSection--Button\"\r\n startIcon={<Add />}\r\n >\r\n Add Option\r\n </Button>\r\n )}\r\n\r\n <FormControl>\r\n <Typography type=\"s4\" color=\"theme.secondary.800\">\r\n Display style\r\n </Typography>\r\n <RadioGroup\r\n key={elementJSON.id}\r\n row\r\n aria-labelledby=\"demo-radio-buttons-group-label\"\r\n name=\"display\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.display}\r\n >\r\n <FormControlLabel\r\n value=\"row\"\r\n control={<Radio size=\"small\" />}\r\n label=\"Row\"\r\n slotProps={{ typography: { variant: \"body2\" } }}\r\n />\r\n <FormControlLabel\r\n value=\"column\"\r\n control={<Radio size=\"small\" />}\r\n label=\"Column\"\r\n slotProps={{ typography: { variant: \"body2\" } }}\r\n />\r\n </RadioGroup>\r\n </FormControl>\r\n\r\n <div key={elementJSON.id}>\r\n <TextField\r\n key={elementJSON.id}\r\n fullWidth\r\n label=\"Title\"\r\n is_required\r\n name=\"title\"\r\n type=\"text\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={elementJSON.title}\r\n />\r\n </div>\r\n\r\n <FormControl disabled={!allowLabelPositionModification}>\r\n <Typography type=\"s4\" color=\"theme.secondary.800\">\r\n Title Position\r\n </Typography>\r\n <RadioGroup\r\n key={elementJSON.id}\r\n row\r\n aria-labelledby=\"demo-radio-buttons-group-label\"\r\n name=\"title_position\"\r\n onChange={handlePropertyValueUpdate}\r\n defaultValue={allowLabelPositionModification ? \"end\" : \"\"}\r\n >\r\n <FormControlLabel\r\n value=\"start\"\r\n control={<Radio size=\"small\" />}\r\n label=\"Start\"\r\n slotProps={{ typography: { variant: \"body2\" } }}\r\n />\r\n <FormControlLabel\r\n value=\"end\"\r\n control={<Radio size=\"small\" />}\r\n label=\"End\"\r\n slotProps={{ typography: { variant: \"body2\" } }}\r\n />\r\n </RadioGroup>\r\n </FormControl>\r\n\r\n <FormControlLabel\r\n key={elementJSON.id}\r\n name=\"is_required\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_required}\r\n label=\"This field is required\"\r\n />\r\n <FormControlLabel\r\n key={elementJSON.id}\r\n name=\"is_unique\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate}\r\n checked={elementJSON.is_unique}\r\n label=\"Is Unique\"\r\n />\r\n\r\n <FormControlLabel\r\n key={elementJSON.id}\r\n name=\"is_fullwidth\"\r\n control={<Checkbox />}\r\n onChange={handlePropertyValueUpdate} // need to change this\r\n checked={elementJSON?.is_fullwidth}// need to change \r\n label=\"Full Width \"\r\n />\r\n </Box>\r\n );\r\n}\r\n\r\nexport default CheckboxEditForm;\r\n","// React imports\r\nimport React, { useEffect, useState } from 'react';\r\n\r\n// Material UI imports\r\nimport { MenuItem, Box, SelectChangeEvent } from '@mui/material';\r\n\r\n// Third-party imports\r\nimport { MRT_ColumnDef, MRT_RowData } from 'material-react-table';\r\n\r\n// ERP Common imports\r\nimport Select from '@/components/select/select';\r\nimport TextField from '@/components/text-field/text-field';\r\nimport formatText from '@/utils/format-text';\r\n\r\n// Local imports\r\nimport { IElementJson } from '../custom-form';\r\nimport { ApiFormFields } from '../../Redux/state';\r\nimport FieldSelect from './field-select';\r\nimport '../custom-form.scss';\r\n\r\ninterface ITableEditForm {\r\n\thandlePropertyValueUpdate: (\r\n\t\tevent?: any,\r\n\t\tnumberValue?: any,\r\n\t\tval?: any,\r\n\t\tfieldType?: any\r\n\t) => void;\r\n\thandleColumnsUpdate: (columns: MRT_ColumnDef<MRT_RowData>[]) => void;\r\n\telement: IElementJson | null;\r\n\tfields: ApiFormFields | null;\r\n}\r\n\r\ninterface TableOption {\r\n\tlabel: string;\r\n\tvalue: string;\r\n}\r\n\r\nconst TableEditForm: React.FC<ITableEditForm> = ({\r\n\thandlePropertyValueUpdate,\r\n\telement,\r\n\thandleColumnsUpdate,\r\n\tfields\r\n}) => {\r\n\t/* Local States */\r\n\tconst [elementJSON, setElementJSON] = useState<IElementJson | null>(element);\r\n\tconst [tables, setTables] = useState<TableOption[]>([]);\r\n\r\n\t/* Local Functions */\r\n\tconst handleFieldUpdate = (event: SelectChangeEvent<unknown>) => {\r\n\t\tif (elementJSON) {\r\n\t\t\telementJSON.field_type = event.target.value as string;\r\n\t\t\thandlePropertyValueUpdate(null, null, null, event.target.value as string);\r\n\t\t}\r\n\t};\r\n\tconst handleTableSelect = (event: SelectChangeEvent<unknown>) => {\r\n\t\thandlePropertyValueUpdate(event);\r\n\t};\r\n\r\n\t/* Use Effects */\r\n\tuseEffect(() => {\r\n\t\tsetElementJSON(element);\r\n\t}, [element]);\r\n\tuseEffect(() => {\r\n\t\tif (elementJSON && elementJSON.table && fields) {\r\n\t\t\tconst fieldsArr = fields[elementJSON.table];\r\n\t\t\tlet columns: any[] = [];\r\n\t\t\tif (fieldsArr && fieldsArr?.length) {\r\n\t\t\t\tcolumns = fieldsArr.map((field, index) => ({\r\n\t\t\t\t\theader: formatText(field.field),\r\n\t\t\t\t\taccessorKey: field.field,\r\n\t\t\t\t\tvisible: index > 3 ? false : true,\r\n\t\t\t\t\ttype: field.type\r\n\t\t\t\t}));\r\n\t\t\t} else {\r\n\t\t\t\tcolumns = [\r\n\t\t\t\t\t{ header: 'Column 1', accessorKey: 'column_1', visible: true },\r\n\t\t\t\t\t{ header: 'Column 2', accessorKey: 'column_1', visible: true }\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t\tcolumns && handleColumnsUpdate(columns);\r\n\t\t}\r\n\t}, [elementJSON?.table]);\r\n\tuseEffect(() => {\r\n\t\tif (fields) {\r\n\t\t\tconst options = Object.keys(fields).map((key) => ({\r\n\t\t\t\tlabel: formatText(key),\r\n\t\t\t\tvalue: key\r\n\t\t\t}));\r\n\t\t\tsetTables(options);\r\n\t\t}\r\n\t}, [fields]);\r\n\r\n\tif (!elementJSON) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Box className='formSection--FieldContainer' key={elementJSON.id}>\r\n\t\t\t<div key={elementJSON.id}>\r\n\t\t\t\t<FieldSelect\r\n\t\t\t\t\tkey={elementJSON.id}\r\n\t\t\t\t\tvariant='outlined'\r\n\t\t\t\t\tonChange={handleFieldUpdate}\r\n\t\t\t\t\tdefaultValue={elementJSON.field_type}\r\n\t\t\t\t\tdisabled={elementJSON.type === 'system' || !elementJSON.is_new}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\t\t\t<div key={elementJSON.id}>\r\n\t\t\t\t<TextField\r\n\t\t\t\t\tfullWidth\r\n\t\t\t\t\tlabel='Label'\r\n\t\t\t\t\tis_required\r\n\t\t\t\t\tkey={elementJSON.id}\r\n\t\t\t\t\tname='label'\r\n\t\t\t\t\ttype='text'\r\n\t\t\t\t\tonChange={handlePropertyValueUpdate}\r\n\t\t\t\t\tdefaultValue={elementJSON.label}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div key={elementJSON.id}>\r\n\t\t\t\t<Select\r\n\t\t\t\t\tkey={elementJSON.id}\r\n\t\t\t\t\tvariant='outlined'\r\n\t\t\t\t\tlabel='Table'\r\n\t\t\t\t\tfullWidth\r\n\t\t\t\t\tplaceholder='Select Table'\r\n\t\t\t\t\tsize='small'\r\n\t\t\t\t\tname='table'\r\n\t\t\t\t\tdefaultValue={elementJSON.table}\r\n\t\t\t\t\tdisabled={elementJSON.type === 'system'}\r\n\t\t\t\t\tonChange={handleTableSelect}\r\n\t\t\t\t\trenderValue={(value: string) =>\r\n\t\t\t\t\t\ttables.find((option) => option.value === value)?.label\r\n\t\t\t\t\t}>\r\n\t\t\t\t\t{tables?.map((item) => (\r\n\t\t\t\t\t\t<MenuItem value={item.value}>{item.label}</MenuItem>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Select>\r\n\t\t\t</div>\r\n\t\t</Box>\r\n\t);\r\n};\r\n\r\nexport default TableEditForm;\r\n","// React imports\r\nimport React, { memo, useMemo, useCallback } from 'react';\r\n\r\n// Material UI imports\r\nimport { Grid } from '@mui/material';\r\n\r\n// ERP Common imports - Form builder elements\r\nimport DynamicInput from '@/components/form-control/form-builder/form-builder-element/text';\r\nimport DynamicCheckBox from '@/components/form-control/form-builder/form-builder-element/checkbox';\r\nimport DynamicTable from '@/components/form-control/form-builder/form-builder-element/table';\r\nimport DynamicElementHOC from '@/components/form-control/form-builder/form-builder-element/dynamic-element-hoc';\r\nimport DynamicRadioButton from '@/components/form-control/form-builder/form-builder-element/radio-button';\r\nimport DynamicToggleButton from '@/components/form-control/form-builder/form-builder-element/toggle-button';\r\nimport DynamicInfo from '@/components/form-control/form-builder/form-builder-element/info';\r\nimport DynamicMedia from '@/components/form-control/form-builder/form-builder-element/media';\r\nimport DynamicTime from '@/components/form-control/form-builder/form-builder-element/time';\r\nimport DynamicDate from '@/components/form-control/form-builder/form-builder-element/date';\r\nimport DynamicSelect from '@/components/form-control/form-builder/form-builder-element/select';\r\nimport DynamicPhone from '@/components/form-control/form-builder/form-builder-element/phone';\r\n\r\n// Types\r\ninterface IField {\r\n id: string;\r\n field_type: string;\r\n placeholder?: string;\r\n label: string;\r\n default_value?: any;\r\n is_multiline?: boolean;\r\n is_required?: boolean;\r\n min_length?: number;\r\n max_length?: number;\r\n is_fullwidth?: boolean;\r\n custom_width?: number;\r\n options?: any[];\r\n is_multiselect?: boolean;\r\n is_future_dates_allowed?: boolean;\r\n is_past_dates_allowed?: boolean;\r\n option?: any;\r\n max_size?: number;\r\n title?: string;\r\n display?: string;\r\n title_position?: string;\r\n table_columns?: any[];\r\n float_step?: number;\r\n type: string;\r\n}\r\n\r\ninterface FormFieldsProps {\r\n sectionMembers: IField[];\r\n // Add other required props with proper types\r\n members: IField[];\r\n activeMember?: number;\r\n control: any;\r\n t: (key: string) => string;\r\n element: any;\r\n images: any;\r\n elementJSON?: any;\r\n remove: (index: number) => void;\r\n move: (from: number, to: number) => void;\r\n handleElementSelection: (e: any) => void;\r\n setElementSwap: (value: boolean) => void;\r\n handleDuplicateElement: (index: number) => void;\r\n setSelectedHoc: (value: string) => void;\r\n setActiveMember: (value: number | undefined) => void;\r\n}\r\n\r\n// Field type mapping for better maintainability\r\nconst FIELD_TYPE_MAP = {\r\n TEXT: 'text',\r\n EMAIL: 'email',\r\n NUMBER: 'number',\r\n PHONE: 'phone',\r\n SELECT: 'select',\r\n DATE: 'date',\r\n TIME: 'time',\r\n URL: 'url',\r\n CURRENCY: 'currency',\r\n FILE: 'file',\r\n IMAGE: 'image',\r\n GEO_LOCATION: 'geoLocation',\r\n RELATION: 'relation',\r\n INFO: 'info',\r\n TOGGLE_BUTTON: 'toggleButton',\r\n RADIO_BUTTON: 'radioButton',\r\n TAGS_INPUT: 'tagsInput',\r\n CHECKBOX: 'checkbox',\r\n TABLE: 'table'\r\n} as const;\r\n\r\n// Memoized individual field component\r\nconst FormField = memo<{\r\n field: IField;\r\n index: number;\r\n gridItemSize: number;\r\n activeMember?: number;\r\n control: any;\r\n t: (key: string) => string;\r\n element: any;\r\n images: any;\r\n elementJSON?: any;\r\n remove: (index: number) => void;\r\n move: (from: number, to: number) => void;\r\n handleElementSelection: (e: any) => void;\r\n setElementSwap: (value: boolean) => void;\r\n handleDuplicateElement: (index: number) => void;\r\n setSelectedHoc: (value: string) => void;\r\n setActiveMember: (value: number | undefined) => void;\r\n}>(({\r\n field,\r\n index,\r\n gridItemSize,\r\n activeMember,\r\n control,\r\n t,\r\n element,\r\n images,\r\n elementJSON,\r\n remove,\r\n move,\r\n handleElementSelection,\r\n setElementSwap,\r\n handleDuplicateElement,\r\n setSelectedHoc,\r\n setActiveMember\r\n}) => {\r\n // Common HOC props - memoized to prevent unnecessary re-renders\r\n const hocProps = useMemo(() => ({\r\n activeIndex: activeMember === index,\r\n removeElement: remove,\r\n index,\r\n onClick: handleElementSelection,\r\n swap: move,\r\n elementSwap: () => setElementSwap(true),\r\n handleDuplicate: handleDuplicateElement,\r\n setElementHoc: () => {\r\n setSelectedHoc(\"\");\r\n setActiveMember(undefined);\r\n }\r\n }), [\r\n activeMember, \r\n index, \r\n remove, \r\n handleElementSelection, \r\n move, \r\n setElementSwap, \r\n handleDuplicateElement, \r\n setSelectedHoc, \r\n setActiveMember\r\n ]);\r\n\r\n // Common field props - memoized to prevent unnecessary re-renders\r\n const commonFieldProps = useMemo(() => ({\r\n key: field.id,\r\n position: index,\r\n placeholder: t(field.placeholder || ''),\r\n label: t(field.label),\r\n formControl: control,\r\n name: \"message\",\r\n fieldArrayName: \"members\",\r\n required: field.is_required,\r\n formType: \"builder\" as const,\r\n typeOfField: field.type,\r\n disabled: true\r\n }), [field.id, field.placeholder, field.label, field.is_required, field.type, index, t, control]);\r\n\r\n // Render field based on type\r\n const renderFieldContent = useCallback(() => {\r\n const { field_type } = field;\r\n\r\n switch (field_type) {\r\n case element.text.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n is_multiline={field.is_multiline}\r\n min={field.min_length}\r\n max={field.max_length}\r\n />\r\n );\r\n\r\n case element.email.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n endIcon={<img src={images.sms} alt=\"email\" />}\r\n />\r\n );\r\n\r\n case element.number.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n min={field.min_length}\r\n max={field.max_length}\r\n float_step={field.float_step}\r\n />\r\n );\r\n\r\n case element.phone.field_type:\r\n return (\r\n <DynamicPhone\r\n {...commonFieldProps}\r\n type={field_type}\r\n default_value={field.default_value}\r\n />\r\n );\r\n\r\n case element.select.field_type:\r\n return (\r\n <DynamicSelect\r\n {...commonFieldProps}\r\n options={field.options}\r\n defaultValue={field.default_value}\r\n is_multiselect={field.is_multiselect}\r\n />\r\n );\r\n\r\n case element.date.field_type:\r\n return (\r\n <DynamicDate\r\n {...commonFieldProps}\r\n defaultValue={field.default_value}\r\n is_future_dates_allowed={field.is_future_dates_allowed}\r\n is_past_dates_allowed={field.is_past_dates_allowed}\r\n disable={true}\r\n />\r\n );\r\n\r\n case element.time.field_type:\r\n return (\r\n <DynamicTime\r\n {...commonFieldProps}\r\n option={field.option}\r\n />\r\n );\r\n\r\n case element.url.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n endIcon={<img src={images.url} alt=\"url\" />}\r\n />\r\n );\r\n\r\n case element.currency.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n endIcon={<img src={images.dollar} alt=\"currency\" />}\r\n />\r\n );\r\n\r\n case element.file.field_type:\r\n case element.image.field_type:\r\n return (\r\n <DynamicMedia\r\n {...commonFieldProps}\r\n type={field_type}\r\n max_size={field.max_size}\r\n />\r\n );\r\n\r\n case element.geoLocation.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n endIcon={<img src={images.location} alt=\"location\" />}\r\n />\r\n );\r\n\r\n case element.relation.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n is_multiline={field.is_multiline}\r\n min={field.min_length}\r\n max={field.max_length}\r\n label={\r\n <span\r\n className=\"formSection--Relation\"\r\n data-position={index}\r\n data-name={`members.${index}.message`}\r\n >\r\n {t(field.label)}\r\n <img src={images.relation} alt=\"relation\" />\r\n </span>\r\n }\r\n />\r\n );\r\n\r\n case element.info.field_type:\r\n return (\r\n <DynamicInfo\r\n {...commonFieldProps}\r\n defaultValue={field.default_value}\r\n />\r\n );\r\n\r\n case element.toggleButton.field_type:\r\n return (\r\n <DynamicToggleButton\r\n {...commonFieldProps}\r\n title={t(field.title || '')}\r\n titlePosition={elementJSON?.title_position}\r\n />\r\n );\r\n\r\n case element.radioButton.field_type:\r\n return (\r\n <DynamicRadioButton\r\n {...commonFieldProps}\r\n options={field.options}\r\n display={field.display}\r\n titlePosition={elementJSON?.title_position}\r\n />\r\n );\r\n\r\n case element.tagsInput.field_type:\r\n return (\r\n <DynamicInput\r\n {...commonFieldProps}\r\n type={field_type}\r\n defaultValue={field.default_value}\r\n is_multiline={field.is_multiline}\r\n min={field.min_length}\r\n max={field.max_length}\r\n />\r\n );\r\n\r\n case element.checkbox.field_type:\r\n return (\r\n <DynamicCheckBox\r\n {...commonFieldProps}\r\n title={t(field.title || '')}\r\n titlePosition={field.title_position}\r\n />\r\n );\r\n\r\n case element.table.field_type:\r\n return (\r\n <DynamicTable\r\n {...commonFieldProps}\r\n columns={field.table_columns || elementJSON?.table_columns || []}\r\n />\r\n );\r\n\r\n default:\r\n console.warn(`Unknown field type: ${field_type}`);\r\n return null;\r\n }\r\n }, [field, commonFieldProps, element, images, elementJSON, t, index]);\r\n\r\n return (\r\n <Grid item xs={gridItemSize}>\r\n <DynamicElementHOC\r\n {...hocProps}\r\n element={field.field_type}\r\n >\r\n {renderFieldContent()}\r\n </DynamicElementHOC>\r\n </Grid>\r\n );\r\n});\r\n\r\nFormField.displayName = 'FormField';\r\n\r\n// Main component\r\nconst FormFields: React.FC<FormFieldsProps> = memo(({\r\n sectionMembers,\r\n members,\r\n activeMember,\r\n control,\r\n t,\r\n element,\r\n images,\r\n elementJSON,\r\n remove,\r\n move,\r\n handleElementSelection,\r\n setElementSwap,\r\n handleDuplicateElement,\r\n setSelectedHoc,\r\n setActiveMember\r\n}) => {\r\n // Memoize grid item size calculation\r\n const calculateGridSize = useCallback((field: IField): number => {\r\n if (field.is_fullwidth || field.field_type === \"table\") return 12;\r\n if (field.custom_width) return field.custom_width;\r\n return 6;\r\n }, []);\r\n\r\n // Memoize the rendered fields\r\n const renderedFields = useMemo(() => {\r\n return sectionMembers.map((field: IField) => {\r\n const index = members.findIndex(member => member === field);\r\n const gridItemSize = calculateGridSize(field);\r\n\r\n return (\r\n <FormField\r\n key={`${field.id}-${index}`} // Better key for React reconciliation\r\n field={field}\r\n index={index}\r\n gridItemSize={gridItemSize}\r\n activeMember={activeMember}\r\n control={control}\r\n t={t}\r\n element={element}\r\n images={images}\r\n elementJSON={elementJSON}\r\n remove={remove}\r\n move={move}\r\n handleElementSelection={handleElementSelection}\r\n setElementSwap={setElementSwap}\r\n handleDuplicateElement={handleDuplicateElement}\r\n setSelectedHoc={setSelectedHoc}\r\n setActiveMember={setActiveMember}\r\n />\r\n );\r\n });\r\n }, [\r\n sectionMembers,\r\n members,\r\n activeMember,\r\n control,\r\n t,\r\n element,\r\n images,\r\n elementJSON,\r\n remove,\r\n move,\r\n handleElementSelection,\r\n setElementSwap,\r\n handleDuplicateElement,\r\n setSelectedHoc,\r\n setActiveMember,\r\n calculateGridSize,\r\n elementJSON?.field_type\r\n ]);\r\n\r\n return <>{renderedFields}</>;\r\n});\r\n\r\nFormFields.displayName = 'FormFields';\r\n\r\nexport { FormField };\r\nexport default FormFields;","// React imports\r\nimport { useEffect, useMemo } from \"react\";\r\n\r\n// ERP Common imports\r\nimport formBuilderDeConversion from \"@/utils/form-builder-deconversion\";\r\n\r\n// Module pathname imports\r\nimport { PathnameAccounting } from \"../../../constants/pathnames/pathname.accounting\";\r\nimport { PathnameCrm } from \"../../../constants/pathnames/pathname.crm\";\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 { PathnameRental } from \"../../../constants/pathnames/pathname.rental\";\r\nimport { PathnameUsers } from \"../../../constants/pathnames/pathname.user\";\r\nimport { PathnameHrms } from \"../../../constants/pathnames/pathname.hrms\";\r\n\r\n// Types for better type safety\r\nexport interface TableColumn {\r\n header: string;\r\n accessorKey: string;\r\n visible: boolean;\r\n}\r\n\r\nexport interface FormMember {\r\n field_type: string;\r\n table?: string;\r\n table_columns?: TableColumn[];\r\n [key: string]: any;\r\n}\r\n\r\nexport interface FormSection {\r\n field_type: string;\r\n label: string;\r\n is_accordion: boolean;\r\n id: string;\r\n remove_section: boolean;\r\n form_switcher_label?: string;\r\n form_switcher_name?: string;\r\n is_section_field?: boolean;\r\n section_type?: string;\r\n switcher_forms?: any;\r\n members: FormMember[];\r\n}\r\n\r\nexport interface TabData {\r\n tab_order: number;\r\n data: FormSection[];\r\n}\r\n\r\nexport interface ProcessedData {\r\n tab?: TabData[];\r\n section?: FormSection[];\r\n tabsData?: TabData[];\r\n}\r\n\r\n// Constants for module paths\r\nconst MODULE_PATHS = {\r\n accounting: PathnameAccounting.FORMS,\r\n inventory: PathnameInventory.FORMS,\r\n manufacturing: PathnameManufacturing.FORMS,\r\n procurement: PathnamePurchase.FORMS,\r\n crm: PathnameCrm.FORMS,\r\n rental: PathnameRental.FORMS,\r\n user: PathnameUsers.FORMS,\r\n hrms: PathnameHrms.FORMS,\r\n} as const;\r\n\r\nexport type ModuleType = keyof typeof MODULE_PATHS;\r\n\r\n// Helper function to format text (converts snake_case to Title Case)\r\nexport const formatText = (text: string): string => {\r\n return text\r\n .split('_')\r\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\r\n .join(' ');\r\n};\r\n\r\n// Helper function to get redirection path\r\nconst getRedirectionPath = (currentModule: string): string => {\r\n if (!isValidModule(currentModule)) {\r\n throw new Error(`Invalid module: ${currentModule}`);\r\n }\r\n return MODULE_PATHS[currentModule as ModuleType];\r\n};\r\n\r\n// Type guard for module validation\r\nconst isValidModule = (module: string): module is ModuleType => {\r\n return module in MODULE_PATHS;\r\n};\r\n\r\n// Helper function to create default table columns\r\nexport const createDefaultTableColumns = (): TableColumn[] => [\r\n { header: \"Column 1\", accessorKey: \"column_1\", visible: true },\r\n { header: \"Column 2\", accessorKey: \"column_2\", visible: true },\r\n];\r\n\r\n// Helper function to process table columns\r\nexport const processTableColumns = (\r\n member: FormMember,\r\n formBuilder: any\r\n): TableColumn[] => {\r\n // Return existing columns if they exist\r\n if (member.table_columns?.length) {\r\n return member.table_columns;\r\n }\r\n\r\n // Check if table exists and has fields\r\n if (!member.table || !formBuilder.fields?.[member.table]) {\r\n return createDefaultTableColumns();\r\n }\r\n\r\n const fields = formBuilder.fields[member.table];\r\n if (!Array.isArray(fields) || fields.length === 0) {\r\n return createDefaultTableColumns();\r\n }\r\n\r\n return fields.map((field: any, index: number) => ({\r\n header: formatText(field.field),\r\n accessorKey: field.field,\r\n visible: index <= 3, // Show first 4 columns by default\r\n }));\r\n};\r\n\r\n// Helper function to process members\r\nexport const processMembers = (\r\n sections: FormSection[],\r\n formBuilder: any\r\n): FormMember[] => {\r\n return sections.flatMap((section) =>\r\n section.members.map((member) => {\r\n if (member.field_type === \"table\") {\r\n return {\r\n ...member,\r\n table_columns: processTableColumns(member, formBuilder),\r\n };\r\n }\r\n return { ...member };\r\n })\r\n );\r\n};\r\n\r\n// Helper function to extract sections data\r\nexport const extractSections = (sections: FormSection[]): Omit<FormSection, 'members'>[] => {\r\n return sections.map(({\r\n field_type,\r\n label,\r\n is_accordion,\r\n id,\r\n remove_section,\r\n form_switcher_label,\r\n form_switcher_name,\r\n is_section_field,\r\n section_type,\r\n switcher_forms,\r\n }) => ({\r\n field_type,\r\n label,\r\n is_accordion,\r\n id,\r\n remove_section,\r\n form_switcher_label,\r\n form_switcher_name,\r\n is_section_field,\r\n section_type,\r\n switcher_forms,\r\n }));\r\n};\r\n\r\n// Main processing function\r\nconst processData = (\r\n data: ProcessedData,\r\n activeTabId: number = 0,\r\n formBuilder: any,\r\n tabsData: TabData[] | null,\r\n // Callback functions\r\n callbacks: {\r\n removeSection: () => void;\r\n remove: () => void;\r\n setTabsData: (data: TabData[]) => void;\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n): void => {\r\n const { removeSection, remove, setTabsData, append, appendSection } = callbacks;\r\n\r\n try {\r\n // Clear existing data\r\n removeSection();\r\n remove();\r\n\r\n if (data.tab) {\r\n processTabData(data.tab, activeTabId, formBuilder, callbacks);\r\n } else if (data.section) {\r\n processSectionData(data.section, formBuilder, callbacks);\r\n } else if (data.tabsData && tabsData) {\r\n processExistingTabsData(tabsData, activeTabId, callbacks);\r\n } else {\r\n throw new Error(\"Invalid data format: Missing required properties (tab, section, or tabsData)\");\r\n }\r\n } catch (error) {\r\n console.error(\"Error processing data:\", error);\r\n // You might want to show a user-friendly error message instead of alert\r\n alert(error instanceof Error ? error.message : \"An error occurred while processing data\");\r\n }\r\n};\r\n\r\n// Process tab data\r\nconst processTabData = (\r\n tabs: TabData[],\r\n activeTabId: number,\r\n formBuilder: any,\r\n callbacks: {\r\n setTabsData: (data: TabData[]) => void;\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n): void => {\r\n const { setTabsData, append, appendSection } = callbacks;\r\n\r\n setTabsData(tabs);\r\n\r\n const activeTab = tabs.find(tab => tab.tab_order === activeTabId + 1);\r\n if (!activeTab?.data) {\r\n console.warn(`No active tab found for tab order: ${activeTabId + 1}`);\r\n return;\r\n }\r\n\r\n const sections = extractSections(activeTab.data);\r\n const members = processMembers(activeTab.data, formBuilder);\r\n\r\n append(members);\r\n appendSection(sections);\r\n};\r\n\r\n// Process section data\r\nconst processSectionData = (\r\n sections: FormSection[],\r\n formBuilder: any,\r\n callbacks: {\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n): void => {\r\n const { append, appendSection } = callbacks;\r\n\r\n const extractedSections = extractSections(sections);\r\n const members = processMembers(sections, formBuilder);\r\n\r\n append(members);\r\n appendSection(extractedSections);\r\n};\r\n\r\n// Process existing tabs data\r\nconst processExistingTabsData = (\r\n tabsData: TabData[],\r\n activeTabId: number,\r\n callbacks: {\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n): void => {\r\n const { append, appendSection } = callbacks;\r\n\r\n const activeTab = tabsData.find(tab => tab.tab_order === activeTabId + 1);\r\n if (!activeTab?.data) {\r\n console.warn(`No active tab found for tab order: ${activeTabId + 1}`);\r\n return;\r\n }\r\n\r\n const sections = extractSections(activeTab.data);\r\n const members = activeTab.data.flatMap(section =>\r\n section.members.map(member => ({ ...member }))\r\n );\r\n\r\n if (members.length > 0) append(members);\r\n if (sections.length > 0) appendSection(sections);\r\n};\r\n\r\n// Custom hook for form data processing\r\nexport const useFormDataProcessor = (\r\n formBuilder: any,\r\n tabsData: TabData[],\r\n activeTabValue: number,\r\n callbacks: {\r\n removeSection: () => void;\r\n remove: () => void;\r\n setTabsData: (data: TabData[]) => void;\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n) => {\r\n const { removeSection, remove, append } = callbacks;\r\n\r\n // Memoize the serialized form data to avoid unnecessary re-renders\r\n const serializedFormData = useMemo(() =>\r\n JSON.stringify(formBuilder?.formData),\r\n [formBuilder?.formData]\r\n );\r\n\r\n // Memoize the initial data processing\r\n const initialData = useMemo(() => {\r\n if (!formBuilder?.formData?.length) return null;\r\n\r\n try {\r\n return formBuilderDeConversion(formBuilder.formData);\r\n } catch (error) {\r\n console.error('Error processing form data:', error);\r\n return null;\r\n }\r\n }, [serializedFormData]);\r\n\r\n useEffect(() => {\r\n // Handle case when there's no initial data\r\n if (!initialData) {\r\n removeSection();\r\n remove();\r\n append([]);\r\n return;\r\n }\r\n\r\n // Determine processing strategy based on available data\r\n try {\r\n if (tabsData.length > 0) {\r\n // Process existing tabs data\r\n processData(\r\n { tabsData: tabsData },\r\n activeTabValue,\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else if (initialData.tab) {\r\n // Process new tab data\r\n processData(\r\n initialData,\r\n activeTabValue,\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else if (initialData.section) {\r\n // Process section data\r\n processData(\r\n initialData,\r\n 0, // No active tab for section-only data\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else {\r\n console.warn('No valid data structure found in initialData');\r\n removeSection();\r\n remove();\r\n append([]);\r\n }\r\n } catch (error) {\r\n console.error('Error in form data processing:', error);\r\n // Reset to clean state on error\r\n removeSection();\r\n remove();\r\n append([]);\r\n }\r\n }, [activeTabValue, serializedFormData, tabsData.length, initialData, callbacks, formBuilder]);\r\n\r\n return { initialData };\r\n};\r\n\r\n// Alternative: Direct useEffect implementation (if you prefer not to use custom hook)\r\nexport const useFormDataEffect = (\r\n formBuilder: any,\r\n tabsData: TabData[],\r\n activeTabValue: number = 0,\r\n callbacks: {\r\n removeSection: () => void;\r\n remove: () => void;\r\n setTabsData: (data: TabData[]) => void;\r\n append: (members: FormMember[]) => void;\r\n appendSection: (sections: Omit<FormSection, 'members'>[]) => void;\r\n }\r\n) => {\r\n const { removeSection, remove, append } = callbacks;\r\n\r\n useEffect(() => {\r\n let initialData: ProcessedData | null = null;\r\n\r\n // Process initial data\r\n if (formBuilder?.formData?.length) {\r\n try {\r\n initialData = formBuilderDeConversion(formBuilder.formData);\r\n } catch (error) {\r\n console.error('Error converting form data:', error);\r\n }\r\n }\r\n\r\n // Handle empty initial data\r\n if (!initialData) {\r\n removeSection();\r\n remove();\r\n append([]);\r\n return;\r\n }\r\n\r\n // Process data based on available structure\r\n try {\r\n if (tabsData.length > 0) {\r\n processData(\r\n { tabsData: tabsData },\r\n activeTabValue,\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else if (initialData.tab) {\r\n processData(\r\n initialData,\r\n activeTabValue,\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else if (initialData.section) {\r\n processData(\r\n initialData,\r\n 0,\r\n formBuilder,\r\n tabsData,\r\n callbacks\r\n );\r\n } else {\r\n console.warn('Invalid data structure in initialData');\r\n removeSection();\r\n remove();\r\n append([]);\r\n }\r\n } catch (error) {\r\n console.error('Error processing form data:', error);\r\n // Reset to clean state on error\r\n removeSection();\r\n remove();\r\n append([]);\r\n }\r\n }, [activeTabValue, JSON.stringify(formBuilder?.formData), tabsData.length]);\r\n};\r\n\r\n// Usage example:\r\n/*\r\n// Option 1: Using custom hook\r\nconst { initialData } = useFormDataProcessor(\r\n formBuilder,\r\n tabsData,\r\n activeTabValue,\r\n {\r\n removeSection,\r\n remove,\r\n setTabsData,\r\n append,\r\n appendSection\r\n }\r\n);\r\n\r\n// Option 2: Using direct useEffect\r\nuseFormDataEffect(\r\n formBuilder,\r\n tabsData,\r\n activeTabValue,\r\n {\r\n removeSection,\r\n remove,\r\n setTabsData,\r\n append,\r\n appendSection\r\n }\r\n);\r\n*/\r\n\r\n// Path generation utility (separate from the effect)\r\nexport const generateModulePath = (currentModule: string): string => {\r\n try {\r\n const redirectionPath = getRedirectionPath(currentModule);\r\n return `/dashboard/${currentModule}${redirectionPath}`;\r\n } catch (error) {\r\n console.error('Error generating module path:', error);\r\n throw error;\r\n }\r\n};\r\n\r\nexport const generateCustomFormPath = (currentModule,redirectionPath): any => {\r\n try {\r\n return `/dashboard/${currentModule}${redirectionPath}`;\r\n } catch (error) {\r\n console.error('Error generating module path:', error);\r\n throw error;\r\n }\r\n};","// React imports\r\nimport { useState, useEffect, useMemo, useCallback } from \"react\";\r\n\r\n// React Router imports\r\nimport { useLocation, useNavigate } from \"react-router-dom\";\r\n\r\n// React Hook Form imports\r\nimport { useForm, useFieldArray } from \"react-hook-form\";\r\n\r\n// Material UI imports\r\nimport { Box, FormControlLabel, Grid, RadioGroup } from \"@mui/material\";\r\nimport { Add } from \"@mui/icons-material\";\r\n\r\n// Third-party imports\r\nimport { DndProvider } from \"react-dnd\";\r\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\r\nimport { MRT_ColumnDef, MRT_RowData } from \"material-react-table\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\n\r\n// ERP Common imports\r\nimport DynamicSectionHOC from \"@/components/form-control/form-builder/form-builder-element/section\";\r\nimport Button from \"@/components/form-control/form-builder/form-builder-element/button\";\r\nimport TabBar from \"@/components/tabs/tabs\";\r\nimport images from \"@/assets/images\";\r\nimport { Pathname } from \"@/constants\";\r\nimport FormHeader from \"@/components/form-header/form-header\";\r\nimport Typography from \"@/components/typography/typography\";\r\nimport formBuilderConversion from \"@/utils/form-builder-conversion\";\r\nimport { useAppDispatch, useAppSelector } from \"@/redux/hooks\";\r\nimport { formatLabel } from \"@/utils/format-text\";\r\nimport Toast from \"@/components/toast/toast\";\r\nimport Radio from \"@/components/radio/radio\";\r\nimport { SECTION_TYPES } from \"@/utils/constant\";\r\nimport ErpLoader from \"@/components/loaders/erp-loader\";\r\nimport { getErrorMessage } from \"@/utils/common\";\r\nimport FormParser from \"@/components/form-control/form-parser/form-parser\";\r\nimport { Eye, EyeOff } from \"@/components/icons\";\r\n\r\n// Redux actions\r\nimport {\r\n patchFormDataById,\r\n getFormDataById,\r\n getFieldsByFormId,\r\n} from \"../form-builder/redux/actionCreator\";\r\n\r\n// Local imports\r\nimport {\r\n IProperty,\r\n ISectionProperty,\r\n ISelectProperty,\r\n element,\r\n} from \"./field_properties\";\r\nimport TextEditForm from \"./element-edit-forms/text\";\r\nimport SelectEditForm from \"./element-edit-forms/select\";\r\nimport SectionEditForm from \"./element-edit-forms/section\";\r\nimport CheckboxEditForm from \"./element-edit-forms/checkbox\";\r\nimport TableEditForm from \"./element-edit-forms/table-form\";\r\nimport FormFields from \"./form-fields\";\r\nimport { generateModulePath, useFormDataEffect } from \"./utils/common\";\r\nimport \"./custom-form.scss\";\r\n\r\nexport interface IElementJson extends IProperty {\r\n type: string;\r\n}\r\n\r\nconst FIELD_TYPES = {\r\n TEXT: 'text',\r\n NUMBER: 'number',\r\n EMAIL: 'email',\r\n PHONE: 'phone',\r\n SELECT: 'select',\r\n DATE: 'date',\r\n TIME: 'time',\r\n URL: 'url',\r\n CURRENCY: 'currency',\r\n FILE: 'file',\r\n GEO_LOCATION: 'geoLocation',\r\n IMAGE: 'image',\r\n SECTION: 'section',\r\n INFO: 'info',\r\n RELATION: 'relation',\r\n CHECKBOX: 'checkbox',\r\n TOGGLE_BUTTON: 'toggleButton',\r\n TAGS_INPUT: 'tagsInput'\r\n} as const;\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\nconst DEFAULT_COLUMN_WIDTH = 2;\r\nconst DEFAULT_TAB_TITLE = 'data';\r\n\r\nconst isValidNumber = (value: any): boolean => !isNaN(Number(value)) && isFinite(Number(value));\r\nconst deepClone = (obj: T): T => JSON.parse(JSON.stringify(obj));\r\nconst generateUniqueId = (separator = ''): { uniqueStringId: string } => {\r\n return { uniqueStringId: `${Date.now()}${separator}${Math.random().toString(36).substr(2, 9)}` };\r\n};\r\n\r\n\r\nexport function CustomForm({redirectionPath}:any) {\r\n const { t } = useTranslation();\r\n const dispatch = useAppDispatch();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const rowData = location.state ?? [];\r\n\r\n const formBuilder = useAppSelector((state) => state.formBuilder);\r\n\r\n const { control } = useForm({\r\n reValidateMode: \"onBlur\",\r\n });\r\n\r\n const {\r\n fields: members,\r\n append,\r\n remove,\r\n update,\r\n move,\r\n insert,\r\n } = useFieldArray({\r\n control,\r\n name: \"members\",\r\n });\r\n\r\n const {\r\n fields: section,\r\n append: appendSection,\r\n remove: removeSection,\r\n update: updateSection,\r\n } = useFieldArray({\r\n control,\r\n name: \"section\",\r\n });\r\n\r\n const [selectedHoc, setSelectedHoc] = useState(\"\");\r\n const [activeSection, setActiveSection] = useState<number>();\r\n const [activeMember, setActiveMember] = useState<number>();\r\n\r\n const [formJSON, setFormJSON] = useState<object[]>([]);\r\n const [elementJSON, setElementJSON] = useState<any>(null);\r\n const [positionEditedElement, setPositionEditedElement] = useState<\r\n number | undefined\r\n >();\r\n\r\n const [sectionFormJSON, setSectionFormJSON] = useState<object[]>([]);\r\n const [sectionJSON, setSectionJSON] = useState<any>({});\r\n const [sectionPositionEditedElement, setSectionPositionEditedElement] =\r\n useState<number | undefined>();\r\n const [removeSectionActionPerformed, setRemoveSectionActionPerformed] =\r\n useState(false);\r\n const [removeSectionMembersPerformed, setRemoveSectionMembersPerformed] =\r\n useState(false);\r\n const [removeSectionPosition, setRemoveSectionPosition] = useState<\r\n number | undefined\r\n >();\r\n const [initialLoading, setInitialLoading] = useState(true);\r\n const [tabsData, setTabsData] = useState<any[]>([]);\r\n const [activeTabValue, setActiveTabValue] = useState<number | undefined>(0);\r\n\r\n const [elementSwap, setElementSwap] = useState(false);\r\n const [modifyAccordion, setModifyAccordion] = useState(false);\r\n const [toast, setToast] = useState<IToast | null>(null);\r\n const [previewFieldsData, setPreviewFields] = useState<any>(null);\r\n const [_, setFormParserMethods] = useState<any>();\r\n\r\n let elementPerColumn: any;\r\n\r\n const currentModule = location.pathname.split('/')[2]\r\n\r\n const path =redirectionPath?redirectionPath: generateModulePath(currentModule)\r\n\r\n useFormDataEffect(\r\n formBuilder,\r\n tabsData,\r\n activeTabValue,\r\n {\r\n removeSection,\r\n remove,\r\n setTabsData,\r\n append,\r\n appendSection\r\n }\r\n );\r\n\r\n const pickPropertyEditForm = useCallback((type: string): React.ReactElement => {\r\n try {\r\n if (!type || typeof type !== 'string') {\r\n console.warn('Invalid field type provided to pickPropertyEditForm');\r\n return <div className=\"text-gray-500 p-4\">Select a field to edit</div>;\r\n }\r\n\r\n const normalizedType = type.toLowerCase().trim();\r\n\r\n // Define form type groups for better maintainability\r\n const formGroups = {\r\n text: [\r\n 'text', 'number', 'email', 'phone', 'date', 'time',\r\n 'url', 'currency', 'file', 'geolocation', 'image',\r\n 'relation', 'info', 'tagsinput'\r\n ],\r\n select: ['select'],\r\n section: ['section'],\r\n checkbox: ['checkbox', 'togglebutton', 'radiobutton'],\r\n table: ['table']\r\n };\r\n\r\n // Common props for reusability\r\n const commonTextProps = {\r\n element: elementJSON,\r\n handlePropertyValueUpdate,\r\n handleWidthChange,\r\n handleColumnSelect,\r\n fields: formBuilder?.fields || []\r\n };\r\n\r\n const commonSelectProps = {\r\n element: elementJSON,\r\n handlePropertyValueUpdate,\r\n handleSelectOptionValueUpdate,\r\n handleWidthChange,\r\n handleColumnSelect\r\n };\r\n\r\n // Determine form type and render appropriate component\r\n if (formGroups.text.includes(normalizedType)) {\r\n return (\r\n <TextEditForm\r\n {...commonTextProps}\r\n key={`text-form-${elementJSON?.id || 'default'}`}\r\n />\r\n );\r\n }\r\n\r\n if (formGroups.select.includes(normalizedType)) {\r\n return (\r\n <SelectEditForm\r\n {...commonSelectProps}\r\n key={`select-form-${elementJSON?.id || 'default'}`}\r\n />\r\n );\r\n }\r\n\r\n if (formGroups.section.includes(normalizedType)) {\r\n return (\r\n <SectionEditForm\r\n element={sectionJSON}\r\n handlePropertyValueUpdate={handleSectionPropertyValueUpdate}\r\n key={`section-form-${sectionJSON?.id || 'default'}`}\r\n />\r\n );\r\n }\r\n\r\n if (formGroups.checkbox.includes(normalizedType)) {\r\n return (\r\n <CheckboxEditForm\r\n {...commonSelectProps}\r\n key={`checkbox-form-${elementJSON?.id || 'default'}`}\r\n />\r\n );\r\n }\r\n\r\n if (formGroups.table.includes(normalizedType)) {\r\n return (\r\n <TableEditForm\r\n element={elementJSON}\r\n handlePropertyValueUpdate={handlePropertyValueUpdate}\r\n handleColumnsUpdate={handleColumnsUpdate}\r\n fields={formBuilder?.fields || []}\r\n key={`table-form-${elementJSON?.id || 'default'}`}\r\n />\r\n );\r\n }\r\n\r\n // Default fallback with helpful message\r\n console.warn(`Unknown field type: ${type}`);\r\n return (\r\n <div className=\"text-gray-500 p-4 border border-gray-200 rounded\">\r\n <p className=\"font-medium\">Unknown Field Type</p>\r\n <p className=\"text-sm mt-1\">\r\n Field type \"{type}\" is not supported. Please select a valid field to edit.\r\n </p>\r\n </div>\r\n );\r\n\r\n } catch (error) {\r\n console.error('Error in pickPropertyEditForm:', error);\r\n return (\r\n <div className=\"text-red-500 p-4 border border-red-200 rounded bg-red-50\">\r\n <p className=\"font-medium\">Error Loading Form</p>\r\n <p className=\"text-sm mt-1\">\r\n There was an error loading the property edit form. Please try again.\r\n </p>\r\n </div>\r\n );\r\n }\r\n }, [elementJSON, sectionJSON, formBuilder]);\r\n\r\n const addNewSection = useCallback((): void => {\r\n try {\r\n if (!element?.section) {\r\n console.error('Element section template is not available');\r\n return;\r\n }\r\n\r\n const { uniqueStringId: id } = generateUniqueId('-');\r\n const newSection: ISectionProperty = {\r\n ...deepClone(element.section),\r\n id: id,\r\n };\r\n\r\n // Update switcher forms with new ID if they exist\r\n if (newSection.switcher_forms) {\r\n newSection.switcher_forms = newSection.switcher_forms.map(form => ({\r\n ...form,\r\n id: generateUniqueId('-').uniqueStringId\r\n }));\r\n }\r\n\r\n const newSectionIndex = section.length;\r\n\r\n appendSection(newSection);\r\n setActiveSection(newSectionIndex);\r\n setSelectedHoc('section');\r\n\r\n const sectionData: ISectionProperty = {\r\n field_type: newSection.field_type,\r\n section_type: newSection.section_type,\r\n switcher_forms: newSection.switcher_forms,\r\n form_switcher_label: newSection.form_switcher_label,\r\n form_switcher_name: newSection.form_switcher_name,\r\n label: newSection.label,\r\n is_accordion: newSection.is_accordion,\r\n id: newSection.id ?? newSectionIndex,\r\n };\r\n\r\n setSectionJSON(sectionData);\r\n setSectionPositionEditedElement(newSectionIndex);\r\n pickPropertyEditForm(newSection.field_type);\r\n } catch (error) {\r\n console.error('Error adding new section:', error);\r\n }\r\n }, [element, section, appendSection, setActiveSection, setSelectedHoc, setSectionJSON, setSectionPositionEditedElement, pickPropertyEditForm]);\r\n\r\n /**\r\n * Enhanced handleAddTab with better validation and error handling\r\n */\r\n const handleAddTab = useCallback((): void => {\r\n try {\r\n const formWithMembers = deepClone(sectionFormJSON);\r\n\r\n // Populate sections with their members\r\n formWithMembers.forEach((section: ISectionProperty, sectionIndex: number) => {\r\n section.members = members.filter(\r\n (member: IProperty) => member?.section_order === sectionIndex\r\n );\r\n });\r\n\r\n const hasSystemMembers = formWithMembers.some((section: ISectionProperty) =>\r\n section.members?.some((member: IProperty) => Boolean(member?.is_system_field))\r\n );\r\n\r\n const shouldRemoveTab = !tabsData?.length && hasSystemMembers;\r\n\r\n const newTab: TabData = {\r\n tab_order: tabsData.length + 1,\r\n title: DEFAULT_TAB_TITLE,\r\n remove_tab: shouldRemoveTab,\r\n data: tabsData?.length ? [] : formWithMembers\r\n };\r\n\r\n setTabsData(prevTabs => [...prevTabs, newTab]);\r\n } catch (error) {\r\n console.error('Error adding new tab:', error);\r\n }\r\n }, [sectionFormJSON, members, tabsData, setTabsData]);\r\n\r\n const handleEditTabTitle = useCallback((tabId: number, newTitle: string): void => {\r\n try {\r\n if (!isValidNumber(tabId) || !newTitle?.trim()) {\r\n console.error('Invalid tab ID or title provided');\r\n return;\r\n }\r\n\r\n setTabsData(prevTabs =>\r\n prevTabs.map((tab: TabData) =>\r\n tab.tab_order === tabId ? { ...tab, title: newTitle.trim() } : tab\r\n )\r\n );\r\n } catch (error) {\r\n console.error('Error editing tab title:', error);\r\n }\r\n }, [setTabsData]);\r\n\r\n const handleRemoveTab = useCallback((id: number): void => {\r\n try {\r\n if (!isValidNumber(id)) {\r\n console.error('Invalid tab ID provided');\r\n return;\r\n }\r\n\r\n const filteredTabs = tabsData.filter((tab: TabData) => tab.tab_order !== id);\r\n\r\n // Reorder remaining tabs\r\n const reorderedTabs = filteredTabs.map((tab: TabData) => ({\r\n ...tab,\r\n tab_order: tab.tab_order > id ? tab.tab_order - 1 : tab.tab_order,\r\n }));\r\n\r\n setTabsData(reorderedTabs);\r\n if (activeTabValue == id) {\r\n setActiveTabValue(reorderedTabs?.length - 1)\r\n }\r\n\r\n if (reorderedTabs.length > 0) {\r\n const activeTab = reorderedTabs.find(\r\n (tab: TabData) => tab.tab_order === (activeTabValue ?? 0) + 1\r\n );\r\n\r\n if (activeTab?.data) {\r\n const sections = activeTab.data.map(\r\n ({ field_type, label, is_accordion, id, remove_section }) => ({\r\n field_type,\r\n label,\r\n is_accordion,\r\n id,\r\n remove_section,\r\n })\r\n );\r\n\r\n const membersList = activeTab.data.flatMap((section: ISectionProperty) =>\r\n section.members?.map((member: IProperty) => ({ ...member })) || []\r\n );\r\n\r\n // Clear current data and add new data\r\n remove();\r\n removeSection();\r\n membersList.forEach(member => append(member));\r\n sections.forEach(section => appendSection(section));\r\n }\r\n } else {\r\n // Clear all data if no tabs remain\r\n remove();\r\n removeSection();\r\n }\r\n } catch (error) {\r\n console.error('Error removing tab:', error);\r\n }\r\n }, [tabsData, activeTabValue, setTabsData, remove, removeSection, append, appendSection]);\r\n\r\n const handleElementSelection = useCallback((e: React.MouseEvent<HTMLElement>): void => {\r\n try {\r\n const target = e.target as HTMLElement;\r\n const elementPositionIndex = target.dataset.position;\r\n\r\n if (!elementPositionIndex || !isValidNumber(elementPositionIndex)) {\r\n console.error('Invalid element position index');\r\n return;\r\n }\r\n\r\n const positionIndex = Number(elementPositionIndex);\r\n\r\n if (positionIndex < 0 || positionIndex >= formJSON.length) {\r\n console.error('Element position index out of bounds');\r\n return;\r\n }\r\n\r\n setActiveMember(positionIndex);\r\n\r\n const elementDetails = deepClone(formJSON[positionIndex]);\r\n setPositionEditedElement(positionIndex);\r\n setElementJSON(elementDetails);\r\n setSelectedHoc('element');\r\n } catch (error) {\r\n console.error('Error selecting element:', error);\r\n }\r\n }, [formJSON, setActiveMember, setPositionEditedElement, setElementJSON, setSelectedHoc]);\r\n\r\n const handleSectionSelection = useCallback((e: React.MouseEvent<HTMLElement>): void => {\r\n try {\r\n const target = e.target as HTMLElement;\r\n const sectionPositionIndex = target.dataset.position;\r\n\r\n if (!sectionPositionIndex || !isValidNumber(sectionPositionIndex)) {\r\n console.error('Invalid section position index');\r\n return;\r\n }\r\n\r\n const positionIndex = Number(sectionPositionIndex);\r\n\r\n if (positionIndex < 0 || positionIndex >= sectionFormJSON.length) {\r\n console.error('Section position index out of bounds');\r\n return;\r\n }\r\n\r\n setActiveSection(positionIndex);\r\n\r\n const sectionDetails = deepClone(sectionFormJSON[positionIndex]);\r\n setSectionPositionEditedElement(positionIndex);\r\n setSectionJSON(sectionDetails);\r\n setSelectedHoc('section');\r\n } catch (error) {\r\n console.error('Error selecting section:', error);\r\n }\r\n }, [sectionFormJSON, setActiveSection, setSectionPositionEditedElement, setSectionJSON, setSelectedHoc]);\r\n\r\n const handleAddMember = useCallback((\r\n e: React.SyntheticEvent<HTMLElement>,\r\n otherProperties?: Record<string, any>\r\n ): void => {\r\n try {\r\n const target = e.currentTarget as HTMLElement;\r\n const sectionPositionIndex = target?.dataset?.position;\r\n\r\n if (sectionPositionIndex === undefined || !isValidNumber(sectionPositionIndex)) {\r\n console.error('Invalid section position index for adding member');\r\n return;\r\n }\r\n\r\n const positionIndex = Number(sectionPositionIndex);\r\n\r\n if (positionIndex < 0) {\r\n console.error('Section position index cannot be negative');\r\n return;\r\n }\r\n\r\n if (!element?.text) {\r\n console.error('Element text template is not available');\r\n return;\r\n }\r\n\r\n const newMember: IProperty = {\r\n ...deepClone(element.text),\r\n ...otherProperties,\r\n section_order: positionIndex,\r\n type: 'custom',\r\n is_new: true,\r\n custom_width: Math.floor(DEFAULT_GRID_COLUMNS / DEFAULT_COLUMN_WIDTH),\r\n is_fullwidth: false,\r\n is_system_field: Boolean(otherProperties?.is_system_field),\r\n id: generateUniqueId().uniqueStringId,\r\n };\r\n\r\n setActiveSection(positionIndex);\r\n append(newMember);\r\n\r\n const elementPositionIndex = members.length;\r\n setActiveMember(elementPositionIndex);\r\n setSelectedHoc('element');\r\n setPositionEditedElement(elementPositionIndex);\r\n setElementJSON(newMember);\r\n pickPropertyEditForm(newMember.field_type);\r\n } catch (error) {\r\n console.error('Error adding new member:', error);\r\n }\r\n }, [element, members, setActiveSection, append, setActiveMember, setSelectedHoc, setPositionEditedElement, setElementJSON, pickPropertyEditForm]);\r\n\r\n\r\n const handleSectionPropertyValueUpdate = useCallback((\r\n e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>,\r\n overrideValue?: any\r\n ): void => {\r\n try {\r\n const { name, type, checked, value } = e.target;\r\n\r\n if (!name) {\r\n console.error('Property name is required for update');\r\n return;\r\n }\r\n\r\n const updatedValue = overrideValue !== undefined ? overrideValue : (type === 'checkbox' ? checked : value);\r\n\r\n // Only update if value actually changed\r\n if (sectionJSON[name] !== updatedValue) {\r\n setSectionJSON(prev => ({ ...prev, [name]: updatedValue }));\r\n }\r\n } catch (error) {\r\n console.error('Error updating section property:', error);\r\n }\r\n }, [sectionJSON, setSectionJSON]);\r\n\r\n const handleWidthChange = useCallback((newCustomWidth: number): void => {\r\n try {\r\n if (!isValidNumber(newCustomWidth) || newCustomWidth < 1 || newCustomWidth > DEFAULT_GRID_COLUMNS) {\r\n console.error('Invalid width value provided');\r\n return;\r\n }\r\n\r\n setElementJSON(prevData => ({\r\n ...prevData,\r\n custom_width: newCustomWidth,\r\n }));\r\n } catch (error) {\r\n console.error('Error updating width:', error);\r\n }\r\n }, [setElementJSON]);\r\n\r\n const handleColumnSelect = useCallback((e: React.ChangeEvent<HTMLSelectElement>): void => {\r\n try {\r\n const columnValue = Number(e.target.value);\r\n\r\n if (!isValidNumber(columnValue) || columnValue <= 0) {\r\n console.error('Invalid column value provided');\r\n return;\r\n }\r\n\r\n const elementPerColumn = Math.floor(DEFAULT_GRID_COLUMNS / columnValue);\r\n\r\n if (elementPerColumn <= 0) {\r\n console.error('Calculated element per column is invalid');\r\n return;\r\n }\r\n\r\n // Batch update all members\r\n members.forEach((field: IProperty, index: number) => {\r\n update(index, { ...field, custom_width: elementPerColumn });\r\n });\r\n } catch (error) {\r\n console.error('Error updating column selection:', error);\r\n }\r\n }, [members, update]);\r\n\r\n const handlePropertyValueUpdate = useCallback((\r\n e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>,\r\n numberValue?: number,\r\n val?: string,\r\n fieldType?: keyof typeof FIELD_TYPES\r\n ): void => {\r\n try {\r\n const getValue = (): any => {\r\n if (fieldType) return fieldType;\r\n if (val !== undefined) return val;\r\n if (numberValue !== undefined) return numberValue;\r\n return e?.target?.value;\r\n };\r\n\r\n const value = getValue();\r\n const elementJSONCopy = deepClone(elementJSON);\r\n\r\n if (e?.target?.name) {\r\n elementJSONCopy[e.target.name] = e.target.type === 'checkbox' ? e.target.checked : value;\r\n }\r\n // Only update if there's an actual change\r\n if (fieldType) {\r\n const { uniqueStringId: uniqueId } = generateUniqueId();\r\n const copyOfUpdatedElement: IProperty = {\r\n ...element[fieldType],\r\n section_form_id: elementJSONCopy?.section_form_id,\r\n is_form_switcher_section: elementJSONCopy?.is_form_switcher_section,\r\n section_order: elementJSONCopy.section_order,\r\n id: uniqueId,\r\n type: 'custom',\r\n is_system_field: Boolean(elementJSONCopy?.is_system_field),\r\n is_new: true,\r\n column_width: elementJSONCopy?.column_width || 6,\r\n custom_width: elementJSONCopy?.custom_width || 6\r\n };\r\n setElementJSON(copyOfUpdatedElement);\r\n } else if (JSON.stringify(elementJSON) !== JSON.stringify(elementJSONCopy)) {\r\n setElementJSON({ ...elementJSON, ...elementJSONCopy });\r\n }\r\n } catch (error) {\r\n console.error('Error updating property value:', error);\r\n }\r\n }, [elementJSON, element, setElementJSON]);\r\n\r\n const handleSelectOptionValueUpdate = useCallback((options: any[]): void => {\r\n try {\r\n if (!Array.isArray(options)) {\r\n console.error('Options must be an array');\r\n return;\r\n }\r\n\r\n const elementJSONCopy = deepClone(elementJSON);\r\n elementJSONCopy.options = [...options];\r\n const { uniqueStringId: uniqueId } = generateUniqueId('-');\r\n\r\n if (JSON.stringify(elementJSON.options) !== JSON.stringify(options)) {\r\n setElementJSON({ ...elementJSON, ...elementJSONCopy, id: uniqueId });\r\n }\r\n } catch (error) {\r\n console.error('Error updating select options:', error);\r\n }\r\n }, [elementJSON, setElementJSON]);\r\n\r\n const handleColumnsUpdate = useCallback((columns: MRT_ColumnDef<MRT_RowData>[]): void => {\r\n try {\r\n if (!Array.isArray(columns)) {\r\n console.error('Columns must be an array');\r\n return;\r\n }\r\n\r\n const elementJSONCopy = deepClone(elementJSON);\r\n elementJSONCopy.table_columns = [...columns];\r\n const { uniqueStringId: uniqueId } = generateUniqueId('-');\r\n\r\n if (JSON.stringify(elementJSON.table_columns) !== JSON.stringify(columns)) {\r\n setElementJSON({ ...elementJSON, ...elementJSONCopy, id: uniqueId });\r\n }\r\n } catch (error) {\r\n console.error('Error updating table columns:', error);\r\n }\r\n }, [elementJSON, setElementJSON]);\r\n\r\n const handleRemoveSection = useCallback((sectionIndex: number): void => {\r\n try {\r\n if (!isValidNumber(sectionIndex) || sectionIndex < 0 || sectionIndex >= section.length) {\r\n console.error('Invalid section index for removal');\r\n return;\r\n }\r\n\r\n setRemoveSectionPosition(sectionIndex);\r\n removeSection(sectionIndex);\r\n\r\n // Remove associated members in reverse order to maintain indices\r\n const membersToRemove: number[] = [];\r\n members.forEach((member: IProperty, index: number) => {\r\n if (member?.section_order === sectionIndex) {\r\n membersToRemove.push(index);\r\n }\r\n });\r\n\r\n // Remove members in reverse order to maintain correct indices\r\n membersToRemove.reverse().forEach(memberIndex => {\r\n remove(memberIndex);\r\n });\r\n\r\n setRemoveSectionActionPerformed(true);\r\n } catch (error) {\r\n console.error('Error removing section:', error);\r\n }\r\n }, [section, members, setRemoveSectionPosition, removeSection, remove, setRemoveSectionActionPerformed]);\r\n\r\n const handleMakeAccordion = useCallback((sectionIndex: number): void => {\r\n try {\r\n if (!isValidNumber(sectionIndex) || sectionIndex < 0 || sectionIndex >= section.length) {\r\n console.error('Invalid section index for accordion conversion');\r\n return;\r\n }\r\n\r\n setModifyAccordion(true);\r\n setSectionPositionEditedElement(sectionIndex);\r\n setActiveSection(sectionIndex);\r\n\r\n const copyOfSection: ISectionProperty = {\r\n ...deepClone(section[sectionIndex]),\r\n is_accordion: true\r\n };\r\n\r\n updateSection(sectionIndex, copyOfSection);\r\n setSelectedHoc('section');\r\n setSectionJSON(copyOfSection);\r\n pickPropertyEditForm(copyOfSection.field_type);\r\n } catch (error) {\r\n console.error('Error making section accordion:', error);\r\n }\r\n }, [section, setModifyAccordion, setSectionPositionEditedElement, setActiveSection, updateSection, setSelectedHoc, setSectionJSON, pickPropertyEditForm]);\r\n\r\n const handleTabData = useCallback((): void => {\r\n try {\r\n const formWithMembers = deepClone(sectionFormJSON);\r\n\r\n formWithMembers.forEach((section: ISectionProperty, sectionIndex: number) => {\r\n section.members = members.filter(\r\n (member: IProperty) => member?.section_order === sectionIndex\r\n );\r\n });\r\n\r\n const hasSystemMembers = formWithMembers.some((section: ISectionProperty) =>\r\n section.members?.some((member: IProperty) => Boolean(member?.is_system_field))\r\n );\r\n\r\n const activeTabIndex = Number(activeTabValue);\r\n if (isValidNumber(activeTabIndex) && activeTabIndex >= 0 && activeTabIndex < tabsData.length) {\r\n const updatedTabsData = [...tabsData];\r\n updatedTabsData[activeTabIndex] = {\r\n ...updatedTabsData[activeTabIndex],\r\n data: formWithMembers,\r\n remove_tab: hasSystemMembers,\r\n };\r\n setTabsData(updatedTabsData)\r\n remove();\r\n removeSection();\r\n setActiveMember(undefined);\r\n setSelectedHoc(\"\");\r\n setActiveSection(undefined);\r\n }\r\n } catch (error) {\r\n console.error('Error updating tab data:', error);\r\n }\r\n }, [sectionFormJSON, members, activeTabValue, tabsData, setTabsData]);\r\n\r\n // const handlePreview = () => {\r\n // const formWithMembers = JSON.parse(JSON.stringify(sectionFormJSON));\r\n\r\n // formWithMembers.forEach(\r\n // (section: ISectionProperty, sectionIndex: number) => {\r\n // section.members = members.filter(\r\n // (member: any) => member?.section_order === sectionIndex,\r\n // ) as (IProperty | ISelectProperty)[];\r\n // },\r\n // );\r\n // const state = tabsData?.length\r\n // ? { tab: tabsData }\r\n // : { section: formWithMembers };\r\n\r\n // const FormBuilderConversion = state && formBuilderConversion(state);\r\n\r\n // setPreviewFields(FormBuilderConversion);\r\n // };\r\n\r\n // Option 1: Using useMemo to memoize the expensive computation\r\n const formWithMembers = useMemo(() => {\r\n if (!sectionFormJSON || !members) return null;\r\n\r\n return sectionFormJSON.map((section: ISectionProperty, sectionIndex: number) => ({\r\n ...section,\r\n members: members.filter(\r\n (member: any) => member?.section_order === sectionIndex,\r\n ) as (IProperty | ISelectProperty)[]\r\n }));\r\n }, [sectionFormJSON, members]);\r\n\r\n const previewState = useMemo(() => {\r\n if (!formWithMembers) return null;\r\n\r\n return tabsData?.length\r\n ? { tab: tabsData }\r\n : { section: formWithMembers };\r\n }, [tabsData, formWithMembers]);\r\n\r\n const previewFields = useMemo(() => {\r\n if (!previewState) return null;\r\n return formBuilderConversion(previewState);\r\n }, [previewState]);\r\n\r\n\r\n // Option 2: Optimized handlePreview function using useCallback\r\n const showPreview = useCallback(() => {\r\n if (previewFields) {\r\n setPreviewFields(previewFields);\r\n }\r\n }, [previewFields, setPreviewFields]);\r\n const hidePreview = useCallback(() => {\r\n setPreviewFields(null);\r\n }, []);\r\n\r\n // Enhanced handleFormUpdate with proper error handling and validation\r\n const handleFormUpdate = useCallback(async (): void => {\r\n try {\r\n\r\n\r\n\r\n // Early validation checks\r\n if (!sectionFormJSON || !Array.isArray(sectionFormJSON)) {\r\n console.warn('Invalid sectionFormJSON provided');\r\n return;\r\n }\r\n\r\n if (!members || !Array.isArray(members)) {\r\n console.warn('Invalid members array provided');\r\n return;\r\n }\r\n\r\n if (!rowData?._id) {\r\n console.warn('Missing rowData._id for form update');\r\n return;\r\n }\r\n\r\n // Deep clone with proper error handling\r\n let formWithMembers: IEnhancedSectionProperty[];\r\n\r\n try {\r\n formWithMembers = structuredClone(sectionFormJSON);\r\n } catch (cloneError) {\r\n // Fallback to JSON method if structuredClone is not available\r\n formWithMembers = JSON.parse(JSON.stringify(sectionFormJSON));\r\n }\r\n\r\n // Enhanced member filtering with better type safety and validation\r\n formWithMembers.forEach((section: IEnhancedSectionProperty, sectionIndex: number) => {\r\n // Validate section object\r\n if (!section || typeof section !== 'object') {\r\n console.warn(`Invalid section at index ${sectionIndex}`);\r\n return;\r\n }\r\n\r\n // Filter members with proper type checking and validation\r\n section.members = members.filter((member: IMember) => {\r\n // Validate member object and section_order\r\n return (\r\n member &&\r\n typeof member === 'object' &&\r\n typeof member.section_order === 'number' &&\r\n member.section_order === sectionIndex\r\n );\r\n }) as (IProperty | ISelectProperty)[];\r\n });\r\n\r\n const hasSystemMembers = formWithMembers.some((section: ISectionProperty) =>\r\n section.members?.some((member: IProperty) => Boolean(member?.is_system_field))\r\n );\r\n\r\n const activeTabIndex = Number(activeTabValue);\r\n let updatedTabsData = [...tabsData];\r\n if (isValidNumber(activeTabIndex) && activeTabIndex >= 0 && activeTabIndex < tabsData.length) {\r\n updatedTabsData = [...tabsData];\r\n updatedTabsData[activeTabIndex] = {\r\n ...updatedTabsData[activeTabIndex],\r\n data: formWithMembers,\r\n remove_tab: hasSystemMembers,\r\n };\r\n\r\n setTabsData(updatedTabsData)\r\n }\r\n\r\n // Build state object with proper validation\r\n const state: IFormState = updatedTabsData?.length > 0\r\n ? { tab: updatedTabsData }\r\n : { section: formWithMembers };\r\n\r\n // Validate formBuilderConversion function exists\r\n if (typeof formBuilderConversion !== 'function') {\r\n console.error('formBuilderConversion is not a function');\r\n return;\r\n }\r\n\r\n // Execute conversion with error handling\r\n let formBuilderConversionResult: any;\r\n try {\r\n formBuilderConversionResult = formBuilderConversion(state);\r\n } catch (conversionError) {\r\n console.error('Error during form builder conversion:', conversionError);\r\n return;\r\n }\r\n\r\n // Validate conversion result\r\n if (!formBuilderConversionResult) {\r\n console.warn('Form builder conversion returned empty result');\r\n return;\r\n }\r\n\r\n // Validate elementPerColumn\r\n // if (typeof elementPerColumn !== 'number' || elementPerColumn <= 0) {\r\n\r\n // console.warn('Invalid elementPerColumn value');\r\n // return;\r\n // }\r\n\r\n // Prepare payload with validation\r\n const updatePayload: IFormUpdatePayload = {\r\n gridCol: elementPerColumn || 2,\r\n fields: formBuilderConversionResult\r\n };\r\n\r\n // Dispatch update action\r\n const updateRes = await dispatch(\r\n patchFormDataById({\r\n id: rowData._id,\r\n data: updatePayload\r\n })\r\n );\r\n if (updateRes.meta.requestStatus === 'rejected') {\r\n\r\n const m = getErrorMessage(updateRes?.error?.message);\r\n enqueueSnackbar(m, { variant: 'error' });\r\n } else {\r\n enqueueSnackbar(\"Form updated successfully\", { variant: 'success' });\r\n navigate(path);\r\n }\r\n\r\n } catch (error) {\r\n const m = error?.message || 'Something went wrong while updating the form';\r\n enqueueSnackbar(m, { variant: 'error' });\r\n }\r\n }, [\r\n sectionFormJSON,\r\n members,\r\n tabsData,\r\n rowData?._id,\r\n elementPerColumn,\r\n dispatch,\r\n formBuilderConversion\r\n ]);\r\n\r\n const handleDuplicateElement = (index: number) => {\r\n const copyOfMember: any = { ...members[index], type: \"custom\" };\r\n copyOfMember && insert(index + 1, copyOfMember);\r\n setActiveMember(index + 1);\r\n setSelectedHoc(\"element\");\r\n setPositionEditedElement(index + 1);\r\n setElementJSON(copyOfMember);\r\n pickPropertyEditForm(copyOfMember.field_type);\r\n };\r\n\r\n const breadCrumbPath = [\r\n {\r\n link: path,\r\n label: \"Forms\",\r\n },\r\n {\r\n link: \"\",\r\n label: formatLabel(rowData?.name),\r\n },\r\n {\r\n link: \"\",\r\n label: \"Edit Form\",\r\n },\r\n ];\r\n\r\n\r\n useEffect(() => {\r\n if (removeSectionActionPerformed) {\r\n members.forEach((member: any, index: number) => {\r\n if (\r\n removeSectionPosition !== undefined &&\r\n Boolean(removeSectionPosition?.toString) &&\r\n member.section_order > removeSectionPosition\r\n ) {\r\n update(index, { ...member, section_order: member.section_order - 1 });\r\n }\r\n });\r\n setRemoveSectionActionPerformed(false);\r\n setRemoveSectionMembersPerformed(true);\r\n setRemoveSectionPosition(undefined);\r\n setSelectedHoc(\"\");\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [removeSectionActionPerformed]);\r\n\r\n useEffect(() => {\r\n formBuilder.isSuccess && navigate(path);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [formBuilder.isSuccess]);\r\n\r\n useEffect(() => {\r\n if (formBuilder.isError) {\r\n setToast({\r\n type: 'alert',\r\n message: formBuilder.error\r\n });\r\n }\r\n }, [formBuilder.error, formBuilder.isError]);\r\n\r\n useEffect(() => {\r\n if (\r\n typeof positionEditedElement !== \"number\" ||\r\n typeof positionEditedElement !== \"string\"\r\n ) {\r\n const index = Number(positionEditedElement);\r\n if (formJSON[index]) {\r\n const copyOfUpdatedFormJson = JSON.parse(\r\n JSON.stringify(formJSON[index]),\r\n );\r\n update(index, { ...copyOfUpdatedFormJson });\r\n }\r\n }\r\n // eslint-disable-next-line\r\n }, [formJSON]);\r\n\r\n useEffect(() => {\r\n const updatedFormJSON = formJSON.map((obj: any, index: number) => {\r\n if (index === Number(positionEditedElement)) {\r\n return { ...elementJSON };\r\n } else {\r\n return { ...obj };\r\n }\r\n });\r\n setFormJSON(updatedFormJSON);\r\n\r\n // eslint-disable-next-line\r\n }, [elementJSON]);\r\n\r\n useEffect(() => {\r\n if (members.length !== formJSON.length) {\r\n setFormJSON(JSON.parse(JSON.stringify(members)));\r\n }\r\n if (\r\n Boolean(elementSwap) &&\r\n JSON.stringify(members) !== JSON.stringify(formJSON)\r\n ) {\r\n setFormJSON(JSON.parse(JSON.stringify(members)));\r\n setElementSwap(false);\r\n const newMember: any =\r\n positionEditedElement && members[positionEditedElement];\r\n newMember && setSelectedHoc(\"element\");\r\n newMember && setElementJSON(newMember);\r\n newMember && pickPropertyEditForm(newMember.field_type);\r\n }\r\n if (\r\n removeSectionMembersPerformed &&\r\n JSON.stringify(members) !== JSON.stringify(formJSON)\r\n ) {\r\n setFormJSON(JSON.parse(JSON.stringify(members)));\r\n setRemoveSectionMembersPerformed(false);\r\n }\r\n // eslint-disable-next-line\r\n }, [members, elementSwap]);\r\n\r\n useEffect(() => {\r\n if (\r\n typeof sectionPositionEditedElement !== \"number\" ||\r\n typeof sectionPositionEditedElement !== \"string\"\r\n ) {\r\n const index = Number(sectionPositionEditedElement);\r\n if (sectionFormJSON[index]) {\r\n const copyOfUpdatedFormJson = JSON.parse(\r\n JSON.stringify(sectionFormJSON[index]),\r\n );\r\n updateSection(index, { ...copyOfUpdatedFormJson });\r\n }\r\n }\r\n // eslint-disable-next-line\r\n }, [sectionFormJSON]);\r\n\r\n useEffect(() => {\r\n const updatedFormJSON = sectionFormJSON.map((obj: any, index: number) => {\r\n if (index === Number(sectionPositionEditedElement)) {\r\n return { ...obj, ...sectionJSON };\r\n } else {\r\n return { ...obj };\r\n }\r\n });\r\n setSectionFormJSON(updatedFormJSON);\r\n // eslint-disable-next-line\r\n }, [sectionJSON]);\r\n\r\n useEffect(() => {\r\n if (section.length !== sectionFormJSON.length) {\r\n setSectionFormJSON(JSON.parse(JSON.stringify(section)));\r\n }\r\n if (\r\n JSON.stringify(sectionFormJSON) !== JSON.stringify(section) &&\r\n modifyAccordion\r\n ) {\r\n setSectionFormJSON(JSON.parse(JSON.stringify(section)));\r\n setModifyAccordion(false);\r\n }\r\n // eslint-disable-next-line\r\n }, [section]);\r\n\r\n useEffect(() => {\r\n () => setInitialLoading(true);\r\n }, [])\r\n\r\n const handleFormData = useCallback(async () => {\r\n setInitialLoading(true)\r\n try {\r\n if (rowData?._id) {\r\n setTabsData([])\r\n await dispatch(getFormDataById(rowData?._id));\r\n await dispatch(getFieldsByFormId({ id: rowData?._id }));\r\n\r\n }\r\n } finally {\r\n setInitialLoading(false);\r\n }\r\n\r\n }, [rowData?._id])\r\n\r\n useEffect(() => {\r\n handleFormData();\r\n }, [handleFormData]);\r\n\r\n type SelectedHoc = \"element\" | \"section\" | null;\r\n\r\n // Constants\r\n const DEFAULT_FIELD_TYPE = \"text\";\r\n const HOC_TYPES = {\r\n ELEMENT: \"element\",\r\n SECTION: \"section\"\r\n } as const;\r\n\r\n // Helper function to check if object has meaningful content\r\n const hasValidContent = (obj: Record<string, any>): boolean => {\r\n return obj && Object.keys(obj).length > 0;\r\n };\r\n\r\n const EmptyStateMessage = () => (\r\n <Typography type=\"s5\" color={\"theme.secondary.800\"} className=\"formSection--Text\">Select a field to edit its properties.</Typography>\r\n )\r\n\r\n // Helper function to get field type with fallback\r\n const getFieldTypeWithFallback = (\r\n json: ElementJSON | SectionJSON | null | undefined,\r\n fallback: string = DEFAULT_FIELD_TYPE\r\n ): string => {\r\n return json?.field_type || fallback;\r\n };\r\n\r\n const memoizedForm = useMemo(() => {\r\n // Early return for empty state\r\n if (!selectedHoc) {\r\n\r\n return <EmptyStateMessage />;\r\n }\r\n\r\n // Handle element selection\r\n if (selectedHoc === HOC_TYPES.ELEMENT) {\r\n if (!hasValidContent(members)) {\r\n console.warn('Element selected but no members data available');\r\n return <EmptyStateMessage />;\r\n }\r\n\r\n const fieldType = getFieldTypeWithFallback(elementJSON);\r\n return pickPropertyEditForm(fieldType);\r\n }\r\n\r\n // Handle section selection\r\n if (selectedHoc === HOC_TYPES.SECTION) {\r\n if (!hasValidContent(section)) {\r\n console.warn('Section selected but no section data available');\r\n return <EmptyStateMessage />;\r\n }\r\n\r\n const fieldType = getFieldTypeWithFallback(sectionJSON);\r\n return pickPropertyEditForm(fieldType);\r\n }\r\n\r\n // Fallback for unknown selection type\r\n console.warn(`Unknown selectedHoc type: ${selectedHoc}`);\r\n return <EmptyStateMessage />;\r\n }, [\r\n // Core dependencies\r\n selectedHoc,\r\n\r\n // Data dependencies\r\n Object.keys(members).length,\r\n Object.keys(section).length,\r\n\r\n // JSON dependencies with deep comparison consideration\r\n elementJSON?.field_type,\r\n elementJSON?.field_properties,\r\n sectionJSON?.field_type,\r\n sectionJSON?.field_properties,\r\n\r\n // Function dependency\r\n pickPropertyEditForm\r\n ]);\r\n\r\n return (\r\n // <FullScreenLayout className=\"formSection--Layout\">\r\n <Box position='relative'>\r\n {initialLoading ? <ErpLoader /> :\r\n <DndProvider backend={HTML5Backend}>\r\n <FormHeader breadCrumbPath={breadCrumbPath}>\r\n <div className=\"formSection--Buttons\">\r\n <Button\r\n variant=\"outlined\"\r\n className=\"formSection--PreviewButton\"\r\n text=\"Preview\"\r\n onClick={() => { !previewFieldsData ? showPreview() : hidePreview() }}\r\n disable={!members?.length}\r\n startIcon={previewFieldsData ? <EyeOff /> : <Eye />}\r\n />\r\n <Button\r\n variant=\"contained\"\r\n type=\"submit\"\r\n text=\"Update\"\r\n onClick={handleFormUpdate}\r\n disable={previewFieldsData}\r\n />\r\n </div>\r\n </FormHeader>\r\n {!previewFieldsData ?\r\n <Grid className=\"formSection--Grid\" container>\r\n <Grid\r\n item\r\n xs={9}\r\n component=\"form\"\r\n sx={{\r\n position: \"relative\",\r\n background: \"#F5F6F5\",\r\n padding: \"0.75rem\",\r\n }}\r\n >\r\n <Grid className=\"formSection--GridContainer\">\r\n <Box className=\"formSection--Tab\">\r\n {tabsData && (\r\n <TabBar\r\n tabs={tabsData}\r\n onEditTabTitle={handleEditTabTitle}\r\n activeValue={activeTabValue}\r\n setActiveValue={setActiveTabValue}\r\n handleTabChange={() => {\r\n handleTabData()\r\n }}\r\n handleRemoveTab={handleRemoveTab}\r\n containerProps={{ mb: 0 }}\r\n />\r\n )}\r\n <Button\r\n variant=\"outlined\"\r\n text=\"Add Tab\"\r\n onClick={handleAddTab}\r\n style={{ color: \"#292D32\", margin: \"0.5rem\" }}\r\n />\r\n </Box>\r\n <div className=\"formSection--Form\">\r\n {section?.map((item: any, i: number) => {\r\n const sectionMembers = members.filter(\r\n (member: any) => member.section_order === i,\r\n );\r\n const isFormSwitcher = item.section_type === SECTION_TYPES.FORM_SWITCH_SECTION\r\n const switchForms = item?.switcher_forms?.map((form: any) => ({\r\n ...form,\r\n formMembers: members.filter(\r\n (member: any) => member.section_form_id === form.id,\r\n )\r\n }))\r\n\r\n return (\r\n <DynamicSectionHOC\r\n index={i}\r\n label={t(item.label)}\r\n onClick={handleSectionSelection}\r\n position={i}\r\n fieldArrayName=\"section\"\r\n isFormSwitcher={isFormSwitcher}\r\n activeIndex={activeSection === i}\r\n removeSection={() => handleRemoveSection(i)}\r\n handleAccordion={() => handleMakeAccordion(i)}\r\n handleAddButton={(e) => handleAddMember(e)}\r\n remove_section={item.remove_section}\r\n >\r\n {isFormSwitcher ? (\r\n <div style={{ width: '100%' }} >\r\n <Typography type=\"s5\" style={{ fontWeight: 500 }} color={\"theme.secondary.800\"}>\r\n {item.form_switcher_label}\r\n </Typography>\r\n <RadioGroup\r\n aria-labelledby=\"theme-radio-buttons-group-label\"\r\n name={item.form_switcher_name || item.form_switcher_label}\r\n >\r\n\r\n {switchForms?.map(({ name, id, formMembers }: { name: string, id: number, formMembers: any }) => (\r\n <>\r\n <div>\r\n <FormControlLabel\r\n key={id}\r\n value={name}\r\n control={<Radio />}\r\n label={t(name)}\r\n disabled\r\n />\r\n </div>\r\n\r\n <Grid container sx={{ mb: 3 }}>\r\n <FormFields\r\n sectionMembers={formMembers || []}\r\n members={members}\r\n activeMember={activeMember}\r\n control={control}\r\n t={t}\r\n element={element}\r\n images={images}\r\n elementJSON={elementJSON}\r\n remove={remove}\r\n move={move}\r\n handleElementSelection={handleElementSelection}\r\n setElementSwap={setElementSwap}\r\n handleDuplicateElement={handleDuplicateElement}\r\n setSelectedHoc={setSelectedHoc}\r\n setActiveMember={setActiveMember}\r\n />\r\n </Grid>\r\n <Button\r\n text=\"Add\"\r\n variant=\"outlined\"\r\n className=\"formSection--PreviewButton\"\r\n data-position={i}\r\n onClick={(e) => handleAddMember(e, {\r\n section_form_id: id,\r\n is_form_switcher_section: true\r\n })}\r\n startIcon={<Add />}\r\n />\r\n </>\r\n ))}\r\n </RadioGroup>\r\n </div>\r\n ) : null}\r\n {!isFormSwitcher &&\r\n <FormFields\r\n sectionMembers={sectionMembers || []}\r\n members={members}\r\n activeMember={activeMember}\r\n control={control}\r\n t={t}\r\n element={element}\r\n images={images}\r\n elementJSON={elementJSON}\r\n remove={remove}\r\n move={move}\r\n handleElementSelection={handleElementSelection}\r\n setElementSwap={setElementSwap}\r\n handleDuplicateElement={handleDuplicateElement}\r\n setSelectedHoc={setSelectedHoc}\r\n setActiveMember={setActiveMember}\r\n />\r\n }\r\n </DynamicSectionHOC>\r\n );\r\n })}\r\n <div className=\"formSection--Section\">\r\n <Button\r\n text=\"Add a section\"\r\n variant=\"outlined\"\r\n className=\"formSection--PreviewButton\"\r\n onClick={addNewSection}\r\n startIcon={<Add />}\r\n />\r\n </div>\r\n </div>\r\n </Grid>\r\n\r\n </Grid>\r\n <Grid\r\n item\r\n xs={3}\r\n className={\r\n Boolean(selectedHoc) && (members?.length || section.length)\r\n ? \"formSection--RightGrid\"\r\n : \"formSection--RightGrid formSection--Text\"\r\n }\r\n >\r\n {memoizedForm}\r\n </Grid>\r\n </Grid>\r\n :\r\n <FormParser\r\n data={previewFieldsData || []}\r\n handleFormSubmit={(data) => console.log(\"Preview Data\", data)}\r\n className='form-container'\r\n fieldArrayName='form-builder-preview'\r\n getFormMethods={(methods: any) =>\r\n setFormParserMethods({ ...methods })\r\n }\r\n />\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 </DndProvider>}\r\n </Box>\r\n // </FullScreenLayout>\r\n );\r\n}\r\n\r\nexport default CustomForm;\r\n","// React imports\r\nimport React, { useEffect, useState } from 'react';\r\n\r\n// Material UI imports\r\nimport { Box, IconButton, TextField, InputAdornment } from '@mui/material';\r\nimport { Add, Remove } from '@mui/icons-material';\r\n\r\nexport interface IColumnWidthProps {\r\n onChange: (value: number) => void;\r\n}\r\n\r\nexport const ColumnWidth = ({onChange}: IColumnWidthProps) => {\r\n const [value, setValue] = useState(6);\r\n\r\n const handleIncrement = () => {\r\n setValue(prev => prev + 1);\r\n };\r\n\r\n const handleDecrement = () => {\r\n setValue(prev => Math.max(0, prev - 1)); // Prevent negative values\r\n };\r\n\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const newValue = Number.parseInt(event.target.value) || 0;\r\n setValue(Math.max(0, newValue));\r\n };\r\n\r\n useEffect(() => {\r\n onChange(value);\r\n }, [value]);\r\n\r\n return (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, p: 4 }}>\r\n <TextField\r\n value={value}\r\n onChange={handleInputChange}\r\n name='custom_width'\r\n size=\"small\"\r\n sx={{\r\n width: '120px',\r\n '& .MuiOutlinedInput-root': {\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n '& input': {\r\n textAlign: 'center',\r\n padding: '8px 4px',\r\n }\r\n }\r\n }}\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <IconButton\r\n onClick={handleDecrement}\r\n size=\"small\"\r\n sx={{\r\n marginLeft: '-4px',\r\n borderRadius: '4px 0 0 4px',\r\n border: 'none',\r\n '&:hover': {\r\n backgroundColor: 'rgba(0, 0, 0, 0.04)'\r\n }\r\n }}\r\n >\r\n <Remove fontSize=\"small\" />\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n endAdornment: (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n onClick={handleIncrement}\r\n size=\"small\"\r\n sx={{\r\n marginRight: '-4px',\r\n borderRadius: '0 4px 4px 0',\r\n border: 'none',\r\n '&:hover': {\r\n backgroundColor: 'rgba(0, 0, 0, 0.04)'\r\n }\r\n }}\r\n >\r\n <Add fontSize=\"small\" />\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n }}\r\n inputProps={{\r\n type: 'number',\r\n min: 0,\r\n }}\r\n />\r\n \r\n <Box sx={{ ml: 2, color: 'text.secondary' }}>\r\n Current value: {value}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ColumnWidth;","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6z\"\n}), 'CodeOutlined');","/**\r\n * CSS Scoping Service\r\n * \r\n * Provides utilities for generating unique scope identifiers and scoping CSS\r\n * to prevent style conflicts between different email templates.\r\n */\r\n\r\nexport interface ScopedResult {\r\n scopeId: string;\r\n scopedCSS: string;\r\n wrappedHTML: string;\r\n}\r\n\r\nexport class CSSScopingService {\r\n /**\r\n * Generate a unique scope identifier using timestamp and random string\r\n * Format: email-tpl-{timestamp}-{random}\r\n */\r\n generateScopeId(): string {\r\n const timestamp = Date.now();\r\n const random = Math.random().toString(36).substring(2, 11);\r\n return `email-tpl-${timestamp}-${random}`;\r\n }\r\n\r\n /**\r\n * Scope CSS selectors by prefixing them with the scope identifier\r\n * Skips :root and :host pseudo-classes\r\n * \r\n * @param css - The CSS stylesheet to scope\r\n * @param scopeId - The unique scope identifier\r\n * @returns Scoped CSS with prefixed selectors\r\n */\r\n scopeCSS(css: string, scopeId: string): string {\r\n if (!css || !scopeId) return css;\r\n\r\n // Split CSS into rules\r\n const rules = this.parseCSS(css);\r\n const scopedRules = rules.map(rule => this.scopeRule(rule, scopeId));\r\n \r\n return scopedRules.join('\\n');\r\n }\r\n\r\n /**\r\n * Parse CSS into individual rules\r\n * Simple parser that handles basic CSS syntax\r\n */\r\n private parseCSS(css: string): string[] {\r\n const rules: string[] = [];\r\n let currentRule = '';\r\n let braceCount = 0;\r\n let inComment = false;\r\n\r\n for (let i = 0; i < css.length; i++) {\r\n const char = css[i];\r\n const nextChar = css[i + 1];\r\n\r\n // Handle comments\r\n if (char === '/' && nextChar === '*') {\r\n inComment = true;\r\n currentRule += char;\r\n continue;\r\n }\r\n if (inComment && char === '*' && nextChar === '/') {\r\n inComment = false;\r\n currentRule += char;\r\n continue;\r\n }\r\n\r\n currentRule += char;\r\n\r\n if (!inComment) {\r\n if (char === '{') {\r\n braceCount++;\r\n } else if (char === '}') {\r\n braceCount--;\r\n \r\n if (braceCount === 0 && currentRule.trim()) {\r\n rules.push(currentRule.trim());\r\n currentRule = '';\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Handle any remaining content\r\n if (currentRule.trim()) {\r\n rules.push(currentRule.trim());\r\n }\r\n\r\n return rules;\r\n }\r\n\r\n /**\r\n * Scope a single CSS rule\r\n */\r\n private scopeRule(rule: string, scopeId: string): string {\r\n // Extract selector and body\r\n const braceIndex = rule.indexOf('{');\r\n if (braceIndex === -1) return rule;\r\n\r\n const selector = rule.substring(0, braceIndex).trim();\r\n const body = rule.substring(braceIndex);\r\n\r\n // Split multiple selectors (comma-separated)\r\n const selectors = selector.split(',').map(s => s.trim());\r\n const scopedSelectors = selectors.map(sel => this.scopeSelector(sel, scopeId));\r\n\r\n return `${scopedSelectors.join(', ')} ${body}`;\r\n }\r\n\r\n /**\r\n * Scope a single selector\r\n * Skip :root, :host, and other pseudo-classes that shouldn't be scoped\r\n */\r\n private scopeSelector(selector: string, scopeId: string): string {\r\n // Don't scope :root or :host\r\n if (selector.startsWith(':root') || selector.startsWith(':host')) {\r\n return selector;\r\n }\r\n\r\n // Don't scope @-rules (like @media, @keyframes)\r\n if (selector.startsWith('@')) {\r\n return selector;\r\n }\r\n\r\n // Prefix the selector with the scope class\r\n return `.${scopeId} ${selector}`;\r\n }\r\n\r\n /**\r\n * Wrap HTML content with a scope wrapper div\r\n * \r\n * @param html - The HTML content to wrap\r\n * @param scopeId - The unique scope identifier\r\n * @returns HTML wrapped with scope div\r\n */\r\n wrapHTMLWithScope(html: string, scopeId: string): string {\r\n if (!html || !scopeId) return html;\r\n \r\n return `<div class=\"${scopeId}\">\\n${html}\\n</div>`;\r\n }\r\n\r\n /**\r\n * Extract inline styles from HTML elements\r\n * Returns a map of element identifiers to their inline styles\r\n */\r\n extractInlineStyles(html: string): Map<string, Record<string, string>> {\r\n const styleMap = new Map<string, Record<string, string>>();\r\n \r\n // Create a temporary DOM element to parse HTML\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(html, 'text/html');\r\n \r\n // Find all elements with inline styles\r\n const elementsWithStyles = doc.querySelectorAll('[style]');\r\n \r\n elementsWithStyles.forEach((element, index) => {\r\n const styleAttr = element.getAttribute('style');\r\n if (styleAttr) {\r\n const styles = this.parseInlineStyles(styleAttr);\r\n // Use element tag + index as identifier\r\n const identifier = `${element.tagName.toLowerCase()}-${index}`;\r\n styleMap.set(identifier, styles);\r\n }\r\n });\r\n \r\n return styleMap;\r\n }\r\n\r\n /**\r\n * Parse inline style attribute into an object\r\n */\r\n private parseInlineStyles(styleAttr: string): Record<string, string> {\r\n const styles: Record<string, string> = {};\r\n \r\n const declarations = styleAttr.split(';').filter(d => d.trim());\r\n \r\n declarations.forEach(declaration => {\r\n const colonIndex = declaration.indexOf(':');\r\n if (colonIndex > -1) {\r\n const property = declaration.substring(0, colonIndex).trim();\r\n const value = declaration.substring(colonIndex + 1).trim();\r\n styles[property] = value;\r\n }\r\n });\r\n \r\n return styles;\r\n }\r\n\r\n /**\r\n * Merge two style objects, with override taking precedence\r\n */\r\n mergeStyles(\r\n base: Record<string, string>,\r\n override: Record<string, string>\r\n ): Record<string, string> {\r\n return { ...base, ...override };\r\n }\r\n\r\n /**\r\n * Complete scoping workflow: generate scope ID, scope CSS, and wrap HTML\r\n * \r\n * @param html - The HTML content\r\n * @param css - The CSS stylesheet\r\n * @returns Object containing scopeId, scopedCSS, and wrappedHTML\r\n */\r\n scopeTemplate(html: string, css: string = ''): ScopedResult {\r\n const scopeId = this.generateScopeId();\r\n const scopedCSS = css ? this.scopeCSS(css, scopeId) : '';\r\n const wrappedHTML = this.wrapHTMLWithScope(html, scopeId);\r\n\r\n return {\r\n scopeId,\r\n scopedCSS,\r\n wrappedHTML\r\n };\r\n }\r\n}\r\n\r\n// Export singleton instance\r\nexport const cssScopingService = new CSSScopingService();\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ElementType, EnhancedSectionData } from '../types/editor';\r\nimport { initialStyles, TEMPLATE_EDITOR_PATHS } from './constant';\r\nimport { cssScopingService } from '../services/CSSScopingService';\r\n\r\n\r\nexport const templateRoutes = (modulePath: string, type: string) => {\r\n const list = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_LIST(type)}`\r\n const add = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_ADD(type)}`\r\n const edit = `${modulePath}${TEMPLATE_EDITOR_PATHS.TEMPLATES_EDIT(type)}`\r\n return {\r\n LIST: list,\r\n ADD_TEMPLATE: (id: string) => add.replace(':id', id),\r\n EDIT_TEMPLATE: (id: string, templateId: string) => edit.replace(':id', id).replace(':template_id', templateId),\r\n }\r\n};\r\n\r\n\r\nexport const generateEmailPreview = (sections: EnhancedSectionData[], headerSections?: EnhancedSectionData[] = [], footerSections?: EnhancedSectionData[] = [], isSaving = false, scopeId?: string) => {\r\n const headerHtml = (headerSections && headerSections?.length) ? generateHeaderFooterPreview(headerSections, 'header') : '';\r\n const footerHtml = (footerSections && footerSections?.length) ? generateHeaderFooterPreview(footerSections, 'footer') : '';\r\n \r\n // Generate or use provided scope ID\r\n const templateScopeId = scopeId || cssScopingService.generateScopeId();\r\n \r\n let html = `\r\n <html>\r\n <head>\r\n <style>\r\n .email-container {\r\n margin: 0 auto;\r\n margin-bottom: 20px;\r\n background-color: #fff;\r\n border-radius: 8px;\r\n max-width: ${isSaving ? '65%' : '800px'};\r\n width: 100%;\r\n }\r\n a {\r\n color: #007bff !important;\r\n text-decoration: none !important;\r\n }\r\n a:hover {\r\n text-decoration: underline;\r\n }\r\n * {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n }\r\n\r\n body {\r\n font-family: \"Inter\", sans-serif !important;\r\n font-size: 16px;\r\n font-weight: 400;\r\n color: #00011c;\r\n font-style: normal;\r\n }\r\n\r\n img {\r\n display: block;\r\n height: auto;\r\n }\r\n\r\n table,\r\n tr,\r\n td {\r\n border-collapse: collapse;\r\n }\r\n\r\n a {\r\n text-decoration: none;\r\n }\r\n\r\n table.our-details,\r\n .our-details td,\r\n .our-details th {\r\n border: 1px solid #d3d3d4;\r\n }\r\n\r\n table.amount-word-table,\r\n table.amount-word-table td,\r\n table.amount-word-table th {\r\n border: 1px solid #d6d6d6;\r\n }\r\n\r\n .amount-word-table thead th {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table thead td {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table tbody tr:nth-child(even) {\r\n background-color: #f5f6f5;\r\n }\r\n\r\n .amount-word-table tbody tr td {\r\n border-top: 0;\r\n border-bottom: 0;\r\n }\r\n\r\n .deliver-table thead th {\r\n background-color: transparent;\r\n }\r\n </style>\r\n </head>\r\n <body>\r\n <div class=\"email-container ${templateScopeId}\">\r\n ${headerHtml}\r\n ${headerHtml ? '<hr/>' : ''}\r\n `;\r\n\r\n // Group sections by splitGroupId\r\n const groupedSections = [];\r\n let currentGroup = [];\r\n let lastSplitGroupId = null;\r\n\r\n for (const section of sections) {\r\n if (section.isSplitPair && section.splitGroupId !== 0) {\r\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n }\r\n currentGroup.push(section);\r\n lastSplitGroupId = section.splitGroupId;\r\n } else {\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n lastSplitGroupId = null;\r\n }\r\n groupedSections.push([section]);\r\n }\r\n }\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n }\r\n\r\n // Generate HTML\r\n for (const group of groupedSections) {\r\n if (group.length === 1 && !group[0].isSplitPair) {\r\n // Concatenate normal section content directly\r\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\r\n } else {\r\n // Generate table for split sections\r\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\r\n for (const section of group) {\r\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\r\n ${section.content}\r\n </td>`;\r\n }\r\n html += '</tr></table>';\r\n }\r\n }\r\n\thtml += `\r\n ${footerHtml ? '<hr/>' : ''}\r\n ${footerHtml}\r\n </div></body></html>`;\r\n\r\n return html;\r\n}\r\nexport const generateHeaderFooterPreview = (sections: EnhancedSectionData[], type = 'header', scopeId?: string) => {\r\n const scopeClass = scopeId ? ` ${scopeId}` : '';\r\n let html = `<${type} class=\"${type}${scopeClass}\">`;\r\n\r\n // Group sections by splitGroupId\r\n const groupedSections = [];\r\n let currentGroup = [];\r\n let lastSplitGroupId = null;\r\n\r\n for (const section of sections) {\r\n if (section.isSplitPair && section.splitGroupId !== 0) {\r\n if (lastSplitGroupId !== section.splitGroupId && currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n }\r\n currentGroup.push(section);\r\n lastSplitGroupId = section.splitGroupId;\r\n } else {\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n currentGroup = [];\r\n lastSplitGroupId = null;\r\n }\r\n groupedSections.push([section]);\r\n }\r\n }\r\n if (currentGroup.length > 0) {\r\n groupedSections.push(currentGroup);\r\n }\r\n\r\n // Generate HTML\r\n for (const group of groupedSections) {\r\n if (group.length === 1 && !group[0].isSplitPair) {\r\n // Concatenate normal section content directly\r\n html += `<div style=\"padding: 10px;\">${group[0].content}</div>`;\r\n } else {\r\n // Generate table for split sections\r\n html += '<table style=\"width: 100%; border-collapse: collapse;\"><tr>';\r\n for (const section of group) {\r\n html += `<td style=\"width: ${section.splitWidth}%; vertical-align: top; padding: 10px;\">\r\n ${section.content}\r\n </td>`;\r\n }\r\n html += '</tr></table>';\r\n }\r\n }\r\n\thtml += `</${type}>`;\r\n\r\n return html;\r\n}\r\n\r\nexport const extractStyles = (html: string, sectionType: string) => {\r\n // Create a temporary div to parse the HTML\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = html;\r\n \r\n // Get the first element (our styled element)\r\n const element = tempDiv.firstChild as HTMLElement;\r\n \r\n if (!element) return {};\r\n\r\n if(element?.getAttribute instanceof Function === false) {\r\n return {};\r\n }\r\n \r\n // Get the inline styles\r\n const styleAttr = element?.getAttribute('style');\r\n\r\n const allAttributes = element?.attributes || [];\r\n \r\n // const attrObj: Record<string, any> = {};\r\n const attrObj = Array.from(allAttributes).reduce((obj, attr) => {\r\n obj[attr.name] = attr.value;\r\n return obj;\r\n }, {});\r\n\r\n if (!styleAttr) return {};\r\n \r\n // Parse the style attribute into an object\r\n const styleObj: Record<string, any> = {};\r\n const stylePairs = styleAttr.split(';').filter(pair => pair.trim() !== '');\r\n \r\n stylePairs.forEach(pair => {\r\n const [prop, value] = pair.split(':').map(part => part.trim());\r\n if (prop && value) {\r\n // Convert CSS property names to camelCase for React\r\n const propName = prop.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\r\n styleObj[propName] = value;\r\n }\r\n });\r\n attrObj.styles = styleObj\r\n return attrObj\r\n}\r\n\r\n\r\ntype StyleValue = string | number | boolean | null | undefined | StyleObject;\r\ninterface StyleObject {\r\n [key: string]: StyleValue;\r\n}\r\n\r\nconst EMAIL_SAFE_PROPERTIES = new Set([\r\n 'background', 'background-color',\r\n 'border', 'border-style', 'border-collapse', 'border-top', 'border-right', 'border-bottom', 'border-left', 'border-color', 'border-radius',\r\n 'color', 'display', 'font', 'font-family', 'font-size', 'font-style', 'font-weight',\r\n 'height', 'line-height',\r\n 'margin', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left',\r\n 'padding', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left',\r\n 'text-align', 'text-decoration',\r\n 'vertical-align', 'width',\r\n 'max-width', 'min-width', 'max-height', 'min-height'\r\n]);\r\n\r\nexport const generateInlineStyles = (\r\n styles: StyleObject,\r\n parentKey = ''\r\n): string => {\r\n if (!styles || typeof styles !== 'object') return '';\r\n\r\n const styleEntries = Object.entries(styles).reduce<string[]>((acc, [key, value]) => {\r\n if (value === undefined || value === null) return acc;\r\n\r\n const fullKey = parentKey ? `${parentKey}-${key}` : key;\r\n\r\n // Recursively flatten nested objects\r\n if (typeof value === 'object' && !Array.isArray(value)) {\r\n acc.push(generateInlineStyles(value as StyleObject, fullKey));\r\n return acc;\r\n }\r\n\r\n // Convert camelCase to kebab-case\r\n const cssKey = fullKey.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n\r\n // Skip non-email-safe properties\r\n if (!EMAIL_SAFE_PROPERTIES.has(cssKey) && key !== 'fullWidth' && key !== 'alignment') {\r\n return acc;\r\n }\r\n\r\n // Special case: fullWidth\r\n if (key === 'fullWidth' && value === true) {\r\n acc.push('width: 100%');\r\n return acc;\r\n }\r\n\r\n // Special case: alignment (converted to text-align)\r\n if (key === 'alignment' && typeof value === 'string') {\r\n acc.push(`text-align: ${value}`);\r\n return acc;\r\n }\r\n\r\n // Ignore other boolean values\r\n if (typeof value === 'boolean') return acc;\r\n\r\n const cssValue =\r\n typeof value === 'number' && !['z-index', 'opacity', 'line-height'].includes(key)\r\n ? `${value}px`\r\n : value;\r\n\r\n acc.push(`${cssKey}: ${cssValue}`);\r\n return acc;\r\n }, []);\r\n\r\n return styleEntries.filter(Boolean).join('; ');\r\n};\r\n\r\nexport const getInitialSectionData = (type: ElementType, attrs: Record<string, any> = {}): EnhancedSectionData => {\r\n let content = '';\r\n const styles = initialStyles[type] || {};\r\n const inlineStyles: string = generateInlineStyles(styles);\r\n\r\n switch (type) {\r\n case 'heading':\r\n content = `<h1 style=\"${inlineStyles}\">Heading 1</h1>`;\r\n break;\r\n case 'heading-2':\r\n content = `<h2 style=\"${inlineStyles}\">Heading 2</h2>`;\r\n break;\r\n case 'heading-3':\r\n content = `<h3 style=\"${inlineStyles}\">Heading 3</h3>`;\r\n break;\r\n case 'heading-4':\r\n content = `<h4 style=\"${inlineStyles}\">Heading 4</h4>`;\r\n break;\r\n case 'text':\r\n content = `<p style=\"${inlineStyles}\">Hello, enter your text here...</p>`;\r\n break;\r\n case 'image':\r\n content = `<img src=\"${attrs?.src || ''}\" alt=\"${attrs?.alt || ''}\" style=\"${inlineStyles};\" />`;\r\n break;\r\n case 'buttons':\r\n attrs.text = attrs?.text || 'Button text';\r\n content = `<button style=\"${inlineStyles}\">${attrs.text}</button>`;\r\n break;\r\n case 'divider':\r\n content = `<hr style=\"${inlineStyles}\" />`;\r\n break;\r\n case 'table': {\r\n const { border, borderStyle, borderColor, ...rest } = styles;\r\n const tInlineStyles = generateInlineStyles(styles.is_bordered ? styles : rest);\r\n const tHeadInlineStyles: string = generateInlineStyles(styles.tHead);\r\n const tBodyInlineStyles: string = generateInlineStyles(styles.tBody);\r\n const thCellInlineStyles: string = generateInlineStyles({...styles.thCells, border, borderStyle, borderColor });\r\n const tbCellInlineStyles: string = generateInlineStyles({...styles.tbCells, border, borderStyle, borderColor});\r\n content = `\r\n <table style=\"${tInlineStyles}\">\r\n <thead style=\"${tHeadInlineStyles}\">\r\n <tr style=\"background-color: #f5f5f5;\">\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n </tr>\r\n </thead>\r\n <tbody style=\"${tBodyInlineStyles}\">\r\n <tr>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n `;\r\n break;\r\n }\r\n case 'signature':\r\n content = `<div style=\"${inlineStyles}\">Signature: <input type='text' style=\"border:0; border-bottom:1px solid black\" class='signature-input'/></div>`;\r\n break;\r\n case 'qr-code':\r\n attrs.placeholder = attrs?.placeholder || '{{qr_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n case 'bar-code':\r\n attrs.placeholder = attrs?.placeholder || '{{barcode_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n default:\r\n content = '<p style=\"font-size: 16px; color: #333333; line-height: 1.5;\">New section</p>';\r\n }\r\n\r\n let attributes: Record<string, any> = {};\r\n attributes = extractStyles(content, type);\r\n\r\n return {\r\n content, \r\n type, \r\n attributes: {...(attrs || {}), styles}\r\n };\r\n};\r\n\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport {\r\n AppBar,\r\n Toolbar,\r\n Box,\r\n Link,\r\n Stack,\r\n IconButton,\r\n Divider,\r\n} from '@mui/material';\r\nimport { ZoomIn, ZoomOut, ZoomOutMap } from '@mui/icons-material';\r\nimport Button from '../../../components/button/button';\r\nimport Typography from '../../../components/typography/typography';\r\nimport { Edit, Eye, EyeOff } from '../../../components/icons';\r\nimport CodeOutlinedIcon from '@mui/icons-material/CodeOutlined';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { templateRoutes } from '../utils/common';\r\nimport { EnhancedSectionData } from '../types/editor';\r\n\r\ninterface EditorHeaderProps {\r\n onSave: () => void;\r\n onPreview: () => void;\r\n preview: boolean;\r\n editHtml: boolean;\r\n onEditHtml: () => void;\r\n onEditModeChange?: () => void;\r\n sections: EnhancedSectionData[];\r\n isEditingHeaderFooter: boolean;\r\n setIsEditingHeaderFooter: (value: boolean) => void;\r\n onSaveHeaderFooter: (value: boolean) => void;\r\n modulePath: string;\r\n type: string;\r\n mode: 'add' | 'edit';\r\n templateData: Record<string, any> | null;\r\n isSaving?: boolean;\r\n editMode: boolean;\r\n fromPreview?: boolean;\r\n zoom: number;\r\n onZoomIn: () => void;\r\n onZoomOut: () => void;\r\n onResetZoom: () => void;\r\n}\r\n\r\nconst EditorHeader: React.FC<EditorHeaderProps> = ({\r\n onSave,\r\n onPreview,\r\n preview,\r\n editHtml,\r\n onEditHtml,\r\n sections,\r\n isEditingHeaderFooter,\r\n onEditModeChange,\r\n setIsEditingHeaderFooter,\r\n onSaveHeaderFooter,\r\n modulePath,\r\n type,\r\n mode = 'add',\r\n templateData,\r\n isSaving = false,\r\n editMode,\r\n fromPreview = false,\r\n zoom,\r\n onZoomIn,\r\n onZoomOut,\r\n onResetZoom,\r\n}) => {\r\n const ROUTES = templateRoutes(modulePath, type);\r\n return (\r\n <AppBar\r\n position=\"static\"\r\n color=\"default\"\r\n elevation={0}\r\n sx={{\r\n borderColor: 'divider',\r\n bgcolor: 'background.paper'\r\n }}\r\n >\r\n <Toolbar variant=\"dense\" sx={{ justifyContent: 'space-between', p: 3 }}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <Link\r\n component={RouterLink}\r\n to={ROUTES.LIST}\r\n underline=\"hover\"\r\n color=\"text.secondary\"\r\n sx={{ fontSize: '0.875rem' }}\r\n >\r\n <Typography type=\"s5\" color='theme.secondary.800'>{type === 'email' ? 'Emails' : 'PDF'}</Typography>\r\n </Link>\r\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>/</Typography>\r\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>\r\n {mode === 'add' ? 'Add New' : editMode ? 'Edit' : 'Preview'} Template\r\n </Typography>\r\n {templateData && templateData?.name &&\r\n <>\r\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>/</Typography>\r\n <Typography type=\"s5\" weight='medium' color='theme.secondary.1000'>\r\n {templateData?.name}\r\n </Typography>\r\n </>\r\n }\r\n </Box>\r\n\r\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\r\n {/* Zoom Controls - Only show in preview mode */}\r\n {preview && (\r\n <>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 1,\r\n borderRadius: 1,\r\n bgcolor: 'rgba(74, 192, 140, 0.08)',\r\n border: '1px solid rgba(74, 192, 140, 0.2)',\r\n }}\r\n >\r\n <IconButton\r\n size=\"small\"\r\n onClick={onZoomOut}\r\n disabled={zoom <= 50}\r\n color='#4AC08C'\r\n sx={{\r\n color: '#4AC08C',\r\n '&:hover': {\r\n bgcolor: 'rgba(74, 192, 140, 0.15)',\r\n },\r\n '&.Mui-disabled': {\r\n opacity: 0.3,\r\n color: '#4AC08C'\r\n }\r\n }}\r\n >\r\n <ZoomOut fontSize=\"small\" />\r\n </IconButton>\r\n\r\n <Typography\r\n type=\"s5\"\r\n weight='medium'\r\n sx={{\r\n minWidth: '50px',\r\n textAlign: 'center',\r\n color: '#4AC08C'\r\n }}\r\n >\r\n {zoom}%\r\n </Typography>\r\n\r\n <IconButton\r\n size=\"small\"\r\n onClick={onZoomIn}\r\n disabled={zoom >= 150}\r\n sx={{\r\n color: '#4AC08C',\r\n '&:hover': {\r\n bgcolor: 'rgba(74, 192, 140, 0.15)',\r\n },\r\n '&.Mui-disabled': {\r\n opacity: 0.3,\r\n color: '#4AC08C'\r\n }\r\n }}\r\n >\r\n <ZoomIn fontSize=\"small\" />\r\n </IconButton>\r\n\r\n <Divider\r\n orientation=\"vertical\"\r\n flexItem\r\n sx={{\r\n mx: 0.5,\r\n bgcolor: 'rgba(74, 192, 140, 0.3)'\r\n }}\r\n />\r\n\r\n <IconButton\r\n size=\"small\"\r\n onClick={onResetZoom}\r\n disabled={zoom === 100}\r\n title=\"Reset Zoom\"\r\n sx={{\r\n color: '#4AC08C',\r\n '&:hover': {\r\n bgcolor: 'rgba(74, 192, 140, 0.15)',\r\n },\r\n '&.Mui-disabled': {\r\n opacity: 0.3,\r\n color: '#4AC08C'\r\n }\r\n }}\r\n >\r\n <ZoomOutMap fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n\r\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 1 }} />\r\n </>\r\n )}\r\n\r\n {!fromPreview ? (\r\n <>\r\n <Button\r\n onClick={() => setIsEditingHeaderFooter(true)}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n startIcon={<Edit fontSize='small' />}\r\n disabled={preview}\r\n >\r\n Edit Header/Footer\r\n </Button>\r\n <Button\r\n onClick={onPreview}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n startIcon={preview ? <EyeOff fontSize='small' /> : <Eye fontSize='small' />}\r\n disabled={!sections?.length}\r\n >\r\n Preview\r\n </Button>\r\n <Button\r\n onClick={onEditHtml}\r\n size=\"small\"\r\n variant={editHtml ? 'contained' : 'outlined'}\r\n color={editHtml ? 'primary' : 'inherit'}\r\n sx={(theme) => ({ color: editHtml ? undefined : `${theme.palette.theme.secondary[1000]} !important` })}\r\n startIcon={<CodeOutlinedIcon fontSize='small' />}\r\n disabled={!sections?.length || preview}\r\n >\r\n {editHtml ? 'Exit HTML Edit' : 'Edit HTML'}\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n onClick={onSave}\r\n size=\"small\"\r\n sx={{ boxShadow: 'none' }}\r\n disabled={!sections?.length || isSaving}\r\n >\r\n {isSaving ? 'Saving...' : 'Save'}\r\n </Button>\r\n </>\r\n ) : (\r\n editMode ? (\r\n <>\r\n {isEditingHeaderFooter ? (\r\n <>\r\n <Button\r\n onClick={() => setIsEditingHeaderFooter(false)}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n >\r\n Cancel Editing\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n onClick={onSaveHeaderFooter}\r\n size=\"small\"\r\n sx={{ boxShadow: 'none' }}\r\n >\r\n Save Changes\r\n </Button>\r\n </>\r\n ) : (\r\n <>\r\n <Button\r\n onClick={() => setIsEditingHeaderFooter(true)}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n startIcon={<Edit fontSize='small' />}\r\n disabled={preview}\r\n >\r\n Edit Header/Footer\r\n </Button>\r\n <Button\r\n onClick={onPreview}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n startIcon={preview ? <EyeOff fontSize='small' /> : <Eye fontSize='small' />}\r\n disabled={!sections?.length}\r\n >\r\n Preview\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n onClick={onSave}\r\n size=\"small\"\r\n sx={{ boxShadow: 'none' }}\r\n disabled={!sections?.length}\r\n >\r\n Save\r\n </Button>\r\n <Button\r\n onClick={() => onEditModeChange && onEditModeChange()}\r\n size=\"small\"\r\n variant='outlined'\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important` })}\r\n >\r\n Cancel\r\n </Button>\r\n </>\r\n )}\r\n </>\r\n ) : (\r\n <Button\r\n variant=\"contained\"\r\n onClick={() => onEditModeChange && onEditModeChange()}\r\n size=\"small\"\r\n sx={{ boxShadow: 'none' }}\r\n startIcon={<Edit fontSize='small' />}\r\n disabled={!sections?.length}\r\n >\r\n Edit\r\n </Button>\r\n )\r\n )}\r\n </Stack>\r\n </Toolbar>\r\n </AppBar>\r\n );\r\n};\r\n\r\nexport default EditorHeader;","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2m-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2m0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2\"\n}), 'DragIndicator');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m14 4 2.29 2.29-2.88 2.88 1.42 1.42 2.88-2.88L20 10V4zm-4 0H4v6l2.29-2.29 4.71 4.7V20h2v-8.41l-5.29-5.3z\"\n}), 'CallSplit');","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { lazy, Suspense } from 'react';\r\n\r\nimport Modal from '../../../components/modal/modal';\r\nimport Typography from '../../../components/typography/typography';\r\nimport Button from '../../../components/button/button';\r\nimport Select from '../../../components/select/select';\r\n\r\nimport {\r\n\tBox,\r\n\tDialogActions,\r\n\tDialogContent,\r\n\tDialogProps,\r\n\tDialogTitle,\r\n\tIconButton,\r\n\tMenuItem\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\n\r\nimport './edit-section-modal.scss';\r\nimport { IEmail } from '../utils/types';\r\nconst CustomEditor = lazy(() => import('../../../components/editor/custom-editor'));\r\nimport { SectionData } from '../types/editor';\r\n\r\ninterface EditSectionModalProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: (value: boolean) => void;\r\n\tmodalProps: DialogProps;\r\n\tsection: SectionData;\r\n\tplaceholders: Record<string, any>[];\r\n\thandleSave: (e: any) => void;\r\n\thandleAddPlaceholder: (placeholder: string) => void;\r\n\thandleEditorReady: (placeholder: string) => void;\r\n}\r\n\r\nconst EditSectionModal: React.FC<EditSectionModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tmodalProps,\r\n\tsection,\r\n\tplaceholders,\r\n\thandleSave,\r\n\thandleAddPlaceholder,\r\n\thandleEditorReady,\r\n}) => {\r\n\r\n\tconst handleModalClose = () => {\r\n\t\tsetIsOpen(null);\r\n\t};\r\n\r\n\tconst handleContinue = (e) => {\r\n\t\thandleSave(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={handleModalClose}\r\n\t\t\tmaxWidth='lg'\r\n\t\t\tmaxHeight='md'\r\n\t\t\tfullWidth\r\n\t\t\t{...modalProps}>\r\n\t\t\t<DialogTitle className='editSectionModal--DialogTitle'>\r\n\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\r\n\t\t\t\t\tEdit Content\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<Box display='flex' alignItems={'center'} gap={1} position='absolute' right='1%' top='4px'>\r\n\t\t\t\t\t<Select\r\n\t\t\t\t\t\tdisplayEmpty\r\n\t\t\t\t\t\tvalue=''\r\n\t\t\t\t\t\tsize='small'\r\n\t\t\t\t\t\trenderValue={() => 'Add placeholder'}\r\n\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tbgcolor: 'white',\r\n\t\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\t\t'& .MuiSelect-select': { py: 0.75 }\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\tif (e.target.value) {\r\n\t\t\t\t\t\t\t\thandleAddPlaceholder(e.target.value as string);\r\n\t\t\t\t\t\t\t\te.target.value = '';\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{placeholders.map((option) => (\r\n\t\t\t\t\t\t\t<MenuItem key={option.value} value={option.value}>\r\n\t\t\t\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>{option.label}</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</Select>\r\n\t\t\t\t\t<IconButton onClick={handleModalClose}>\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</Box>\r\n\t\t\t</DialogTitle>\r\n\t\t\t<DialogContent className='editSectionModal--DialogContents'>\r\n\t\t\t\t<Suspense>\r\n\t\t\t\t\t<CustomEditor handleEditorReady={handleEditorReady} data={section.content}/>\r\n\t\t\t\t</Suspense>\r\n\t\t\t</DialogContent>\r\n\t\t\t<DialogActions className='editSectionModal--DialogAction'>\r\n\t\t\t\t<Box display='flex' gap={1.5}>\r\n\t\t\t\t\t<Button className='editSectionModal--DialogAction--WhiteBtn' onClick={handleModalClose}>Cancel</Button>\r\n\t\t\t\t\t<Button onClick={(e) => handleContinue(e)}>Save</Button>\r\n\t\t\t\t</Box>\r\n\t\t\t</DialogActions>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n\r\nexport default EditSectionModal;\r\n","/* eslint-disable unused-imports/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n\r\nimport { useCallback, useMemo } from 'react';\r\n\r\n// Enhanced Custom hook for CKEditor style extraction and reverse conversion\r\nexport const useCKEditorStyleExtractor = () => {\r\n // HTML tag to CSS style mappings\r\n const tagStyleMap = useMemo(() => ({\r\n 'i': { fontStyle: 'italic' },\r\n 'em': { fontStyle: 'italic' },\r\n 'b': { fontWeight: 'bold' },\r\n 'strong': { fontWeight: 'bold' },\r\n 'u': { textDecoration: 'underline' },\r\n 's': { textDecoration: 'line-through' },\r\n 'strike': { textDecoration: 'line-through' },\r\n 'del': { textDecoration: 'line-through' },\r\n 'sup': { verticalAlign: 'super', fontSize: 'smaller' },\r\n 'sub': { verticalAlign: 'sub', fontSize: 'smaller' },\r\n 'small': { fontSize: 'smaller' },\r\n 'big': { fontSize: 'larger' },\r\n 'mark': { backgroundColor: 'yellow' },\r\n 'code': { fontFamily: 'monospace' },\r\n 'kbd': { fontFamily: 'monospace', backgroundColor: '#f1f1f1', padding: '2px 4px', borderRadius: '3px' },\r\n 'samp': { fontFamily: 'monospace' },\r\n 'var': { fontStyle: 'italic', fontFamily: 'monospace' }\r\n }), []);\r\n\r\n // Reverse mapping: CSS styles to HTML tags (for reverse conversion)\r\n const styleTagMap = useMemo(() => {\r\n const reverseMap = {};\r\n \r\n // Create reverse mapping with priority for semantic tags\r\n const tagPriority = {\r\n 'fontStyle-italic': 'i',\r\n 'fontWeight-bold': 'b',\r\n 'textDecoration-underline': 'u',\r\n 'textDecoration-line-through': 's',\r\n 'verticalAlign-super': 'sup',\r\n 'verticalAlign-sub': 'sub',\r\n 'fontSize-smaller': 'small',\r\n 'fontSize-larger': 'big',\r\n 'backgroundColor-yellow': 'mark'\r\n };\r\n\r\n Object.entries(tagPriority).forEach(([styleKey, tag]) => {\r\n reverseMap[styleKey] = tag;\r\n });\r\n\r\n return reverseMap;\r\n }, []);\r\n\r\n // CSS property mappings for camelCase conversion\r\n const cssPropertyMap = useMemo(() => ({\r\n 'font-family': 'fontFamily',\r\n 'font-size': 'fontSize',\r\n 'font-weight': 'fontWeight',\r\n 'font-style': 'fontStyle',\r\n 'text-align': 'textAlign',\r\n 'text-decoration': 'textDecoration',\r\n 'text-transform': 'textTransform',\r\n 'line-height': 'lineHeight',\r\n 'letter-spacing': 'letterSpacing',\r\n 'word-spacing': 'wordSpacing',\r\n 'color': 'color',\r\n 'background-color': 'backgroundColor',\r\n 'background-image': 'backgroundImage',\r\n 'background-size': 'backgroundSize',\r\n 'background-position': 'backgroundPosition',\r\n 'background-repeat': 'backgroundRepeat',\r\n 'border': 'border',\r\n 'border-color': 'borderColor',\r\n 'border-width': 'borderWidth',\r\n 'border-style': 'borderStyle',\r\n 'border-radius': 'borderRadius',\r\n 'margin': 'margin',\r\n 'margin-top': 'marginTop',\r\n 'margin-right': 'marginRight',\r\n 'margin-bottom': 'marginBottom',\r\n 'margin-left': 'marginLeft',\r\n 'padding': 'padding',\r\n 'padding-top': 'paddingTop',\r\n 'padding-right': 'paddingRight',\r\n 'padding-bottom': 'paddingBottom',\r\n 'padding-left': 'paddingLeft',\r\n 'width': 'width',\r\n 'height': 'height',\r\n 'max-width': 'maxWidth',\r\n 'max-height': 'maxHeight',\r\n 'min-width': 'minWidth',\r\n 'min-height': 'minHeight',\r\n 'display': 'display',\r\n 'position': 'position',\r\n 'top': 'top',\r\n 'right': 'right',\r\n 'bottom': 'bottom',\r\n 'left': 'left',\r\n 'float': 'float',\r\n 'clear': 'clear',\r\n 'overflow': 'overflow',\r\n 'opacity': 'opacity',\r\n 'z-index': 'zIndex',\r\n 'box-shadow': 'boxShadow',\r\n 'text-shadow': 'textShadow',\r\n 'vertical-align': 'verticalAlign'\r\n }), []);\r\n\r\n // Convert CSS property to camelCase\r\n const toCamelCase = useCallback((property) => {\r\n return cssPropertyMap[property] || \r\n property.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());\r\n }, [cssPropertyMap]);\r\n\r\n // Convert camelCase to kebab-case\r\n const toKebabCase = useCallback((property) => {\r\n return property.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n }, []);\r\n\r\n // Parse inline styles from element.style object\r\n const parseInlineStyles = useCallback((styleDeclaration) => {\r\n const styles = {};\r\n\r\n for (let i = 0; i < styleDeclaration.length; i++) {\r\n const property = styleDeclaration[i];\r\n const value = styleDeclaration.getPropertyValue(property);\r\n \r\n if (value) {\r\n const camelCaseProperty = toCamelCase(property);\r\n styles[camelCaseProperty] = value.trim();\r\n }\r\n }\r\n\r\n return styles;\r\n }, [toCamelCase]);\r\n\r\n // Extract styles based on semantic HTML tags\r\n const extractTagStyles = useCallback((element) => {\r\n const tagName = element.tagName.toLowerCase();\r\n return tagStyleMap[tagName] || {};\r\n }, [tagStyleMap]);\r\n\r\n // Extract nested/inherited styles from parent elements\r\n const extractNestedStyles = useCallback((element) => {\r\n const nestedStyles = {};\r\n let currentElement = element.parentElement;\r\n\r\n // Traverse up the DOM tree to collect inherited styles\r\n while (currentElement && currentElement.tagName !== 'BODY') {\r\n const tagName = currentElement.tagName.toLowerCase();\r\n \r\n // Add tag-based styles from parents\r\n if (tagStyleMap[tagName]) {\r\n Object.entries(tagStyleMap[tagName]).forEach(([prop, value]) => {\r\n // Only add if not already defined (child takes precedence)\r\n if (!nestedStyles[prop]) {\r\n nestedStyles[prop] = value;\r\n }\r\n });\r\n }\r\n\r\n // Add inline styles from parents that can be inherited\r\n if (currentElement.style.length > 0) {\r\n const inheritableProps = ['color', 'fontFamily', 'fontSize', 'lineHeight', 'textAlign'];\r\n const parentStyles = parseInlineStyles(currentElement.style);\r\n \r\n inheritableProps.forEach(prop => {\r\n if (parentStyles[prop] && !nestedStyles[prop]) {\r\n nestedStyles[prop] = parentStyles[prop];\r\n }\r\n });\r\n }\r\n\r\n currentElement = currentElement.parentElement;\r\n }\r\n\r\n return nestedStyles;\r\n }, [tagStyleMap, parseInlineStyles]);\r\n\r\n // Extract image-specific styles\r\n const extractImageStyles = useCallback((imgElement, styleData) => {\r\n const imageStyles = {};\r\n\r\n if (imgElement.width) imageStyles.width = `${imgElement.width}px`;\r\n if (imgElement.height) imageStyles.height = `${imgElement.height}px`;\r\n if (imgElement.getAttribute('align')) {\r\n imageStyles.textAlign = imgElement.getAttribute('align');\r\n }\r\n\r\n // Merge with existing styles\r\n Object.assign(styleData.styles, imageStyles);\r\n \r\n // Add image-specific metadata\r\n styleData.src = imgElement.src;\r\n styleData.alt = imgElement.alt;\r\n }, []);\r\n\r\n // Main extraction function\r\n const extractStyles = useCallback((editorContent, options = {}) => {\r\n const {\r\n includeInlineStyles = true,\r\n includeTagStyles = true,\r\n includeComputedStyles = false,\r\n groupByElement = false,\r\n filterEmptyStyles = true,\r\n mergeNestedStyles = true\r\n } = options;\r\n\r\n // Create a temporary DOM element to parse the content\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = editorContent;\r\n\r\n const results = [];\r\n const elements = tempDiv.querySelectorAll('*');\r\n\r\n elements.forEach((element, index) => {\r\n const styleData = {\r\n elementType: element.tagName.toLowerCase(),\r\n elementIndex: index,\r\n className: element.className || null,\r\n id: element.id || null,\r\n styles: {},\r\n textContent: element.textContent?.trim() || null\r\n };\r\n\r\n // Extract inline styles\r\n if (includeInlineStyles && element.style.length > 0) {\r\n styleData.styles = { ...styleData.styles, ...parseInlineStyles(element.style) };\r\n }\r\n\r\n // Extract semantic tag styles (like <i>, <b>, etc.)\r\n if (includeTagStyles) {\r\n const tagStyles = extractTagStyles(element);\r\n styleData.styles = { ...styleData.styles, ...tagStyles };\r\n }\r\n\r\n // Extract nested styling context\r\n if (mergeNestedStyles) {\r\n const nestedStyles = extractNestedStyles(element);\r\n styleData.styles = { ...styleData.styles, ...nestedStyles };\r\n styleData.inheritedStyles = nestedStyles;\r\n }\r\n\r\n // Handle special cases for images\r\n if (element.tagName.toLowerCase() === 'img') {\r\n extractImageStyles(element, styleData);\r\n }\r\n\r\n // Filter empty styles if requested\r\n if (filterEmptyStyles && Object.keys(styleData.styles).length === 0 && !styleData.textContent) {\r\n return;\r\n }\r\n\r\n results.push(styleData);\r\n });\r\n\r\n return results;\r\n }, [parseInlineStyles, extractTagStyles, extractNestedStyles, extractImageStyles]);\r\n\r\n // Extract styles specifically for formatting tags\r\n const extractFormattingStyles = useCallback((editorContent) => {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = editorContent;\r\n \r\n const formattingTags = ['i', 'em', 'b', 'strong', 'u', 's', 'strike', 'del', 'sup', 'sub'];\r\n const formattingStyles = {};\r\n\r\n formattingTags.forEach(tag => {\r\n const elements = tempDiv.querySelectorAll(tag);\r\n elements.forEach((element, index) => {\r\n const key = `${tag}_${index}`;\r\n formattingStyles[key] = {\r\n ...tagStyleMap[tag],\r\n textContent: element.textContent,\r\n };\r\n });\r\n });\r\n\r\n return formattingStyles;\r\n }, [tagStyleMap]);\r\n\r\n // NEW: Convert styles object to HTML with semantic tags\r\n const stylesToHtml = useCallback((text, styles = {}, options = {}) => {\r\n const {\r\n preferSemanticTags = true,\r\n wrapInParagraph = true,\r\n preserveWhitespace = true\r\n } = options;\r\n\r\n if (!text || typeof text !== 'string') {\r\n return '';\r\n }\r\n\r\n let wrappedText = text;\r\n const inlineStyles = {};\r\n\r\n // Process each style property\r\n Object.entries(styles).forEach(([property, value]) => {\r\n const styleKey = `${property}-${value}`;\r\n \r\n // Check if this style can be converted to a semantic tag\r\n if (preferSemanticTags && styleTagMap[styleKey]) {\r\n const tag = styleTagMap[styleKey];\r\n wrappedText = `<${tag}>${wrappedText}</${tag}>`;\r\n } else {\r\n // Add to inline styles for non-semantic styles\r\n inlineStyles[property] = value;\r\n }\r\n });\r\n\r\n // Apply remaining inline styles\r\n if (Object.keys(inlineStyles).length > 0) {\r\n const styleAttr = Object.entries(inlineStyles)\r\n .map(([prop, val]) => `${toKebabCase(prop)}: ${val}`)\r\n .join('; ');\r\n \r\n wrappedText = `<span style=\"${styleAttr}\">${wrappedText}</span>`;\r\n }\r\n\r\n // Wrap in paragraph if requested\r\n if (wrapInParagraph) {\r\n wrappedText = `<p>${wrappedText}</p>`;\r\n }\r\n\r\n return wrappedText;\r\n }, [styleTagMap, toKebabCase]);\r\n\r\n // NEW: Convert multiple styled text segments to HTML\r\n const multipleStylesToHtml = useCallback((segments, options = {}) => {\r\n const {\r\n wrapInContainer = true,\r\n containerTag = 'div',\r\n separateElements = false\r\n } = options;\r\n\r\n if (!Array.isArray(segments)) {\r\n return '';\r\n }\r\n\r\n const htmlSegments = segments.map(segment => {\r\n const { text, styles = {}, wrapInParagraph = false } = segment;\r\n return stylesToHtml(text, styles, { ...options, wrapInParagraph });\r\n });\r\n\r\n let result = separateElements ? htmlSegments.join('\\n') : htmlSegments.join(' ');\r\n\r\n if (wrapInContainer) {\r\n result = `<${containerTag}>${result}</${containerTag}>`;\r\n }\r\n\r\n return result;\r\n }, [stylesToHtml]);\r\n\r\n // NEW: Apply styles to existing HTML content\r\n const applyStylesToHtml = useCallback((htmlContent, styles = {}, targetSelector = '*') => {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = htmlContent;\r\n\r\n const targetElements = targetSelector === '*' \r\n ? tempDiv.querySelectorAll('*') \r\n : tempDiv.querySelectorAll(targetSelector);\r\n\r\n targetElements.forEach(element => {\r\n Object.entries(styles).forEach(([property, value]) => {\r\n const styleKey = `${property}-${value}`;\r\n \r\n // Check if this style should be converted to semantic tag\r\n if (styleTagMap[styleKey]) {\r\n const tag = styleTagMap[styleKey];\r\n const wrapper = document.createElement(tag);\r\n \r\n // Move the element's content to the wrapper\r\n while (element.firstChild) {\r\n wrapper.appendChild(element.firstChild);\r\n }\r\n \r\n element.appendChild(wrapper);\r\n } else {\r\n // Apply as inline style\r\n const kebabProperty = toKebabCase(property);\r\n element.style[kebabProperty] = value;\r\n }\r\n });\r\n });\r\n\r\n return tempDiv.innerHTML;\r\n }, [styleTagMap, toKebabCase]);\r\n\r\n // NEW: Extract and convert - one-step process\r\n const extractAndConvert = useCallback((editorContent, targetStyles = {}) => {\r\n const extracted = extractStyles(editorContent);\r\n const converted = {};\r\n\r\n extracted.forEach(item => {\r\n const key = item.className || item.id || `${item.elementType}_${item.elementIndex}`;\r\n const mergedStyles = { ...item.styles, ...targetStyles };\r\n \r\n if (item.textContent) {\r\n converted[key] = stylesToHtml(item.textContent, mergedStyles, { wrapInParagraph: false });\r\n }\r\n });\r\n\r\n return converted;\r\n }, [extractStyles, stylesToHtml]);\r\n\r\n // Generate CSS string from extracted styles\r\n const generateCSS = useCallback((extractedStyles) => {\r\n let css = '';\r\n \r\n extractedStyles.forEach((item, index) => {\r\n const selector = item.className \r\n ? `.${item.className}` \r\n : item.id \r\n ? `#${item.id}` \r\n : `${item.elementType}-${index}`;\r\n\r\n const styleRules = Object.entries(item.styles)\r\n .map(([prop, value]) => ` ${toKebabCase(prop)}: ${value};`)\r\n .join('\\n');\r\n\r\n if (styleRules) {\r\n css += `${selector} {\\n${styleRules}\\n}\\n\\n`;\r\n }\r\n });\r\n\r\n return css;\r\n }, [toKebabCase]);\r\n\r\n // Get flattened styles object\r\n const getFlattenedStyles = useCallback((extractedStyles) => {\r\n const flattened = {};\r\n \r\n extractedStyles.forEach((item, index) => {\r\n const prefix = item.className || item.id || `${item.elementType}_${index}`;\r\n Object.entries(item.styles).forEach(([prop, value]) => {\r\n flattened[`${prefix}_${prop}`] = value;\r\n });\r\n });\r\n\r\n return flattened;\r\n }, []);\r\n\r\n const getSingleStyles = useCallback((extractedStyles) => {\r\n const flattened = {};\r\n \r\n extractedStyles.forEach((item, index) => {\r\n // const prefix = item.className || item.id || `${item.elementType}_${index}`;\r\n Object.entries(item.styles).forEach(([prop, value]) => {\r\n flattened[prop] = value;\r\n });\r\n });\r\n\r\n return flattened;\r\n }, []);\r\n\r\n return {\r\n // Original functions\r\n extractStyles,\r\n extractFormattingStyles,\r\n generateCSS,\r\n getFlattenedStyles,\r\n getSingleStyles,\r\n \r\n \r\n // New reverse conversion functions\r\n stylesToHtml,\r\n multipleStylesToHtml,\r\n applyStylesToHtml,\r\n extractAndConvert\r\n };\r\n};","import { useCallback, useRef } from 'react';\r\n\r\n/**\r\n * Custom hook for debouncing section content updates\r\n * @param callback - The function to debounce\r\n * @param delay - Delay in milliseconds (default: 300ms)\r\n * @returns Debounced function\r\n */\r\nexport const useDebouncedUpdate = <T extends (...args: any[]) => void>(\r\n callback: T,\r\n delay: number = 300\r\n): T => {\r\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\r\n\r\n const debouncedCallback = useCallback(\r\n (...args: Parameters<T>) => {\r\n // Clear existing timeout\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n\r\n // Set new timeout\r\n timeoutRef.current = setTimeout(() => {\r\n callback(...args);\r\n }, delay);\r\n },\r\n [callback, delay]\r\n ) as T;\r\n\r\n return debouncedCallback;\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useRef, useState, lazy, Suspense, useCallback, useMemo } from 'react';\r\nimport { useDraggable, useDroppable } from '@dnd-kit/core';\r\nimport {\r\n\tBox,\r\n\tPaper,\r\n\tMenuItem,\r\n\tFormControl,\r\n\tIconButton,\r\n\tFade,\r\n\tFormControlLabel,\r\n\tSkeleton\r\n} from '@mui/material';\r\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\r\nimport SplitIcon from '@mui/icons-material/CallSplit';\r\nimport { SectionData } from '../types/editor';\r\nimport { Edit, Save, Trash } from '../../../components/icons';\r\nimport Select from '../../../components/select/select';\r\nimport Typography from '../../../components/typography/typography';\r\nimport EditSectionModal from '../edit-section-modal/edit-section-modal';\r\nimport Checkbox from '../../../components/checkbox/checkbox';\r\nimport Chip from '../../../components/chip/chip';\r\nimport Close from '@mui/icons-material/Close';\r\nimport { useCKEditorStyleExtractor } from '../utils/style-extractor';\r\nimport { useDebouncedUpdate } from '../hooks/useDebouncedUpdate';\r\n\r\nconst CustomEditor = lazy(() => import('../../../components/editor/custom-editor'));\r\n\r\ninterface EditorSectionProps {\r\n\tsection: SectionData;\r\n\tisSelected: boolean;\r\n\tisDragging: boolean;\r\n\tisOver: boolean;\r\n\tonSelect: () => void;\r\n\tonUpdate: (content: string, options?: any) => void;\r\n\tonSplit: (content1: string, content2: string) => void;\r\n\tonDelete: () => void;\r\n\tplaceholders: Array<{ value: string; label: string }>;\r\n\tsetIsSectionEditing:(value: boolean)=> void;\r\n}\r\n\r\nconst editableSections = ['text', 'text-block', 'heading', 'heading-1', 'heading-2', 'heading-3', 'heading-4'];\r\n\r\nconst EditorSection: React.FC<EditorSectionProps> = ({\r\n\tsection,\r\n\tisSelected,\r\n\tisDragging,\r\n\tisOver,\r\n\tonSelect,\r\n\tonUpdate,\r\n\tonSplit,\r\n\tonDelete,\r\n\tplaceholders,\r\n\tsetIsSectionEditing\r\n}) => {\r\n\tconst { extractStyles, getSingleStyles } = useCKEditorStyleExtractor();\r\n\r\n\tconst {\r\n\t\tattributes,\r\n\t\tlisteners,\r\n\t\tsetNodeRef: setDraggableRef,\r\n\t\ttransform\r\n\t} = useDraggable({ id: section.id });\r\n\r\n\tconst { setNodeRef: setDroppableRef } = useDroppable({ id: section.id });\r\n\tconst [isEditing, setIsEditing] = useState(false);\r\n\tconst [isHovered, setIsHovered] = useState(false);\r\n\tconst [isOpenEditSectionModal, setIsOpenEditSectionModal] = useState(false);\r\n\tconst [isEditedFromSource, setIsEditedFromSource] = useState(Boolean(section?.is_edited_from_source));\r\n\tconst [localContent, setLocalContent] = useState(section.content);\r\n\tconst [hasUserEdited, setHasUserEdited] = useState(false); // Track if user actually made changes\r\n\tconst editorRef = useRef<any>(null);\r\n\tconst mouseHoverTimeoutRef = useRef<number | null>(null);\r\n\tconst cursorPositionRef = useRef<{ from: number; to: number } | null>(null);\r\n\tconst isRestoringCursorRef = useRef(false);\r\n\t\r\n\t// Ref-based content tracking for contentEditable optimization\r\n\t// This ref tracks content changes without triggering re-renders during editing,\r\n\t// improving performance and preventing cursor position loss\r\n\tconst contentRef = useRef<string>(section.content);\r\n\tconst originalContentRef = useRef<string>(section.content); // Store original content\r\n\r\n\t// Create debounced version of onUpdate with 300ms delay\r\n\tconst debouncedUpdate = useDebouncedUpdate(onUpdate, 300);\r\n\r\n\t// Memoize style calculation\r\n\tconst style = useMemo(() => {\r\n\t\treturn transform\r\n\t\t\t? {\r\n\t\t\t\t\ttransform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,\r\n\t\t\t\t\ttransition: 'none'\r\n\t\t\t\t}\r\n\t\t\t: { transition: 'all 0.2s ease' };\r\n\t}, [transform]);\r\n\r\n\t// Memoize sx prop for Paper to prevent re-creation\r\n\tconst paperSx = useMemo(() => ({\r\n\t\tposition: 'relative',\r\n\t\tborder: '1px dashed',\r\n\t\tborderColor: isSelected ? 'primary.main' : isOver ? 'primary.main' : 'grey.400',\r\n\t\tborderRadius: 1,\r\n\t\tbgcolor: 'white',\r\n\t\topacity: isDragging ? 0.7 : 1,\r\n\t\tboxShadow: 'none',\r\n\t\ttransition: 'all 0.2s ease',\r\n\t\t'&:hover': {\r\n\t\t\tboxShadow: 'none'\r\n\t\t},\r\n\t\t...(isOver && { borderColor: 'primary.main', boxShadow: 'none' })\r\n\t}), [isSelected, isOver, isDragging]);\r\n\r\n\t// Memoize merged ref to prevent re-creation\r\n\tconst mergedRef = useCallback((node: HTMLElement | null) => {\r\n\t\tsetDraggableRef(node);\r\n\t\tsetDroppableRef(node);\r\n\t}, [setDraggableRef, setDroppableRef]);\r\n\r\n\t// Memoize event handlers\r\n\tconst handleDblClick = useCallback(() => {\r\n\t\tif (editableSections.includes(section.type)) {\r\n\t\t\thandleEditing();\r\n\t\t}\r\n\t}, [section.type]);\r\n\r\n\tconst handleEditing = useCallback(() => {\r\n\t\t// Store original content when entering edit mode\r\n\t\toriginalContentRef.current = section.content;\r\n\t\tsetHasUserEdited(false);\r\n\t\t\r\n\t\tif (section?.isSplitPair) {\r\n\t\t\tsetIsOpenEditSectionModal(true);\r\n\t\t} else {\r\n\t\t\tsetIsEditing(true);\r\n\t\t\tsetIsSectionEditing(true);\r\n\t\t}\r\n\t}, [section?.isSplitPair, section.content, setIsSectionEditing]);\r\n\r\n\tconst handleEditorReady = useCallback((editor: any) => {\r\n\t\teditorRef.current = editor;\r\n\t\t\r\n\t\t// Track cursor position changes in the editor\r\n\t\tif (editor?._tiptap) {\r\n\t\t\teditor._tiptap.on('selectionUpdate', () => {\r\n\t\t\t\tif (!isRestoringCursorRef.current && editor._tiptap) {\r\n\t\t\t\t\tconst { from, to } = editor._tiptap.state.selection;\r\n\t\t\t\t\tcursorPositionRef.current = { from, to };\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t// Track when user actually makes changes\r\n\t\t\teditor._tiptap.on('update', ({ transaction }) => {\r\n\t\t\t\t// Only mark as edited if the transaction actually changed the document\r\n\t\t\t\tif (transaction.docChanged) {\r\n\t\t\t\t\tsetHasUserEdited(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst handleSave = useCallback((e: React.MouseEvent) => {\r\n\t\te.stopPropagation();\r\n\t\tif (editorRef.current) {\r\n\t\t\t// Save cursor position before getting content\r\n\t\t\tif (editorRef.current._tiptap) {\r\n\t\t\t\tconst { from, to } = editorRef.current._tiptap.state.selection;\r\n\t\t\t\tcursorPositionRef.current = { from, to };\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Get content from editor\r\n\t\t\t// Use getData() which returns sourceCodeRef.current from CustomEditor\r\n\t\t\t// This preserves the HTML structure better than getHTML()\r\n\t\t\tconst content = editorRef.current.getData();\r\n\t\t\t\r\n\t\t\t// Update ref immediately for instant tracking\r\n\t\t\tcontentRef.current = content;\r\n\t\t\t\r\n\t\t\t// Update local state for UI feedback\r\n\t\t\tsetLocalContent(content);\r\n\t\t\t\r\n\t\t\tconst styles = extractStyles(section.content, {\r\n\t\t\t\tincludeTagStyles: true,\r\n\t\t\t\tincludeInlineStyles: true,\r\n\t\t\t\tmergeNestedStyles: true,\r\n\t\t\t\tfilterEmptyStyles: true\r\n\t\t\t});\r\n\t\t\tconst single = getSingleStyles(styles);\r\n\t\t\t// Merge styles safely\r\n\t\t\tconst mergedStyles = {\r\n\t\t\t\t...(section.attributes?.styles || {}),\r\n\t\t\t\t...single\r\n\t\t\t};\r\n\t\r\n\t\t\t// Merge attributes, giving priority to new props\r\n\t\t\tconst mergedAttributes = {\r\n\t\t\t\t...(section.attributes || {}),\r\n\t\t\t\tstyles: mergedStyles,\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\t// Use debounced update to prevent excessive re-renders and API calls\r\n\t\t\tdebouncedUpdate(content, { is_edited_from_source: isEditedFromSource, attributes: mergedAttributes });\r\n\t\t}\r\n\t\tsetIsEditing(false);\r\n\t\tsetIsSectionEditing(false)\r\n\t\tsetIsOpenEditSectionModal(false);\r\n\t\tsetHasUserEdited(false); // Reset edit flag\r\n\t}, [debouncedUpdate, isEditedFromSource, extractStyles, getSingleStyles, section.content, section.attributes, setIsSectionEditing, hasUserEdited]);\r\n\r\n\tconst handleSplit = useCallback(() => {\r\n\t\tconst content = section.content || '';\r\n\t\tconst firstHalf = content;\r\n\t\tconst secondHalf = '';\r\n\t\tonSplit(firstHalf, secondHalf);\r\n\t}, [section.content, onSplit]);\r\n\r\n\tconst handleAddPlaceholder = useCallback((placeholder: string) => {\r\n\t\tif (editorRef.current) {\r\n\t\t\tconst viewFragment = editorRef.current.data.processor.toView(\r\n\t\t\t\t`{{${placeholder}}}`\r\n\t\t\t);\r\n\t\t\tconst modelFragment = editorRef.current.data.toModel(viewFragment);\r\n\t\t\teditorRef.current.model.insertContent(modelFragment);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst handleMouseEnter = useCallback(() => {\r\n\t\tif (mouseHoverTimeoutRef.current !== null) {\r\n\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\r\n\t\t}\r\n\t\tmouseHoverTimeoutRef.current = window.setTimeout(() => {\r\n\t\t\tsetIsHovered(true);\r\n\t\t}, 50);\r\n\t}, []);\r\n\r\n\tconst handleMouseLeave = useCallback(() => {\r\n\t\tif (mouseHoverTimeoutRef.current !== null) {\r\n\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\r\n\t\t}\r\n\t\tmouseHoverTimeoutRef.current = window.setTimeout(() => {\r\n\t\t\tsetIsHovered(false);\r\n\t\t}, 50);\r\n\t}, []);\r\n\r\n\tconst handleClick = useCallback((e: React.MouseEvent) => {\r\n\t\te.stopPropagation();\r\n\t\tonSelect();\r\n\t}, [onSelect]);\r\n\r\n\tconst handleDeleteClick = useCallback((e: React.MouseEvent) => {\r\n\t\te.stopPropagation();\r\n\t\tonDelete();\r\n\t}, [onDelete]);\r\n\r\n\tconst handleCancelEdit = useCallback(() => {\r\n\t\tsetIsEditing(false);\r\n\t\tsetIsSectionEditing(false)\r\n\t}, [setIsSectionEditing]);\r\n\r\n\tconst handleCheckboxChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n\t\tsetIsEditedFromSource(e.target.checked);\r\n\t}, []);\r\n\r\n\tconst handleSelectChange = useCallback((e: any) => {\r\n\t\tif (e.target.value) {\r\n\t\t\thandleAddPlaceholder(e.target.value as string);\r\n\t\t\te.target.value = '';\r\n\t\t}\r\n\t}, [handleAddPlaceholder]);\r\n\r\n\t// Cleanup function for hover timeout\r\n\tReact.useEffect(() => {\r\n\t\treturn () => {\r\n\t\t\tif (mouseHoverTimeoutRef.current !== null) {\r\n\t\t\t\twindow.clearTimeout(mouseHoverTimeoutRef.current);\r\n\t\t\t}\r\n\t\t};\r\n\t}, []);\r\n\r\n\t// Sync local content with section content when it changes externally\r\n\t// and restore cursor position if editor is focused\r\n\tReact.useEffect(() => {\r\n\t\t// Only update if content actually changed from external source\r\n\t\t// Skip if we're currently editing (content changes come from user input)\r\n\t\tif (contentRef.current === section.content) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\t// Update both ref and state for consistency\r\n\t\tcontentRef.current = section.content;\r\n\t\tsetLocalContent(section.content);\r\n\t\t\r\n\t\t// Only restore cursor position if:\r\n\t\t// 1. Editor is active (isEditing)\r\n\t\t// 2. Content change came from external source (not from user typing)\r\n\t\t// 3. We're not currently in the middle of restoring cursor\r\n\t\tif (isEditing && editorRef.current?._tiptap && cursorPositionRef.current && !isRestoringCursorRef.current) {\r\n\t\t\tconst editor = editorRef.current._tiptap;\r\n\t\t\tconst { from, to } = cursorPositionRef.current;\r\n\t\t\t\r\n\t\t\t// Use requestAnimationFrame to ensure DOM has updated\r\n\t\t\trequestAnimationFrame(() => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tisRestoringCursorRef.current = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Validate that the cursor position is still valid after content update\r\n\t\t\t\t\tconst docSize = editor.state.doc.content.size;\r\n\t\t\t\t\tconst validFrom = Math.min(from, docSize);\r\n\t\t\t\t\tconst validTo = Math.min(to, docSize);\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Restore selection\r\n\t\t\t\t\teditor.commands.setTextSelection({ from: validFrom, to: validTo });\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Ensure editor maintains focus\r\n\t\t\t\t\tif (!editor.isFocused) {\r\n\t\t\t\t\t\teditor.commands.focus();\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tconsole.warn('Failed to restore cursor position:', error);\r\n\t\t\t\t} finally {\r\n\t\t\t\t\tisRestoringCursorRef.current = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}, [section.content, isEditing]);\r\n\r\n\t// Memoize content rendering to prevent unnecessary re-renders\r\n\t// Only re-render when isEditing state changes or when not editing and localContent changes\r\n\tconst contentRenderer = useMemo(() => {\r\n\t\tif (isEditing) {\r\n\t\t\treturn (\r\n\t\t\t\t<Suspense fallback={<Skeleton />}>\r\n\t\t\t\t\t<CustomEditor \r\n\t\t\t\t\t\tkey={`editor-${section.id}`}\r\n\t\t\t\t\t\teditorRef={editorRef}\r\n\t\t\t\t\t\thandleEditorReady={handleEditorReady} \r\n\t\t\t\t\t\tdata={localContent}\r\n\t\t\t\t\t\tonError={(error: Error) => console.error('Editor error:', error)}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Suspense>\r\n\t\t\t);\r\n\t\t}\r\n\t\t\r\n\t\treturn (\r\n\t\t\t<Box\r\n\t\t\t\tdangerouslySetInnerHTML={{ __html: localContent }}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tposition: 'relative',\r\n\t\t\t\t\tpy: section.type === 'divider' ? 1 : 0,\r\n\t\t\t\t\tlineHeight: 1.6,\r\n\t\t\t\t\t'& p': { margin: 0 }\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}, [isEditing, localContent, section.type, section.id]);\r\n\r\n\t// Memoize placeholder options\r\n\tconst placeholderOptions = useMemo(() => \r\n\t\tplaceholders.map((option) => (\r\n\t\t\t<MenuItem key={option.value} value={option.value}>\r\n\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>{option.label}</Typography>\r\n\t\t\t</MenuItem>\r\n\t\t))\r\n\t, [placeholders]);\r\n\r\n\treturn (\r\n\t\t<Paper\r\n\t\t\tref={mergedRef}\r\n\t\t\tstyle={style}\r\n\t\t\televation={isHovered || isSelected ? 3 : 1}\r\n\t\t\tsx={paperSx}\r\n\t\t\tonClick={handleClick}\r\n\t\t\tonDoubleClick={handleDblClick}\r\n\t\t\tonMouseEnter={handleMouseEnter}\r\n\t\t\tonMouseLeave={handleMouseLeave}>\r\n\t\t\t{isOver && !isDragging && (\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\tright: 0,\r\n\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\tborder: '2px dashed',\r\n\t\t\t\t\t\tborderColor: 'primary.main',\r\n\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\tbgcolor: 'rgba(25, 118, 210, 0.04)',\r\n\t\t\t\t\t\tzIndex: 10,\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: 'center',\r\n\t\t\t\t\t\tpointerEvents: 'none'\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Typography type='s2' color='primary' weight='medium'>Drop here</Typography>\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t<Box\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tbgcolor: 'grey.50',\r\n\t\t\t\t\tp: 1,\r\n\t\t\t\t\tdisplay: 'flex',\r\n\t\t\t\t\talignItems: 'center',\r\n\t\t\t\t\tjustifyContent: 'space-between',\r\n\t\t\t\t\tborderBottom: '1px solid',\r\n\t\t\t\t\tborderColor: 'grey.200'\r\n\t\t\t\t}}>\r\n\t\t\t\t<Box\r\n\t\t\t\t\t{...listeners}\r\n\t\t\t\t\t{...attributes}\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\tcursor: 'grab',\r\n\t\t\t\t\t\tpx: 1,\r\n\t\t\t\t\t\tpy: 0.5,\r\n\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\ttransition: 'background-color 0.2s ease',\r\n\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.100' },\r\n\t\t\t\t\t\t'&:active': { cursor: 'grabbing' }\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t<DragIndicatorIcon\r\n\t\t\t\t\t\tsx={{ color: 'grey.600', fontSize: '1.2rem', mr: 0.5 }}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<Typography type='s3' color='theme.secondary.600' weight='medium'>Move</Typography>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n\t\t\t\t\t{isEditing ? (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<FormControlLabel control={\r\n\t\t\t\t\t\t\t\t<Checkbox \r\n\t\t\t\t\t\t\t\t\tonChange={handleCheckboxChange} \r\n\t\t\t\t\t\t\t\t\tdefaultChecked={isEditedFromSource}/>} \r\n\t\t\t\t\t\t\t\t\tlabel={<Typography type='s2' color='theme.secondary.1000'>Edited from source</Typography>} />\r\n\t\t\t\t\t\t\t<FormControl size='small' sx={{ minWidth: 160 }}>\r\n\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\tdisplayEmpty\r\n\t\t\t\t\t\t\t\t\tvalue=''\r\n\t\t\t\t\t\t\t\t\tsize='small'\r\n\t\t\t\t\t\t\t\t\trenderValue={() => 'Add placeholder...'}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'white',\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\t\t\t\t\t'& .MuiSelect-select': { py: 0.75 }\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tonChange={handleSelectChange}>\r\n\t\t\t\t\t\t\t\t\t{placeholderOptions}\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t</FormControl>\r\n\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t<IconButton size='small' onClick={handleSave}>\r\n\t\t\t\t\t\t\t\t\t<Save fontSize='small' color='inherit' />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t<IconButton size='small' onClick={handleCancelEdit} color='error'>\r\n\t\t\t\t\t\t\t\t\t<Close fontSize='small' color='inherit' />\r\n\t\t\t\t\t\t\t\t</IconButton>\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\t\t<Fade in={isHovered || isSelected} timeout={200}>\r\n\t\t\t\t\t\t\t<Box sx={{ display: 'flex', gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t{section?.is_edited_from_source && (\r\n\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Edited From Source\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tsx={(theme) => ({ \r\n\t\t\t\t\t\t\t\t\t\t\ttextTransform: 'capitalize', \r\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette.theme?.tertiary1?.[200], \r\n\t\t\t\t\t\t\t\t\t\t\tcolor: theme.palette.theme?.tertiary1?.[900]\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{editableSections.includes(section.type) &&\r\n\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\tsize='small'\r\n\t\t\t\t\t\t\t\t\t\tonClick={handleEditing}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\r\n\t\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' }\r\n\t\t\t\t\t\t\t\t\t\t}}>\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}\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\tonClick={handleSplit}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\r\n\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' },\r\n\t\t\t\t\t\t\t\t\t\topacity: section?.splitWidth === 25 ? 0.5 : 1\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tdisabled={section?.splitWidth === 25}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<SplitIcon fontSize='small' color='primary' />\r\n\t\t\t\t\t\t\t\t</IconButton>\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\tonClick={handleDeleteClick}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tbgcolor: 'grey.100',\r\n\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: 'grey.200' }\r\n\t\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t<Trash fontSize='small' sx={{ color: 'theme.error.500' }} />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Fade>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t\t<Box sx={{ p: 3, bgcolor: 'white' }}>\r\n\t\t\t\t<style>\r\n {`\r\n\t\t\t\t\t\ta {\r\n\t\t\t\t\t\t\tcolor: #007bff !important;\r\n\t\t\t\t\t\t\ttext-decoration: none !important;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ta:hover {\r\n\t\t\t\t\t\t\ttext-decoration: underline;\r\n\t\t\t\t\t\t}\r\n `}\r\n </style>\r\n\t\t\t\t{contentRenderer}\r\n\t\t\t</Box>\r\n\t\t\t{isOpenEditSectionModal && <EditSectionModal\r\n\t\t\t\tisOpen={isOpenEditSectionModal}\r\n\t\t\t\tsetIsOpen={setIsOpenEditSectionModal}\r\n\t\t\t\tmodalProps={{ open: isOpenEditSectionModal }}\r\n\t\t\t\tplaceholders={placeholders}\r\n\t\t\t\thandleSave={handleSave}\r\n\t\t\t\thandleAddPlaceholder={handleAddPlaceholder}\r\n\t\t\t\thandleEditorReady={handleEditorReady}\r\n\t\t\t\tsection={section}\r\n\t\t\t/>}\r\n\t\t</Paper>\r\n\t);\r\n};\r\n\r\n// Custom comparison function to prevent unnecessary re-renders\r\n// Return true if props are equal (skip re-render), false if different (re-render)\r\nconst arePropsEqual = (prevProps: EditorSectionProps, nextProps: EditorSectionProps): boolean => {\r\n\t// Check if section data has changed\r\n\tif (prevProps.section.id !== nextProps.section.id) return false;\r\n\tif (prevProps.section.content !== nextProps.section.content) return false;\r\n\tif (prevProps.section.type !== nextProps.section.type) return false;\r\n\tif (prevProps.section.is_edited_from_source !== nextProps.section.is_edited_from_source) return false;\r\n\tif (prevProps.section.isSplitPair !== nextProps.section.isSplitPair) return false;\r\n\tif (prevProps.section.splitWidth !== nextProps.section.splitWidth) return false;\r\n\t\r\n\t// Check if interaction states have changed\r\n\tif (prevProps.isSelected !== nextProps.isSelected) return false;\r\n\tif (prevProps.isDragging !== nextProps.isDragging) return false;\r\n\tif (prevProps.isOver !== nextProps.isOver) return false;\r\n\t\r\n\t// Check if placeholders array reference has changed\r\n\tif (prevProps.placeholders !== nextProps.placeholders) return false;\r\n\t\r\n\t// Deep comparison for section attributes (styles, etc.)\r\n\tconst prevAttrs = JSON.stringify(prevProps.section.attributes);\r\n\tconst nextAttrs = JSON.stringify(nextProps.section.attributes);\r\n\tif (prevAttrs !== nextAttrs) return false;\r\n\t\r\n\t// All props are equal, skip re-render\r\n\treturn true;\r\n};\r\n\r\n// Wrap component with React.memo and custom comparison function\r\nconst MemoizedEditorSection = React.memo(EditorSection, arePropsEqual);\r\nMemoizedEditorSection.displayName = 'EditorSection';\r\n\r\nexport default MemoizedEditorSection;","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42M10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5\"\n}), 'FormatBold');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z\"\n}), 'FormatItalic');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6m-7 2v2h14v-2z\"\n}), 'FormatUnderlined');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M15 15H3v2h12zm0-8H3v2h12zM3 13h18v-2H3zm0 8h18v-2H3zM3 3v2h18V3z\"\n}), 'FormatAlignLeft');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M7 15v2h10v-2zm-4 6h18v-2H3zm0-8h18v-2H3zm4-6v2h10V7zM3 3v2h18V3z\"\n}), 'FormatAlignCenter');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M3 21h18v-2H3zm6-4h12v-2H9zm-6-4h18v-2H3zm6-4h12V7H9zM3 3v2h18V3z\"\n}), 'FormatAlignRight');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M3 21h18v-2H3zm0-4h18v-2H3zm0-4h18v-2H3zm0-4h18V7H3zm0-6v2h18V3z\"\n}), 'FormatAlignJustify');","/* eslint-disable unused-imports/no-unused-vars */\r\nimport { Box, ToggleButton, ToggleButtonGroup, Tooltip, styled, toggleButtonGroupClasses } from \"@mui/material\";\r\nimport FormatAlignLeftIcon from '@mui/icons-material/FormatAlignLeft';\r\nimport FormatAlignCenterIcon from '@mui/icons-material/FormatAlignCenter';\r\nimport FormatAlignRightIcon from '@mui/icons-material/FormatAlignRight';\r\nimport FormatAlignJustifyIcon from '@mui/icons-material/FormatAlignJustify';\r\nimport Typography from \"../../../../components/typography/typography\";\r\n\r\nconst StyledToggleButtonGroup = styled(ToggleButtonGroup)(({ theme, item }) => ({\r\n display: 'grid',\r\n borderRadius: 4,\r\n border: `1px solid #e3e3e3`,\r\n width: `100%`,\r\n gridTemplateColumns: `repeat(${item || 4}, 1fr)`,\r\n [`& .${toggleButtonGroupClasses.grouped}`]: {\r\n margin: theme.spacing(0.5),\r\n border: 0,\r\n borderRadius: theme.shape.borderRadius,\r\n [`&.${toggleButtonGroupClasses.disabled}`]: {\r\n border: 0,\r\n },\r\n },\r\n [`& .${toggleButtonGroupClasses.middleButton},& .${toggleButtonGroupClasses.lastButton}`]:\r\n {\r\n marginLeft: -1,\r\n borderLeft: '1px solid transparent',\r\n },\r\n [`& .${toggleButtonGroupClasses.selected}`] : {\r\n backgroundColor: `${theme.palette.theme.primary[800]}!important`,\r\n color: `#fff !important`\r\n }\r\n}))\r\n\r\ninterface AlignmentControlProps {\r\n alignment: string;\r\n onAlignmentChange: (event: React.MouseEvent<HTMLElement>, newAlignment: string | null) => void;\r\n displayLabel?: boolean;\r\n}\r\n\r\nconst AlignmentControl: React.FC<AlignmentControlProps> = ({\r\n alignment,\r\n onAlignmentChange,\r\n displayLabel = false,\r\n // disableJustify = false\r\n}) => {\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n {displayLabel &&\r\n <Typography type=\"s5\" weight=\"medium\" color={\"theme.secondary.800\"}>Alignment</Typography>\r\n }\r\n <StyledToggleButtonGroup\r\n value={alignment}\r\n exclusive\r\n onChange={onAlignmentChange}\r\n aria-label=\"text alignment\"\r\n size=\"small\"\r\n >\r\n <Tooltip title=\"Align Left\">\r\n <ToggleButton value=\"left\" aria-label=\"left aligned\">\r\n <FormatAlignLeftIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n <Tooltip title=\"Align Center\">\r\n <ToggleButton value=\"center\" aria-label=\"centered\">\r\n <FormatAlignCenterIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n <Tooltip title=\"Align Right\">\r\n <ToggleButton value=\"right\" aria-label=\"right aligned\">\r\n <FormatAlignRightIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n {/* {!disableJustify && */}\r\n <Tooltip title=\"Justify\">\r\n <ToggleButton value=\"justify\" aria-label=\"justified\">\r\n <FormatAlignJustifyIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n {/* } */}\r\n </StyledToggleButtonGroup>\r\n </Box>\r\n );\r\n}\r\n \r\nexport default AlignmentControl;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport {\r\n Box,\r\n TextField,\r\n ToggleButtonGroup,\r\n ToggleButton,\r\n InputAdornment,\r\n Tooltip,\r\n FormControl,\r\n MenuItem,\r\n styled,\r\n toggleButtonGroupClasses\r\n} from '@mui/material';\r\nimport FormatBoldIcon from '@mui/icons-material/FormatBold';\r\nimport FormatItalicIcon from '@mui/icons-material/FormatItalic';\r\nimport FormatUnderlinedIcon from '@mui/icons-material/FormatUnderlined';\r\nimport ColorLensIcon from '@mui/icons-material/ColorLens';\r\nimport { debounce } from 'lodash';\r\nimport Select from '../../../../components/select/select';\r\nimport AlignmentControl from './AlignmentControl';\r\n\r\n// Styled component with better typing\r\nconst StyledToggleButtonGroup = styled(ToggleButtonGroup)<{ item?: number }>(\r\n ({ theme, item = 4 }) => ({\r\n display: 'grid',\r\n borderRadius: 4,\r\n border: `1px solid #e3e3e3`,\r\n width: '100%',\r\n gridTemplateColumns: `repeat(${item}, 1fr)`,\r\n [`& .${toggleButtonGroupClasses.grouped}`]: {\r\n margin: theme.spacing(0.5),\r\n border: 0,\r\n borderRadius: theme.shape.borderRadius,\r\n [`&.${toggleButtonGroupClasses.disabled}`]: {\r\n border: 0,\r\n },\r\n },\r\n [`& .${toggleButtonGroupClasses.middleButton}, & .${toggleButtonGroupClasses.lastButton}`]:\r\n {\r\n marginLeft: -1,\r\n borderLeft: '1px solid transparent',\r\n },\r\n [`& .${toggleButtonGroupClasses.selected}`]: {\r\n backgroundColor: `${theme.palette.theme.primary[800]} !important`,\r\n color: '#fff !important',\r\n },\r\n })\r\n);\r\n\r\n// Type definitions\r\ninterface TextStyles {\r\n fontFamily?: string;\r\n fontSize?: number;\r\n lineHeight?: string | number;\r\n textAlign?: string;\r\n fontWeight?: string;\r\n fontStyle?: string;\r\n textDecoration?: string;\r\n color?: string;\r\n}\r\n\r\ninterface TextControlsProps {\r\n attrs: {\r\n styles?: TextStyles;\r\n [key: string]: any;\r\n };\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\ntype FormatType = 'bold' | 'italic' | 'underline';\r\n\r\n// Constants\r\nconst FONT_SIZES = [10, 12, 14, 16, 20, 24, 28, 32] as const;\r\nconst LINE_HEIGHTS = [1, 1.2, 1.5, 2] as const;\r\nconst FONT_FAMILIES = [\r\n 'Arial',\r\n 'Times New Roman', \r\n 'Roboto',\r\n 'Helvetica',\r\n 'Georgia',\r\n 'Courier New'\r\n] as const;\r\n\r\nconst DEBOUNCE_DELAY = 300;\r\n\r\nconst TextControls: React.FC<TextControlsProps> = ({ attrs, updateAttrs }) => {\r\n const styles = useMemo(() => attrs.styles || {}, [JSON.stringify(attrs.styles)]);\r\n \r\n // Derive format options from current styles instead of separate state\r\n const formatOptions = useMemo(() => {\r\n const options: FormatType[] = [];\r\n if (styles.fontWeight === 'bold') options.push('bold');\r\n if (styles.fontStyle === 'italic') options.push('italic');\r\n if (styles.textDecoration === 'underline') options.push('underline');\r\n return options;\r\n }, [styles.fontWeight, styles.fontStyle, styles.textDecoration]);\r\n\r\n // Stable update function using useCallback\r\n const updateStyles = useCallback(\r\n (newStyles: Partial<TextStyles>) => {\r\n updateAttrs({ \r\n styles: { \r\n ...styles, \r\n ...newStyles \r\n } \r\n });\r\n },\r\n [styles, updateAttrs]\r\n );\r\n\r\n // Fixed debounced color update function\r\n const debouncedColorUpdate = useCallback(\r\n debounce((color: string) => {\r\n updateStyles({color});\r\n }, DEBOUNCE_DELAY),\r\n [updateStyles]\r\n );\r\n\r\n // Format toggle handler\r\n const toggleFormat = useCallback(\r\n (format: FormatType) => {\r\n const isCurrentlyApplied = formatOptions.includes(format);\r\n \r\n const formatStyleMap: Record<FormatType, Partial<TextStyles>> = {\r\n bold: { fontWeight: isCurrentlyApplied ? 'normal' : 'bold' },\r\n italic: { fontStyle: isCurrentlyApplied ? 'normal' : 'italic' },\r\n underline: { textDecoration: isCurrentlyApplied ? 'none' : 'underline' }\r\n };\r\n\r\n updateStyles(formatStyleMap[format]);\r\n },\r\n [formatOptions, updateStyles]\r\n );\r\n\r\n // Alignment change handler\r\n const handleAlignmentChange = useCallback(\r\n (event: React.MouseEvent<HTMLElement>, newAlignment: string | null) => {\r\n if (newAlignment !== null) {\r\n updateStyles({ textAlign: newAlignment });\r\n }\r\n },\r\n [updateStyles]\r\n );\r\n\r\n // Color change handler\r\n const handleColorChange = useCallback(\r\n (event: React.ChangeEvent<HTMLInputElement>) => {\r\n debouncedColorUpdate(event.target.value);\r\n },\r\n [debouncedColorUpdate]\r\n );\r\n\r\n // Generic style change handlers\r\n const handleFontFamilyChange = useCallback(\r\n (event: any) => updateStyles({ fontFamily: event.target.value }),\r\n [updateStyles]\r\n );\r\n\r\n const handleFontSizeChange = useCallback(\r\n (event: any) => updateStyles({ fontSize: Number(event.target.value) }),\r\n [updateStyles]\r\n );\r\n\r\n const handleLineHeightChange = useCallback(\r\n (event: any) => updateStyles({ lineHeight: String(event.target.value) }),\r\n [updateStyles]\r\n );\r\n\r\n return (\r\n <>\r\n {/* Font Family Selection */}\r\n <Box sx={{ mb: 2 }}>\r\n <FormControl size=\"small\" fullWidth>\r\n <Select\r\n value={styles.fontFamily || ''}\r\n onChange={handleFontFamilyChange}\r\n displayEmpty\r\n label=\"Select Font\"\r\n >\r\n {FONT_FAMILIES.map((family) => (\r\n <MenuItem key={family} value={family}>\r\n {family}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n {/* Font Size and Line Height */}\r\n <Box sx={{ mb: 2, display: 'flex', gap: 1 }}>\r\n <FormControl size=\"small\" fullWidth>\r\n <Select\r\n value={styles.fontSize || ''}\r\n onChange={handleFontSizeChange}\r\n renderValue={(v) => `${v}px`}\r\n label=\"Size\"\r\n displayEmpty\r\n >\r\n {FONT_SIZES.map((size) => (\r\n <MenuItem key={size} value={size}>\r\n {size}px\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n\r\n <FormControl size=\"small\" fullWidth>\r\n <Select\r\n value={styles.lineHeight || ''}\r\n onChange={handleLineHeightChange}\r\n renderValue={(v) => `${v}x`}\r\n label=\"Line Height\"\r\n displayEmpty\r\n >\r\n {LINE_HEIGHTS.map((height) => (\r\n <MenuItem key={height} value={height}>\r\n {height}x\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n {/* Text Alignment */}\r\n <AlignmentControl \r\n alignment={styles.textAlign} \r\n onAlignmentChange={handleAlignmentChange} \r\n />\r\n\r\n {/* Format Options */}\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n <StyledToggleButtonGroup item={3}>\r\n <Tooltip title=\"Bold\">\r\n <ToggleButton\r\n value=\"bold\"\r\n selected={formatOptions.includes('bold')}\r\n onClick={() => toggleFormat('bold')}\r\n aria-label=\"bold\"\r\n size=\"small\"\r\n sx={{ borderRadius: 1 }}\r\n >\r\n <FormatBoldIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n\r\n <Tooltip title=\"Italic\">\r\n <ToggleButton\r\n value=\"italic\"\r\n selected={formatOptions.includes('italic')}\r\n onClick={() => toggleFormat('italic')}\r\n aria-label=\"italic\"\r\n size=\"small\"\r\n sx={{ borderRadius: 1 }}\r\n >\r\n <FormatItalicIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n\r\n <Tooltip title=\"Underline\">\r\n <ToggleButton\r\n value=\"underline\"\r\n selected={formatOptions.includes('underline')}\r\n onClick={() => toggleFormat('underline')}\r\n aria-label=\"underline\"\r\n size=\"small\"\r\n sx={{ borderRadius: 1 }}\r\n >\r\n <FormatUnderlinedIcon fontSize=\"small\" />\r\n </ToggleButton>\r\n </Tooltip>\r\n </StyledToggleButtonGroup>\r\n </Box>\r\n\r\n {/* Color Picker */}\r\n <Box sx={{ mb: 2, width: '100%' }}>\r\n <TextField\r\n label=\"Text Color\"\r\n variant=\"outlined\"\r\n type=\"color\"\r\n value={styles.color || '#000000'}\r\n onChange={handleColorChange}\r\n size=\"small\"\r\n fullWidth\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <ColorLensIcon fontSize=\"small\" />\r\n </InputAdornment>\r\n ),\r\n }}\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default React.memo(TextControls);","/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport {\r\n Box,\r\n FormControl,\r\n MenuItem,\r\n Slider,\r\n} from '@mui/material';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport TextField from '../../../../components/text-field/text-field';\r\nimport AlignmentControl from './AlignmentControl';\r\nimport Select from '../../../../components/select/select';\r\nimport ColorPickerInput from '../../../../components/color-picker-input/color-picker-input';\r\n\r\ninterface ButtonControlsProps {\r\n attrs: Record<string, any>;\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\nconst borderOptions = [\r\n {label: 'None', value: 'none'},\r\n {value: '1px solid #e0e0e0', label: 'Solid'},\r\n {value: '1px dashed #e0e0e0', label: 'Dashed'},\r\n {value: '1px dotted #e0e0e0', label: 'Dotted'},\r\n]\r\n\r\nconst ButtonControls: React.FC<ButtonControlsProps> = ({\r\n attrs,\r\n updateAttrs\r\n}) => {\r\n\r\n const { text, styles } = attrs\r\n const handleAlignmentChange = (\r\n event: React.MouseEvent<HTMLElement>,\r\n newAlignment: string | null,\r\n ) => {\r\n if(newAlignment) {\r\n let margin = '0';\r\n switch (newAlignment) {\r\n \r\n case 'justify':\r\n margin = '0 auto';\r\n break;\r\n case 'right':\r\n margin = '0 0 0 auto';\r\n break;\r\n case 'center':\r\n margin = '0 auto';\r\n break;\r\n case 'left':\r\n margin = 'auto 0 0 0';\r\n break;\r\n default:\r\n margin = '0 auto';\r\n break;\r\n }\r\n updateAttrs({ styles : { margin } });\r\n }\r\n };\r\n\r\n const getAlignment = () => {\r\n if (styles?.margin === '0 auto') {\r\n return 'center';\r\n } else if (styles?.margin === '0 0 0 auto') {\r\n return 'right';\r\n } else if (styles?.margin === 'auto 0 0 0') {\r\n return 'left';\r\n } else {\r\n return 'justify';\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <TextField\r\n label=\"Button Text\"\r\n fullWidth\r\n value={text}\r\n onChange={(e) => updateAttrs({ text: e.target.value })}\r\n size=\"small\"\r\n sx={{ mb: 2 }}\r\n />\r\n <Box sx={{ mb: 2 }}>\r\n <ColorPickerInput\r\n value={styles?.backgroundColor || '#333333'}\r\n onChange={(color) => updateAttrs({ styles :{ backgroundColor: color }})}\r\n label='Background Color'\r\n />\r\n </Box>\r\n <Box sx={{ mb: 2 }}>\r\n <ColorPickerInput\r\n value={styles?.color || '#333333'}\r\n onChange={(color) => updateAttrs({ styles :{ color: color }})}\r\n label='Text Color'\r\n // sx={{ maxWidth: 150 }}\r\n />\r\n </Box>\r\n <FormControl fullWidth size=\"small\" sx={{ mb: 2 }}>\r\n <Select\r\n value={styles?.border}\r\n renderValue={(value) => borderOptions.find((option) => option.value === value)?.label || 'None'}\r\n onChange={(e) => updateAttrs({ styles :{ border :e.target.value }})}\r\n label='Border'\r\n >\r\n <MenuItem value=\"none\">None</MenuItem>\r\n <MenuItem value=\"1px solid #e0e0e0\">Solid</MenuItem>\r\n <MenuItem value=\"1px dashed #e0e0e0\">Dashed</MenuItem>\r\n </Select>\r\n </FormControl>\r\n <Box sx={{ mb: 2 }}>\r\n <Typography type=\"s3\" color='theme.neutral.800'>\r\n Border Radius\r\n </Typography>\r\n <Slider\r\n value={styles?.borderRadius}\r\n onChange={(_, value) => updateAttrs({ styles :{ borderRadius: value as number }})}\r\n min={0}\r\n max={20}\r\n step={1}\r\n valueLabelDisplay=\"auto\"\r\n size=\"small\"\r\n marks\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Box>\r\n <Box sx={{ mb: 2 }}>\r\n <Typography type=\"s3\" color='theme.neutral.800'>\r\n Font Size\r\n </Typography>\r\n <Slider\r\n value={styles?.fontSize}\r\n onChange={(_, value) => updateAttrs({ styles :{ fontSize: value as number }})}\r\n min={10}\r\n max={20}\r\n step={1}\r\n valueLabelDisplay=\"auto\"\r\n size=\"small\"\r\n marks\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Box>\r\n <AlignmentControl alignment={getAlignment()} onAlignmentChange={handleAlignmentChange}/>\r\n </>\r\n );\r\n};\r\n\r\nexport default ButtonControls;","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport { FormControl, FormControlLabel, Grid, MenuItem, Slider, Switch, styled } from \"@mui/material\";\r\nimport ColorPickerInput from \"../../../../components/color-picker-input/color-picker-input\";\r\nimport Select from \"../../../../components/select/select\";\r\nimport Typography from \"../../../../components/typography/typography\";\r\nimport formatText from \"../../../../utils/format-text\";\r\nimport { useEffect } from \"react\";\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 interface BorderControlProps {\r\n styles: Record<string, any>,\r\n onChange: (key: string, value: any) => void\r\n isBordered: boolean;\r\n disableWidth?: boolean;\r\n disableStyle?: boolean;\r\n disableColor?: boolean;\r\n disableCollapse?: boolean;\r\n disableRadius?: boolean;\r\n initiateStyles?: (styles: Record<string, any>) => void;\r\n}\r\n\r\nconst borderStyles = [\r\n 'none',\r\n 'solid',\r\n 'dashed',\r\n 'dotted',\r\n 'double',\r\n 'groove',\r\n 'ridge',\r\n 'inset',\r\n 'outset'\r\n];\r\n\r\nconst BorderControl:React.FC<BorderControlProps> = ({\r\n styles,\r\n onChange,\r\n isBordered,\r\n disableWidth = false,\r\n disableStyle = false,\r\n disableColor = false,\r\n disableCollapse = false,\r\n disableRadius = false,\r\n initiateStyles\r\n}) => {\r\n\r\n useEffect(() => {\r\n if(initiateStyles instanceof Function) {\r\n if (!isBordered) {\r\n initiateStyles({\r\n 'border': 0,\r\n 'borderStyle':'none',\r\n 'borderColor':'#000000',\r\n 'borderCollapse':'separate',\r\n 'borderRadius':0,\r\n });\r\n } else{\r\n initiateStyles({\r\n 'border': 1,\r\n 'borderStyle':'solid',\r\n 'borderColor':'#000000',\r\n 'borderCollapse':'collapse',\r\n 'borderRadius':0,\r\n });\r\n }\r\n }\r\n }, [isBordered]);\r\n return (\r\n <Grid container spacing={2}>\r\n <Grid item xs={12}>\r\n <FormControlLabel\r\n control={\r\n <Android12Switch\r\n checked={isBordered}\r\n onChange={(e) => onChange('is_bordered', e.target.checked)}\r\n />\r\n }\r\n label={<Typography type='s5' weight='medium' color='theme.secondary.800'>Bordered Table</Typography>}\r\n labelPlacement=\"start\"\r\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', margin: 'auto'}}\r\n />\r\n </Grid>\r\n \r\n {isBordered && (\r\n <>\r\n {/* Width */}\r\n {!disableWidth && (\r\n <Grid item xs={6}>\r\n <Select\r\n value={styles.border || 1}\r\n onChange={(e) => onChange('border', e.target.value)}\r\n label=\"Border Width\"\r\n fullWidth\r\n size=\"small\"\r\n >\r\n {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((wd) => (\r\n <MenuItem key={wd} value={wd}>\r\n <Typography type='s5' color='theme.secondary.1000'>{wd}</Typography>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n )}\r\n \r\n {/* Style */}\r\n {!disableStyle && ( \r\n <Grid item xs={6}>\r\n <FormControl fullWidth size=\"small\">\r\n <Select\r\n value={styles.borderStyle || 'solid'}\r\n onChange={(e) => onChange('borderStyle', e.target.value)}\r\n renderValue={(value) => formatText(value)}\r\n label=\"Border Style\"\r\n >\r\n {borderStyles.map((style) => (\r\n <MenuItem key={style} value={style}>\r\n <Typography type='s5' color='theme.secondary.1000'>{formatText(style)}</Typography>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n )}\r\n \r\n {/* Color */}\r\n {!disableColor && ( \r\n <Grid item xs={6}>\r\n <Typography type='s5' weight='medium' color='theme.secondary.800' mb={0.5}>Border Color</Typography>\r\n <ColorPickerInput\r\n value={styles.borderColor || '#e0e0e0'}\r\n onChange={(color) => onChange('borderColor', color)}\r\n fullWidth\r\n />\r\n </Grid>\r\n )}\r\n\r\n {/* Collapse */}\r\n {!disableCollapse && ( \r\n <Grid item xs={6}>\r\n <FormControl fullWidth size=\"small\">\r\n <Select\r\n value={styles.borderCollapse || 'collapse'}\r\n onChange={(e) => onChange('borderCollapse', e.target.value)}\r\n label=\"Border Collapse\"\r\n renderValue={(value) => formatText(value)}\r\n >\r\n <MenuItem value=\"collapse\"><Typography type='s5' color='theme.secondary.1000'>Collapse</Typography></MenuItem>\r\n <MenuItem value=\"separate\"><Typography type='s5' color='theme.secondary.1000'>Separate</Typography></MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n )}\r\n\r\n {/* Radius */}\r\n {!disableRadius && (\r\n <Grid item xs={12}>\r\n <Typography type='s5' weight='medium' color='theme.secondary.800' variant=\"caption\">Border Radius</Typography>\r\n <Slider\r\n value={typeof styles.borderRadius === 'number' ? styles.borderRadius : 1}\r\n min={0}\r\n max={20}\r\n step={1}\r\n marks\r\n onChange={(_, value) => onChange('borderRadius', value)}\r\n valueLabelDisplay=\"auto\"\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Grid>\r\n )}\r\n </>\r\n )}\r\n \r\n </Grid>\r\n );\r\n}\r\n \r\nexport default BorderControl;","/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport {\r\n Box,\r\n FormControl,\r\n // Select,\r\n MenuItem,\r\n styled,\r\n Switch,\r\n Grid,\r\n FormControlLabel\r\n} from '@mui/material';\r\nimport TextField from '../../../../components/text-field/text-field';\r\nimport Select from '../../../../components/select/select';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport AlignmentControl from './AlignmentControl';\r\nimport BorderControl from './border-control';\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]\r\n },\r\n '& .Mui-checked+.MuiSwitch-track': {\r\n backgroundColor: `${theme.palette.theme.primary[700]}`,\r\n },\r\n}));\r\n\r\ninterface ImageControlsProps {\r\n attrs: Record<string, any>;\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\nconst ImageControls: React.FC<ImageControlsProps> = ({\r\n attrs,\r\n updateAttrs\r\n}) => {\r\n const { src, alt, styles } = attrs || {}\r\n\r\n const handleAlignmentChange = (\r\n event: React.MouseEvent<HTMLElement>,\r\n newAlignment: string | null,\r\n ) => {\r\n if(newAlignment) {\r\n let margin = '0';\r\n switch (newAlignment) {\r\n case 'justify':\r\n margin = '0 auto';\r\n break;\r\n case 'right':\r\n margin = '0 0 0 auto';\r\n break;\r\n case 'center':\r\n margin = '0 auto';\r\n break;\r\n case 'left':\r\n margin = 'auto 0 0 0';\r\n break;\r\n default:\r\n margin = '0 auto';\r\n break;\r\n }\r\n updateAttrs({ styles : { margin, alignment: newAlignment } });\r\n\r\n }\r\n };\r\n\r\n const getAlignment = () => {\r\n if (styles?.margin === '0 auto' || styles?.alignment === 'center') {\r\n return 'center';\r\n } else if (styles?.margin === '0 0 0 auto' || styles?.alignment === 'right') {\r\n return 'right';\r\n } else if (styles?.margin === 'auto 0 0 0' || styles?.alignment === 'left') {\r\n return 'left';\r\n } else {\r\n return 'justify';\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {/* Image URL */}\r\n <TextField\r\n label=\"Image URL\"\r\n fullWidth\r\n value={src}\r\n onChange={(e) => updateAttrs({ src: e.target.value })}\r\n size=\"small\"\r\n sx={{ mb: 2 }}\r\n />\r\n\r\n {/* Alt Text */}\r\n <TextField\r\n label=\"Alt Text\"\r\n fullWidth\r\n value={alt}\r\n onChange={(e) => updateAttrs({ alt: e.target.value })}\r\n size=\"small\"\r\n sx={{ mb: 2 }}\r\n />\r\n <FormControlLabel\r\n control={<Android12Switch defaultChecked checked={Boolean(styles?.fullWidth)}/>}\r\n label={<Typography type=\"s5\" color=\"theme.secondary.800\" weight='medium'>Full Width</Typography>}\r\n labelPlacement=\"start\"\r\n value={Boolean(styles?.fullWidth)}\r\n onClick={(e) => {\r\n const checked = e.target.checked\r\n updateAttrs({ styles: { fullWidth: checked, width: checked ? 100 : 150, height: checked ? 'auto' : 150 }})\r\n }}\r\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', margin: 'auto', mb:2 }}\r\n />\r\n\r\n {/* Width Input */}\r\n <Grid container spacing={2}>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"Width (px)\"\r\n type=\"number\"\r\n fullWidth\r\n value={styles?.fullWidth ? '' : styles?.width}\r\n onChange={(e) =>\r\n updateAttrs({ styles: { width: Number(e.target.value) }})\r\n }\r\n size=\"small\"\r\n sx={{ mb: 2 }}\r\n inputProps={{ min: 1 }}\r\n disabled={styles?.fullWidth}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n {/* Height Input */}\r\n <TextField\r\n label=\"Height (px)\"\r\n type=\"number\"\r\n fullWidth\r\n value={styles?.fullWidth ? '' : styles?.height}\r\n onChange={(e) =>\r\n updateAttrs({ styles: { height: Number(e.target.value) }})\r\n }\r\n size=\"small\"\r\n sx={{ mb: 2 }}\r\n inputProps={{ min: 1 }}\r\n disabled={styles?.fullWidth}\r\n />\r\n\r\n </Grid>\r\n\r\n </Grid>\r\n\r\n\r\n {/* Object Fit Dropdown */}\r\n <Box sx={{ mb: 2 }}>\r\n <FormControl size=\"small\" fullWidth>\r\n <Select\r\n label='Object Fit'\r\n value={styles?.objectFit}\r\n onChange={(e) =>\r\n updateAttrs({ styles: { objectFit: e.target.value }})\r\n }\r\n displayEmpty\r\n >\r\n <MenuItem value=\"contain\">Contain</MenuItem>\r\n <MenuItem value=\"cover\">Cover</MenuItem>\r\n <MenuItem value=\"fill\">Fill</MenuItem>\r\n <MenuItem value=\"none\">None</MenuItem>\r\n <MenuItem value=\"scale-down\">Scale Down</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n\r\n {/* Alignment Toggle Buttons */}\r\n <AlignmentControl\r\n alignment={getAlignment()}\r\n onAlignmentChange={handleAlignmentChange}\r\n displayLabel\r\n />\r\n\r\n <BorderControl\r\n styles={styles}\r\n onChange={(key, value) => updateAttrs({ styles: { [key]: value } })}\r\n isBordered={styles?.is_bordered}\r\n disableCollapse\r\n initiateStyles={(styles) => updateAttrs({ styles })}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default ImageControls;","/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport {\r\n Box,\r\n FormControl,\r\n MenuItem,\r\n Slider,\r\n InputAdornment,\r\n} from '@mui/material';\r\nimport ColorLensIcon from '@mui/icons-material/ColorLens';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport TextField from '../../../../components/text-field/text-field';\r\nimport Select from '../../../../components/select/select';\r\nimport formatText from '../../../../utils/format-text';\r\n\r\ninterface DividerControlsProps {\r\n attrs: Record<string, any>;\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\nconst DividerControls: React.FC<DividerControlsProps> = ({\r\n attrs,\r\n updateAttrs,\r\n}) => {\r\n const { styles } = attrs\r\n return (\r\n <>\r\n <FormControl fullWidth size=\"small\" sx={{ mb: 2 }}>\r\n <Select\r\n label='Style'\r\n value={styles?.borderStyle}\r\n onChange={(e) => updateAttrs({ styles: { borderStyle: e.target.value } })}\r\n renderValue={(value) => formatText(value)}\r\n >\r\n <MenuItem value=\"solid\">Solid</MenuItem>\r\n <MenuItem value=\"dashed\">Dashed</MenuItem>\r\n <MenuItem value=\"dotted\">Dotted</MenuItem>\r\n </Select>\r\n </FormControl>\r\n <Box sx={{ mb: 1 }}>\r\n <Typography type=\"s5\" color='theme.secondary.800' weight='medium'>\r\n Thickness (px)\r\n </Typography>\r\n <Slider\r\n value={styles?.borderWidth}\r\n onChange={(_, value) => updateAttrs({ styles: { borderWidth: value as number }})}\r\n min={1}\r\n max={10}\r\n step={1}\r\n valueLabelDisplay=\"auto\"\r\n size=\"small\"\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Box>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n label=\"Divider Color\"\r\n type=\"color\"\r\n value={styles?.borderColor}\r\n onChange={(e) => updateAttrs({ styles: { borderColor: e.target.value }})}\r\n size=\"small\"\r\n fullWidth\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <ColorLensIcon fontSize=\"small\" />\r\n </InputAdornment>\r\n ),\r\n }}\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default DividerControls;","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z\"\n}), 'Refresh');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M17 20.41 18.41 19 15 15.59 13.59 17zM7.5 8H11v5.59L5.59 19 7 20.41l6-6V8h3.5L12 3.5z\"\n}), 'MergeType');","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable no-mixed-spaces-and-tabs */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\nimport {\r\n Box,\r\n MenuItem,\r\n Accordion as MuiAccordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n Grid,\r\n FormControlLabel,\r\n Tabs,\r\n Tab,\r\n AccordionProps,\r\n styled,\r\n Divider,\r\n IconButton,\r\n Chip,\r\n Alert,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n Table,\r\n TableHead,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n} from '@mui/material';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport RefreshIcon from '@mui/icons-material/Refresh';\r\nimport MergeIcon from '@mui/icons-material/MergeType';\r\nimport SplitIcon from '@mui/icons-material/CallSplit';\r\nimport ColorPickerInput from '../../../../components/color-picker-input/color-picker-input';\r\nimport TextField from '../../../../components/text-field/text-field';\r\nimport Select from '../../../../components/select/select';\r\nimport formatText from '../../../../utils/format-text';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport Android12Switch from '../../../../components/switches/android-12-switch';\r\nimport BorderControl from './border-control';\r\nimport Button from '../../../../components/button/button';\r\nimport Checkbox from '../../../../components/checkbox/checkbox';\r\nimport { Trash } from '../../../../components/icons';\r\nimport SearchableSelect from '../../../../components/searchable-select';\r\n\r\n// Type definitions\r\ninterface TableColumn {\r\n id: string;\r\n header: string;\r\n}\r\n\r\ninterface TableRow {\r\n [key: string]: string;\r\n}\r\n\r\ninterface CellMerge {\r\n section: 'thead' | 'tbody';\r\n rowStart: number;\r\n rowEnd: number;\r\n colStart: number;\r\n colEnd: number;\r\n value: string;\r\n}\r\n\r\ninterface TableData {\r\n columns: TableColumn[];\r\n rows: TableRow[];\r\n mergedCells?: CellMerge[];\r\n}\r\n\r\nconst Accordion = styled(\r\n (props: AccordionProps) => (\r\n <MuiAccordion disableGutters elevation={0} square {...props} />\r\n )\r\n)(({ theme }) => ({\r\n border: `1px solid ${theme.palette.divider}`,\r\n borderRadius: 0,\r\n '&:not(:last-child)': {\r\n borderBottom: 0,\r\n },\r\n '&::before': {\r\n display: 'none',\r\n },\r\n}));\r\n\r\ninterface TableControlsProps {\r\n tableData: TableData;\r\n setTableData: (value: TableData) => void;\r\n attrs: any;\r\n updateAttrs: (value: any) => void;\r\n placeholders: Record<string, any>[];\r\n handleSave?: () => void;\r\n setParentRowLevel?: (value: boolean) => void;\r\n levelType?: boolean;\r\n relation_table?: any;\r\n}\r\n\r\nconst textAlignOptions = ['left', 'center', 'right', 'justify'];\r\nconst fontWeightOptions = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\r\nconst fontFamilyOptions = [\r\n 'Arial, sans-serif',\r\n 'Helvetica, sans-serif',\r\n 'Times New Roman, serif',\r\n 'Georgia, serif',\r\n 'Courier New, monospace',\r\n 'Verdana, sans-serif',\r\n 'Tahoma, sans-serif',\r\n 'Trebuchet MS, sans-serif'\r\n];\r\n\r\nconst TableControls: React.FC<TableControlsProps> = ({\r\n tableData,\r\n setTableData,\r\n attrs,\r\n updateAttrs,\r\n placeholders,\r\n handleSave,\r\n setParentRowLevel,\r\n levelType,\r\n relation_table\r\n}) => {\r\n\r\n const [tabValue, setTabValue] = useState(0);\r\n const [expanded, setExpanded] = useState('tableBasic');\r\n const [autoPopulateEnabled, setAutoPopulateEnabled] = useState(true);\r\n const [mergeDialogOpen, setMergeDialogOpen] = useState(false);\r\n const [selectedCells, setSelectedCells] = useState<{section: 'thead' | 'tbody', row: number, col: number}[]>([]);\r\n const [mergeValue, setMergeValue] = useState('');\r\n const [rowLevel, setRowLevel] = useState(false);\r\n const { placeholders: tPlaceholders } = attrs;\r\n const [selectedTable, setSelectedTable] = useState<string | null>(null);\r\n // Fix: Change customText to an object type\r\n const [customText, setCustomText] = useState<{ [rowIndex: number]: { [columnId: string]: string } }>({});\r\n // New state to track row-level placeholder assignments\r\n const [rowPlaceholders, setRowPlaceholders] = useState<{ [rowIndex: number]: { [columnId: string]: string } }>({});\r\n // Initialize merged cells from attrs\r\n const mergedCells = tableData.mergedCells || [];\r\nconst [isUpdating, setIsUpdating] = useState(false);\r\n\r\nconst getAttributes = (tableId: string) => {\r\n\r\n if (!relation_table || !Array.isArray(relation_table)) {\r\n return [];\r\n }\r\n \r\n const table = relation_table.find((table: any) => {\r\n return table?.dataKey == tableId\r\n })\r\n if (!table || !table.fields || !Array.isArray(table.fields)) {\r\n return [];\r\n }\r\n\r\n return table.fields\r\n // .map(field => {\r\n // const fieldName = field.key;\r\n // return {\r\n // label: fieldName?.replace(/_id$/, '') || '', \r\n // value: field?.select,\r\n // };\r\n // });\r\n};\r\n\r\nconst tableAttributes = useMemo(() => \r\n selectedTable ? getAttributes(selectedTable) : placeholders,\r\n [placeholders, selectedTable, relation_table] \r\n)\r\n // Initialize styles from attrs or use default styles\r\n const [tableStyles, setTableStyles] = useState(attrs?.styles || {\r\n is_bordered: true,\r\n border: 1,\r\n borderStyle: 'solid',\r\n borderColor: '#e0e0e0',\r\n borderCollapse: 'collapse',\r\n width: '100%',\r\n thCells: {\r\n padding: 8\r\n },\r\n tbCells: {\r\n padding: 8\r\n },\r\n tHead: {\r\n backgroundColor: '#f5f5f5',\r\n color: '#333333',\r\n fontSize: 14,\r\n fontWeight: 'bold',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n margin: '0.5em 0',\r\n },\r\n tBody: {\r\n backgroundColor: '#ffffff',\r\n color: '#333333',\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n fontFamily: 'Arial, sans-serif',\r\n textAlign: 'left',\r\n }\r\n });\r\n\r\n // Apply styles to attrs when tableStyles change\r\n useEffect(() => {\r\n updateAttrs({ styles: tableStyles });\r\n }, [JSON.stringify(tableStyles)]);\r\n\r\n // Auto-populate rows when placeholders change\r\n useEffect(() => {\r\n if (autoPopulateEnabled && (tPlaceholders || rowLevel)) {\r\n populateRowsWithPlaceholders();\r\n }\r\n }, [tPlaceholders, autoPopulateEnabled, rowLevel, rowPlaceholders]);\r\n\r\n // Generate unique column ID\r\n const generateColumnId = () => {\r\n const existingIds = tableData.columns.map(col => col.id);\r\n let counter = 1;\r\n while (existingIds.includes(`col${counter}`)) {\r\n counter++;\r\n }\r\n return `col${counter}`;\r\n };\r\n\r\n // Get placeholder value by key\r\n const getPlaceholderValue = (placeholderKey: string): string => {\r\n const placeholder = tableAttributes.find(p => p.value === placeholderKey);\r\n if (!placeholder) return '';\r\n \r\n // Return the placeholder syntax for row-level mode\r\n if (rowLevel) {\r\n return `{{${placeholder.value}}}`;\r\n }\r\n \r\n // Return the actual value or a sample value if it's dynamic\r\n if (typeof placeholder.actualValue !== 'undefined') {\r\n return String(placeholder.actualValue);\r\n }\r\n \r\n // For dynamic placeholders, return a sample/preview value\r\n switch (placeholder.type) {\r\n case 'date':\r\n return new Date().toLocaleDateString();\r\n case 'datetime':\r\n return new Date().toLocaleString();\r\n case 'number':\r\n return '123';\r\n case 'currency':\r\n return '$1,234.56';\r\n case 'email':\r\n return 'example@domain.com';\r\n case 'phone':\r\n return '+1 (555) 123-4567';\r\n case 'url':\r\n return 'https://example.com';\r\n default:\r\n return `{{${placeholder.value}}}` || placeholder.label;\r\n }\r\n };\r\n\r\n // Modified: Populate rows with placeholder values for both column and row level\r\n const populateRowsWithPlaceholders = () => {\r\n if (!tPlaceholders && !rowLevel) return;\r\n\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.map((row, rowIndex) => {\r\n const updatedRow = { ...row };\r\n \r\n prev.columns.forEach(column => {\r\n let placeholderKey: string | undefined;\r\n \r\n // Priority: Row-level placeholders take precedence when rowLevel is true\r\n if (rowLevel && rowPlaceholders[rowIndex]?.[column.id]) {\r\n placeholderKey = rowPlaceholders[rowIndex][column.id];\r\n } else if (tPlaceholders?.[column.id]) {\r\n placeholderKey = tPlaceholders[column.id];\r\n }\r\n\r\n if (placeholderKey) {\r\n updatedRow[column.id] = getPlaceholderValue(placeholderKey);\r\n // Preserve static text in the _static field\r\n const staticText = customText[rowIndex]?.[column.id] || '';\r\n if (staticText) {\r\n updatedRow[`${column.id}_static`] = `${staticText} ${updatedRow[column.id]}`;\r\n }\r\n }\r\n });\r\n \r\n return updatedRow;\r\n })\r\n }));\r\n setIsUpdating(false);\r\n };\r\n\r\n // Check if a cell is merged or covered by a merge\r\n const getCellMergeInfo = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\r\n const merge = mergedCells?.find(m => \r\n m.section === section &&\r\n rowIndex >= m.rowStart && rowIndex <= m.rowEnd &&\r\n colIndex >= m.colStart && colIndex <= m.colEnd\r\n );\r\n \r\n if (!merge) return null;\r\n \r\n return {\r\n merge,\r\n isTopLeft: rowIndex === merge.rowStart && colIndex === merge.colStart,\r\n isCovered: !(rowIndex === merge.rowStart && colIndex === merge.colStart)\r\n };\r\n };\r\n\r\n // Check if cell is selected for merging\r\n const isCellSelected = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\r\n return selectedCells.some(cell => \r\n cell.section === section && cell.row === rowIndex && cell.col === colIndex\r\n );\r\n };\r\n\r\n // Toggle cell selection for merging\r\n const toggleCellSelection = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\r\n const cellKey = { section, row: rowIndex, col: colIndex };\r\n const isSelected = isCellSelected(section, rowIndex, colIndex);\r\n \r\n if (isSelected) {\r\n setSelectedCells(prev => prev.filter(cell => \r\n !(cell.section === section && cell.row === rowIndex && cell.col === colIndex)\r\n ));\r\n } else {\r\n // Prevent mixing header and body cells in the same merge\r\n const hasDifferentSection = selectedCells.some(cell => cell.section !== section);\r\n if (hasDifferentSection) {\r\n alert('Cannot select cells from both header and body for the same merge');\r\n return;\r\n }\r\n setSelectedCells(prev => [...prev, cellKey]);\r\n }\r\n };\r\n\r\n // Open merge dialog\r\n const openMergeDialog = () => {\r\n if (selectedCells.length < 2) {\r\n alert('Please select at least 2 cells to merge');\r\n return;\r\n }\r\n \r\n // Get value from first selected cell\r\n const firstCell = selectedCells[0];\r\n let firstCellValue = '';\r\n let customTextValue = '';\r\n\r\n if (firstCell.section === 'tbody') {\r\n const columnId = tableData.columns[firstCell.col]?.id;\r\n firstCellValue = tableData.rows[firstCell.row]?.[columnId] || '';\r\n if (rowLevel) {\r\n customTextValue = customText[firstCell.row]?.[columnId] || '';\r\n }\r\n } else {\r\n firstCellValue = tableData.columns[firstCell.col]?.header || '';\r\n }\r\n\r\n // Combine customText with cell value only in row-level mode\r\n const initialMergeValue = rowLevel && customTextValue \r\n ? `${customTextValue} ${firstCellValue}`.trim() \r\n : firstCellValue;\r\n\r\n setMergeValue(initialMergeValue);\r\n setMergeDialogOpen(true);\r\n};\r\n\r\n // Perform cell merge\r\n const mergeCells = () => {\r\n if (selectedCells.length < 2) return;\r\n\r\n const section = selectedCells[0].section;\r\n const rowIndices = selectedCells.map(cell => cell.row);\r\n const colIndices = selectedCells.map(cell => cell.col);\r\n \r\n const rowStart = Math.min(...rowIndices);\r\n const rowEnd = Math.max(...rowIndices);\r\n const colStart = Math.min(...colIndices);\r\n const colEnd = Math.max(...colIndices);\r\n\r\n // Check if selection forms a rectangle\r\n const expectedCells = (rowEnd - rowStart + 1) * (colEnd - colStart + 1);\r\n if (selectedCells.length !== expectedCells) {\r\n alert('Please select a rectangular area of cells to merge');\r\n return;\r\n }\r\n\r\n // Check for overlapping merges\r\n const hasOverlap = mergedCells.some(existing => \r\n existing.section === section &&\r\n !(rowEnd < existing.rowStart || rowStart > existing.rowEnd ||\r\n colEnd < existing.colStart || colStart > existing.colEnd)\r\n );\r\n\r\n if (hasOverlap) {\r\n alert('Cannot merge cells that overlap with existing merged cells');\r\n return;\r\n }\r\n\r\n const newMerge: CellMerge = {\r\n section,\r\n rowStart,\r\n rowEnd,\r\n colStart,\r\n colEnd,\r\n value: mergeValue\r\n };\r\n\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n mergedCells: [...(prev.mergedCells || []), newMerge],\r\n columns: section === 'thead' ? prev.columns.map((col, index) => \r\n index === colStart ? { ...col, header: mergeValue } : col\r\n ) : prev.columns\r\n }));\r\n\r\n setSelectedCells([]);\r\n setMergeValue('');\r\n setMergeDialogOpen(false);\r\n };\r\n\r\n // Split merged cell\r\n const splitMergedCell = (mergeIndex: number) => {\r\n const merge = mergedCells[mergeIndex];\r\n \r\n setTableData(prev => {\r\n const updatedRows = [...prev.rows];\r\n const updatedColumns = [...prev.columns];\r\n \r\n if (merge.section === 'tbody') {\r\n for (let row = merge.rowStart; row <= merge.rowEnd; row++) {\r\n for (let col = merge.colStart; col <= merge.colEnd; col++) {\r\n const columnId = prev.columns[col]?.id;\r\n if (columnId && updatedRows[row]) {\r\n updatedRows[row][columnId] = merge.value;\r\n }\r\n }\r\n }\r\n } else {\r\n if (updatedColumns[merge.colStart]) {\r\n updatedColumns[merge.colStart].header = merge.value;\r\n }\r\n }\r\n \r\n return {\r\n ...prev,\r\n rows: updatedRows,\r\n name:selectedTable||'',\r\n columns: updatedColumns,\r\n mergedCells: prev.mergedCells?.filter((_, index) => index !== mergeIndex) || []\r\n };\r\n });\r\n };\r\n\r\n // Add new column\r\n const addColumn = () => {\r\n const newColumnId = generateColumnId();\r\n const newColumn: TableColumn = {\r\n id: newColumnId,\r\n header: `Column ${tableData.columns.length + 1}`\r\n };\r\n\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n columns: [...prev.columns, newColumn],\r\n rows: prev.rows.map(row => ({\r\n ...row,\r\n [newColumnId]: ''\r\n })),\r\n mergedCells: prev.mergedCells?.map(merge => ({\r\n ...merge\r\n })) || []\r\n }));\r\n };\r\n\r\n // Remove column\r\n const removeColumn = (columnId: string) => {\r\n const columnIndex = tableData.columns.findIndex(col => col.id === columnId);\r\n \r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n columns: prev.columns.filter(col => col.id !== columnId),\r\n rows: prev.rows.map(row => {\r\n const { [columnId]: removed, ...rest } = row;\r\n return rest;\r\n }),\r\n mergedCells: prev.mergedCells\r\n ?.filter(merge => !(merge.colStart <= columnIndex && merge.colEnd >= columnIndex))\r\n .map(merge => ({\r\n ...merge,\r\n colStart: merge.colStart > columnIndex ? merge.colStart - 1 : merge.colStart,\r\n colEnd: merge.colEnd > columnIndex ? merge.colEnd - 1 : merge.colEnd\r\n })) || []\r\n }));\r\n\r\n if (tPlaceholders && tPlaceholders[columnId]) {\r\n const updatedPlaceholders = { ...tPlaceholders };\r\n delete updatedPlaceholders[columnId];\r\n updateAttrs({ placeholders: updatedPlaceholders });\r\n }\r\n };\r\n\r\n // Update column header\r\n const updateColumnHeader = (columnId: string, newHeader: string) => {\r\n setTableData(prev => ({\r\n ...prev,\r\n columns: prev.columns.map(col =>\r\n col.id === columnId ? { ...col, header: newHeader } : col\r\n )\r\n }));\r\n };\r\n\r\n // Add new row\r\nconst addRow = () => {\r\n const newRow: TableRow = {};\r\n\r\n tableData.columns.forEach(col => {\r\n if (tPlaceholders?.[col.id]) {\r\n const placeholderKey = tPlaceholders[col.id];\r\n newRow[col.id] = `{{${placeholderKey}}}`;\r\n if(rowLevel){\r\n newRow[`${col.id}_static`] = newRow[col.id];\r\n }\r\n \r\n } else if (tableData.rows.length > 0) {\r\n // Copy first row's data if no placeholder\r\n newRow[col.id] = tableData.rows[0][col.id] || '';\r\n if(rowLevel){\r\n newRow[`${col.id}_static`] = tableData.rows[0][`${col.id}_static`] || ''\r\n }\r\n } else {\r\n // Default to empty\r\n if(rowLevel){\r\n newRow[`${col.id}_static`] = '';\r\n }\r\n newRow[col.id] = '';\r\n }\r\n });\r\n\r\n setTableData(prev => {\r\n const updatedRows = [...prev.rows, newRow];\r\n return {\r\n ...prev,\r\n rows: updatedRows,\r\n name:selectedTable||'',\r\n mergedCells: prev.mergedCells?.map(merge => ({ ...merge })) || []\r\n };\r\n });\r\n handleSave()\r\n};\r\n\r\n // Remove row\r\n const removeRow = (rowIndex: number) => {\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.filter((_, index) => index !== rowIndex),\r\n mergedCells: prev.mergedCells\r\n ?.filter(merge => !(merge.section === 'tbody' && merge.rowStart <= rowIndex && merge.rowEnd >= rowIndex))\r\n .map(merge => ({\r\n ...merge,\r\n rowStart: merge.section === 'tbody' && merge.rowStart > rowIndex ? merge.rowStart - 1 : merge.rowStart,\r\n rowEnd: merge.section === 'tbody' && merge.rowEnd > rowIndex ? merge.rowEnd - 1 : merge.rowEnd\r\n })) || []\r\n }));\r\n\r\n // Clean up rowPlaceholders and customText for the removed row\r\n setRowPlaceholders(prev => {\r\n const updated = { ...prev };\r\n delete updated[rowIndex];\r\n return updated;\r\n });\r\n setCustomText(prev => {\r\n const updated = { ...prev };\r\n delete updated[rowIndex];\r\n return updated;\r\n });\r\n };\r\n\r\n // Modified: Update cell value and trigger placeholder population\r\nconst updateRowCellValue = (rowIndex: number, columnId: string, value: string) => {\r\n setIsUpdating(true);\r\n const colIndex = tableData.columns.findIndex(col => col.id === columnId);\r\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\r\n const staticText = rowLevel ? (customText[rowIndex]?.[columnId] || '') : '';\r\n\r\n if (mergeInfo) {\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n mergedCells: prev.mergedCells?.map(merge => \r\n merge === mergeInfo.merge ? { ...merge, value } : merge\r\n ) || []\r\n }));\r\n } else {\r\n if (rowLevel && value) {\r\n setRowPlaceholders(prev => {\r\n const updated = { ...prev };\r\n if (!updated[rowIndex]) {\r\n updated[rowIndex] = {};\r\n }\r\n updated[rowIndex][columnId] = value;\r\n return updated;\r\n });\r\n } else if (rowLevel && !value) {\r\n setRowPlaceholders(prev => {\r\n const updated = { ...prev };\r\n if (updated[rowIndex]?.[columnId]) {\r\n delete updated[rowIndex][columnId];\r\n if (Object.keys(updated[rowIndex]).length === 0) {\r\n delete updated[rowIndex];\r\n }\r\n }\r\n return updated;\r\n });\r\n }\r\n\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.map((row, idx) =>\r\n idx === rowIndex ? { \r\n ...row, \r\n [columnId]: rowLevel ? (value ? `{{${value}}}` : '') : (value ? getPlaceholderValue(value) : ''),\r\n [`${columnId}_static`]: staticText ? `${staticText} ${value ? getPlaceholderValue(value) : ''}`.trim() : (value ? getPlaceholderValue(value) : '')\r\n } : row\r\n )\r\n }));\r\n\r\n populateRowsWithPlaceholders();\r\n }\r\n };\r\nconst updateCellValue = (rowIndex: number, columnId: string, value: string) => {\r\n setIsUpdating(true);\r\n const colIndex = tableData.columns.findIndex(col => col.id === columnId);\r\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\r\n const staticText = customText[rowIndex]?.[columnId] || '';\r\n\r\n if (mergeInfo) {\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n mergedCells: prev.mergedCells?.map(merge => \r\n merge === mergeInfo.merge ? { ...merge, value } : merge\r\n ) || []\r\n }));\r\n } else {\r\n if (rowLevel) {\r\n setRowPlaceholders(prev => {\r\n const updated = { ...prev };\r\n if (!updated[rowIndex]) {\r\n updated[rowIndex] = {};\r\n }\r\n if (value) {\r\n updated[rowIndex][columnId] = value;\r\n } else {\r\n delete updated[rowIndex][columnId];\r\n if (Object.keys(updated[rowIndex]).length === 0) {\r\n delete updated[rowIndex];\r\n }\r\n }\r\n return updated;\r\n });\r\n }\r\n\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.map((row, idx) =>\r\n idx === rowIndex ? { \r\n ...row, \r\n [columnId]: rowLevel ? (value ? `{{${value}}}` : '') : value,\r\n [`${columnId}_static`]: staticText ? `${staticText} ${value || ''}`.trim() : (value || '')\r\n } : row\r\n )\r\n }));\r\n\r\n if (rowLevel || (autoPopulateEnabled && tPlaceholders?.[columnId])) {\r\n populateRowsWithPlaceholders();\r\n }\r\n setIsUpdating(false);\r\n }\r\n };\r\n\r\n // Modified: Update column placeholder\r\n const updateColumnPlaceholder = (columnId: string, placeholderValue: string) => {\r\n setIsUpdating(true);\r\n const updatedPlaceholders = {\r\n ...tPlaceholders,\r\n [columnId]: placeholderValue\r\n };\r\n \r\n if (!placeholderValue) {\r\n delete updatedPlaceholders[columnId];\r\n }\r\n \r\n updateAttrs({ placeholders: updatedPlaceholders });\r\n\r\n if (autoPopulateEnabled) {\r\n const newCellValue = placeholderValue ? getPlaceholderValue(placeholderValue) : '';\r\n setTableData(prev => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.map(row => ({\r\n ...row,\r\n [columnId]: newCellValue\r\n }))\r\n }));\r\n }\r\n setIsUpdating(false);\r\n };\r\n\r\n // Refresh all rows with current placeholder values\r\n const refreshPlaceholderData = () => {\r\n populateRowsWithPlaceholders();\r\n };\r\n\r\n // Get placeholder info for display\r\n const getPlaceholderInfo = (placeholderKey: string) => {\r\n const placeholder = placeholders.find(p => p.value === placeholderKey);\r\n return placeholder ? {\r\n label: placeholder.label,\r\n type: placeholder.type || 'text',\r\n description: placeholder.description || ''\r\n } : null;\r\n };\r\n\r\n const handleTabChange = (event: React.SyntheticEvent, newValue: number) => {\r\n setTabValue(newValue);\r\n };\r\n\r\n const handleAccordionChange = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => {\r\n setExpanded(isExpanded ? panel : '');\r\n };\r\n\r\n const updateTableStyle = (key: string, value: any) => {\r\n setTableStyles(prev => ({\r\n ...prev,\r\n [key]: value\r\n }));\r\n };\r\n\r\n const updateHeaderStyle = (key: string, value: any) => {\r\n setTableStyles(prev => ({\r\n ...prev,\r\n tHead: {\r\n ...prev.tHead,\r\n [key]: value\r\n }\r\n }));\r\n };\r\n\r\n const updateHeaderCellStyle = (key: string, value: any) => {\r\n setTableStyles(prev => ({\r\n ...prev,\r\n thCells: {\r\n ...prev.thCells,\r\n [key]: value\r\n }\r\n }));\r\n };\r\n\r\n const updateBodyStyle = (key: string, value: any) => {\r\n setTableStyles(prev => ({\r\n ...prev,\r\n tBody: {\r\n ...prev.tBody,\r\n [key]: value\r\n }\r\n }));\r\n };\r\n\r\n const updateBodyCellStyle = (key: string, value: any) => {\r\n setTableStyles(prev => ({\r\n ...prev,\r\n tbCells: {\r\n ...prev.tbCells,\r\n [key]: value\r\n }\r\n }));\r\n };\r\n\r\n const resetTable=()=>{\r\n setTableData((prev: TableData) => ({\r\n ...prev,\r\n name:selectedTable||'',\r\n rows: prev.rows.map((row: TableRow) => {\r\n return {...Object.fromEntries(prev.columns.map((col: TableColumn) => [col?.id, '']))\r\n \t}\r\n })\r\n }));\r\n }\r\n // Count columns with placeholders\r\n const columnsWithPlaceholders = tPlaceholders ? Object.keys(tPlaceholders).length : 0;\r\nuseEffect(() => {\r\n // Determine if rowLevel should be enabled\r\n setRowLevel(levelType);\r\n setSelectedTable(tableData?.name || null); // Set default table if available\r\n // Update custom text by extracting values from _static fields\r\n setCustomText((prev: { [rowIndex: number]: { [columnId: string]: string } }) => {\r\n const updated: { [rowIndex: number]: { [columnId: string]: string } } = {}; // Fixed missing bracket here\r\n \r\n tableData.rows.forEach((row, rowIndex) => {\r\n Object.keys(row).forEach(columnId => {\r\n if (columnId.endsWith('_static')) {\r\n const originalColumnId = columnId.replace('_static', '');\r\n if (!updated[rowIndex]) {\r\n updated[rowIndex] = {};\r\n }\r\n\r\n // Get the original column value (without _static suffix)\r\n const columnValue = row[originalColumnId] || '';\r\n \r\n // Get the static value and remove the original column value if it appears\r\n let staticValue = row[columnId] || '';\r\n if (columnValue && staticValue.includes(columnValue)) {\r\n staticValue = staticValue.replace(columnValue, '').trim();\r\n }\r\n \r\n // Also remove any {{value}} placeholders\r\n staticValue = staticValue.replace(/\\{\\{\\s*value\\s*\\}\\}/g, '').trim();\r\n \r\n updated[rowIndex][originalColumnId] = staticValue;\r\n }\r\n });\r\n });\r\n \r\n return updated;\r\n });\r\n\r\n}, [tableData]);\r\n\r\nuseEffect(()=>{\r\n if(!selectedTable) {\r\n resetTable()\r\n }\r\n\r\n},[selectedTable]);\r\n return (\r\n <>\r\n <Box sx={{ mb: 2, borderBottom: 1,paddingBottom: 5, borderColor: 'divider' }}>\r\n <Tabs value={tabValue} onChange={handleTabChange} variant=\"fullWidth\" sx={(theme) => ({\r\n '& .MuiTabs-indicator': {\r\n backgroundColor: theme.palette.theme?.primary[700]\r\n },\r\n '& .MuiTab-root.Mui-selected': {\r\n color: theme.palette.theme?.primary[700],\r\n },\r\n '& .MuiTab-root': {\r\n textTransform: 'none'\r\n },\r\n })}>\r\n <Tab label=\"Content\" />\r\n <Tab label=\"Styles\" />\r\n <Tab label=\"Cell Merging\" />\r\n </Tabs>\r\n </Box>\r\n\r\n {tabValue === 0 && (\r\n <>\r\n <Box sx={{ mb: 2, p: 2, bgcolor: 'grey.50', borderRadius: 1, border: '1px solid', borderColor: 'divider' }}>\r\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.primary.700\">\r\n Dynamic Data Settings\r\n </Typography>\r\n <Chip \r\n label={`${columnsWithPlaceholders} columns linked`} \r\n size=\"small\" \r\n color=\"primary\" \r\n variant=\"outlined\"\r\n sx={theme => ({\r\n color: theme.palette.theme?.primary[700],\r\n borderColor: theme.palette.theme?.primary[700]\r\n })}\r\n />\r\n </Box>\r\n \r\n <FormControlLabel\r\n control={\r\n <Android12Switch\r\n checked={autoPopulateEnabled}\r\n onChange={(e) => setAutoPopulateEnabled(e.target.checked)}\r\n />\r\n }\r\n label={\r\n <Typography type=\"s5\" color=\"theme.secondary.800\">\r\n Auto-populate rows with placeholder data\r\n </Typography>\r\n }\r\n />\r\n <FormControlLabel\r\n control={\r\n <Android12Switch\r\n checked={rowLevel}\r\n onChange={(e) => {\r\n setRowLevel(e.target.checked);\r\n setSelectedTable(null); // Reset selected table when toggling row level\r\n setParentRowLevel(e.target.checked);\r\n resetTable();\r\n }}\r\n />\r\n }\r\n label={\r\n <Typography type=\"s5\" color=\"theme.secondary.800\">\r\n Row Level Management\r\n </Typography>\r\n }\r\n />\r\n \r\n {autoPopulateEnabled && (\r\n <Box sx={{ mt: 1 }}>\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={refreshPlaceholderData}\r\n startIcon={<RefreshIcon />}\r\n className='black-outlined-btn'\r\n >\r\n Refresh Data\r\n </Button>\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n <Box sx={{ mb: 2 }}>\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 1 }}>\r\n Columns\r\n </Typography>\r\n {tableData.columns?.map((column, index) => (\r\n <Box key={column.id} sx={{ mb: 1, display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <TextField\r\n label={`Column ${index + 1} Header`}\r\n value={column.header}\r\n onChange={(e) => updateColumnHeader(column.id, e.target.value)}\r\n size=\"small\"\r\n sx={{ flex: 1 }}\r\n />\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => removeColumn(column.id)}\r\n disabled={tableData.columns.length <= 1}\r\n color=\"error\"\r\n >\r\n <Trash />\r\n </IconButton>\r\n </Box>\r\n ))}\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={addColumn}\r\n startIcon={<AddIcon />}\r\n sx={{ mt: 1 }}\r\n className='black-outlined-btn'\r\n >\r\n Add Column\r\n </Button>\r\n </Box>\r\n\r\n <Divider sx={{ my: 2 }} />\r\n\r\n <Box sx={{ mb: 2 }}>\r\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\r\n Rows ({tableData.rows.length})\r\n </Typography>\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n disabled={selectedTable}\r\n onClick={() => addRow()}\r\n startIcon={<AddIcon />}\r\n className='black-outlined-btn'\r\n >\r\n Add Row\r\n </Button>\r\n </Box>\r\n {!rowLevel &&\r\n <Box sx={{ mb: 2 }}>\r\n <SearchableSelect\r\n value={selectedTable || ''}\r\n label={'Select Table'}\r\n options={relation_table?.map(table=>(\r\n { value: table?.dataKey, label: (table.name.charAt(0).toUpperCase() + table.name.slice(1)).replaceAll('_', ' ') }\r\n )) || []}\r\n onChange={(e) => {\r\n setSelectedTable(e.target.value);\r\n }}\r\n />\r\n </Box>\r\n\r\n }\r\n {tableData.rows.map((row, rowIndex) => (\r\n <Box key={rowIndex} sx={{ mb: 2, p: 2, border: 1, borderColor: 'divider', borderRadius: 1 }}>\r\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.800\">\r\n Row {rowIndex + 1}\r\n </Typography>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => removeRow(rowIndex)}\r\n disabled={tableData.rows.length <= 1}\r\n color=\"error\"\r\n >\r\n <Trash />\r\n </IconButton>\r\n </Box>\r\n <Grid container spacing={1}>\r\n \r\n {tableData.columns.map((column, colIndex) => {\r\n const hasPlaceholder = rowLevel ? rowPlaceholders[rowIndex]?.[column.id] : tPlaceholders?.[column.id];\r\n const placeholderInfo = hasPlaceholder ? getPlaceholderInfo(tPlaceholders?.[column.id] || rowPlaceholders[rowIndex]?.[column.id]) : null;\r\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\r\n\r\n return (\r\n <Grid item xs={12} key={column.id}>\r\n \r\n {rowLevel ? (\r\n <>\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.800\"> {column.header} </Typography>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: 1,\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n }}\r\n >\r\n <TextField\r\n value={customText[rowIndex]?.[column.id] || ''}\r\n onChange={(e) => {\r\n const newValue = e.target.value;\r\n setCustomText(prev => {\r\n const updated = { ...prev };\r\n if (!updated[rowIndex]) {\r\n updated[rowIndex] = {};\r\n }\r\n updated[rowIndex][column.id] = newValue;\r\n return updated;\r\n });\r\n\r\n // Update table data on custom text change\r\n setTableData(prev => ({\r\n ...prev,\r\n rows: prev.rows.map((row, idx) =>\r\n idx === rowIndex\r\n ? {\r\n ...row,\r\n [`${column.id}_static`]: newValue\r\n ? `${newValue} ${row[column.id] || ''}`.trim()\r\n : '',\r\n }\r\n : row\r\n ),\r\n }));\r\n }}\r\n size=\"small\"\r\n placeholder=\"Enter custom text...\"\r\n sx={{ flex: 1, minWidth: 150 }}\r\n />\r\n <Box sx={{ flex: 1, minWidth: 150 }}>\r\n <SearchableSelect\r\n value={mergeInfo ? mergeInfo.merge.value : (rowPlaceholders[rowIndex]?.[column.id] ||row[column.id]|| '')}\r\n onChange={(e) => updateRowCellValue(rowIndex, column.id, e.target.value)}\r\n size=\"small\"\r\n options={placeholders || []}\r\n // disabled={isUpdating}\r\n sx={{\r\n flex: 1,\r\n maxWidth: 150,\r\n minWidth: 150,\r\n '& .MuiInputBase-input': {\r\n bgcolor:\r\n hasPlaceholder && autoPopulateEnabled\r\n ? 'grey.100'\r\n : mergeInfo\r\n ? 'blue.50'\r\n : 'transparent',\r\n width: 150,\r\n \r\n },\r\n }}\r\n />\r\n </Box>\r\n </Box>\r\n </>\r\n ) : (\r\n <TextField\r\n label={column.header}\r\n value={mergeInfo ? mergeInfo.merge.value : (row[column.id] || '')}\r\n onChange={(e) => updateCellValue(rowIndex, column.id, e.target.value)}\r\n size=\"small\"\r\n fullWidth\r\n disabled={autoPopulateEnabled || hasPlaceholder}\r\n helperText={\r\n mergeInfo\r\n ? `Merged cell (${mergeInfo.merge.rowEnd - mergeInfo.merge.rowStart + 1}×${mergeInfo.merge.colEnd - mergeInfo.merge.colStart + 1})`\r\n : hasPlaceholder && placeholderInfo\r\n ? `Linked to: ${placeholderInfo.label}`\r\n : undefined\r\n }\r\n sx={{\r\n '& .MuiInputBase-input': {\r\n bgcolor:\r\n hasPlaceholder && autoPopulateEnabled\r\n ? 'grey.100'\r\n : mergeInfo\r\n ? 'blue.50'\r\n : 'transparent',\r\n },\r\n }}\r\n />\r\n )}\r\n </Grid>\r\n );\r\n })}\r\n </Grid>\r\n </Box>\r\n ))}\r\n </Box>\r\n\r\n <Divider sx={{ my: 2 }} />\r\n\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 1 }}>\r\n Column Data Sources\r\n </Typography>\r\n \r\n {placeholders.length === 0 && (\r\n <Alert severity=\"info\" sx={{ mb: 2 }}>\r\n No placeholders available. Add placeholders to dynamically populate table data.\r\n </Alert>\r\n )}\r\n \r\n <Grid container spacing={1} alignItems='center'>\r\n {tableData.columns.map((column) => {\r\n const currentPlaceholder =tPlaceholders?.[column.id]|| tableData.rows?.[0]?.[column.id];\r\n\r\n const placeholderInfo = currentPlaceholder ? getPlaceholderInfo(currentPlaceholder) : null;\r\n \r\n return (\r\n <React.Fragment key={column.id}>\r\n <Grid item xs={4}>\r\n <Typography type=\"s5\" weight=\"medium\" color=\"theme.secondary.800\">\r\n {column.header}\r\n </Typography>\r\n {placeholderInfo && (\r\n <Typography type=\"s6\" color=\"theme.secondary.600\" sx={{ fontStyle: 'italic' }}>\r\n {placeholderInfo.type}\r\n </Typography>\r\n )}\r\n </Grid>\r\n <Grid item xs={8}>\r\n <SearchableSelect\r\n value={rowLevel ? '' : (currentPlaceholder || '')}\r\n onChange={(e) => {\r\n updateColumnPlaceholder(column.id, e.target.value as string)\r\n }}\r\n size=\"small\"\r\n options={tableAttributes.map(attr => ({\r\n value: attr.value,\r\n label: attr.label,\r\n // Include description if available in your tableAttributes\r\n description: attr.description \r\n }))}\r\n disabled={isUpdating || rowLevel}\r\n sx={{\r\n flex: 1,\r\n maxWidth: 150,\r\n minWidth: 150,\r\n '& .MuiInputBase-input': {\r\n bgcolor: 'transparent',\r\n width: 150,\r\n },\r\n }}\r\n renderOption={(props, option) => (\r\n <MenuItem {...props} key={option.value}>\r\n <Box>\r\n <Typography type=\"s5\" color=\"theme.secondary.1000\">\r\n {option.label}\r\n </Typography>\r\n {option.description && (\r\n <Typography type=\"s6\" color=\"theme.secondary.600\" sx={{ fontStyle: 'italic' }}>\r\n {option.description}\r\n </Typography>\r\n )}\r\n </Box>\r\n </MenuItem>\r\n )}\r\n noOptionsText={\r\n <MenuItem disabled>\r\n <Typography type=\"s5\" color=\"theme.secondary.600\">\r\n No Data Source\r\n </Typography>\r\n </MenuItem>\r\n }\r\n />\r\n {/* <Select\r\n value={rowLevel ? '' : (currentPlaceholder || '')}\r\n onChange={(e) => updateColumnPlaceholder(column.id, e.target.value as string)}\r\n renderValue={(value) => {\r\n if (!value) return 'Select Data Source';\r\n const placeholder = placeholders.find(p => p.value === value);\r\n return placeholder?.label||currentPlaceholder || 'Unknown Placeholder';\r\n }}\r\n fullWidth\r\n disabled={isUpdating}\r\n size=\"small\"\r\n displayEmpty\r\n disabled={rowLevel}\r\n >\r\n <MenuItem value=\"\">\r\n <Typography type=\"s5\" color=\"theme.secondary.600\">No Data Source</Typography>\r\n </MenuItem>\r\n {tableAttributes.map((placeholder) => (\r\n <MenuItem key={placeholder.value} value={placeholder.value}>\r\n <Box>\r\n <Typography type=\"s5\" color=\"theme.secondary.1000\">\r\n {placeholder.label}\r\n </Typography>\r\n {placeholder.description && (\r\n <Typography type=\"s6\" color=\"theme.secondary.600\" sx={{ fontStyle: 'italic' }}>\r\n {placeholder.description}\r\n </Typography>\r\n )}\r\n </Box>\r\n </MenuItem>\r\n ))}\r\n </Select> */}\r\n </Grid>\r\n </React.Fragment>\r\n );\r\n })}\r\n </Grid>\r\n </>\r\n )}\r\n\r\n {tabValue === 1 && (\r\n <Box sx={{\r\n '& >:first-child': { borderTopLeftRadius: 8, borderTopRightRadius: 8 },\r\n '& >:last-child': { borderBottomLeftRadius: 8, borderBottomRightRadius: 8 }\r\n }}>\r\n <Accordion \r\n expanded={expanded === 'tableBasic'} \r\n onChange={handleAccordionChange('tableBasic')}\r\n disableGutters\r\n >\r\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\r\n <Typography type='s3' color='theme.secondary.1000'>Table Basic Properties</Typography>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <BorderControl\r\n styles={tableStyles}\r\n onChange={(key, value) => updateTableStyle(key, value)}\r\n isBordered={tableStyles.is_bordered}\r\n disableRadius\r\n />\r\n </AccordionDetails>\r\n </Accordion>\r\n\r\n <Accordion \r\n expanded={expanded === 'tableHeader'} \r\n onChange={handleAccordionChange('tableHeader')}\r\n disableGutters\r\n >\r\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\r\n <Typography type='s3' color='theme.secondary.1000'>Table Header Styles</Typography>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <Grid container spacing={2}>\r\n <Grid item xs={12}>\r\n <ColorPickerInput\r\n value={tableStyles.tHead?.backgroundColor || '#f5f5f5'}\r\n onChange={(color) => updateHeaderStyle('backgroundColor', color)}\r\n fullWidth\r\n label='Background Color'\r\n />\r\n </Grid>\r\n \r\n <Grid item xs={12}>\r\n <ColorPickerInput\r\n value={tableStyles.tHead?.color || '#333333'}\r\n onChange={(color) => updateHeaderStyle('color', color)}\r\n fullWidth\r\n label='Text Color'\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <TextField\r\n label='Font Size'\r\n type='number'\r\n value={tableStyles.tHead?.fontSize || 14}\r\n onChange={(e) => updateHeaderStyle('fontSize', parseInt(e.target.value) || 14)}\r\n size='small'\r\n fullWidth\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <Select\r\n value={tableStyles.tHead?.fontWeight || 'bold'}\r\n onChange={(e) => updateHeaderStyle('fontWeight', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Font Weight'\r\n >\r\n {fontWeightOptions.map(weight => (\r\n <MenuItem key={weight} value={weight}>\r\n {formatText(weight)}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={12}>\r\n <Select\r\n value={tableStyles.tHead?.fontFamily || 'Arial, sans-serif'}\r\n onChange={(e) => updateHeaderStyle('fontFamily', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Font Family'\r\n >\r\n {fontFamilyOptions.map(font => (\r\n <MenuItem key={font} value={font}>\r\n {font.split(',')[0]}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <Select\r\n value={tableStyles.tHead?.textAlign || 'left'}\r\n onChange={(e) => updateHeaderStyle('textAlign', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Text Align'\r\n >\r\n {textAlignOptions.map(align => (\r\n <MenuItem key={align} value={align}>\r\n {formatText(align)}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <TextField\r\n label='Cell Padding'\r\n type='number'\r\n value={tableStyles.thCells?.padding || 8}\r\n onChange={(e) => updateHeaderCellStyle('padding', parseInt(e.target.value) || 8)}\r\n size='small'\r\n fullWidth\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={12}>\r\n <FormControlLabel\r\n control={\r\n <Android12Switch\r\n checked={!!tableStyles.tBody?.zebraStriping}\r\n onChange={(e) => updateBodyStyle('zebraStriping', e.target.checked)}\r\n />\r\n }\r\n label=\"Zebra Striping\"\r\n />\r\n </Grid>\r\n\r\n {tableStyles.tBody?.zebraStriping && (\r\n <Grid item xs={12}>\r\n <Typography type='s5' weight='medium' color='theme.secondary.1000' variant=\"caption\">Alternating Row Color</Typography>\r\n <ColorPickerInput\r\n value={tableStyles.tBody?.alternateRowColor || '#f9f9f9'}\r\n onChange={(color) => updateBodyStyle('alternateRowColor', color)}\r\n fullWidth\r\n />\r\n </Grid>\r\n )}\r\n </Grid>\r\n </AccordionDetails>\r\n </Accordion>\r\n\r\n <Accordion \r\n expanded={expanded === 'tableBody'} \r\n onChange={handleAccordionChange('tableBody')}\r\n disableGutters\r\n >\r\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\r\n <Typography type='s3' color='theme.secondary.1000'>Table Body Styles</Typography>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <Grid container spacing={2}>\r\n <Grid item xs={12}>\r\n <ColorPickerInput\r\n value={tableStyles.tBody?.backgroundColor || '#ffffff'}\r\n onChange={(color) => updateBodyStyle('backgroundColor', color)}\r\n fullWidth\r\n label='Background Color'\r\n />\r\n </Grid>\r\n \r\n <Grid item xs={12}>\r\n <ColorPickerInput\r\n value={tableStyles.tBody?.color || '#333333'}\r\n onChange={(color) => updateBodyStyle('color', color)}\r\n fullWidth\r\n label='Text Color'\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <TextField\r\n label='Font Size'\r\n type='number'\r\n value={tableStyles.tBody?.fontSize || 14}\r\n onChange={(e) => updateBodyStyle('fontSize', parseInt(e.target.value) || 14)}\r\n size='small'\r\n fullWidth\r\n />\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <Select\r\n value={tableStyles.tBody?.fontWeight || 'normal'}\r\n onChange={(e) => updateBodyStyle('fontWeight', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Font Weight'\r\n >\r\n {fontWeightOptions.map(weight => (\r\n <MenuItem key={weight} value={weight}>\r\n {formatText(weight)}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={12}>\r\n <Select\r\n value={tableStyles.tBody?.fontFamily || 'Arial, sans-serif'}\r\n onChange={(e) => updateBodyStyle('fontFamily', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Font Family'\r\n >\r\n {fontFamilyOptions.map(font => (\r\n <MenuItem key={font} value={font}>\r\n {font.split(',')[0]}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <Select\r\n value={tableStyles.tBody?.textAlign || 'left'}\r\n onChange={(e) => updateBodyStyle('textAlign', e.target.value)}\r\n fullWidth\r\n size='small'\r\n label='Text Align'\r\n >\r\n {textAlignOptions.map(align => (\r\n <MenuItem key={align} value={align}>\r\n {formatText(align)}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <TextField\r\n label='Cell Padding'\r\n type='number'\r\n value={tableStyles.tbCells?.padding || 8}\r\n onChange={(e) => updateBodyCellStyle('padding', parseInt(e.target.value) || 8)}\r\n size='small'\r\n fullWidth\r\n />\r\n </Grid>\r\n </Grid>\r\n </AccordionDetails>\r\n </Accordion>\r\n </Box>\r\n )}\r\n\r\n {tabValue === 2 && (\r\n <Box>\r\n <Box sx={{ mb: 3 }}>\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 2 }}>\r\n Cell Selection & Merging\r\n </Typography>\r\n \r\n <Alert severity=\"info\" sx={{ mb: 2 }}>\r\n Click on cells in the table below to select them for merging. Selected cells will be highlighted. You can merge cells within the header or body, but not across both.\r\n </Alert>\r\n\r\n <Box sx={{ display: 'flex', gap: 1, mb: 2, flexWrap: 'wrap' }}>\r\n <Button\r\n variant=\"contained\"\r\n size=\"small\"\r\n onClick={openMergeDialog}\r\n startIcon={<MergeIcon />}\r\n disabled={selectedCells.length < 2}\r\n color=\"primary\"\r\n >\r\n Merge Selected ({selectedCells.length})\r\n </Button>\r\n \r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={() => setSelectedCells([])}\r\n disabled={selectedCells.length === 0}\r\n className='black-outlined-btn'\r\n >\r\n Clear Selection\r\n </Button>\r\n </Box>\r\n\r\n <Box sx={{ \r\n border: 1, \r\n borderColor: 'divider', \r\n borderRadius: 1, \r\n overflow: 'auto',\r\n maxHeight: 400\r\n }}>\r\n <Table size=\"small\" sx={{ minWidth: 300 }}>\r\n <TableHead>\r\n <TableRow>\r\n {tableData.columns.map((column, colIndex) => {\r\n const mergeInfo = getCellMergeInfo('thead', 0, colIndex);\r\n const isSelected = isCellSelected('thead', 0, colIndex);\r\n \r\n if (mergeInfo?.isCovered) {\r\n return null;\r\n }\r\n\r\n const cellContent = mergeInfo ? mergeInfo.merge.value : column.header;\r\n const rowSpan = mergeInfo ? mergeInfo.merge.rowEnd - mergeInfo.merge.rowStart + 1 : 1;\r\n const colSpan = mergeInfo ? mergeInfo.merge.colEnd - mergeInfo.merge.colStart + 1 : 1;\r\n\r\n return (\r\n <TableCell \r\n key={column.id}\r\n rowSpan={rowSpan}\r\n colSpan={colSpan}\r\n onClick={() => !mergeInfo && toggleCellSelection('thead', 0, colIndex)}\r\n sx={(theme) => ({ \r\n fontWeight: 'bold',\r\n bgcolor: mergeInfo ? 'blue.50' : \r\n isSelected ? 'primary.100' : 'grey.100',\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1,\r\n cursor: mergeInfo ? 'default' : 'pointer',\r\n border: isSelected ? 2 : 1,\r\n borderColor: isSelected ? theme.palette.theme.primary[800] : 'divider',\r\n '&:hover': mergeInfo ? {} : {\r\n bgcolor: isSelected ? 'primary.200' : 'grey.50'\r\n }\r\n })}\r\n >\r\n {cellContent}\r\n {mergeInfo && (\r\n <Chip\r\n label={`${rowSpan}×${colSpan}`}\r\n size=\"small\"\r\n color=\"primary\"\r\n variant=\"outlined\"\r\n sx={(theme) => ({\r\n position: 'absolute',\r\n top: 2,\r\n right: 2,\r\n fontSize: '0.6rem',\r\n height: 16,\r\n color: theme.palette.theme.primary[800],\r\n borderColor: theme.palette.theme.primary[800]\r\n })}\r\n />\r\n )}\r\n {isSelected && (\r\n <Checkbox\r\n checked={true}\r\n size=\"small\"\r\n sx={{\r\n position: 'absolute',\r\n top: 2,\r\n left: 2,\r\n padding: 0\r\n }}\r\n />\r\n )}\r\n </TableCell>\r\n );\r\n })}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {tableData.rows.map((row, rowIndex) => (\r\n <TableRow key={rowIndex}>\r\n {tableData.columns.map((column, colIndex) => {\r\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\r\n const isSelected = isCellSelected('tbody', rowIndex, colIndex);\r\n \r\n if (mergeInfo?.isCovered) {\r\n return null;\r\n }\r\n\r\n // Get customText for the cell\r\n const customTextValue = customText[rowIndex]?.[column.id] || '';\r\n // Combine customText with cell value or merge value\r\n const cellContent = mergeInfo \r\n ? mergeInfo.merge.value // Already includes customText from mergeCells\r\n : customTextValue \r\n ? `${customTextValue} ${row[column.id] || ''}`.trim() \r\n : row[column.id] || '';\r\n\r\n const rowSpan = mergeInfo ? mergeInfo.merge.rowEnd - mergeInfo.merge.rowStart + 1 : 1;\r\n const colSpan = mergeInfo ? mergeInfo.merge.colEnd - mergeInfo.merge.colStart + 1 : 1;\r\n\r\n return (\r\n <TableCell\r\n key={column.id}\r\n rowSpan={rowSpan}\r\n colSpan={colSpan}\r\n onClick={() => !mergeInfo && toggleCellSelection('tbody', rowIndex, colIndex)}\r\n sx={(theme) => ({ \r\n cursor: mergeInfo ? 'default' : 'pointer',\r\n bgcolor: mergeInfo ? 'blue.50' : \r\n isSelected ? 'primary.100' : \r\n 'transparent',\r\n border: isSelected ? 2 : 1,\r\n borderColor: isSelected ? theme.palette.theme?.primary[800] : 'divider',\r\n '&:hover': mergeInfo ? {} : {\r\n bgcolor: isSelected ? 'primary.200' : 'grey.50'\r\n },\r\n position: 'relative'\r\n })}\r\n >\r\n {cellContent}\r\n {mergeInfo && (\r\n <Chip\r\n label={`${rowSpan}×${colSpan}`}\r\n size=\"small\"\r\n color=\"primary\"\r\n variant=\"outlined\"\r\n sx={(theme) => ({\r\n position: 'absolute',\r\n top: 2,\r\n right: 2,\r\n fontSize: '0.6rem',\r\n height: 16,\r\n color: theme.palette.theme?.primary[800],\r\n borderColor: theme.palette.theme?.primary[800]\r\n })}\r\n />\r\n )}\r\n {isSelected && (\r\n <Checkbox\r\n checked={true}\r\n size=\"small\"\r\n sx={{\r\n position: 'absolute',\r\n top: 2,\r\n left: 2,\r\n padding: 0\r\n }}\r\n />\r\n )}\r\n </TableCell>\r\n );\r\n })}\r\n </TableRow>\r\n ))}\r\n</TableBody>\r\n </Table>\r\n </Box>\r\n </Box>\r\n\r\n {mergedCells.length > 0 && (\r\n <Box sx={{ mt: 3 }}>\r\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\" sx={{ mb: 2 }}>\r\n Merged Cells ({mergedCells.length})\r\n </Typography>\r\n \r\n {mergedCells.map((merge, index) => (\r\n <Box \r\n key={index}\r\n sx={{ \r\n p: 2, \r\n mb: 1, \r\n border: 1, \r\n borderColor: 'divider', \r\n borderRadius: 1,\r\n bgcolor: 'blue.25'\r\n }}\r\n >\r\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', mb: 1 }}>\r\n <Box>\r\n <Typography type=\"s4\" weight=\"medium\" color=\"theme.secondary.900\">\r\n Merge {index + 1}: {merge.rowEnd - merge.rowStart + 1}×{merge.colEnd - merge.colStart + 1} cells ({merge.section})\r\n </Typography>\r\n <Typography type=\"s5\" color=\"theme.secondary.700\">\r\n Rows {merge.rowStart + 1}-{merge.rowEnd + 1}, Columns {merge.colStart + 1}-{merge.colEnd + 1}\r\n </Typography>\r\n </Box>\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={() => splitMergedCell(index)}\r\n startIcon={<SplitIcon />}\r\n className='black-outlined-btn'\r\n >\r\n Split\r\n </Button>\r\n </Box>\r\n \r\n <TextField\r\n label=\"Merged Cell Value\"\r\n value={merge.value}\r\n onChange={(e) => {\r\n setTableData(prev => ({\r\n ...prev,\r\n mergedCells: prev.mergedCells?.map((m, i) => \r\n i === index ? { ...m, value: e.target.value } : m\r\n ) || []\r\n }));\r\n }}\r\n size=\"small\"\r\n fullWidth\r\n multiline\r\n rows={2}\r\n />\r\n </Box>\r\n ))}\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n\r\n <Dialog\r\n open={mergeDialogOpen}\r\n onClose={() => setMergeDialogOpen(false)}\r\n maxWidth=\"sm\"\r\n fullWidth\r\n >\r\n <DialogTitle>\r\n <Typography type=\"s2\" weight=\"medium\">\r\n Merge Selected Cells\r\n </Typography>\r\n </DialogTitle>\r\n <DialogContent>\r\n <Typography type=\"s4\" color=\"theme.secondary.700\" sx={{ mb: 2 }}>\r\n You are about to merge {selectedCells.length} selected cells in {selectedCells[0]?.section}. \r\n Enter the value for the merged cell:\r\n </Typography>\r\n \r\n <TextField\r\n label=\"Merged Cell Value\"\r\n value={mergeValue}\r\n onChange={(e) => setMergeValue(e.target.value)}\r\n fullWidth\r\n multiline\r\n rows={3}\r\n sx={{ mt: 1 }}\r\n />\r\n \r\n <Alert severity=\"info\" sx={{ mt: 2 }}>\r\n The merged cell will span from row {Math.min(...selectedCells.map(c => c.row)) + 1} to {Math.max(...selectedCells.map(c => c.row)) + 1} \r\n and column {Math.min(...selectedCells.map(c => c.col)) + 1} to {Math.max(...selectedCells.map(c => c.col)) + 1} in {selectedCells[0]?.section}.\r\n </Alert>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button onClick={() => setMergeDialogOpen(false)}>\r\n Cancel\r\n </Button>\r\n <Button \r\n onClick={mergeCells}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n Merge Cells\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n </>\r\n );\r\n};\r\n\r\nexport default TableControls;","/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport {\r\n Box,\r\n Slider,\r\n InputAdornment,\r\n} from '@mui/material';\r\nimport ColorLensIcon from '@mui/icons-material/ColorLens';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport TextField from '../../../../components/text-field/text-field';\r\n\r\ninterface SignatureControlsProps {\r\n attrs: Record<string, any>;\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\nconst SignatureControls: React.FC<SignatureControlsProps> = ({\r\n attrs,\r\n updateAttrs,\r\n}) => {\r\n const { styles } = attrs\r\n return (\r\n <>\r\n <Box sx={{ mb: 1 }}>\r\n <Typography type=\"s5\" color='theme.secondary.800' weight='medium'>\r\n Font Size\r\n </Typography>\r\n <Slider\r\n value={styles?.fontSize}\r\n onChange={(_, value) => updateAttrs({ styles :{ fontSize: value as number }})}\r\n min={10}\r\n max={20}\r\n step={1}\r\n valueLabelDisplay=\"auto\"\r\n size=\"small\"\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Box>\r\n <Box sx={{ mb: 2, }}>\r\n <TextField\r\n label=\"Text Color\"\r\n type=\"color\"\r\n value={styles?.color}\r\n onChange={(e) => updateAttrs({ styles :{ color: e.target.value }})}\r\n fullWidth\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <ColorLensIcon fontSize=\"small\" />\r\n </InputAdornment>\r\n ),\r\n }}\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default SignatureControls;","/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\nimport { Box, Slider} from '@mui/material';\r\nimport Typography from '../../../../components/typography/typography';\r\nimport AlignmentControl from './AlignmentControl';\r\n\r\ninterface CodeControlsProps {\r\n // type: 'qr-code' | 'bar-code';\r\n attrs: Record<string, any>;\r\n updateAttrs: (attr: Record<string, any>) => void;\r\n}\r\n\r\nconst CodeControls: React.FC<CodeControlsProps> = ({\r\n // type,\r\n attrs,\r\n updateAttrs,\r\n}) => {\r\n const { styles } = attrs\r\n\r\n const updateStyles = (styles: Record<string, any>) => {\r\n updateAttrs({ styles });\r\n }\r\n\r\n const handleAlignmentChange = (\r\n event: React.MouseEvent<HTMLElement>,\r\n newAlignment: string | null,\r\n ) => {\r\n if (newAlignment !== null) {\r\n updateStyles({ textAlign: newAlignment });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <Box sx={{ mb: 2 }}>\r\n <Typography type=\"s3\" color='theme.neutral.800'>\r\n Size (px)\r\n </Typography>\r\n <Slider\r\n value={styles.fontSize}\r\n onChange={(_, value) => updateStyles({ fontSize: value as number })}\r\n min={10}\r\n max={25}\r\n step={5}\r\n valueLabelDisplay=\"auto\"\r\n size=\"small\"\r\n sx={(theme) => ({\r\n '& .MuiSlider-rail': {\r\n color: theme.palette.theme.primary[500],\r\n },\r\n '& .MuiSlider-thumb': {\r\n color: theme.palette.theme.primary[800],\r\n },\r\n '& .MuiSlider-track': {\r\n color: theme.palette.theme.primary[600],\r\n },\r\n })}\r\n />\r\n </Box>\r\n <AlignmentControl alignment={styles?.textAlign} onAlignmentChange={handleAlignmentChange} displayLabel/>\r\n </>\r\n );\r\n};\r\n\r\nexport default CodeControls;","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useEffect, useMemo, useCallback } from 'react';\r\nimport {\r\n Box,\r\n Paper,\r\n IconButton,\r\n FormControl,\r\n MenuItem,\r\n Tooltip,\r\n} from '@mui/material';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport { Save } from '../../../components/icons';\r\nimport Typography from '../../../components/typography/typography';\r\n\r\n// Import sub-components\r\nimport TextControls from './controllers/TextControls';\r\nimport ButtonControls from './controllers/ButtonControls';\r\nimport ImageControls from './controllers/ImageControls';\r\nimport DividerControls from './controllers/DividerControls';\r\nimport TableControls from './controllers/TableControls';\r\nimport SignatureControls from './controllers/SignatureControls';\r\nimport CodeControls from './controllers/CodeControls';\r\nimport Select from '../../../components/select/select';\r\nimport { EnhancedSectionData, ElementType } from '../types/editor';\r\nimport { initialStyles } from '../utils/constant';\r\nimport { extractStyles, generateInlineStyles, getInitialSectionData } from '../utils/common';\r\n// import { useCKEditorStyleExtractor } from '../utils/style-extractor';\r\n\r\n// Shared types for SectionFormatPanel and sub-components\r\nexport interface TableColumn {\r\n id: string;\r\n header: string;\r\n placeholder?: string;\r\n}\r\n\r\nexport interface TableRow {\r\n [key: string]: string | number | boolean;\r\n}\r\n\r\nexport interface CellMerge {\r\n section: 'thead' | 'tbody';\r\n rowStart: number;\r\n rowEnd: number;\r\n colStart: number;\r\n colEnd: number;\r\n value: string;\r\n}\r\n\r\nexport interface TableData {\r\n name?: string; // Added name property for #each iteration\r\n columns: TableColumn[];\r\n rows: TableRow[];\r\n border: boolean;\r\n mergedCells?: CellMerge[];\r\n}\r\n\r\ninterface SectionData {\r\n type: 'text' | 'text-block' | 'heading' | 'heading-2' | 'heading-3' | 'heading-4' | 'buttons' | 'image' | 'divider' | 'table' | 'signature' | 'qr-code' | 'bar-code';\r\n content: string;\r\n attributes?: {\r\n styles?: any;\r\n placeholders?: Record<string, string>;\r\n tableData?: TableData;\r\n [key: string]: any;\r\n };\r\n}\r\n\r\ninterface SectionFormatPanelProps {\r\n section: SectionData | undefined;\r\n onClose: () => void;\r\n onUpdate: (data: Partial<EnhancedSectionData>) => void;\r\n placeholders: Record<string, any>[];\r\n relation_table?:any;\r\n handleSave?: () => void;\r\n}\r\n\r\nconst sectionTypes = ['text','text-block','heading','heading-2','heading-3','heading-4','buttons','image','divider','table','signature','qr-code','bar-code']\r\n\r\nconst SectionFormatPanel: React.FC<SectionFormatPanelProps> = ({ \r\n section, \r\n onClose, \r\n onUpdate,\r\n placeholders,\r\n relation_table,\r\n handleSave }) => {\r\n // const { applyStylesToHtml } = useCKEditorStyleExtractor()\r\n // const [plainContent, setPlainContent] = useState('');\r\n const sectionType = useMemo(() => section?.type || 'text', [section?.type]);\r\n const content = useMemo(() => section?.content || 'text', [section?.content]);\r\n const [formatOptions, setFormatOptions] = useState<string[]>([]);\r\n const[rowLevel, setRowLevel] = useState<boolean>((section?.attributes as any)?.rowLevel || false);\r\n const [tableData, setTableData] = useState<TableData>({\r\n name: '', // Initialize with empty name\r\n columns: [\r\n { id: 'col1', header: 'Column 1' },\r\n { id: 'col2', header: 'Column 2' },\r\n { id: 'col3', header: 'Column 3' }\r\n ],\r\n rows: [\r\n { col1: '', col2: '', col3: '' }\r\n ],\r\n border: true,\r\n mergedCells: []\r\n });\r\n const [isInitialLoad, setIsInitialLoad] = useState(true);\r\n const [selectedContentAttrObj, setSelectedContentAttrObj] = useState(extractStyles(content, section?.type));\r\n\r\n // Initialize table data from section attributes\r\n useEffect(() => {\r\n if (section && section.type === 'table') {\r\n // If section has stored table data, use it\r\n if (section.attributes?.tableData) {\r\n setTableData(section.attributes.tableData);\r\n } else {\r\n // Try to extract table data from HTML content\r\n const extractedTableData = extractTableDataFromHTML(section.content);\r\n if (extractedTableData) {\r\n setTableData(extractedTableData);\r\n setRowLevel((section?.attributes as any)?.rowLevel || false);\r\n }\r\n }\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (section && !isInitialLoad) {\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = section.content;\r\n const text = tempDiv.textContent || '';\r\n // setPlainContent(text);\r\n setSelectedContentAttrObj(extractStyles(section.content, section?.type)?.styles)\r\n setIsInitialLoad(false);\r\n }\r\n }, [section]);\r\n\r\n // Extract table data from HTML content\r\n const extractTableDataFromHTML = (htmlContent: string): TableData | null => {\r\n try {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(htmlContent, 'text/html');\r\n const table = doc.querySelector('table');\r\n \r\n if (!table) return null;\r\n\r\n const headerRows = table.querySelectorAll('thead tr');\r\n const bodyRows = table.querySelectorAll('tbody tr');\r\n\r\n if (headerRows.length === 0) return null;\r\n\r\n // Extract columns from the first header row\r\n const headerCells = headerRows[0].querySelectorAll('th');\r\n const columns: TableColumn[] = Array.from(headerCells).map((th, index) => ({\r\n id: `col${index + 1}`,\r\n header: th.textContent?.trim() || `Column ${index + 1}`\r\n }));\r\n\r\n // Extract merged cells from thead\r\n const mergedCells: CellMerge[] = [];\r\n Array.from(headerRows).forEach((row, rowIndex) => {\r\n const cells = row.querySelectorAll('th');\r\n cells.forEach((cell, colIndex) => {\r\n const rowSpan = parseInt(cell.getAttribute('rowspan') || '1');\r\n const colSpan = parseInt(cell.getAttribute('colspan') || '1');\r\n if (rowSpan > 1 || colSpan > 1) {\r\n mergedCells.push({\r\n section: 'thead',\r\n rowStart: rowIndex,\r\n rowEnd: rowIndex + rowSpan - 1,\r\n colStart: colIndex,\r\n colEnd: colIndex + colSpan - 1,\r\n value: cell.textContent?.trim() || ''\r\n });\r\n }\r\n });\r\n });\r\n\r\n // Extract rows\r\n const rows: TableRow[] = Array.from(bodyRows).map(row => {\r\n const cells = row.querySelectorAll('td');\r\n const rowData: TableRow = {};\r\n \r\n cells.forEach((cell, index) => {\r\n if (index < columns.length) {\r\n rowData[columns[index].id] = cell.textContent?.trim() || '';\r\n }\r\n });\r\n \r\n return rowData;\r\n });\r\n\r\n // Extract merged cells from tbody\r\n Array.from(bodyRows).forEach((row, rowIndex) => {\r\n const cells = row.querySelectorAll('td');\r\n cells.forEach((cell, colIndex) => {\r\n const rowSpan = parseInt(cell.getAttribute('rowspan') || '1');\r\n const colSpan = parseInt(cell.getAttribute('colspan') || '1');\r\n if (rowSpan > 1 || colSpan > 1) {\r\n mergedCells.push({\r\n section: 'tbody',\r\n rowStart: rowIndex,\r\n rowEnd: rowIndex + rowSpan - 1,\r\n colStart: colIndex,\r\n colEnd: colIndex + colSpan - 1,\r\n value: cell.textContent?.trim() || ''\r\n });\r\n }\r\n });\r\n });\r\n\r\n return {\r\n name: '', // Default empty name\r\n columns,\r\n rows: rows.length > 0 ? rows : [{}],\r\n border: true,\r\n mergedCells\r\n };\r\n } catch (error) {\r\n return null;\r\n }\r\n };\r\n\r\n // Get placeholder value for table generation\r\n const getPlaceholderValue = (placeholderKey: string): string => {\r\n const placeholder = placeholders.find(p => p.value === placeholderKey);\r\n if (!placeholder) return '';\r\n \r\n // Return actual value or generate sample based on type\r\n if (typeof placeholder.actualValue !== 'undefined') {\r\n return String(placeholder.actualValue);\r\n }\r\n \r\n switch (placeholder.type) {\r\n case 'date':\r\n return new Date().toLocaleDateString();\r\n case 'datetime':\r\n return new Date().toLocaleString();\r\n case 'number':\r\n return '123';\r\n case 'currency':\r\n return '$1,234.56';\r\n case 'email':\r\n return 'example@domain.com';\r\n case 'phone':\r\n return '+1 (555) 123-4567';\r\n case 'url':\r\n return 'https://example.com';\r\n default:\r\n return placeholder.label || placeholder.value;\r\n }\r\n };\r\n\r\n const generateContent = useCallback((attrs?: Record<any, any>): string => {\r\n const { src, alt, styles: eStyles, text, placeholder, placeholders: tPlaceholders } = attrs || section?.attributes || selectedContentAttrObj || {}\r\n const styles = {\r\n ...initialStyles[sectionType],\r\n ...eStyles,\r\n ...selectedContentAttrObj?.styles,\r\n ...attrs?.styles\r\n }\r\n\r\n const inlineStyles = generateInlineStyles(styles);\r\n \r\n // For buttons, images, dividers, and codes - use the existing logic\r\n if (sectionType === 'buttons') {\r\n return `<button style=\"${inlineStyles}\">${text || 'Button Text'}</button>`;\r\n } else if (sectionType === 'image') {\r\n let imgInlineStyles: string = inlineStyles;\r\n if(styles?.is_bordered) {\r\n styles.padding = '10px';\r\n imgInlineStyles = generateInlineStyles(styles);\r\n } else{\r\n styles.padding = '0';\r\n imgInlineStyles = generateInlineStyles(styles);\r\n }\r\n return `<img src=\"${src || ''}\" alt=\"${alt || ''}\" style=\"${imgInlineStyles}\" />`;\r\n } else if (sectionType === 'divider') {\r\n return `<hr style=\"${inlineStyles}\" />`;\r\n } else if (sectionType === 'table') {\r\n const { border, borderStyle, borderColor, ...rest } = styles;\r\n const tInlineStyles = generateInlineStyles(styles.is_bordered ? styles : rest); \r\n const tHeadInlineStyles: string = generateInlineStyles(styles.tHead || {});\r\n const tBodyInlineStyles: string = generateInlineStyles(styles.tBody || {});\r\n const thCellInlineStyles: string = generateInlineStyles({\r\n ...(styles.thCells || {}), \r\n ...(styles.is_bordered ? { border, borderStyle, borderColor } : {}) \r\n });\r\n const tbCellInlineStyles: string = generateInlineStyles({\r\n ...(styles.tbCells || {}), \r\n ...(styles.is_bordered ? { border, borderStyle, borderColor } : {})\r\n });\r\n\r\n // Helper function to check if a cell is part of a merge\r\n const getCellMergeInfo = (section: 'thead' | 'tbody', rowIndex: number, colIndex: number) => {\r\n return tableData.mergedCells?.find(m => \r\n m.section === section &&\r\n rowIndex >= m.rowStart && rowIndex <= m.rowEnd &&\r\n colIndex >= m.colStart && colIndex <= m.colEnd\r\n );\r\n };\r\n\r\n // Generate header row with merge support\r\n const headerCellsHTML = tableData.columns.map((column, colIndex) => {\r\n const mergeInfo = getCellMergeInfo('thead', 0, colIndex);\r\n \r\n if (mergeInfo && (colIndex !== mergeInfo.colStart)) {\r\n return '';\r\n }\r\n\r\n const mergeAttributes = mergeInfo ? \r\n ` rowspan=\"${mergeInfo.rowEnd - mergeInfo.rowStart + 1}\" colspan=\"${mergeInfo.colEnd - mergeInfo.colStart + 1}\"` : '';\r\n \r\n const cellValue = mergeInfo ? mergeInfo.value : column.header;\r\n\r\n return `<th style=\"${thCellInlineStyles}\"${mergeAttributes}>${cellValue}</th>`;\r\n }).filter(cell => cell !== '').join('');\r\n\r\n // Generate table body with #each loop using tableData.name\r\n let tableRowsHTML = '';\r\n \r\n // Check if we should use #each loop with tableData.name\r\n if (tableData.name) {\r\n // Generate template with #each handlebars syntax\r\n const rowTemplate = tableData.columns.map((column, colIndex) => {\r\n const mergeInfo = getCellMergeInfo('tbody', 0, colIndex); // Use first row as template\r\n \r\n if (mergeInfo && (colIndex !== mergeInfo.colStart)) {\r\n return '';\r\n }\r\n\r\n const mergeAttributes = mergeInfo ? \r\n ` rowspan=\"${mergeInfo.rowEnd - mergeInfo.rowStart + 1}\" colspan=\"${mergeInfo.colEnd - mergeInfo.colStart + 1}\"` : '';\r\n \r\n // Use handlebars template syntax for dynamic content\r\n let cellTemplate = '';\r\n \r\n // Handle special cases\r\n if (column.id === 'index' || column.id === 'incrementIndex') {\r\n cellTemplate = `{{incrementIndex @index}}`;\r\n } else if (column.id.includes('.')) {\r\n // Handle nested properties (like items.sku, tax_code_data.[0].rate)\r\n const cellValue = tableData?.rows?.[0][column.id];\r\n cellTemplate = typeof cellValue === 'string' ? cellValue.replace(tableData.name + '.', '') : String(cellValue || '');\r\n } else {\r\n // Direct property access\r\n const cellValue = tableData?.rows?.[0][column.id];\r\n cellTemplate = typeof cellValue === 'string' ? cellValue.replace(tableData.name + '.', '') : String(cellValue || '');\r\n }\r\n\r\n return `<td style=\"${tbCellInlineStyles}\"${mergeAttributes}>${cellTemplate}</td>`;\r\n }).filter(cell => cell !== '').join('');\r\n\r\n // Add zebra striping logic if enabled\r\n const rowStyleTemplate = styles.tBody?.zebraStriping \r\n ? `{{#if (isOdd @index)}}${tBodyInlineStyles}; background-color: ${styles.tBody.alternateRowColor || '#f9f9f9'}{{else}}${tBodyInlineStyles}{{/if}}`\r\n : tBodyInlineStyles;\r\n\r\n tableRowsHTML = `{{#each ${tableData.name}}}\r\n <tr style=\"${rowStyleTemplate}\">\r\n ${rowTemplate}\r\n </tr>\r\n {{/each}}`;\r\n \r\n } else {\r\n // Fallback to static rows when no tableData.name is provided\r\n tableRowsHTML = tableData.rows.map((row, rowIndex) => {\r\n const rowStyleAddition = styles.tBody?.zebraStriping && rowIndex % 2 === 1 \r\n ? `; background-color: ${styles.tBody.alternateRowColor || '#f9f9f9'}` \r\n : '';\r\n \r\n const cellsHTML = tableData.columns.map((column, colIndex) => {\r\n const mergeInfo = getCellMergeInfo('tbody', rowIndex, colIndex);\r\n \r\n if (mergeInfo && (rowIndex !== mergeInfo.rowStart || colIndex !== mergeInfo.colStart)) {\r\n return '';\r\n }\r\n\r\n let cellValue = row[column.id] || '';\r\n const keys = Object.keys(row)\r\n if(keys.includes(`${column.id}_static`)) {\r\n cellValue = row[`${column.id}_static`] || '';\r\n }\r\n if (!cellValue && tPlaceholders?.[column.id]) {\r\n cellValue = getPlaceholderValue(tPlaceholders[column.id]);\r\n }\r\n\r\n const mergeAttributes = mergeInfo ? \r\n ` rowspan=\"${mergeInfo.rowEnd - mergeInfo.rowStart + 1}\" colspan=\"${mergeInfo.colEnd - mergeInfo.colStart + 1}\"` : '';\r\n \r\n const finalCellValue = mergeInfo ? mergeInfo.value : cellValue;\r\n\r\n return `<td style=\"${tbCellInlineStyles}\"${mergeAttributes}>${finalCellValue}</td>`;\r\n }).filter(cell => cell !== '').join('');\r\n \r\n return `<tr style=\"${tBodyInlineStyles}${rowStyleAddition}\">${cellsHTML}</tr>`;\r\n }).join('');\r\n }\r\n \r\n return `\r\n <table style=\"${tInlineStyles}\">\r\n <thead>\r\n <tr style=\"${tHeadInlineStyles}\">\r\n ${headerCellsHTML}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n ${tableRowsHTML}\r\n </tbody>\r\n </table>\r\n `;\r\n } else if (sectionType === 'qr-code' || sectionType === 'bar-code') {\r\n return `<div style=\"${inlineStyles}\">${placeholder}</div>`;\r\n }\r\n \r\n // For text-based sections, parse and apply styles to existing HTML tags\r\n const hasHtmlTags = /<\\/?[a-z][\\s\\S]*>/i.test(content);\r\n \r\n if (!hasHtmlTags) {\r\n // If no HTML tags, wrap according to section type\r\n switch (sectionType) {\r\n case 'text':\r\n case 'text-block':\r\n return `<p style=\"${inlineStyles}\">${content}</p>`;\r\n case 'heading':\r\n return `<h1 style=\"${inlineStyles}\">${content}</h1>`;\r\n case 'heading-2':\r\n return `<h2 style=\"${inlineStyles}\">${content}</h2>`;\r\n case 'heading-3':\r\n return `<h3 style=\"${inlineStyles}\">${content}</h3>`;\r\n case 'heading-4':\r\n return `<h4 style=\"${inlineStyles}\">${content}</h4>`;\r\n case 'signature':\r\n return `<div style=\"${inlineStyles}\">${content}</div>`;\r\n default:\r\n return `<p style=\"${inlineStyles}\">${content}</p>`;\r\n }\r\n } else {\r\n // Create a temporary DOM element to manipulate the HTML\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(`<div>${content}</div>`, 'text/html');\r\n const container = doc.body.firstChild as Element;\r\n \r\n // Process all child elements\r\n if (container && container.nodeType === Node.ELEMENT_NODE) {\r\n const elements = container.querySelectorAll('*');\r\n\r\n elements.forEach(element => {\r\n // Skip processing script tags or other special elements\r\n if (element.tagName === 'SCRIPT' || element.tagName === 'STYLE') {\r\n return;\r\n }\r\n \r\n // Get existing style and merge with new style\r\n const existingStyle = element.getAttribute('style') || '';\r\n \r\n // Extract properties from existing style\r\n const existingProps = {};\r\n existingStyle.split(';').forEach(prop => {\r\n const [key, value] = prop.split(':').map(item => item.trim());\r\n if (key && value) {\r\n existingProps[key] = value;\r\n }\r\n });\r\n \r\n // Parse the base style and prepare for merging\r\n const newStyleProps = {};\r\n inlineStyles.split(';').forEach(prop => {\r\n const [key, value] = prop.split(':').map(item => item.trim());\r\n if (key && value) {\r\n newStyleProps[key] = value;\r\n }\r\n });\r\n \r\n // Additional styles based on tag type\r\n if (element.tagName === 'P' || element.tagName === 'DIV') {\r\n newStyleProps['line-height'] = '1.5';\r\n } else if (['H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(element.tagName)) {\r\n newStyleProps['line-height'] = '1.2';\r\n newStyleProps['margin'] = '0.5em 0';\r\n }\r\n \r\n // Merge styles, new styles override existing ones\r\n const mergedProps = { ...existingProps, ...newStyleProps };\r\n \r\n // Convert back to style string\r\n const mergedStyle = Object.entries(mergedProps)\r\n .filter(([key, value]) => key && value)\r\n .map(([key, value]) => `${key}: ${value}`)\r\n .join('; ');\r\n \r\n element.setAttribute('style', mergedStyle);\r\n });\r\n \r\n return container.innerHTML;\r\n }\r\n \r\n // Fallback to original content if parsing fails\r\n return content;\r\n }\r\n }, [JSON.stringify(section)]);\r\n\r\n // Local save function - renamed to avoid conflict with handleSave prop\r\n const saveSection = () => {\r\n const updatedContent = generateContent();\r\n \r\n const updatedSection = {\r\n content: updatedContent, \r\n type: sectionType as ElementType,\r\n rowLevel: rowLevel,\r\n name: tableData.name || '',\r\n attributes: {\r\n ...(section?.attributes || {}),\r\n ...(sectionType === 'table' ? { tableData } : {})\r\n },\r\n is_edited_from_source: (section as EnhancedSectionData)?.is_edited_from_source || false\r\n };\r\n \r\n onUpdate(updatedSection);\r\n };\r\nuseEffect(() => {\r\n saveSection();\r\n},[tableData])\r\n /**\r\n * Updates section attributes and triggers content regeneration.\r\n * Optimized to avoid unnecessary property spreading and glitches.\r\n */\r\n const updateAttrs = (prop: Record<string, any>) => {\r\n if (!section) return;\r\n\r\n // Merge styles safely\r\n const mergedStyles = {\r\n ...(section.attributes?.styles || {}),\r\n ...(prop.styles || {})\r\n };\r\n\r\n // Merge attributes, giving priority to new props\r\n const mergedAttributes = {\r\n ...(section.attributes || {}),\r\n ...prop,\r\n styles: mergedStyles,\r\n ...(sectionType === 'table' ? { tableData } : {})\r\n };\r\n\r\n // Prepare updated section object (exclude 'id' if present)\r\n const { id, ...sectionRest } = section as any;\r\n\r\n // Generate updated content based on new attributes\r\n const updatedContent = generateContent(mergedAttributes);\r\n setSelectedContentAttrObj(mergedAttributes)\r\n\r\n // Compose the update payload, omitting unknown properties\r\n onUpdate({\r\n ...sectionRest,\r\n content: updatedContent,\r\n attributes: mergedAttributes\r\n });\r\n };\r\n\r\n // Update table data and trigger content regeneration\r\n const handleTableDataUpdate = (newTableData: TableData) => {\r\n setTableData(newTableData);\r\n \r\n // Trigger immediate update with new table data\r\n const updatedAttrs = {\r\n ...(section?.attributes || {}),\r\n tableData: newTableData\r\n };\r\n \r\n // const updatedContent = generateContent(updatedAttrs);\r\n // onUpdate({\r\n // ...section,\r\n // content: updatedContent,\r\n // attributes: updatedAttrs\r\n // });\r\n saveSection();\r\n };\r\n\r\n const handleTypeChange = (t) => {\r\n const dt = getInitialSectionData(t)\r\n \r\n onUpdate({ \r\n ...section, \r\n ...dt\r\n });\r\n \r\n // Reset table data when switching types\r\n if (t === 'table') {\r\n setTableData({\r\n name: '', // Initialize with empty name\r\n columns: [\r\n { id: 'col1', header: 'Column 1' },\r\n { id: 'col2', header: 'Column 2' },\r\n { id: 'col3', header: 'Column 3' }\r\n ],\r\n rows: [\r\n { col1: '', col2: '', col3: '' }\r\n ],\r\n border: true,\r\n mergedCells: []\r\n });\r\n }\r\n }\r\n\r\n return (\r\n <Paper\r\n elevation={3}\r\n sx={{\r\n width: { xs: '100%', sm: 320, lg: 390 },\r\n height: '100%',\r\n overflow: 'auto',\r\n borderLeft: '1px solid',\r\n borderColor: 'divider',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n bgcolor: 'background.paper',\r\n boxShadow: 'none',\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n p: 2,\r\n borderBottom: '1px solid',\r\n borderColor: 'divider',\r\n bgcolor: 'grey.50',\r\n }}\r\n >\r\n <Typography type=\"s1\" weight='bold' color='theme.neutral.1000'>\r\n Format {sectionType ? sectionType?.charAt(0)?.toUpperCase() + sectionType?.slice(1).replace(/-/g, ' ') : ''}\r\n </Typography>\r\n <Tooltip title=\"Save and Close\">\r\n <Box>\r\n <IconButton size=\"small\" onClick={() => {\r\n saveSection();\r\n handleSave?.();\r\n onClose();\r\n }} aria-label=\"Save\">\r\n <Save fontSize=\"small\" />\r\n </IconButton>\r\n <IconButton size=\"small\" onClick={onClose} aria-label=\"Close\">\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n </Tooltip>\r\n </Box>\r\n\r\n <Box sx={{ p: 2, flex: 1,pb:10, overflowY: 'auto' }}>\r\n <Box sx={{ mb: 2 }}>\r\n <FormControl size=\"small\" fullWidth>\r\n <Select\r\n value={section?.type}\r\n onChange={(e) => handleTypeChange(e.target.value)}\r\n renderValue={v => v ? v.charAt(0).toUpperCase() + v.slice(1).replace(/-/g, ' ') : ''}\r\n label='Select Preset'\r\n displayEmpty\r\n >\r\n {sectionTypes.map((type) => (\r\n <MenuItem key={type} value={type}>\r\n <Typography type='s4' color='theme.secondary.1000'>{type.charAt(0).toUpperCase() + type.slice(1).replace(/-/g, ' ')}</Typography>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n \r\n {section && (sectionType === 'text' || \r\n sectionType === 'heading' || \r\n sectionType === 'heading-2' || \r\n sectionType === 'heading-3' || \r\n sectionType === 'heading-4') && (\r\n <TextControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n {sectionType === 'buttons' && (\r\n <ButtonControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n {sectionType === 'image' && (\r\n <ImageControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n {sectionType === 'divider' && (\r\n <DividerControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n {sectionType === 'table' && (\r\n <TableControls\r\n tableData={{\r\n ...tableData,\r\n rows: tableData.rows.map(row => {\r\n const convertedRow: Record<string, string> = {};\r\n Object.keys(row).forEach(key => {\r\n convertedRow[key] = String(row[key] ?? '');\r\n });\r\n return convertedRow;\r\n })\r\n }}\r\n setTableData={(value) => {\r\n handleTableDataUpdate({\r\n ...value,\r\n border: tableData.border,\r\n name: tableData.name || ''\r\n });\r\n }}\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n placeholders={placeholders}\r\n handleSave={handleSave}\r\n setParentRowLevel={setRowLevel}\r\n levelType={rowLevel}\r\n relation_table={relation_table}\r\n />\r\n )}\r\n {sectionType === 'signature' && (\r\n <SignatureControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n {section && (sectionType === 'qr-code' || sectionType === 'bar-code') && (\r\n <CodeControls\r\n attrs={section?.attributes || {}}\r\n updateAttrs={updateAttrs}\r\n />\r\n )}\r\n </Box>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default SectionFormatPanel;","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useCallback, useEffect } from 'react';\r\nimport { useDraggable } from '@dnd-kit/core';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport {\r\n Box,\r\n Divider,\r\n ListItem,\r\n ListItemIcon,\r\n ListItemText,\r\n Grid,\r\n Accordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n Typography,\r\n CircularProgress,\r\n Alert,\r\n} from '@mui/material';\r\nimport {\r\n Heading,\r\n Text as TextIcon,\r\n Image as ImageIcon,\r\n Table as TableIcon,\r\n Blocks as SignatureIcon,\r\n QrCode as QrCodeIcon,\r\n Barcode as BarcodeIcon,\r\n FileCode,\r\n} from 'lucide-react';\r\nimport { styled } from '@mui/material/styles';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport { getV1Drive, postV1Drive } from '../../../api-client/api.drive/api';\r\nimport SearchBar from '../../../components/search-bar/search-bar';\r\nimport { getToken, uploadFiles } from '../../../utils/common';\r\nimport { getApiConfig } from '@/utils';\r\nimport Button from '../../../components/button/button';\r\n\r\nconst StyledListItem = styled(ListItem)(({ theme }) => ({\r\n padding: theme.spacing(1.5),\r\n cursor: 'grab',\r\n borderRadius: theme.shape.borderRadius,\r\n '&:hover': {\r\n backgroundColor: theme.palette.grey[100],\r\n },\r\n '&.dragging': {\r\n opacity: 0.5,\r\n },\r\n}));\r\n\r\nconst DropzoneBox = styled(Box)(({ theme }) => ({\r\n border: `2px dashed ${theme.palette.grey[400]}`,\r\n borderRadius: theme.shape.borderRadius,\r\n padding: theme.spacing(2),\r\n textAlign: 'center',\r\n backgroundColor: theme.palette.grey[50],\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: theme.palette.grey[100],\r\n },\r\n}));\r\n\r\nconst SidebarItem = ({ id, icon, label, imageUrl }: { id: string; icon?: React.ReactElement; label: string; imageUrl?: string }) => {\r\n // Extract the element type from the sidebar item id\r\n const elementType = typeof id === 'string' ? id.replace('sidebar-', '') : id;\r\n\r\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\r\n id,\r\n data: {\r\n // Pass the correct type based on the id\r\n type: imageUrl ? 'image' : elementType,\r\n imageUrl,\r\n label,\r\n },\r\n });\r\n\r\n return (\r\n <StyledListItem\r\n ref={setNodeRef}\r\n {...listeners}\r\n {...attributes}\r\n className={isDragging ? 'dragging' : ''}\r\n sx={{ border: '1px solid', borderColor: 'grey.200', p: 0.75 }}\r\n >\r\n {imageUrl ? (\r\n <img\r\n src={imageUrl}\r\n alt={label}\r\n style={{ width: '100%', height: 140, objectFit: 'cover', marginRight: 8 }}\r\n />\r\n ) : (\r\n <>\r\n <ListItemIcon sx={{ minWidth: 40 }}>{icon}</ListItemIcon>\r\n <ListItemText primary={label} primaryTypographyProps={{ variant: 'body2' }} />\r\n </>\r\n )}\r\n </StyledListItem>\r\n );\r\n};\r\n\r\ninterface EditorSidebarProps {\r\n onHtmlUpload?: (html: string) => void;\r\n}\r\n\r\nconst EditorSidebar = ({ onHtmlUpload }: EditorSidebarProps) => {\r\n const [expanded, setExpanded] = useState('text');\r\n const [uploadedImages, setUploadedImages] = useState([]);\r\n const [uploading, setUploading] = useState(false);\r\n const [uploadingHtml, setUploadingHtml] = useState(false);\r\n const [error, setError] = useState(null);\r\n\r\n const handleChange = (panel) => (event, isExpanded) => {\r\n setExpanded(isExpanded ? panel : false);\r\n };\r\n\r\n const onDrop = useCallback(async (acceptedFiles) => {\r\n setUploading(true);\r\n setError(null);\r\n try {\r\n for (const file of acceptedFiles) {\r\n const uFiles = await uploadFiles([file], \"document\");\r\n const token = getToken();\r\n const payload = {\r\n ...token,\r\n \"x-timezone\": String(token[\"x-timezone\"] || \"\"),\r\n \"title\": file?.name.split(\".\")[0],\r\n \"path\": \"/\",\r\n \"is_private\": true,\r\n \"is_directory\": false,\r\n \"file_size\": file.size,\r\n \"is_child\": false,\r\n \"file_extension\": file?.name.split(\".\")[1],\r\n \"type\": \"image\",\r\n \"mime_type\": file.type,\r\n \"url\": `${getApiConfig().s3BucketUrl}${uFiles[0]}`\r\n }\r\n // Replace with your actual API endpoint\r\n await postV1Drive(payload);\r\n\r\n setUploadedImages((prev) => [\r\n ...prev,\r\n {\r\n id: `uploaded-image-${Date.now()}-${Math.random()}`,\r\n url: `${getApiConfig().s3BucketUrl}${uFiles[0]}`, // Assume API returns imageUrl\r\n name: file.name,\r\n },\r\n ]);\r\n }\r\n } catch (err) {\r\n setError('Failed to upload image. Please try again.');\r\n } finally {\r\n setUploading(false);\r\n }\r\n }, []);\r\n\r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDrop,\r\n accept: { 'image/*': ['.jpeg', '.png', '.jpg', '.gif'] },\r\n multiple: true,\r\n });\r\n\r\n const onHtmlDrop = useCallback(async (acceptedFiles) => {\r\n if (!onHtmlUpload) return;\r\n \r\n setUploadingHtml(true);\r\n setError(null);\r\n \r\n try {\r\n const file = acceptedFiles[0];\r\n if (!file) return;\r\n\r\n const reader = new FileReader();\r\n \r\n reader.onload = (e) => {\r\n const htmlContent = e.target?.result as string;\r\n if (htmlContent) {\r\n onHtmlUpload(htmlContent);\r\n setUploadingHtml(false);\r\n }\r\n };\r\n\r\n reader.onerror = () => {\r\n setError('Failed to read HTML file. Please try again.');\r\n setUploadingHtml(false);\r\n };\r\n\r\n reader.readAsText(file);\r\n } catch (err) {\r\n setError('Failed to process HTML file. Please try again.');\r\n setUploadingHtml(false);\r\n }\r\n }, [onHtmlUpload]);\r\n\r\n const { getRootProps: getHtmlRootProps, getInputProps: getHtmlInputProps, isDragActive: isHtmlDragActive } = useDropzone({\r\n onDrop: onHtmlDrop,\r\n accept: { 'text/html': ['.html', '.htm'] },\r\n multiple: false,\r\n maxFiles: 1,\r\n });\r\n\r\n const sections = [\r\n {\r\n id: 'html-upload',\r\n icon: <FileCode size={18} />,\r\n label: 'Upload HTML',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <DropzoneBox {...getHtmlRootProps()}>\r\n <input {...getHtmlInputProps()} />\r\n {isHtmlDragActive ? (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n Drop the HTML file here...\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n Drag and drop HTML file here, or click to select\r\n </Typography>\r\n )}\r\n {uploadingHtml && (\r\n <Box sx={{ mt: 1 }}>\r\n <CircularProgress size={20} />\r\n </Box>\r\n )}\r\n </DropzoneBox>\r\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mt: 1, display: 'block' }}>\r\n Upload an HTML file to replace current sections with the file content\r\n </Typography>\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'text',\r\n icon: <TextIcon size={18} />,\r\n label: 'Text',\r\n content: (\r\n <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 1 }}>\r\n <SidebarItem id=\"sidebar-heading\" icon={<Heading size={20} />} label=\"Heading 1\" />\r\n <SidebarItem id=\"sidebar-heading-2\" icon={<Heading size={18} />} label=\"Heading 2\" />\r\n <SidebarItem id=\"sidebar-heading-3\" icon={<Heading size={16} />} label=\"Heading 3\" />\r\n <SidebarItem id=\"sidebar-heading-4\" icon={<Heading size={14} />} label=\"Heading 4\" />\r\n <SidebarItem id=\"sidebar-text\" icon={<TextIcon size={20} />} label=\"Body\" />\r\n <SidebarItem id=\"sidebar-text-block\" icon={<TextIcon size={20} />} label=\"Text Block\" />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'images',\r\n icon: <ImageIcon size={18} />,\r\n label: 'Images',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <Box sx={{ mt: 2 }}>\r\n <DropzoneBox {...getRootProps()}>\r\n <input {...getInputProps()} />\r\n {isDragActive ? (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n Drop the images here...\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"body2\" color=\"text.secondary\">\r\n Drag and drop images here, or click to select\r\n </Typography>\r\n )}\r\n {uploading && (\r\n <Box sx={{ mt: 1 }}>\r\n <CircularProgress size={20} />\r\n </Box>\r\n )}\r\n </DropzoneBox>\r\n {error && (\r\n <Alert severity=\"error\" sx={{ mt: 2 }}>\r\n {error}\r\n </Alert>\r\n )}\r\n {uploadedImages.length > 0 && (\r\n <Box sx={{ mt: 2 }}>\r\n <Typography variant=\"body2\" sx={{ mb: 1, color: 'grey.500' }}>\r\n Uploaded Images\r\n </Typography>\r\n <Grid container spacing={1}>\r\n {uploadedImages.map((image) => (\r\n <Grid item xs={6} key={image.id}>\r\n <SidebarItem\r\n id={image.id}\r\n label={image.name}\r\n imageUrl={image.url}\r\n />\r\n </Grid>\r\n ))}\r\n </Grid>\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'buttons',\r\n icon: (\r\n <Box\r\n sx={{\r\n width: 16,\r\n height: 16,\r\n bgcolor: 'grey.400',\r\n borderRadius: 1,\r\n color: 'white',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '8px',\r\n }}\r\n >\r\n BTN\r\n </Box>\r\n ),\r\n label: 'Buttons',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem\r\n id=\"sidebar-buttons\"\r\n icon={\r\n <Box\r\n sx={{\r\n width: 20,\r\n height: 20,\r\n bgcolor: 'success.main',\r\n borderRadius: 1,\r\n color: 'white',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '10px',\r\n }}\r\n >\r\n BTN\r\n </Box>\r\n }\r\n label=\"Buttons\"\r\n />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'divider',\r\n icon: <Divider sx={{ width: 18 }} />,\r\n label: 'Divider',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem id=\"sidebar-divider\" icon={<Divider sx={{ width: 20 }} />} label=\"Divider\" />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'table',\r\n icon: <TableIcon size={18} />,\r\n label: 'Table',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem id=\"sidebar-table\" icon={<TableIcon size={20} />} label=\"Table\" />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'signature',\r\n icon: <SignatureIcon size={18} />,\r\n label: 'Signature',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem id=\"sidebar-signature\" icon={<SignatureIcon size={20} />} label=\"Signature\" />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'qr-code',\r\n icon: <QrCodeIcon size={18} />,\r\n label: 'QR Code',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem id=\"sidebar-qr-code\" icon={<QrCodeIcon size={20} />} label=\"QR Code\" />\r\n </Box>\r\n ),\r\n },\r\n {\r\n id: 'bar-code',\r\n icon: <BarcodeIcon size={18} />,\r\n label: 'Bar Code',\r\n content: (\r\n <Box sx={{ mt: 2 }}>\r\n <SidebarItem id=\"sidebar-bar-code\" icon={<BarcodeIcon size={20} />} label=\"Bar Code\" />\r\n </Box>\r\n ),\r\n },\r\n ];\r\n\r\n const getDriveFiles = async () => {\r\n try {\r\n const token = getToken();\r\n const response = await getV1Drive({\r\n ...token,\r\n \"x-timezone\": String(token[\"x-timezone\"] || \"\"),\r\n skip: 0,\r\n limit: 10,\r\n filters: `(is_directory.eq=0)`\r\n });\r\n // Check if response is successful and has data\r\n if ('data' in response && response.data && typeof response.data === 'object' && 'drive' in response.data) {\r\n const files = (response.data as any).drive || [];\r\n setUploadedImages(files);\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n getDriveFiles()\r\n }, [])\r\n\r\n return (\r\n <Box\r\n sx={{\r\n bgcolor: 'background.paper',\r\n borderRight: 1,\r\n borderColor: 'grey.200',\r\n width: 390,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: 'calc(100vh - 104px)',\r\n boxShadow: '0 2px 8px rgba(0,0,0,0.05)',\r\n fontFamily: 'Inter, system-ui, Avenir, Helvetica, Arial, sans-serif',\r\n }}\r\n >\r\n <Box sx={{ p: 2, borderBottom: 1, borderColor: 'grey.200' }}>\r\n <SearchBar\r\n handleSearch={(key) => console.log('Search:', key)}\r\n sx={{ backgroundColor: \"#fff !important\", border: \"1px solid grey\" }}\r\n />\r\n </Box>\r\n <Box sx={{ flexGrow: 1, overflowY: 'auto', p: 1 }}>\r\n {sections.map((section) => (\r\n <Accordion\r\n key={section.id}\r\n expanded={expanded === section.id}\r\n onChange={handleChange(section.id)}\r\n sx={{\r\n border: 'none',\r\n boxShadow: 'none',\r\n backgroundColor: 'transparent',\r\n '&:before': { display: 'none' },\r\n marginBottom: 1,\r\n }}\r\n >\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon sx={{ color: 'grey.600' }} />}\r\n sx={{\r\n borderRadius: '8px',\r\n padding: '0 12px',\r\n backgroundColor: expanded === section.id ? 'grey.200' : 'grey.50',\r\n '&:hover': {\r\n backgroundColor: 'grey.50',\r\n },\r\n transition: 'background-color 0.2s ease',\r\n minHeight: 42,\r\n '& .MuiAccordionSummary-content': {\r\n alignItems: 'center',\r\n margin: '8px 0',\r\n },\r\n '&.Mui-expanded': {\r\n minHeight: 42,\r\n },\r\n }}\r\n >\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n {section.icon}\r\n <Typography\r\n variant=\"body2\"\r\n sx={{ fontWeight: 500, color: 'text.primary' }}\r\n >\r\n {section.label}\r\n </Typography>\r\n </Box>\r\n </AccordionSummary>\r\n <AccordionDetails sx={{ padding: '8px 16px' }}>\r\n {section.content}\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport { EditorSidebar };\r\nexport default EditorSidebar;","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\n}), 'Check');","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';\r\nimport { useDroppable } from '@dnd-kit/core';\r\nimport EditorSection from './EditorSection';\r\nimport { Box, Container, Paper, Tooltip } from '@mui/material';\r\nimport Typography from '../../../components/typography/typography';\r\nimport SectionFormatPanel from './SectionFormatPanel';\r\nimport EditorSidebar from './EditorSidebar';\r\nimport { generateEmailPreview, generateHeaderFooterPreview } from '../utils/common';\r\nimport { EnhancedSectionData } from '../types/editor';\r\nimport Button from '../../../components/button/button';\r\nimport CheckIcon from '@mui/icons-material/Check';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\n\r\nconst CANVAS_TYPES = {\r\n HEADER: 'header',\r\n MAIN: 'main',\r\n FOOTER: 'footer'\r\n};\r\n\r\ninterface DropPosition {\r\n id: string | null;\r\n type: 'before' | 'after' | 'inside' | 'left' | 'right';\r\n canvasType: string;\r\n}\r\n\r\ninterface EditorCanvasProps {\r\n sections: EnhancedSectionData[];\r\n headerSections: EnhancedSectionData[];\r\n footerSections: EnhancedSectionData[];\r\n activeId: string | null;\r\n overSection: string | null;\r\n selectedSection: string | null;\r\n onSelectSection: (id: string | null) => void;\r\n onUpdateSection: (id: string, data: any, canvasType?: string) => void;\r\n onSplitSection: (id: string, content1: string, content2: string, canvasType?: string) => void;\r\n onDeleteSection: (id: string, canvasType?: string) => void;\r\n preview: boolean;\r\n editHtml: boolean;\r\n onApplyHtmlEdit: (html: string) => void;\r\n onCancelHtmlEdit: () => void;\r\n editMode: boolean;\r\n isFromPreview: boolean;\r\n zoom?: number;\r\n placeholders: Record<string, any>[];\r\n isEditingHeaderFooter: boolean;\r\n relation_table: any[];\r\n handleSave?: () => Promise<void>;\r\n}\r\n\r\nconst EditorCanvas: React.FC<EditorCanvasProps> = ({\r\n sections,\r\n headerSections,\r\n footerSections,\r\n activeId,\r\n selectedSection,\r\n onSelectSection,\r\n onUpdateSection,\r\n onSplitSection,\r\n onDeleteSection,\r\n preview,\r\n editHtml,\r\n onApplyHtmlEdit,\r\n onCancelHtmlEdit,\r\n editMode,\r\n isFromPreview,\r\n placeholders,\r\n isEditingHeaderFooter,\r\n handleSave,\r\n relation_table,\r\n zoom = 100\r\n}) => {\r\n // Convert placeholders to the expected format\r\n const formattedPlaceholders = useMemo(() => {\r\n return placeholders.map((p: Record<string, any>) => ({\r\n value: p.value || p.key || '',\r\n label: p.label || p.name || String(p.value || p.key || '')\r\n }));\r\n }, [placeholders]);\r\n\r\n const { setNodeRef: setMainCanvasRef } = useDroppable({ id: 'main-canvas' });\r\n const { setNodeRef: setHeaderCanvasRef } = useDroppable({ id: 'header-canvas' });\r\n const { setNodeRef: setFooterCanvasRef } = useDroppable({ id: 'footer-canvas' });\r\n\r\n const selectedSectionData = useMemo(() => {\r\n return [...sections, ...headerSections, ...footerSections].find((section) => section.id === selectedSection);\r\n }, [sections, selectedSection]);\r\n\r\n const [dropTarget, setDropTarget] = useState<DropPosition>({\r\n id: null,\r\n type: 'inside',\r\n canvasType: CANVAS_TYPES.MAIN\r\n });\r\n const [isDraggingFromSidebar, setIsDraggingFromSidebar] = useState(false);\r\n const [isSectionEditing, setIsSectionEditing] = useState(false);\r\n const [htmlEditValue, setHtmlEditValue] = useState('');\r\n\r\n // Sync textarea content when entering HTML edit mode\r\n useEffect(() => {\r\n if (editHtml) {\r\n setHtmlEditValue(generateEmailPreview(sections, headerSections, footerSections));\r\n }\r\n }, [editHtml]);\r\n\r\n const lastUpdateTimeRef = useRef(0);\r\n const lastPositionRef = useRef({ x: 0, y: 0 });\r\n const activeIdRef = useRef<string | null>(null);\r\n const mainCanvasRef = useRef<HTMLDivElement | null>(null);\r\n const headerCanvasRef = useRef<HTMLDivElement | null>(null);\r\n const footerCanvasRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const DEBOUNCE_MS = 50;\r\n const MIN_MOUSE_MOVE = 5;\r\n const POSITION_HYSTERESIS = 0.1;\r\n\r\n const getTargetSections = (canvasType: string) => {\r\n switch (canvasType) {\r\n case CANVAS_TYPES.HEADER:\r\n return headerSections;\r\n case CANVAS_TYPES.FOOTER:\r\n return footerSections;\r\n default:\r\n return sections;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n activeIdRef.current = activeId;\r\n\r\n if (activeId && String(activeId).includes('sidebar-')) {\r\n setIsDraggingFromSidebar(true);\r\n\r\n if (sections?.length > 0) {\r\n updateDropTarget(sections[0].id, 'before', CANVAS_TYPES.MAIN);\r\n } else if (headerSections?.length > 0 && isEditingHeaderFooter) {\r\n updateDropTarget(headerSections[0].id, 'before', CANVAS_TYPES.HEADER);\r\n } else if (footerSections?.length > 0 && isEditingHeaderFooter) {\r\n updateDropTarget(footerSections[0].id, 'before', CANVAS_TYPES.FOOTER);\r\n } else {\r\n updateDropTarget(null, 'inside', CANVAS_TYPES.MAIN);\r\n }\r\n } else if (!activeId) {\r\n setIsDraggingFromSidebar(false);\r\n setDropTarget({ id: null, type: 'inside', canvasType: CANVAS_TYPES.MAIN });\r\n }\r\n }, [activeId, sections, headerSections, footerSections, isEditingHeaderFooter]);\r\n\r\n const updateDropTarget = useCallback((id: string | null, type: DropPosition['type'], canvasType: string) => {\r\n const now = Date.now();\r\n if (now - lastUpdateTimeRef.current < DEBOUNCE_MS) return;\r\n\r\n // Prevent state updates if position hasn't actually changed\r\n setDropTarget(prev => {\r\n if (prev.id === id && prev.type === type && prev.canvasType === canvasType) {\r\n return prev; // Return same reference to prevent re-render\r\n }\r\n lastUpdateTimeRef.current = now;\r\n return { id, type, canvasType };\r\n });\r\n }, []);\r\n\r\n const handleMouseMove = useCallback((e: React.MouseEvent, canvasType: string) => {\r\n if (!activeIdRef.current) return;\r\n if (canvasType !== CANVAS_TYPES.MAIN && !isEditingHeaderFooter) return;\r\n\r\n const dx = e.clientX - lastPositionRef.current.x;\r\n const dy = e.clientY - lastPositionRef.current.y;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n if (distance < MIN_MOUSE_MOVE) return;\r\n\r\n lastPositionRef.current = { x: e.clientX, y: e.clientY };\r\n\r\n const elementsUnderCursor = document.elementsFromPoint(e.clientX, e.clientY);\r\n const sectionElement = elementsUnderCursor.find(el =>\r\n el.hasAttribute('data-section-id')\r\n );\r\n\r\n const targetSections = getTargetSections(canvasType);\r\n\r\n if (!sectionElement) {\r\n if (targetSections.length === 0) {\r\n updateDropTarget(null, 'inside', canvasType);\r\n } else if (isDraggingFromSidebar) {\r\n updateDropTarget(targetSections[targetSections.length - 1].id, 'after', canvasType);\r\n }\r\n return;\r\n }\r\n\r\n const sectionId = sectionElement.getAttribute('data-section-id');\r\n if (!sectionId) return;\r\n\r\n const sectionCanvasType = sectionElement.hasAttribute('data-canvas-type')\r\n ? sectionElement.getAttribute('data-canvas-type') as string\r\n : canvasType;\r\n\r\n const rect = sectionElement.getBoundingClientRect();\r\n const relativeY = e.clientY - rect.top;\r\n const relativeX = e.clientX - rect.left;\r\n const sectionHeight = rect.height;\r\n const sectionWidth = rect.width;\r\n\r\n const canvasSections = getTargetSections(sectionCanvasType);\r\n const section = canvasSections.find(s => s.id === sectionId);\r\n\r\n const isSplitGroup = sectionId.startsWith('split-group-');\r\n\r\n if (isSplitGroup || (section && section.isSplitPair)) {\r\n if (relativeX < sectionWidth * (0.5 - POSITION_HYSTERESIS)) {\r\n updateDropTarget(sectionId, 'left', sectionCanvasType);\r\n } else if (relativeX > sectionWidth * (0.5 + POSITION_HYSTERESIS)) {\r\n updateDropTarget(sectionId, 'right', sectionCanvasType);\r\n } else {\r\n updateDropTarget(sectionId, 'inside', sectionCanvasType);\r\n }\r\n } else {\r\n let position: DropPosition['type'] = 'inside';\r\n if (relativeY < sectionHeight * (0.3 - POSITION_HYSTERESIS)) {\r\n position = 'before';\r\n } else if (relativeY > sectionHeight * (0.7 + POSITION_HYSTERESIS)) {\r\n position = 'after';\r\n } else {\r\n position = 'inside';\r\n }\r\n updateDropTarget(sectionId, position, sectionCanvasType);\r\n }\r\n }, [isEditingHeaderFooter, isDraggingFromSidebar, updateDropTarget]);\r\n\r\n const handleMouseEnter = useCallback((e: React.MouseEvent, canvasType: string) => {\r\n if (!activeIdRef.current || !isDraggingFromSidebar) return;\r\n if (canvasType !== CANVAS_TYPES.MAIN && !isEditingHeaderFooter) return;\r\n\r\n const targetSections = getTargetSections(canvasType);\r\n\r\n if (targetSections.length > 0) {\r\n updateDropTarget(targetSections[0].id, 'before', canvasType);\r\n } else {\r\n updateDropTarget(null, 'inside', canvasType);\r\n }\r\n\r\n lastPositionRef.current = { x: e.clientX, y: e.clientY };\r\n }, [isDraggingFromSidebar, isEditingHeaderFooter, updateDropTarget]);\r\n\r\n const renderSectionsForCanvas = useCallback((canvasSections: EnhancedSectionData[], canvasType: string) => {\r\n const result: React.ReactNode[] = [];\r\n const processedGroups = new Set<string>();\r\n let i = 0;\r\n\r\n const renderDropIndicator = (key: string, isHorizontal = false) => (\r\n <Box\r\n key={key}\r\n sx={{\r\n [isHorizontal ? 'width' : 'height']: '50px',\r\n border: '2px dashed',\r\n borderColor: 'primary.main',\r\n borderRadius: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n bgcolor: 'rgba(25, 118, 210, 0.04)',\r\n [isHorizontal ? 'mx' : 'mb']: 2,\r\n opacity: 0,\r\n animation: 'fadeIn 0.3s ease-in-out forwards',\r\n '@keyframes fadeIn': {\r\n '0%': { opacity: 0, transform: isHorizontal ? 'translateX(-10px)' : 'translateY(-10px)' },\r\n '100%': { opacity: 1, transform: 'translate(0)' },\r\n },\r\n }}\r\n >\r\n <Typography type='s2' color='primary' weight='medium'>\r\n Drop here\r\n </Typography>\r\n </Box>\r\n );\r\n\r\n if (isDraggingFromSidebar &&\r\n canvasSections?.length > 0 &&\r\n dropTarget.type === 'before' &&\r\n dropTarget.id === canvasSections[0].id &&\r\n dropTarget.canvasType === canvasType) {\r\n result.push(renderDropIndicator(`drop-before-first-${canvasType}`));\r\n }\r\n\r\n while (i < canvasSections?.length) {\r\n const section = canvasSections[i];\r\n const sectionId = section.id;\r\n\r\n if (dropTarget.id === sectionId &&\r\n dropTarget.type === 'before' &&\r\n dropTarget.canvasType === canvasType &&\r\n !(isDraggingFromSidebar && i === 0)) {\r\n result.push(renderDropIndicator(`drop-before-${sectionId}-${canvasType}`));\r\n }\r\n\r\n if (!section.isSplitPair) {\r\n result.push(\r\n <Box\r\n key={section.id}\r\n data-section-id={section.id}\r\n data-canvas-type={canvasType}\r\n >\r\n <EditorSection\r\n section={section}\r\n isSelected={selectedSection === section.id}\r\n isDragging={activeId === section.id}\r\n isOver={dropTarget.id === section.id && dropTarget.type === 'inside' && dropTarget.canvasType === canvasType}\r\n onSelect={() => onSelectSection(section.id)}\r\n onUpdate={(content, extra) => {\r\n onUpdateSection(section.id, { content, ...extra }, canvasType);\r\n onSelectSection(null);\r\n }}\r\n onSplit={(content1, content2) => onSplitSection(section.id, content1, content2, canvasType)}\r\n onDelete={() => onDeleteSection(section.id, canvasType)}\r\n placeholders={formattedPlaceholders}\r\n setIsSectionEditing={setIsSectionEditing}\r\n />\r\n </Box>\r\n );\r\n i++;\r\n } else {\r\n const splitGroupId = section.splitGroupId;\r\n if (splitGroupId && processedGroups.has(splitGroupId)) {\r\n i++;\r\n continue;\r\n }\r\n\r\n const splitSections = canvasSections.filter(s => s.splitGroupId === splitGroupId);\r\n if (splitSections.length > 0) {\r\n if (splitGroupId) processedGroups.add(splitGroupId);\r\n\r\n // Split sections use stable keys based on section IDs and splitGroupId\r\n // This ensures React doesn't unnecessarily re-render or lose component state\r\n // when sections are reordered or updated\r\n const splitRow = (\r\n <Box\r\n key={`split-row-${splitGroupId}`}\r\n sx={{\r\n display: 'flex',\r\n gap: 2,\r\n mb: 2,\r\n bgcolor: 'rgba(0, 0, 0, 0.02)',\r\n p: 1,\r\n borderRadius: 1\r\n }}\r\n data-section-id={`split-group-${splitGroupId}`}\r\n data-canvas-type={canvasType}\r\n >\r\n {splitSections.map((splitSection, index) => (\r\n <React.Fragment key={splitSection.id}>\r\n {dropTarget.id === splitSection.id &&\r\n dropTarget.type === 'left' &&\r\n dropTarget.canvasType === canvasType && (\r\n renderDropIndicator(`drop-left-${splitSection.id}-${canvasType}`, true)\r\n )}\r\n <Box\r\n sx={{\r\n width: splitSection.splitWidth ? `${splitSection.splitWidth}%` : `${100 / splitSections.length}%`,\r\n transition: 'width 0.3s ease-in-out',\r\n }}\r\n data-section-id={splitSection.id}\r\n data-canvas-type={canvasType}\r\n >\r\n <EditorSection\r\n section={splitSection}\r\n isSelected={selectedSection === splitSection.id}\r\n isDragging={activeId === splitSection.id}\r\n isOver={dropTarget.id === splitSection.id && dropTarget.type === 'inside' && dropTarget.canvasType === canvasType}\r\n onSelect={() => onSelectSection(splitSection.id)}\r\n onUpdate={(content, extra) => {\r\n onUpdateSection(splitSection.id, { content, ...extra }, canvasType);\r\n onSelectSection(null);\r\n }}\r\n onSplit={(content1, content2) => onSplitSection(splitSection.id, content1, content2, canvasType)}\r\n onDelete={() => onDeleteSection(splitSection.id, canvasType)}\r\n placeholders={formattedPlaceholders}\r\n setIsSectionEditing={setIsSectionEditing}\r\n />\r\n </Box>\r\n {dropTarget.id === splitSection.id &&\r\n dropTarget.type === 'right' &&\r\n dropTarget.canvasType === canvasType && (\r\n renderDropIndicator(`drop-right-${splitSection.id}-${canvasType}`, true)\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </Box>\r\n );\r\n result.push(splitRow);\r\n i += splitSections.length;\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n if (dropTarget.id === sectionId &&\r\n dropTarget.type === 'after' &&\r\n dropTarget.canvasType === canvasType) {\r\n result.push(renderDropIndicator(`drop-after-${sectionId}-${canvasType}`));\r\n }\r\n }\r\n\r\n if ((canvasSections?.length === 0 && activeId && dropTarget.canvasType === canvasType) ||\r\n (canvasSections?.length === 0 && isDraggingFromSidebar && dropTarget.canvasType === canvasType)) {\r\n result.push(renderDropIndicator(`drop-empty-canvas-${canvasType}`));\r\n }\r\n\r\n return result;\r\n }, [\r\n isDraggingFromSidebar,\r\n dropTarget,\r\n activeId,\r\n selectedSection,\r\n onSelectSection,\r\n onUpdateSection,\r\n onSplitSection,\r\n onDeleteSection,\r\n formattedPlaceholders\r\n ]);\r\n\r\n const renderedMainSections = useMemo(() =>\r\n renderSectionsForCanvas(sections, CANVAS_TYPES.MAIN),\r\n [sections, dropTarget, activeId, isDraggingFromSidebar, selectedSection]\r\n );\r\n\r\n const renderedHeaderSections = useMemo(() =>\r\n renderSectionsForCanvas(headerSections, CANVAS_TYPES.HEADER),\r\n [headerSections, dropTarget, activeId, isDraggingFromSidebar, selectedSection, isEditingHeaderFooter]\r\n );\r\n\r\n const renderedFooterSections = useMemo(() =>\r\n renderSectionsForCanvas(footerSections, CANVAS_TYPES.FOOTER),\r\n [footerSections, dropTarget, activeId, isDraggingFromSidebar, selectedSection, isEditingHeaderFooter]\r\n );\r\n\r\n const renderPreview = () => {\r\n return (\r\n <Box\r\n sx={{\r\n transform: `scale(${zoom / 100})`,\r\n transformOrigin: 'top center',\r\n transition: 'transform 0.2s ease-in-out',\r\n bgcolor: 'white',\r\n p: 2,\r\n borderRadius: 1,\r\n boxShadow: 1,\r\n }}\r\n >\r\n <Box dangerouslySetInnerHTML={{ __html: generateEmailPreview(sections, headerSections, footerSections) }} />\r\n </Box>\r\n );\r\n };\r\n\r\n const renderHtmlEditor = () => (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n px: 2,\r\n py: 1,\r\n bgcolor: '#1e1e1e',\r\n borderBottom: '1px solid #333',\r\n borderRadius: '4px 4px 0 0',\r\n }}\r\n >\r\n <Typography type='s3' sx={{ color: '#ccc', fontFamily: 'monospace' }}>\r\n HTML Source Editor — changes will replace current sections\r\n </Typography>\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n <Button\r\n size='small'\r\n variant='contained'\r\n color='primary'\r\n startIcon={<CheckIcon fontSize='small' />}\r\n onClick={() => onApplyHtmlEdit(htmlEditValue)}\r\n sx={{ boxShadow: 'none' }}\r\n >\r\n Apply\r\n </Button>\r\n <Button\r\n size='small'\r\n variant='outlined'\r\n startIcon={<CloseIcon fontSize='small' />}\r\n onClick={() => onCancelHtmlEdit()}\r\n sx={(theme) => ({ color: `${theme.palette.theme.secondary[1000]} !important`, borderColor: '#555 !important' })}\r\n >\r\n Cancel\r\n </Button>\r\n </Box>\r\n </Box>\r\n <textarea\r\n value={htmlEditValue}\r\n onChange={(e) => setHtmlEditValue(e.target.value)}\r\n spellCheck={false}\r\n style={{\r\n flex: 1,\r\n width: '100%',\r\n minHeight: 'calc(100vh - 220px)',\r\n padding: '16px',\r\n fontFamily: '\"Fira Code\", \"Cascadia Code\", \"Consolas\", monospace',\r\n fontSize: '13px',\r\n lineHeight: '1.6',\r\n color: '#d4d4d4',\r\n backgroundColor: '#1e1e1e',\r\n border: 'none',\r\n outline: 'none',\r\n resize: 'none',\r\n boxSizing: 'border-box',\r\n borderRadius: '0 0 4px 4px',\r\n tabSize: 2,\r\n }}\r\n />\r\n </Box>\r\n );\r\n\r\n const renderCanvas = (\r\n title: string,\r\n canvasType: string,\r\n renderedSections: React.ReactNode[],\r\n setCanvasRef: (node: HTMLElement | null) => void,\r\n ref: React.MutableRefObject<HTMLDivElement | null>,\r\n visible: boolean = true\r\n ) => {\r\n if (!visible) return null;\r\n\r\n return (\r\n <Box sx={{ mb: 3 }}>\r\n {CANVAS_TYPES.MAIN === canvasType && visible && headerSections.length > 0 && (\r\n <>\r\n {/* <Accordion\r\n sx= {{\r\n boxShadow: 'none !important',\r\n \".MuiAccordionSummary-root\": {\r\n backgroundColor: '#fafafa !important',\r\n border: `0 !important`,\r\n p: 0,\r\n pb: 1,\r\n // mb: 1,\r\n m:0,\r\n minHeight: 'unset'\r\n }\r\n }}\r\n >\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n aria-controls=\"panel1-content\"\r\n id=\"panel1-header\"\r\n > */}\r\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'}>Header</Typography>\r\n {/* </AccordionSummary> */}\r\n <Paper sx={{ mb: 1, boxShadow: 'none', opacity: 0.5 }} dangerouslySetInnerHTML={{ __html: generateHeaderFooterPreview(headerSections) }} />\r\n {/* </Accordion> */}\r\n </>\r\n )}\r\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'} sx={{ mb: 1 }}>{title}</Typography>\r\n <Paper\r\n ref={(node) => {\r\n setCanvasRef(node);\r\n ref.current = node;\r\n }}\r\n elevation={0}\r\n sx={{\r\n p: 4,\r\n border: '1px dashed',\r\n borderColor: isDraggingFromSidebar && dropTarget.canvasType === canvasType\r\n ? 'primary.main'\r\n : 'primary.light',\r\n borderRadius: 1,\r\n bgcolor: 'background.paper',\r\n position: 'relative',\r\n minHeight: title === 'Header' || title === 'Footer' ? '100px' : '200px',\r\n transition: 'border-color 0.3s ease, background-color 0.3s ease',\r\n '&:hover': {\r\n bgcolor: isDraggingFromSidebar && dropTarget.canvasType === canvasType\r\n ? 'rgba(25, 118, 210, 0.04)'\r\n : 'background.paper',\r\n },\r\n pointerEvents: (canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter\r\n ? 'none'\r\n : 'auto',\r\n opacity: (canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter\r\n ? 0.5\r\n : 1,\r\n }}\r\n onClick={() => {\r\n if ((canvasType === CANVAS_TYPES.HEADER || canvasType === CANVAS_TYPES.FOOTER) && !isEditingHeaderFooter) return;\r\n onSelectSection(null);\r\n }}\r\n onMouseMove={(e) => handleMouseMove(e, canvasType)}\r\n onMouseEnter={(e) => handleMouseEnter(e, canvasType)}\r\n >\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\r\n {renderedSections}\r\n {getTargetSections(canvasType)?.length === 0 &&\r\n !activeId &&\r\n !isDraggingFromSidebar && (\r\n <Box sx={{ borderRadius: 1, p: 2, textAlign: 'center', color: 'text.secondary' }}>\r\n <Typography type='s2' color='theme.secondary.600' weight='medium'>\r\n Drag Sections from side panel to start building the {title.toLowerCase()}\r\n </Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n </Paper>\r\n {CANVAS_TYPES.MAIN === canvasType && visible && footerSections.length > 0 && (\r\n <>\r\n {/* <Accordion\r\n sx= {{\r\n boxShadow: 'none !important',\r\n \".MuiAccordionSummary-root\": {\r\n backgroundColor: '#fafafa !important',\r\n border: `0 !important`,\r\n p: 0,\r\n pb: 1,\r\n // mb: 1,\r\n m:0,\r\n minHeight: 'unset'\r\n }\r\n }}\r\n >\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n aria-controls=\"panel1-content\"\r\n id=\"panel1-header\"\r\n > */}\r\n <Typography type=\"h4\" weight='bold' color={'theme.secondary.800'} sx={{ mt: 1 }}>Footer</Typography>\r\n {/* </AccordionSummary> */}\r\n <Paper sx={{ mb: 1, boxShadow: 'none', opacity: 0.5 }} dangerouslySetInnerHTML={{ __html: generateHeaderFooterPreview(footerSections) }} />\r\n {/* </Accordion> */}\r\n </>\r\n )}\r\n </Box>\r\n );\r\n };\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\r\n <Box sx={{ flex: 1, overflow: 'auto', height: 'calc(100vh - 104px)' }}>\r\n <Container maxWidth={editHtml ? false : 'lg'} sx={{ py: editHtml ? 0 : 4, height: editHtml ? '100%' : undefined }}>\r\n {editHtml ? (\r\n renderHtmlEditor()\r\n ) : preview ? (\r\n renderPreview()\r\n ) : (\r\n <>\r\n {renderCanvas(\r\n 'Header',\r\n CANVAS_TYPES.HEADER,\r\n renderedHeaderSections,\r\n setHeaderCanvasRef,\r\n headerCanvasRef,\r\n isEditingHeaderFooter\r\n )}\r\n {renderCanvas(\r\n 'Content',\r\n CANVAS_TYPES.MAIN,\r\n renderedMainSections,\r\n setMainCanvasRef,\r\n mainCanvasRef,\r\n !isEditingHeaderFooter\r\n )}\r\n {renderCanvas(\r\n 'Footer',\r\n CANVAS_TYPES.FOOTER,\r\n renderedFooterSections,\r\n setFooterCanvasRef,\r\n footerCanvasRef,\r\n isEditingHeaderFooter\r\n )}\r\n </>\r\n )}\r\n </Container>\r\n </Box >\r\n {!editHtml && (\r\n <Box\r\n sx={{\r\n width: isFromPreview ? (editMode ? 400 : 0) : 400,\r\n flexShrink: 0,\r\n position: 'sticky',\r\n top: 0,\r\n alignSelf: 'flex-start',\r\n height: 'calc(100vh - 104px)',\r\n overflowY: 'auto',\r\n borderLeft: '1px solid',\r\n borderColor: 'divider',\r\n bgcolor: 'background.paper',\r\n zIndex: 1,\r\n }}\r\n >\r\n {(selectedSection && !selectedSectionData?.is_edited_from_source && !isSectionEditing) ? (\r\n <SectionFormatPanel\r\n section={selectedSectionData}\r\n onClose={() => onSelectSection(null)}\r\n onUpdate={(data) => {\r\n if (selectedSection) {\r\n const canvasType = headerSections.some(s => s.id === selectedSection)\r\n ? CANVAS_TYPES.HEADER\r\n : footerSections.some(s => s.id === selectedSection)\r\n ? CANVAS_TYPES.FOOTER\r\n : CANVAS_TYPES.MAIN;\r\n onUpdateSection(selectedSection, data, canvasType);\r\n }\r\n }}\r\n placeholders={placeholders}\r\n handleSave={handleSave}\r\n relation_table={relation_table}\r\n />\r\n ) : (\r\n isFromPreview ? (editMode && <EditorSidebar />) : <EditorSidebar />\r\n )}\r\n </Box>\r\n )}\r\n </Box >\r\n );\r\n};\r\n\r\nexport default EditorCanvas;","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nimport Modal from '../../../components/modal/modal';\r\nimport Typography from '../../../components/typography/typography';\r\nimport Button from '../../../components/button/button';\r\n\r\nimport {\r\n\tBox,\r\n\tCircularProgress,\r\n\tDialogActions,\r\n\tDialogContent,\r\n\tDialogProps,\r\n\tDialogTitle,\r\n\tIconButton,\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\n\r\nimport './template-name-modal.scss';\r\nimport { IEmail } from '../utils/types';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport DynamicInput from '../../../components/form-control/form-builder/form-builder-element/text';\r\nimport { useForm } from 'react-hook-form';\r\nimport { patchV1TemplatesId, postV1Templates } from '../../../api-client/api.system-feature/api';\r\nimport * as Yup from 'yup';\r\nimport { yupResolver } from '@hookform/resolvers/yup';\r\n\r\ninterface TemplateNameModalProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: (value: IEmail | null) => void;\r\n\tmodalProps?: DialogProps;\r\n\ttemplateRoutes: Record<string, any>;\r\n\tpayload: Record<string, any>;\r\n\tmode: 'add' | 'edit';\r\n\ttemplateData: Record<string, any> | null;\r\n\tonSaveSuccess?: () => void;\r\n\tonSaveError?: () => void;\r\n\tisSaving?: boolean;\r\n}\r\n\r\nconst generateValidationSchema = () => {\r\n\treturn yupResolver(\r\n\t\tYup.object().shape({\r\n\t\t\ttemplate_name: Yup.object().shape({\r\n\t\t\t\tname: Yup.string().trim().required('Template name is required'),\r\n\t\t\t})\r\n\t\t})\r\n\t)\r\n}\r\n\r\nconst TemplateNameModal: React.FC<TemplateNameModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tmodalProps,\r\n\ttemplateRoutes,\r\n\tpayload,\r\n\tmode = 'add',\r\n\ttemplateData,\r\n\tonSaveSuccess,\r\n\tonSaveError,\r\n\tisSaving: parentIsSaving = false,\r\n}) => {\r\n\tconsole.log(\"is saving...........\",parentIsSaving)\r\n\tconst { handleSubmit, control, setValue } = useForm({ mode: 'all', resolver: generateValidationSchema() });\r\n\tconst navigate = useNavigate();\r\n\tconst [isSubmitting, setIsSubmitting] = useState<boolean>(false);\r\n\tconsole.log(\"isSubmitting............\",isSubmitting)\r\n\r\n\tconst handleModalClose = () => {\r\n\t\tif (!isSubmitting && !parentIsSaving) {\r\n\t\t\tsetIsOpen(null);\r\n\t\t}\r\n\t};\r\n\r\n\tconst onSubmit = async (values: any) => {\r\n\t\tsetIsSubmitting(true);\r\n\t\ttry {\r\n\t\t\tconst { name = ''} = values?.template_name || {}\r\n\t\t\tpayload.name = name\r\n\t\t\tconst res = await (mode === 'edit' ? patchV1TemplatesId(payload) : postV1Templates(payload));\r\n\t\t\tif(res.status_code === 200) {\r\n\t\t\t\tenqueueSnackbar('Template saved successfully', { variant: 'success' });\r\n\t\t\t\tonSaveSuccess?.();\r\n\t\t\t\tnavigate(templateRoutes.LIST);\r\n\t\t\t}\r\n\t\t\tsetIsSubmitting(false);\r\n\t\t} catch (error) {\r\n\t\t\tconst m = error?.message || 'Something went wrong'\r\n\t\t\tsetIsSubmitting(false);\r\n\t\t\tenqueueSnackbar(m, { variant: 'error' });\r\n\t\t\tonSaveError?.();\r\n\t\t}\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tif(templateData && templateData?.name) {\r\n\t\t\tsetValue('template_name.name', templateData?.name)\r\n\t\t}\r\n\t}, [setValue, templateData])\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\topen={isOpen}\r\n\t\t\tonClose={handleModalClose}\r\n\t\t\tmaxWidth='xs'\r\n\t\t\tfullWidth\r\n\t\t\t{...modalProps}>\r\n\t\t\t<DialogTitle className='companySelectionModal--DialogTitle'>\r\n\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\r\n\t\t\t\t\t{parentIsSaving ? 'Saving Template...' : 'Template Name'}\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<IconButton onClick={handleModalClose} disabled={isSubmitting || parentIsSaving}>\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\t\t\t<DialogContent className='companySelectionModal--DialogContents'>\r\n\t\t\t\t<form onSubmit={handleSubmit(onSubmit)} id='template_name'>\r\n\t\t\t\t\t<DynamicInput \r\n\t\t\t\t\t\tlabel={'Name'}\r\n\t\t\t\t\t\tname='name'\r\n\t\t\t\t\t\tplaceholder={'Enter Name'}\r\n\t\t\t\t\t\tfieldArrayName='template_name'\r\n\t\t\t\t\t\tformControl={control}\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t/>\r\n\t\t\t\t</form>\r\n\t\t\t</DialogContent>\r\n\t\t\t<DialogActions className='companySelectionModal--DialogAction'>\r\n\t\t\t\t<Box display='flex' gap={1.5}>\r\n\t\t\t\t\t<Button className='companySelectionModal--DialogAction--WhiteBtn' onClick={handleModalClose} disabled={isSubmitting || parentIsSaving}>Cancel</Button>\r\n\t\t\t\t\t<Button type='submit' form='template_name' disabled={isSubmitting || parentIsSaving} endIcon={(isSubmitting || parentIsSaving) && <CircularProgress size={15}/>}>\r\n\t\t\t\t\t\t{parentIsSaving ? 'Saving...' : 'Save'}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</Box>\r\n\t\t\t</DialogActions>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n\r\nexport default TemplateNameModal;\r\n","/* eslint-disable no-case-declarations */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useEffect, useCallback, useMemo } from 'react';\r\nimport EditorHeader from './EditorHeader';\r\nimport EditorCanvas from './EditorCanvas';\r\nimport {\r\n DndContext,\r\n DragEndEvent,\r\n DragOverEvent,\r\n DragStartEvent,\r\n pointerWithin,\r\n} from '@dnd-kit/core';\r\nimport { SectionData, ElementType } from '../types/editor';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { Box } from '@mui/material';\r\nimport { useLocation, useParams } from 'react-router-dom';\r\nimport { getErrorMessage, getToken } from '../../../utils/common';\r\nimport { getV1FormBuilderRelationalSchemaFieldsName, getV1SubjectsId, getV1TemplateHeaderFooterCompanyIdHeaderFooter, getV1TemplatesId, patchV1TemplateHeaderFooterId, postV1TemplateHeaderFooter } from '../../../api-client/api.system-feature/api';\r\nimport { templateRoutes, extractStyles, generateEmailPreview, generateHeaderFooterPreview, generateInlineStyles } from '../utils/common';\r\nimport { initialStyles } from '../utils/constant';\r\nimport _ from 'lodash';\r\nimport formatText from '../../../utils/format-text';\r\nimport TemplateNameModal from \"../template-name-modal/template-name-modal\";\r\nimport { useDebouncedUpdate } from '../hooks/useDebouncedUpdate';\r\n\r\ninterface EnhancedSectionData extends SectionData {\r\n isSplitPair?: boolean;\r\n splitGroupId?: string;\r\n splitWidth?: number;\r\n}\r\n\r\ninterface SectionFlowEditorProps {\r\n modulePath: string;\r\n module: string;\r\n type: string;\r\n}\r\n\r\nconst SectionFlowEditor: React.FC<SectionFlowEditorProps> = ({ modulePath, module, type }) => {\r\n const { id, template_id } = useParams();\r\n const { state: locationState } = useLocation();\r\n\r\n const [sections, setSections] = useState<EnhancedSectionData[]>([]);\r\n const [headerSections, setHeaderSections] = useState<EnhancedSectionData[]>([]);\r\n const [footerSections, setFooterSections] = useState<EnhancedSectionData[]>([]);\r\n const [activeId, setActiveId] = useState<string | null>(null);\r\n const [editMode, setEditMode] = useState<true | false>(false);\r\n const [fromPreview, setFromPreview] = useState<boolean>(false);\r\n const [selectedSection, setSelectedSection] = useState<string | null>(null);\r\n const [overSection, setOverSection] = useState<string | null>(null);\r\n const [preview, setPreview] = useState<boolean>(locationState?.fromPreview ? true : false);\r\n const [editHtml, setEditHtml] = useState<boolean>(false);\r\n const [placeholders, setPlaceholders] = useState<Record<string, any>[]>([]);\r\n const [activeCanvas, setActiveCanvas] = useState<'main' | 'header' | 'footer'>('main');\r\n const [isEditingHeaderFooter, setIsEditingHeaderFooter] = useState<boolean>(false);\r\n const [payload, setPayload] = useState<any>(null);\r\n const [headerFooterId, setHeaderFooterId] = useState<string>('');\r\n const ROUTES = templateRoutes(modulePath, type);\r\n const [relation_table, setRelationTable] = useState<any[]>([]);\r\n const [templateData, setTemplateData] = useState<Record<string, any> | null>(null);\r\n\r\n // Optimistic update state\r\n const [isSaving, setIsSaving] = useState<boolean>(false);\r\n const [savedSnapshot, setSavedSnapshot] = useState<{\r\n sections: EnhancedSectionData[];\r\n headerSections: EnhancedSectionData[];\r\n footerSections: EnhancedSectionData[];\r\n } | null>(null);\r\n const [zoom, setZoom] = useState<number>(100);\r\n\r\n const handleZoomIn = () => {\r\n setZoom(prev => Math.min(prev + 10, 150));\r\n };\r\n\r\n const handleZoomOut = () => {\r\n setZoom(prev => Math.max(prev - 10, 50));\r\n };\r\n\r\n const handleResetZoom = () => {\r\n setZoom(100);\r\n };\r\n // History state for undo/redo functionality\r\n const [history, setHistory] = useState<{\r\n past: Array<{ sections: EnhancedSectionData[]; headerSections: EnhancedSectionData[]; footerSections: EnhancedSectionData[] }>;\r\n future: Array<{ sections: EnhancedSectionData[]; headerSections: EnhancedSectionData[]; footerSections: EnhancedSectionData[] }>;\r\n }>({\r\n past: [],\r\n future: [],\r\n });\r\n const MAX_HISTORY_SIZE = 50;\r\n\r\n // Memoize placeholders to prevent recreation on every render\r\n const memoizedPlaceholders = useMemo(() => placeholders, [JSON.stringify(placeholders)]);\r\n\r\n // Helper function to save current state to history\r\n const saveToHistory = useCallback(() => {\r\n setHistory((prev) => {\r\n const newPast = [\r\n ...prev.past,\r\n {\r\n sections: [...sections],\r\n headerSections: [...headerSections],\r\n footerSections: [...footerSections],\r\n },\r\n ].slice(-MAX_HISTORY_SIZE); // Keep only last 50 operations\r\n\r\n return {\r\n past: newPast,\r\n future: [], // Clear future when new action is performed\r\n };\r\n });\r\n }, [sections, headerSections, footerSections]);\r\n\r\n // Undo handler\r\n const handleUndo = useCallback(() => {\r\n if (history.past.length === 0) return;\r\n\r\n const previous = history.past[history.past.length - 1];\r\n const newPast = history.past.slice(0, -1);\r\n\r\n setHistory({\r\n past: newPast,\r\n future: [\r\n {\r\n sections: [...sections],\r\n headerSections: [...headerSections],\r\n footerSections: [...footerSections],\r\n },\r\n ...history.future,\r\n ].slice(0, MAX_HISTORY_SIZE),\r\n });\r\n\r\n setSections(previous.sections);\r\n setHeaderSections(previous.headerSections);\r\n setFooterSections(previous.footerSections);\r\n }, [history, sections, headerSections, footerSections]);\r\n\r\n // Redo handler\r\n const handleRedo = useCallback(() => {\r\n if (history.future.length === 0) return;\r\n\r\n const next = history.future[0];\r\n const newFuture = history.future.slice(1);\r\n\r\n setHistory({\r\n past: [\r\n ...history.past,\r\n {\r\n sections: [...sections],\r\n headerSections: [...headerSections],\r\n footerSections: [...footerSections],\r\n },\r\n ].slice(-MAX_HISTORY_SIZE),\r\n future: newFuture,\r\n });\r\n\r\n setSections(next.sections);\r\n setHeaderSections(next.headerSections);\r\n setFooterSections(next.footerSections);\r\n }, [history, sections, headerSections, footerSections]);\r\n\r\n // Keyboard shortcuts for undo/redo\r\n useEffect(() => {\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n // Ctrl+Z or Cmd+Z for undo\r\n if ((event.ctrlKey || event.metaKey) && event.key === 'z' && !event.shiftKey) {\r\n event.preventDefault();\r\n handleUndo();\r\n }\r\n // Ctrl+Y or Cmd+Shift+Z for redo\r\n else if (\r\n ((event.ctrlKey || event.metaKey) && event.key === 'y') ||\r\n ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key === 'z')\r\n ) {\r\n event.preventDefault();\r\n handleRedo();\r\n }\r\n };\r\n\r\n window.addEventListener('keydown', handleKeyDown);\r\n return () => {\r\n window.removeEventListener('keydown', handleKeyDown);\r\n };\r\n }, [handleUndo, handleRedo]);\r\n\r\n const createNewSection = useCallback((type: ElementType, attrs: Record<string, any> = {}): EnhancedSectionData => {\r\n let content = '';\r\n const styles = initialStyles[type] || {};\r\n const inlineStyles: string = generateInlineStyles(styles);\r\n\r\n const idPrefix = activeCanvas === 'header' && isEditingHeaderFooter ? 'header-' :\r\n activeCanvas === 'footer' && isEditingHeaderFooter ? 'footer-' : '';\r\n\r\n switch (type) {\r\n case 'heading':\r\n content = `<h1 style=\"${inlineStyles}\">Heading 1</h1>`;\r\n break;\r\n case 'heading-2':\r\n content = `<h2 style=\"${inlineStyles}\">Heading 2</h2>`;\r\n break;\r\n case 'heading-3':\r\n content = `<h3 style=\"${inlineStyles}\">Heading 3</h3>`;\r\n break;\r\n case 'heading-4':\r\n content = `<h4 style=\"${inlineStyles}\">Heading 4</h4>`;\r\n break;\r\n case 'text':\r\n content = `<p style=\"${inlineStyles}\">Hello, enter your text here...</p>`;\r\n break;\r\n case 'image':\r\n content = `<img src=\"${attrs.src}\" alt=\"${attrs.alt}\" style=\"${inlineStyles};\" />`;\r\n break;\r\n case 'buttons':\r\n attrs.text = attrs?.text || 'Button text';\r\n content = `<button style=\"${inlineStyles}\">${attrs.text}</button>`;\r\n break;\r\n case 'divider':\r\n content = `<hr style=\"${inlineStyles}\" />`;\r\n break;\r\n case 'table':\r\n const tableStyles = styles as any;\r\n const { border, borderStyle, borderColor, ...rest } = tableStyles;\r\n const tInlineStyles = generateInlineStyles(tableStyles.is_bordered ? tableStyles : rest);\r\n const tHeadInlineStyles: string = generateInlineStyles(tableStyles.tHead);\r\n const tBodyInlineStyles: string = generateInlineStyles(tableStyles.tBody);\r\n const thCellInlineStyles: string = generateInlineStyles({ ...tableStyles.thCells, border, borderStyle, borderColor });\r\n const tbCellInlineStyles: string = generateInlineStyles({ ...tableStyles.tbCells, border, borderStyle, borderColor });\r\n content = `\r\n <table style=\"${tInlineStyles}\">\r\n <thead style=\"${tHeadInlineStyles}\">\r\n <tr style=\"background-color: #f5f5f5;\">\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n <th style=\"${thCellInlineStyles}\"></th>\r\n </tr>\r\n </thead>\r\n <tbody style=\"${tBodyInlineStyles}\">\r\n <tr>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n <td style=\"${tbCellInlineStyles}\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n `;\r\n break;\r\n case 'signature':\r\n content = `<div style=\"${inlineStyles}\">Signature: <input type='text' style=\"border:0; border-bottom:1px solid black\" class='signature-input'/></div>`;\r\n break;\r\n case 'qr-code':\r\n attrs.placeholder = attrs?.placeholder || '{{qr_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n case 'bar-code':\r\n attrs.placeholder = attrs?.placeholder || '{{barcode_data}}';\r\n content = `<div style=\"background-color: #f5f5f5; padding: 16px; text-align: center; color: #666666;\">${attrs.placeholder}</div>`;\r\n break;\r\n default:\r\n content = '<p style=\"font-size: 16px; color: #333333; line-height: 1.5;\">New section</p>';\r\n }\r\n\r\n let attributes: Record<string, any> = {};\r\n attributes = extractStyles(content, type);\r\n\r\n return {\r\n id: `${idPrefix}section-${uuidv4()}`,\r\n content,\r\n type,\r\n attributes: { ...(attrs || {}), styles },\r\n is_edited_from_source: false\r\n };\r\n }, [activeCanvas, isEditingHeaderFooter]);\r\n\r\n const handleDragStart = useCallback((event: DragStartEvent) => {\r\n const { active } = event;\r\n setActiveId(active.id as string);\r\n }, []);\r\n\r\n const handleDragOver = useCallback((event: DragOverEvent) => {\r\n const { /* active, */ over } = event;\r\n\r\n if (!over) {\r\n setOverSection(null);\r\n return;\r\n }\r\n\r\n if (over.id === 'header-canvas' && isEditingHeaderFooter) {\r\n setActiveCanvas('header');\r\n } else if (over.id === 'footer-canvas' && isEditingHeaderFooter) {\r\n setActiveCanvas('footer');\r\n } else if (over.id === 'main-canvas') {\r\n setActiveCanvas('main');\r\n }\r\n\r\n if (over.id !== 'header-canvas' && over.id !== 'main-canvas' && over.id !== 'footer-canvas') {\r\n setOverSection(over.id as string);\r\n }\r\n }, [isEditingHeaderFooter]);\r\n\r\n const handleDragEnd = useCallback((event: DragEndEvent) => {\r\n const { active, over } = event;\r\n\r\n setActiveId(null);\r\n setOverSection(null);\r\n\r\n if (!over) return;\r\n\r\n let targetSections = sections;\r\n let setTargetSections = setSections;\r\n\r\n if ((over.id === 'header-canvas' || overSection?.startsWith('header-')) && isEditingHeaderFooter) {\r\n targetSections = headerSections;\r\n setTargetSections = setHeaderSections;\r\n setActiveCanvas('header');\r\n } else if ((over.id === 'footer-canvas' || overSection?.startsWith('footer-')) && isEditingHeaderFooter) {\r\n targetSections = footerSections;\r\n setTargetSections = setFooterSections;\r\n setActiveCanvas('footer');\r\n } else {\r\n setActiveCanvas('main');\r\n }\r\n\r\n if (active.data.current?.type === 'image') {\r\n saveToHistory(); // Save state before adding image section\r\n const imageUrl = active.data.current.imageUrl;\r\n const newSection: EnhancedSectionData = createNewSection('image', { src: imageUrl, alt: 'Image' });\r\n\r\n const overIndex = targetSections.findIndex((section) => section.id === over.id);\r\n const newSections = [...targetSections];\r\n\r\n if (over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas' || overIndex === -1) {\r\n setTargetSections([...targetSections, newSection]);\r\n } else {\r\n newSections.splice(overIndex, 0, newSection);\r\n setTargetSections(newSections);\r\n }\r\n\r\n enqueueSnackbar('Added uploaded image section');\r\n return;\r\n }\r\n\r\n if (typeof active.id === 'string' && active.id.startsWith('sidebar-')) {\r\n saveToHistory(); // Save state before adding new section\r\n const type = active.id.replace('sidebar-', '') as ElementType;\r\n const newSection = createNewSection(type);\r\n\r\n const overIndex = targetSections.findIndex((section) => section.id === over.id);\r\n const isOverSection = overIndex !== -1;\r\n\r\n if (!isOverSection || over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas') {\r\n setTargetSections([...targetSections, newSection]);\r\n } else {\r\n const targetSection = targetSections[overIndex];\r\n const isEmpty =\r\n !targetSection.content ||\r\n targetSection.content.includes('Click to add') ||\r\n targetSection.content.includes('enter your text');\r\n\r\n if (isEmpty) {\r\n const updatedSections = [...targetSections];\r\n updatedSections[overIndex] = {\r\n ...targetSection,\r\n type,\r\n content: newSection.content,\r\n };\r\n setTargetSections(updatedSections);\r\n // enqueueSnackbar(`Changed section to ${type}`);\r\n } else {\r\n const updatedSections = [...targetSections];\r\n updatedSections.splice(overIndex, 0, newSection);\r\n setTargetSections(updatedSections);\r\n // enqueueSnackbar(`Added new ${type} section`);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (\r\n active.id !== over.id &&\r\n typeof active.id === 'string' &&\r\n typeof over.id === 'string'\r\n ) {\r\n saveToHistory(); // Save state before reordering sections\r\n let sourceSections: EnhancedSectionData[] = [];\r\n let sourceSetSections: React.Dispatch<React.SetStateAction<EnhancedSectionData[]>> | null = null;\r\n let canvasId = '';\r\n\r\n if (active.id.startsWith('header-') && isEditingHeaderFooter) {\r\n sourceSections = headerSections;\r\n sourceSetSections = setHeaderSections;\r\n canvasId = 'header-canvas';\r\n } else if (active.id.startsWith('footer-') && isEditingHeaderFooter) {\r\n sourceSections = footerSections;\r\n sourceSetSections = setFooterSections;\r\n canvasId = 'footer-canvas';\r\n } else {\r\n sourceSections = sections;\r\n sourceSetSections = setSections;\r\n canvasId = 'main-canvas';\r\n }\r\n\r\n const cleanActiveId = active.id.replace(/^(header-|footer-)/, '');\r\n\r\n const oldIndex = sourceSections.findIndex((section) =>\r\n section.id === cleanActiveId || section.id === active.id\r\n );\r\n\r\n let newIndex = targetSections.findIndex((section) =>\r\n section.id === String(over.id).replace(/^(header-|footer-)/, '')\r\n );\r\n\r\n if (over.id === 'header-canvas' || over.id === 'main-canvas' || over.id === 'footer-canvas') {\r\n newIndex = targetSections.length;\r\n }\r\n\r\n if (oldIndex !== -1 && newIndex !== -1) {\r\n if (sourceSections === targetSections) {\r\n const newSections = [...sourceSections];\r\n const [movedSection] = newSections.splice(oldIndex, 1);\r\n\r\n if (movedSection.isSplitPair && movedSection.splitGroupId) {\r\n const groupId = movedSection.splitGroupId;\r\n const groupSections = [movedSection, ...sourceSections.filter(\r\n s => s.splitGroupId === groupId && s.id !== movedSection.id\r\n )];\r\n\r\n const cleaned = newSections.filter(s => s.splitGroupId !== groupId);\r\n cleaned.splice(newIndex, 0, ...groupSections);\r\n sourceSetSections(cleaned);\r\n } else {\r\n newSections.splice(newIndex, 0, movedSection);\r\n sourceSetSections(newSections);\r\n }\r\n } else {\r\n const originalSection = sourceSections[oldIndex];\r\n\r\n const newSourceSections = [...sourceSections];\r\n newSourceSections.splice(oldIndex, 1);\r\n sourceSetSections(newSourceSections);\r\n\r\n const newTargetSections = [...targetSections];\r\n\r\n const movedSection = { ...originalSection };\r\n\r\n if ((over.id === 'header-canvas' || over.id.startsWith('header-')) && isEditingHeaderFooter) {\r\n if (!movedSection.id.startsWith('header-')) {\r\n movedSection.id = `header-${movedSection.id}`;\r\n }\r\n } else if ((over.id === 'footer-canvas' || over.id.startsWith('footer-')) && isEditingHeaderFooter) {\r\n if (!movedSection.id.startsWith('footer-')) {\r\n movedSection.id = `footer-${movedSection.id}`;\r\n }\r\n } else {\r\n movedSection.id = movedSection.id.replace(/^(header-|footer-)/, '');\r\n }\r\n\r\n newTargetSections.splice(newIndex, 0, movedSection);\r\n setTargetSections(newTargetSections);\r\n }\r\n }\r\n }\r\n }, [sections, headerSections, footerSections, overSection, isEditingHeaderFooter, activeCanvas, createNewSection, saveToHistory]);\r\n\r\n const getRelevantSections = useCallback((canvasType: string) => {\r\n if (canvasType === 'header' && isEditingHeaderFooter) return headerSections;\r\n if (canvasType === 'footer' && isEditingHeaderFooter) return footerSections;\r\n return sections;\r\n }, [sections, headerSections, footerSections, isEditingHeaderFooter]);\r\n\r\n const getRelevantSetSections = useCallback((canvasType: string) => {\r\n if (canvasType === 'header' && isEditingHeaderFooter) return setHeaderSections;\r\n if (canvasType === 'footer' && isEditingHeaderFooter) return setFooterSections;\r\n return setSections;\r\n }, [isEditingHeaderFooter]);\r\n\r\n // Internal update function (not debounced)\r\n const updateSectionImmediate = useCallback((id: string, data: Partial<EnhancedSectionData>, canvasType: string) => {\r\n const relevantSections = getRelevantSections(canvasType);\r\n const relevantSetSections = getRelevantSetSections(canvasType);\r\n\r\n const cleanId = id.replace(/^(header-|footer-)/, '');\r\n\r\n relevantSetSections(\r\n relevantSections.map((section) =>\r\n section.id === cleanId || section.id === id ? { ...section, ...data } : section\r\n )\r\n );\r\n }, [getRelevantSections, getRelevantSetSections]);\r\n\r\n // Debounced version for section content updates (300ms delay)\r\n const handleUpdateSectionDebounced = useDebouncedUpdate(updateSectionImmediate, 300);\r\n\r\n // Main handler that decides whether to debounce\r\n const handleUpdateSection = useCallback((id: string, data: Partial<EnhancedSectionData>, canvasType: string) => {\r\n // Only debounce content updates, apply other updates immediately\r\n if (data.content !== undefined && Object.keys(data).length === 1) {\r\n handleUpdateSectionDebounced(id, data, canvasType);\r\n } else {\r\n updateSectionImmediate(id, data, canvasType);\r\n }\r\n }, [updateSectionImmediate, handleUpdateSectionDebounced]);\r\n\r\n const handleSplitSection = useCallback((id: string, content1: string, content2: string, canvasType: string) => {\r\n saveToHistory(); // Save state before splitting section\r\n\r\n const relevantSections = getRelevantSections(canvasType);\r\n const relevantSetSections = getRelevantSetSections(canvasType);\r\n\r\n const cleanId = id.replace(/^(header-|footer-)/, '');\r\n\r\n const index = relevantSections.findIndex((section) => section.id === cleanId || section.id === id);\r\n if (index === -1) return;\r\n\r\n const section = relevantSections[index];\r\n const newSections = [...relevantSections];\r\n\r\n const sectionPrefix = canvasType === 'header' ? 'header-' : canvasType === 'footer' ? 'footer-' : '';\r\n\r\n if (section.isSplitPair && section.splitGroupId) {\r\n const splitGroupId = section.splitGroupId;\r\n const splitSections = newSections.filter(s => s.splitGroupId === splitGroupId);\r\n const totalSections = splitSections.length + 1;\r\n const newWidth = 100 / totalSections;\r\n\r\n newSections[index] = {\r\n ...section,\r\n content: content1,\r\n splitWidth: newWidth\r\n };\r\n\r\n const newSection: EnhancedSectionData = {\r\n id: `${sectionPrefix}section-${uuidv4()}`,\r\n content: content2,\r\n type: section.type,\r\n isSplitPair: true,\r\n splitGroupId: splitGroupId,\r\n splitWidth: newWidth,\r\n attributes: section.attributes,\r\n is_edited_from_source: false\r\n };\r\n\r\n newSections.splice(index + 1, 0, newSection);\r\n\r\n for (let i = 0; i < newSections.length; i++) {\r\n if (newSections[i].splitGroupId === splitGroupId) {\r\n newSections[i].splitWidth = newWidth;\r\n }\r\n }\r\n } else {\r\n const splitGroupId = uuidv4();\r\n const initialWidth = 50;\r\n\r\n newSections[index] = {\r\n ...section,\r\n content: content1,\r\n isSplitPair: true,\r\n splitGroupId,\r\n splitWidth: initialWidth\r\n };\r\n\r\n const newSection: EnhancedSectionData = {\r\n id: `${sectionPrefix}section-${uuidv4()}`,\r\n content: content2,\r\n type: section.type,\r\n isSplitPair: true,\r\n splitGroupId,\r\n splitWidth: initialWidth,\r\n attributes: section.attributes,\r\n is_edited_from_source: false\r\n };\r\n\r\n newSections.splice(index + 1, 0, newSection);\r\n }\r\n\r\n relevantSetSections(newSections);\r\n // enqueueSnackbar('Section split successfully');\r\n }, [getRelevantSections, getRelevantSetSections, activeCanvas, isEditingHeaderFooter, saveToHistory]);\r\n\r\n const handleDeleteSection = useCallback((id: string, canvasType: string) => {\r\n saveToHistory(); // Save state before deleting section\r\n\r\n const relevantSections = getRelevantSections(canvasType);\r\n const relevantSetSections = getRelevantSetSections(canvasType);\r\n\r\n const cleanId = id.replace(/^(header-|footer-)/, '');\r\n\r\n const sectionToDelete = relevantSections.find(s => s.id === cleanId || s.id === id);\r\n\r\n if (!sectionToDelete) return;\r\n\r\n if (sectionToDelete.isSplitPair && sectionToDelete.splitGroupId) {\r\n const splitSections = relevantSections.filter(s => s.splitGroupId === sectionToDelete.splitGroupId);\r\n\r\n if (splitSections.length <= 2) {\r\n const remainingSection = splitSections.find(s => s.id !== cleanId && s.id !== id);\r\n if (remainingSection) {\r\n remainingSection.isSplitPair = false;\r\n remainingSection.splitGroupId = undefined;\r\n remainingSection.splitWidth = undefined;\r\n }\r\n relevantSetSections(relevantSections.filter(s => s.id !== cleanId && s.id !== id));\r\n } else {\r\n const remainingSplitSections = splitSections.filter(s => s.id !== cleanId && s.id !== id);\r\n const newWidth = 100 / remainingSplitSections.length;\r\n\r\n const updatedSections = relevantSections.filter(section => section.id !== cleanId && section.id !== id).map(section => {\r\n if (section.splitGroupId === sectionToDelete.splitGroupId) {\r\n return { ...section, splitWidth: newWidth };\r\n }\r\n return section;\r\n });\r\n\r\n relevantSetSections(updatedSections);\r\n // enqueueSnackbar('Section removed from split group');\r\n }\r\n } else {\r\n relevantSetSections(relevantSections.filter(section => section.id !== cleanId && section.id !== id));\r\n // enqueueSnackbar('Section deleted');\r\n }\r\n\r\n if (selectedSection === id) {\r\n setSelectedSection(null);\r\n }\r\n }, [getRelevantSections, getRelevantSetSections, selectedSection, saveToHistory]);\r\n\r\n useEffect(() => {\r\n if (locationState?.fromPreview) {\r\n setEditMode(locationState?.isViewOnly ? false : true);\r\n setFromPreview(true);\r\n }\r\n document.body.style.overflow = 'hidden';\r\n const main = document.getElementsByTagName('main')?.[0];\r\n if (main) {\r\n main.style.marginTop = '4.125rem';\r\n }\r\n return () => {\r\n document.body.removeAttribute('style');\r\n }\r\n }, []);\r\n\r\n const getData = async () => {\r\n if (id) {\r\n const token = getToken();\r\n const subjRes = await getV1SubjectsId({\r\n ...token,\r\n 'x-timezone': token['x-timezone']?.toString() || '',\r\n id\r\n });\r\n\r\n if ('data' in subjRes && subjRes.data && typeof subjRes.data === 'object' && 'resource' in subjRes.data) {\r\n const resource = (subjRes.data as any).resource;\r\n const token2 = getToken();\r\n const fRes = await getV1FormBuilderRelationalSchemaFieldsName({\r\n ...token2,\r\n 'x-timezone': token2['x-timezone']?.toString() || '',\r\n name: resource,\r\n });\r\n const schemaFields = ('data' in fRes && fRes.data && typeof fRes.data === 'object' && 'fields' in fRes.data)\r\n ? ((fRes.data as any).fields || [])\r\n : [];\r\n const relation_table = ('data' in fRes && fRes.data && typeof fRes.data === 'object' && 'relational_fields' in fRes.data)\r\n ? ((fRes.data as any).relational_fields || [])\r\n : [];\r\n\r\n // Process main schema fields\r\n const updatedFields = schemaFields\r\n .map((field) => ({\r\n ...field,\r\n key: field.key.replace('__replaceKey', ''),\r\n }))\r\n .filter((field) => !field.is_inner_join && field.alias !== 'id' && !field?.alias?.includes('_id'));\r\n\r\n // Process relation tables - separate array and object types\r\n const arrayRelationTables = [];\r\n const objectRelationFields = [];\r\n\r\n relation_table.forEach((table) => {\r\n if (!table) return;\r\n\r\n const updatedTableFields = (table.fields || []).map((field) => {\r\n const updatedField = {\r\n ...field,\r\n key: field.key.replace('__replaceKey', ''),\r\n alias: field?.templateKey ? field?.templateKey : field.alias,\r\n };\r\n\r\n // Prepend dataKey to field keys for object types\r\n if (table.type === 'object' && table.dataKey) {\r\n updatedField.key = `${table.dataKey}.${updatedField.key}`;\r\n }\r\n\r\n return updatedField;\r\n }).filter(\r\n (field) =>\r\n !field.is_inner_join &&\r\n field.alias !== 'id' &&\r\n !field.alias.includes('_id')\r\n );\r\n\r\n const uniqueTableFields = _.differenceWith(\r\n updatedTableFields,\r\n updatedTableFields,\r\n (fieldA: any, fieldB: any) => fieldA.key === fieldB?.joinKey\r\n );\r\n\r\n const tableFields = uniqueTableFields.map((f: any) => {\r\n const field = formatText(f.alias.replace(/_data$/, '').replace(/_/g, ' '));\r\n const value = table.type === 'object' && table.dataKey\r\n ? `${table.dataKey}.${f.alias.replace(/ /g, '_').toLowerCase()}`\r\n : f.alias.replace(/ /g, '_').toLowerCase();\r\n\r\n return {\r\n label: field,\r\n value: value\r\n };\r\n });\r\n\r\n if (table.type === 'object') {\r\n // Merge object type fields into main fields\r\n objectRelationFields.push(...tableFields);\r\n } else {\r\n // Keep array types separate\r\n arrayRelationTables.push({\r\n ...table,\r\n fields: tableFields\r\n });\r\n }\r\n });\r\n\r\n // Combine main fields and object relation fields\r\n const allFields = [\r\n ...updatedFields.map((f) => {\r\n const n = f?.alias || f?.key\r\n const field = formatText(n.replace(/_data$/, '').replace(/_/g, ' '));\r\n return {\r\n label: field,\r\n value: field.replace(/ /g, '_').toLowerCase()\r\n };\r\n }),\r\n ...objectRelationFields\r\n ];\r\n\r\n const uniqueAllFields = _.uniqBy(allFields, 'value');\r\n\r\n setPlaceholders(uniqueAllFields);\r\n setRelationTable(arrayRelationTables);\r\n }\r\n }\r\n\r\n // Rest of the function remains the same...\r\n if (template_id) {\r\n const token3 = getToken();\r\n const res = await getV1TemplatesId({\r\n ...token3,\r\n 'x-timezone': token3['x-timezone']?.toString() || '',\r\n id: template_id\r\n });\r\n const templateSections = ('data' in res && res.data && typeof res.data === 'object' && 'sections' in res.data)\r\n ? ((res.data as any).sections || [])\r\n : [];\r\n const mainSecs = templateSections.map((s: any) => ({\r\n ...s,\r\n id: s.id || `section-${uuidv4()}`,\r\n attributes: {\r\n ...s.attributes,\r\n styles: s.attributes?.styles || initialStyles[s.type] || {}\r\n }\r\n }));\r\n setTemplateData(('data' in res && res.data) ? res.data as any : null);\r\n\r\n setSections(mainSecs);\r\n }\r\n\r\n if (locationState?.company_id) {\r\n const token4 = getToken();\r\n const res = await getV1TemplateHeaderFooterCompanyIdHeaderFooter({\r\n ...token4,\r\n 'x-timezone': token4['x-timezone']?.toString() || '',\r\n company_id: locationState.company_id,\r\n });\r\n const resData = ('data' in res && res.data && typeof res.data === 'object') ? res.data as any : null;\r\n setHeaderFooterId(resData?._id || '');\r\n const headerSections = resData?.header_sections || [];\r\n const footerSections = resData?.footer_sections || [];\r\n const headerSecs = headerSections.map((s) => ({\r\n ...s,\r\n id: s.id || `header-section-${uuidv4()}`,\r\n attributes: {\r\n ...s.attributes,\r\n styles: s.attributes?.styles || initialStyles[s.type] || {}\r\n }\r\n }));\r\n const footerSecs = footerSections.map((s) => ({\r\n ...s,\r\n id: s.id || `footer-section-${uuidv4()}`,\r\n attributes: {\r\n ...s.attributes,\r\n styles: s.attributes?.styles || initialStyles[s.type] || {}\r\n }\r\n }));\r\n\r\n setHeaderSections(headerSecs);\r\n setFooterSections(footerSecs);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n getData();\r\n }, [template_id, id, locationState?.company_id]);\r\n\r\n const handleApplyHtmlEdit = useCallback((html: string) => {\r\n saveToHistory(); // Save state before applying HTML edit\r\n const newSection: EnhancedSectionData = {\r\n id: `section-${uuidv4()}`,\r\n content: html,\r\n type: 'text',\r\n is_edited_from_source: true,\r\n };\r\n setSections([newSection]);\r\n setEditHtml(false);\r\n }, [saveToHistory]);\r\n\r\n const handleCancelHtmlEdit = useCallback(() => {\r\n setEditHtml(false);\r\n }, []);\r\n\r\n const handleSave = useCallback(async () => {\r\n if (sections.length === 0 && headerSections.length === 0 && footerSections.length === 0) {\r\n enqueueSnackbar('Please add at least one section');\r\n return;\r\n }\r\n\r\n // Save snapshot for potential rollback\r\n setSavedSnapshot({\r\n sections: [...sections],\r\n headerSections: [...headerSections],\r\n footerSections: [...footerSections],\r\n });\r\n\r\n const mainHtml = generateEmailPreview(sections, headerSections, footerSections, true);\r\n try {\r\n const p = {\r\n ...getToken(),\r\n ...(template_id ? { id: template_id } : { subject_id: id, is_default: false, company_id: locationState.company_id }),\r\n sections: sections.map(s => ({ ...s, attributes: s.attributes })),\r\n contents: mainHtml\r\n }\r\n setPayload(p);\r\n } catch (error) {\r\n const m = getErrorMessage(error?.message);\r\n enqueueSnackbar(m, { variant: 'error' });\r\n setSavedSnapshot(null);\r\n }\r\n }, [sections, headerSections, footerSections, template_id, id, locationState]);\r\n\r\n const handleSaveHeaderFooter = useCallback(async () => {\r\n if (sections.length === 0 && headerSections.length === 0 && footerSections.length === 0) {\r\n enqueueSnackbar('Please add at least one section', { variant: 'error' });\r\n return;\r\n } else if (!locationState?.company_id) {\r\n enqueueSnackbar('Company has not been selected', { variant: 'error' });\r\n return;\r\n }\r\n\r\n // Save snapshot for potential rollback\r\n setSavedSnapshot({\r\n sections: [...sections],\r\n headerSections: [...headerSections],\r\n footerSections: [...footerSections],\r\n });\r\n\r\n // Show loading state immediately (optimistic update)\r\n setIsSaving(true);\r\n\r\n const headerHtml = generateHeaderFooterPreview(headerSections, 'header');\r\n const footerHtml = generateHeaderFooterPreview(footerSections, 'footer');\r\n const combinedHtml = `${headerHtml}${footerHtml}`;\r\n\r\n // Convert splitWidth from number to string for API\r\n const convertSectionForApi = (section: EnhancedSectionData) => ({\r\n id: section.id,\r\n content: section.content,\r\n type: section.type,\r\n isSplitPair: section.isSplitPair,\r\n splitGroupId: section.splitGroupId,\r\n splitWidth: section.splitWidth !== undefined ? String(section.splitWidth) : undefined,\r\n attributes: section.attributes,\r\n });\r\n\r\n const convertedHeaderSections = headerSections.map(convertSectionForApi);\r\n const convertedFooterSections = footerSections.map(convertSectionForApi);\r\n\r\n try {\r\n if (headerFooterId) {\r\n const token5 = getToken();\r\n const res = await patchV1TemplateHeaderFooterId({\r\n ...token5,\r\n 'x-timezone': token5['x-timezone']?.toString() || '',\r\n id: headerFooterId,\r\n header_sections: convertedHeaderSections,\r\n footer_sections: convertedFooterSections,\r\n contents: combinedHtml\r\n });\r\n if (res.status_code === 200) {\r\n enqueueSnackbar('Header/Footer saved successfully', { variant: 'success' });\r\n setIsEditingHeaderFooter(false);\r\n setSavedSnapshot(null);\r\n }\r\n } else {\r\n const token6 = getToken();\r\n const res = await postV1TemplateHeaderFooter({\r\n ...token6,\r\n 'x-timezone': token6['x-timezone']?.toString() || '',\r\n header_sections: convertedHeaderSections,\r\n footer_sections: convertedFooterSections,\r\n contents: combinedHtml,\r\n company_id: locationState.company_id\r\n });\r\n if (res.status_code === 200) {\r\n enqueueSnackbar('Header/Footer saved successfully', { variant: 'success' });\r\n setIsEditingHeaderFooter(false);\r\n setSavedSnapshot(null);\r\n }\r\n }\r\n } catch (error) {\r\n const m = getErrorMessage(error?.message);\r\n enqueueSnackbar(m, { variant: 'error' });\r\n\r\n // Revert to saved snapshot on error\r\n if (savedSnapshot) {\r\n setSections(savedSnapshot.sections);\r\n setHeaderSections(savedSnapshot.headerSections);\r\n setFooterSections(savedSnapshot.footerSections);\r\n enqueueSnackbar('Changes reverted due to save error', { variant: 'warning' });\r\n }\r\n } finally {\r\n setIsSaving(false);\r\n setSavedSnapshot(null);\r\n }\r\n }, [sections, headerSections, footerSections, headerFooterId, locationState, savedSnapshot]);\r\n\r\n const toggleHeaderFooterEditing = useCallback(() => {\r\n setIsEditingHeaderFooter(!isEditingHeaderFooter);\r\n if (isEditingHeaderFooter) {\r\n setActiveCanvas('main');\r\n }\r\n }, [isEditingHeaderFooter]);\r\n\r\n // Handle save success from TemplateNameModal\r\n const handleSaveSuccess = useCallback(() => {\r\n setSavedSnapshot(null);\r\n setPayload(null);\r\n }, []);\r\n\r\n // Handle save error from TemplateNameModal\r\n const handleSaveError = useCallback(() => {\r\n // Revert to saved snapshot on error\r\n if (savedSnapshot) {\r\n setSections(savedSnapshot.sections);\r\n setHeaderSections(savedSnapshot.headerSections);\r\n setFooterSections(savedSnapshot.footerSections);\r\n enqueueSnackbar('Changes reverted due to save error', { variant: 'warning' });\r\n }\r\n\r\n setSavedSnapshot(null);\r\n setPayload(null);\r\n }, [savedSnapshot]);\r\n\r\n const toggleEditMode = () => {\r\n setEditMode(!editMode);\r\n if (editMode) {\r\n setPreview(true);\r\n } else {\r\n setPreview(false);\r\n }\r\n }\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', height: '100vh' }}>\r\n <EditorHeader\r\n fromPreview={fromPreview}\r\n onPreview={() => setPreview(!preview)}\r\n onSave={handleSave}\r\n onEditModeChange={toggleEditMode}\r\n zoom={zoom}\r\n onZoomIn={handleZoomIn}\r\n onZoomOut={handleZoomOut}\r\n onResetZoom={handleResetZoom}\r\n editMode={editMode}\r\n preview={preview}\r\n editHtml={editHtml}\r\n onEditHtml={() => setEditHtml(!editHtml)}\r\n sections={sections}\r\n isEditingHeaderFooter={isEditingHeaderFooter}\r\n setIsEditingHeaderFooter={toggleHeaderFooterEditing}\r\n onSaveHeaderFooter={handleSaveHeaderFooter}\r\n modulePath={modulePath}\r\n type={type}\r\n mode={template_id ? 'edit' : 'add'}\r\n templateData={templateData}\r\n isSaving={isSaving}\r\n />\r\n <Box sx={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\r\n <DndContext\r\n onDragStart={handleDragStart}\r\n onDragOver={handleDragOver}\r\n onDragEnd={handleDragEnd}\r\n collisionDetection={pointerWithin}\r\n >\r\n <EditorCanvas\r\n sections={sections}\r\n headerSections={headerSections}\r\n footerSections={footerSections}\r\n activeId={activeId}\r\n overSection={overSection}\r\n selectedSection={selectedSection}\r\n onSelectSection={setSelectedSection}\r\n onUpdateSection={handleUpdateSection}\r\n onSplitSection={handleSplitSection}\r\n onDeleteSection={handleDeleteSection}\r\n preview={preview}\r\n editHtml={editHtml}\r\n onApplyHtmlEdit={handleApplyHtmlEdit}\r\n onCancelHtmlEdit={handleCancelHtmlEdit}\r\n zoom={zoom}\r\n editMode={editMode}\r\n isFromPreview={fromPreview}\r\n handleSave={handleSave}\r\n placeholders={memoizedPlaceholders}\r\n isEditingHeaderFooter={isEditingHeaderFooter}\r\n relation_table={relation_table}\r\n />\r\n </DndContext>\r\n </Box>\r\n {payload !== null &&\r\n <TemplateNameModal\r\n isOpen={payload !== null}\r\n setIsOpen={() => setPayload(null)}\r\n payload={payload}\r\n templateRoutes={ROUTES}\r\n mode={template_id ? 'edit' : 'add'}\r\n templateData={templateData}\r\n onSaveSuccess={handleSaveSuccess}\r\n onSaveError={handleSaveError}\r\n isSaving={isSaving}\r\n />\r\n }\r\n </Box>\r\n );\r\n};\r\n\r\nexport default SectionFlowEditor;","/* eslint-disable unused-imports/no-unused-vars */\r\nimport { Box } from '@mui/material';\r\nimport SectionFlowEditor from '../components/SectionFlowEditor';\r\nimport './add-template.scss';\r\nimport { ITemplateFormProps } from '../utils/types';\r\n\r\nconst AddTemplate: React.FC<ITemplateFormProps> = ({ modulePath, module, type}) => {\r\n return (\r\n <Box sx={{ minHeight: '100vh', bgcolor: 'grey.50' }}>\r\n <SectionFlowEditor modulePath={modulePath} module={module} type={type}/>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default AddTemplate;","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useRef, useEffect, useCallback } from 'react';\r\nimport { Box, Skeleton, IconButton, Tooltip, Divider, Fade } from '@mui/material';\r\nimport { ZoomIn, ZoomOut, Refresh } from '@mui/icons-material';\r\nimport { Trash } from '../../../components/icons';\r\nimport Typography from '../../../components/typography/typography';\r\n\r\nconst HtmlThumbnailPreview = ({ \r\n template, \r\n width = 300, \r\n height = 200, \r\n scale = 0.25,\r\n showControls = false,\r\n onClick = null,\r\n selectedTemplateId = '',\r\n isFetching = false,\r\n onDelete,\r\n minScale = 0.1,\r\n maxScale = 1,\r\n scaleStep = 1.2,\r\n loadingDelay = 500,\r\n refreshDelay = 300,\r\n normalView = false,\r\n}) => {\r\n const [isLoading, setIsLoading] = useState(isFetching || true);\r\n const [currentScale, setCurrentScale] = useState(scale);\r\n const [error, setError] = useState(null);\r\n const [isHovered, setIsHovered] = useState(false);\r\n const containerRef = useRef(null);\r\n const contentRef = useRef(null);\r\n const loadingTimeoutRef = useRef(null);\r\n const refreshTimeoutRef = useRef(null);\r\n\r\n // Calculate dimensions based on scale\r\n const scaledWidth = width / currentScale;\r\n const scaledHeight = height / currentScale;\r\n\r\n // Cleanup timeouts on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (loadingTimeoutRef.current) {\r\n clearTimeout(loadingTimeoutRef.current);\r\n }\r\n if (refreshTimeoutRef.current) {\r\n clearTimeout(refreshTimeoutRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n // Handle initial loading\r\n useEffect(() => {\r\n if (loadingTimeoutRef.current) {\r\n clearTimeout(loadingTimeoutRef.current);\r\n }\r\n \r\n loadingTimeoutRef.current = setTimeout(() => {\r\n setIsLoading(false);\r\n }, loadingDelay);\r\n\r\n return () => {\r\n if (loadingTimeoutRef.current) {\r\n clearTimeout(loadingTimeoutRef.current);\r\n }\r\n };\r\n }, [template.contents, loadingDelay]);\r\n\r\n // Handle external loading state\r\n useEffect(() => {\r\n setIsLoading(isFetching);\r\n }, [isFetching]);\r\n\r\n // Memoized event handlers\r\n const handleZoomIn = useCallback(() => {\r\n setCurrentScale(prev => Math.min(prev * scaleStep, maxScale));\r\n }, [scaleStep, maxScale]);\r\n\r\n const handleZoomOut = useCallback(() => {\r\n setCurrentScale(prev => Math.max(prev / scaleStep, minScale));\r\n }, [scaleStep, minScale]);\r\n\r\n const handleRefresh = useCallback(() => {\r\n setIsLoading(true);\r\n setError(null);\r\n \r\n if (refreshTimeoutRef.current) {\r\n clearTimeout(refreshTimeoutRef.current);\r\n }\r\n \r\n refreshTimeoutRef.current = setTimeout(() => {\r\n setIsLoading(false);\r\n }, refreshDelay);\r\n }, [refreshDelay]);\r\n\r\n const handleClick = useCallback(() => {\r\n if (onClick && !isLoading) {\r\n onClick(template);\r\n }\r\n }, [onClick, template, isLoading]);\r\n\r\n const handleDelete = useCallback((e) => {\r\n e.stopPropagation(); // Prevent triggering onClick\r\n if (onDelete && !template?.is_default) {\r\n onDelete(template);\r\n }\r\n }, [onDelete, template]);\r\n\r\n const handleMouseEnter = useCallback(() => {\r\n setIsHovered(true);\r\n }, []);\r\n\r\n const handleMouseLeave = useCallback(() => {\r\n setIsHovered(false);\r\n }, []);\r\n\r\n // Loading state\r\n if (isLoading) {\r\n return (\r\n <Box \r\n sx={{ \r\n width, \r\n height,\r\n borderRadius: 1,\r\n overflow: 'hidden',\r\n border: '1px solid',\r\n borderColor: 'divider'\r\n }}\r\n >\r\n <Skeleton \r\n variant=\"rectangular\" \r\n width=\"100%\" \r\n height=\"100%\" \r\n animation=\"wave\"\r\n />\r\n </Box>\r\n );\r\n }\r\n\r\n // Error state\r\n if (error) {\r\n return (\r\n <Box \r\n sx={{ \r\n width, \r\n height,\r\n borderRadius: 1,\r\n overflow: 'hidden',\r\n border: '1px solid',\r\n borderColor: 'error.main',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: 'error.light',\r\n color: 'error.contrastText'\r\n }}\r\n >\r\n Failed to load template\r\n </Box>\r\n );\r\n }\r\n\r\n const isSelected = selectedTemplateId === template._id;\r\n const canZoomIn = currentScale < maxScale;\r\n const canZoomOut = currentScale > minScale;\r\n const canDelete = !template?.is_default;\r\n\r\n return (\r\n <Box \r\n sx={{ position: 'relative', display: 'inline-block' }}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n >\r\n {/* Main Container */}\r\n <Box\r\n ref={containerRef}\r\n onClick={handleClick}\r\n sx={(theme) => ({\r\n width,\r\n height,\r\n border: '1px solid',\r\n borderRadius: 1,\r\n overflow: 'hidden',\r\n position: 'relative',\r\n cursor: onClick ? 'pointer' : 'default',\r\n backgroundColor: '#fff',\r\n // boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\r\n transition: 'all 0.2s ease-in-out',\r\n '&:hover': onClick ? {\r\n boxShadow: '0 4px 16px rgba(0,0,0,0.15)',\r\n transform: 'translateY(-1px)',\r\n } : {},\r\n borderColor: normalView && isSelected ? theme.palette.theme.primary[800] : 'grey.300',\r\n borderWidth: isSelected ? 2 : 1,\r\n })}\r\n >\r\n {/* Scaled Content Wrapper */}\r\n <Box\r\n sx={{\r\n width: scaledWidth,\r\n height: scaledHeight,\r\n transform: `scale(${currentScale})`,\r\n transformOrigin: 'top left',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n overflow: 'hidden',\r\n }}\r\n >\r\n {/* HTML Content */}\r\n <Box\r\n ref={contentRef}\r\n sx={{\r\n width: '100%',\r\n height: '100%',\r\n userSelect: 'none',\r\n pointerEvents: 'none',\r\n pt: 2,\r\n '& *': {\r\n maxWidth: '100% !important',\r\n boxSizing: 'border-box !important',\r\n },\r\n // Reset common problematic styles\r\n '& body': {\r\n margin: '0 !important',\r\n padding: '0 !important',\r\n overflow: 'hidden !important',\r\n },\r\n // Handle images\r\n '& img': {\r\n maxWidth: '100% !important',\r\n height: 'auto !important',\r\n },\r\n // Handle tables\r\n '& table': {\r\n width: '100% !important',\r\n tableLayout: 'fixed !important',\r\n },\r\n // Prevent absolute positioning issues\r\n '& *[style*=\"position: absolute\"]': {\r\n position: 'relative !important',\r\n },\r\n '& .email-container': {\r\n width: '85% !important',\r\n }\r\n }}\r\n dangerouslySetInnerHTML={{ __html: template.contents }}\r\n />\r\n </Box>\r\n\r\n {/* Loading Overlay */}\r\n {isLoading && (\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n backgroundColor: 'rgba(255,255,255,0.8)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 2,\r\n }}\r\n >\r\n <Skeleton variant=\"rectangular\" width=\"90%\" height=\"90%\" />\r\n </Box>\r\n )}\r\n\r\n {/* Selection Indicator */}\r\n {template?.is_default && (\r\n <Box\r\n sx={(theme) => ({\r\n position: 'absolute',\r\n top: 8,\r\n left: 8,\r\n width: 12,\r\n height: 12,\r\n borderRadius: '50%',\r\n backgroundColor: theme.palette.theme?.primary[800],\r\n zIndex: 3,\r\n })}\r\n />\r\n )}\r\n </Box>\r\n {template?.name && <Typography type='s3' weight='medium' color='theme.secondary.1000' align='center' sx={{width, mt:0.5}}>{template?.name}</Typography>}\r\n\r\n {/* Hover Controls */}\r\n {showControls && (\r\n <Fade in={isHovered} timeout={200}>\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n top: -8,\r\n right: -8,\r\n display: 'flex',\r\n gap: 0.5,\r\n zIndex: 4,\r\n backgroundColor: 'rgba(255,255,255,0.95)',\r\n border: '1px solid',\r\n borderColor: 'grey.300',\r\n borderRadius: 2,\r\n padding: 0.5,\r\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\r\n backdropFilter: 'blur(4px)',\r\n }}\r\n >\r\n <Tooltip title={`Zoom In (${Math.round(currentScale * 100)}%)`} arrow>\r\n <span>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleZoomIn}\r\n disabled={!canZoomIn}\r\n sx={{\r\n backgroundColor: 'transparent',\r\n '&:hover': { \r\n backgroundColor: 'primary.light',\r\n color: 'primary.contrastText' \r\n },\r\n '&:disabled': {\r\n opacity: 0.5\r\n }\r\n }}\r\n >\r\n <ZoomIn fontSize=\"small\" />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n\r\n <Tooltip title={`Zoom Out (${Math.round(currentScale * 100)}%)`} arrow>\r\n <span>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleZoomOut}\r\n disabled={!canZoomOut}\r\n sx={{\r\n backgroundColor: 'transparent',\r\n '&:hover': { \r\n backgroundColor: 'primary.light',\r\n color: 'primary.contrastText' \r\n },\r\n '&:disabled': {\r\n opacity: 0.5\r\n }\r\n }}\r\n >\r\n <ZoomOut fontSize=\"small\" />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n\r\n <Tooltip title=\"Refresh Preview\" arrow>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleRefresh}\r\n sx={{\r\n backgroundColor: 'transparent',\r\n '&:hover': { \r\n backgroundColor: 'primary.light',\r\n color: 'primary.contrastText' \r\n },\r\n }}\r\n >\r\n <Refresh fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n\r\n {onDelete && (\r\n <>\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n <Tooltip \r\n title={canDelete ? \"Delete Template\" : \"Cannot delete default template\"} \r\n arrow\r\n >\r\n <span>\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleDelete}\r\n disabled={!canDelete}\r\n sx={{\r\n backgroundColor: 'transparent',\r\n '&:hover': !canDelete ? {} : { \r\n backgroundColor: 'error.light',\r\n color: 'error.contrastText' \r\n },\r\n '&:disabled': {\r\n opacity: 0.5\r\n }\r\n }}\r\n >\r\n <Trash fontSize=\"small\" />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n </>\r\n )}\r\n </Box>\r\n </Fade>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport { HtmlThumbnailPreview };\r\nexport default HtmlThumbnailPreview;","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useState, useRef, useEffect, useCallback } from 'react';\r\nimport { Box, Skeleton, IconButton, Tooltip, Divider, Fade } from '@mui/material';\r\nimport { ZoomIn, ZoomOut, Refresh } from '@mui/icons-material';\r\nimport { Trash } from '../../../components/icons';\r\nimport Typography from '../../../components/typography/typography';\r\n\r\ninterface HtmlThumbnailPreviewProps {\r\n template: any;\r\n width?: number | string; \r\n height?: number;\r\n scale?: number;\r\n showControls?: boolean;\r\n onClick?: (template: any) => void;\r\n selectedTemplateId?: string;\r\n isFetching?: boolean;\r\n onDelete?: (template: any) => void;\r\n normalView?: boolean;\r\n minScale?: number;\r\n maxScale?: number;\r\n scaleStep?: number;\r\n loadingDelay?: number;\r\n refreshDelay?: number;\r\n}\r\n\r\nconst HtmlThumbnailPreviewFull: React.FC<HtmlThumbnailPreviewProps> = ({\r\n template,\r\n width = '100%',\r\n height = 800,\r\n scale = 0.25,\r\n showControls = false,\r\n onClick = null,\r\n selectedTemplateId = '',\r\n isFetching = false,\r\n onDelete,\r\n normalView = false,\r\n minScale = 0.1,\r\n maxScale = 1,\r\n scaleStep = 1.2,\r\n loadingDelay = 500,\r\n refreshDelay = 300,\r\n}) => {\r\n const [isLoading, setIsLoading] = useState(isFetching || true);\r\n const [currentScale, setCurrentScale] = useState(scale);\r\n const [error, setError] = useState<null | string>(null);\r\n const [isHovered, setIsHovered] = useState(false);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n const loadingTimeoutRef = useRef<any>(null);\r\n const refreshTimeoutRef = useRef<any>(null);\r\n\r\n const [containerPixelWidth, setContainerPixelWidth] = useState<number>(typeof width === 'number' ? width : 800);\r\n\r\n // Measure container width for responsive scaling\r\n useEffect(() => {\r\n const updateWidth = () => {\r\n if (containerRef.current) {\r\n const newWidth = containerRef.current.offsetWidth;\r\n setContainerPixelWidth(newWidth);\r\n }\r\n };\r\n updateWidth();\r\n window.addEventListener('resize', updateWidth);\r\n return () => window.removeEventListener('resize', updateWidth);\r\n }, []);\r\n\r\n const scaledWidth = containerPixelWidth / currentScale;\r\n const scaledHeight = height / currentScale;\r\n\r\n useEffect(() => {\r\n return () => {\r\n clearTimeout(loadingTimeoutRef.current);\r\n clearTimeout(refreshTimeoutRef.current);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n clearTimeout(loadingTimeoutRef.current);\r\n loadingTimeoutRef.current = setTimeout(() => setIsLoading(false), loadingDelay);\r\n return () => clearTimeout(loadingTimeoutRef.current);\r\n }, [template.contents, loadingDelay]);\r\n\r\n useEffect(() => setIsLoading(isFetching), [isFetching]);\r\n\r\n const handleZoomIn = useCallback(() => setCurrentScale(prev => Math.min(prev * scaleStep, maxScale)), [scaleStep, maxScale]);\r\n const handleZoomOut = useCallback(() => setCurrentScale(prev => Math.max(prev / scaleStep, minScale)), [scaleStep, minScale]);\r\n const handleRefresh = useCallback(() => {\r\n setIsLoading(true);\r\n setError(null);\r\n clearTimeout(refreshTimeoutRef.current);\r\n refreshTimeoutRef.current = setTimeout(() => setIsLoading(false), refreshDelay);\r\n }, [refreshDelay]);\r\n\r\n const handleClick = useCallback(() => {\r\n if (onClick && !isLoading) onClick(template);\r\n }, [onClick, template, isLoading]);\r\n\r\n const handleDelete = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\r\n e.stopPropagation();\r\n if (onDelete && !template?.is_default) onDelete(template);\r\n }, [onDelete, template]);\r\n\r\n const handleMouseEnter = useCallback(() => setIsHovered(true), []);\r\n const handleMouseLeave = useCallback(() => setIsHovered(false), []);\r\n\r\n if (isLoading) return (\r\n <Box sx={{ width, height, borderRadius: 1, overflow: 'hidden', border: '1px solid', borderColor: 'divider' }}>\r\n <Skeleton variant=\"rectangular\" width=\"100%\" height=\"100%\" animation=\"wave\" />\r\n </Box>\r\n );\r\n\r\n if (error) return (\r\n <Box sx={{\r\n width, height, borderRadius: 1, overflow: 'hidden', border: '1px solid',\r\n borderColor: 'error.main', display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n backgroundColor: 'error.light', color: 'error.contrastText'\r\n }}>\r\n Failed to load template\r\n </Box>\r\n );\r\n\r\n const isSelected = selectedTemplateId === template._id;\r\n const canZoomIn = currentScale < maxScale;\r\n const canZoomOut = currentScale > minScale;\r\n const canDelete = !template?.is_default;\r\n\r\n return (\r\n <Box\r\n ref={containerRef}\r\n sx={{ position: 'relative', width, marginInline: 'auto', display: 'inline-block' }}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n >\r\n <Box\r\n onClick={handleClick}\r\n sx={(theme) => ({\r\n width: '100%',\r\n height,\r\n marginBlock: 0,\r\n overflow: 'hidden',\r\n position: 'relative',\r\n backgroundColor: '#fff',\r\n transition: 'all 0.2s ease-in-out',\r\n '&:hover': onClick ? { boxShadow: '0 4px 16px rgba(0,0,0,0.15)', transform: 'translateY(-1px)' } : {},\r\n })}\r\n >\r\n <Box\r\n sx={{\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n justifyContent: 'center', \r\n alignItems: 'center', \r\n overflow: 'auto',\r\n backgroundColor: '#fff',\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n transform: `scale(${currentScale})`,\r\n transformOrigin: 'top left',\r\n pointerEvents: 'none',\r\n userSelect: 'none',\r\n width: containerPixelWidth,\r\n height: height,\r\n }}\r\n >\r\n <Box\r\n ref={contentRef}\r\n sx={{\r\n width: '100%',\r\n height: '100%',\r\n '& *': { maxWidth: '100% !important', boxSizing: 'border-box !important' },\r\n '& body': { margin: 0, padding: 0, overflow: 'hidden' },\r\n '& img': { maxWidth: '100% !important', height: 'auto !important' },\r\n '& table': { width: '100% !important', tableLayout: 'fixed !important' },\r\n '& *[style*=\"position: absolute\"]': { position: 'relative !important' },\r\n '& .email-container': { width: '85% !important' },\r\n }}\r\n dangerouslySetInnerHTML={{ __html: template.contents }}\r\n />\r\n </Box>\r\n </Box>\r\n\r\n {template?.is_default && (\r\n <Box sx={(theme) => ({ position: 'absolute', top: 8, left: 8, width: 12, height: 12, borderRadius: '50%', backgroundColor: theme.palette.theme.primary[800], zIndex: 3 })} />\r\n )}\r\n </Box>\r\n\r\n {template?.name && <Typography type='s3' weight='medium' color='theme.secondary.1000' align='center' sx={{ width, mt: 0.5 }}>{template?.name}</Typography>}\r\n\r\n {showControls && (\r\n <Fade in={isHovered} timeout={200}>\r\n <Box sx={{ position: 'absolute', top: -8, right: -8, display: 'flex', gap: 0.5, zIndex: 4, backgroundColor: 'rgba(255,255,255,0.95)', border: '1px solid', borderColor: 'grey.300', borderRadius: 2, padding: 0.5, boxShadow: '0 4px 12px rgba(0,0,0,0.15)', backdropFilter: 'blur(4px)' }}>\r\n <Tooltip title={`Zoom In (${Math.round(currentScale * 100)}%)`} arrow>\r\n <span><IconButton size=\"small\" onClick={handleZoomIn} disabled={!canZoomIn}><ZoomIn fontSize=\"small\" /></IconButton></span>\r\n </Tooltip>\r\n <Divider orientation=\"vertical\" flexItem />\r\n <Tooltip title={`Zoom Out (${Math.round(currentScale * 100)}%)`} arrow>\r\n <span><IconButton size=\"small\" onClick={handleZoomOut} disabled={!canZoomOut}><ZoomOut fontSize=\"small\" /></IconButton></span>\r\n </Tooltip>\r\n <Divider orientation=\"vertical\" flexItem />\r\n <Tooltip title=\"Refresh Preview\" arrow>\r\n <IconButton size=\"small\" onClick={handleRefresh}><Refresh fontSize=\"small\" /></IconButton>\r\n </Tooltip>\r\n {onDelete && <>\r\n <Divider orientation=\"vertical\" flexItem />\r\n <Tooltip title={canDelete ? \"Delete Template\" : \"Cannot delete default template\"} arrow>\r\n <span><IconButton size=\"small\" onClick={handleDelete} disabled={!canDelete}><Trash fontSize=\"small\" /></IconButton></span>\r\n </Tooltip>\r\n </>}\r\n </Box>\r\n </Fade>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default HtmlThumbnailPreviewFull;","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { \r\n DialogTitle, \r\n DialogContent, \r\n DialogActions,\r\n IconButton,\r\n Box,\r\n MenuItem\r\n} from '@mui/material';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Typography from '../../../components/typography/typography';\r\nimport Modal from '../../../components/modal/modal';\r\nimport { deleteV1TemplatesId, getV1Templates, patchV1TemplatesIdSetDefault } from '../../../api-client/api.system-feature/api';\r\nimport { getErrorMessage, getToken } from '../../../utils/common';\r\nimport Button from '../../../components/button/button';\r\n// import ModalLoader from '../../../components/loader/modal-loader';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport Select from '../../../components/select/select';\r\nimport HtmlThumbnailPreview from './html-thumbnail-preview';\r\nimport HtmlThumbnailPreviewFull from './html-thumbnail-preview-full';\r\nimport ConfirmPopUp from '../../../components/confirm-modal/confirm-modal';\r\n\r\nconst TemplateModal = ({ email, onClose, open, companies = [], templateRoutes, source = 'add' }) => {\r\n const [templates, setTemplates] = useState([]);\r\n const [selectedTemplate, setSelectedTemplate] = useState('');\r\n const [defaultTemplate, setDefaultTemplate] = useState('');\r\n const [loading, setLoding] = useState(true);\r\n const [selectedCompany, setSelectedCompany] = React.useState<number>(companies?.[0]?.id || 0);\r\n const [templateToDelete, setTemplateToDelete] = React.useState<Record<string, any> | null>(null);\r\n const [selectedTemplateForPreview, setSelectedTemplateForPreview] = useState(null);\r\n\r\n const navigate = useNavigate();\r\n\r\n const handleClose = () => {\r\n onClose();\r\n };\r\n\r\n const handleViewTemplate = () => {\r\n navigate(templateRoutes.EDIT_TEMPLATE(email._id, selectedTemplate), { \r\n state: { company_id: selectedCompany, isViewOnly: true, fromPreview: true }\r\n });\r\n };\r\n\r\n const handleTemplateSelect = (id: any) => {\r\n if (source === 'view') {\r\n const template = templates.find((t: any) => t?._id === id);\r\n setSelectedTemplateForPreview(template);\r\n setSelectedTemplate(id);\r\n handleViewTemplate();\r\n } else {\r\n setSelectedTemplate(id);\r\n }\r\n }\r\n\r\n const getTemplatesViaSubject = async () => {\r\n setLoding(true)\r\n const res = await getV1Templates({ ...getToken(), filters: `(company_id.eq=${selectedCompany}&subject_id.eq=${email._id})` })\r\n if(res?.data) {\r\n const dTemplate = res?.data?.find(t => t.is_default === true)\r\n setDefaultTemplate(dTemplate)\r\n setSelectedTemplate(dTemplate?._id)\r\n setTemplates(res?.data)\r\n }\r\n\r\n setLoding(false)\r\n }\r\n\r\n const handleDefaultTemplate = async () => {\r\n try {\r\n await patchV1TemplatesIdSetDefault({ ...getToken(), id: selectedTemplate })\r\n enqueueSnackbar('Template has been set as default');\r\n } catch (error) {\r\n const m = getErrorMessage(error?.message);\r\n enqueueSnackbar(m, { variant: 'error' });\r\n }\r\n }\r\n\r\n const handleDeleteTemplate = async () => {\r\n try {\r\n if(templateToDelete) {\r\n await deleteV1TemplatesId({ ...getToken(), id: templateToDelete?._id })\r\n enqueueSnackbar('Template has been deleted');\r\n setTemplateToDelete(null)\r\n await getTemplatesViaSubject()\r\n }\r\n } catch (error) {\r\n const m = getErrorMessage(error?.message);\r\n enqueueSnackbar(m, { variant: 'error' });\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n getTemplatesViaSubject()\r\n return () => { setLoding(true) }\r\n }, [selectedCompany])\r\n\r\n return (\r\n <div>\r\n <Modal \r\n open={open} \r\n onClose={handleClose} \r\n maxWidth=\"lg\" \r\n fullWidth\r\n aria-labelledby=\"email-template-selection\"\r\n sx={{\r\n '& .MuiDialog-paper': {\r\n height: '85vh',\r\n display: 'flex',\r\n flexDirection: 'column'\r\n }\r\n }}\r\n >\r\n\r\n {console.log(source, \"soure in modal +++++++++++++++++++++++debug\")}\r\n {/* {loading && <ModalLoader/>} */}\r\n <DialogTitle sx={{ marginBottom: '1rem', padding: '0.75rem 1rem 0.75rem 1.5rem', borderBottom: '1px solid #D3D3D4'}}>\r\n <Box display='flex' alignItems='center' gap={2}>\r\n {selectedTemplateForPreview && (\r\n <IconButton\r\n onClick={() => setSelectedTemplateForPreview(null)}\r\n size='small'\r\n sx={{ color: (theme) => theme.palette.grey[700] }}\r\n >\r\n <Typography>← Back</Typography>\r\n </IconButton>\r\n )}\r\n <Typography type='s1' weight='medium' color='theme.secondary.1000' sx={{ flex: 1, textAlign: 'center' }}> \r\n {selectedTemplateForPreview ? 'Template Preview' : (source === 'view' ? 'Template Preview' : 'Select Template')}\r\n </Typography>\r\n </Box>\r\n <Box display='flex' alignItems={'center'} gap={1} position='absolute' right='1%' top='4px'>\r\n <Typography type='s3' weight='medium' color='theme.secondary.800'> Company</Typography>\r\n <Select\r\n displayEmpty\r\n value={selectedCompany}\r\n size='small'\r\n renderValue={(value) => value ? companies.find((option) => option.value === value)?.label : 'Select Company'}\r\n // fullWidth\r\n // sx={{\r\n // bgcolor: 'white',\r\n // borderRadius: 1,\r\n // '& .MuiSelect-select': { py: 0.75 }\r\n // }}\r\n onChange={(e) => {\r\n if (e.target.value) {\r\n setSelectedCompany(e.target.value as number);\r\n }\r\n }}>\r\n {companies.map((option) => (\r\n <MenuItem key={option.value} value={option.value}>\r\n <Typography type='s3' color='theme.secondary.1000'>{option.label}</Typography>\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n <IconButton\r\n aria-label=\"close\"\r\n onClick={handleClose}\r\n size='small'\r\n sx={{\r\n color: (theme) => theme.palette.grey[500],\r\n }}\r\n >\r\n <CloseIcon fontSize='small'/>\r\n </IconButton>\r\n </Box>\r\n </DialogTitle>\r\n \r\n {\r\n selectedTemplateForPreview ? (\r\n <DialogContent sx={{ display: 'flex', flexDirection: 'column', gap: 3, width: '100%', p: 3, flex: 1, overflow: 'auto', scrollbarWidth: 'none', msOverflowStyle: 'none', '&::-webkit-scrollbar': { display: 'none' } }}>\r\n {/* Main Preview */}\r\n <Box sx={{ width: '100%', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\r\n <HtmlThumbnailPreviewFull\r\n template={selectedTemplateForPreview}\r\n width={'100%'}\r\n height={600}\r\n scale={1}\r\n showControls={true}\r\n isFetching={loading}\r\n normalView={true}\r\n />\r\n </Box>\r\n </DialogContent>\r\n ) : (\r\n <DialogContent sx={{ flex: 1, overflow: 'auto', display: 'flex', flexDirection: 'column', scrollbarWidth: 'none', msOverflowStyle: 'none', '&::-webkit-scrollbar': { display: 'none' } }}>\r\n {/* <Grid container spacing={6}> */}\r\n {!templates.length && (\r\n // <Grid item xs={12} sx={{ minHeight: 350}}>\r\n <Box display='flex' alignItems='center' width='100%' height='100%' justifyContent='center'>\r\n {!loading && <Typography type='s1' weight='medium' color='theme.secondary.1000' sx={{ textAlign: 'center' }}>No templates found</Typography>}\r\n </Box>\r\n // </Grid>\r\n )}\r\n <Box sx={{ \r\n display: 'grid', \r\n gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))', \r\n gap: 2, \r\n p: 2,\r\n justifyItems: 'center',\r\n alignItems: 'center'\r\n }}>\r\n {templates.map((template, index) => (\r\n <HtmlThumbnailPreview\r\n key={template._id || index}\r\n template={template}\r\n width={300}\r\n height={200}\r\n showControls={source === 'add'}\r\n selectedTemplateId={selectedTemplate}\r\n onClick={(template: any) => {\r\n handleTemplateSelect(template._id)\r\n }}\r\n normalView={source === 'add'}\r\n isFetching={loading}\r\n onDelete={(template: any) => setTemplateToDelete(template)}\r\n />\r\n ))}\r\n </Box>\r\n </DialogContent>\r\n )}\r\n {source === 'add' && (\r\n <DialogActions sx={{ p: 2, justifyContent: 'center', borderTop: '1px solid #D3D3D4' }}>\r\n <Button\r\n onClick={() => navigate(templateRoutes.EDIT_TEMPLATE(email._id, selectedTemplate), { state: { company_id: selectedCompany } })}\r\n disabled={!selectedTemplate}\r\n >\r\n Continue\r\n </Button>\r\n <Button\r\n onClick={() => handleDefaultTemplate()}\r\n disabled={!selectedTemplate || defaultTemplate?._id === selectedTemplate}\r\n >\r\n Set to Default\r\n </Button>\r\n </DialogActions>\r\n )}\r\n </Modal>\r\n <ConfirmPopUp\r\n open={templateToDelete !== null}\r\n onClose={() => setTemplateToDelete(null)}\r\n title='Remove Template'\r\n description='Are you sure you want to delete ?'\r\n onConfirm={() => handleDeleteTemplate()}\r\n loading={loading}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport { TemplateModal };\r\nexport default TemplateModal;","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport React from 'react';\r\n\r\nimport Modal from '../../../components/modal/modal';\r\nimport Typography from '../../../components/typography/typography';\r\nimport Button from '../../../components/button/button';\r\nimport Select from '../../../components/select/select';\r\n\r\nimport {\r\n\tBox,\r\n\tDialogActions,\r\n\tDialogContent,\r\n\tDialogProps,\r\n\tDialogTitle,\r\n\tIconButton,\r\n\tMenuItem\r\n} from '@mui/material';\r\nimport Close from '@mui/icons-material/Close';\r\n\r\nimport './company-selection-modal.scss';\r\nimport { IEmail } from '../utils/types';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\ninterface CompanySelectionModalProps {\r\n\tisOpen: boolean;\r\n\tsetIsOpen: (value: IEmail | null) => void;\r\n\tmodalProps?: DialogProps;\r\n\temail: IEmail;\r\n\tcompanies: Record<string, any>[];\r\n\ttemplateRoutes: Record<string, any>\r\n}\r\n\r\nconst CompanySelectionModal: React.FC<CompanySelectionModalProps> = ({\r\n\tisOpen,\r\n\tsetIsOpen,\r\n\tmodalProps,\r\n\tcompanies,\r\n\temail,\r\n\ttemplateRoutes\r\n}) => {\r\n\r\n\tconst navigate = useNavigate();\r\n\tconst [selectedCompany, setSelectedCompany] = React.useState<number>(0);\r\n\r\n\tconst handleModalClose = () => {\r\n\t\tsetIsOpen(null);\r\n\t};\r\n\r\n\tconst handleContinue = () => {\r\n\t\tif(!selectedCompany) {\r\n\t\t\tenqueueSnackbar('Please select a company', { variant: 'error' });\r\n\t\t\treturn;\r\n\t\t} else if(!email) {\r\n\t\t\tenqueueSnackbar('Something went wrong for a subject', { variant: 'error' });\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnavigate(templateRoutes.ADD_TEMPLATE(email._id), { state: { company_id: selectedCompany }})\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Modal\r\n\t\t\topen={isOpen}\r\n\t\t\tonClose={handleModalClose}\r\n\t\t\tmaxWidth='xs'\r\n\t\t\tfullWidth\r\n\t\t\t{...modalProps}>\r\n\t\t\t<DialogTitle className='companySelectionModal--DialogTitle'>\r\n\t\t\t\t<Typography type='s3' color='inherit' weight='medium'>\r\n\t\t\t\t\tSelect Company\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<IconButton onClick={handleModalClose}>\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\t\t\t<DialogContent className='companySelectionModal--DialogContents'>\r\n\t\t\t\t<Select\r\n\t\t\t\t\tdisplayEmpty\r\n\t\t\t\t\tvalue={selectedCompany}\r\n\t\t\t\t\tsize='small'\r\n\t\t\t\t\trenderValue={(value) => value ? companies.find((option) => option.value === value)?.label : 'Select Company'}\r\n\t\t\t\t\tfullWidth\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tbgcolor: 'white',\r\n\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\t'& .MuiSelect-select': { py: 0.75 }\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\tif (e.target.value) {\r\n\t\t\t\t\t\t\tsetSelectedCompany(e.target.value as number);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t{companies.map((option) => (\r\n\t\t\t\t\t\t<MenuItem key={option.value} value={option.value}>\r\n\t\t\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>{option.label}</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Select>\r\n\t\t\t</DialogContent>\r\n\t\t\t<DialogActions className='companySelectionModal--DialogAction'>\r\n\t\t\t\t<Box display='flex' gap={1.5}>\r\n\t\t\t\t\t<Button className='companySelectionModal--DialogAction--WhiteBtn' onClick={handleModalClose}>Cancel</Button>\r\n\t\t\t\t\t<Button onClick={() => handleContinue()} disabled={!selectedCompany}>Continue</Button>\r\n\t\t\t\t</Box>\r\n\t\t\t</DialogActions>\r\n\t\t</Modal>\r\n\t);\r\n};\r\n\r\nexport default CompanySelectionModal;\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable unused-imports/no-unused-vars */\r\nimport { useCallback, useEffect, useMemo, useState } from 'react';\r\n\r\nimport ActionBar from '../../components/action-bar/action-bar';\r\nimport viewTypes from '../../constants/action-bar';\r\nimport MaterialTable, { MaterialTableColumnProps } from '../../components/material-table/material-table';\r\nimport Typography from '../../components/typography/typography';\r\nimport Fallback from '../../components/fallback/fallback';\r\nimport Menu from '../../components/menu/menu';\r\nimport Footer from '../../components/footer/footer';\r\nimport useDeepMemo from '../../hooks/use-deep-memo';\r\nimport { PageState } from '../../contexts/page-context';\r\nimport { usePages } from '../../hooks/use-pages';\r\nimport { transformTableColumns } from '../../utils/common-utility';\r\nimport { appendConditionSafely, defaultCurrencySymbol, getToken } from '../../utils/common';\r\nimport logo from '../../assets/images';\r\nimport { IPaginationModel } from '../../@types/pagination-model';\r\nimport { fetchApi } from '../../utils/api';\r\n\r\nimport { MenuItem } from '@mui/material';\r\n\r\n// import GridCard from './grid-view/grid-view';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { enqueueSnackbar } from 'notistack';\r\n\r\nimport { templateRoutes } from './utils/common';\r\nimport { IEmail, ITemplateProps, Pagination } from './utils/types';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\nimport { usePermissions } from '../../hooks/use-permissions';\r\nimport { getV1Subjects } from '../../api-client/api.system-feature/api';\r\nimport TemplateModal from './template-modal/template-modal';\r\nimport CompanySelectionModal from './company-selection-modal/company-selection-modal';\r\n\r\nimport './templates.scss';\r\n\r\n\r\ninterface ActionData {\r\n\tlabel: string;\r\n\tposition: number;\r\n}\r\n\r\nconst Templates: React.FC<ITemplateProps> = ({ type, module, modulePath }) => {\r\n\tconst { t } = useTranslation();\r\n\tconst {\r\n\t\tactivePage: aPage,\r\n\t\tupdatePageInfo,\r\n\t\tschemaFields,\r\n\t\tgeneratedColumns,\r\n\t\tupdateGeneratedColumns,\r\n\t\t// error: pageError\r\n\t} = usePages();\r\n\tconst activePage = useDeepMemo<PageState>(aPage);\r\n\t/* LOCAL STATES */\r\n\tconst [actionAnchorEl, setActionAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst viewEmails = localStorage.getItem('email-subjects-view');\r\n\tconst [actionBarData, setActionBarData] = useState<ActionData[]>(viewEmails ? JSON.parse(viewEmails) : [{ label: 'Table', position: 0 }]);\r\n\r\n\tconst [actionBarActiveTab, setActionBarActiveTab] = useState<string>(viewTypes.TABLE);\r\n\tconst [paginationModel, setPaginationModel] = useState<Pagination>({ pageNo: 1, limit: 10, totalCount: 0, skip: 0 });\r\n\tconst [rows, setRows] = useState<any[]>([]);\r\n\tconst [isFetching, setIsFetching] = useState<boolean>(false);\r\n\tconst [selectedRow, setSelectedRow] = useState([]);\r\n\tconst [showTemplateModal, setShowTemplateModal] = useState<IEmail | null>(null);\r\n\tconst [templateModalSource, setTemplateModalSource] = useState<'view' | 'add'>('add');\r\n\tconst [showCompanySelectionModal, setShowCompanySelectionModal] = useState<IEmail | null>(null);\r\n\tconst [companies, setCompanies] = useState<Record<string, any>[]>([]);\r\n\t/* VARS */\r\n\tconst navigate = useNavigate();\r\n\tconst { pageNo, limit: pLimit, totalCount } = paginationModel;\r\n\tconst limit = activePage.page_size || pLimit;\r\n\tconst total = limit ? Math.ceil(totalCount / limit) : 0;\r\n\tconst skip = limit * (pageNo - 1);\r\n\tconst permissions = usePermissions();\r\n\tconst ROUTES = templateRoutes(modulePath, type);\r\n\r\n\tconst SubjectPermissions = permissions?.Subjects || {};\r\n\tconst ConditionsImport = permissions?.RentalTerms?.ConditionsImport || {};\r\n\r\n\tconst {\r\n\t\tcanAdd = false,\r\n\t\tcanEdit = false,\r\n\t\tcanDelete = false,\r\n\t} = SubjectPermissions;\r\n\r\n\tconst { canAdd: canImport = false } = ConditionsImport;\r\n\r\n\tconst handleNewEmail = (email) => {\r\n\t\tif (!companies?.length) {\r\n\t\t\tenqueueSnackbar('Please add a company first', { variant: 'error' })\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tif (companies?.length > 1) {\r\n\t\t\tsetShowCompanySelectionModal(email)\r\n\t\t} else {\r\n\t\t\tnavigate(ROUTES.ADD_TEMPLATE(email._id), { state: { company_id: companies[0]?.id || companies[0]?.value } })\r\n\t\t}\r\n\t};\r\n\r\n\tconst rowActionMenu = [\r\n\t\t{\r\n\t\t\tlabel: 'New Template',\r\n\t\t\thandleAction: (email: IEmail) => handleNewEmail(email),\r\n\t\t\tdisabled: (row: any) => !canEdit\r\n\t\t},\r\n\t\t{\r\n\t\t\tlabel: 'Add From Template',\r\n\t\t\thandleAction: (email: IEmail) => {\r\n setTemplateModalSource('add'); \r\n setShowTemplateModal(email); },\r\n\t\t\tdisabled: (row: any) => !canAdd\r\n\t\t}\r\n\t];\r\n\r\n\t/* LOCAL FUNCTIONS */\r\n\tconst getEmails = useCallback(\r\n\t\tasync () => {\r\n\t\t\tconst { sort, filterQueryString, search } = activePage;\r\n\t\t\tconst searchFiters = search ? `&subject.like=${search}` : '';\r\n\t\t\tconst types = [];\r\n\t\t\ttypes.push(type)\r\n\t\t\tif (type == \"email\") {\r\n\t\t\t\ttypes.push(\"approval_email\")\r\n\t\t\t}\r\n\t\t\tconst uFilters = appendConditionSafely(filterQueryString, `&type.in=[${types.join(\",\")}]&module.eq=${module}${searchFiters}`);\r\n\r\n\t\t\tconst response = await getV1Subjects({\r\n\t\t\t\t...getToken(),\r\n\t\t\t\tskip,\r\n\t\t\t\tlimit,\r\n\t\t\t\t// search,\r\n\t\t\t\t...(sort && { order: `${sort.id}:${sort.desc ? -1 : 1}` }),\r\n\t\t\t\t...(uFilters && uFilters !== '()' && { filters: uFilters })\r\n\t\t\t});\r\n\r\n\t\t\tsetRows(response?.data || []);\r\n\t\t\tsetPaginationModel({ ...paginationModel, ...(response?.pagination || {}) });\r\n\t\t},\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t[\r\n\t\t\tlimit,\r\n\t\t\tskip,\r\n\t\t\tactivePage?.search,\r\n\t\t\tactivePage?.filterQueryString,\r\n\t\t\tactivePage?.sort\r\n\t\t]\r\n\t);\r\n\r\n\tconst getCopmanies = async () => {\r\n\t\tconst companiesArr = await fetchApi({ apiKey: 'company', filters: { skip: 0, limit: 100, order: \"id:1\" } });\r\n\t\tsetCompanies(companiesArr?.data || []);\r\n\t}\r\n\r\n\tconst tableRows = useMemo(() => rows || [], [rows]);\r\n\r\n\tconst tableColumns = useMemo(\r\n\t\t() =>\r\n\t\t\ttransformTableColumns({\r\n\t\t\t\tcolumns: generatedColumns.columns,\r\n\t\t\t\tcurrencySymbol: (row) =>\r\n\t\t\t\t\trow.original?.currency_data?.symbol || defaultCurrencySymbol(),\r\n\t\t\t\ttranslationFn: t,\r\n\t\t\t\tenableFooter: true,\r\n\t\t\t\t// redirectionLink: ROUTES.VIEW,\r\n\t\t\t\t// redirectionLinkState: (row) => ({ termsAndCondition: row.original }),\r\n\t\t\t\trows: tableRows,\r\n\t\t\t\tstatusClasses: ``,\r\n\t\t\t}),\r\n\t\t[tableRows, t, generatedColumns.columns]\r\n\t);\r\n\r\n\tconst handlePaginationModel = (model: IPaginationModel) => {\r\n\t\tif (activePage.page_size != model?.limit) {\r\n\t\t\tupdatePageInfo({ page_size: model.limit });\r\n\t\t}\r\n\t\tsetPaginationModel(model);\r\n\t};\r\n\r\n\tconst cleanUp = () => {\r\n\t\tconst pModel = { pageNo: 1, limit: 10, totalCount: 0 };\r\n\t\tsetPaginationModel(pModel);\r\n\t};\r\n\r\n\t/* USE EFFECTS */\r\n\tuseEffect(() => {\r\n\t\tgetEmails();\r\n\t}, [getEmails]);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tgetCopmanies();\r\n\t\treturn cleanUp;\r\n\t}, []);\r\n\tuseEffect(() => {\r\n\t\tif (actionBarData?.length) {\r\n\t\t\tlocalStorage.setItem('email-subjects-view', JSON.stringify(actionBarData));\r\n\t\t}\r\n\t}, [actionBarData]);\r\n\r\n\t/* JSX STRUCTURE STARTED */\r\n\treturn (\r\n\t\t<section className='templates'>\r\n\t\t\t<ActionBar\r\n\t\t\t\ttitle={type === 'email' ? 'Emails' : 'PDFs'}\r\n\t\t\t\tdata={actionBarData}\r\n\t\t\t\tsetData={setActionBarData}\r\n\t\t\t\tactive={actionBarActiveTab}\r\n\t\t\t\tsetActive={setActionBarActiveTab}\r\n\t\t\t\thandleSearch={(search) => {\r\n\t\t\t\t\tupdatePageInfo({ search });\r\n\t\t\t\t\tsetPaginationModel({ ...paginationModel, pageNo: 1 });\r\n\t\t\t\t}}\r\n\t\t\t\tdisabledViews={['Kanban', 'Calendar', 'Gantt', viewTypes.GRID]}\r\n\t\t\t\tfields={schemaFields}\r\n\t\t\t\tselectedIds={selectedRow}\r\n\t\t\t\tbutton={false}\r\n\t\t\t/>\r\n\t\t\t{actionBarActiveTab === viewTypes.TABLE && (\r\n\t\t\t\t<MaterialTable\r\n\t\t\t\t\trows={tableRows || []}\r\n\t\t\t\t\tcolumns={tableColumns}\r\n\t\t\t\t\tpaginationModel={paginationModel}\r\n\t\t\t\t\ttotalPages={total}\r\n\t\t\t\t\tcolumnOrder={['mrt-row-select', ...generatedColumns.orderKeys]}\r\n\t\t\t\t\tstates={{ isLoading: isFetching }}\r\n\t\t\t\t\tonSortingChange={(sort) => updatePageInfo({ sort })}\r\n\t\t\t\t\tenableColumnDragging={false}\r\n\t\t\t\t\tenableEditing={false}\r\n\t\t\t\t\tonSelectRow={(r) =>\r\n\t\t\t\t\t\tsetSelectedRow(r.map((ele) => ele.original.id))\r\n\t\t\t\t\t}\r\n\t\t\t\t\tenableAddCustomField={false}\r\n\t\t\t\t\trowActionMenu={rowActionMenu}\r\n\t\t\t\t\tisResetRow={false}\r\n\t\t\t\t\thandleColumnOrdering={(colOrder) =>\r\n\t\t\t\t\t\tupdateGeneratedColumns({ orderKeys: colOrder.slice(1) })\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonColumnVisibility={(columns: MaterialTableColumnProps[]) =>\r\n\t\t\t\t\t\tupdateGeneratedColumns({ columns: columns })\r\n\t\t\t\t\t}\r\n\t\t\t\t\tshowPreview={true}\r\n\t\t\t\t\t\t\thandlePreview={(item) => {\r\n\t\t\t\t\t\t\t\t\tsetTemplateModalSource('view');\r\n\t\t\t\t\t\t\t\t\tsetShowTemplateModal(item);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{actionBarActiveTab === viewTypes.GRID && (\r\n\t\t\t\t<GridCard\r\n\t\t\t\t\tdata={tableRows}\r\n\t\t\t\t\trowActionMenu={rowActionMenu}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\r\n\t\t\t{!actionBarActiveTab && (\r\n\t\t\t\t<Fallback\r\n\t\t\t\t\theading={t('rental.settings.termsAndConditions.title')}\r\n\t\t\t\t\tsubHeading='No data available'\r\n\t\t\t\t\ticon={<img src={logo.invoiceFallback} />}>\r\n\t\t\t\t</Fallback>\r\n\t\t\t)}\r\n\r\n\t\t\t<Footer\r\n\t\t\t\ttotal={total}\r\n\t\t\t\tpaginationModel={{\r\n\t\t\t\t\t...paginationModel,\r\n\t\t\t\t\tlimit: activePage.page_size\r\n\t\t\t\t}}\r\n\t\t\t\thandlePaginationModel={handlePaginationModel}\r\n\t\t\t\tresource=''\r\n\t\t\t/>\r\n\r\n\t\t\t{/* Action Menu */}\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={actionAnchorEl}\r\n\t\t\t\topen={Boolean(actionAnchorEl)}\r\n\t\t\t\tonClose={() => setActionAnchorEl(null)}>\r\n\t\t\t\t<MenuItem>\r\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>\r\n\t\t\t\t\t\t{t('common.upload')}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t</MenuItem>\r\n\t\t\t\t<MenuItem>\r\n\t\t\t\t\t<Typography type='s4' color='theme.secondary.1000'>\r\n\t\t\t\t\t\t{t('common.print')}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t</MenuItem>\r\n\t\t\t</Menu>\r\n\t\t\t{showTemplateModal && (\r\n\t\t\t\t<TemplateModal\r\n\t\t\t\t\temail={showTemplateModal}\r\n\t\t\t\t\tonClose={() => setShowTemplateModal(null)}\r\n\t\t\t\t\topen={showTemplateModal !== null}\r\n\t\t\t\t\tcompanies={companies}\r\n\t\t\t\t\ttemplateRoutes={ROUTES}\r\n\t\t\t\t\tsource={templateModalSource}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t\t{showCompanySelectionModal && (\r\n\t\t\t\t<CompanySelectionModal\r\n\t\t\t\t\tisOpen={showCompanySelectionModal !== null}\r\n\t\t\t\t\tsetIsOpen={setShowCompanySelectionModal}\r\n\t\t\t\t\tcompanies={companies}\r\n\t\t\t\t\temail={showCompanySelectionModal}\r\n\t\t\t\t\ttemplateRoutes={ROUTES}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</section>\r\n\t);\r\n};\r\n\r\nexport default Templates;\r\n","import React from \"react\";\r\nimport AddTemplate from \"./add-template/add-template\";\r\nimport Templates from \"./templates\";\r\nimport { TEMPLATE_EDITOR_PATHS } from \"./utils/constant\";\r\n\r\nexport const templateEditorRoutes = (modulePath: string, module: string) => [\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_LIST('email')}`,\r\n\t\telement: <Templates type=\"email\" module={module} modulePath={modulePath}/>\r\n\t},\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_ADD('email')}`,\r\n\t\telement: <AddTemplate modulePath={modulePath} type=\"email\" module={module}/>\r\n\t},\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_EDIT('email')}`,\r\n\t\telement: <AddTemplate modulePath={modulePath} type=\"email\" module={module}/>\r\n\t},\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_LIST('pdf')}`,\r\n\t\telement: <Templates module={module} type=\"pdf\" modulePath={modulePath}/>\r\n\t},\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_ADD('pdf')}`,\r\n\t\telement: <AddTemplate modulePath={modulePath} type=\"pdf\" module={module}/>\r\n\t},\r\n\t{\r\n\t\tpath: `${TEMPLATE_EDITOR_PATHS.TEMPLATES_EDIT('pdf')}`,\r\n\t\telement: <AddTemplate modulePath={modulePath} type=\"pdf\" module={module}/>\r\n\t}\r\n]","import { MaterialTableColumnProps } from \"../../../components/material-table/material-table\";\r\n\r\nexport const textOptions = [\r\n { label: 'Heading 1', value: 'heading' },\r\n { label: 'Heading 2', value: 'heading-2' },\r\n { label: 'Heading 3', value: 'heading-3' },\r\n { label: 'Heading 4', value: 'heading-4' },\r\n { label: 'Body', value: 'text' },\r\n { label: 'Text Block', value: 'text-block' },\r\n]\r\n\r\nexport const emailColumns:MaterialTableColumnProps[] = [\r\n {\r\n header: 'ID',\r\n accessorKey: '_id',\r\n visible: true,\r\n type: 'string'\r\n },\r\n {\r\n header: 'Date',\r\n accessorKey: 'created_at',\r\n visible: true,\r\n type: 'date'\r\n },\r\n {\r\n header: 'Subject',\r\n accessorKey: 'subject',\r\n visible: true,\r\n type: 'string'\r\n },\r\n]"],"names":["aggregationFns","data","column","useEffect","jsxs","Fragment","jsx","Typography","Menu","MenuItem","Component","useAuth","Loader","Outlet","Navigate","Pathname","createAsyncThunk","rows","columns","columnOrder","createSlice","initialState","state","useAppDispatch","useAppSelector","useMemo","DefaultAggregation","Button","MaterialTable","Footer","styled","Grid","images","Box","Yup","useForm","yupResolver","useState","useLocation","useNavigate","getApiConfig","DynamicInput","Eye","EyeOff","Toast","GridColumnIcon","LoginContainer","validationSchema","LeftGrid","RightGrid","FlexBox","useSearchParams","Paragraph","Hashtag","ArrowCircleDown","Calendar","PaperClip","Link","Email","Phone","DollarCircle","Clock","Location","CheckboxSquare","Image","LinkHorizontal","InfoCircle","ToggleSwitch","RadioButton","Select","Stack","COLUMN_PER_ROW_OPTIONS","fields","element","useRef","formatText","useCallback","_","elementJSON","FormControl","TextField","Slider","FormControlLabel","Checkbox","Add","Modal","DialogTitle","IconButton","Close","DialogContent","DialogActions","enqueueSnackbar","Trash","_a","SECTION_TYPES","CloseIcon","generateRandomId","RadioGroup","Radio","memo","DynamicPhone","DynamicSelect","DynamicDate","DynamicTime","DynamicMedia","DynamicInfo","DynamicToggleButton","DynamicRadioButton","DynamicCheckBox","DynamicTable","DynamicElementHOC","PathnameAccounting","PathnameInventory","PathnameManufacturing","PathnamePurchase","PathnameCrm","PathnameRental","PathnameUsers","PathnameHrms","text","module","section","tabsData","formBuilderDeConversion","useTranslation","useFieldArray","createElement","formWithMembers","id","elementPerColumn","formBuilderConversion","patchFormDataById","getErrorMessage","formatLabel","getFormDataById","getFieldsByFormId","ErpLoader","DndProvider","HTML5Backend","FormHeader","TabBar","DynamicSectionHOC","FormParser","InputAdornment","Remove","_interopRequireDefault","require$$0","default_1","_createSvgIcon","require$$1","_jsxRuntime","require$$2","identifier","TEMPLATE_EDITOR_PATHS","initialStyles","AppBar","Toolbar","RouterLink","ZoomOut","ZoomIn","Divider","ZoomOutMap","Edit","CodeOutlinedIcon","CustomEditor","lazy","Suspense","extractStyles","useDraggable","useDroppable","Skeleton","Paper","DragIndicatorIcon","Save","Fade","Chip","SplitIcon","StyledToggleButtonGroup","ToggleButtonGroup","toggleButtonGroupClasses","Tooltip","ToggleButton","FormatAlignLeftIcon","FormatAlignCenterIcon","FormatAlignRightIcon","FormatAlignJustifyIcon","TextControls","debounce","FormatBoldIcon","FormatItalicIcon","FormatUnderlinedIcon","ColorLensIcon","ColorPickerInput","Android12Switch","Switch","styles","MuiAccordion","tableData","table","_b","_c","_d","Tabs","Tab","RefreshIcon","AddIcon","SearchableSelect","row","Alert","AccordionSummary","ExpandMoreIcon","AccordionDetails","MergeIcon","Table","TableHead","TableRow","TableCell","TableBody","Dialog","ListItem","ListItemIcon","ListItemText","file","uploadFiles","getToken","postV1Drive","useDropzone","FileCode","CircularProgress","TextIcon","Heading","ImageIcon","image","TableIcon","SignatureIcon","QrCodeIcon","BarcodeIcon","getV1Drive","error","SearchBar","Accordion","EditorSection","CheckIcon","Container","templateRoutes","patchV1TemplatesId","postV1Templates","useParams","type","uuidv4","getV1SubjectsId","getV1FormBuilderRelationalSchemaFieldsName","relation_table","getV1TemplatesId","getV1TemplateHeaderFooterCompanyIdHeaderFooter","headerSections","footerSections","patchV1TemplateHeaderFooterId","postV1TemplateHeaderFooter","DndContext","pointerWithin","Refresh","email","getV1Templates","patchV1TemplatesIdSetDefault","deleteV1TemplatesId","template","ConfirmPopUp","usePages","useDeepMemo","viewTypes","usePermissions","appendConditionSafely","getV1Subjects","fetchApi","transformTableColumns","defaultCurrencySymbol","ActionBar","Fallback","logo"],"mappings":"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,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN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","x_google_ignoreList":[33,37,38,43,44,45,46,47,48,49,56,57,63]}
|