@erpsquad/common 1.8.1 → 1.8.3
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/CHANGELOG.md +253 -253
- package/CSS_SETUP.md +67 -0
- package/QUICK_START.md +34 -0
- package/dist/_virtual/index/index.esm10.js +3 -3
- package/dist/_virtual/index/index.esm11.js +2 -4
- package/dist/_virtual/index/index.esm11.js.map +1 -1
- package/dist/_virtual/index/index.esm2.js +4 -2
- package/dist/_virtual/index/index.esm2.js.map +1 -1
- package/dist/_virtual/index/index.esm3.js +3 -3
- package/dist/_virtual/index/index.esm4.js +3 -3
- package/dist/_virtual/index/index.esm5.js +3 -3
- package/dist/_virtual/index/index.esm6.js +3 -3
- package/dist/_virtual/index/index.esm7.js +3 -3
- package/dist/_virtual/index/index.esm8.js +3 -3
- package/dist/_virtual/index/index.esm9.js +3 -3
- package/dist/_virtual/index/index10.js +1 -1
- package/dist/_virtual/index/index11.js +1 -1
- package/dist/_virtual/index/index2.js +1 -1
- package/dist/_virtual/index/index3.js +1 -1
- package/dist/_virtual/index/index4.js +1 -1
- package/dist/_virtual/index/index5.js +1 -1
- package/dist/_virtual/index/index6.js +1 -1
- package/dist/_virtual/index/index7.js +1 -1
- package/dist/_virtual/index/index8.js +1 -1
- package/dist/_virtual/index/index9.js +1 -1
- package/dist/api-client/api.accounting/api/index.esm.js.map +1 -1
- package/dist/api-client/api.accounting/api/index.js.map +1 -1
- package/dist/api-client/api.drive/api/index.esm.js.map +1 -1
- package/dist/api-client/api.drive/api/index.js.map +1 -1
- package/dist/api-client/api.inventory/api/index.esm.js.map +1 -1
- package/dist/api-client/api.inventory/api/index.js.map +1 -1
- package/dist/api-client/api.manufacturing/api/index.esm.js.map +1 -1
- package/dist/api-client/api.manufacturing/api/index.js.map +1 -1
- package/dist/api-client/api.purchase/api/index.esm.js.map +1 -1
- package/dist/api-client/api.purchase/api/index.js.map +1 -1
- package/dist/api-client/api.rbac/api/index.esm.js.map +1 -1
- package/dist/api-client/api.rbac/api/index.js.map +1 -1
- package/dist/api-client/api.rental/api/index.esm.js.map +1 -1
- package/dist/api-client/api.rental/api/index.js.map +1 -1
- package/dist/api-client/api.sales/api/index.esm.js.map +1 -1
- package/dist/api-client/api.sales/api/index.js.map +1 -1
- package/dist/api-client/api.system-feature/api/index.esm.js.map +1 -1
- package/dist/api-client/api.system-feature/api/index.js.map +1 -1
- package/dist/api-client/api.user/api/index.esm.js.map +1 -1
- package/dist/api-client/api.user/api/index.js.map +1 -1
- package/dist/api-client/index.d.ts +39 -39
- package/dist/components/action-bar/action-bar/index.esm.js +56 -4
- package/dist/components/action-bar/action-bar/index.esm.js.map +1 -1
- package/dist/components/action-bar/action-bar/index.js +28 -18
- package/dist/components/action-bar/action-bar/index.js.map +1 -1
- package/dist/components/change-user-password-modal/change-user-password-modal/index.esm.js.map +1 -1
- package/dist/components/change-user-password-modal/change-user-password-modal/index.js.map +1 -1
- package/dist/components/editor/custom-editor/index.esm.js +1 -1
- package/dist/components/editor/custom-editor/index.esm.js.map +1 -1
- package/dist/components/editor/custom-editor/index.js +1 -1
- package/dist/components/editor/custom-editor/index.js.map +1 -1
- package/dist/components/filter/filter/index.esm.js +1 -1
- package/dist/components/filter/filter/index.esm.js.map +1 -1
- package/dist/components/filter/filter/index.js +1 -1
- package/dist/components/filter/filter/index.js.map +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.esm.js.map +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.js.map +1 -1
- package/dist/components/header/header/index.esm.js +1 -1
- package/dist/components/header/header/index.esm.js.map +1 -1
- package/dist/components/header/header/index.js +1 -1
- package/dist/components/header/header/index.js.map +1 -1
- package/dist/components/header/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/header/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/components/header/redux/actionCreator/index.js +1 -1
- package/dist/components/header/redux/actionCreator/index.js.map +1 -1
- package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.js +1 -1
- package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.js.map +1 -1
- package/dist/components/reports-title-bar/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/reports-title-bar/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/components/reports-title-bar/redux/actionCreator/index.js +1 -1
- package/dist/components/reports-title-bar/redux/actionCreator/index.js.map +1 -1
- package/dist/components/reset-password-modal/reset-password-modal/index.esm.js.map +1 -1
- package/dist/components/reset-password-modal/reset-password-modal/index.js.map +1 -1
- package/dist/components/share-modal/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/share-modal/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/components/share-modal/redux/actionCreator/index.js +1 -1
- package/dist/components/share-modal/redux/actionCreator/index.js.map +1 -1
- package/dist/components/sub-header-doc/sub-header-doc/index.esm.js.map +1 -1
- package/dist/components/sub-header-doc/sub-header-doc/index.js.map +1 -1
- package/dist/components/upload/upload/index.esm.js +2 -2
- package/dist/components/upload/upload/index.esm.js.map +1 -1
- package/dist/components/upload/upload/index.js +2 -2
- package/dist/components/upload/upload/index.js.map +1 -1
- package/dist/constants/modules/index.esm.js.map +1 -1
- package/dist/constants/modules/index.js.map +1 -1
- package/dist/constants/pathnames/pathname/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.accounting/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.accounting/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.crm/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.crm/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.document/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.document/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.hrms/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.hrms/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.inventory/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.inventory/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.manufacturing/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.manufacturing/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.office/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.office/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.procurement/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.procurement/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.project/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.project/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.quotes/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.quotes/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.rental/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.rental/index.js.map +1 -1
- package/dist/constants/pathnames/pathname.user/index.esm.js.map +1 -1
- package/dist/constants/pathnames/pathname.user/index.js.map +1 -1
- package/dist/constants/route-page-map/index.esm.js.map +1 -1
- package/dist/constants/route-page-map/index.js.map +1 -1
- package/dist/contexts/AuthContext/index.esm.js +2 -2
- package/dist/contexts/AuthContext/index.esm.js.map +1 -1
- package/dist/contexts/AuthContext/index.js +1 -1
- package/dist/contexts/AuthContext/index.js.map +1 -1
- package/dist/contexts/languageContext/index.esm.js +1 -1
- package/dist/contexts/languageContext/index.esm.js.map +1 -1
- package/dist/contexts/languageContext/index.js +1 -1
- package/dist/contexts/languageContext/index.js.map +1 -1
- package/dist/contexts/page-context/index.esm.js +0 -4
- package/dist/contexts/page-context/index.esm.js.map +1 -1
- package/dist/contexts/page-context/index.js +1 -1
- package/dist/contexts/page-context/index.js.map +1 -1
- package/dist/hooks/use-material-calculations/index.esm.js +2 -2
- package/dist/hooks/use-material-calculations/index.esm.js.map +1 -1
- package/dist/hooks/use-material-calculations/index.js.map +1 -1
- package/dist/hooks/use-translations/index.esm.js.map +1 -1
- package/dist/hooks/use-translations/index.js.map +1 -1
- package/dist/hooks/useLanguageFallback/index.esm.js +2 -2
- package/dist/hooks/useLanguageFallback/index.esm.js.map +1 -1
- package/dist/hooks/useLanguageFallback/index.js.map +1 -1
- package/dist/hooks/useLocationFilter/index.esm.js +2 -2
- package/dist/hooks/useLocationFilter/index.esm.js.map +1 -1
- package/dist/hooks/useLocationFilter/index.js.map +1 -1
- package/dist/layout/fullScreen/fullScreen/index.esm.js.map +1 -1
- package/dist/layout/fullScreen/fullScreen/index.js.map +1 -1
- package/dist/layout/index.d.ts +3 -3
- package/dist/layout/sidebarScreen/sidebarScreen/index.esm.js.map +1 -1
- package/dist/layout/sidebarScreen/sidebarScreen/index.js.map +1 -1
- package/dist/node_modules/@asseinfo/react-kanban/dist/index/index.esm.js +2 -2
- package/dist/node_modules/@asseinfo/react-kanban/dist/index/index.js +1 -1
- package/dist/node_modules/@asseinfo/react-kanban/dist/index/index.js.map +1 -1
- package/dist/node_modules/@glideapps/glide-data-grid-cells/dist/js/article-cell-editor-JDI676YI/index.esm.js +1 -1
- package/dist/node_modules/@glideapps/glide-data-grid-cells/dist/js/article-cell-editor-JDI676YI/index.js +2 -2
- package/dist/node_modules/@glideapps/glide-data-grid-cells/dist/js/article-cell-editor-JDI676YI/index.js.map +1 -1
- package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.esm.js +4 -4
- package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.esm.js.map +1 -1
- package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.js +1 -1
- package/dist/node_modules/@mui/material/Hidden/HiddenJs/index.js.map +1 -1
- package/dist/node_modules/@mui/system/colorManipulator/index.esm.js +2 -2
- package/dist/node_modules/@mui/system/colorManipulator/index.js +1 -1
- package/dist/node_modules/@mui/system/colorManipulator/index.js.map +1 -1
- package/dist/node_modules/@mui/system/createStyled/index.esm.js +6 -6
- package/dist/node_modules/@mui/system/createStyled/index.js +1 -1
- package/dist/node_modules/@mui/system/useThemeWithoutDefault/index.esm.js +1 -1
- package/dist/node_modules/@mui/system/useThemeWithoutDefault/index.js +1 -1
- package/dist/node_modules/@mui/utils/esm/elementTypeAcceptingRef/elementTypeAcceptingRef/index.js.map +1 -1
- package/dist/node_modules/@popperjs/core/lib/modifiers/applyStyles/index.js.map +1 -1
- package/dist/node_modules/@popperjs/core/lib/modifiers/arrow/index.js.map +1 -1
- package/dist/node_modules/@popperjs/core/lib/modifiers/computeStyles/index.js.map +1 -1
- package/dist/node_modules/@popperjs/core/lib/modifiers/flip/index.js.map +1 -1
- package/dist/node_modules/@popperjs/core/lib/modifiers/hide/index.js.map +1 -1
- package/dist/node_modules/@popperjs/core/lib/modifiers/offset/index.js.map +1 -1
- package/dist/node_modules/@popperjs/core/lib/modifiers/popperOffsets/index.js.map +1 -1
- package/dist/node_modules/@popperjs/core/lib/modifiers/preventOverflow/index.js.map +1 -1
- package/dist/node_modules/@toast-ui/editor/dist/esm/index/index.esm.js +21 -21
- package/dist/node_modules/@toast-ui/editor/dist/esm/index/index.esm.js.map +1 -1
- package/dist/node_modules/@toast-ui/editor/dist/toastui-editor-viewer/index.esm.js +25 -25
- package/dist/node_modules/@toast-ui/editor/dist/toastui-editor-viewer/index.esm.js.map +1 -1
- package/dist/node_modules/{@glideapps/glide-data-grid-cells/node_modules/@toast-ui → @toast-ui}/react-editor/dist/esm/index/index.esm.js +2 -2
- package/dist/node_modules/@toast-ui/react-editor/dist/esm/index/index.esm.js.map +1 -0
- package/dist/node_modules/@toast-ui/react-editor/dist/esm/index/index.js +2 -0
- package/dist/node_modules/@toast-ui/react-editor/dist/esm/index/index.js.map +1 -0
- package/dist/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/redux/actionCreator/index.js.map +1 -1
- package/dist/redux/slices/headerSlice/index.esm.js +2 -2
- package/dist/redux/slices/headerSlice/index.esm.js.map +1 -1
- package/dist/redux/slices/headerSlice/index.js.map +1 -1
- package/dist/redux/slices/inventoryReportsTitleBarSlice/index.esm.js +2 -2
- package/dist/redux/slices/inventoryReportsTitleBarSlice/index.esm.js.map +1 -1
- package/dist/redux/slices/inventoryReportsTitleBarSlice/index.js.map +1 -1
- package/dist/redux/slices/reportsTitleBarSlice/index.esm.js +2 -2
- package/dist/redux/slices/reportsTitleBarSlice/index.esm.js.map +1 -1
- package/dist/redux/slices/reportsTitleBarSlice/index.js.map +1 -1
- package/dist/redux/slices/shareSlice/index.esm.js +2 -2
- package/dist/redux/slices/shareSlice/index.esm.js.map +1 -1
- package/dist/redux/slices/shareSlice/index.js.map +1 -1
- package/dist/server/index.esm.js.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/style.css +2 -2
- package/dist/utils/api/index.esm.js +4 -4
- package/dist/utils/api/index.esm.js.map +1 -1
- package/dist/utils/api/index.js +1 -1
- package/dist/utils/api/index.js.map +1 -1
- package/dist/utils/common/index.esm.js +8 -8
- package/dist/utils/common/index.esm.js.map +1 -1
- package/dist/utils/common/index.js +1 -1
- package/dist/utils/common/index.js.map +1 -1
- package/dist/utils/date-range/index.esm.js.map +1 -1
- package/dist/utils/date-range/index.js.map +1 -1
- package/dist/utils/menu-filter/index.esm.js.map +1 -1
- package/dist/utils/menu-filter/index.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/actionCreator/index.esm.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/actionCreator/index.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/reducer/index.esm.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/reducer/index.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/state/index.esm.js.map +1 -1
- package/dist/views/afterAuth/dashboard/redux/state/index.js.map +1 -1
- package/dist/views/beforeAuth/components/share-modal-data/share-modal-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/share-modal-data/share-modal-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/shared-pages-data/shared-pages-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/shared-pages-data/shared-pages-data/index.js.map +1 -1
- package/dist/views/beforeAuth/components/user-dashboard-data/user-dashboard-data/index.esm.js.map +1 -1
- package/dist/views/beforeAuth/components/user-dashboard-data/user-dashboard-data/index.js.map +1 -1
- package/dist/views/template-editor/add-template/add-template/index.esm.js.map +1 -1
- package/dist/views/template-editor/add-template/add-template/index.js.map +1 -1
- package/dist/views/template-editor/company-selection-modal/company-selection-modal/index.esm.js.map +1 -1
- package/dist/views/template-editor/company-selection-modal/company-selection-modal/index.js.map +1 -1
- package/dist/views/template-editor/components/EditorCanvas/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/EditorCanvas/index.js.map +1 -1
- package/dist/views/template-editor/components/EditorHeader/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/EditorHeader/index.js.map +1 -1
- package/dist/views/template-editor/components/EditorSection/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/EditorSection/index.js.map +1 -1
- package/dist/views/template-editor/components/EditorSidebar/index.esm.js +3 -3
- package/dist/views/template-editor/components/EditorSidebar/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/EditorSidebar/index.js +14 -14
- package/dist/views/template-editor/components/EditorSidebar/index.js.map +1 -1
- package/dist/views/template-editor/components/SectionFlowEditor/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/SectionFlowEditor/index.js.map +1 -1
- package/dist/views/template-editor/components/SectionFormatPanel/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/SectionFormatPanel/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/AlignmentControl/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/AlignmentControl/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/ButtonControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/ButtonControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/CodeControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/CodeControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/DividerControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/DividerControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/ImageControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/ImageControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/SignatureControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/SignatureControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/TableControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/TableControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/TextControls/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/TextControls/index.js.map +1 -1
- package/dist/views/template-editor/components/controllers/border-control/index.esm.js.map +1 -1
- package/dist/views/template-editor/components/controllers/border-control/index.js.map +1 -1
- package/dist/views/template-editor/edit-section-modal/edit-section-modal/index.esm.js.map +1 -1
- package/dist/views/template-editor/edit-section-modal/edit-section-modal/index.js.map +1 -1
- package/dist/views/template-editor/routes/index.esm.js.map +1 -1
- package/dist/views/template-editor/routes/index.js.map +1 -1
- package/dist/views/template-editor/template-modal/html-thumbnail-preview/index.esm.js.map +1 -1
- package/dist/views/template-editor/template-modal/html-thumbnail-preview/index.js.map +1 -1
- package/dist/views/template-editor/template-modal/template-modal/index.esm.js.map +1 -1
- package/dist/views/template-editor/template-modal/template-modal/index.js.map +1 -1
- package/dist/views/template-editor/template-name-modal/template-name-modal/index.esm.js.map +1 -1
- package/dist/views/template-editor/template-name-modal/template-name-modal/index.js.map +1 -1
- package/dist/views/template-editor/templates/index.esm.js +1 -1
- package/dist/views/template-editor/templates/index.esm.js.map +1 -1
- package/dist/views/template-editor/templates/index.js +1 -1
- package/dist/views/template-editor/templates/index.js.map +1 -1
- package/dist/views/template-editor/utils/common/index.esm.js.map +1 -1
- package/dist/views/template-editor/utils/common/index.js.map +1 -1
- package/dist/views/template-editor/utils/constant/index.esm.js.map +1 -1
- package/dist/views/template-editor/utils/constant/index.js.map +1 -1
- package/dist/views/template-editor/utils/style-extractor/index.esm.js.map +1 -1
- package/dist/views/template-editor/utils/style-extractor/index.js.map +1 -1
- package/package.json +4 -2
- package/src/styles/README.md +287 -287
- package/src/styles/all.scss +7 -7
- package/src/styles/animations.scss +5 -5
- package/src/styles/css/reset.css +1 -1
- package/src/styles/index.ts +146 -146
- package/src/styles/mixins.scss +5 -5
- package/src/styles/sass/main.scss +11 -11
- package/src/styles/utils.scss +5 -5
- package/src/styles/variables.scss +4 -4
- package/dist/node_modules/@glideapps/glide-data-grid-cells/node_modules/@toast-ui/react-editor/dist/esm/index/index.esm.js.map +0 -1
- package/dist/node_modules/@glideapps/glide-data-grid-cells/node_modules/@toast-ui/react-editor/dist/esm/index/index.js +0 -2
- package/dist/node_modules/@glideapps/glide-data-grid-cells/node_modules/@toast-ui/react-editor/dist/esm/index/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../src/contexts/page-context.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\n/* eslint-disable no-mixed-spaces-and-tabs */\n\nimport React, { createContext, useCallback, useEffect, useMemo, useState, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport {\n\tgetV1FilterResource,\n\tgetV1FormBuilder,\n\tgetV1FormBuilderSchemaFieldsName,\n\tgetV1PagesResource,\n\tpatchV1PagesPageId\n} from '../api-client/api.system-feature/api';\nimport { IResources, routeToColumnsMap, routeToResourceMap } from '../constants/route-page-map'; // Removed - should be passed as props or configured by consuming app\nimport { getToken } from '../utils/common';\nimport { removeIdStaticIdsFromMongoObject } from '../utils/common';\nimport { RuleGroupType } from 'react-querybuilder';\nimport { MaterialTableColumnProps } from '../components/material-table/material-table';\nimport _ from 'lodash';\nimport { formatLabel } from '../utils/format-text';\nimport ErpLoader from '../components/loaders/erp-loader';\nimport { enqueueSnackbar } from 'notistack';\nimport { useTranslation } from 'react-i18next';\nimport { useAuth } from '../hooks/useAuth';\n// import { usePermissions } from '../hooks/use-permissions';\n\n/* Interfaces and types */\nexport type ViewType = 'Table' | 'Grid' | 'Kanban' | 'Calendar' | 'Gantt' | '';\n\ninterface SchemaFields {\n\tselect: string;\n\talias: string;\n\ttype: string;\n\tfilter_type?: string;\n\tfilter_name?: string;\n\trequired?: boolean;\n\tisOrderAllowed?: boolean;\n\tisDefault?: boolean;\n\tisFilterAllowed?: boolean;\n\tlabel?: string;\n\tkey: string;\n\taccessorKey?: string;\n\tjoinKey?: string;\n\tenum?: string | string[];\n}\nexport interface SavedViewType {\n\tlabel: ViewType;\n\tposition: number;\n}\nexport interface PageState {\n\t_id: string | number;\n\tname: string;\n\tpage_size: number;\n\tcolumn_order: string[];\n\tvisible_columns: MaterialTableColumnProps[];\n\tviews: SavedViewType[];\n\tactive_view: ViewType;\n\tfilters: RuleGroupType;\n\tfilterQueryString: string;\n\tsort: Record<any, any> | null;\n\tsearch: string;\n\tenabled_views: ViewType[];\n\tisShared: boolean;\n\tcolumn_sizes: Record<string, number>;\n}\n\nexport interface GeneratedColumnsState {\n\tcolumns: MaterialTableColumnProps[];\n\torderKeys: string[];\n}\n\nexport const initialFilter: RuleGroupType = { combinator: 'and', rules: [] };\n\ninterface PageContextValue {\n\tpageTemplateId: string;\n\tactivePage: PageState;\n\tupdatePageInfo: (updates: Partial<PageState>) => void;\n\tloading: boolean;\n\tisSaving: boolean;\n\terror: string | null;\n\tpages: any[];\n\tsavePages: () => void;\n\tsetActivePage: (data: any) => void;\n\tsetPages: React.Dispatch<any>;\n\tschemaFields: SchemaFields[];\n\tinitializeColumns: (columns: MaterialTableColumnProps[]) => void;\n\tgeneratedColumns: GeneratedColumnsState;\n\tsharedPages: any[];\n\tupdateGeneratedColumns: (updates: Partial<GeneratedColumnsState>) => void;\n\tformData:Record<string, any>\n\tsetFormData:(data:Record<string, any>) => void\n}\n\nexport const defaultPageState: PageState = {\n\t_id: '',\n\tname: '',\n\tpage_size: 10,\n\tcolumn_order: ['id'],\n\tvisible_columns: [],\n\tviews: [],\n\tactive_view: '',\n\tfilters: initialFilter,\n\tfilterQueryString: '',\n\tsort: null,\n\tsearch: '',\n\tenabled_views: ['Table', 'Grid', 'Kanban', 'Calendar', 'Gantt'],\n\tisShared: false,\n\tcolumn_sizes: {}\n};\ninterface PageProviderProps {\n\tchildren: React.ReactNode;\n}\n\nconst UpdatePageInfo = () => {};\nconst UpdateGeneratedColumns = () => {};\n\nexport const PageContext = createContext<PageContextValue>({\n\tpageTemplateId: '',\n\tactivePage: defaultPageState,\n\tupdatePageInfo: UpdatePageInfo,\n\tloading: false,\n\tisSaving: false,\n\terror: null,\n\tpages: [],\n\tsharedPages: [],\n\tsavePages: () => {},\n\tsetActivePage: () => {},\n\tsetPages: () => {},\n\tschemaFields: [],\n\tinitializeColumns: () => {},\n\tgeneratedColumns: { columns: [], orderKeys: [] },\n\tupdateGeneratedColumns: UpdateGeneratedColumns,\n});\n\nfunction mergeArraysKeepingOrder(array1: string[], array2: string[]): string[] {\n\t// Create a Set from the first array for efficient lookups\n\tconst array1Set = new Set(array1);\n\n\t// Filter the second array to find elements not in the first array\n\tconst elementsToAdd = array2.filter((item) => !array1Set.has(item));\n\n\t// Combine the original first array with the new elements\n\treturn [...array1, ...elementsToAdd];\n}\n\nconst generateColumnSchema = (\n\tdefaultColumns: MaterialTableColumnProps[],\n\tschemaFields: SchemaFields[],\n\tcolumnOrders: string[],\n\tdColumns?: any[],\n\tt?: any\n): { columns: MaterialTableColumnProps[]; orderKeys: string[] } => {\n\ttry {\n\t\tif(dColumns && dColumns?.length) {\n\t\t\tdefaultColumns = defaultColumns.map((column) => {\n\t\t\t\tconst f = dColumns.find((c) => c.accessorKey == column.accessorKey);\n\t\t\t\treturn f || column\n\t\t\t})\n\t\t}\n\t\tlet orderKeys = columnOrders.length\n\t\t\t? columnOrders\n\t\t\t: (defaultColumns.map((column) => column.accessorKey) as string[]);\n\t\tconst getAccesorKeyViaField = (field: SchemaFields) =>\n\t\t\t\t(field.type === 'object' || field?.join) ? `${field.alias}.${field.accessorKey}` : field.key;\n\t\t\t\n\t\t// Clean up schema fields by removing \"__replaceKey\" from the keys\n\t\tconst updatedFields = schemaFields.map((field) => ({\n\t\t\t...field,\n\t\t\tkey: field.key.replace('__replaceKey', '')\n\t\t})).filter((field)=>!field.is_inner_join);\n\n\t\tconst uniqueFields = _.differenceWith(\n\t\t\tupdatedFields,\n\t\t\tupdatedFields,\n\t\t\t(fieldA, fieldB) => fieldA.key === fieldB?.joinKey\n\t\t);\n\n\t\t// Find fields in schemaFields but not in defaultColumns based on accessorKey\n\t\tconst unmatchedFields = _.differenceWith(\n\t\t\tuniqueFields,\n\t\t\tdefaultColumns,\n\t\t\t(field, column) => getAccesorKeyViaField(field) === column.accessorKey\n\t\t);\n\n\t\t// Map unique fields to MaterialTableColumn structure\n\t\tconst additionalColumns: MaterialTableColumnProps[] = unmatchedFields.map(\n\t\t\t(field) => ({\n\t\t\t\theader: t ? formatLabel(t(field?.label)?.replace('_data', '') || '') : formatLabel(field?.label?.replace('_data', '') || ''),\n\t\t\t\taccessorKey: getAccesorKeyViaField(field),\n\t\t\t\tvisible: false,\n\t\t\t\ttype: field?.enum ? 'status' : field.type,\n\t\t\t\t...(field.type === 'array' && {typeArrayAccessorKey: field.accessorKey || ''}),\n\t\t\t\tenableSorting: (field.type === 'array' || field.type === 'object' || field?.join) ? false: true,\n\t\t\t\t...(field?.type === 'boolean' ? {\n\t\t\t\t\ttypeBooleanLabels: field?.values?.length ? _.mapValues( _.keyBy(\n\t\t\t\t\t\tfield?.values.map(item => ({\n\t\t\t\t\t\t\tkey: item.name,\n\t\t\t\t\t\t\tvalue: item.label\n\t\t\t\t\t\t})),\n\t\t\t\t\t\t'key'\n\t\t\t\t\t), 'value') : { 0: \"Inactive\", 1: \"Active\", false: \"Inactive\", true: \"Active\" }\n\t\t\t\t} : {})\n\t\t\t})\n\t\t);\n\n\t\tconst updatedDefaultColumns = defaultColumns?.map((column) => {\n\t\t\tconst field = schemaFields.find((field) => getAccesorKeyViaField(field) === column.accessorKey);\n\t\t\treturn {\n\t\t\t\t...column,\n\t\t\t\t...((field?.type === 'object' || field?.joinKey||column.enableSorting===false) ? { enableSorting: false } : {})\n\t\t\t};\n\t\t});\n\n\t\t// Combine default columns and additional columns\n\t\tconst columns = [...updatedDefaultColumns, ...additionalColumns];\n\n\t\t// Generate an array of column keys for ordering\n\t\tconst nOrderKeys = columns.map((column) => column.accessorKey) as string[];\n\n\t\torderKeys = mergeArraysKeepingOrder(orderKeys, nOrderKeys);\n\n\t\treturn { columns, orderKeys };\n\t} catch (error) {\n\t\treturn {\n\t\t\tcolumns: defaultColumns,\n\t\t\torderKeys: defaultColumns.map((column) => column.accessorKey) as string[]\n\t\t};\n\t}\n};\n\nexport const PageProvider: React.FC<PageProviderProps> = ({ children }) => {\n\tconst location = useLocation();\n\tconst [activePage, setActivePageData] = useState<PageState>(defaultPageState);\n\t// const permissions=usePermissions();\n\tconst [schemaFields, setSchemaFields] = useState<SchemaFields[]>([]);\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [isSaving, setIsSaving] = useState<boolean>(false);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [pages, setPages] = useState<any>([]);\n\tconst [sharedPages, setSharedPages] = useState<any>([]);\n\tconst [isChanged, setIsChanged] = useState<boolean>(false);\n\tconst [pageTemplateId, setPageTemplateId] = useState<string>('');\n\tconst [isInitialLoad, setIsInitialLoad] = useState<boolean>(true);\n\tconst [isCreatePage, setIsCreatePage] = useState<boolean>(false);\n\tconst [formData, setFormData] = useState<any>({});\n\tconst [generatedColumns, setGeneratedColumns] = useState<{\n\t\tcolumns: MaterialTableColumnProps[];\n\t\torderKeys: string[];\n\t}>({ columns: [], orderKeys: [] });\n\tconst {user} = useAuth()\n\t// Add ref to track current pathname for race condition prevention\n\tconst currentPathnameRef = useRef<string>(location.pathname);\n\tconst curPathName = useMemo(() => location.pathname, [location.pathname])\n\t\n\t// Get current page's default columns and resources\n\tconst defaultColumns: any[] = useMemo(() => {\n\t\tconst columns = routeToColumnsMap[curPathName]?.defaultColumns || [];\n\t\treturn columns;\n\t}, [curPathName]);\n\t\n\tconst resources: IResources = useMemo(() => {\n\t\tconst resource = routeToResourceMap[curPathName] || null;\n\t\treturn resource;\n\t}, [curPathName]);\n\n\t//Translation\n\tconst {t}=useTranslation()\n\n\t// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\n\tconst initializeColumns = (columns: MaterialTableColumnProps[]) => {\n\t\t//! Remove the function if not needed\n\t};\n\n\t// Fetch page-related information from API\n\tconst fetchPageData = useCallback(\n\t\tasync (currentPath: string, currentDefaultColumns: any[], currentResources: IResources) => {\n\t\t\n\t\t\t// Check if this request is still valid (pathname hasn't changed)\n\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\t\n\t\t\ttry {\n\t\t\t\tif (currentDefaultColumns.length && currentResources) {\n\t\t\t\t\tconst { pageResource = '', fieldResource = '',formResource='' } = currentResources;\n\t\t\t\t\t\n\t\t\t\t\t// Double-check pathname hasn't changed before making API calls\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tconst [pageResponse, fieldResponse,formResponse] = await Promise.all([\n\t\t\t\t\t\tpageResource ? getV1PagesResource({ ...getToken(), resource: pageResource }): Promise.resolve(null),\n\n\t\t\t\t\t\tgetV1FormBuilderSchemaFieldsName({\n\t\t\t\t\t\t\tname: fieldResource,\n\t\t\t\t\t\t\t...getToken(),\n\t\t\t\t\t\t\tskip: 0,\n\t\t\t\t\t\t\tlimit: 999\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tgetV1FormBuilder({\n\t\t\t\t\t\t\t...getToken(),\n\t\t\t\t\t\t\tfilters:`(resource.eq=${formResource}&company_id.eq=${user?.company_id})`,\n\t\t\t\t\t\t})\n\t\t\t\t\t]);\n\n\t\t\t\t\t// Final check - ensure pathname still matches\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed after API call');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fields = fieldResponse?.data?.fields?.map(f => ({...f, label: !f?.label?.trim() ? formatLabel(f.key) : f.label}));\n\n\t\t\t\t\tconst gColumns = generateColumnSchema(currentDefaultColumns, fields, [], [], t);\n \n\t\t\t\t\tconst pages =\n\t\t\t\t\t\tpageResponse?.data?.pages?.map((p) => ({\n\t\t\t\t\t\t\t...defaultPageState,\n\t\t\t\t\t\t\t...p,\n\t\t\t\t\t\t\tvisible_columns: generateColumnSchema(\n\t\t\t\t\t\t\t\tp.visible_columns?.length ? p.visible_columns : currentDefaultColumns,\n\t\t\t\t\t\t\t\tfields,\n\t\t\t\t\t\t\t\tp.column_order || [],\n\t\t\t\t\t\t\t\tcurrentDefaultColumns,\n\t\t\t\t\t\t\t\tt\n\t\t\t\t\t\t\t).columns,\n\t\t\t\t\t\t\tcolumn_order: mergeArraysKeepingOrder(\n\t\t\t\t\t\t\t\tp.column_order || [],\n\t\t\t\t\t\t\t\t_.uniq(gColumns.orderKeys)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})) || [];\n\t\t\t\t\tconst sharedPages =\n\t\t\t\t\t\tpageResponse?.data?.shared_pages?.map((sPages) => ({\n\t\t\t\t\t\t\t...sPages.details,\n\t\t\t\t\t\t\tisShared: true,\n\t\t\t\t\t\t\towner: sPages.owner,\n\t\t\t\t\t\t\t_id: sPages.id\n\t\t\t\t\t\t})) || [];\n\n\t\t\t\t\tconst uPages = [...pages, ...sharedPages];\n\n\t\t\t\t\t// Only update state if we're still on the same path\n\t\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\t\tsetSchemaFields(fields),\n\t\t\t\t\t\t\tsetGeneratedColumns(gColumns),\n\t\t\t\t\t\t\tsetPageTemplateId(pageResponse?.data?._id),\n\t\t\t\t\t\t\tsetSharedPages(sharedPages),\n\t\t\t\t\t\t\tsetPages(uPages || []),\n\t\t\t\t\t\t\tsetFormData(formResponse?.data?.form?.[0] || {}),\n\t\t\t\t\t\t\tsetActivePageData((prev) => ({\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t...(pages?.[0] || {}) // Merge API response with current state\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// Only set error if we're still on the same path\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\tsetError('Failed to load page data');\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\t// Only update loading state if we're still on the same path\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tsetLoading(false);\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[] // Remove dependencies to prevent stale closures\n\t);\n\n\t// Update page state dynamically\n\tconst updatePageInfo = (updates: Partial<PageState>) => {\n\t\tsetActivePageData((prev) => ({\n\t\t\t...prev,\n\t\t\t...updates\n\t\t}));\n\t\t!isInitialLoad && setIsChanged(true)\n\t\tsetIsInitialLoad(false)\n\t};\n\n\t// Update columns state dynamically\n\tconst updateGeneratedColumns = (updates: Partial<GeneratedColumnsState>) => {\n\t\tsetGeneratedColumns((prev) => ({\n\t\t\t...prev,\n\t\t\t...updates\n\t\t}));\n\t};\n\n\tconst setActivePage = (page: PageState) => {\n\t\tconst uPages = pages.map((p) =>\n\t\t\tp._id == activePage?._id ? activePage : p\n\t\t);\n\t\tsetPages(uPages);\n\t\tsetActivePageData(page);\n\t};\n\n\tconst savePages = async () => {\n\t\tsetError(null);\n\t\tsetIsSaving(true);\n\t\tawait addOrDeletePage()\n\t\tsetTimeout(() => {\n\t\t\tsetIsSaving(false);\n\t\t}, 1000);\n\t};\n\tconst fetchSavedFilters = async (): Promise<void> => {\n\n\t\tawait\tgetV1FilterResource({ ...getToken(), resource: resources?.pageResource || resources?.fieldResource })\n\t\t\t\n\t};\n\n\tconst addOrDeletePage=async(restPages?:any[])=>{\n\t\ttry {\n\t\t\tconst filteredPages =restPages?.length ? restPages : pages.filter((page) => !page.isShared);\n\t\t\tconst uPages = filteredPages.map((p) =>\n\t\t\t\t(p._id == activePage?._id && activePage.name==p.name) ? activePage : p\n\t\t\t);\n\t\t\tconst sanitizedPages = removeIdStaticIdsFromMongoObject(uPages);\n\n\t\t\tconst response = await patchV1PagesPageId({\n\t\t\t\t...getToken(),\n\t\t\t\t...{ page_id: pageTemplateId, pages: sanitizedPages }\n\t\t\t});\n\t\t\tif (response.status_code === 200) {\n\t\t\t\tconst updatedPages = response?.data?.pages || [];\n\t\t\t\tsetPages(updatedPages);\n \t\tfetchSavedFilters();\n\t\t\t\tsetActivePageData((prev) => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\t...(updatedPages.find((p) => p.name == prev.name) || {})\n\t\t\t\t}));\n\t\t\t\tsetIsChanged(false);\n\t\t\t\tsetIsCreatePage(false);\n\t\t\t\tsetFormData(response?.data?.form?.[0] || {});\n\t\t\t\tconst msg=restPages?.length ? t('pages.msg.delete') : t('pages.msg.save')\n\t\t\t\tenqueueSnackbar(msg);\n\t\t\t}\n\t\t\treturn response\n\t\t} catch (err) {\n\t\t\tsetError('Failed to save page data');\n\t\t} \n\t}\n\t\n\tconst deletePage=async(pages:string)=>{\n\t\taddOrDeletePage(pages);\n\t}\n\n\t// Handle pathname changes\n\tuseEffect(() => {\n\t\t// Update the ref immediately\n\t\tcurrentPathnameRef.current = curPathName;\n\t\t\n\t\t// Reset state for new page\n\t\tsetLoading(true);\n\t\tsetIsSaving(false);\n\t\tsetActivePageData(defaultPageState);\n\t\tsetIsChanged(false);\n\t\tsetIsInitialLoad(true);\n\t\t\n\t\t// Clear previous data to prevent showing stale data\n\t\tsetSchemaFields([]);\n\t\tsetGeneratedColumns({ columns: [], orderKeys: [] });\n\t\tsetPages([]);\n\t\tsetSharedPages([]);\n\t\tsetPageTemplateId('');\n\t\tsetError(null);\n\t\t\n\t\t// Fetch data for new page with current values\n\t\tfetchPageData(curPathName, defaultColumns, resources);\n\n\t\treturn () => { setLoading(true) }\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [curPathName, JSON.stringify(defaultColumns), JSON.stringify(resources)]); // Remove other dependencies to prevent issues\n\n\n\tif ((loading || curPathName != currentPathnameRef.current) && resources) {\n\t\treturn <ErpLoader />; // Show loader before rendering anything else\n\t}\n\n\treturn (\n\t\t<PageContext.Provider\n\t\t\tvalue={{\n\t\t\t\tpageTemplateId,\n\t\t\t\tactivePage,\n\t\t\t\tpages,\n\t\t\t\tsharedPages,\n\t\t\t\tschemaFields,\n\t\t\t\tsetPages,\n\t\t\t\tupdatePageInfo,\n\t\t\t\tsavePages,\n\t\t\t\tsetActivePage,\n\t\t\t\tisSaving,\n\t\t\t\tloading,\n\t\t\t\terror,\n\t\t\t\tinitializeColumns,\n\t\t\t\tgeneratedColumns,\n\t\t\t\tupdateGeneratedColumns,\n\t\t\t\tisChanged,\n\t\t\t\tdeletePage,\n\t\t\t\tisCreatePage,\n\t\t\t\tsetIsCreatePage,\n\t\t\t\taddOrDeletePage,\n\t\t\t\tsetIsChanged,\n\t\t\t\tformData\n\t\t\t}}>\n\t\t\t{children}\n\t\t</PageContext.Provider>\n\t);\n};\n"],"names":["field","_a","pages","sharedPages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../src/contexts/page-context.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\n/* eslint-disable no-mixed-spaces-and-tabs */\n\nimport React, { createContext, useCallback, useEffect, useMemo, useState, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport {\n\tgetV1FilterResource,\n\tgetV1FormBuilder,\n\tgetV1FormBuilderSchemaFieldsName,\n\tgetV1PagesResource,\n\tpatchV1PagesPageId\n} from '../api-client/api.system-feature/api';\nimport { IResources, routeToColumnsMap, routeToResourceMap } from '../constants/route-page-map'; // Removed - should be passed as props or configured by consuming app\nimport { getToken } from '../utils/common';\nimport { removeIdStaticIdsFromMongoObject } from '../utils/common';\nimport { RuleGroupType } from 'react-querybuilder';\nimport { MaterialTableColumnProps } from '../components/material-table/material-table';\nimport _ from 'lodash';\nimport { formatLabel } from '../utils/format-text';\nimport ErpLoader from '../components/loaders/erp-loader';\nimport { enqueueSnackbar } from 'notistack';\nimport { useTranslation } from 'react-i18next';\nimport { useAuth } from '../hooks/useAuth';\n// import { usePermissions } from '../hooks/use-permissions';\n\n/* Interfaces and types */\nexport type ViewType = 'Table' | 'Grid' | 'Kanban' | 'Calendar' | 'Gantt' | '';\n\ninterface SchemaFields {\n\tselect: string;\n\talias: string;\n\ttype: string;\n\tfilter_type?: string;\n\tfilter_name?: string;\n\trequired?: boolean;\n\tisOrderAllowed?: boolean;\n\tisDefault?: boolean;\n\tisFilterAllowed?: boolean;\n\tlabel?: string;\n\tkey: string;\n\taccessorKey?: string;\n\tjoinKey?: string;\n\tenum?: string | string[];\n}\nexport interface SavedViewType {\n\tlabel: ViewType;\n\tposition: number;\n}\nexport interface PageState {\n\t_id: string | number;\n\tname: string;\n\tpage_size: number;\n\tcolumn_order: string[];\n\tvisible_columns: MaterialTableColumnProps[];\n\tviews: SavedViewType[];\n\tactive_view: ViewType;\n\tfilters: RuleGroupType;\n\tfilterQueryString: string;\n\tsort: Record<any, any> | null;\n\tsearch: string;\n\tenabled_views: ViewType[];\n\tisShared: boolean;\n\tcolumn_sizes: Record<string, number>;\n}\n\nexport interface GeneratedColumnsState {\n\tcolumns: MaterialTableColumnProps[];\n\torderKeys: string[];\n}\n\nexport const initialFilter: RuleGroupType = { combinator: 'and', rules: [] };\n\ninterface PageContextValue {\n\tpageTemplateId: string;\n\tactivePage: PageState;\n\tupdatePageInfo: (updates: Partial<PageState>) => void;\n\tloading: boolean;\n\tisSaving: boolean;\n\terror: string | null;\n\tpages: any[];\n\tsavePages: () => void;\n\tsetActivePage: (data: any) => void;\n\tsetPages: React.Dispatch<any>;\n\tschemaFields: SchemaFields[];\n\tinitializeColumns: (columns: MaterialTableColumnProps[]) => void;\n\tgeneratedColumns: GeneratedColumnsState;\n\tsharedPages: any[];\n\tupdateGeneratedColumns: (updates: Partial<GeneratedColumnsState>) => void;\n\tformData:Record<string, any>\n\tsetFormData:(data:Record<string, any>) => void\n}\n\nexport const defaultPageState: PageState = {\n\t_id: '',\n\tname: '',\n\tpage_size: 10,\n\tcolumn_order: ['id'],\n\tvisible_columns: [],\n\tviews: [],\n\tactive_view: '',\n\tfilters: initialFilter,\n\tfilterQueryString: '',\n\tsort: null,\n\tsearch: '',\n\tenabled_views: ['Table', 'Grid', 'Kanban', 'Calendar', 'Gantt'],\n\tisShared: false,\n\tcolumn_sizes: {}\n};\ninterface PageProviderProps {\n\tchildren: React.ReactNode;\n}\n\nconst UpdatePageInfo = () => {};\nconst UpdateGeneratedColumns = () => {};\n\nexport const PageContext = createContext<PageContextValue>({\n\tpageTemplateId: '',\n\tactivePage: defaultPageState,\n\tupdatePageInfo: UpdatePageInfo,\n\tloading: false,\n\tisSaving: false,\n\terror: null,\n\tpages: [],\n\tsharedPages: [],\n\tsavePages: () => {},\n\tsetActivePage: () => {},\n\tsetPages: () => {},\n\tschemaFields: [],\n\tinitializeColumns: () => {},\n\tgeneratedColumns: { columns: [], orderKeys: [] },\n\tupdateGeneratedColumns: UpdateGeneratedColumns,\n});\n\nfunction mergeArraysKeepingOrder(array1: string[], array2: string[]): string[] {\n\t// Create a Set from the first array for efficient lookups\n\tconst array1Set = new Set(array1);\n\n\t// Filter the second array to find elements not in the first array\n\tconst elementsToAdd = array2.filter((item) => !array1Set.has(item));\n\n\t// Combine the original first array with the new elements\n\treturn [...array1, ...elementsToAdd];\n}\n\nconst generateColumnSchema = (\n\tdefaultColumns: MaterialTableColumnProps[],\n\tschemaFields: SchemaFields[],\n\tcolumnOrders: string[],\n\tdColumns?: any[],\n\tt?: any\n): { columns: MaterialTableColumnProps[]; orderKeys: string[] } => {\n\ttry {\n\t\tif(dColumns && dColumns?.length) {\n\t\t\tdefaultColumns = defaultColumns.map((column) => {\n\t\t\t\tconst f = dColumns.find((c) => c.accessorKey == column.accessorKey);\n\t\t\t\treturn f || column\n\t\t\t})\n\t\t}\n\t\tlet orderKeys = columnOrders.length\n\t\t\t? columnOrders\n\t\t\t: (defaultColumns.map((column) => column.accessorKey) as string[]);\n\t\tconst getAccesorKeyViaField = (field: SchemaFields) =>\n\t\t\t\t(field.type === 'object' || field?.join) ? `${field.alias}.${field.accessorKey}` : field.key;\n\t\t\t\n\t\t// Clean up schema fields by removing \"__replaceKey\" from the keys\n\t\tconst updatedFields = schemaFields.map((field) => ({\n\t\t\t...field,\n\t\t\tkey: field.key.replace('__replaceKey', '')\n\t\t})).filter((field)=>!field.is_inner_join);\n\n\t\tconst uniqueFields = _.differenceWith(\n\t\t\tupdatedFields,\n\t\t\tupdatedFields,\n\t\t\t(fieldA, fieldB) => fieldA.key === fieldB?.joinKey\n\t\t);\n\n\t\t// Find fields in schemaFields but not in defaultColumns based on accessorKey\n\t\tconst unmatchedFields = _.differenceWith(\n\t\t\tuniqueFields,\n\t\t\tdefaultColumns,\n\t\t\t(field, column) => getAccesorKeyViaField(field) === column.accessorKey\n\t\t);\n\n\t\t// Map unique fields to MaterialTableColumn structure\n\t\tconst additionalColumns: MaterialTableColumnProps[] = unmatchedFields.map(\n\t\t\t(field) => ({\n\t\t\t\theader: t ? formatLabel(t(field?.label)?.replace('_data', '') || '') : formatLabel(field?.label?.replace('_data', '') || ''),\n\t\t\t\taccessorKey: getAccesorKeyViaField(field),\n\t\t\t\tvisible: false,\n\t\t\t\ttype: field?.enum ? 'status' : field.type,\n\t\t\t\t...(field.type === 'array' && {typeArrayAccessorKey: field.accessorKey || ''}),\n\t\t\t\tenableSorting: (field.type === 'array' || field.type === 'object' || field?.join) ? false: true,\n\t\t\t\t...(field?.type === 'boolean' ? {\n\t\t\t\t\ttypeBooleanLabels: field?.values?.length ? _.mapValues( _.keyBy(\n\t\t\t\t\t\tfield?.values.map(item => ({\n\t\t\t\t\t\t\tkey: item.name,\n\t\t\t\t\t\t\tvalue: item.label\n\t\t\t\t\t\t})),\n\t\t\t\t\t\t'key'\n\t\t\t\t\t), 'value') : { 0: \"Inactive\", 1: \"Active\", false: \"Inactive\", true: \"Active\" }\n\t\t\t\t} : {})\n\t\t\t})\n\t\t);\n\n\t\tconst updatedDefaultColumns = defaultColumns?.map((column) => {\n\t\t\tconst field = schemaFields.find((field) => getAccesorKeyViaField(field) === column.accessorKey);\n\t\t\treturn {\n\t\t\t\t...column,\n\t\t\t\t...((field?.type === 'object' || field?.joinKey||column.enableSorting===false) ? { enableSorting: false } : {})\n\t\t\t};\n\t\t});\n\n\t\t// Combine default columns and additional columns\n\t\tconst columns = [...updatedDefaultColumns, ...additionalColumns];\n\n\t\t// Generate an array of column keys for ordering\n\t\tconst nOrderKeys = columns.map((column) => column.accessorKey) as string[];\n\n\t\torderKeys = mergeArraysKeepingOrder(orderKeys, nOrderKeys);\n\n\t\treturn { columns, orderKeys };\n\t} catch (error) {\n\t\treturn {\n\t\t\tcolumns: defaultColumns,\n\t\t\torderKeys: defaultColumns.map((column) => column.accessorKey) as string[]\n\t\t};\n\t}\n};\n\nexport const PageProvider: React.FC<PageProviderProps> = ({ children }) => {\n\tconst location = useLocation();\n\tconst [activePage, setActivePageData] = useState<PageState>(defaultPageState);\n\t// const permissions=usePermissions();\n\tconst [schemaFields, setSchemaFields] = useState<SchemaFields[]>([]);\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [isSaving, setIsSaving] = useState<boolean>(false);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [pages, setPages] = useState<any>([]);\n\tconst [sharedPages, setSharedPages] = useState<any>([]);\n\tconst [isChanged, setIsChanged] = useState<boolean>(false);\n\tconst [pageTemplateId, setPageTemplateId] = useState<string>('');\n\tconst [isInitialLoad, setIsInitialLoad] = useState<boolean>(true);\n\tconst [isCreatePage, setIsCreatePage] = useState<boolean>(false);\n\tconst [formData, setFormData] = useState<any>({});\n\tconst [generatedColumns, setGeneratedColumns] = useState<{\n\t\tcolumns: MaterialTableColumnProps[];\n\t\torderKeys: string[];\n\t}>({ columns: [], orderKeys: [] });\n\tconst {user} = useAuth()\n\t// Add ref to track current pathname for race condition prevention\n\tconst currentPathnameRef = useRef<string>(location.pathname);\n\tconst curPathName = useMemo(() => location.pathname, [location.pathname])\n\t\n\t// Get current page's default columns and resources\n\tconst defaultColumns: any[] = useMemo(() => {\n\t\tconst columns = routeToColumnsMap[curPathName]?.defaultColumns || [];\n\t\treturn columns;\n\t}, [curPathName]);\n\t\n\tconst resources: IResources = useMemo(() => {\n\t\tconst resource = routeToResourceMap[curPathName] || null;\n\t\treturn resource;\n\t}, [curPathName]);\n\n\t//Translation\n\tconst {t}=useTranslation()\n\n\t// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\n\tconst initializeColumns = (columns: MaterialTableColumnProps[]) => {\n\t\t//! Remove the function if not needed\n\t};\n\n\t// Fetch page-related information from API\n\tconst fetchPageData = useCallback(\n\t\tasync (currentPath: string, currentDefaultColumns: any[], currentResources: IResources) => {\n\t\t\n\t\t\t// Check if this request is still valid (pathname hasn't changed)\n\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\t\n\t\t\ttry {\n\t\t\t\tif (currentDefaultColumns.length && currentResources) {\n\t\t\t\t\tconst { pageResource = '', fieldResource = '',formResource='' } = currentResources;\n\t\t\t\t\t\n\t\t\t\t\t// Double-check pathname hasn't changed before making API calls\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tconst [pageResponse, fieldResponse,formResponse] = await Promise.all([\n\t\t\t\t\t\tpageResource ? getV1PagesResource({ ...getToken(), resource: pageResource }): Promise.resolve(null),\n\n\t\t\t\t\t\tgetV1FormBuilderSchemaFieldsName({\n\t\t\t\t\t\t\tname: fieldResource,\n\t\t\t\t\t\t\t...getToken(),\n\t\t\t\t\t\t\tskip: 0,\n\t\t\t\t\t\t\tlimit: 999\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tgetV1FormBuilder({\n\t\t\t\t\t\t\t...getToken(),\n\t\t\t\t\t\t\tfilters:`(resource.eq=${formResource}&company_id.eq=${user?.company_id})`,\n\t\t\t\t\t\t})\n\t\t\t\t\t]);\n\n\t\t\t\t\t// Final check - ensure pathname still matches\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed after API call');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fields = fieldResponse?.data?.fields?.map(f => ({...f, label: !f?.label?.trim() ? formatLabel(f.key) : f.label}));\n\n\t\t\t\t\tconst gColumns = generateColumnSchema(currentDefaultColumns, fields, [], [], t);\n \n\t\t\t\t\tconst pages =\n\t\t\t\t\t\tpageResponse?.data?.pages?.map((p) => ({\n\t\t\t\t\t\t\t...defaultPageState,\n\t\t\t\t\t\t\t...p,\n\t\t\t\t\t\t\tvisible_columns: generateColumnSchema(\n\t\t\t\t\t\t\t\tp.visible_columns?.length ? p.visible_columns : currentDefaultColumns,\n\t\t\t\t\t\t\t\tfields,\n\t\t\t\t\t\t\t\tp.column_order || [],\n\t\t\t\t\t\t\t\tcurrentDefaultColumns,\n\t\t\t\t\t\t\t\tt\n\t\t\t\t\t\t\t).columns,\n\t\t\t\t\t\t\tcolumn_order: mergeArraysKeepingOrder(\n\t\t\t\t\t\t\t\tp.column_order || [],\n\t\t\t\t\t\t\t\t_.uniq(gColumns.orderKeys)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})) || [];\n\t\t\t\t\tconst sharedPages =\n\t\t\t\t\t\tpageResponse?.data?.shared_pages?.map((sPages) => ({\n\t\t\t\t\t\t\t...sPages.details,\n\t\t\t\t\t\t\tisShared: true,\n\t\t\t\t\t\t\towner: sPages.owner,\n\t\t\t\t\t\t\t_id: sPages.id\n\t\t\t\t\t\t})) || [];\n\n\t\t\t\t\tconst uPages = [...pages, ...sharedPages];\n\n\t\t\t\t\t// Only update state if we're still on the same path\n\t\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\t\tsetSchemaFields(fields),\n\t\t\t\t\t\t\tsetGeneratedColumns(gColumns),\n\t\t\t\t\t\t\tsetPageTemplateId(pageResponse?.data?._id),\n\t\t\t\t\t\t\tsetSharedPages(sharedPages),\n\t\t\t\t\t\t\tsetPages(uPages || []),\n\t\t\t\t\t\t\tsetFormData(formResponse?.data?.form?.[0] || {}),\n\t\t\t\t\t\t\tsetActivePageData((prev) => ({\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t...(pages?.[0] || {}) // Merge API response with current state\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// Only set error if we're still on the same path\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\tsetError('Failed to load page data');\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\t// Only update loading state if we're still on the same path\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tsetLoading(false);\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[] // Remove dependencies to prevent stale closures\n\t);\n\n\t// Update page state dynamically\n\tconst updatePageInfo = (updates: Partial<PageState>) => {\n\t\tsetActivePageData((prev) => ({\n\t\t\t...prev,\n\t\t\t...updates\n\t\t}));\n\t\t!isInitialLoad && setIsChanged(true)\n\t\tsetIsInitialLoad(false)\n\t};\n\n\t// Update columns state dynamically\n\tconst updateGeneratedColumns = (updates: Partial<GeneratedColumnsState>) => {\n\t\tsetGeneratedColumns((prev) => ({\n\t\t\t...prev,\n\t\t\t...updates\n\t\t}));\n\t};\n\n\tconst setActivePage = (page: PageState) => {\n\t\tconst uPages = pages.map((p) =>\n\t\t\tp._id == activePage?._id ? activePage : p\n\t\t);\n\t\tsetPages(uPages);\n\t\tsetActivePageData(page);\n\t};\n\n\tconst savePages = async () => {\n\t\tsetError(null);\n\t\tsetIsSaving(true);\n\t\tawait addOrDeletePage()\n\t\tsetTimeout(() => {\n\t\t\tsetIsSaving(false);\n\t\t}, 1000);\n\t};\n\tconst fetchSavedFilters = async (): Promise<void> => {\n\n\t\tawait\tgetV1FilterResource({ ...getToken(), resource: resources?.pageResource || resources?.fieldResource })\n\t\t\t\n\t};\n\n\tconst addOrDeletePage=async(restPages?:any[])=>{\n\t\ttry {\n\t\t\tconst filteredPages =restPages?.length ? restPages : pages.filter((page) => !page.isShared);\n\t\t\tconst uPages = filteredPages.map((p) =>\n\t\t\t\t(p._id == activePage?._id && activePage.name==p.name) ? activePage : p\n\t\t\t);\n\t\t\tconst sanitizedPages = removeIdStaticIdsFromMongoObject(uPages);\n\n\t\t\tconst response = await patchV1PagesPageId({\n\t\t\t\t...getToken(),\n\t\t\t\t...{ page_id: pageTemplateId, pages: sanitizedPages }\n\t\t\t});\n\t\t\tif (response.status_code === 200) {\n\t\t\t\tconst updatedPages = response?.data?.pages || [];\n\t\t\t\tsetPages(updatedPages);\n \t\tfetchSavedFilters();\n\t\t\t\tsetActivePageData((prev) => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\t...(updatedPages.find((p) => p.name == prev.name) || {})\n\t\t\t\t}));\n\t\t\t\tsetIsChanged(false);\n\t\t\t\tsetIsCreatePage(false);\n\t\t\t\tsetFormData(response?.data?.form?.[0] || {});\n\t\t\t\tconst msg=restPages?.length ? t('pages.msg.delete') : t('pages.msg.save')\n\t\t\t\tenqueueSnackbar(msg);\n\t\t\t}\n\t\t\treturn response\n\t\t} catch (err) {\n\t\t\tsetError('Failed to save page data');\n\t\t} \n\t}\n\t\n\tconst deletePage=async(pages:string)=>{\n\t\taddOrDeletePage(pages);\n\t}\n\n\t// Handle pathname changes\n\tuseEffect(() => {\n\t\t// Update the ref immediately\n\t\tcurrentPathnameRef.current = curPathName;\n\t\t\n\t\t// Reset state for new page\n\t\tsetLoading(true);\n\t\tsetIsSaving(false);\n\t\tsetActivePageData(defaultPageState);\n\t\tsetIsChanged(false);\n\t\tsetIsInitialLoad(true);\n\t\t\n\t\t// Clear previous data to prevent showing stale data\n\t\tsetSchemaFields([]);\n\t\tsetGeneratedColumns({ columns: [], orderKeys: [] });\n\t\tsetPages([]);\n\t\tsetSharedPages([]);\n\t\tsetPageTemplateId('');\n\t\tsetError(null);\n\t\t\n\t\t// Fetch data for new page with current values\n\t\tfetchPageData(curPathName, defaultColumns, resources);\n\n\t\treturn () => { setLoading(true) }\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [curPathName, JSON.stringify(defaultColumns), JSON.stringify(resources)]); // Remove other dependencies to prevent issues\n\n\n\t// if ((loading || curPathName != currentPathnameRef.current) && resources) {\n\t// \treturn <ErpLoader />; // Show loader before rendering anything else\n\t// }\n\n\treturn (\n\t\t<PageContext.Provider\n\t\t\tvalue={{\n\t\t\t\tpageTemplateId,\n\t\t\t\tactivePage,\n\t\t\t\tpages,\n\t\t\t\tsharedPages,\n\t\t\t\tschemaFields,\n\t\t\t\tsetPages,\n\t\t\t\tupdatePageInfo,\n\t\t\t\tsavePages,\n\t\t\t\tsetActivePage,\n\t\t\t\tisSaving,\n\t\t\t\tloading,\n\t\t\t\terror,\n\t\t\t\tinitializeColumns,\n\t\t\t\tgeneratedColumns,\n\t\t\t\tupdateGeneratedColumns,\n\t\t\t\tisChanged,\n\t\t\t\tdeletePage,\n\t\t\t\tisCreatePage,\n\t\t\t\tsetIsCreatePage,\n\t\t\t\taddOrDeletePage,\n\t\t\t\tsetIsChanged,\n\t\t\t\tformData\n\t\t\t}}>\n\t\t\t{children}\n\t\t</PageContext.Provider>\n\t);\n};\n"],"names":["field","_a","pages","sharedPages"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),a=require("react"),t=require("react-router-dom"),l=require("../../api-client/api.system-feature/api/index.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),a=require("react"),t=require("react-router-dom"),l=require("../../api-client/api.system-feature/api/index.js"),n=require("../../constants/route-page-map/index.js"),r=require("../../utils/common/index.js"),s=require("lodash"),o=require("../../utils/format-text/index.js"),i=require("../../node_modules/notistack/notistack.esm/index.js"),u=require("react-i18next"),d=require("../../hooks/useAuth/index.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=/* @__PURE__ */c(s);const v={combinator:"and",rules:[]},g={_id:"",name:"",page_size:10,column_order:["id"],visible_columns:[],views:[],active_view:"",filters:v,filterQueryString:"",sort:null,search:"",enabled_views:["Table","Grid","Kanban","Calendar","Gantt"],isShared:!1,column_sizes:{}},p=a.createContext({pageTemplateId:"",activePage:g,updatePageInfo:()=>{},loading:!1,isSaving:!1,error:null,pages:[],sharedPages:[],savePages:()=>{},setActivePage:()=>{},setPages:()=>{},schemaFields:[],initializeColumns:()=>{},generatedColumns:{columns:[],orderKeys:[]},updateGeneratedColumns:()=>{}});function y(e,a){const t=new Set(e),l=a.filter(e=>!t.has(e));return[...e,...l]}const f=(e,a,t,l,n)=>{try{l&&(null==l?void 0:l.length)&&(e=e.map(e=>l.find(a=>a.accessorKey==e.accessorKey)||e));let r=t.length?t:e.map(e=>e.accessorKey);const s=e=>"object"===e.type||(null==e?void 0:e.join)?`${e.alias}.${e.accessorKey}`:e.key,i=a.map(e=>({...e,key:e.key.replace("__replaceKey","")})).filter(e=>!e.is_inner_join),u=m.default.differenceWith(i,i,(e,a)=>e.key===(null==a?void 0:a.joinKey)),d=m.default.differenceWith(u,e,(e,a)=>s(e)===a.accessorKey).map(e=>{var a,t,l;return{header:n?o.formatLabel((null==(a=n(null==e?void 0:e.label))?void 0:a.replace("_data",""))||""):o.formatLabel((null==(t=null==e?void 0:e.label)?void 0:t.replace("_data",""))||""),accessorKey:s(e),visible:!1,type:(null==e?void 0:e.enum)?"status":e.type,..."array"===e.type&&{typeArrayAccessorKey:e.accessorKey||""},enableSorting:"array"!==e.type&&"object"!==e.type&&!(null==e?void 0:e.join),..."boolean"===(null==e?void 0:e.type)?{typeBooleanLabels:(null==(l=null==e?void 0:e.values)?void 0:l.length)?m.default.mapValues(m.default.keyBy(null==e?void 0:e.values.map(e=>({key:e.name,value:e.label})),"key"),"value"):{0:"Inactive",1:"Active",false:"Inactive",true:"Active"}}:{}}}),c=[...null==e?void 0:e.map(e=>{const t=a.find(a=>s(a)===e.accessorKey);return{...e,..."object"===(null==t?void 0:t.type)||(null==t?void 0:t.joinKey)||!1===e.enableSorting?{enableSorting:!1}:{}}}),...d];return r=y(r,c.map(e=>e.accessorKey)),{columns:c,orderKeys:r}}catch(r){return{columns:e,orderKeys:e.map(e=>e.accessorKey)}}};exports.PageContext=p,exports.PageProvider=({children:s})=>{const c=t.useLocation(),[v,h]=a.useState(g),[_,b]=a.useState([]),[S,P]=a.useState(!0),[K,j]=a.useState(!1),[k,x]=a.useState(null),[C,q]=a.useState([]),[T,w]=a.useState([]),[I,F]=a.useState(!1),[R,A]=a.useState(""),[M,V]=a.useState(!0),[L,O]=a.useState(!1),[z,B]=a.useState({}),[G,$]=a.useState({columns:[],orderKeys:[]}),{user:N}=d.useAuth(),D=a.useRef(c.pathname),J=a.useMemo(()=>c.pathname,[c.pathname]),W=a.useMemo(()=>{var e;return(null==(e=n.routeToColumnsMap[J])?void 0:e.defaultColumns)||[]},[J]),E=a.useMemo(()=>n.routeToResourceMap[J]||null,[J]),{t:Q}=u.useTranslation(),H=a.useCallback(async(e,a,t)=>{var n,s,i,u,d,c,v,p,_;if(D.current===e){P(!0),x(null);try{if(a.length&&t){const{pageResource:S="",fieldResource:P="",formResource:K=""}=t;if(D.current!==e)return;const[j,k,x]=await Promise.all([S?l.getV1PagesResource({...r.getToken(),resource:S}):Promise.resolve(null),l.getV1FormBuilderSchemaFieldsName({name:P,...r.getToken()}),l.getV1FormBuilder({...r.getToken(),filters:`(resource.eq=${K}&company_id.eq=${null==N?void 0:N.company_id})`})]);if(D.current!==e)return;const C=null==(s=null==(n=null==k?void 0:k.data)?void 0:n.fields)?void 0:s.map(e=>{var a;return{...e,label:(null==(a=null==e?void 0:e.label)?void 0:a.trim())?e.label:o.formatLabel(e.key)}}),T=f(a,C,[],[],Q),I=(null==(u=null==(i=null==j?void 0:j.data)?void 0:i.pages)?void 0:u.map(e=>{var t;return{...g,...e,visible_columns:f((null==(t=e.visible_columns)?void 0:t.length)?e.visible_columns:a,C,e.column_order||[],a,Q).columns,column_order:y(e.column_order||[],m.default.uniq(T.orderKeys))}}))||[],F=(null==(c=null==(d=null==j?void 0:j.data)?void 0:d.shared_pages)?void 0:c.map(e=>({...e.details,isShared:!0,owner:e.owner,_id:e.id})))||[],R=[...I,...F];D.current===e&&await Promise.all([b(C),$(T),A(null==(v=null==j?void 0:j.data)?void 0:v._id),w(F),q(R||[]),B((null==(_=null==(p=null==x?void 0:x.data)?void 0:p.form)?void 0:_[0])||{}),h(e=>({...e,...(null==I?void 0:I[0])||{}}))])}}catch(S){D.current===e&&x("Failed to load page data")}finally{D.current===e&&setTimeout(()=>{P(!1)},1e3)}}},[]),U=async e=>{var a,t,n;try{const s=((null==e?void 0:e.length)?e:C.filter(e=>!e.isShared)).map(e=>e._id==(null==v?void 0:v._id)&&v.name==e.name?v:e),o=r.removeIdStaticIdsFromMongoObject(s),u=await l.patchV1PagesPageId({...r.getToken(),page_id:R,pages:o});if(200===u.status_code){const s=(null==(a=null==u?void 0:u.data)?void 0:a.pages)||[];q(s),(async()=>{await l.getV1FilterResource({...r.getToken(),resource:(null==E?void 0:E.pageResource)||(null==E?void 0:E.fieldResource)})})(),h(e=>({...e,...s.find(a=>a.name==e.name)||{}})),F(!1),O(!1),B((null==(n=null==(t=null==u?void 0:u.data)?void 0:t.form)?void 0:n[0])||{});const o=(null==e?void 0:e.length)?Q("pages.msg.delete"):Q("pages.msg.save");i.enqueueSnackbar(o)}return u}catch(s){x("Failed to save page data")}};return a.useEffect(()=>(D.current=J,P(!0),j(!1),h(g),F(!1),V(!0),b([]),$({columns:[],orderKeys:[]}),q([]),w([]),A(""),x(null),H(J,W,E),()=>{P(!0)}),[J,JSON.stringify(W),JSON.stringify(E)]),/* @__PURE__ */e.jsx(p.Provider,{value:{pageTemplateId:R,activePage:v,pages:C,sharedPages:T,schemaFields:_,setPages:q,updatePageInfo:e=>{h(a=>({...a,...e})),!M&&F(!0),V(!1)},savePages:async()=>{x(null),j(!0),await U(),setTimeout(()=>{j(!1)},1e3)},setActivePage:e=>{const a=C.map(e=>e._id==(null==v?void 0:v._id)?v:e);q(a),h(e)},isSaving:K,loading:S,error:k,initializeColumns:e=>{},generatedColumns:G,updateGeneratedColumns:e=>{$(a=>({...a,...e}))},isChanged:I,deletePage:async e=>{U(e)},isCreatePage:L,setIsCreatePage:O,addOrDeletePage:U,setIsChanged:F,formData:z},children:s})},exports.defaultPageState=g,exports.initialFilter=v;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/contexts/page-context.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\n/* eslint-disable no-mixed-spaces-and-tabs */\n\nimport React, { createContext, useCallback, useEffect, useMemo, useState, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport {\n\tgetV1FilterResource,\n\tgetV1FormBuilder,\n\tgetV1FormBuilderSchemaFieldsName,\n\tgetV1PagesResource,\n\tpatchV1PagesPageId\n} from '../api-client/api.system-feature/api';\nimport { IResources, routeToColumnsMap, routeToResourceMap } from '../constants/route-page-map'; // Removed - should be passed as props or configured by consuming app\nimport { getToken } from '../utils/common';\nimport { removeIdStaticIdsFromMongoObject } from '../utils/common';\nimport { RuleGroupType } from 'react-querybuilder';\nimport { MaterialTableColumnProps } from '../components/material-table/material-table';\nimport _ from 'lodash';\nimport { formatLabel } from '../utils/format-text';\nimport ErpLoader from '../components/loaders/erp-loader';\nimport { enqueueSnackbar } from 'notistack';\nimport { useTranslation } from 'react-i18next';\nimport { useAuth } from '../hooks/useAuth';\n// import { usePermissions } from '../hooks/use-permissions';\n\n/* Interfaces and types */\nexport type ViewType = 'Table' | 'Grid' | 'Kanban' | 'Calendar' | 'Gantt' | '';\n\ninterface SchemaFields {\n\tselect: string;\n\talias: string;\n\ttype: string;\n\tfilter_type?: string;\n\tfilter_name?: string;\n\trequired?: boolean;\n\tisOrderAllowed?: boolean;\n\tisDefault?: boolean;\n\tisFilterAllowed?: boolean;\n\tlabel?: string;\n\tkey: string;\n\taccessorKey?: string;\n\tjoinKey?: string;\n\tenum?: string | string[];\n}\nexport interface SavedViewType {\n\tlabel: ViewType;\n\tposition: number;\n}\nexport interface PageState {\n\t_id: string | number;\n\tname: string;\n\tpage_size: number;\n\tcolumn_order: string[];\n\tvisible_columns: MaterialTableColumnProps[];\n\tviews: SavedViewType[];\n\tactive_view: ViewType;\n\tfilters: RuleGroupType;\n\tfilterQueryString: string;\n\tsort: Record<any, any> | null;\n\tsearch: string;\n\tenabled_views: ViewType[];\n\tisShared: boolean;\n\tcolumn_sizes: Record<string, number>;\n}\n\nexport interface GeneratedColumnsState {\n\tcolumns: MaterialTableColumnProps[];\n\torderKeys: string[];\n}\n\nexport const initialFilter: RuleGroupType = { combinator: 'and', rules: [] };\n\ninterface PageContextValue {\n\tpageTemplateId: string;\n\tactivePage: PageState;\n\tupdatePageInfo: (updates: Partial<PageState>) => void;\n\tloading: boolean;\n\tisSaving: boolean;\n\terror: string | null;\n\tpages: any[];\n\tsavePages: () => void;\n\tsetActivePage: (data: any) => void;\n\tsetPages: React.Dispatch<any>;\n\tschemaFields: SchemaFields[];\n\tinitializeColumns: (columns: MaterialTableColumnProps[]) => void;\n\tgeneratedColumns: GeneratedColumnsState;\n\tsharedPages: any[];\n\tupdateGeneratedColumns: (updates: Partial<GeneratedColumnsState>) => void;\n\tformData:Record<string, any>\n\tsetFormData:(data:Record<string, any>) => void\n}\n\nexport const defaultPageState: PageState = {\n\t_id: '',\n\tname: '',\n\tpage_size: 10,\n\tcolumn_order: ['id'],\n\tvisible_columns: [],\n\tviews: [],\n\tactive_view: '',\n\tfilters: initialFilter,\n\tfilterQueryString: '',\n\tsort: null,\n\tsearch: '',\n\tenabled_views: ['Table', 'Grid', 'Kanban', 'Calendar', 'Gantt'],\n\tisShared: false,\n\tcolumn_sizes: {}\n};\ninterface PageProviderProps {\n\tchildren: React.ReactNode;\n}\n\nconst UpdatePageInfo = () => {};\nconst UpdateGeneratedColumns = () => {};\n\nexport const PageContext = createContext<PageContextValue>({\n\tpageTemplateId: '',\n\tactivePage: defaultPageState,\n\tupdatePageInfo: UpdatePageInfo,\n\tloading: false,\n\tisSaving: false,\n\terror: null,\n\tpages: [],\n\tsharedPages: [],\n\tsavePages: () => {},\n\tsetActivePage: () => {},\n\tsetPages: () => {},\n\tschemaFields: [],\n\tinitializeColumns: () => {},\n\tgeneratedColumns: { columns: [], orderKeys: [] },\n\tupdateGeneratedColumns: UpdateGeneratedColumns,\n});\n\nfunction mergeArraysKeepingOrder(array1: string[], array2: string[]): string[] {\n\t// Create a Set from the first array for efficient lookups\n\tconst array1Set = new Set(array1);\n\n\t// Filter the second array to find elements not in the first array\n\tconst elementsToAdd = array2.filter((item) => !array1Set.has(item));\n\n\t// Combine the original first array with the new elements\n\treturn [...array1, ...elementsToAdd];\n}\n\nconst generateColumnSchema = (\n\tdefaultColumns: MaterialTableColumnProps[],\n\tschemaFields: SchemaFields[],\n\tcolumnOrders: string[],\n\tdColumns?: any[],\n\tt?: any\n): { columns: MaterialTableColumnProps[]; orderKeys: string[] } => {\n\ttry {\n\t\tif(dColumns && dColumns?.length) {\n\t\t\tdefaultColumns = defaultColumns.map((column) => {\n\t\t\t\tconst f = dColumns.find((c) => c.accessorKey == column.accessorKey);\n\t\t\t\treturn f || column\n\t\t\t})\n\t\t}\n\t\tlet orderKeys = columnOrders.length\n\t\t\t? columnOrders\n\t\t\t: (defaultColumns.map((column) => column.accessorKey) as string[]);\n\t\tconst getAccesorKeyViaField = (field: SchemaFields) =>\n\t\t\t\t(field.type === 'object' || field?.join) ? `${field.alias}.${field.accessorKey}` : field.key;\n\t\t\t\n\t\t// Clean up schema fields by removing \"__replaceKey\" from the keys\n\t\tconst updatedFields = schemaFields.map((field) => ({\n\t\t\t...field,\n\t\t\tkey: field.key.replace('__replaceKey', '')\n\t\t})).filter((field)=>!field.is_inner_join);\n\n\t\tconst uniqueFields = _.differenceWith(\n\t\t\tupdatedFields,\n\t\t\tupdatedFields,\n\t\t\t(fieldA, fieldB) => fieldA.key === fieldB?.joinKey\n\t\t);\n\n\t\t// Find fields in schemaFields but not in defaultColumns based on accessorKey\n\t\tconst unmatchedFields = _.differenceWith(\n\t\t\tuniqueFields,\n\t\t\tdefaultColumns,\n\t\t\t(field, column) => getAccesorKeyViaField(field) === column.accessorKey\n\t\t);\n\n\t\t// Map unique fields to MaterialTableColumn structure\n\t\tconst additionalColumns: MaterialTableColumnProps[] = unmatchedFields.map(\n\t\t\t(field) => ({\n\t\t\t\theader: t ? formatLabel(t(field?.label)?.replace('_data', '') || '') : formatLabel(field?.label?.replace('_data', '') || ''),\n\t\t\t\taccessorKey: getAccesorKeyViaField(field),\n\t\t\t\tvisible: false,\n\t\t\t\ttype: field?.enum ? 'status' : field.type,\n\t\t\t\t...(field.type === 'array' && {typeArrayAccessorKey: field.accessorKey || ''}),\n\t\t\t\tenableSorting: (field.type === 'array' || field.type === 'object' || field?.join) ? false: true,\n\t\t\t\t...(field?.type === 'boolean' ? {\n\t\t\t\t\ttypeBooleanLabels: field?.values?.length ? _.mapValues( _.keyBy(\n\t\t\t\t\t\tfield?.values.map(item => ({\n\t\t\t\t\t\t\tkey: item.name,\n\t\t\t\t\t\t\tvalue: item.label\n\t\t\t\t\t\t})),\n\t\t\t\t\t\t'key'\n\t\t\t\t\t), 'value') : { 0: \"Inactive\", 1: \"Active\", false: \"Inactive\", true: \"Active\" }\n\t\t\t\t} : {})\n\t\t\t})\n\t\t);\n\n\t\tconst updatedDefaultColumns = defaultColumns?.map((column) => {\n\t\t\tconst field = schemaFields.find((field) => getAccesorKeyViaField(field) === column.accessorKey);\n\t\t\treturn {\n\t\t\t\t...column,\n\t\t\t\t...((field?.type === 'object' || field?.joinKey||column.enableSorting===false) ? { enableSorting: false } : {})\n\t\t\t};\n\t\t});\n\n\t\t// Combine default columns and additional columns\n\t\tconst columns = [...updatedDefaultColumns, ...additionalColumns];\n\n\t\t// Generate an array of column keys for ordering\n\t\tconst nOrderKeys = columns.map((column) => column.accessorKey) as string[];\n\n\t\torderKeys = mergeArraysKeepingOrder(orderKeys, nOrderKeys);\n\n\t\treturn { columns, orderKeys };\n\t} catch (error) {\n\t\treturn {\n\t\t\tcolumns: defaultColumns,\n\t\t\torderKeys: defaultColumns.map((column) => column.accessorKey) as string[]\n\t\t};\n\t}\n};\n\nexport const PageProvider: React.FC<PageProviderProps> = ({ children }) => {\n\tconst location = useLocation();\n\tconst [activePage, setActivePageData] = useState<PageState>(defaultPageState);\n\t// const permissions=usePermissions();\n\tconst [schemaFields, setSchemaFields] = useState<SchemaFields[]>([]);\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [isSaving, setIsSaving] = useState<boolean>(false);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [pages, setPages] = useState<any>([]);\n\tconst [sharedPages, setSharedPages] = useState<any>([]);\n\tconst [isChanged, setIsChanged] = useState<boolean>(false);\n\tconst [pageTemplateId, setPageTemplateId] = useState<string>('');\n\tconst [isInitialLoad, setIsInitialLoad] = useState<boolean>(true);\n\tconst [isCreatePage, setIsCreatePage] = useState<boolean>(false);\n\tconst [formData, setFormData] = useState<any>({});\n\tconst [generatedColumns, setGeneratedColumns] = useState<{\n\t\tcolumns: MaterialTableColumnProps[];\n\t\torderKeys: string[];\n\t}>({ columns: [], orderKeys: [] });\n\tconst {user} = useAuth()\n\t// Add ref to track current pathname for race condition prevention\n\tconst currentPathnameRef = useRef<string>(location.pathname);\n\tconst curPathName = useMemo(() => location.pathname, [location.pathname])\n\t\n\t// Get current page's default columns and resources\n\tconst defaultColumns: any[] = useMemo(() => {\n\t\tconst columns = routeToColumnsMap[curPathName]?.defaultColumns || [];\n\t\treturn columns;\n\t}, [curPathName]);\n\t\n\tconst resources: IResources = useMemo(() => {\n\t\tconst resource = routeToResourceMap[curPathName] || null;\n\t\treturn resource;\n\t}, [curPathName]);\n\n\t//Translation\n\tconst {t}=useTranslation()\n\n\t// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\n\tconst initializeColumns = (columns: MaterialTableColumnProps[]) => {\n\t\t//! Remove the function if not needed\n\t};\n\n\t// Fetch page-related information from API\n\tconst fetchPageData = useCallback(\n\t\tasync (currentPath: string, currentDefaultColumns: any[], currentResources: IResources) => {\n\t\t\n\t\t\t// Check if this request is still valid (pathname hasn't changed)\n\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\t\n\t\t\ttry {\n\t\t\t\tif (currentDefaultColumns.length && currentResources) {\n\t\t\t\t\tconst { pageResource = '', fieldResource = '',formResource='' } = currentResources;\n\t\t\t\t\t\n\t\t\t\t\t// Double-check pathname hasn't changed before making API calls\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tconst [pageResponse, fieldResponse,formResponse] = await Promise.all([\n\t\t\t\t\t\tpageResource ? getV1PagesResource({ ...getToken(), resource: pageResource }): Promise.resolve(null),\n\n\t\t\t\t\t\tgetV1FormBuilderSchemaFieldsName({\n\t\t\t\t\t\t\tname: fieldResource,\n\t\t\t\t\t\t\t...getToken(),\n\t\t\t\t\t\t\tskip: 0,\n\t\t\t\t\t\t\tlimit: 999\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tgetV1FormBuilder({\n\t\t\t\t\t\t\t...getToken(),\n\t\t\t\t\t\t\tfilters:`(resource.eq=${formResource}&company_id.eq=${user?.company_id})`,\n\t\t\t\t\t\t})\n\t\t\t\t\t]);\n\n\t\t\t\t\t// Final check - ensure pathname still matches\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed after API call');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fields = fieldResponse?.data?.fields?.map(f => ({...f, label: !f?.label?.trim() ? formatLabel(f.key) : f.label}));\n\n\t\t\t\t\tconst gColumns = generateColumnSchema(currentDefaultColumns, fields, [], [], t);\n \n\t\t\t\t\tconst pages =\n\t\t\t\t\t\tpageResponse?.data?.pages?.map((p) => ({\n\t\t\t\t\t\t\t...defaultPageState,\n\t\t\t\t\t\t\t...p,\n\t\t\t\t\t\t\tvisible_columns: generateColumnSchema(\n\t\t\t\t\t\t\t\tp.visible_columns?.length ? p.visible_columns : currentDefaultColumns,\n\t\t\t\t\t\t\t\tfields,\n\t\t\t\t\t\t\t\tp.column_order || [],\n\t\t\t\t\t\t\t\tcurrentDefaultColumns,\n\t\t\t\t\t\t\t\tt\n\t\t\t\t\t\t\t).columns,\n\t\t\t\t\t\t\tcolumn_order: mergeArraysKeepingOrder(\n\t\t\t\t\t\t\t\tp.column_order || [],\n\t\t\t\t\t\t\t\t_.uniq(gColumns.orderKeys)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})) || [];\n\t\t\t\t\tconst sharedPages =\n\t\t\t\t\t\tpageResponse?.data?.shared_pages?.map((sPages) => ({\n\t\t\t\t\t\t\t...sPages.details,\n\t\t\t\t\t\t\tisShared: true,\n\t\t\t\t\t\t\towner: sPages.owner,\n\t\t\t\t\t\t\t_id: sPages.id\n\t\t\t\t\t\t})) || [];\n\n\t\t\t\t\tconst uPages = [...pages, ...sharedPages];\n\n\t\t\t\t\t// Only update state if we're still on the same path\n\t\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\t\tsetSchemaFields(fields),\n\t\t\t\t\t\t\tsetGeneratedColumns(gColumns),\n\t\t\t\t\t\t\tsetPageTemplateId(pageResponse?.data?._id),\n\t\t\t\t\t\t\tsetSharedPages(sharedPages),\n\t\t\t\t\t\t\tsetPages(uPages || []),\n\t\t\t\t\t\t\tsetFormData(formResponse?.data?.form?.[0] || {}),\n\t\t\t\t\t\t\tsetActivePageData((prev) => ({\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t...(pages?.[0] || {}) // Merge API response with current state\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// Only set error if we're still on the same path\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\tsetError('Failed to load page data');\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\t// Only update loading state if we're still on the same path\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tsetLoading(false);\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[] // Remove dependencies to prevent stale closures\n\t);\n\n\t// Update page state dynamically\n\tconst updatePageInfo = (updates: Partial<PageState>) => {\n\t\tsetActivePageData((prev) => ({\n\t\t\t...prev,\n\t\t\t...updates\n\t\t}));\n\t\t!isInitialLoad && setIsChanged(true)\n\t\tsetIsInitialLoad(false)\n\t};\n\n\t// Update columns state dynamically\n\tconst updateGeneratedColumns = (updates: Partial<GeneratedColumnsState>) => {\n\t\tsetGeneratedColumns((prev) => ({\n\t\t\t...prev,\n\t\t\t...updates\n\t\t}));\n\t};\n\n\tconst setActivePage = (page: PageState) => {\n\t\tconst uPages = pages.map((p) =>\n\t\t\tp._id == activePage?._id ? activePage : p\n\t\t);\n\t\tsetPages(uPages);\n\t\tsetActivePageData(page);\n\t};\n\n\tconst savePages = async () => {\n\t\tsetError(null);\n\t\tsetIsSaving(true);\n\t\tawait addOrDeletePage()\n\t\tsetTimeout(() => {\n\t\t\tsetIsSaving(false);\n\t\t}, 1000);\n\t};\n\tconst fetchSavedFilters = async (): Promise<void> => {\n\n\t\tawait\tgetV1FilterResource({ ...getToken(), resource: resources?.pageResource || resources?.fieldResource })\n\t\t\t\n\t};\n\n\tconst addOrDeletePage=async(restPages?:any[])=>{\n\t\ttry {\n\t\t\tconst filteredPages =restPages?.length ? restPages : pages.filter((page) => !page.isShared);\n\t\t\tconst uPages = filteredPages.map((p) =>\n\t\t\t\t(p._id == activePage?._id && activePage.name==p.name) ? activePage : p\n\t\t\t);\n\t\t\tconst sanitizedPages = removeIdStaticIdsFromMongoObject(uPages);\n\n\t\t\tconst response = await patchV1PagesPageId({\n\t\t\t\t...getToken(),\n\t\t\t\t...{ page_id: pageTemplateId, pages: sanitizedPages }\n\t\t\t});\n\t\t\tif (response.status_code === 200) {\n\t\t\t\tconst updatedPages = response?.data?.pages || [];\n\t\t\t\tsetPages(updatedPages);\n \t\tfetchSavedFilters();\n\t\t\t\tsetActivePageData((prev) => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\t...(updatedPages.find((p) => p.name == prev.name) || {})\n\t\t\t\t}));\n\t\t\t\tsetIsChanged(false);\n\t\t\t\tsetIsCreatePage(false);\n\t\t\t\tsetFormData(response?.data?.form?.[0] || {});\n\t\t\t\tconst msg=restPages?.length ? t('pages.msg.delete') : t('pages.msg.save')\n\t\t\t\tenqueueSnackbar(msg);\n\t\t\t}\n\t\t\treturn response\n\t\t} catch (err) {\n\t\t\tsetError('Failed to save page data');\n\t\t} \n\t}\n\t\n\tconst deletePage=async(pages:string)=>{\n\t\taddOrDeletePage(pages);\n\t}\n\n\t// Handle pathname changes\n\tuseEffect(() => {\n\t\t// Update the ref immediately\n\t\tcurrentPathnameRef.current = curPathName;\n\t\t\n\t\t// Reset state for new page\n\t\tsetLoading(true);\n\t\tsetIsSaving(false);\n\t\tsetActivePageData(defaultPageState);\n\t\tsetIsChanged(false);\n\t\tsetIsInitialLoad(true);\n\t\t\n\t\t// Clear previous data to prevent showing stale data\n\t\tsetSchemaFields([]);\n\t\tsetGeneratedColumns({ columns: [], orderKeys: [] });\n\t\tsetPages([]);\n\t\tsetSharedPages([]);\n\t\tsetPageTemplateId('');\n\t\tsetError(null);\n\t\t\n\t\t// Fetch data for new page with current values\n\t\tfetchPageData(curPathName, defaultColumns, resources);\n\n\t\treturn () => { setLoading(true) }\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [curPathName, JSON.stringify(defaultColumns), JSON.stringify(resources)]); // Remove other dependencies to prevent issues\n\n\n\tif ((loading || curPathName != currentPathnameRef.current) && resources) {\n\t\treturn <ErpLoader />; // Show loader before rendering anything else\n\t}\n\n\treturn (\n\t\t<PageContext.Provider\n\t\t\tvalue={{\n\t\t\t\tpageTemplateId,\n\t\t\t\tactivePage,\n\t\t\t\tpages,\n\t\t\t\tsharedPages,\n\t\t\t\tschemaFields,\n\t\t\t\tsetPages,\n\t\t\t\tupdatePageInfo,\n\t\t\t\tsavePages,\n\t\t\t\tsetActivePage,\n\t\t\t\tisSaving,\n\t\t\t\tloading,\n\t\t\t\terror,\n\t\t\t\tinitializeColumns,\n\t\t\t\tgeneratedColumns,\n\t\t\t\tupdateGeneratedColumns,\n\t\t\t\tisChanged,\n\t\t\t\tdeletePage,\n\t\t\t\tisCreatePage,\n\t\t\t\tsetIsCreatePage,\n\t\t\t\taddOrDeletePage,\n\t\t\t\tsetIsChanged,\n\t\t\t\tformData\n\t\t\t}}>\n\t\t\t{children}\n\t\t</PageContext.Provider>\n\t);\n};\n"],"names":["initialFilter","combinator","rules","defaultPageState","_id","name","page_size","column_order","visible_columns","views","active_view","filters","filterQueryString","sort","search","enabled_views","isShared","column_sizes","PageContext","createContext","pageTemplateId","activePage","updatePageInfo","loading","isSaving","error","pages","sharedPages","savePages","setActivePage","setPages","schemaFields","initializeColumns","generatedColumns","columns","orderKeys","updateGeneratedColumns","mergeArraysKeepingOrder","array1","array2","array1Set","Set","elementsToAdd","filter","item","has","generateColumnSchema","defaultColumns","columnOrders","dColumns","t","length","map","column","find","c","accessorKey","getAccesorKeyViaField","field","type","join","alias","key","updatedFields","replace","is_inner_join","uniqueFields","_","differenceWith","fieldA","fieldB","joinKey","additionalColumns","header","formatLabel","_a","label","_b","visible","enum","typeArrayAccessorKey","enableSorting","typeBooleanLabels","_c","values","mapValues","keyBy","value","false","true","children","location","useLocation","setActivePageData","useState","setSchemaFields","setLoading","setIsSaving","setError","setSharedPages","isChanged","setIsChanged","setPageTemplateId","isInitialLoad","setIsInitialLoad","isCreatePage","setIsCreatePage","formData","setFormData","setGeneratedColumns","user","useAuth","currentPathnameRef","useRef","pathname","curPathName","useMemo","routeToColumnsMap","resources","routeToResourceMap","useTranslation","fetchPageData","useCallback","async","currentPath","currentDefaultColumns","currentResources","current","pageResource","fieldResource","formResource","pageResponse","fieldResponse","formResponse","Promise","all","getV1PagesResource","getToken","resource","resolve","getV1FormBuilderSchemaFieldsName","getV1FormBuilder","company_id","fields","data","f","trim","gColumns","_d","p","uniq","_f","_e","shared_pages","sPages","details","owner","id","uPages","_g","_i","_h","form","prev","err","setTimeout","addOrDeletePage","restPages","page","sanitizedPages","removeIdStaticIdsFromMongoObject","response","patchV1PagesPageId","page_id","status_code","updatedPages","getV1FilterResource","fetchSavedFilters","msg","enqueueSnackbar","useEffect","JSON","stringify","ErpLoader","jsx","Provider","updates","deletePage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/contexts/page-context.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\n/* eslint-disable no-mixed-spaces-and-tabs */\n\nimport React, { createContext, useCallback, useEffect, useMemo, useState, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport {\n\tgetV1FilterResource,\n\tgetV1FormBuilder,\n\tgetV1FormBuilderSchemaFieldsName,\n\tgetV1PagesResource,\n\tpatchV1PagesPageId\n} from '../api-client/api.system-feature/api';\nimport { IResources, routeToColumnsMap, routeToResourceMap } from '../constants/route-page-map'; // Removed - should be passed as props or configured by consuming app\nimport { getToken } from '../utils/common';\nimport { removeIdStaticIdsFromMongoObject } from '../utils/common';\nimport { RuleGroupType } from 'react-querybuilder';\nimport { MaterialTableColumnProps } from '../components/material-table/material-table';\nimport _ from 'lodash';\nimport { formatLabel } from '../utils/format-text';\nimport ErpLoader from '../components/loaders/erp-loader';\nimport { enqueueSnackbar } from 'notistack';\nimport { useTranslation } from 'react-i18next';\nimport { useAuth } from '../hooks/useAuth';\n// import { usePermissions } from '../hooks/use-permissions';\n\n/* Interfaces and types */\nexport type ViewType = 'Table' | 'Grid' | 'Kanban' | 'Calendar' | 'Gantt' | '';\n\ninterface SchemaFields {\n\tselect: string;\n\talias: string;\n\ttype: string;\n\tfilter_type?: string;\n\tfilter_name?: string;\n\trequired?: boolean;\n\tisOrderAllowed?: boolean;\n\tisDefault?: boolean;\n\tisFilterAllowed?: boolean;\n\tlabel?: string;\n\tkey: string;\n\taccessorKey?: string;\n\tjoinKey?: string;\n\tenum?: string | string[];\n}\nexport interface SavedViewType {\n\tlabel: ViewType;\n\tposition: number;\n}\nexport interface PageState {\n\t_id: string | number;\n\tname: string;\n\tpage_size: number;\n\tcolumn_order: string[];\n\tvisible_columns: MaterialTableColumnProps[];\n\tviews: SavedViewType[];\n\tactive_view: ViewType;\n\tfilters: RuleGroupType;\n\tfilterQueryString: string;\n\tsort: Record<any, any> | null;\n\tsearch: string;\n\tenabled_views: ViewType[];\n\tisShared: boolean;\n\tcolumn_sizes: Record<string, number>;\n}\n\nexport interface GeneratedColumnsState {\n\tcolumns: MaterialTableColumnProps[];\n\torderKeys: string[];\n}\n\nexport const initialFilter: RuleGroupType = { combinator: 'and', rules: [] };\n\ninterface PageContextValue {\n\tpageTemplateId: string;\n\tactivePage: PageState;\n\tupdatePageInfo: (updates: Partial<PageState>) => void;\n\tloading: boolean;\n\tisSaving: boolean;\n\terror: string | null;\n\tpages: any[];\n\tsavePages: () => void;\n\tsetActivePage: (data: any) => void;\n\tsetPages: React.Dispatch<any>;\n\tschemaFields: SchemaFields[];\n\tinitializeColumns: (columns: MaterialTableColumnProps[]) => void;\n\tgeneratedColumns: GeneratedColumnsState;\n\tsharedPages: any[];\n\tupdateGeneratedColumns: (updates: Partial<GeneratedColumnsState>) => void;\n\tformData:Record<string, any>\n\tsetFormData:(data:Record<string, any>) => void\n}\n\nexport const defaultPageState: PageState = {\n\t_id: '',\n\tname: '',\n\tpage_size: 10,\n\tcolumn_order: ['id'],\n\tvisible_columns: [],\n\tviews: [],\n\tactive_view: '',\n\tfilters: initialFilter,\n\tfilterQueryString: '',\n\tsort: null,\n\tsearch: '',\n\tenabled_views: ['Table', 'Grid', 'Kanban', 'Calendar', 'Gantt'],\n\tisShared: false,\n\tcolumn_sizes: {}\n};\ninterface PageProviderProps {\n\tchildren: React.ReactNode;\n}\n\nconst UpdatePageInfo = () => {};\nconst UpdateGeneratedColumns = () => {};\n\nexport const PageContext = createContext<PageContextValue>({\n\tpageTemplateId: '',\n\tactivePage: defaultPageState,\n\tupdatePageInfo: UpdatePageInfo,\n\tloading: false,\n\tisSaving: false,\n\terror: null,\n\tpages: [],\n\tsharedPages: [],\n\tsavePages: () => {},\n\tsetActivePage: () => {},\n\tsetPages: () => {},\n\tschemaFields: [],\n\tinitializeColumns: () => {},\n\tgeneratedColumns: { columns: [], orderKeys: [] },\n\tupdateGeneratedColumns: UpdateGeneratedColumns,\n});\n\nfunction mergeArraysKeepingOrder(array1: string[], array2: string[]): string[] {\n\t// Create a Set from the first array for efficient lookups\n\tconst array1Set = new Set(array1);\n\n\t// Filter the second array to find elements not in the first array\n\tconst elementsToAdd = array2.filter((item) => !array1Set.has(item));\n\n\t// Combine the original first array with the new elements\n\treturn [...array1, ...elementsToAdd];\n}\n\nconst generateColumnSchema = (\n\tdefaultColumns: MaterialTableColumnProps[],\n\tschemaFields: SchemaFields[],\n\tcolumnOrders: string[],\n\tdColumns?: any[],\n\tt?: any\n): { columns: MaterialTableColumnProps[]; orderKeys: string[] } => {\n\ttry {\n\t\tif(dColumns && dColumns?.length) {\n\t\t\tdefaultColumns = defaultColumns.map((column) => {\n\t\t\t\tconst f = dColumns.find((c) => c.accessorKey == column.accessorKey);\n\t\t\t\treturn f || column\n\t\t\t})\n\t\t}\n\t\tlet orderKeys = columnOrders.length\n\t\t\t? columnOrders\n\t\t\t: (defaultColumns.map((column) => column.accessorKey) as string[]);\n\t\tconst getAccesorKeyViaField = (field: SchemaFields) =>\n\t\t\t\t(field.type === 'object' || field?.join) ? `${field.alias}.${field.accessorKey}` : field.key;\n\t\t\t\n\t\t// Clean up schema fields by removing \"__replaceKey\" from the keys\n\t\tconst updatedFields = schemaFields.map((field) => ({\n\t\t\t...field,\n\t\t\tkey: field.key.replace('__replaceKey', '')\n\t\t})).filter((field)=>!field.is_inner_join);\n\n\t\tconst uniqueFields = _.differenceWith(\n\t\t\tupdatedFields,\n\t\t\tupdatedFields,\n\t\t\t(fieldA, fieldB) => fieldA.key === fieldB?.joinKey\n\t\t);\n\n\t\t// Find fields in schemaFields but not in defaultColumns based on accessorKey\n\t\tconst unmatchedFields = _.differenceWith(\n\t\t\tuniqueFields,\n\t\t\tdefaultColumns,\n\t\t\t(field, column) => getAccesorKeyViaField(field) === column.accessorKey\n\t\t);\n\n\t\t// Map unique fields to MaterialTableColumn structure\n\t\tconst additionalColumns: MaterialTableColumnProps[] = unmatchedFields.map(\n\t\t\t(field) => ({\n\t\t\t\theader: t ? formatLabel(t(field?.label)?.replace('_data', '') || '') : formatLabel(field?.label?.replace('_data', '') || ''),\n\t\t\t\taccessorKey: getAccesorKeyViaField(field),\n\t\t\t\tvisible: false,\n\t\t\t\ttype: field?.enum ? 'status' : field.type,\n\t\t\t\t...(field.type === 'array' && {typeArrayAccessorKey: field.accessorKey || ''}),\n\t\t\t\tenableSorting: (field.type === 'array' || field.type === 'object' || field?.join) ? false: true,\n\t\t\t\t...(field?.type === 'boolean' ? {\n\t\t\t\t\ttypeBooleanLabels: field?.values?.length ? _.mapValues( _.keyBy(\n\t\t\t\t\t\tfield?.values.map(item => ({\n\t\t\t\t\t\t\tkey: item.name,\n\t\t\t\t\t\t\tvalue: item.label\n\t\t\t\t\t\t})),\n\t\t\t\t\t\t'key'\n\t\t\t\t\t), 'value') : { 0: \"Inactive\", 1: \"Active\", false: \"Inactive\", true: \"Active\" }\n\t\t\t\t} : {})\n\t\t\t})\n\t\t);\n\n\t\tconst updatedDefaultColumns = defaultColumns?.map((column) => {\n\t\t\tconst field = schemaFields.find((field) => getAccesorKeyViaField(field) === column.accessorKey);\n\t\t\treturn {\n\t\t\t\t...column,\n\t\t\t\t...((field?.type === 'object' || field?.joinKey||column.enableSorting===false) ? { enableSorting: false } : {})\n\t\t\t};\n\t\t});\n\n\t\t// Combine default columns and additional columns\n\t\tconst columns = [...updatedDefaultColumns, ...additionalColumns];\n\n\t\t// Generate an array of column keys for ordering\n\t\tconst nOrderKeys = columns.map((column) => column.accessorKey) as string[];\n\n\t\torderKeys = mergeArraysKeepingOrder(orderKeys, nOrderKeys);\n\n\t\treturn { columns, orderKeys };\n\t} catch (error) {\n\t\treturn {\n\t\t\tcolumns: defaultColumns,\n\t\t\torderKeys: defaultColumns.map((column) => column.accessorKey) as string[]\n\t\t};\n\t}\n};\n\nexport const PageProvider: React.FC<PageProviderProps> = ({ children }) => {\n\tconst location = useLocation();\n\tconst [activePage, setActivePageData] = useState<PageState>(defaultPageState);\n\t// const permissions=usePermissions();\n\tconst [schemaFields, setSchemaFields] = useState<SchemaFields[]>([]);\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [isSaving, setIsSaving] = useState<boolean>(false);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [pages, setPages] = useState<any>([]);\n\tconst [sharedPages, setSharedPages] = useState<any>([]);\n\tconst [isChanged, setIsChanged] = useState<boolean>(false);\n\tconst [pageTemplateId, setPageTemplateId] = useState<string>('');\n\tconst [isInitialLoad, setIsInitialLoad] = useState<boolean>(true);\n\tconst [isCreatePage, setIsCreatePage] = useState<boolean>(false);\n\tconst [formData, setFormData] = useState<any>({});\n\tconst [generatedColumns, setGeneratedColumns] = useState<{\n\t\tcolumns: MaterialTableColumnProps[];\n\t\torderKeys: string[];\n\t}>({ columns: [], orderKeys: [] });\n\tconst {user} = useAuth()\n\t// Add ref to track current pathname for race condition prevention\n\tconst currentPathnameRef = useRef<string>(location.pathname);\n\tconst curPathName = useMemo(() => location.pathname, [location.pathname])\n\t\n\t// Get current page's default columns and resources\n\tconst defaultColumns: any[] = useMemo(() => {\n\t\tconst columns = routeToColumnsMap[curPathName]?.defaultColumns || [];\n\t\treturn columns;\n\t}, [curPathName]);\n\t\n\tconst resources: IResources = useMemo(() => {\n\t\tconst resource = routeToResourceMap[curPathName] || null;\n\t\treturn resource;\n\t}, [curPathName]);\n\n\t//Translation\n\tconst {t}=useTranslation()\n\n\t// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\n\tconst initializeColumns = (columns: MaterialTableColumnProps[]) => {\n\t\t//! Remove the function if not needed\n\t};\n\n\t// Fetch page-related information from API\n\tconst fetchPageData = useCallback(\n\t\tasync (currentPath: string, currentDefaultColumns: any[], currentResources: IResources) => {\n\t\t\n\t\t\t// Check if this request is still valid (pathname hasn't changed)\n\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetLoading(true);\n\t\t\tsetError(null);\n\t\t\t\n\t\t\ttry {\n\t\t\t\tif (currentDefaultColumns.length && currentResources) {\n\t\t\t\t\tconst { pageResource = '', fieldResource = '',formResource='' } = currentResources;\n\t\t\t\t\t\n\t\t\t\t\t// Double-check pathname hasn't changed before making API calls\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tconst [pageResponse, fieldResponse,formResponse] = await Promise.all([\n\t\t\t\t\t\tpageResource ? getV1PagesResource({ ...getToken(), resource: pageResource }): Promise.resolve(null),\n\n\t\t\t\t\t\tgetV1FormBuilderSchemaFieldsName({\n\t\t\t\t\t\t\tname: fieldResource,\n\t\t\t\t\t\t\t...getToken(),\n\t\t\t\t\t\t\tskip: 0,\n\t\t\t\t\t\t\tlimit: 999\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tgetV1FormBuilder({\n\t\t\t\t\t\t\t...getToken(),\n\t\t\t\t\t\t\tfilters:`(resource.eq=${formResource}&company_id.eq=${user?.company_id})`,\n\t\t\t\t\t\t})\n\t\t\t\t\t]);\n\n\t\t\t\t\t// Final check - ensure pathname still matches\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\n\t\t\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed after API call');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fields = fieldResponse?.data?.fields?.map(f => ({...f, label: !f?.label?.trim() ? formatLabel(f.key) : f.label}));\n\n\t\t\t\t\tconst gColumns = generateColumnSchema(currentDefaultColumns, fields, [], [], t);\n \n\t\t\t\t\tconst pages =\n\t\t\t\t\t\tpageResponse?.data?.pages?.map((p) => ({\n\t\t\t\t\t\t\t...defaultPageState,\n\t\t\t\t\t\t\t...p,\n\t\t\t\t\t\t\tvisible_columns: generateColumnSchema(\n\t\t\t\t\t\t\t\tp.visible_columns?.length ? p.visible_columns : currentDefaultColumns,\n\t\t\t\t\t\t\t\tfields,\n\t\t\t\t\t\t\t\tp.column_order || [],\n\t\t\t\t\t\t\t\tcurrentDefaultColumns,\n\t\t\t\t\t\t\t\tt\n\t\t\t\t\t\t\t).columns,\n\t\t\t\t\t\t\tcolumn_order: mergeArraysKeepingOrder(\n\t\t\t\t\t\t\t\tp.column_order || [],\n\t\t\t\t\t\t\t\t_.uniq(gColumns.orderKeys)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})) || [];\n\t\t\t\t\tconst sharedPages =\n\t\t\t\t\t\tpageResponse?.data?.shared_pages?.map((sPages) => ({\n\t\t\t\t\t\t\t...sPages.details,\n\t\t\t\t\t\t\tisShared: true,\n\t\t\t\t\t\t\towner: sPages.owner,\n\t\t\t\t\t\t\t_id: sPages.id\n\t\t\t\t\t\t})) || [];\n\n\t\t\t\t\tconst uPages = [...pages, ...sharedPages];\n\n\t\t\t\t\t// Only update state if we're still on the same path\n\t\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\t\tsetSchemaFields(fields),\n\t\t\t\t\t\t\tsetGeneratedColumns(gColumns),\n\t\t\t\t\t\t\tsetPageTemplateId(pageResponse?.data?._id),\n\t\t\t\t\t\t\tsetSharedPages(sharedPages),\n\t\t\t\t\t\t\tsetPages(uPages || []),\n\t\t\t\t\t\t\tsetFormData(formResponse?.data?.form?.[0] || {}),\n\t\t\t\t\t\t\tsetActivePageData((prev) => ({\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t...(pages?.[0] || {}) // Merge API response with current state\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// Only set error if we're still on the same path\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\tsetError('Failed to load page data');\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\t// Only update loading state if we're still on the same path\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tsetLoading(false);\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[] // Remove dependencies to prevent stale closures\n\t);\n\n\t// Update page state dynamically\n\tconst updatePageInfo = (updates: Partial<PageState>) => {\n\t\tsetActivePageData((prev) => ({\n\t\t\t...prev,\n\t\t\t...updates\n\t\t}));\n\t\t!isInitialLoad && setIsChanged(true)\n\t\tsetIsInitialLoad(false)\n\t};\n\n\t// Update columns state dynamically\n\tconst updateGeneratedColumns = (updates: Partial<GeneratedColumnsState>) => {\n\t\tsetGeneratedColumns((prev) => ({\n\t\t\t...prev,\n\t\t\t...updates\n\t\t}));\n\t};\n\n\tconst setActivePage = (page: PageState) => {\n\t\tconst uPages = pages.map((p) =>\n\t\t\tp._id == activePage?._id ? activePage : p\n\t\t);\n\t\tsetPages(uPages);\n\t\tsetActivePageData(page);\n\t};\n\n\tconst savePages = async () => {\n\t\tsetError(null);\n\t\tsetIsSaving(true);\n\t\tawait addOrDeletePage()\n\t\tsetTimeout(() => {\n\t\t\tsetIsSaving(false);\n\t\t}, 1000);\n\t};\n\tconst fetchSavedFilters = async (): Promise<void> => {\n\n\t\tawait\tgetV1FilterResource({ ...getToken(), resource: resources?.pageResource || resources?.fieldResource })\n\t\t\t\n\t};\n\n\tconst addOrDeletePage=async(restPages?:any[])=>{\n\t\ttry {\n\t\t\tconst filteredPages =restPages?.length ? restPages : pages.filter((page) => !page.isShared);\n\t\t\tconst uPages = filteredPages.map((p) =>\n\t\t\t\t(p._id == activePage?._id && activePage.name==p.name) ? activePage : p\n\t\t\t);\n\t\t\tconst sanitizedPages = removeIdStaticIdsFromMongoObject(uPages);\n\n\t\t\tconst response = await patchV1PagesPageId({\n\t\t\t\t...getToken(),\n\t\t\t\t...{ page_id: pageTemplateId, pages: sanitizedPages }\n\t\t\t});\n\t\t\tif (response.status_code === 200) {\n\t\t\t\tconst updatedPages = response?.data?.pages || [];\n\t\t\t\tsetPages(updatedPages);\n \t\tfetchSavedFilters();\n\t\t\t\tsetActivePageData((prev) => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\t...(updatedPages.find((p) => p.name == prev.name) || {})\n\t\t\t\t}));\n\t\t\t\tsetIsChanged(false);\n\t\t\t\tsetIsCreatePage(false);\n\t\t\t\tsetFormData(response?.data?.form?.[0] || {});\n\t\t\t\tconst msg=restPages?.length ? t('pages.msg.delete') : t('pages.msg.save')\n\t\t\t\tenqueueSnackbar(msg);\n\t\t\t}\n\t\t\treturn response\n\t\t} catch (err) {\n\t\t\tsetError('Failed to save page data');\n\t\t} \n\t}\n\t\n\tconst deletePage=async(pages:string)=>{\n\t\taddOrDeletePage(pages);\n\t}\n\n\t// Handle pathname changes\n\tuseEffect(() => {\n\t\t// Update the ref immediately\n\t\tcurrentPathnameRef.current = curPathName;\n\t\t\n\t\t// Reset state for new page\n\t\tsetLoading(true);\n\t\tsetIsSaving(false);\n\t\tsetActivePageData(defaultPageState);\n\t\tsetIsChanged(false);\n\t\tsetIsInitialLoad(true);\n\t\t\n\t\t// Clear previous data to prevent showing stale data\n\t\tsetSchemaFields([]);\n\t\tsetGeneratedColumns({ columns: [], orderKeys: [] });\n\t\tsetPages([]);\n\t\tsetSharedPages([]);\n\t\tsetPageTemplateId('');\n\t\tsetError(null);\n\t\t\n\t\t// Fetch data for new page with current values\n\t\tfetchPageData(curPathName, defaultColumns, resources);\n\n\t\treturn () => { setLoading(true) }\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [curPathName, JSON.stringify(defaultColumns), JSON.stringify(resources)]); // Remove other dependencies to prevent issues\n\n\n\t// if ((loading || curPathName != currentPathnameRef.current) && resources) {\n\t// \treturn <ErpLoader />; // Show loader before rendering anything else\n\t// }\n\n\treturn (\n\t\t<PageContext.Provider\n\t\t\tvalue={{\n\t\t\t\tpageTemplateId,\n\t\t\t\tactivePage,\n\t\t\t\tpages,\n\t\t\t\tsharedPages,\n\t\t\t\tschemaFields,\n\t\t\t\tsetPages,\n\t\t\t\tupdatePageInfo,\n\t\t\t\tsavePages,\n\t\t\t\tsetActivePage,\n\t\t\t\tisSaving,\n\t\t\t\tloading,\n\t\t\t\terror,\n\t\t\t\tinitializeColumns,\n\t\t\t\tgeneratedColumns,\n\t\t\t\tupdateGeneratedColumns,\n\t\t\t\tisChanged,\n\t\t\t\tdeletePage,\n\t\t\t\tisCreatePage,\n\t\t\t\tsetIsCreatePage,\n\t\t\t\taddOrDeletePage,\n\t\t\t\tsetIsChanged,\n\t\t\t\tformData\n\t\t\t}}>\n\t\t\t{children}\n\t\t</PageContext.Provider>\n\t);\n};\n"],"names":["initialFilter","combinator","rules","defaultPageState","_id","name","page_size","column_order","visible_columns","views","active_view","filters","filterQueryString","sort","search","enabled_views","isShared","column_sizes","PageContext","createContext","pageTemplateId","activePage","updatePageInfo","loading","isSaving","error","pages","sharedPages","savePages","setActivePage","setPages","schemaFields","initializeColumns","generatedColumns","columns","orderKeys","updateGeneratedColumns","mergeArraysKeepingOrder","array1","array2","array1Set","Set","elementsToAdd","filter","item","has","generateColumnSchema","defaultColumns","columnOrders","dColumns","t","length","map","column","find","c","accessorKey","getAccesorKeyViaField","field","type","join","alias","key","updatedFields","replace","is_inner_join","uniqueFields","_","differenceWith","fieldA","fieldB","joinKey","additionalColumns","header","formatLabel","_a","label","_b","visible","enum","typeArrayAccessorKey","enableSorting","typeBooleanLabels","_c","values","mapValues","keyBy","value","false","true","children","location","useLocation","setActivePageData","useState","setSchemaFields","setLoading","setIsSaving","setError","setSharedPages","isChanged","setIsChanged","setPageTemplateId","isInitialLoad","setIsInitialLoad","isCreatePage","setIsCreatePage","formData","setFormData","setGeneratedColumns","user","useAuth","currentPathnameRef","useRef","pathname","curPathName","useMemo","routeToColumnsMap","resources","routeToResourceMap","useTranslation","fetchPageData","useCallback","async","currentPath","currentDefaultColumns","currentResources","current","pageResource","fieldResource","formResource","pageResponse","fieldResponse","formResponse","Promise","all","getV1PagesResource","getToken","resource","resolve","getV1FormBuilderSchemaFieldsName","getV1FormBuilder","company_id","fields","data","f","trim","gColumns","_d","p","uniq","_f","_e","shared_pages","sPages","details","owner","id","uPages","_g","_i","_h","form","prev","err","setTimeout","addOrDeletePage","restPages","page","sanitizedPages","removeIdStaticIdsFromMongoObject","response","patchV1PagesPageId","page_id","status_code","updatedPages","getV1FilterResource","fetchSavedFilters","msg","enqueueSnackbar","useEffect","JSON","stringify","jsx","Provider","updates","deletePage"],"mappings":"8lBAsEO,MAAMA,EAA+B,CAAEC,WAAY,MAAOC,MAAO,IAsB3DC,EAA8B,CAC1CC,IAAK,GACLC,KAAM,GACNC,UAAW,GACXC,aAAc,CAAC,MACfC,gBAAiB,GACjBC,MAAO,GACPC,YAAa,GACbC,QAASX,EACTY,kBAAmB,GACnBC,KAAM,KACNC,OAAQ,GACRC,cAAe,CAAC,QAAS,OAAQ,SAAU,WAAY,SACvDC,UAAU,EACVC,aAAc,CAAA,GASFC,EAAcC,EAAAA,cAAgC,CAC1DC,eAAgB,GAChBC,WAAYlB,EACZmB,eANsB,OAOtBC,SAAS,EACTC,UAAU,EACVC,MAAO,KACPC,MAAO,GACPC,YAAa,GACbC,UAAW,OACXC,cAAe,OACfC,SAAU,OACVC,aAAc,GACdC,kBAAmB,OACnBC,iBAAkB,CAAEC,QAAS,GAAIC,UAAW,IAC5CC,uBAjB8B,SAoB/B,SAASC,EAAwBC,EAAkBC,GAElD,MAAMC,EAAY,IAAIC,IAAIH,GAGpBI,EAAgBH,EAAOI,OAAQC,IAAUJ,EAAUK,IAAID,IAG7D,MAAO,IAAIN,KAAWI,EACvB,CAEA,MAAMI,EAAuB,CAC5BC,EACAhB,EACAiB,EACAC,EACAC,KAEA,IACID,UAAYA,WAAUE,UACxBJ,EAAiBA,EAAeK,IAAKC,GAC1BJ,EAASK,KAAMC,GAAMA,EAAEC,aAAeH,EAAOG,cAC3CH,IAGd,IAAIlB,EAAYa,EAAaG,OAC1BH,EACCD,EAAeK,IAAKC,GAAWA,EAAOG,aAC1C,MAAMC,EAAyBC,GACb,WAAfA,EAAMC,OAAqB,MAAAD,OAAA,EAAAA,EAAOE,MAAQ,GAAGF,EAAMG,SAASH,EAAMF,cAAgBE,EAAMI,IAGrFC,EAAgBhC,EAAaqB,IAAKM,IAAA,IACpCA,EACHI,IAAKJ,EAAMI,IAAIE,QAAQ,eAAgB,OACpCrB,OAAQe,IAASA,EAAMO,eAErBC,EAAeC,EAAAA,QAAEC,eACtBL,EACAA,EACA,CAACM,EAAQC,IAAWD,EAAOP,OAAQ,MAAAQ,OAAA,EAAAA,EAAQC,UAWtCC,EAPkBL,EAAAA,QAAEC,eACzBF,EACAnB,EACA,CAACW,EAAOL,IAAWI,EAAsBC,KAAWL,EAAOG,aAIUJ,IACpEM,cAAW,MAAA,CACXe,OAAQvB,EAAIwB,EAAAA,aAAY,OAAAC,IAAE,MAAAjB,OAAA,EAAAA,EAAOkB,aAAT,EAAAD,EAAiBX,QAAQ,QAAS,MAAO,IAAMU,EAAAA,aAAY,OAAAG,EAAA,MAAAnB,OAAA,EAAAA,EAAOkB,YAAP,EAAAC,EAAcb,QAAQ,QAAS,MAAO,IACzHR,YAAaC,EAAsBC,GACnCoB,SAAS,EACTnB,MAAM,MAAAD,OAAA,EAAAA,EAAOqB,MAAO,SAAWrB,EAAMC,QAClB,UAAfD,EAAMC,MAAoB,CAACqB,qBAAsBtB,EAAMF,aAAe,IAC1EyB,cAA+B,UAAfvB,EAAMC,MAAmC,WAAfD,EAAMC,QAAqB,MAAAD,OAAA,EAAAA,EAAOE,SACxD,aAAhB,MAAAF,OAAA,EAAAA,EAAOC,MAAqB,CAC/BuB,mBAAmB,OAAAC,mBAAOC,aAAP,EAAAD,EAAehC,QAASgB,EAAAA,QAAEkB,UAAWlB,EAAAA,QAAEmB,MACzD,MAAA5B,OAAA,EAAAA,EAAO0B,OAAOhC,IAAIR,IAAA,CACjBkB,IAAKlB,EAAKvC,KACVkF,MAAO3C,EAAKgC,SAEb,OACE,SAAW,CAAE,EAAG,WAAY,EAAG,SAAUY,MAAO,WAAYC,KAAM,WAClE,CAAA,KAaAvD,EAAU,IATc,MAAAa,OAAA,EAAAA,EAAgBK,IAAKC,IAClD,MAAMK,EAAQ3B,EAAauB,KAAMI,GAAUD,EAAsBC,KAAWL,EAAOG,aACnF,MAAO,IACHH,KACkB,YAAhB,MAAAK,OAAA,EAAAA,EAAOC,QAAqB,MAAAD,OAAA,EAAAA,EAAOa,WAAgC,IAAvBlB,EAAO4B,cAAyB,CAAEA,eAAe,GAAU,CAAA,QAKhET,GAO9C,OAFArC,EAAYE,EAAwBF,EAFjBD,EAAQkB,IAAKC,GAAWA,EAAOG,cAI3C,CAAEtB,UAASC,YACnB,OAASV,GACR,MAAO,CACNS,QAASa,EACTZ,UAAWY,EAAeK,IAAKC,GAAWA,EAAOG,aAEnD,8CAGwD,EAAGkC,eAC3D,MAAMC,EAAWC,EAAAA,eACVvE,EAAYwE,GAAqBC,EAAAA,SAAoB3F,IAErD4B,EAAcgE,GAAmBD,EAAAA,SAAyB,KAC1DvE,EAASyE,GAAcF,EAAAA,UAAkB,IACzCtE,EAAUyE,GAAeH,EAAAA,UAAkB,IAC3CrE,EAAOyE,GAAYJ,EAAAA,SAAwB,OAC3CpE,EAAOI,GAAYgE,EAAAA,SAAc,KACjCnE,EAAawE,GAAkBL,EAAAA,SAAc,KAC7CM,EAAWC,GAAgBP,EAAAA,UAAkB,IAC7C1E,EAAgBkF,GAAqBR,EAAAA,SAAiB,KACtDS,EAAeC,GAAoBV,EAAAA,UAAkB,IACrDW,EAAcC,GAAmBZ,EAAAA,UAAkB,IACnDa,EAAUC,GAAed,EAAAA,SAAc,CAAA,IACvC7D,EAAkB4E,GAAuBf,EAAAA,SAG7C,CAAE5D,QAAS,GAAIC,UAAW,MACvB2E,KAACA,GAAQC,YAETC,EAAqBC,EAAAA,OAAetB,EAASuB,UAC7CC,EAAcC,EAAAA,QAAQ,IAAMzB,EAASuB,SAAU,CAACvB,EAASuB,WAGzDnE,EAAwBqE,EAAAA,QAAQ,WAErC,OADgBC,OAAAA,EAAAA,EAAAA,kBAAkBF,SAAlBE,EAAAA,EAAgCtE,iBAAkB,IAEhE,CAACoE,IAEEG,EAAwBF,EAAAA,QAAQ,IACpBG,EAAAA,mBAAmBJ,IAAgB,KAElD,CAACA,KAGEjE,EAACA,GAAGsE,mBAQJC,EAAgBC,EAAAA,YACrBC,MAAOC,EAAqBC,EAA8BC,2BAGzD,GAAId,EAAmBe,UAAYH,EAAnC,CAKA5B,GAAW,GACXE,EAAS,MAET,IACC,GAAI2B,EAAsB1E,QAAU2E,EAAkB,CACrD,MAAME,aAAEA,EAAe,GAAAC,cAAIA,EAAgB,GAAAC,aAAGA,EAAa,IAAOJ,EAGlE,GAAId,EAAmBe,UAAYH,EAClC,OAGD,MAAOO,EAAcC,EAAcC,SAAsBC,QAAQC,IAAI,CACpEP,EAAeQ,EAAAA,mBAAmB,IAAKC,EAAAA,WAAYC,SAAUV,IAAiBM,QAAQK,QAAQ,MAE9FC,mCAAiC,CAChCvI,KAAM4H,KACHQ,EAAAA,aAIHI,mBAAiB,IACdJ,aACH9H,QAAQ,gBAAgBuH,yBAA8BpB,WAAMgC,kBAK9D,GAAI9B,EAAmBe,UAAYH,EAElC,OAGD,MAAMmB,EAAS,OAAAlE,EAAA,0BAAemE,WAAf,EAAArE,EAAqBoE,aAArB,EAAAlE,EAA6BzB,IAAI6F,UAAM,MAAA,IAAIA,EAAGrE,OAAQ,OAAAD,QAAAsE,WAAGrE,YAAH,EAAAD,EAAUuE,QAA8BD,EAAErE,MAAvBF,cAAYuE,EAAEnF,QAEhGqF,EAAWrG,EAAqB+E,EAAuBkB,EAAQ,GAAI,GAAI7F,GAEvExB,GACL,OAAA0H,EAAA,0BAAcJ,WAAd,EAAA7D,EAAoBzD,YAApB,EAAA0H,EAA2BhG,IAAKiG,UAAO,MAAA,IACnClJ,KACAkJ,EACH7I,gBAAiBsC,GAChB,OAAA6B,EAAA0E,EAAE7I,wBAAFmE,EAAmBxB,QAASkG,EAAE7I,gBAAkBqH,EAChDkB,EACAM,EAAE9I,cAAgB,GAClBsH,EACA3E,GACChB,QACF3B,aAAc8B,EACbgH,EAAE9I,cAAgB,GAClB4D,UAAEmF,KAAKH,EAAShH,iBAEX,GACFR,GACL,OAAA4H,EAAA,0BAAcP,WAAd,EAAAQ,EAAoBC,mBAApB,EAAAF,EAAkCnG,IAAKsG,IAAA,IACnCA,EAAOC,QACV3I,UAAU,EACV4I,MAAOF,EAAOE,MACdxJ,IAAKsJ,EAAOG,QACN,GAEFC,EAAS,IAAIpI,KAAUC,GAGzBqF,EAAmBe,UAAYH,SAC5BU,QAAQC,IAAI,CACjBxC,EAAgBgD,GAChBlC,EAAoBsC,GACpB7C,EAAkB,OAAAyD,EAAA,MAAA5B,OAAA,EAAAA,EAAca,WAAd,EAAAe,EAAoB3J,KACtC+F,EAAexE,GACfG,EAASgI,GAAU,IACnBlD,GAAY,OAAAoD,EAAA,0BAAchB,WAAd,EAAAiB,EAAoBC,WAApB,EAAAF,EAA2B,KAAM,CAAA,GAC7CnE,EAAmBsE,IAAA,IACfA,MACCzI,MAAAA,OAAAA,EAAAA,EAAQ,KAAM,CAAA,MAItB,CACD,OAAS0I,GAEJpD,EAAmBe,UAAYH,GAClC1B,EAAS,2BAEX,CAAA,QAEKc,EAAmBe,UAAYH,GAClCyC,WAAW,KACVrE,GAAW,IACT,IAEL,CA7FA,GAgGD,IA2CKsE,EAAgB3C,MAAM4C,cAC3B,IACC,MACMT,IADe,MAAAS,OAAA,EAAAA,EAAWpH,QAASoH,EAAY7I,EAAMiB,OAAQ6H,IAAUA,EAAKxJ,WACrDoC,IAAKiG,GAChCA,EAAEjJ,MAAO,MAAAiB,OAAA,EAAAA,EAAYjB,MAAOiB,EAAWhB,MAAMgJ,EAAEhJ,KAAQgB,EAAagI,GAEhEoB,EAAiBC,EAAAA,iCAAiCZ,GAElDa,QAAiBC,qBAAmB,IACtCnC,aACEoC,QAASzJ,EAAgBM,MAAO+I,IAEtC,GAA6B,MAAzBE,EAASG,YAAqB,CACjC,MAAMC,GAAe,OAAApG,EAAA,MAAAgG,OAAA,EAAAA,EAAU3B,WAAV,EAAArE,EAAgBjD,QAAS,GAC9CI,EAASiJ,GApBcpD,iBAEnBqD,EAAAA,oBAAoB,IAAKvC,EAAAA,WAAYC,UAAU,MAAApB,OAAA,EAAAA,EAAWU,gBAAgB,MAAAV,OAAA,EAAAA,EAAWW,kBAmBjFgD,GACRpF,EAAmBsE,IAAA,IACfA,KACCY,EAAazH,KAAM+F,GAAMA,EAAEhJ,MAAQ8J,EAAK9J,OAAS,CAAA,KAEtDgG,GAAa,GACbK,GAAgB,GAChBE,GAAY,OAAAzB,EAAA,0BAAU6D,WAAV,EAAAnE,EAAgBqF,WAAhB,EAAA/E,EAAuB,KAAM,CAAA,GACzC,MAAM+F,GAAI,MAAAX,OAAA,EAAAA,EAAWpH,QAASD,EAAE,oBAAsBA,EAAE,kBACxDiI,EAAAA,gBAAgBD,EACjB,CACA,OAAOP,CACR,OAASP,GACRlE,EAAS,2BACV,GAuCD,OA/BAkF,EAAAA,UAAU,KAETpE,EAAmBe,QAAUZ,EAG7BnB,GAAW,GACXC,GAAY,GACZJ,EAAkB1F,GAClBkG,GAAa,GACbG,GAAiB,GAGjBT,EAAgB,IAChBc,EAAoB,CAAE3E,QAAS,GAAIC,UAAW,KAC9CL,EAAS,IACTqE,EAAe,IACfG,EAAkB,IAClBJ,EAAS,MAGTuB,EAAcN,EAAapE,EAAgBuE,GAEpC,KAAQtB,GAAW,KAExB,CAACmB,EAAakE,KAAKC,UAAUvI,GAAiBsI,KAAKC,UAAUhE,oBAQ/DiE,EAAAA,IAACrK,EAAYsK,SAAZ,CACAjG,MAAO,CACNnE,iBACAC,aACAK,QACAC,cACAI,eACAD,WACAR,eApHqBmK,IACvB5F,EAAmBsE,IAAA,IACfA,KACAsB,MAEHlF,GAAiBF,GAAa,GAC/BG,GAAiB,IA+Gf5E,UA5Fe+F,UACjBzB,EAAS,MACTD,GAAY,SACNqE,IACND,WAAW,KACVpE,GAAY,IACV,MAuFDpE,cArGoB2I,IACtB,MAAMV,EAASpI,EAAM0B,IAAKiG,GACzBA,EAAEjJ,MAAO,MAAAiB,OAAA,EAAAA,EAAYjB,KAAMiB,EAAagI,GAEzCvH,EAASgI,GACTjE,EAAkB2E,IAiGhBhJ,WACAD,UACAE,QACAO,kBA1OwBE,MA2OxBD,mBACAG,uBAlH6BqJ,IAC/B5E,EAAqBsD,IAAA,IACjBA,KACAsB,MAgHFrF,YACAsF,WAvDc/D,MAAMjG,IACtB4I,EAAgB5I,IAuDd+E,eACAC,kBACA4D,kBACAjE,eACAM,YAEAjB"}
|
|
@@ -184,7 +184,7 @@ const getAvailableSteelTypes = () => {
|
|
|
184
184
|
const getAvailableTubeTypes = () => {
|
|
185
185
|
return ["Round", "Square", "Rectangle"];
|
|
186
186
|
};
|
|
187
|
-
var
|
|
187
|
+
var useMaterialCalculations_default = {
|
|
188
188
|
useMaterialCalculations,
|
|
189
189
|
validateFormValues,
|
|
190
190
|
getAvailableSteelTypes,
|
|
@@ -192,7 +192,7 @@ var useMaterialCalculations$1 = {
|
|
|
192
192
|
MATERIAL_CONSTANTS
|
|
193
193
|
};
|
|
194
194
|
export {
|
|
195
|
-
|
|
195
|
+
useMaterialCalculations_default as default,
|
|
196
196
|
getAvailableSteelTypes,
|
|
197
197
|
getAvailableTubeTypes,
|
|
198
198
|
useMaterialCalculations,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../src/hooks/use-material-calculations.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport { useMemo } from 'react';\n\n// ==================== CONSTANTS ====================\nconst MATERIAL_CONSTANTS = {\n STEEL_DENSITY: 7.85,\n LENGTH_CONVERSION_FACTOR: 1000,\n TUBE_CALCULATION_FACTOR: 0.024662,\n COIL_WEIGHTS: {\n GI: 2879.95,\n HR: 2356.59,\n },\n} as const;\n\n// ==================== TYPES ====================\ntype SteelType = keyof typeof MATERIAL_CONSTANTS.COIL_WEIGHTS;\ntype TubeType = 'Round' | 'Square' | 'Rectangle';\n\ninterface BaseFormValues {\n // Board calculation fields\n face_width?: string | number;\n bending?: string | number;\n height?: string | number;\n total_width?: string | number;\n boards_thickness?: string | number;\n boards_length?: string | number;\n \n // Steel calculation fields\n steel_length?: string | number;\n steel_width?: string | number;\n steel_thickness?: string | number;\n steel_type?: SteelType;\n \n // Tube calculation fields\n tube_type?: TubeType;\n tube_od?: string | number;\n shape_width?: string | number;\n shape_height?: string | number;\n material_thickness?: string | number;\n material_length?: string | number;\n}\n\ninterface MaterialCalculations {\n totalWidth: number;\n materialUnit: number;\n boardsWeight: number;\n steelWeight: number;\n materialWeight: number;\n}\n\ninterface CalculationResult<T = number> {\n value: T;\n isValid: boolean;\n error?: string;\n}\n\n// ==================== UTILITY FUNCTIONS ====================\n/**\n * Safely parses a value to number with comprehensive validation\n */\nconst safeParseNumber = (value: string | number | undefined | null): CalculationResult<number> => {\n if (value === undefined || value === null || value === '') {\n return { value: 0, isValid: false, error: 'Empty value' };\n }\n \n const parsed = typeof value === 'string' ? parseFloat(value.trim()) : Number(value);\n \n if (isNaN(parsed)) {\n return { value: 0, isValid: false, error: 'Invalid number format' };\n }\n \n if (!isFinite(parsed)) {\n return { value: 0, isValid: false, error: 'Number is not finite' };\n }\n \n return { value: parsed, isValid: true };\n};\n\n/**\n * Validates that all provided values are positive numbers\n */\nconst validatePositiveNumbers = (...values: (string | number | undefined)[]): boolean => {\n return values.every(value => {\n const result = safeParseNumber(value);\n return result.isValid && result.value > 0;\n });\n};\n\n/**\n * Creates a memoization key from form values to optimize re-calculations\n */\nconst createMemoKey = (formValues: BaseFormValues | undefined): string => {\n if (!formValues) return 'empty';\n \n // Only include relevant fields to avoid unnecessary recalculations\n const relevantFields = [\n 'face_width', 'bending', 'height', 'total_width', 'boards_thickness', 'boards_length',\n 'steel_length', 'steel_width', 'steel_thickness', 'steel_type',\n 'tube_type', 'tube_od', 'shape_width', 'shape_height', 'material_thickness', 'material_length'\n ];\n \n return relevantFields\n .map(field => `${field}:${formValues[field as keyof BaseFormValues] ?? ''}`)\n .join('|');\n};\n\n// ==================== CALCULATION FUNCTIONS ====================\n/**\n * Calculates the total width for boards costing\n * Formula: ((height + bending) * 2) + face_width\n */\nconst calculateBoardsTotalWidth = (formValues: BaseFormValues): CalculationResult<number> => {\n const { face_width, bending, height } = formValues;\n \n if (!validatePositiveNumbers(face_width, bending, height)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards total width calculation' };\n }\n \n const faceWidthResult = safeParseNumber(face_width);\n const bendingResult = safeParseNumber(bending);\n const heightResult = safeParseNumber(height);\n \n if (![faceWidthResult, bendingResult, heightResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const totalWidth = ((heightResult.value + bendingResult.value) * 2) + faceWidthResult.value;\n \n return { value: totalWidth, isValid: true };\n};\n\n/**\n * Calculates the weight of boards\n * Formula: (total_width * thickness * (length / 1000)) * 7.85\n */\nconst calculateBoardsWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { total_width, boards_thickness, boards_length } = formValues;\n \n if (!validatePositiveNumbers(total_width, boards_thickness, boards_length)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards weight calculation' };\n }\n \n const totalWidthResult = safeParseNumber(total_width);\n const thicknessResult = safeParseNumber(boards_thickness);\n const lengthResult = safeParseNumber(boards_length);\n \n if (![totalWidthResult, thicknessResult, lengthResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (totalWidthResult.value * thicknessResult.value * \n (lengthResult.value / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR)) * \n MATERIAL_CONSTANTS.STEEL_DENSITY;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates the weight of steel\n * Formula: (length * width * thickness * 7.85) / 1000\n */\nconst calculateSteelWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_length, steel_width, steel_thickness } = formValues;\n \n if (!validatePositiveNumbers(steel_length, steel_width, steel_thickness)) {\n return { value: 0, isValid: false, error: 'Invalid input values for steel weight calculation' };\n }\n \n const lengthResult = safeParseNumber(steel_length);\n const widthResult = safeParseNumber(steel_width);\n const thicknessResult = safeParseNumber(steel_thickness);\n \n if (![lengthResult, widthResult, thicknessResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (lengthResult.value * widthResult.value * thicknessResult.value * \n MATERIAL_CONSTANTS.STEEL_DENSITY) / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Gets the material unit weight based on steel type\n */\nconst calculateMaterialUnit = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_type } = formValues;\n \n if (!steel_type) {\n return { value: 0, isValid: false, error: 'Steel type not specified' };\n }\n \n if (!(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n return { value: 0, isValid: false, error: `Unsupported steel type: ${steel_type}` };\n }\n \n const weight = MATERIAL_CONSTANTS.COIL_WEIGHTS[steel_type];\n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates material weight based on tube type and dimensions\n * Supports Round, Square, and Rectangle tube types\n */\nconst calculateTubeMaterialWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { tube_type, tube_od, shape_width, shape_height, material_thickness, material_length } = formValues;\n \n if (!tube_type) {\n return { value: 0, isValid: false, error: 'Tube type not specified' };\n }\n \n const thicknessResult = safeParseNumber(material_thickness);\n const lengthResult = safeParseNumber(material_length);\n \n if (!thicknessResult.isValid || !lengthResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid thickness or length values' };\n }\n \n let weight = 0;\n \n switch (tube_type) {\n case 'Round': {\n const odResult = safeParseNumber(tube_od);\n if (!odResult.isValid || odResult.value <= thicknessResult.value) {\n return { value: 0, isValid: false, error: 'Invalid outer diameter for round tube' };\n }\n \n weight = (odResult.value - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR * lengthResult.value;\n break;\n }\n \n case 'Square':\n case 'Rectangle': {\n const widthResult = safeParseNumber(shape_width);\n const heightResult = safeParseNumber(shape_height);\n \n if (!widthResult.isValid || !heightResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid width or height for rectangular tube' };\n }\n \n const perimeter = 2 * (widthResult.value + heightResult.value);\n weight = (((perimeter / Math.PI) - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR) * lengthResult.value;\n break;\n }\n \n default:\n return { value: 0, isValid: false, error: `Unsupported tube type: ${tube_type}` };\n }\n \n return { value: Math.max(0, weight), isValid: true };\n};\n\n// ==================== MAIN HOOK ====================\n/**\n * Custom hook for optimized material calculations with comprehensive error handling\n * and performance optimization through memoization\n */\nexport const useMaterialCalculations = (formValues?: BaseFormValues): MaterialCalculations => {\n const calculations = useMemo(() => {\n if (!formValues) {\n return {\n totalWidth: 0,\n materialUnit: 0,\n boardsWeight: 0,\n steelWeight: 0,\n materialWeight: 0,\n };\n }\n \n // Calculate all values with error handling\n const totalWidthResult = calculateBoardsTotalWidth(formValues);\n const materialUnitResult = calculateMaterialUnit(formValues);\n const boardsWeightResult = calculateBoardsWeight(formValues);\n const steelWeightResult = calculateSteelWeight(formValues);\n const materialWeightResult = calculateTubeMaterialWeight(formValues);\n \n // Optional: Log errors in development\n if (process.env.NODE_ENV === 'development') {\n [totalWidthResult, materialUnitResult, boardsWeightResult, steelWeightResult, materialWeightResult]\n .filter(result => !result.isValid && result.error)\n .forEach(result => console.warn('Calculation warning:', result.error));\n }\n \n return {\n totalWidth: totalWidthResult.value,\n materialUnit: materialUnitResult.value,\n boardsWeight: boardsWeightResult.value,\n steelWeight: steelWeightResult.value,\n materialWeight: materialWeightResult.value,\n };\n }, [createMemoKey(formValues)]); // Optimized dependency to prevent unnecessary recalculations\n \n return calculations;\n};\n\n// ==================== ADDITIONAL UTILITIES ====================\n/**\n * Utility function to validate form values before calculations\n */\nexport const validateFormValues = (formValues: BaseFormValues): { isValid: boolean; errors: string[] } => {\n const errors: string[] = [];\n const { tube_type, steel_type } = formValues;\n \n // Validate steel type if provided\n if (steel_type && !(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n errors.push(`Invalid steel type: ${steel_type}`);\n }\n \n // Validate tube type if provided\n if (tube_type && !['Round', 'Square', 'Rectangle'].includes(tube_type)) {\n errors.push(`Invalid tube type: ${tube_type}`);\n }\n \n return { isValid: errors.length === 0, errors };\n};\n\n/**\n * Get available steel types for form validation\n */\nexport const getAvailableSteelTypes = (): SteelType[] => {\n return Object.keys(MATERIAL_CONSTANTS.COIL_WEIGHTS) as SteelType[];\n};\n\n/**\n * Get available tube types for form validation\n */\nexport const getAvailableTubeTypes = (): TubeType[] => {\n return ['Round', 'Square', 'Rectangle'];\n};\n\nexport default {\n useMaterialCalculations,\n validateFormValues,\n getAvailableSteelTypes,\n getAvailableTubeTypes,\n MATERIAL_CONSTANTS,\n};\nexport type {\n BaseFormValues,\n MaterialCalculations,\n SteelType,\n TubeType,\n CalculationResult,\n};"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../src/hooks/use-material-calculations.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport { useMemo } from 'react';\n\n// ==================== CONSTANTS ====================\nconst MATERIAL_CONSTANTS = {\n STEEL_DENSITY: 7.85,\n LENGTH_CONVERSION_FACTOR: 1000,\n TUBE_CALCULATION_FACTOR: 0.024662,\n COIL_WEIGHTS: {\n GI: 2879.95,\n HR: 2356.59,\n },\n} as const;\n\n// ==================== TYPES ====================\ntype SteelType = keyof typeof MATERIAL_CONSTANTS.COIL_WEIGHTS;\ntype TubeType = 'Round' | 'Square' | 'Rectangle';\n\ninterface BaseFormValues {\n // Board calculation fields\n face_width?: string | number;\n bending?: string | number;\n height?: string | number;\n total_width?: string | number;\n boards_thickness?: string | number;\n boards_length?: string | number;\n \n // Steel calculation fields\n steel_length?: string | number;\n steel_width?: string | number;\n steel_thickness?: string | number;\n steel_type?: SteelType;\n \n // Tube calculation fields\n tube_type?: TubeType;\n tube_od?: string | number;\n shape_width?: string | number;\n shape_height?: string | number;\n material_thickness?: string | number;\n material_length?: string | number;\n}\n\ninterface MaterialCalculations {\n totalWidth: number;\n materialUnit: number;\n boardsWeight: number;\n steelWeight: number;\n materialWeight: number;\n}\n\ninterface CalculationResult<T = number> {\n value: T;\n isValid: boolean;\n error?: string;\n}\n\n// ==================== UTILITY FUNCTIONS ====================\n/**\n * Safely parses a value to number with comprehensive validation\n */\nconst safeParseNumber = (value: string | number | undefined | null): CalculationResult<number> => {\n if (value === undefined || value === null || value === '') {\n return { value: 0, isValid: false, error: 'Empty value' };\n }\n \n const parsed = typeof value === 'string' ? parseFloat(value.trim()) : Number(value);\n \n if (isNaN(parsed)) {\n return { value: 0, isValid: false, error: 'Invalid number format' };\n }\n \n if (!isFinite(parsed)) {\n return { value: 0, isValid: false, error: 'Number is not finite' };\n }\n \n return { value: parsed, isValid: true };\n};\n\n/**\n * Validates that all provided values are positive numbers\n */\nconst validatePositiveNumbers = (...values: (string | number | undefined)[]): boolean => {\n return values.every(value => {\n const result = safeParseNumber(value);\n return result.isValid && result.value > 0;\n });\n};\n\n/**\n * Creates a memoization key from form values to optimize re-calculations\n */\nconst createMemoKey = (formValues: BaseFormValues | undefined): string => {\n if (!formValues) return 'empty';\n \n // Only include relevant fields to avoid unnecessary recalculations\n const relevantFields = [\n 'face_width', 'bending', 'height', 'total_width', 'boards_thickness', 'boards_length',\n 'steel_length', 'steel_width', 'steel_thickness', 'steel_type',\n 'tube_type', 'tube_od', 'shape_width', 'shape_height', 'material_thickness', 'material_length'\n ];\n \n return relevantFields\n .map(field => `${field}:${formValues[field as keyof BaseFormValues] ?? ''}`)\n .join('|');\n};\n\n// ==================== CALCULATION FUNCTIONS ====================\n/**\n * Calculates the total width for boards costing\n * Formula: ((height + bending) * 2) + face_width\n */\nconst calculateBoardsTotalWidth = (formValues: BaseFormValues): CalculationResult<number> => {\n const { face_width, bending, height } = formValues;\n \n if (!validatePositiveNumbers(face_width, bending, height)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards total width calculation' };\n }\n \n const faceWidthResult = safeParseNumber(face_width);\n const bendingResult = safeParseNumber(bending);\n const heightResult = safeParseNumber(height);\n \n if (![faceWidthResult, bendingResult, heightResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const totalWidth = ((heightResult.value + bendingResult.value) * 2) + faceWidthResult.value;\n \n return { value: totalWidth, isValid: true };\n};\n\n/**\n * Calculates the weight of boards\n * Formula: (total_width * thickness * (length / 1000)) * 7.85\n */\nconst calculateBoardsWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { total_width, boards_thickness, boards_length } = formValues;\n \n if (!validatePositiveNumbers(total_width, boards_thickness, boards_length)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards weight calculation' };\n }\n \n const totalWidthResult = safeParseNumber(total_width);\n const thicknessResult = safeParseNumber(boards_thickness);\n const lengthResult = safeParseNumber(boards_length);\n \n if (![totalWidthResult, thicknessResult, lengthResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (totalWidthResult.value * thicknessResult.value * \n (lengthResult.value / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR)) * \n MATERIAL_CONSTANTS.STEEL_DENSITY;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates the weight of steel\n * Formula: (length * width * thickness * 7.85) / 1000\n */\nconst calculateSteelWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_length, steel_width, steel_thickness } = formValues;\n \n if (!validatePositiveNumbers(steel_length, steel_width, steel_thickness)) {\n return { value: 0, isValid: false, error: 'Invalid input values for steel weight calculation' };\n }\n \n const lengthResult = safeParseNumber(steel_length);\n const widthResult = safeParseNumber(steel_width);\n const thicknessResult = safeParseNumber(steel_thickness);\n \n if (![lengthResult, widthResult, thicknessResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (lengthResult.value * widthResult.value * thicknessResult.value * \n MATERIAL_CONSTANTS.STEEL_DENSITY) / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Gets the material unit weight based on steel type\n */\nconst calculateMaterialUnit = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_type } = formValues;\n \n if (!steel_type) {\n return { value: 0, isValid: false, error: 'Steel type not specified' };\n }\n \n if (!(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n return { value: 0, isValid: false, error: `Unsupported steel type: ${steel_type}` };\n }\n \n const weight = MATERIAL_CONSTANTS.COIL_WEIGHTS[steel_type];\n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates material weight based on tube type and dimensions\n * Supports Round, Square, and Rectangle tube types\n */\nconst calculateTubeMaterialWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { tube_type, tube_od, shape_width, shape_height, material_thickness, material_length } = formValues;\n \n if (!tube_type) {\n return { value: 0, isValid: false, error: 'Tube type not specified' };\n }\n \n const thicknessResult = safeParseNumber(material_thickness);\n const lengthResult = safeParseNumber(material_length);\n \n if (!thicknessResult.isValid || !lengthResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid thickness or length values' };\n }\n \n let weight = 0;\n \n switch (tube_type) {\n case 'Round': {\n const odResult = safeParseNumber(tube_od);\n if (!odResult.isValid || odResult.value <= thicknessResult.value) {\n return { value: 0, isValid: false, error: 'Invalid outer diameter for round tube' };\n }\n \n weight = (odResult.value - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR * lengthResult.value;\n break;\n }\n \n case 'Square':\n case 'Rectangle': {\n const widthResult = safeParseNumber(shape_width);\n const heightResult = safeParseNumber(shape_height);\n \n if (!widthResult.isValid || !heightResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid width or height for rectangular tube' };\n }\n \n const perimeter = 2 * (widthResult.value + heightResult.value);\n weight = (((perimeter / Math.PI) - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR) * lengthResult.value;\n break;\n }\n \n default:\n return { value: 0, isValid: false, error: `Unsupported tube type: ${tube_type}` };\n }\n \n return { value: Math.max(0, weight), isValid: true };\n};\n\n// ==================== MAIN HOOK ====================\n/**\n * Custom hook for optimized material calculations with comprehensive error handling\n * and performance optimization through memoization\n */\nexport const useMaterialCalculations = (formValues?: BaseFormValues): MaterialCalculations => {\n const calculations = useMemo(() => {\n if (!formValues) {\n return {\n totalWidth: 0,\n materialUnit: 0,\n boardsWeight: 0,\n steelWeight: 0,\n materialWeight: 0,\n };\n }\n \n // Calculate all values with error handling\n const totalWidthResult = calculateBoardsTotalWidth(formValues);\n const materialUnitResult = calculateMaterialUnit(formValues);\n const boardsWeightResult = calculateBoardsWeight(formValues);\n const steelWeightResult = calculateSteelWeight(formValues);\n const materialWeightResult = calculateTubeMaterialWeight(formValues);\n \n // Optional: Log errors in development\n if (process.env.NODE_ENV === 'development') {\n [totalWidthResult, materialUnitResult, boardsWeightResult, steelWeightResult, materialWeightResult]\n .filter(result => !result.isValid && result.error)\n .forEach(result => console.warn('Calculation warning:', result.error));\n }\n \n return {\n totalWidth: totalWidthResult.value,\n materialUnit: materialUnitResult.value,\n boardsWeight: boardsWeightResult.value,\n steelWeight: steelWeightResult.value,\n materialWeight: materialWeightResult.value,\n };\n }, [createMemoKey(formValues)]); // Optimized dependency to prevent unnecessary recalculations\n \n return calculations;\n};\n\n// ==================== ADDITIONAL UTILITIES ====================\n/**\n * Utility function to validate form values before calculations\n */\nexport const validateFormValues = (formValues: BaseFormValues): { isValid: boolean; errors: string[] } => {\n const errors: string[] = [];\n const { tube_type, steel_type } = formValues;\n \n // Validate steel type if provided\n if (steel_type && !(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n errors.push(`Invalid steel type: ${steel_type}`);\n }\n \n // Validate tube type if provided\n if (tube_type && !['Round', 'Square', 'Rectangle'].includes(tube_type)) {\n errors.push(`Invalid tube type: ${tube_type}`);\n }\n \n return { isValid: errors.length === 0, errors };\n};\n\n/**\n * Get available steel types for form validation\n */\nexport const getAvailableSteelTypes = (): SteelType[] => {\n return Object.keys(MATERIAL_CONSTANTS.COIL_WEIGHTS) as SteelType[];\n};\n\n/**\n * Get available tube types for form validation\n */\nexport const getAvailableTubeTypes = (): TubeType[] => {\n return ['Round', 'Square', 'Rectangle'];\n};\n\nexport default {\n useMaterialCalculations,\n validateFormValues,\n getAvailableSteelTypes,\n getAvailableTubeTypes,\n MATERIAL_CONSTANTS,\n};\nexport type {\n BaseFormValues,\n MaterialCalculations,\n SteelType,\n TubeType,\n CalculationResult,\n};"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/hooks/use-material-calculations.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport { useMemo } from 'react';\n\n// ==================== CONSTANTS ====================\nconst MATERIAL_CONSTANTS = {\n STEEL_DENSITY: 7.85,\n LENGTH_CONVERSION_FACTOR: 1000,\n TUBE_CALCULATION_FACTOR: 0.024662,\n COIL_WEIGHTS: {\n GI: 2879.95,\n HR: 2356.59,\n },\n} as const;\n\n// ==================== TYPES ====================\ntype SteelType = keyof typeof MATERIAL_CONSTANTS.COIL_WEIGHTS;\ntype TubeType = 'Round' | 'Square' | 'Rectangle';\n\ninterface BaseFormValues {\n // Board calculation fields\n face_width?: string | number;\n bending?: string | number;\n height?: string | number;\n total_width?: string | number;\n boards_thickness?: string | number;\n boards_length?: string | number;\n \n // Steel calculation fields\n steel_length?: string | number;\n steel_width?: string | number;\n steel_thickness?: string | number;\n steel_type?: SteelType;\n \n // Tube calculation fields\n tube_type?: TubeType;\n tube_od?: string | number;\n shape_width?: string | number;\n shape_height?: string | number;\n material_thickness?: string | number;\n material_length?: string | number;\n}\n\ninterface MaterialCalculations {\n totalWidth: number;\n materialUnit: number;\n boardsWeight: number;\n steelWeight: number;\n materialWeight: number;\n}\n\ninterface CalculationResult<T = number> {\n value: T;\n isValid: boolean;\n error?: string;\n}\n\n// ==================== UTILITY FUNCTIONS ====================\n/**\n * Safely parses a value to number with comprehensive validation\n */\nconst safeParseNumber = (value: string | number | undefined | null): CalculationResult<number> => {\n if (value === undefined || value === null || value === '') {\n return { value: 0, isValid: false, error: 'Empty value' };\n }\n \n const parsed = typeof value === 'string' ? parseFloat(value.trim()) : Number(value);\n \n if (isNaN(parsed)) {\n return { value: 0, isValid: false, error: 'Invalid number format' };\n }\n \n if (!isFinite(parsed)) {\n return { value: 0, isValid: false, error: 'Number is not finite' };\n }\n \n return { value: parsed, isValid: true };\n};\n\n/**\n * Validates that all provided values are positive numbers\n */\nconst validatePositiveNumbers = (...values: (string | number | undefined)[]): boolean => {\n return values.every(value => {\n const result = safeParseNumber(value);\n return result.isValid && result.value > 0;\n });\n};\n\n/**\n * Creates a memoization key from form values to optimize re-calculations\n */\nconst createMemoKey = (formValues: BaseFormValues | undefined): string => {\n if (!formValues) return 'empty';\n \n // Only include relevant fields to avoid unnecessary recalculations\n const relevantFields = [\n 'face_width', 'bending', 'height', 'total_width', 'boards_thickness', 'boards_length',\n 'steel_length', 'steel_width', 'steel_thickness', 'steel_type',\n 'tube_type', 'tube_od', 'shape_width', 'shape_height', 'material_thickness', 'material_length'\n ];\n \n return relevantFields\n .map(field => `${field}:${formValues[field as keyof BaseFormValues] ?? ''}`)\n .join('|');\n};\n\n// ==================== CALCULATION FUNCTIONS ====================\n/**\n * Calculates the total width for boards costing\n * Formula: ((height + bending) * 2) + face_width\n */\nconst calculateBoardsTotalWidth = (formValues: BaseFormValues): CalculationResult<number> => {\n const { face_width, bending, height } = formValues;\n \n if (!validatePositiveNumbers(face_width, bending, height)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards total width calculation' };\n }\n \n const faceWidthResult = safeParseNumber(face_width);\n const bendingResult = safeParseNumber(bending);\n const heightResult = safeParseNumber(height);\n \n if (![faceWidthResult, bendingResult, heightResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const totalWidth = ((heightResult.value + bendingResult.value) * 2) + faceWidthResult.value;\n \n return { value: totalWidth, isValid: true };\n};\n\n/**\n * Calculates the weight of boards\n * Formula: (total_width * thickness * (length / 1000)) * 7.85\n */\nconst calculateBoardsWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { total_width, boards_thickness, boards_length } = formValues;\n \n if (!validatePositiveNumbers(total_width, boards_thickness, boards_length)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards weight calculation' };\n }\n \n const totalWidthResult = safeParseNumber(total_width);\n const thicknessResult = safeParseNumber(boards_thickness);\n const lengthResult = safeParseNumber(boards_length);\n \n if (![totalWidthResult, thicknessResult, lengthResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (totalWidthResult.value * thicknessResult.value * \n (lengthResult.value / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR)) * \n MATERIAL_CONSTANTS.STEEL_DENSITY;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates the weight of steel\n * Formula: (length * width * thickness * 7.85) / 1000\n */\nconst calculateSteelWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_length, steel_width, steel_thickness } = formValues;\n \n if (!validatePositiveNumbers(steel_length, steel_width, steel_thickness)) {\n return { value: 0, isValid: false, error: 'Invalid input values for steel weight calculation' };\n }\n \n const lengthResult = safeParseNumber(steel_length);\n const widthResult = safeParseNumber(steel_width);\n const thicknessResult = safeParseNumber(steel_thickness);\n \n if (![lengthResult, widthResult, thicknessResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (lengthResult.value * widthResult.value * thicknessResult.value * \n MATERIAL_CONSTANTS.STEEL_DENSITY) / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Gets the material unit weight based on steel type\n */\nconst calculateMaterialUnit = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_type } = formValues;\n \n if (!steel_type) {\n return { value: 0, isValid: false, error: 'Steel type not specified' };\n }\n \n if (!(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n return { value: 0, isValid: false, error: `Unsupported steel type: ${steel_type}` };\n }\n \n const weight = MATERIAL_CONSTANTS.COIL_WEIGHTS[steel_type];\n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates material weight based on tube type and dimensions\n * Supports Round, Square, and Rectangle tube types\n */\nconst calculateTubeMaterialWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { tube_type, tube_od, shape_width, shape_height, material_thickness, material_length } = formValues;\n \n if (!tube_type) {\n return { value: 0, isValid: false, error: 'Tube type not specified' };\n }\n \n const thicknessResult = safeParseNumber(material_thickness);\n const lengthResult = safeParseNumber(material_length);\n \n if (!thicknessResult.isValid || !lengthResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid thickness or length values' };\n }\n \n let weight = 0;\n \n switch (tube_type) {\n case 'Round': {\n const odResult = safeParseNumber(tube_od);\n if (!odResult.isValid || odResult.value <= thicknessResult.value) {\n return { value: 0, isValid: false, error: 'Invalid outer diameter for round tube' };\n }\n \n weight = (odResult.value - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR * lengthResult.value;\n break;\n }\n \n case 'Square':\n case 'Rectangle': {\n const widthResult = safeParseNumber(shape_width);\n const heightResult = safeParseNumber(shape_height);\n \n if (!widthResult.isValid || !heightResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid width or height for rectangular tube' };\n }\n \n const perimeter = 2 * (widthResult.value + heightResult.value);\n weight = (((perimeter / Math.PI) - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR) * lengthResult.value;\n break;\n }\n \n default:\n return { value: 0, isValid: false, error: `Unsupported tube type: ${tube_type}` };\n }\n \n return { value: Math.max(0, weight), isValid: true };\n};\n\n// ==================== MAIN HOOK ====================\n/**\n * Custom hook for optimized material calculations with comprehensive error handling\n * and performance optimization through memoization\n */\nexport const useMaterialCalculations = (formValues?: BaseFormValues): MaterialCalculations => {\n const calculations = useMemo(() => {\n if (!formValues) {\n return {\n totalWidth: 0,\n materialUnit: 0,\n boardsWeight: 0,\n steelWeight: 0,\n materialWeight: 0,\n };\n }\n \n // Calculate all values with error handling\n const totalWidthResult = calculateBoardsTotalWidth(formValues);\n const materialUnitResult = calculateMaterialUnit(formValues);\n const boardsWeightResult = calculateBoardsWeight(formValues);\n const steelWeightResult = calculateSteelWeight(formValues);\n const materialWeightResult = calculateTubeMaterialWeight(formValues);\n \n // Optional: Log errors in development\n if (process.env.NODE_ENV === 'development') {\n [totalWidthResult, materialUnitResult, boardsWeightResult, steelWeightResult, materialWeightResult]\n .filter(result => !result.isValid && result.error)\n .forEach(result => console.warn('Calculation warning:', result.error));\n }\n \n return {\n totalWidth: totalWidthResult.value,\n materialUnit: materialUnitResult.value,\n boardsWeight: boardsWeightResult.value,\n steelWeight: steelWeightResult.value,\n materialWeight: materialWeightResult.value,\n };\n }, [createMemoKey(formValues)]); // Optimized dependency to prevent unnecessary recalculations\n \n return calculations;\n};\n\n// ==================== ADDITIONAL UTILITIES ====================\n/**\n * Utility function to validate form values before calculations\n */\nexport const validateFormValues = (formValues: BaseFormValues): { isValid: boolean; errors: string[] } => {\n const errors: string[] = [];\n const { tube_type, steel_type } = formValues;\n \n // Validate steel type if provided\n if (steel_type && !(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n errors.push(`Invalid steel type: ${steel_type}`);\n }\n \n // Validate tube type if provided\n if (tube_type && !['Round', 'Square', 'Rectangle'].includes(tube_type)) {\n errors.push(`Invalid tube type: ${tube_type}`);\n }\n \n return { isValid: errors.length === 0, errors };\n};\n\n/**\n * Get available steel types for form validation\n */\nexport const getAvailableSteelTypes = (): SteelType[] => {\n return Object.keys(MATERIAL_CONSTANTS.COIL_WEIGHTS) as SteelType[];\n};\n\n/**\n * Get available tube types for form validation\n */\nexport const getAvailableTubeTypes = (): TubeType[] => {\n return ['Round', 'Square', 'Rectangle'];\n};\n\nexport default {\n useMaterialCalculations,\n validateFormValues,\n getAvailableSteelTypes,\n getAvailableTubeTypes,\n MATERIAL_CONSTANTS,\n};\nexport type {\n BaseFormValues,\n MaterialCalculations,\n SteelType,\n TubeType,\n CalculationResult,\n};"],"names":["MATERIAL_CONSTANTS","STEEL_DENSITY","LENGTH_CONVERSION_FACTOR","TUBE_CALCULATION_FACTOR","COIL_WEIGHTS","GI","HR","safeParseNumber","value","isValid","error","parsed","parseFloat","trim","Number","isNaN","isFinite","validatePositiveNumbers","values","every","result","createMemoKey","formValues","map","field","join","useMaterialCalculations","useMemo","totalWidth","materialUnit","boardsWeight","steelWeight","materialWeight","totalWidthResult","face_width","bending","height","faceWidthResult","bendingResult","heightResult","r","calculateBoardsTotalWidth","materialUnitResult","steel_type","calculateMaterialUnit","boardsWeightResult","total_width","boards_thickness","boards_length","thicknessResult","lengthResult","calculateBoardsWeight","steelWeightResult","steel_length","steel_width","steel_thickness","widthResult","calculateSteelWeight","materialWeightResult","tube_type","tube_od","shape_width","shape_height","material_thickness","material_length","weight","odResult","Math","PI","max","calculateTubeMaterialWeight","process","env","NODE_ENV","filter","forEach","validateFormValues","errors","push","includes","length","getAvailableSteelTypes","Object","keys","getAvailableTubeTypes","useMaterialCalculations$1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/hooks/use-material-calculations.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport { useMemo } from 'react';\n\n// ==================== CONSTANTS ====================\nconst MATERIAL_CONSTANTS = {\n STEEL_DENSITY: 7.85,\n LENGTH_CONVERSION_FACTOR: 1000,\n TUBE_CALCULATION_FACTOR: 0.024662,\n COIL_WEIGHTS: {\n GI: 2879.95,\n HR: 2356.59,\n },\n} as const;\n\n// ==================== TYPES ====================\ntype SteelType = keyof typeof MATERIAL_CONSTANTS.COIL_WEIGHTS;\ntype TubeType = 'Round' | 'Square' | 'Rectangle';\n\ninterface BaseFormValues {\n // Board calculation fields\n face_width?: string | number;\n bending?: string | number;\n height?: string | number;\n total_width?: string | number;\n boards_thickness?: string | number;\n boards_length?: string | number;\n \n // Steel calculation fields\n steel_length?: string | number;\n steel_width?: string | number;\n steel_thickness?: string | number;\n steel_type?: SteelType;\n \n // Tube calculation fields\n tube_type?: TubeType;\n tube_od?: string | number;\n shape_width?: string | number;\n shape_height?: string | number;\n material_thickness?: string | number;\n material_length?: string | number;\n}\n\ninterface MaterialCalculations {\n totalWidth: number;\n materialUnit: number;\n boardsWeight: number;\n steelWeight: number;\n materialWeight: number;\n}\n\ninterface CalculationResult<T = number> {\n value: T;\n isValid: boolean;\n error?: string;\n}\n\n// ==================== UTILITY FUNCTIONS ====================\n/**\n * Safely parses a value to number with comprehensive validation\n */\nconst safeParseNumber = (value: string | number | undefined | null): CalculationResult<number> => {\n if (value === undefined || value === null || value === '') {\n return { value: 0, isValid: false, error: 'Empty value' };\n }\n \n const parsed = typeof value === 'string' ? parseFloat(value.trim()) : Number(value);\n \n if (isNaN(parsed)) {\n return { value: 0, isValid: false, error: 'Invalid number format' };\n }\n \n if (!isFinite(parsed)) {\n return { value: 0, isValid: false, error: 'Number is not finite' };\n }\n \n return { value: parsed, isValid: true };\n};\n\n/**\n * Validates that all provided values are positive numbers\n */\nconst validatePositiveNumbers = (...values: (string | number | undefined)[]): boolean => {\n return values.every(value => {\n const result = safeParseNumber(value);\n return result.isValid && result.value > 0;\n });\n};\n\n/**\n * Creates a memoization key from form values to optimize re-calculations\n */\nconst createMemoKey = (formValues: BaseFormValues | undefined): string => {\n if (!formValues) return 'empty';\n \n // Only include relevant fields to avoid unnecessary recalculations\n const relevantFields = [\n 'face_width', 'bending', 'height', 'total_width', 'boards_thickness', 'boards_length',\n 'steel_length', 'steel_width', 'steel_thickness', 'steel_type',\n 'tube_type', 'tube_od', 'shape_width', 'shape_height', 'material_thickness', 'material_length'\n ];\n \n return relevantFields\n .map(field => `${field}:${formValues[field as keyof BaseFormValues] ?? ''}`)\n .join('|');\n};\n\n// ==================== CALCULATION FUNCTIONS ====================\n/**\n * Calculates the total width for boards costing\n * Formula: ((height + bending) * 2) + face_width\n */\nconst calculateBoardsTotalWidth = (formValues: BaseFormValues): CalculationResult<number> => {\n const { face_width, bending, height } = formValues;\n \n if (!validatePositiveNumbers(face_width, bending, height)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards total width calculation' };\n }\n \n const faceWidthResult = safeParseNumber(face_width);\n const bendingResult = safeParseNumber(bending);\n const heightResult = safeParseNumber(height);\n \n if (![faceWidthResult, bendingResult, heightResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const totalWidth = ((heightResult.value + bendingResult.value) * 2) + faceWidthResult.value;\n \n return { value: totalWidth, isValid: true };\n};\n\n/**\n * Calculates the weight of boards\n * Formula: (total_width * thickness * (length / 1000)) * 7.85\n */\nconst calculateBoardsWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { total_width, boards_thickness, boards_length } = formValues;\n \n if (!validatePositiveNumbers(total_width, boards_thickness, boards_length)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards weight calculation' };\n }\n \n const totalWidthResult = safeParseNumber(total_width);\n const thicknessResult = safeParseNumber(boards_thickness);\n const lengthResult = safeParseNumber(boards_length);\n \n if (![totalWidthResult, thicknessResult, lengthResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (totalWidthResult.value * thicknessResult.value * \n (lengthResult.value / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR)) * \n MATERIAL_CONSTANTS.STEEL_DENSITY;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates the weight of steel\n * Formula: (length * width * thickness * 7.85) / 1000\n */\nconst calculateSteelWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_length, steel_width, steel_thickness } = formValues;\n \n if (!validatePositiveNumbers(steel_length, steel_width, steel_thickness)) {\n return { value: 0, isValid: false, error: 'Invalid input values for steel weight calculation' };\n }\n \n const lengthResult = safeParseNumber(steel_length);\n const widthResult = safeParseNumber(steel_width);\n const thicknessResult = safeParseNumber(steel_thickness);\n \n if (![lengthResult, widthResult, thicknessResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (lengthResult.value * widthResult.value * thicknessResult.value * \n MATERIAL_CONSTANTS.STEEL_DENSITY) / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Gets the material unit weight based on steel type\n */\nconst calculateMaterialUnit = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_type } = formValues;\n \n if (!steel_type) {\n return { value: 0, isValid: false, error: 'Steel type not specified' };\n }\n \n if (!(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n return { value: 0, isValid: false, error: `Unsupported steel type: ${steel_type}` };\n }\n \n const weight = MATERIAL_CONSTANTS.COIL_WEIGHTS[steel_type];\n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates material weight based on tube type and dimensions\n * Supports Round, Square, and Rectangle tube types\n */\nconst calculateTubeMaterialWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { tube_type, tube_od, shape_width, shape_height, material_thickness, material_length } = formValues;\n \n if (!tube_type) {\n return { value: 0, isValid: false, error: 'Tube type not specified' };\n }\n \n const thicknessResult = safeParseNumber(material_thickness);\n const lengthResult = safeParseNumber(material_length);\n \n if (!thicknessResult.isValid || !lengthResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid thickness or length values' };\n }\n \n let weight = 0;\n \n switch (tube_type) {\n case 'Round': {\n const odResult = safeParseNumber(tube_od);\n if (!odResult.isValid || odResult.value <= thicknessResult.value) {\n return { value: 0, isValid: false, error: 'Invalid outer diameter for round tube' };\n }\n \n weight = (odResult.value - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR * lengthResult.value;\n break;\n }\n \n case 'Square':\n case 'Rectangle': {\n const widthResult = safeParseNumber(shape_width);\n const heightResult = safeParseNumber(shape_height);\n \n if (!widthResult.isValid || !heightResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid width or height for rectangular tube' };\n }\n \n const perimeter = 2 * (widthResult.value + heightResult.value);\n weight = (((perimeter / Math.PI) - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR) * lengthResult.value;\n break;\n }\n \n default:\n return { value: 0, isValid: false, error: `Unsupported tube type: ${tube_type}` };\n }\n \n return { value: Math.max(0, weight), isValid: true };\n};\n\n// ==================== MAIN HOOK ====================\n/**\n * Custom hook for optimized material calculations with comprehensive error handling\n * and performance optimization through memoization\n */\nexport const useMaterialCalculations = (formValues?: BaseFormValues): MaterialCalculations => {\n const calculations = useMemo(() => {\n if (!formValues) {\n return {\n totalWidth: 0,\n materialUnit: 0,\n boardsWeight: 0,\n steelWeight: 0,\n materialWeight: 0,\n };\n }\n \n // Calculate all values with error handling\n const totalWidthResult = calculateBoardsTotalWidth(formValues);\n const materialUnitResult = calculateMaterialUnit(formValues);\n const boardsWeightResult = calculateBoardsWeight(formValues);\n const steelWeightResult = calculateSteelWeight(formValues);\n const materialWeightResult = calculateTubeMaterialWeight(formValues);\n \n // Optional: Log errors in development\n if (process.env.NODE_ENV === 'development') {\n [totalWidthResult, materialUnitResult, boardsWeightResult, steelWeightResult, materialWeightResult]\n .filter(result => !result.isValid && result.error)\n .forEach(result => console.warn('Calculation warning:', result.error));\n }\n \n return {\n totalWidth: totalWidthResult.value,\n materialUnit: materialUnitResult.value,\n boardsWeight: boardsWeightResult.value,\n steelWeight: steelWeightResult.value,\n materialWeight: materialWeightResult.value,\n };\n }, [createMemoKey(formValues)]); // Optimized dependency to prevent unnecessary recalculations\n \n return calculations;\n};\n\n// ==================== ADDITIONAL UTILITIES ====================\n/**\n * Utility function to validate form values before calculations\n */\nexport const validateFormValues = (formValues: BaseFormValues): { isValid: boolean; errors: string[] } => {\n const errors: string[] = [];\n const { tube_type, steel_type } = formValues;\n \n // Validate steel type if provided\n if (steel_type && !(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n errors.push(`Invalid steel type: ${steel_type}`);\n }\n \n // Validate tube type if provided\n if (tube_type && !['Round', 'Square', 'Rectangle'].includes(tube_type)) {\n errors.push(`Invalid tube type: ${tube_type}`);\n }\n \n return { isValid: errors.length === 0, errors };\n};\n\n/**\n * Get available steel types for form validation\n */\nexport const getAvailableSteelTypes = (): SteelType[] => {\n return Object.keys(MATERIAL_CONSTANTS.COIL_WEIGHTS) as SteelType[];\n};\n\n/**\n * Get available tube types for form validation\n */\nexport const getAvailableTubeTypes = (): TubeType[] => {\n return ['Round', 'Square', 'Rectangle'];\n};\n\nexport default {\n useMaterialCalculations,\n validateFormValues,\n getAvailableSteelTypes,\n getAvailableTubeTypes,\n MATERIAL_CONSTANTS,\n};\nexport type {\n BaseFormValues,\n MaterialCalculations,\n SteelType,\n TubeType,\n CalculationResult,\n};"],"names":["MATERIAL_CONSTANTS","STEEL_DENSITY","LENGTH_CONVERSION_FACTOR","TUBE_CALCULATION_FACTOR","COIL_WEIGHTS","GI","HR","safeParseNumber","value","isValid","error","parsed","parseFloat","trim","Number","isNaN","isFinite","validatePositiveNumbers","values","every","result","createMemoKey","formValues","map","field","join","useMaterialCalculations","useMemo","totalWidth","materialUnit","boardsWeight","steelWeight","materialWeight","totalWidthResult","face_width","bending","height","faceWidthResult","bendingResult","heightResult","r","calculateBoardsTotalWidth","materialUnitResult","steel_type","calculateMaterialUnit","boardsWeightResult","total_width","boards_thickness","boards_length","thicknessResult","lengthResult","calculateBoardsWeight","steelWeightResult","steel_length","steel_width","steel_thickness","widthResult","calculateSteelWeight","materialWeightResult","tube_type","tube_od","shape_width","shape_height","material_thickness","material_length","weight","odResult","Math","PI","max","calculateTubeMaterialWeight","process","env","NODE_ENV","filter","forEach","validateFormValues","errors","push","includes","length","getAvailableSteelTypes","Object","keys","getAvailableTubeTypes","useMaterialCalculations_default"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../src/hooks/use-translations.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../src/hooks/use-translations.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { loadModuleTranslations } from '../utils/translations'\nimport modules from '../constants/modules'\n\n// Global state to prevent duplicate calls across all hook instances\nlet globalLastLoadedModules = ''\nlet globalIsLoading = false\nlet globalInitialLoad = true\n\nexport default function useAppTranslations() {\n\tconst [isLoading, setIsLoading] = useState(globalInitialLoad)\n\tconst location = useLocation()\n\tconst { t } = useTranslation()\n\n\tuseEffect(() => {\n\t\tconst erpModules = modules(t)\n\t\tconst currentPath = location.pathname.toLowerCase()\n\n\t\tconst matchedModule = erpModules.find(\n\t\t\t(mod) =>\n\t\t\t\tmod.link.toLowerCase() === currentPath ||\n\t\t\t\tmod.connectedRoutes?.some((route: string) => currentPath.startsWith(route.toLowerCase()))\n\t\t)\n\n\t\tlet modulesToLoad: string[] = []\n\n\t\tif (matchedModule?.translationModule) {\n\t\t\tmodulesToLoad = [...matchedModule.translationModule, 'common']\n\t\t} else if (!matchedModule && currentPath === '/dashboard') {\n\t\t\tmodulesToLoad = ['common']\n\t\t}\n\n\t\tif (modulesToLoad.length > 0) {\n\t\t\tconst moduleKey = [...modulesToLoad].sort().join(',')\n\n\t\t\t// Skip if same modules are already loaded or currently loading\n\t\t\tif (globalLastLoadedModules === moduleKey || globalIsLoading) {\n\t\t\t\tif (globalInitialLoad) {\n\t\t\t\t\tsetIsLoading(false)\n\t\t\t\t\tglobalInitialLoad = false\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tglobalIsLoading = true\n\t\t\tglobalLastLoadedModules = moduleKey\n\t\t\tsetIsLoading(true)\n\n\t\t\tloadModuleTranslations(modulesToLoad).finally(() => {\n\t\t\t\tglobalIsLoading = false\n\t\t\t\tsetIsLoading(false)\n\t\t\t\tglobalInitialLoad = false\n\t\t\t})\n\t\t} else {\n\t\t\t// No modules to load, but still need to handle initial load state\n\t\t\tif (globalInitialLoad) {\n\t\t\t\tsetIsLoading(false)\n\t\t\t\tglobalInitialLoad = false\n\t\t\t}\n\t\t}\n\t}, [location.pathname, t])\n\n\treturn { isLoading }\n}\n"],"names":[],"mappings":";;;;;AAOA,IAAI,0BAA0B;AAC9B,IAAI,kBAAkB;AACtB,IAAI,oBAAoB;AAExB,SAAwB,qBAAqB;AAC5C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,iBAAiB;AAC5D,QAAM,WAAW,YAAA;AACjB,QAAM,EAAE,EAAA,IAAM,eAAA;AAEd,YAAU,MAAM;AACf,UAAM,aAAa,QAAQ,CAAC;AAC5B,UAAM,cAAc,SAAS,SAAS,YAAA;AAEtC,UAAM,gBAAgB,WAAW;AAAA,MAChC,CAAC,QAAA;;AACA,mBAAI,KAAK,YAAA,MAAkB,iBAC3B,SAAI,oBAAJ,mBAAqB,KAAK,CAAC,UAAkB,YAAY,WAAW,MAAM,aAAa;AAAA;AAAA,IAAC;AAG1F,QAAI,gBAA0B,CAAA;AAE9B,QAAI,+CAAe,mBAAmB;AACrC,sBAAgB,CAAC,GAAG,cAAc,mBAAmB,QAAQ;AAAA,IAC9D,WAAW,CAAC,iBAAiB,gBAAgB,cAAc;AAC1D,sBAAgB,CAAC,QAAQ;AAAA,IAC1B;AAEA,QAAI,cAAc,SAAS,GAAG;AAC7B,YAAM,YAAY,CAAC,GAAG,aAAa,EAAE,KAAA,EAAO,KAAK,GAAG;AAGpD,UAAI,4BAA4B,aAAa,iBAAiB;AAC7D,YAAI,mBAAmB;AACtB,uBAAa,KAAK;AAClB,8BAAoB;AAAA,QACrB;AACA;AAAA,MACD;AAEA,wBAAkB;AAClB,gCAA0B;AAC1B,mBAAa,IAAI;AAEjB,6BAAuB,aAAa,EAAE,QAAQ,MAAM;AACnD,0BAAkB;AAClB,qBAAa,KAAK;AAClB,4BAAoB;AAAA,MACrB,CAAC;AAAA,IACF,OAAO;AAEN,UAAI,mBAAmB;AACtB,qBAAa,KAAK;AAClB,4BAAoB;AAAA,MACrB;AAAA,IACD;AAAA,EACD,GAAG,CAAC,SAAS,UAAU,CAAC,CAAC;AAEzB,SAAO,EAAE,UAAA;AACV;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/hooks/use-translations.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/hooks/use-translations.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { loadModuleTranslations } from '../utils/translations'\nimport modules from '../constants/modules'\n\n// Global state to prevent duplicate calls across all hook instances\nlet globalLastLoadedModules = ''\nlet globalIsLoading = false\nlet globalInitialLoad = true\n\nexport default function useAppTranslations() {\n\tconst [isLoading, setIsLoading] = useState(globalInitialLoad)\n\tconst location = useLocation()\n\tconst { t } = useTranslation()\n\n\tuseEffect(() => {\n\t\tconst erpModules = modules(t)\n\t\tconst currentPath = location.pathname.toLowerCase()\n\n\t\tconst matchedModule = erpModules.find(\n\t\t\t(mod) =>\n\t\t\t\tmod.link.toLowerCase() === currentPath ||\n\t\t\t\tmod.connectedRoutes?.some((route: string) => currentPath.startsWith(route.toLowerCase()))\n\t\t)\n\n\t\tlet modulesToLoad: string[] = []\n\n\t\tif (matchedModule?.translationModule) {\n\t\t\tmodulesToLoad = [...matchedModule.translationModule, 'common']\n\t\t} else if (!matchedModule && currentPath === '/dashboard') {\n\t\t\tmodulesToLoad = ['common']\n\t\t}\n\n\t\tif (modulesToLoad.length > 0) {\n\t\t\tconst moduleKey = [...modulesToLoad].sort().join(',')\n\n\t\t\t// Skip if same modules are already loaded or currently loading\n\t\t\tif (globalLastLoadedModules === moduleKey || globalIsLoading) {\n\t\t\t\tif (globalInitialLoad) {\n\t\t\t\t\tsetIsLoading(false)\n\t\t\t\t\tglobalInitialLoad = false\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tglobalIsLoading = true\n\t\t\tglobalLastLoadedModules = moduleKey\n\t\t\tsetIsLoading(true)\n\n\t\t\tloadModuleTranslations(modulesToLoad).finally(() => {\n\t\t\t\tglobalIsLoading = false\n\t\t\t\tsetIsLoading(false)\n\t\t\t\tglobalInitialLoad = false\n\t\t\t})\n\t\t} else {\n\t\t\t// No modules to load, but still need to handle initial load state\n\t\t\tif (globalInitialLoad) {\n\t\t\t\tsetIsLoading(false)\n\t\t\t\tglobalInitialLoad = false\n\t\t\t}\n\t\t}\n\t}, [location.pathname, t])\n\n\treturn { isLoading }\n}\n"],"names":["globalLastLoadedModules","globalIsLoading","globalInitialLoad","isLoading","setIsLoading","useState","location","useLocation","t","useTranslation","useEffect","erpModules","modules","currentPath","pathname","toLowerCase","matchedModule","find","mod","link","_a","connectedRoutes","some","route","startsWith","modulesToLoad","translationModule","length","moduleKey","sort","join","loadModuleTranslations","finally"],"mappings":"iPAOA,IAAIA,EAA0B,GAC1BC,GAAkB,EAClBC,GAAoB,kBAExB,WACC,MAAOC,EAAWC,GAAgBC,EAAAA,SAASH,GACrCI,EAAWC,EAAAA,eACXC,EAAEA,GAAMC,mBAkDd,OAhDAC,EAAAA,UAAU,KACT,MAAMC,EAAaC,EAAAA,QAAQJ,GACrBK,EAAcP,EAASQ,SAASC,cAEhCC,EAAgBL,EAAWM,KAC/BC,UACA,OAAAA,EAAIC,KAAKJ,gBAAkBF,IAC3B,OAAAO,IAAIC,sBAAJ,EAAAD,EAAqBE,KAAMC,GAAkBV,EAAYW,WAAWD,EAAMR,mBAG5E,IAAIU,EAA0B,GAQ9B,UANIT,WAAeU,mBAClBD,EAAgB,IAAIT,EAAcU,kBAAmB,UAC1CV,GAAiC,eAAhBH,IAC5BY,EAAgB,CAAC,WAGdA,EAAcE,OAAS,EAAG,CAC7B,MAAMC,EAAY,IAAIH,GAAeI,OAAOC,KAAK,KAGjD,GAAI9B,IAA4B4B,GAAa3B,EAK5C,YAJIC,IACHE,GAAa,GACbF,GAAoB,IAKtBD,GAAkB,EAClBD,EAA0B4B,EAC1BxB,GAAa,GAEb2B,yBAAuBN,GAAeO,QAAQ,KAC7C/B,GAAkB,EAClBG,GAAa,GACbF,GAAoB,GAEtB,MAEKA,IACHE,GAAa,GACbF,GAAoB,IAGpB,CAACI,EAASQ,SAAUN,IAEhB,CAAEL,YACV"}
|
|
@@ -119,12 +119,12 @@ const useLanguageState = () => {
|
|
|
119
119
|
clearError
|
|
120
120
|
};
|
|
121
121
|
};
|
|
122
|
-
var
|
|
122
|
+
var useLanguageFallback_default = {
|
|
123
123
|
useLanguageFallback,
|
|
124
124
|
useLanguageState
|
|
125
125
|
};
|
|
126
126
|
export {
|
|
127
|
-
|
|
127
|
+
useLanguageFallback_default as default,
|
|
128
128
|
useLanguageFallback,
|
|
129
129
|
useLanguageState
|
|
130
130
|
};
|