@erpsquad/common 1.8.2 → 1.8.4
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 +2 -4
- package/dist/_virtual/index/index.esm10.js.map +1 -1
- package/dist/_virtual/index/index.esm11.js +3 -3
- 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/index.d.ts +0 -2
- package/dist/components/index.esm.js +428 -432
- package/dist/components/index.esm.js.map +1 -1
- package/dist/components/index.js +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 +2 -3
- 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/index.esm.js +512 -516
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +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/icons-material/utils/createSvgIcon/index.js.map +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/hooks/useLanguageFallback.ts"],"sourcesContent":["import { useState } from 'react';\nimport { DEFAULT_LANG } from '../constants/all-language';\n\ninterface ILanguage {\n label: string;\n code: string;\n direction: string;\n}\n\n// Configuration for fallback behavior\ninterface FallbackConfig {\n fallbackOrder?: string[];\n enableConsoleWarnings?: boolean;\n retryOnError?: boolean;\n maxRetries?: number;\n}\n\n// Updated fallback order with English first\nconst DEFAULT_FALLBACK_CONFIG: Required<FallbackConfig> = {\n fallbackOrder: ['en', 'en-US', DEFAULT_LANG], // English first\n enableConsoleWarnings: true,\n retryOnError: false,\n maxRetries: 3,\n};\n\nexport const useLanguageFallback = (config: FallbackConfig = {}) => {\n const finalConfig = { ...DEFAULT_FALLBACK_CONFIG, ...config };\n const [retryCount, setRetryCount] = useState(0);\n\n // Create English fallback language object\n const createEnglishFallback = (): ILanguage => ({\n code: 'en',\n label: 'English',\n direction: 'ltr'\n });\n\n // Find the best available language with fallback logic\n const findBestAvailableLanguage = (\n languages: ILanguage[], \n preferredCode?: string\n ): ILanguage | null => {\n if (!languages || languages.length === 0) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No languages available for fallback selection, using English');\n }\n return createEnglishFallback();\n }\n\n // First try the preferred language if provided\n if (preferredCode) {\n const preferred = languages.find(lang => lang.code === preferredCode);\n if (preferred) return preferred;\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Preferred language \"${preferredCode}\" not found, trying fallbacks`);\n }\n }\n\n // Try fallback languages in order (English first)\n for (const fallbackCode of finalConfig.fallbackOrder) {\n const fallback = languages.find(lang => lang.code === fallbackCode);\n if (fallback) {\n if (finalConfig.enableConsoleWarnings && preferredCode && preferredCode !== fallbackCode) {\n console.warn(`Using fallback language: \"${fallbackCode}\" instead of \"${preferredCode}\"`);\n }\n return fallback;\n }\n }\n\n // If no fallbacks found, return English or first available language\n const englishLang = languages.find(lang => lang.code === 'en');\n if (englishLang) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('Using English as ultimate fallback');\n }\n return englishLang;\n }\n\n // Last resort - return first available language\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No English fallback found, using first available language');\n }\n return languages[0] || createEnglishFallback();\n };\n\n // Create a fallback language object when API fails - always English\n const createEmergencyFallback = (): ILanguage => {\n return createEnglishFallback();\n };\n\n // Validate if a language code exists in the available languages\n const validateLanguageCode = (languages: ILanguage[], code: string): boolean => {\n return languages.some(lang => lang.code === code);\n };\n\n // Get saved language from localStorage with validation\n const getSavedLanguage = (languages: ILanguage[]): string | null => {\n const saved = localStorage.getItem('_language');\n if (!saved) return null;\n \n // Validate saved language exists in available languages\n if (validateLanguageCode(languages, saved)) {\n return saved;\n }\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Saved language \"${saved}\" is no longer available, will use English fallback`);\n }\n return null;\n };\n\n // Ensure English is always available in languages array\n const ensureEnglishAvailable = (languages: ILanguage[]): ILanguage[] => {\n const hasEnglish = languages.some(lang => lang.code === 'en');\n if (!hasEnglish) {\n return [createEnglishFallback(), ...languages];\n }\n return languages;\n };\n\n // Retry mechanism for failed language fetches\n const shouldRetry = (): boolean => {\n return finalConfig.retryOnError && retryCount < finalConfig.maxRetries;\n };\n\n const incrementRetry = () => {\n setRetryCount(prev => prev + 1);\n };\n\n const resetRetry = () => {\n setRetryCount(0);\n };\n\n return {\n findBestAvailableLanguage,\n createEmergencyFallback,\n createEnglishFallback,\n validateLanguageCode,\n getSavedLanguage,\n ensureEnglishAvailable,\n shouldRetry,\n incrementRetry,\n resetRetry,\n retryCount,\n config: finalConfig,\n };\n};\n\n// Additional utility hook for language state management\nexport const useLanguageState = () => {\n const [isInitialized, setIsInitialized] = useState(false);\n const [hasError, setHasError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const markInitialized = () => setIsInitialized(true);\n const setError = (error: string) => {\n setHasError(true);\n setErrorMessage(error);\n };\n const clearError = () => {\n setHasError(false);\n setErrorMessage(null);\n };\n\n return {\n isInitialized,\n hasError,\n errorMessage,\n markInitialized,\n setError,\n clearError,\n };\n};\n\nexport default {\n useLanguageFallback,\n useLanguageState,\n};\n\nexport type { ILanguage, FallbackConfig };\n\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../src/hooks/useLanguageFallback.ts"],"sourcesContent":["import { useState } from 'react';\nimport { DEFAULT_LANG } from '../constants/all-language';\n\ninterface ILanguage {\n label: string;\n code: string;\n direction: string;\n}\n\n// Configuration for fallback behavior\ninterface FallbackConfig {\n fallbackOrder?: string[];\n enableConsoleWarnings?: boolean;\n retryOnError?: boolean;\n maxRetries?: number;\n}\n\n// Updated fallback order with English first\nconst DEFAULT_FALLBACK_CONFIG: Required<FallbackConfig> = {\n fallbackOrder: ['en', 'en-US', DEFAULT_LANG], // English first\n enableConsoleWarnings: true,\n retryOnError: false,\n maxRetries: 3,\n};\n\nexport const useLanguageFallback = (config: FallbackConfig = {}) => {\n const finalConfig = { ...DEFAULT_FALLBACK_CONFIG, ...config };\n const [retryCount, setRetryCount] = useState(0);\n\n // Create English fallback language object\n const createEnglishFallback = (): ILanguage => ({\n code: 'en',\n label: 'English',\n direction: 'ltr'\n });\n\n // Find the best available language with fallback logic\n const findBestAvailableLanguage = (\n languages: ILanguage[], \n preferredCode?: string\n ): ILanguage | null => {\n if (!languages || languages.length === 0) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No languages available for fallback selection, using English');\n }\n return createEnglishFallback();\n }\n\n // First try the preferred language if provided\n if (preferredCode) {\n const preferred = languages.find(lang => lang.code === preferredCode);\n if (preferred) return preferred;\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Preferred language \"${preferredCode}\" not found, trying fallbacks`);\n }\n }\n\n // Try fallback languages in order (English first)\n for (const fallbackCode of finalConfig.fallbackOrder) {\n const fallback = languages.find(lang => lang.code === fallbackCode);\n if (fallback) {\n if (finalConfig.enableConsoleWarnings && preferredCode && preferredCode !== fallbackCode) {\n console.warn(`Using fallback language: \"${fallbackCode}\" instead of \"${preferredCode}\"`);\n }\n return fallback;\n }\n }\n\n // If no fallbacks found, return English or first available language\n const englishLang = languages.find(lang => lang.code === 'en');\n if (englishLang) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('Using English as ultimate fallback');\n }\n return englishLang;\n }\n\n // Last resort - return first available language\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No English fallback found, using first available language');\n }\n return languages[0] || createEnglishFallback();\n };\n\n // Create a fallback language object when API fails - always English\n const createEmergencyFallback = (): ILanguage => {\n return createEnglishFallback();\n };\n\n // Validate if a language code exists in the available languages\n const validateLanguageCode = (languages: ILanguage[], code: string): boolean => {\n return languages.some(lang => lang.code === code);\n };\n\n // Get saved language from localStorage with validation\n const getSavedLanguage = (languages: ILanguage[]): string | null => {\n const saved = localStorage.getItem('_language');\n if (!saved) return null;\n \n // Validate saved language exists in available languages\n if (validateLanguageCode(languages, saved)) {\n return saved;\n }\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Saved language \"${saved}\" is no longer available, will use English fallback`);\n }\n return null;\n };\n\n // Ensure English is always available in languages array\n const ensureEnglishAvailable = (languages: ILanguage[]): ILanguage[] => {\n const hasEnglish = languages.some(lang => lang.code === 'en');\n if (!hasEnglish) {\n return [createEnglishFallback(), ...languages];\n }\n return languages;\n };\n\n // Retry mechanism for failed language fetches\n const shouldRetry = (): boolean => {\n return finalConfig.retryOnError && retryCount < finalConfig.maxRetries;\n };\n\n const incrementRetry = () => {\n setRetryCount(prev => prev + 1);\n };\n\n const resetRetry = () => {\n setRetryCount(0);\n };\n\n return {\n findBestAvailableLanguage,\n createEmergencyFallback,\n createEnglishFallback,\n validateLanguageCode,\n getSavedLanguage,\n ensureEnglishAvailable,\n shouldRetry,\n incrementRetry,\n resetRetry,\n retryCount,\n config: finalConfig,\n };\n};\n\n// Additional utility hook for language state management\nexport const useLanguageState = () => {\n const [isInitialized, setIsInitialized] = useState(false);\n const [hasError, setHasError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const markInitialized = () => setIsInitialized(true);\n const setError = (error: string) => {\n setHasError(true);\n setErrorMessage(error);\n };\n const clearError = () => {\n setHasError(false);\n setErrorMessage(null);\n };\n\n return {\n isInitialized,\n hasError,\n errorMessage,\n markInitialized,\n setError,\n clearError,\n };\n};\n\nexport default {\n useLanguageFallback,\n useLanguageState,\n};\n\nexport type { ILanguage, FallbackConfig };\n\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/hooks/useLanguageFallback.ts"],"sourcesContent":["import { useState } from 'react';\nimport { DEFAULT_LANG } from '../constants/all-language';\n\ninterface ILanguage {\n label: string;\n code: string;\n direction: string;\n}\n\n// Configuration for fallback behavior\ninterface FallbackConfig {\n fallbackOrder?: string[];\n enableConsoleWarnings?: boolean;\n retryOnError?: boolean;\n maxRetries?: number;\n}\n\n// Updated fallback order with English first\nconst DEFAULT_FALLBACK_CONFIG: Required<FallbackConfig> = {\n fallbackOrder: ['en', 'en-US', DEFAULT_LANG], // English first\n enableConsoleWarnings: true,\n retryOnError: false,\n maxRetries: 3,\n};\n\nexport const useLanguageFallback = (config: FallbackConfig = {}) => {\n const finalConfig = { ...DEFAULT_FALLBACK_CONFIG, ...config };\n const [retryCount, setRetryCount] = useState(0);\n\n // Create English fallback language object\n const createEnglishFallback = (): ILanguage => ({\n code: 'en',\n label: 'English',\n direction: 'ltr'\n });\n\n // Find the best available language with fallback logic\n const findBestAvailableLanguage = (\n languages: ILanguage[], \n preferredCode?: string\n ): ILanguage | null => {\n if (!languages || languages.length === 0) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No languages available for fallback selection, using English');\n }\n return createEnglishFallback();\n }\n\n // First try the preferred language if provided\n if (preferredCode) {\n const preferred = languages.find(lang => lang.code === preferredCode);\n if (preferred) return preferred;\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Preferred language \"${preferredCode}\" not found, trying fallbacks`);\n }\n }\n\n // Try fallback languages in order (English first)\n for (const fallbackCode of finalConfig.fallbackOrder) {\n const fallback = languages.find(lang => lang.code === fallbackCode);\n if (fallback) {\n if (finalConfig.enableConsoleWarnings && preferredCode && preferredCode !== fallbackCode) {\n console.warn(`Using fallback language: \"${fallbackCode}\" instead of \"${preferredCode}\"`);\n }\n return fallback;\n }\n }\n\n // If no fallbacks found, return English or first available language\n const englishLang = languages.find(lang => lang.code === 'en');\n if (englishLang) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('Using English as ultimate fallback');\n }\n return englishLang;\n }\n\n // Last resort - return first available language\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No English fallback found, using first available language');\n }\n return languages[0] || createEnglishFallback();\n };\n\n // Create a fallback language object when API fails - always English\n const createEmergencyFallback = (): ILanguage => {\n return createEnglishFallback();\n };\n\n // Validate if a language code exists in the available languages\n const validateLanguageCode = (languages: ILanguage[], code: string): boolean => {\n return languages.some(lang => lang.code === code);\n };\n\n // Get saved language from localStorage with validation\n const getSavedLanguage = (languages: ILanguage[]): string | null => {\n const saved = localStorage.getItem('_language');\n if (!saved) return null;\n \n // Validate saved language exists in available languages\n if (validateLanguageCode(languages, saved)) {\n return saved;\n }\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Saved language \"${saved}\" is no longer available, will use English fallback`);\n }\n return null;\n };\n\n // Ensure English is always available in languages array\n const ensureEnglishAvailable = (languages: ILanguage[]): ILanguage[] => {\n const hasEnglish = languages.some(lang => lang.code === 'en');\n if (!hasEnglish) {\n return [createEnglishFallback(), ...languages];\n }\n return languages;\n };\n\n // Retry mechanism for failed language fetches\n const shouldRetry = (): boolean => {\n return finalConfig.retryOnError && retryCount < finalConfig.maxRetries;\n };\n\n const incrementRetry = () => {\n setRetryCount(prev => prev + 1);\n };\n\n const resetRetry = () => {\n setRetryCount(0);\n };\n\n return {\n findBestAvailableLanguage,\n createEmergencyFallback,\n createEnglishFallback,\n validateLanguageCode,\n getSavedLanguage,\n ensureEnglishAvailable,\n shouldRetry,\n incrementRetry,\n resetRetry,\n retryCount,\n config: finalConfig,\n };\n};\n\n// Additional utility hook for language state management\nexport const useLanguageState = () => {\n const [isInitialized, setIsInitialized] = useState(false);\n const [hasError, setHasError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const markInitialized = () => setIsInitialized(true);\n const setError = (error: string) => {\n setHasError(true);\n setErrorMessage(error);\n };\n const clearError = () => {\n setHasError(false);\n setErrorMessage(null);\n };\n\n return {\n isInitialized,\n hasError,\n errorMessage,\n markInitialized,\n setError,\n clearError,\n };\n};\n\nexport default {\n useLanguageFallback,\n useLanguageState,\n};\n\nexport type { ILanguage, FallbackConfig };\n\n"],"names":["DEFAULT_FALLBACK_CONFIG","fallbackOrder","enableConsoleWarnings","retryOnError","maxRetries","useLanguageFallback","config","finalConfig","retryCount","setRetryCount","useState","validateLanguageCode","languages","code","some","lang","findBestAvailableLanguage","preferredCode","length","label","direction","preferred","find","fallbackCode","fallback","englishLang","createEmergencyFallback","createEnglishFallback","getSavedLanguage","saved","localStorage","getItem","ensureEnglishAvailable","shouldRetry","incrementRetry","prev","resetRetry","useLanguageState","isInitialized","setIsInitialized","hasError","setHasError","errorMessage","setErrorMessage","markInitialized","setError","error","clearError","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/hooks/useLanguageFallback.ts"],"sourcesContent":["import { useState } from 'react';\nimport { DEFAULT_LANG } from '../constants/all-language';\n\ninterface ILanguage {\n label: string;\n code: string;\n direction: string;\n}\n\n// Configuration for fallback behavior\ninterface FallbackConfig {\n fallbackOrder?: string[];\n enableConsoleWarnings?: boolean;\n retryOnError?: boolean;\n maxRetries?: number;\n}\n\n// Updated fallback order with English first\nconst DEFAULT_FALLBACK_CONFIG: Required<FallbackConfig> = {\n fallbackOrder: ['en', 'en-US', DEFAULT_LANG], // English first\n enableConsoleWarnings: true,\n retryOnError: false,\n maxRetries: 3,\n};\n\nexport const useLanguageFallback = (config: FallbackConfig = {}) => {\n const finalConfig = { ...DEFAULT_FALLBACK_CONFIG, ...config };\n const [retryCount, setRetryCount] = useState(0);\n\n // Create English fallback language object\n const createEnglishFallback = (): ILanguage => ({\n code: 'en',\n label: 'English',\n direction: 'ltr'\n });\n\n // Find the best available language with fallback logic\n const findBestAvailableLanguage = (\n languages: ILanguage[], \n preferredCode?: string\n ): ILanguage | null => {\n if (!languages || languages.length === 0) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No languages available for fallback selection, using English');\n }\n return createEnglishFallback();\n }\n\n // First try the preferred language if provided\n if (preferredCode) {\n const preferred = languages.find(lang => lang.code === preferredCode);\n if (preferred) return preferred;\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Preferred language \"${preferredCode}\" not found, trying fallbacks`);\n }\n }\n\n // Try fallback languages in order (English first)\n for (const fallbackCode of finalConfig.fallbackOrder) {\n const fallback = languages.find(lang => lang.code === fallbackCode);\n if (fallback) {\n if (finalConfig.enableConsoleWarnings && preferredCode && preferredCode !== fallbackCode) {\n console.warn(`Using fallback language: \"${fallbackCode}\" instead of \"${preferredCode}\"`);\n }\n return fallback;\n }\n }\n\n // If no fallbacks found, return English or first available language\n const englishLang = languages.find(lang => lang.code === 'en');\n if (englishLang) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('Using English as ultimate fallback');\n }\n return englishLang;\n }\n\n // Last resort - return first available language\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No English fallback found, using first available language');\n }\n return languages[0] || createEnglishFallback();\n };\n\n // Create a fallback language object when API fails - always English\n const createEmergencyFallback = (): ILanguage => {\n return createEnglishFallback();\n };\n\n // Validate if a language code exists in the available languages\n const validateLanguageCode = (languages: ILanguage[], code: string): boolean => {\n return languages.some(lang => lang.code === code);\n };\n\n // Get saved language from localStorage with validation\n const getSavedLanguage = (languages: ILanguage[]): string | null => {\n const saved = localStorage.getItem('_language');\n if (!saved) return null;\n \n // Validate saved language exists in available languages\n if (validateLanguageCode(languages, saved)) {\n return saved;\n }\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Saved language \"${saved}\" is no longer available, will use English fallback`);\n }\n return null;\n };\n\n // Ensure English is always available in languages array\n const ensureEnglishAvailable = (languages: ILanguage[]): ILanguage[] => {\n const hasEnglish = languages.some(lang => lang.code === 'en');\n if (!hasEnglish) {\n return [createEnglishFallback(), ...languages];\n }\n return languages;\n };\n\n // Retry mechanism for failed language fetches\n const shouldRetry = (): boolean => {\n return finalConfig.retryOnError && retryCount < finalConfig.maxRetries;\n };\n\n const incrementRetry = () => {\n setRetryCount(prev => prev + 1);\n };\n\n const resetRetry = () => {\n setRetryCount(0);\n };\n\n return {\n findBestAvailableLanguage,\n createEmergencyFallback,\n createEnglishFallback,\n validateLanguageCode,\n getSavedLanguage,\n ensureEnglishAvailable,\n shouldRetry,\n incrementRetry,\n resetRetry,\n retryCount,\n config: finalConfig,\n };\n};\n\n// Additional utility hook for language state management\nexport const useLanguageState = () => {\n const [isInitialized, setIsInitialized] = useState(false);\n const [hasError, setHasError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const markInitialized = () => setIsInitialized(true);\n const setError = (error: string) => {\n setHasError(true);\n setErrorMessage(error);\n };\n const clearError = () => {\n setHasError(false);\n setErrorMessage(null);\n };\n\n return {\n isInitialized,\n hasError,\n errorMessage,\n markInitialized,\n setError,\n clearError,\n };\n};\n\nexport default {\n useLanguageFallback,\n useLanguageState,\n};\n\nexport type { ILanguage, FallbackConfig };\n\n"],"names":["DEFAULT_FALLBACK_CONFIG","fallbackOrder","enableConsoleWarnings","retryOnError","maxRetries","useLanguageFallback","config","finalConfig","retryCount","setRetryCount","useState","validateLanguageCode","languages","code","some","lang","findBestAvailableLanguage","preferredCode","length","label","direction","preferred","find","fallbackCode","fallback","englishLang","createEmergencyFallback","createEnglishFallback","getSavedLanguage","saved","localStorage","getItem","ensureEnglishAvailable","shouldRetry","incrementRetry","prev","resetRetry","useLanguageState","isInitialized","setIsInitialized","hasError","setHasError","errorMessage","setErrorMessage","markInitialized","setError","error","clearError","useLanguageFallback_default"],"mappings":"2FAkBA,MAAMA,EAAoD,CACxDC,cAAe,CAAC,KAAM,uEACtBC,uBAAuB,EACvBC,cAAc,EACdC,WAAY,GAGDC,EAAsB,CAACC,EAAyB,MAC3D,MAAMC,EAAc,IAAKP,KAA4BM,IAC9CE,EAAYC,GAAiBC,EAAAA,SAAS,GAgEvCC,EAAuB,CAACC,EAAwBC,IAC7CD,EAAUE,KAAKC,GAAQA,EAAKF,OAASA,GAyC9C,MAAO,CACLG,0BAjGgC,CAChCJ,EACAK,KAEA,IAAKL,GAAkC,IAArBA,EAAUM,OAI1B,OAHIX,EAAYL,sBAZU,CAC5BW,KAAM,KACNM,MAAO,UACPC,UAAW,OAgBX,GAAIH,EAAe,CACjB,MAAMI,EAAYT,EAAUU,KAAKP,GAAQA,EAAKF,OAASI,GACvD,GAAII,EAAW,OAAOA,EAElBd,EAAYL,qBAGlB,CAGA,IAAA,MAAWqB,KAAgBhB,EAAYN,cAAe,CACpD,MAAMuB,EAAWZ,EAAUU,KAAKP,GAAQA,EAAKF,OAASU,GACtD,GAAIC,EAIF,OAHIjB,EAAYL,sBAGTsB,CAEX,CAGA,MAAMC,EAAcb,EAAUU,KAAKP,GAAsB,OAAdA,EAAKF,MAChD,OAAIY,GACElB,EAAYL,sBAGTuB,IAILlB,EAAYL,sBAGTU,EAAU,IApDW,CAC5BC,KAAM,KACNM,MAAO,UACPC,UAAW,SAsGXM,wBAjD8B,KAxDF,CAC5Bb,KAAM,KACNM,MAAO,UACPC,UAAW,QAuGXO,sBA1G4B,KAAA,CAC5Bd,KAAM,KACNM,MAAO,UACPC,UAAW,QAwGXT,uBACAiB,iBA1CwBhB,IACxB,MAAMiB,EAAQC,aAAaC,QAAQ,aACnC,OAAKF,EAGDlB,EAAqBC,EAAWiB,GAC3BA,GAGLtB,EAAYL,sBAGT,MAVY,MAyCnB8B,uBA3B8BpB,GACXA,EAAUE,KAAKC,GAAsB,OAAdA,EAAKF,MAIxCD,EAFE,CArFmB,CAC5BC,KAAM,KACNM,MAAO,UACPC,UAAW,UAkF2BR,GAyBtCqB,YAnBkB,IACX1B,EAAYJ,cAAgBK,EAAaD,EAAYH,WAmB5D8B,eAhBqB,KACrBzB,EAAc0B,GAAQA,EAAO,IAgB7BC,WAbiB,KACjB3B,EAAc,IAadD,aACAF,OAAQC,IAKC8B,EAAmB,KAC9B,MAAOC,EAAeC,GAAoB7B,EAAAA,UAAS,IAC5C8B,EAAUC,GAAe/B,EAAAA,UAAS,IAClCgC,EAAcC,GAAmBjC,EAAAA,SAAwB,MAYhE,MAAO,CACL4B,gBACAE,WACAE,eACAE,gBAdsB,IAAML,GAAiB,GAe7CM,SAdgBC,IAChBL,GAAY,GACZE,EAAgBG,IAahBC,WAXiB,KACjBN,GAAY,GACZE,EAAgB,SAapB,IAAAK,EAAe,CACb3C,sBACAgC"}
|
|
@@ -38,12 +38,12 @@ const useMultipleLocationFilters = ({
|
|
|
38
38
|
};
|
|
39
39
|
}, [selectedCompany, setValue, fieldConfigs, resetValue, filterKey]);
|
|
40
40
|
};
|
|
41
|
-
var
|
|
41
|
+
var useLocationFilter_default = {
|
|
42
42
|
useLocationFilter,
|
|
43
43
|
useMultipleLocationFilters
|
|
44
44
|
};
|
|
45
45
|
export {
|
|
46
|
-
|
|
46
|
+
useLocationFilter_default as default,
|
|
47
47
|
useLocationFilter,
|
|
48
48
|
useMultipleLocationFilters
|
|
49
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../src/hooks/useLocationFilter.tsx"],"sourcesContent":["import { useMemo } from 'react';\n\n\nexport const useLocationFilter = ({\n selectedCompany,\n setValue,\n fieldArrayName,\n locationFieldName,\n resetValue = null,\n filterKey = '&company_id.in',\n isDirty = false\n}) => {\n const locationFilter = useMemo(() => {\n const companyId = Array.isArray(selectedCompany) ? (selectedCompany?.length ? selectedCompany: 0) : (selectedCompany || 0);\n \n // Reset location value when company changes\n if (setValue && fieldArrayName && locationFieldName && isDirty) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n \n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, setValue, fieldArrayName, locationFieldName, resetValue, filterKey,isDirty]);\n\n return locationFilter;\n};\n\n\nexport const useMultipleLocationFilters = ({\n selectedCompany,\n setValue,\n fieldConfigs,\n resetValue = undefined,\n filterKey = '&company_id.in'\n}) => {\n return useMemo(() => {\n const companyId = selectedCompany?.length > 0 ? selectedCompany : 0;\n \n // Reset all location fields\n fieldConfigs.forEach(({ fieldArrayName, locationFieldName }) => {\n if (setValue && fieldArrayName && locationFieldName) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n });\n \n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, setValue, fieldConfigs, resetValue, filterKey]);\n};\n\nexport default {\n useLocationFilter,\n useMultipleLocationFilters\n}"],"names":[],"mappings":";AAGO,MAAM,oBAAoB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AACd,MAAM;AACF,QAAM,iBAAiB,QAAQ,MAAM;AACjC,UAAM,YAAY,MAAM,QAAQ,eAAe,KAAK,mDAAiB,UAAS,kBAAiB,IAAM,mBAAmB;AAGxH,QAAI,YAAY,kBAAkB,qBAAqB,SAAS;AAC5D,eAAS,GAAG,cAAc,IAAI,iBAAiB,IAAI,UAAU;AAAA,IACjE;AAEA,WAAO;AAAA,MACH,CAAC,SAAS,GAAG;AAAA,IAAA;AAAA,EAErB,GAAG,CAAC,iBAAiB,UAAU,gBAAgB,mBAAmB,YAAY,WAAU,OAAO,CAAC;AAEhG,SAAO;AACX;AAGO,MAAM,6BAA6B,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,YAAY;AAChB,MAAM;AACF,SAAO,QAAQ,MAAM;AACjB,UAAM,aAAY,mDAAiB,UAAS,IAAI,kBAAkB;AAGlE,iBAAa,QAAQ,CAAC,EAAE,gBAAgB,wBAAwB;AAC5D,UAAI,YAAY,kBAAkB,mBAAmB;AACjD,iBAAS,GAAG,cAAc,IAAI,iBAAiB,IAAI,UAAU;AAAA,MACjE;AAAA,IACJ,CAAC;AAED,WAAO;AAAA,MACH,CAAC,SAAS,GAAG;AAAA,IAAA;AAAA,EAErB,GAAG,CAAC,iBAAiB,UAAU,cAAc,YAAY,SAAS,CAAC;AACvE;AAEA,IAAA,
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../src/hooks/useLocationFilter.tsx"],"sourcesContent":["import { useMemo } from 'react';\n\n\nexport const useLocationFilter = ({\n selectedCompany,\n setValue,\n fieldArrayName,\n locationFieldName,\n resetValue = null,\n filterKey = '&company_id.in',\n isDirty = false\n}) => {\n const locationFilter = useMemo(() => {\n const companyId = Array.isArray(selectedCompany) ? (selectedCompany?.length ? selectedCompany: 0) : (selectedCompany || 0);\n \n // Reset location value when company changes\n if (setValue && fieldArrayName && locationFieldName && isDirty) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n \n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, setValue, fieldArrayName, locationFieldName, resetValue, filterKey,isDirty]);\n\n return locationFilter;\n};\n\n\nexport const useMultipleLocationFilters = ({\n selectedCompany,\n setValue,\n fieldConfigs,\n resetValue = undefined,\n filterKey = '&company_id.in'\n}) => {\n return useMemo(() => {\n const companyId = selectedCompany?.length > 0 ? selectedCompany : 0;\n \n // Reset all location fields\n fieldConfigs.forEach(({ fieldArrayName, locationFieldName }) => {\n if (setValue && fieldArrayName && locationFieldName) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n });\n \n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, setValue, fieldConfigs, resetValue, filterKey]);\n};\n\nexport default {\n useLocationFilter,\n useMultipleLocationFilters\n}"],"names":[],"mappings":";AAGO,MAAM,oBAAoB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AACd,MAAM;AACF,QAAM,iBAAiB,QAAQ,MAAM;AACjC,UAAM,YAAY,MAAM,QAAQ,eAAe,KAAK,mDAAiB,UAAS,kBAAiB,IAAM,mBAAmB;AAGxH,QAAI,YAAY,kBAAkB,qBAAqB,SAAS;AAC5D,eAAS,GAAG,cAAc,IAAI,iBAAiB,IAAI,UAAU;AAAA,IACjE;AAEA,WAAO;AAAA,MACH,CAAC,SAAS,GAAG;AAAA,IAAA;AAAA,EAErB,GAAG,CAAC,iBAAiB,UAAU,gBAAgB,mBAAmB,YAAY,WAAU,OAAO,CAAC;AAEhG,SAAO;AACX;AAGO,MAAM,6BAA6B,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,YAAY;AAChB,MAAM;AACF,SAAO,QAAQ,MAAM;AACjB,UAAM,aAAY,mDAAiB,UAAS,IAAI,kBAAkB;AAGlE,iBAAa,QAAQ,CAAC,EAAE,gBAAgB,wBAAwB;AAC5D,UAAI,YAAY,kBAAkB,mBAAmB;AACjD,iBAAS,GAAG,cAAc,IAAI,iBAAiB,IAAI,UAAU;AAAA,MACjE;AAAA,IACJ,CAAC;AAED,WAAO;AAAA,MACH,CAAC,SAAS,GAAG;AAAA,IAAA;AAAA,EAErB,GAAG,CAAC,iBAAiB,UAAU,cAAc,YAAY,SAAS,CAAC;AACvE;AAEA,IAAA,4BAAe;AAAA,EACX;AAAA,EACA;AACJ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/hooks/useLocationFilter.tsx"],"sourcesContent":["import { useMemo } from 'react';\n\n\nexport const useLocationFilter = ({\n selectedCompany,\n setValue,\n fieldArrayName,\n locationFieldName,\n resetValue = null,\n filterKey = '&company_id.in',\n isDirty = false\n}) => {\n const locationFilter = useMemo(() => {\n const companyId = Array.isArray(selectedCompany) ? (selectedCompany?.length ? selectedCompany: 0) : (selectedCompany || 0);\n \n // Reset location value when company changes\n if (setValue && fieldArrayName && locationFieldName && isDirty) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n \n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, setValue, fieldArrayName, locationFieldName, resetValue, filterKey,isDirty]);\n\n return locationFilter;\n};\n\n\nexport const useMultipleLocationFilters = ({\n selectedCompany,\n setValue,\n fieldConfigs,\n resetValue = undefined,\n filterKey = '&company_id.in'\n}) => {\n return useMemo(() => {\n const companyId = selectedCompany?.length > 0 ? selectedCompany : 0;\n \n // Reset all location fields\n fieldConfigs.forEach(({ fieldArrayName, locationFieldName }) => {\n if (setValue && fieldArrayName && locationFieldName) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n });\n \n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, setValue, fieldConfigs, resetValue, filterKey]);\n};\n\nexport default {\n useLocationFilter,\n useMultipleLocationFilters\n}"],"names":["useLocationFilter","selectedCompany","setValue","fieldArrayName","locationFieldName","resetValue","filterKey","isDirty","useMemo","companyId","Array","isArray","length","useMultipleLocationFilters","fieldConfigs","forEach","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/hooks/useLocationFilter.tsx"],"sourcesContent":["import { useMemo } from 'react';\n\n\nexport const useLocationFilter = ({\n selectedCompany,\n setValue,\n fieldArrayName,\n locationFieldName,\n resetValue = null,\n filterKey = '&company_id.in',\n isDirty = false\n}) => {\n const locationFilter = useMemo(() => {\n const companyId = Array.isArray(selectedCompany) ? (selectedCompany?.length ? selectedCompany: 0) : (selectedCompany || 0);\n \n // Reset location value when company changes\n if (setValue && fieldArrayName && locationFieldName && isDirty) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n \n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, setValue, fieldArrayName, locationFieldName, resetValue, filterKey,isDirty]);\n\n return locationFilter;\n};\n\n\nexport const useMultipleLocationFilters = ({\n selectedCompany,\n setValue,\n fieldConfigs,\n resetValue = undefined,\n filterKey = '&company_id.in'\n}) => {\n return useMemo(() => {\n const companyId = selectedCompany?.length > 0 ? selectedCompany : 0;\n \n // Reset all location fields\n fieldConfigs.forEach(({ fieldArrayName, locationFieldName }) => {\n if (setValue && fieldArrayName && locationFieldName) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n });\n \n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, setValue, fieldConfigs, resetValue, filterKey]);\n};\n\nexport default {\n useLocationFilter,\n useMultipleLocationFilters\n}"],"names":["useLocationFilter","selectedCompany","setValue","fieldArrayName","locationFieldName","resetValue","filterKey","isDirty","useMemo","companyId","Array","isArray","length","useMultipleLocationFilters","fieldConfigs","forEach","useLocationFilter_default"],"mappings":"2FAGO,MAAMA,EAAoB,EAC7BC,kBACAC,WACAC,iBACAC,oBACAC,aAAa,KACbC,YAAY,iBACZC,WAAU,KAEaC,EAAAA,QAAQ,KAC3B,MAAMC,EAAYC,MAAMC,QAAQV,IAAoB,MAAAA,OAAA,EAAAA,EAAiBW,QAASX,EAAiB,EAAMA,GAAmB,EAOxH,OAJIC,GAAYC,GAAkBC,GAAqBG,GACnDL,EAAS,GAAGC,KAAkBC,IAAqBC,GAGhD,CACHC,CAACA,GAAYG,IAElB,CAACR,EAAiBC,EAAUC,EAAgBC,EAAmBC,EAAYC,EAAUC,IAM/EM,EAA6B,EACtCZ,kBACAC,WACAY,eACAT,aACAC,YAAY,oBAELE,EAAAA,QAAQ,KACX,MAAMC,GAAY,MAAAR,OAAA,EAAAA,EAAiBW,QAAS,EAAIX,EAAkB,EASlE,OANAa,EAAaC,QAAQ,EAAGZ,iBAAgBC,wBAChCF,GAAYC,GAAkBC,GAC9BF,EAAS,GAAGC,KAAkBC,IAAqBC,KAIpD,CACHC,CAACA,GAAYG,IAElB,CAACR,EAAiBC,EAAUY,EAAcT,EAAYC,IAG7D,IAAAU,EAAe,CACXhB,oBACAa"}
|