@j2-health/design-system 0.2.0 → 0.3.0
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/README.md +38 -9
- package/dist/index.cjs +102 -3614
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +54 -3551
- package/dist/index.js.map +1 -1
- package/dist/src/AppConfigProvider.cjs +13 -0
- package/dist/src/AppConfigProvider.cjs.map +1 -0
- package/dist/src/AppConfigProvider.js +13 -0
- package/dist/src/AppConfigProvider.js.map +1 -0
- package/dist/src/appTheme.cjs +268 -0
- package/dist/src/appTheme.cjs.map +1 -0
- package/dist/src/appTheme.js +268 -0
- package/dist/src/appTheme.js.map +1 -0
- package/dist/src/components/alert/Alert.cjs +95 -0
- package/dist/src/components/alert/Alert.cjs.map +1 -0
- package/dist/src/components/alert/Alert.js +78 -0
- package/dist/src/components/alert/Alert.js.map +1 -0
- package/dist/src/components/alert/Alert.module.css.cjs +9 -0
- package/dist/src/components/alert/Alert.module.css.cjs.map +1 -0
- package/dist/src/components/alert/Alert.module.css.js +9 -0
- package/dist/src/components/alert/Alert.module.css.js.map +1 -0
- package/dist/src/components/barchart/BarChart.cjs +155 -0
- package/dist/src/components/barchart/BarChart.cjs.map +1 -0
- package/dist/src/components/barchart/BarChart.js +155 -0
- package/dist/src/components/barchart/BarChart.js.map +1 -0
- package/dist/src/components/barchart/chart.module.css.cjs +9 -0
- package/dist/src/components/barchart/chart.module.css.cjs.map +1 -0
- package/dist/src/components/barchart/chart.module.css.js +9 -0
- package/dist/src/components/barchart/chart.module.css.js.map +1 -0
- package/dist/src/components/breadcrumb/Breadcrumb.cjs +38 -0
- package/dist/src/components/breadcrumb/Breadcrumb.cjs.map +1 -0
- package/dist/src/components/breadcrumb/Breadcrumb.js +21 -0
- package/dist/src/components/breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/src/components/bulkActionBar/BulkActionBar.cjs +81 -0
- package/dist/src/components/bulkActionBar/BulkActionBar.cjs.map +1 -0
- package/dist/src/components/bulkActionBar/BulkActionBar.js +81 -0
- package/dist/src/components/bulkActionBar/BulkActionBar.js.map +1 -0
- package/dist/src/components/button/Button.cjs +21 -0
- package/dist/src/components/button/Button.cjs.map +1 -0
- package/dist/src/components/button/Button.js +21 -0
- package/dist/src/components/button/Button.js.map +1 -0
- package/dist/src/components/card/Card.cjs +36 -0
- package/dist/src/components/card/Card.cjs.map +1 -0
- package/dist/src/components/card/Card.js +36 -0
- package/dist/src/components/card/Card.js.map +1 -0
- package/dist/src/components/checkbox/Checkbox.cjs +10 -0
- package/dist/src/components/checkbox/Checkbox.cjs.map +1 -0
- package/dist/src/components/checkbox/Checkbox.js +10 -0
- package/dist/src/components/checkbox/Checkbox.js.map +1 -0
- package/dist/src/components/checkboxTree/CheckboxTree.cjs +140 -0
- package/dist/src/components/checkboxTree/CheckboxTree.cjs.map +1 -0
- package/dist/src/components/checkboxTree/CheckboxTree.js +140 -0
- package/dist/src/components/checkboxTree/CheckboxTree.js.map +1 -0
- package/dist/src/components/checkboxTree/TreeNode.cjs +92 -0
- package/dist/src/components/checkboxTree/TreeNode.cjs.map +1 -0
- package/dist/src/components/checkboxTree/TreeNode.js +92 -0
- package/dist/src/components/checkboxTree/TreeNode.js.map +1 -0
- package/dist/src/components/checkboxTree/utils.cjs +59 -0
- package/dist/src/components/checkboxTree/utils.cjs.map +1 -0
- package/dist/src/components/checkboxTree/utils.js +59 -0
- package/dist/src/components/checkboxTree/utils.js.map +1 -0
- package/dist/src/components/collapse/Collapse.cjs +81 -0
- package/dist/src/components/collapse/Collapse.cjs.map +1 -0
- package/dist/src/components/collapse/Collapse.js +64 -0
- package/dist/src/components/collapse/Collapse.js.map +1 -0
- package/dist/src/components/collapse/Collapse.module.css.cjs +13 -0
- package/dist/src/components/collapse/Collapse.module.css.cjs.map +1 -0
- package/dist/src/components/collapse/Collapse.module.css.js +13 -0
- package/dist/src/components/collapse/Collapse.module.css.js.map +1 -0
- package/dist/src/components/drawer/Drawer.cjs +39 -0
- package/dist/src/components/drawer/Drawer.cjs.map +1 -0
- package/dist/src/components/drawer/Drawer.js +39 -0
- package/dist/src/components/drawer/Drawer.js.map +1 -0
- package/dist/src/components/dropdown/Dropdown.cjs +58 -0
- package/dist/src/components/dropdown/Dropdown.cjs.map +1 -0
- package/dist/src/components/dropdown/Dropdown.js +58 -0
- package/dist/src/components/dropdown/Dropdown.js.map +1 -0
- package/dist/src/components/filterform/FilterGroup.cjs +64 -0
- package/dist/src/components/filterform/FilterGroup.cjs.map +1 -0
- package/dist/src/components/filterform/FilterGroup.js +64 -0
- package/dist/src/components/filterform/FilterGroup.js.map +1 -0
- package/dist/src/components/filterform/FilterInput.cjs +238 -0
- package/dist/src/components/filterform/FilterInput.cjs.map +1 -0
- package/dist/src/components/filterform/FilterInput.d.ts +1 -0
- package/dist/src/components/filterform/FilterInput.js +221 -0
- package/dist/src/components/filterform/FilterInput.js.map +1 -0
- package/dist/src/components/filterform/FiltersForm.cjs +168 -0
- package/dist/src/components/filterform/FiltersForm.cjs.map +1 -0
- package/dist/src/components/filterform/FiltersForm.js +168 -0
- package/dist/src/components/filterform/FiltersForm.js.map +1 -0
- package/dist/src/components/filterform/FiltersForm.module.css.cjs +21 -0
- package/dist/src/components/filterform/FiltersForm.module.css.cjs.map +1 -0
- package/dist/src/components/filterform/FiltersForm.module.css.js +21 -0
- package/dist/src/components/filterform/FiltersForm.module.css.js.map +1 -0
- package/dist/src/components/filterform/filterHelpers.cjs +71 -0
- package/dist/src/components/filterform/filterHelpers.cjs.map +1 -0
- package/dist/src/components/filterform/filterHelpers.d.ts +18 -4
- package/dist/src/components/filterform/filterHelpers.js +71 -0
- package/dist/src/components/filterform/filterHelpers.js.map +1 -0
- package/dist/src/components/filterform/index.d.ts +3 -1
- package/dist/src/components/filterform/types.d.ts +4 -2
- package/dist/src/components/filterform/useFilterField.cjs +245 -0
- package/dist/src/components/filterform/useFilterField.cjs.map +1 -0
- package/dist/src/components/filterform/useFilterField.d.ts +17 -1
- package/dist/src/components/filterform/useFilterField.js +228 -0
- package/dist/src/components/filterform/useFilterField.js.map +1 -0
- package/dist/src/components/filterform/useFiltersForm.cjs +160 -0
- package/dist/src/components/filterform/useFiltersForm.cjs.map +1 -0
- package/dist/src/components/filterform/useFiltersForm.js +160 -0
- package/dist/src/components/filterform/useFiltersForm.js.map +1 -0
- package/dist/src/components/form/Form.cjs +11 -0
- package/dist/src/components/form/Form.cjs.map +1 -0
- package/dist/src/components/form/Form.js +11 -0
- package/dist/src/components/form/Form.js.map +1 -0
- package/dist/src/components/icons/index.cjs +27 -0
- package/dist/src/components/icons/index.cjs.map +1 -0
- package/dist/src/components/icons/index.js +3 -0
- package/dist/src/components/icons/index.js.map +1 -0
- package/dist/src/components/input/AntdInput.cjs +13 -0
- package/dist/src/components/input/AntdInput.cjs.map +1 -0
- package/dist/src/components/input/AntdInput.js +13 -0
- package/dist/src/components/input/AntdInput.js.map +1 -0
- package/dist/src/components/input/AntdSearchInput.cjs +13 -0
- package/dist/src/components/input/AntdSearchInput.cjs.map +1 -0
- package/dist/src/components/input/AntdSearchInput.js +13 -0
- package/dist/src/components/input/AntdSearchInput.js.map +1 -0
- package/dist/src/components/input/Input.cjs +9 -0
- package/dist/src/components/input/Input.cjs.map +1 -0
- package/dist/src/components/input/Input.js +9 -0
- package/dist/src/components/input/Input.js.map +1 -0
- package/dist/src/components/inputnumber/InputNumber.cjs +32 -0
- package/dist/src/components/inputnumber/InputNumber.cjs.map +1 -0
- package/dist/src/components/inputnumber/InputNumber.js +32 -0
- package/dist/src/components/inputnumber/InputNumber.js.map +1 -0
- package/dist/src/components/inputnumber/InputNumber.module.css.cjs +9 -0
- package/dist/src/components/inputnumber/InputNumber.module.css.cjs.map +1 -0
- package/dist/src/components/inputnumber/InputNumber.module.css.js +9 -0
- package/dist/src/components/inputnumber/InputNumber.module.css.js.map +1 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.cjs +52 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.cjs.map +1 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.js +52 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.js.map +1 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.cjs +48 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.cjs.map +1 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.js +48 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.js.map +1 -0
- package/dist/src/components/legacyNavMenu/UserProfile.cjs +78 -0
- package/dist/src/components/legacyNavMenu/UserProfile.cjs.map +1 -0
- package/dist/src/components/legacyNavMenu/UserProfile.js +78 -0
- package/dist/src/components/legacyNavMenu/UserProfile.js.map +1 -0
- package/dist/src/components/legacyNavMenu/UserProfile.module.css.cjs +42 -0
- package/dist/src/components/legacyNavMenu/UserProfile.module.css.cjs.map +1 -0
- package/dist/src/components/legacyNavMenu/UserProfile.module.css.js +42 -0
- package/dist/src/components/legacyNavMenu/UserProfile.module.css.js.map +1 -0
- package/dist/src/components/listpopover/ListPopover.cjs +125 -0
- package/dist/src/components/listpopover/ListPopover.cjs.map +1 -0
- package/dist/src/components/listpopover/ListPopover.js +125 -0
- package/dist/src/components/listpopover/ListPopover.js.map +1 -0
- package/dist/src/components/listpopover/ListPopover.module.css.cjs +9 -0
- package/dist/src/components/listpopover/ListPopover.module.css.cjs.map +1 -0
- package/dist/src/components/listpopover/ListPopover.module.css.js +9 -0
- package/dist/src/components/listpopover/ListPopover.module.css.js.map +1 -0
- package/dist/src/components/menu/Menu.cjs +18 -0
- package/dist/src/components/menu/Menu.cjs.map +1 -0
- package/dist/src/components/menu/Menu.js +18 -0
- package/dist/src/components/menu/Menu.js.map +1 -0
- package/dist/src/components/menu/Menu.module.css.cjs +12 -0
- package/dist/src/components/menu/Menu.module.css.cjs.map +1 -0
- package/dist/src/components/menu/Menu.module.css.js +12 -0
- package/dist/src/components/menu/Menu.module.css.js.map +1 -0
- package/dist/src/components/message/Message.module.css.cjs +9 -0
- package/dist/src/components/message/Message.module.css.cjs.map +1 -0
- package/dist/src/components/message/Message.module.css.js +9 -0
- package/dist/src/components/message/Message.module.css.js.map +1 -0
- package/dist/src/components/message/useMessage.cjs +55 -0
- package/dist/src/components/message/useMessage.cjs.map +1 -0
- package/dist/src/components/message/useMessage.js +55 -0
- package/dist/src/components/message/useMessage.js.map +1 -0
- package/dist/src/components/modal/Modal.cjs +32 -0
- package/dist/src/components/modal/Modal.cjs.map +1 -0
- package/dist/src/components/modal/Modal.js +32 -0
- package/dist/src/components/modal/Modal.js.map +1 -0
- package/dist/src/components/navMenu/NavMenu.cjs +132 -0
- package/dist/src/components/navMenu/NavMenu.cjs.map +1 -0
- package/dist/src/components/navMenu/NavMenu.js +115 -0
- package/dist/src/components/navMenu/NavMenu.js.map +1 -0
- package/dist/src/components/navMenu/NavMenu.module.css.cjs +18 -0
- package/dist/src/components/navMenu/NavMenu.module.css.cjs.map +1 -0
- package/dist/src/components/navMenu/NavMenu.module.css.js +18 -0
- package/dist/src/components/navMenu/NavMenu.module.css.js.map +1 -0
- package/dist/src/components/notification/Notification.module.css.cjs +9 -0
- package/dist/src/components/notification/Notification.module.css.cjs.map +1 -0
- package/dist/src/components/notification/Notification.module.css.js +9 -0
- package/dist/src/components/notification/Notification.module.css.js.map +1 -0
- package/dist/src/components/notification/useNotification.cjs +52 -0
- package/dist/src/components/notification/useNotification.cjs.map +1 -0
- package/dist/src/components/notification/useNotification.js +52 -0
- package/dist/src/components/notification/useNotification.js.map +1 -0
- package/dist/src/components/notificationModal/NotifcationModal.module.css.cjs +21 -0
- package/dist/src/components/notificationModal/NotifcationModal.module.css.cjs.map +1 -0
- package/dist/src/components/notificationModal/NotifcationModal.module.css.js +21 -0
- package/dist/src/components/notificationModal/NotifcationModal.module.css.js.map +1 -0
- package/dist/src/components/notificationModal/NotificationModal.cjs +57 -0
- package/dist/src/components/notificationModal/NotificationModal.cjs.map +1 -0
- package/dist/src/components/notificationModal/NotificationModal.js +57 -0
- package/dist/src/components/notificationModal/NotificationModal.js.map +1 -0
- package/dist/src/components/pagination/Pagination.cjs +65 -0
- package/dist/src/components/pagination/Pagination.cjs.map +1 -0
- package/dist/src/components/pagination/Pagination.js +65 -0
- package/dist/src/components/pagination/Pagination.js.map +1 -0
- package/dist/src/components/pagination/Pagination.module.css.cjs +6 -0
- package/dist/src/components/pagination/Pagination.module.css.cjs.map +1 -0
- package/dist/src/components/pagination/Pagination.module.css.js +7 -0
- package/dist/src/components/pagination/Pagination.module.css.js.map +1 -0
- package/dist/src/components/popover/Popover.cjs +41 -0
- package/dist/src/components/popover/Popover.cjs.map +1 -0
- package/dist/src/components/popover/Popover.js +41 -0
- package/dist/src/components/popover/Popover.js.map +1 -0
- package/dist/src/components/popover/Popover.module.css.cjs +33 -0
- package/dist/src/components/popover/Popover.module.css.cjs.map +1 -0
- package/dist/src/components/popover/Popover.module.css.js +33 -0
- package/dist/src/components/popover/Popover.module.css.js.map +1 -0
- package/dist/src/components/progress/Progress.cjs +9 -0
- package/dist/src/components/progress/Progress.cjs.map +1 -0
- package/dist/src/components/progress/Progress.js +9 -0
- package/dist/src/components/progress/Progress.js.map +1 -0
- package/dist/src/components/radio/Radio.cjs +24 -0
- package/dist/src/components/radio/Radio.cjs.map +1 -0
- package/dist/src/components/radio/Radio.js +24 -0
- package/dist/src/components/radio/Radio.js.map +1 -0
- package/dist/src/components/rate/Rate.cjs +22 -0
- package/dist/src/components/rate/Rate.cjs.map +1 -0
- package/dist/src/components/rate/Rate.js +22 -0
- package/dist/src/components/rate/Rate.js.map +1 -0
- package/dist/src/components/select/AntdSelect.cjs +76 -0
- package/dist/src/components/select/AntdSelect.cjs.map +1 -0
- package/dist/src/components/select/AntdSelect.js +60 -0
- package/dist/src/components/select/AntdSelect.js.map +1 -0
- package/dist/src/components/select/Select.cjs +107 -0
- package/dist/src/components/select/Select.cjs.map +1 -0
- package/dist/src/components/select/Select.js +107 -0
- package/dist/src/components/select/Select.js.map +1 -0
- package/dist/src/components/select/SummarizedSelect.cjs +455 -0
- package/dist/src/components/select/SummarizedSelect.cjs.map +1 -0
- package/dist/src/components/select/SummarizedSelect.js +455 -0
- package/dist/src/components/select/SummarizedSelect.js.map +1 -0
- package/dist/src/components/select/SummarizedSelect.module.css.cjs +30 -0
- package/dist/src/components/select/SummarizedSelect.module.css.cjs.map +1 -0
- package/dist/src/components/select/SummarizedSelect.module.css.js +30 -0
- package/dist/src/components/select/SummarizedSelect.module.css.js.map +1 -0
- package/dist/src/components/skeleton/Skeleton.cjs +14 -0
- package/dist/src/components/skeleton/Skeleton.cjs.map +1 -0
- package/dist/src/components/skeleton/Skeleton.js +14 -0
- package/dist/src/components/skeleton/Skeleton.js.map +1 -0
- package/dist/src/components/spinner/Spinner.cjs +20 -0
- package/dist/src/components/spinner/Spinner.cjs.map +1 -0
- package/dist/src/components/spinner/Spinner.js +20 -0
- package/dist/src/components/spinner/Spinner.js.map +1 -0
- package/dist/src/components/steps/Steps.cjs +50 -0
- package/dist/src/components/steps/Steps.cjs.map +1 -0
- package/dist/src/components/steps/Steps.js +50 -0
- package/dist/src/components/steps/Steps.js.map +1 -0
- package/dist/src/components/steps/useSteps.cjs +56 -0
- package/dist/src/components/steps/useSteps.cjs.map +1 -0
- package/dist/src/components/steps/useSteps.js +56 -0
- package/dist/src/components/steps/useSteps.js.map +1 -0
- package/dist/src/components/switch/Switch.cjs +28 -0
- package/dist/src/components/switch/Switch.cjs.map +1 -0
- package/dist/src/components/switch/Switch.js +28 -0
- package/dist/src/components/switch/Switch.js.map +1 -0
- package/dist/src/components/table/Table.cjs +117 -0
- package/dist/src/components/table/Table.cjs.map +1 -0
- package/dist/src/components/table/Table.js +117 -0
- package/dist/src/components/table/Table.js.map +1 -0
- package/dist/src/components/table/Table.module.css.cjs +12 -0
- package/dist/src/components/table/Table.module.css.cjs.map +1 -0
- package/dist/src/components/table/Table.module.css.js +12 -0
- package/dist/src/components/table/Table.module.css.js.map +1 -0
- package/dist/src/components/tabs/Tabs.cjs +10 -0
- package/dist/src/components/tabs/Tabs.cjs.map +1 -0
- package/dist/src/components/tabs/Tabs.js +10 -0
- package/dist/src/components/tabs/Tabs.js.map +1 -0
- package/dist/src/components/tag/Tag.cjs +74 -0
- package/dist/src/components/tag/Tag.cjs.map +1 -0
- package/dist/src/components/tag/Tag.js +57 -0
- package/dist/src/components/tag/Tag.js.map +1 -0
- package/dist/src/components/tooltip/Tooltip.cjs +14 -0
- package/dist/src/components/tooltip/Tooltip.cjs.map +1 -0
- package/dist/src/components/tooltip/Tooltip.js +14 -0
- package/dist/src/components/tooltip/Tooltip.js.map +1 -0
- package/dist/src/components/vennDiagram/VennDiagram.cjs +53 -0
- package/dist/src/components/vennDiagram/VennDiagram.cjs.map +1 -0
- package/dist/src/components/vennDiagram/VennDiagram.js +53 -0
- package/dist/src/components/vennDiagram/VennDiagram.js.map +1 -0
- package/dist/src/svgs/ProgressCircle.svg.cjs +22 -0
- package/dist/src/svgs/ProgressCircle.svg.cjs.map +1 -0
- package/dist/src/svgs/ProgressCircle.svg.js +6 -0
- package/dist/src/svgs/ProgressCircle.svg.js.map +1 -0
- package/dist/src/svgs/j2-logo-menu-collapse.svg.cjs +22 -0
- package/dist/src/svgs/j2-logo-menu-collapse.svg.cjs.map +1 -0
- package/dist/src/svgs/j2-logo-menu-collapse.svg.js +6 -0
- package/dist/src/svgs/j2-logo-menu-collapse.svg.js.map +1 -0
- package/dist/src/svgs/j2-logo-menu.svg.cjs +22 -0
- package/dist/src/svgs/j2-logo-menu.svg.cjs.map +1 -0
- package/dist/src/svgs/j2-logo-menu.svg.js +6 -0
- package/dist/src/svgs/j2-logo-menu.svg.js.map +1 -0
- package/dist/src/svgs/menu-sidebar-collapse.svg.cjs +22 -0
- package/dist/src/svgs/menu-sidebar-collapse.svg.cjs.map +1 -0
- package/dist/src/svgs/menu-sidebar-collapse.svg.js +6 -0
- package/dist/src/svgs/menu-sidebar-collapse.svg.js.map +1 -0
- package/dist/src/svgs/menu-sidebar-expand.svg.cjs +22 -0
- package/dist/src/svgs/menu-sidebar-expand.svg.cjs.map +1 -0
- package/dist/src/svgs/menu-sidebar-expand.svg.js +6 -0
- package/dist/src/svgs/menu-sidebar-expand.svg.js.map +1 -0
- package/dist/style.css +646 -646
- package/package.json +6 -6
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { isMultiValueTextOperator, normalizeMultiValues, validateFormFilter } from "./filterHelpers.js";
|
|
3
|
+
const TypeToOperatorOptions = {
|
|
4
|
+
select: [
|
|
5
|
+
{ label: "is any of", value: "equals" },
|
|
6
|
+
{ label: "is not any of", value: "notEqual" },
|
|
7
|
+
{ label: "has no value", value: "blank" },
|
|
8
|
+
{ label: "has any value", value: "notBlank" }
|
|
9
|
+
],
|
|
10
|
+
number: [
|
|
11
|
+
{ label: "is", value: "equals" },
|
|
12
|
+
{ label: "is not", value: "notEqual" },
|
|
13
|
+
{ label: "is greater than", value: "greaterThan" },
|
|
14
|
+
{ label: "is greater than or equal to", value: "greaterThanOrEqual" },
|
|
15
|
+
{ label: "is less than", value: "lessThan" },
|
|
16
|
+
{ label: "is less than or equal to", value: "lessThanOrEqual" },
|
|
17
|
+
{ label: "has no value", value: "blank" },
|
|
18
|
+
{ label: "has any value", value: "notBlank" },
|
|
19
|
+
{ label: "is between", value: "inRange" }
|
|
20
|
+
],
|
|
21
|
+
text: [
|
|
22
|
+
{ label: "contains", value: "contains" },
|
|
23
|
+
{ label: "does not contain", value: "notContains" },
|
|
24
|
+
{ label: "starts with", value: "startsWith" },
|
|
25
|
+
{ label: "ends with", value: "endsWith" },
|
|
26
|
+
{ label: "has no value", value: "blank" },
|
|
27
|
+
{ label: "has any value", value: "notBlank" }
|
|
28
|
+
]
|
|
29
|
+
};
|
|
30
|
+
const MultiValueTextOperatorOptions = [
|
|
31
|
+
{ label: "is any of", value: "isAnyOf" },
|
|
32
|
+
{ label: "is not any of", value: "isNoneOf" }
|
|
33
|
+
];
|
|
34
|
+
const operatorOptionsFor = (config) => {
|
|
35
|
+
const defaults = TypeToOperatorOptions[config.type];
|
|
36
|
+
if (!config.operators) return defaults;
|
|
37
|
+
const known = config.type === "text" ? [...defaults, ...MultiValueTextOperatorOptions] : defaults;
|
|
38
|
+
return config.operators.flatMap((operator) => {
|
|
39
|
+
const option = known.find((candidate) => candidate.value === operator);
|
|
40
|
+
return option ? [option] : [];
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
const buildValueInputConfig = (config, operator) => {
|
|
44
|
+
if (config.type === "select") {
|
|
45
|
+
if (operator === "blank" || operator === "notBlank") return;
|
|
46
|
+
return {
|
|
47
|
+
type: "select",
|
|
48
|
+
valueOptions: config.options || []
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
if (config.type === "number") {
|
|
52
|
+
if (operator === "blank" || operator === "notBlank") return;
|
|
53
|
+
return {
|
|
54
|
+
type: "number",
|
|
55
|
+
inputCount: operator === "inRange" ? 2 : 1,
|
|
56
|
+
numberOptions: config.options
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (config.type === "text") {
|
|
60
|
+
if (operator === "blank" || operator === "notBlank") return;
|
|
61
|
+
return {
|
|
62
|
+
type: "text",
|
|
63
|
+
multiValue: isMultiValueTextOperator(operator),
|
|
64
|
+
maxValues: config.maxValues
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
const filterFieldReducer = (state, action) => {
|
|
69
|
+
var _a, _b, _c, _d, _e;
|
|
70
|
+
switch (action.type) {
|
|
71
|
+
case "setField": {
|
|
72
|
+
const config = state.filterConfigs.find(
|
|
73
|
+
(config2) => config2.field === action.payload
|
|
74
|
+
);
|
|
75
|
+
if (!config) return state;
|
|
76
|
+
const operatorOptions = operatorOptionsFor(config);
|
|
77
|
+
const newFilter = {
|
|
78
|
+
...state.filter,
|
|
79
|
+
type: config.type,
|
|
80
|
+
field: action.payload,
|
|
81
|
+
operator: (_a = operatorOptions[0]) == null ? void 0 : _a.value,
|
|
82
|
+
values: []
|
|
83
|
+
};
|
|
84
|
+
const pendingFilter = {
|
|
85
|
+
...newFilter,
|
|
86
|
+
errors: validateFormFilter(newFilter, config)
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
...state,
|
|
90
|
+
filter: pendingFilter,
|
|
91
|
+
config,
|
|
92
|
+
operatorOptions,
|
|
93
|
+
valueInputConfig: operatorOptions.length > 0 ? buildValueInputConfig(config, operatorOptions[0].value) : void 0
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
case "setOperator": {
|
|
97
|
+
if (!state.config) return state;
|
|
98
|
+
if (!action.payload) return state;
|
|
99
|
+
const pendingFilter = {
|
|
100
|
+
...state.filter,
|
|
101
|
+
operator: action.payload,
|
|
102
|
+
values: []
|
|
103
|
+
};
|
|
104
|
+
return {
|
|
105
|
+
...state,
|
|
106
|
+
filter: {
|
|
107
|
+
...pendingFilter,
|
|
108
|
+
errors: validateFormFilter(pendingFilter, state.config)
|
|
109
|
+
},
|
|
110
|
+
valueInputConfig: buildValueInputConfig(state.config, action.payload)
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
case "setValues": {
|
|
114
|
+
if (!state.filter) return state;
|
|
115
|
+
const values = state.filter.type === "number" ? action.payload.map((value) => Number(value)) : isMultiValueTextOperator(state.filter.operator) ? (
|
|
116
|
+
// Normalized on the way into state, not just for display —
|
|
117
|
+
// validation counts and `onSubmit` emit exactly these chips.
|
|
118
|
+
normalizeMultiValues(action.payload)
|
|
119
|
+
) : action.payload.filter(
|
|
120
|
+
(value) => value !== null && value !== void 0
|
|
121
|
+
);
|
|
122
|
+
const pendingFilter = {
|
|
123
|
+
...state.filter,
|
|
124
|
+
values
|
|
125
|
+
};
|
|
126
|
+
pendingFilter.errors = validateFormFilter(pendingFilter, state.config);
|
|
127
|
+
return {
|
|
128
|
+
...state,
|
|
129
|
+
filter: pendingFilter
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
case "initialize": {
|
|
133
|
+
const field = ((_b = state.filter) == null ? void 0 : _b.field) || ((_c = state.filterConfigs.find((config2) => !config2.disabled)) == null ? void 0 : _c.field);
|
|
134
|
+
const config = state.filterConfigs.find(
|
|
135
|
+
(config2) => config2.field === field
|
|
136
|
+
);
|
|
137
|
+
if (!config) return state;
|
|
138
|
+
const operatorOptions = operatorOptionsFor(config);
|
|
139
|
+
const persisted = (_d = state.filter) == null ? void 0 : _d.operator;
|
|
140
|
+
const persistedAllowed = persisted !== void 0 && operatorOptions.some((option) => option.value === persisted);
|
|
141
|
+
const operator = persistedAllowed ? persisted : (_e = operatorOptions[0]) == null ? void 0 : _e.value;
|
|
142
|
+
let filter;
|
|
143
|
+
if (!state.filter) {
|
|
144
|
+
filter = {
|
|
145
|
+
field,
|
|
146
|
+
type: config.type,
|
|
147
|
+
operator,
|
|
148
|
+
values: []
|
|
149
|
+
};
|
|
150
|
+
} else if (!persistedAllowed) {
|
|
151
|
+
filter = { ...state.filter, operator, values: [] };
|
|
152
|
+
} else if (isMultiValueTextOperator(operator)) {
|
|
153
|
+
filter = {
|
|
154
|
+
...state.filter,
|
|
155
|
+
values: normalizeMultiValues(state.filter.values)
|
|
156
|
+
};
|
|
157
|
+
} else {
|
|
158
|
+
filter = { ...state.filter };
|
|
159
|
+
}
|
|
160
|
+
filter.errors = validateFormFilter(filter, config);
|
|
161
|
+
return {
|
|
162
|
+
...state,
|
|
163
|
+
config,
|
|
164
|
+
filter,
|
|
165
|
+
operatorOptions,
|
|
166
|
+
valueInputConfig: operatorOptions.length > 0 ? buildValueInputConfig(config, operator) : void 0
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
default:
|
|
170
|
+
return state;
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
const useFilterField = ({
|
|
174
|
+
filterConfigs,
|
|
175
|
+
filter: initialFilter
|
|
176
|
+
}) => {
|
|
177
|
+
const [{ filter, config, operatorOptions, valueInputConfig }, dispatch] = React.useReducer(
|
|
178
|
+
filterFieldReducer,
|
|
179
|
+
{
|
|
180
|
+
filter: initialFilter,
|
|
181
|
+
filterConfigs,
|
|
182
|
+
config: void 0,
|
|
183
|
+
operatorOptions: [],
|
|
184
|
+
valueInputConfig: void 0
|
|
185
|
+
},
|
|
186
|
+
(state) => {
|
|
187
|
+
return filterFieldReducer(state, {
|
|
188
|
+
type: "initialize",
|
|
189
|
+
payload: void 0
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
);
|
|
193
|
+
const handleFieldChange = (value) => {
|
|
194
|
+
dispatch({
|
|
195
|
+
type: "setField",
|
|
196
|
+
payload: value
|
|
197
|
+
});
|
|
198
|
+
};
|
|
199
|
+
const handleOperatorChange = (value) => {
|
|
200
|
+
dispatch({
|
|
201
|
+
type: "setOperator",
|
|
202
|
+
payload: value
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
const handleValuesChange = (value) => {
|
|
206
|
+
dispatch({
|
|
207
|
+
type: "setValues",
|
|
208
|
+
payload: value
|
|
209
|
+
});
|
|
210
|
+
};
|
|
211
|
+
return {
|
|
212
|
+
filter,
|
|
213
|
+
config,
|
|
214
|
+
operatorOptions,
|
|
215
|
+
valueInputConfig,
|
|
216
|
+
handleFieldChange,
|
|
217
|
+
handleOperatorChange,
|
|
218
|
+
handleValuesChange
|
|
219
|
+
};
|
|
220
|
+
};
|
|
221
|
+
export {
|
|
222
|
+
MultiValueTextOperatorOptions,
|
|
223
|
+
TypeToOperatorOptions,
|
|
224
|
+
isMultiValueTextOperator,
|
|
225
|
+
operatorOptionsFor,
|
|
226
|
+
useFilterField
|
|
227
|
+
};
|
|
228
|
+
//# sourceMappingURL=useFilterField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFilterField.js","sources":["../../../../src/components/filterform/useFilterField.tsx"],"sourcesContent":["import * as React from 'react'\nimport {\n FilterConfig,\n FilterType,\n FormFilter,\n NumberOptionsType,\n Operator,\n SelectOptionsType,\n} from './types'\nimport {\n isMultiValueTextOperator,\n normalizeMultiValues,\n validateFormFilter,\n} from './filterHelpers'\nexport { isMultiValueTextOperator } from './filterHelpers'\nexport type UseFilterFieldInputs = {\n filterConfigs: FilterConfig[]\n filter?: FormFilter\n}\n\ntype UseFilterFieldOutputs = {\n filter: FormFilter | undefined\n config: FilterConfig | undefined\n operatorOptions: { label: string; value: string }[]\n valueInputConfig: ValueInputConfig | undefined\n handleFieldChange: (value: string) => void\n handleOperatorChange: (value: string) => void\n handleValuesChange: (value: (string | number | undefined | null)[]) => void\n}\n\nexport const TypeToOperatorOptions: Record<\n FilterType,\n { label: string; value: Operator }[]\n> = {\n select: [\n { label: 'is any of', value: 'equals' },\n { label: 'is not any of', value: 'notEqual' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n ],\n number: [\n { label: 'is', value: 'equals' },\n { label: 'is not', value: 'notEqual' },\n { label: 'is greater than', value: 'greaterThan' },\n { label: 'is greater than or equal to', value: 'greaterThanOrEqual' },\n { label: 'is less than', value: 'lessThan' },\n { label: 'is less than or equal to', value: 'lessThanOrEqual' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n { label: 'is between', value: 'inRange' },\n ],\n text: [\n { label: 'contains', value: 'contains' },\n { label: 'does not contain', value: 'notContains' },\n { label: 'starts with', value: 'startsWith' },\n { label: 'ends with', value: 'endsWith' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n ],\n}\n\n// Multi-value exact-match operators for text fields. Deliberately NOT part of\n// `TypeToOperatorOptions.text`: a field only offers them when its\n// `FilterConfig.operators` lists them, so every existing consumer keeps the\n// operator list it has today (see the `operators` doc in types.ts).\nexport const MultiValueTextOperatorOptions: {\n label: string\n value: Operator\n}[] = [\n { label: 'is any of', value: 'isAnyOf' },\n { label: 'is not any of', value: 'isNoneOf' },\n]\n\n/**\n * Operator options a field offers: its type's default list unless the config\n * names its own (`operators`), in which case that list — in the given order,\n * dropping anything the type can't express. `operators` may therefore both\n * narrow the defaults and add the opt-in multi-value text operators.\n */\nexport const operatorOptionsFor = (\n config: FilterConfig\n): { label: string; value: Operator }[] => {\n const defaults = TypeToOperatorOptions[config.type]\n if (!config.operators) return defaults\n const known =\n config.type === 'text'\n ? [...defaults, ...MultiValueTextOperatorOptions]\n : defaults\n return config.operators.flatMap((operator) => {\n const option = known.find((candidate) => candidate.value === operator)\n return option ? [option] : []\n })\n}\n\ntype SelectValueInputConfig = {\n type: 'select'\n valueOptions: { label: string; value: string }[]\n}\n\ntype NumberValueInputConfig = {\n type: 'number'\n inputCount: number\n numberOptions?: { max: number; min: number; step: number }\n}\n\ntype TextValueInputConfig = {\n type: 'text'\n // True for `isAnyOf` / `isNoneOf`: the value input is a chips list rather\n // than a single text box. `maxValues` is the config's cap, if any.\n multiValue?: boolean\n maxValues?: number\n}\n\nexport type ValueInputConfig =\n SelectValueInputConfig | NumberValueInputConfig | TextValueInputConfig\n\ntype FilterFieldState = {\n filter: FormFilter | undefined\n filterConfigs: FilterConfig[]\n config: FilterConfig | undefined\n operatorOptions: { label: string; value: string }[]\n valueInputConfig: ValueInputConfig | undefined\n}\n\ntype Action = {\n type: 'setField' | 'setOperator' | 'initialize'\n payload: string | undefined\n}\ntype SetValuesAction = {\n type: 'setValues'\n payload: (string | number | undefined | null)[]\n}\n\nconst buildValueInputConfig = (\n config: FilterConfig,\n operator: string\n): ValueInputConfig | undefined => {\n if (config.type === 'select') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'select',\n valueOptions: (config.options as SelectOptionsType) || [],\n }\n }\n\n if (config.type === 'number') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'number',\n inputCount: operator === 'inRange' ? 2 : 1,\n numberOptions: config.options as NumberOptionsType,\n }\n }\n\n if (config.type === 'text') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'text',\n multiValue: isMultiValueTextOperator(operator),\n maxValues: config.maxValues,\n }\n }\n}\n\nconst filterFieldReducer = (\n state: FilterFieldState,\n action: Action | SetValuesAction\n) => {\n switch (action.type) {\n case 'setField': {\n const config = state.filterConfigs.find(\n (config) => config.field === action.payload\n )\n\n if (!config) return state\n\n const operatorOptions = operatorOptionsFor(config)\n\n const newFilter = {\n ...state.filter,\n type: config.type,\n field: action.payload,\n operator: operatorOptions[0]?.value,\n values: [],\n } as FormFilter\n\n const pendingFilter = {\n ...newFilter,\n errors: validateFormFilter(newFilter, config),\n }\n\n return {\n ...state,\n filter: pendingFilter,\n config,\n operatorOptions,\n valueInputConfig:\n operatorOptions.length > 0\n ? buildValueInputConfig(config, operatorOptions[0].value)\n : undefined,\n }\n }\n case 'setOperator': {\n if (!state.config) return state\n if (!action.payload) return state\n\n const pendingFilter = {\n ...state.filter,\n operator: action.payload,\n values: [],\n } as FormFilter\n\n return {\n ...state,\n filter: {\n ...pendingFilter,\n errors: validateFormFilter(pendingFilter, state.config),\n },\n valueInputConfig: buildValueInputConfig(state.config, action.payload),\n }\n }\n case 'setValues': {\n if (!state.filter) return state\n\n const values =\n state.filter.type === 'number'\n ? action.payload.map((value) => Number(value))\n : isMultiValueTextOperator(state.filter.operator)\n ? // Normalized on the way into state, not just for display —\n // validation counts and `onSubmit` emit exactly these chips.\n normalizeMultiValues(action.payload)\n : (action.payload.filter(\n (value) => value !== null && value !== undefined\n ) as string[])\n\n const pendingFilter = {\n ...state.filter,\n values: values,\n }\n\n pendingFilter.errors = validateFormFilter(pendingFilter, state.config)\n\n return {\n ...state,\n filter: pendingFilter,\n }\n }\n case 'initialize': {\n const field =\n state.filter?.field ||\n state.filterConfigs.find((config) => !config.disabled)?.field\n const config = state.filterConfigs.find(\n (config) => config.field === field\n )\n\n if (!config) return state\n\n const operatorOptions = operatorOptionsFor(config)\n\n // A persisted filter's operator must still be one this field offers.\n // Configs change between sessions (a field narrowed to `contains`, or\n // one that never opted into the multi-value operators), and the\n // backend may not understand a stale operator — so it falls back to\n // the field's first operator with its values cleared, rather than\n // re-submitting something the config no longer allows.\n const persisted = state.filter?.operator\n const persistedAllowed =\n persisted !== undefined &&\n operatorOptions.some((option) => option.value === persisted)\n const operator = persistedAllowed ? persisted : operatorOptions[0]?.value\n\n let filter: FormFilter\n if (!state.filter) {\n filter = {\n field,\n type: config.type,\n operator,\n values: [],\n } as FormFilter\n } else if (!persistedAllowed) {\n filter = { ...state.filter, operator, values: [] } as FormFilter\n } else if (isMultiValueTextOperator(operator)) {\n // Same normalization as `setValues`, so a persisted chip list that\n // predates it (or was hand-edited) can't show one chip and count two.\n filter = {\n ...state.filter,\n values: normalizeMultiValues(state.filter.values),\n }\n } else {\n // A copy: the incoming object is the caller's, and writing `errors`\n // onto it would hide the correction from `FilterInput`'s comparison\n // of what it was given against what it initialized to.\n filter = { ...state.filter }\n }\n\n filter.errors = validateFormFilter(filter, config)\n\n return {\n ...state,\n config,\n filter,\n operatorOptions,\n valueInputConfig:\n operatorOptions.length > 0\n ? buildValueInputConfig(config, operator)\n : undefined,\n }\n }\n default:\n return state\n }\n}\n\nexport const useFilterField = ({\n filterConfigs,\n filter: initialFilter,\n}: UseFilterFieldInputs): UseFilterFieldOutputs => {\n const [{ filter, config, operatorOptions, valueInputConfig }, dispatch] =\n React.useReducer(\n filterFieldReducer,\n {\n filter: initialFilter,\n filterConfigs,\n config: undefined,\n operatorOptions: [],\n valueInputConfig: undefined,\n },\n (state) => {\n return filterFieldReducer(state, {\n type: 'initialize',\n payload: undefined,\n })\n }\n )\n\n const handleFieldChange = (value: string) => {\n dispatch({\n type: 'setField',\n payload: value,\n })\n }\n\n const handleOperatorChange = (value: string) => {\n dispatch({\n type: 'setOperator',\n payload: value,\n })\n }\n\n const handleValuesChange = (\n value: (string | number | undefined | null)[]\n ) => {\n dispatch({\n type: 'setValues',\n payload: value,\n })\n }\n\n return {\n filter,\n config,\n operatorOptions,\n valueInputConfig,\n handleFieldChange,\n handleOperatorChange,\n handleValuesChange,\n }\n}\n"],"names":["config"],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const cloneDeep = require("lodash/cloneDeep.js");
|
|
5
|
+
const filterHelpers = require("./filterHelpers.cjs");
|
|
6
|
+
const copyFilterGroups = (filterGroups) => {
|
|
7
|
+
return cloneDeep(filterGroups);
|
|
8
|
+
};
|
|
9
|
+
const addFilter = (filter, filterGroups) => {
|
|
10
|
+
const copy = copyFilterGroups(filterGroups);
|
|
11
|
+
const filterGroupIndex = copy.findIndex(
|
|
12
|
+
(filterGroup) => filterGroup.field === filter.field
|
|
13
|
+
);
|
|
14
|
+
if (filterGroupIndex === -1) {
|
|
15
|
+
copy.push({ field: filter.field, filters: [filter] });
|
|
16
|
+
} else {
|
|
17
|
+
copy[filterGroupIndex].filters.push(filter);
|
|
18
|
+
}
|
|
19
|
+
return copy;
|
|
20
|
+
};
|
|
21
|
+
const removeFilter = (groupIndex, filterIndex, filterGroups) => {
|
|
22
|
+
const copy = copyFilterGroups(filterGroups);
|
|
23
|
+
copy[groupIndex].filters.splice(filterIndex, 1);
|
|
24
|
+
return copy.filter((group) => group.filters.length > 0);
|
|
25
|
+
};
|
|
26
|
+
const filterFormReducer = (state, action) => {
|
|
27
|
+
var _a;
|
|
28
|
+
switch (action.type) {
|
|
29
|
+
case "initialize": {
|
|
30
|
+
const filterGroups = (_a = action.payload) == null ? void 0 : _a.filters.reduce(
|
|
31
|
+
(acc, filter) => {
|
|
32
|
+
return addFilter(filter, acc);
|
|
33
|
+
},
|
|
34
|
+
[...state.filterGroups]
|
|
35
|
+
);
|
|
36
|
+
return {
|
|
37
|
+
...state,
|
|
38
|
+
filterGroups: filterGroups ?? [],
|
|
39
|
+
isNewFilterInputOpen: !(filterGroups == null ? void 0 : filterGroups.length)
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
case "openNewFilterInput": {
|
|
43
|
+
return {
|
|
44
|
+
...state,
|
|
45
|
+
isNewFilterInputOpen: true
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
case "addNewFilter": {
|
|
49
|
+
if (action.payload.errors && action.payload.errors.length > 0) {
|
|
50
|
+
return state;
|
|
51
|
+
}
|
|
52
|
+
const filterGroups = addFilter(action.payload, state.filterGroups);
|
|
53
|
+
return {
|
|
54
|
+
...state,
|
|
55
|
+
filterGroups,
|
|
56
|
+
newFilter: void 0,
|
|
57
|
+
isNewFilterInputOpen: false
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
case "changeNewFilter": {
|
|
61
|
+
return {
|
|
62
|
+
...state,
|
|
63
|
+
newFilter: action.payload
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
case "removeNewFilter": {
|
|
67
|
+
const allFiltersRemoved = state.filterGroups.every(
|
|
68
|
+
(group) => group.filters.length === 0
|
|
69
|
+
);
|
|
70
|
+
return {
|
|
71
|
+
...state,
|
|
72
|
+
newFilter: void 0,
|
|
73
|
+
isNewFilterInputOpen: allFiltersRemoved
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
case "updateFilter": {
|
|
77
|
+
const { groupIndex, filterIndex, filter } = action.payload;
|
|
78
|
+
let filterGroups = copyFilterGroups(state.filterGroups);
|
|
79
|
+
const groupField = filterGroups[groupIndex].field;
|
|
80
|
+
if (groupField === filter.field) {
|
|
81
|
+
filterGroups[groupIndex].filters[filterIndex] = filter;
|
|
82
|
+
} else {
|
|
83
|
+
filterGroups = removeFilter(groupIndex, filterIndex, filterGroups);
|
|
84
|
+
filterGroups = addFilter(filter, filterGroups);
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
...state,
|
|
88
|
+
filterGroups
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
case "changeFilter": {
|
|
92
|
+
const { groupIndex, filterIndex, filter } = action.payload;
|
|
93
|
+
const filterGroups = copyFilterGroups(state.filterGroups);
|
|
94
|
+
const group = filterGroups[groupIndex];
|
|
95
|
+
if (group) {
|
|
96
|
+
group.filters[filterIndex] = filter;
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
...state,
|
|
100
|
+
filterGroups
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
case "removeFilter": {
|
|
104
|
+
const { groupIndex, filterIndex } = action.payload;
|
|
105
|
+
const filterGroups = removeFilter(
|
|
106
|
+
groupIndex,
|
|
107
|
+
filterIndex,
|
|
108
|
+
state.filterGroups
|
|
109
|
+
);
|
|
110
|
+
return {
|
|
111
|
+
...state,
|
|
112
|
+
filterGroups,
|
|
113
|
+
isNewFilterInputOpen: state.isNewFilterInputOpen || filterGroups.length === 0
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
case "clearAllFilters": {
|
|
117
|
+
return {
|
|
118
|
+
...state,
|
|
119
|
+
filterGroups: [],
|
|
120
|
+
isNewFilterInputOpen: true
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
default:
|
|
124
|
+
return state;
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
const useFiltersForm = ({
|
|
128
|
+
initialValues
|
|
129
|
+
}) => {
|
|
130
|
+
const [{ filterGroups, newFilter, isNewFilterInputOpen }, dispatch] = React.useReducer(
|
|
131
|
+
filterFormReducer,
|
|
132
|
+
{
|
|
133
|
+
filterGroups: [],
|
|
134
|
+
newFilter: void 0,
|
|
135
|
+
isNewFilterInputOpen: true
|
|
136
|
+
},
|
|
137
|
+
(state) => {
|
|
138
|
+
return filterFormReducer(state, {
|
|
139
|
+
type: "initialize",
|
|
140
|
+
payload: initialValues
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
const isValid = (filterGroups.length === 0 || filterGroups.every(
|
|
145
|
+
(group) => group.filters.every(
|
|
146
|
+
(filter) => filter.errors && filter.errors.length === 0
|
|
147
|
+
)
|
|
148
|
+
)) && ((newFilter == null ? void 0 : newFilter.errors) ? newFilter.errors.length === 0 : true);
|
|
149
|
+
const isEmpty = filterGroups.length === 0 && (newFilter ? filterHelpers.isEmptyFormFilter(newFilter) : true);
|
|
150
|
+
return {
|
|
151
|
+
dispatch,
|
|
152
|
+
filterGroups,
|
|
153
|
+
newFilter,
|
|
154
|
+
isNewFilterInputOpen,
|
|
155
|
+
isValid,
|
|
156
|
+
isEmpty
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
exports.useFiltersForm = useFiltersForm;
|
|
160
|
+
//# sourceMappingURL=useFiltersForm.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFiltersForm.cjs","sources":["../../../../src/components/filterform/useFiltersForm.ts"],"sourcesContent":["import { useReducer } from 'react'\nimport { FilterForm, FilterGroup, FormFilter } from './types'\n// Deep import, not `import { cloneDeep } from 'lodash'`: lodash is CommonJS\n// and Node cannot statically detect its named exports, so the bundled\n// package throws \"Named export 'cloneDeep' not found\" when a consumer\n// loads it through native Node ESM (SSR, or vitest without a bundler).\nimport cloneDeep from 'lodash/cloneDeep.js'\nimport { isEmptyFormFilter } from './filterHelpers'\n\ntype UseFiltersFormInput = {\n initialValues?: FilterForm\n}\n\ntype UseFiltersFormOutput = {\n dispatch: (action: Action) => void\n filterGroups: FilterGroup[]\n newFilter: FormFilter | undefined\n isNewFilterInputOpen: boolean\n isValid: boolean\n isEmpty: boolean\n}\n\ntype FilterFormState = {\n filterGroups: FilterGroup[]\n newFilter: FormFilter | undefined\n isNewFilterInputOpen: boolean\n}\n\ntype InitializeAction = {\n type: 'initialize'\n payload: FilterForm | undefined\n}\n\ntype OpenNewFilterInputAction = {\n type: 'openNewFilterInput'\n}\n\ntype AddNewFilterAction = {\n type: 'addNewFilter'\n payload: FormFilter\n}\n\ntype ChangeNewFilterAction = {\n type: 'changeNewFilter'\n payload: FormFilter\n}\n\ntype RemoveNewFilterAction = {\n type: 'removeNewFilter'\n}\n\ntype ClearAllFiltersAction = {\n type: 'clearAllFilters'\n}\n\ntype UpdateFilterAction = {\n type: 'updateFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n filter: FormFilter\n }\n}\n\ntype ChangeFilterAction = {\n type: 'changeFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n filter: FormFilter\n }\n}\n\ntype RemoveFilterAction = {\n type: 'removeFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n }\n}\n\ntype Action =\n | AddNewFilterAction\n | UpdateFilterAction\n | ClearAllFiltersAction\n | ChangeNewFilterAction\n | OpenNewFilterInputAction\n | ChangeFilterAction\n | RemoveFilterAction\n | InitializeAction\n | RemoveNewFilterAction\n\nconst copyFilterGroups = (filterGroups: FilterGroup[]): FilterGroup[] => {\n return cloneDeep(filterGroups)\n}\n\nconst addFilter = (\n filter: FormFilter,\n filterGroups: FilterGroup[]\n): FilterGroup[] => {\n const copy = copyFilterGroups(filterGroups)\n const filterGroupIndex = copy.findIndex(\n (filterGroup) => filterGroup.field === filter.field\n )\n\n if (filterGroupIndex === -1) {\n copy.push({ field: filter.field, filters: [filter] })\n } else {\n copy[filterGroupIndex].filters.push(filter)\n }\n\n return copy\n}\n\nconst removeFilter = (\n groupIndex: number,\n filterIndex: number,\n filterGroups: FilterGroup[]\n): FilterGroup[] => {\n const copy = copyFilterGroups(filterGroups)\n copy[groupIndex].filters.splice(filterIndex, 1)\n\n return copy.filter((group) => group.filters.length > 0)\n}\n\nconst filterFormReducer = (state: FilterFormState, action: Action) => {\n switch (action.type) {\n case 'initialize': {\n const filterGroups = action.payload?.filters.reduce(\n (acc, filter) => {\n return addFilter(filter, acc)\n },\n [...state.filterGroups]\n )\n\n return {\n ...state,\n filterGroups: filterGroups ?? [],\n isNewFilterInputOpen: !filterGroups?.length,\n }\n }\n case 'openNewFilterInput': {\n return {\n ...state,\n isNewFilterInputOpen: true,\n }\n }\n case 'addNewFilter': {\n if (action.payload.errors && action.payload.errors.length > 0) {\n return state\n }\n\n const filterGroups = addFilter(action.payload, state.filterGroups)\n\n return {\n ...state,\n filterGroups,\n newFilter: undefined,\n isNewFilterInputOpen: false,\n }\n }\n case 'changeNewFilter': {\n return {\n ...state,\n newFilter: action.payload,\n }\n }\n case 'removeNewFilter': {\n const allFiltersRemoved = state.filterGroups.every(\n (group) => group.filters.length === 0\n )\n return {\n ...state,\n newFilter: undefined,\n isNewFilterInputOpen: allFiltersRemoved,\n }\n }\n case 'updateFilter': {\n const { groupIndex, filterIndex, filter } = action.payload\n let filterGroups = copyFilterGroups(state.filterGroups)\n const groupField = filterGroups[groupIndex].field\n\n if (groupField === filter.field) {\n filterGroups[groupIndex].filters[filterIndex] = filter\n } else {\n filterGroups = removeFilter(groupIndex, filterIndex, filterGroups)\n filterGroups = addFilter(filter, filterGroups)\n }\n\n return {\n ...state,\n filterGroups,\n }\n }\n case 'changeFilter': {\n const { groupIndex, filterIndex, filter } = action.payload\n const filterGroups = copyFilterGroups(state.filterGroups)\n const group = filterGroups[groupIndex]\n if (group) {\n group.filters[filterIndex] = filter\n }\n\n return {\n ...state,\n filterGroups,\n }\n }\n case 'removeFilter': {\n const { groupIndex, filterIndex } = action.payload\n\n const filterGroups = removeFilter(\n groupIndex,\n filterIndex,\n state.filterGroups\n )\n\n return {\n ...state,\n filterGroups,\n isNewFilterInputOpen:\n state.isNewFilterInputOpen || filterGroups.length === 0,\n }\n }\n case 'clearAllFilters': {\n return {\n ...state,\n filterGroups: [],\n isNewFilterInputOpen: true,\n }\n }\n default:\n return state\n }\n}\n\nexport const useFiltersForm = ({\n initialValues,\n}: UseFiltersFormInput): UseFiltersFormOutput => {\n const [{ filterGroups, newFilter, isNewFilterInputOpen }, dispatch] =\n useReducer(\n filterFormReducer,\n {\n filterGroups: [],\n newFilter: undefined,\n isNewFilterInputOpen: true,\n },\n (state) => {\n return filterFormReducer(state, {\n type: 'initialize',\n payload: initialValues,\n })\n }\n )\n\n const isValid =\n (filterGroups.length === 0 ||\n filterGroups.every((group) =>\n group.filters.every(\n (filter) => filter.errors && filter.errors.length === 0\n )\n )) &&\n (newFilter?.errors ? newFilter.errors.length === 0 : true)\n\n const isEmpty =\n filterGroups.length === 0 &&\n (newFilter ? isEmptyFormFilter(newFilter) : true)\n\n return {\n dispatch,\n filterGroups,\n newFilter,\n isNewFilterInputOpen,\n isValid,\n isEmpty,\n }\n}\n"],"names":["useReducer","isEmptyFormFilter"],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { useReducer } from "react";
|
|
2
|
+
import cloneDeep from "lodash/cloneDeep.js";
|
|
3
|
+
import { isEmptyFormFilter } from "./filterHelpers.js";
|
|
4
|
+
const copyFilterGroups = (filterGroups) => {
|
|
5
|
+
return cloneDeep(filterGroups);
|
|
6
|
+
};
|
|
7
|
+
const addFilter = (filter, filterGroups) => {
|
|
8
|
+
const copy = copyFilterGroups(filterGroups);
|
|
9
|
+
const filterGroupIndex = copy.findIndex(
|
|
10
|
+
(filterGroup) => filterGroup.field === filter.field
|
|
11
|
+
);
|
|
12
|
+
if (filterGroupIndex === -1) {
|
|
13
|
+
copy.push({ field: filter.field, filters: [filter] });
|
|
14
|
+
} else {
|
|
15
|
+
copy[filterGroupIndex].filters.push(filter);
|
|
16
|
+
}
|
|
17
|
+
return copy;
|
|
18
|
+
};
|
|
19
|
+
const removeFilter = (groupIndex, filterIndex, filterGroups) => {
|
|
20
|
+
const copy = copyFilterGroups(filterGroups);
|
|
21
|
+
copy[groupIndex].filters.splice(filterIndex, 1);
|
|
22
|
+
return copy.filter((group) => group.filters.length > 0);
|
|
23
|
+
};
|
|
24
|
+
const filterFormReducer = (state, action) => {
|
|
25
|
+
var _a;
|
|
26
|
+
switch (action.type) {
|
|
27
|
+
case "initialize": {
|
|
28
|
+
const filterGroups = (_a = action.payload) == null ? void 0 : _a.filters.reduce(
|
|
29
|
+
(acc, filter) => {
|
|
30
|
+
return addFilter(filter, acc);
|
|
31
|
+
},
|
|
32
|
+
[...state.filterGroups]
|
|
33
|
+
);
|
|
34
|
+
return {
|
|
35
|
+
...state,
|
|
36
|
+
filterGroups: filterGroups ?? [],
|
|
37
|
+
isNewFilterInputOpen: !(filterGroups == null ? void 0 : filterGroups.length)
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
case "openNewFilterInput": {
|
|
41
|
+
return {
|
|
42
|
+
...state,
|
|
43
|
+
isNewFilterInputOpen: true
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
case "addNewFilter": {
|
|
47
|
+
if (action.payload.errors && action.payload.errors.length > 0) {
|
|
48
|
+
return state;
|
|
49
|
+
}
|
|
50
|
+
const filterGroups = addFilter(action.payload, state.filterGroups);
|
|
51
|
+
return {
|
|
52
|
+
...state,
|
|
53
|
+
filterGroups,
|
|
54
|
+
newFilter: void 0,
|
|
55
|
+
isNewFilterInputOpen: false
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
case "changeNewFilter": {
|
|
59
|
+
return {
|
|
60
|
+
...state,
|
|
61
|
+
newFilter: action.payload
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
case "removeNewFilter": {
|
|
65
|
+
const allFiltersRemoved = state.filterGroups.every(
|
|
66
|
+
(group) => group.filters.length === 0
|
|
67
|
+
);
|
|
68
|
+
return {
|
|
69
|
+
...state,
|
|
70
|
+
newFilter: void 0,
|
|
71
|
+
isNewFilterInputOpen: allFiltersRemoved
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
case "updateFilter": {
|
|
75
|
+
const { groupIndex, filterIndex, filter } = action.payload;
|
|
76
|
+
let filterGroups = copyFilterGroups(state.filterGroups);
|
|
77
|
+
const groupField = filterGroups[groupIndex].field;
|
|
78
|
+
if (groupField === filter.field) {
|
|
79
|
+
filterGroups[groupIndex].filters[filterIndex] = filter;
|
|
80
|
+
} else {
|
|
81
|
+
filterGroups = removeFilter(groupIndex, filterIndex, filterGroups);
|
|
82
|
+
filterGroups = addFilter(filter, filterGroups);
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
...state,
|
|
86
|
+
filterGroups
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
case "changeFilter": {
|
|
90
|
+
const { groupIndex, filterIndex, filter } = action.payload;
|
|
91
|
+
const filterGroups = copyFilterGroups(state.filterGroups);
|
|
92
|
+
const group = filterGroups[groupIndex];
|
|
93
|
+
if (group) {
|
|
94
|
+
group.filters[filterIndex] = filter;
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
...state,
|
|
98
|
+
filterGroups
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
case "removeFilter": {
|
|
102
|
+
const { groupIndex, filterIndex } = action.payload;
|
|
103
|
+
const filterGroups = removeFilter(
|
|
104
|
+
groupIndex,
|
|
105
|
+
filterIndex,
|
|
106
|
+
state.filterGroups
|
|
107
|
+
);
|
|
108
|
+
return {
|
|
109
|
+
...state,
|
|
110
|
+
filterGroups,
|
|
111
|
+
isNewFilterInputOpen: state.isNewFilterInputOpen || filterGroups.length === 0
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
case "clearAllFilters": {
|
|
115
|
+
return {
|
|
116
|
+
...state,
|
|
117
|
+
filterGroups: [],
|
|
118
|
+
isNewFilterInputOpen: true
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
default:
|
|
122
|
+
return state;
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
const useFiltersForm = ({
|
|
126
|
+
initialValues
|
|
127
|
+
}) => {
|
|
128
|
+
const [{ filterGroups, newFilter, isNewFilterInputOpen }, dispatch] = useReducer(
|
|
129
|
+
filterFormReducer,
|
|
130
|
+
{
|
|
131
|
+
filterGroups: [],
|
|
132
|
+
newFilter: void 0,
|
|
133
|
+
isNewFilterInputOpen: true
|
|
134
|
+
},
|
|
135
|
+
(state) => {
|
|
136
|
+
return filterFormReducer(state, {
|
|
137
|
+
type: "initialize",
|
|
138
|
+
payload: initialValues
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
);
|
|
142
|
+
const isValid = (filterGroups.length === 0 || filterGroups.every(
|
|
143
|
+
(group) => group.filters.every(
|
|
144
|
+
(filter) => filter.errors && filter.errors.length === 0
|
|
145
|
+
)
|
|
146
|
+
)) && ((newFilter == null ? void 0 : newFilter.errors) ? newFilter.errors.length === 0 : true);
|
|
147
|
+
const isEmpty = filterGroups.length === 0 && (newFilter ? isEmptyFormFilter(newFilter) : true);
|
|
148
|
+
return {
|
|
149
|
+
dispatch,
|
|
150
|
+
filterGroups,
|
|
151
|
+
newFilter,
|
|
152
|
+
isNewFilterInputOpen,
|
|
153
|
+
isValid,
|
|
154
|
+
isEmpty
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
export {
|
|
158
|
+
useFiltersForm
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=useFiltersForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFiltersForm.js","sources":["../../../../src/components/filterform/useFiltersForm.ts"],"sourcesContent":["import { useReducer } from 'react'\nimport { FilterForm, FilterGroup, FormFilter } from './types'\n// Deep import, not `import { cloneDeep } from 'lodash'`: lodash is CommonJS\n// and Node cannot statically detect its named exports, so the bundled\n// package throws \"Named export 'cloneDeep' not found\" when a consumer\n// loads it through native Node ESM (SSR, or vitest without a bundler).\nimport cloneDeep from 'lodash/cloneDeep.js'\nimport { isEmptyFormFilter } from './filterHelpers'\n\ntype UseFiltersFormInput = {\n initialValues?: FilterForm\n}\n\ntype UseFiltersFormOutput = {\n dispatch: (action: Action) => void\n filterGroups: FilterGroup[]\n newFilter: FormFilter | undefined\n isNewFilterInputOpen: boolean\n isValid: boolean\n isEmpty: boolean\n}\n\ntype FilterFormState = {\n filterGroups: FilterGroup[]\n newFilter: FormFilter | undefined\n isNewFilterInputOpen: boolean\n}\n\ntype InitializeAction = {\n type: 'initialize'\n payload: FilterForm | undefined\n}\n\ntype OpenNewFilterInputAction = {\n type: 'openNewFilterInput'\n}\n\ntype AddNewFilterAction = {\n type: 'addNewFilter'\n payload: FormFilter\n}\n\ntype ChangeNewFilterAction = {\n type: 'changeNewFilter'\n payload: FormFilter\n}\n\ntype RemoveNewFilterAction = {\n type: 'removeNewFilter'\n}\n\ntype ClearAllFiltersAction = {\n type: 'clearAllFilters'\n}\n\ntype UpdateFilterAction = {\n type: 'updateFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n filter: FormFilter\n }\n}\n\ntype ChangeFilterAction = {\n type: 'changeFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n filter: FormFilter\n }\n}\n\ntype RemoveFilterAction = {\n type: 'removeFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n }\n}\n\ntype Action =\n | AddNewFilterAction\n | UpdateFilterAction\n | ClearAllFiltersAction\n | ChangeNewFilterAction\n | OpenNewFilterInputAction\n | ChangeFilterAction\n | RemoveFilterAction\n | InitializeAction\n | RemoveNewFilterAction\n\nconst copyFilterGroups = (filterGroups: FilterGroup[]): FilterGroup[] => {\n return cloneDeep(filterGroups)\n}\n\nconst addFilter = (\n filter: FormFilter,\n filterGroups: FilterGroup[]\n): FilterGroup[] => {\n const copy = copyFilterGroups(filterGroups)\n const filterGroupIndex = copy.findIndex(\n (filterGroup) => filterGroup.field === filter.field\n )\n\n if (filterGroupIndex === -1) {\n copy.push({ field: filter.field, filters: [filter] })\n } else {\n copy[filterGroupIndex].filters.push(filter)\n }\n\n return copy\n}\n\nconst removeFilter = (\n groupIndex: number,\n filterIndex: number,\n filterGroups: FilterGroup[]\n): FilterGroup[] => {\n const copy = copyFilterGroups(filterGroups)\n copy[groupIndex].filters.splice(filterIndex, 1)\n\n return copy.filter((group) => group.filters.length > 0)\n}\n\nconst filterFormReducer = (state: FilterFormState, action: Action) => {\n switch (action.type) {\n case 'initialize': {\n const filterGroups = action.payload?.filters.reduce(\n (acc, filter) => {\n return addFilter(filter, acc)\n },\n [...state.filterGroups]\n )\n\n return {\n ...state,\n filterGroups: filterGroups ?? [],\n isNewFilterInputOpen: !filterGroups?.length,\n }\n }\n case 'openNewFilterInput': {\n return {\n ...state,\n isNewFilterInputOpen: true,\n }\n }\n case 'addNewFilter': {\n if (action.payload.errors && action.payload.errors.length > 0) {\n return state\n }\n\n const filterGroups = addFilter(action.payload, state.filterGroups)\n\n return {\n ...state,\n filterGroups,\n newFilter: undefined,\n isNewFilterInputOpen: false,\n }\n }\n case 'changeNewFilter': {\n return {\n ...state,\n newFilter: action.payload,\n }\n }\n case 'removeNewFilter': {\n const allFiltersRemoved = state.filterGroups.every(\n (group) => group.filters.length === 0\n )\n return {\n ...state,\n newFilter: undefined,\n isNewFilterInputOpen: allFiltersRemoved,\n }\n }\n case 'updateFilter': {\n const { groupIndex, filterIndex, filter } = action.payload\n let filterGroups = copyFilterGroups(state.filterGroups)\n const groupField = filterGroups[groupIndex].field\n\n if (groupField === filter.field) {\n filterGroups[groupIndex].filters[filterIndex] = filter\n } else {\n filterGroups = removeFilter(groupIndex, filterIndex, filterGroups)\n filterGroups = addFilter(filter, filterGroups)\n }\n\n return {\n ...state,\n filterGroups,\n }\n }\n case 'changeFilter': {\n const { groupIndex, filterIndex, filter } = action.payload\n const filterGroups = copyFilterGroups(state.filterGroups)\n const group = filterGroups[groupIndex]\n if (group) {\n group.filters[filterIndex] = filter\n }\n\n return {\n ...state,\n filterGroups,\n }\n }\n case 'removeFilter': {\n const { groupIndex, filterIndex } = action.payload\n\n const filterGroups = removeFilter(\n groupIndex,\n filterIndex,\n state.filterGroups\n )\n\n return {\n ...state,\n filterGroups,\n isNewFilterInputOpen:\n state.isNewFilterInputOpen || filterGroups.length === 0,\n }\n }\n case 'clearAllFilters': {\n return {\n ...state,\n filterGroups: [],\n isNewFilterInputOpen: true,\n }\n }\n default:\n return state\n }\n}\n\nexport const useFiltersForm = ({\n initialValues,\n}: UseFiltersFormInput): UseFiltersFormOutput => {\n const [{ filterGroups, newFilter, isNewFilterInputOpen }, dispatch] =\n useReducer(\n filterFormReducer,\n {\n filterGroups: [],\n newFilter: undefined,\n isNewFilterInputOpen: true,\n },\n (state) => {\n return filterFormReducer(state, {\n type: 'initialize',\n payload: initialValues,\n })\n }\n )\n\n const isValid =\n (filterGroups.length === 0 ||\n filterGroups.every((group) =>\n group.filters.every(\n (filter) => filter.errors && filter.errors.length === 0\n )\n )) &&\n (newFilter?.errors ? newFilter.errors.length === 0 : true)\n\n const isEmpty =\n filterGroups.length === 0 &&\n (newFilter ? isEmptyFormFilter(newFilter) : true)\n\n return {\n dispatch,\n filterGroups,\n newFilter,\n isNewFilterInputOpen,\n isValid,\n isEmpty,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const formikAntd = require("formik-antd");
|
|
5
|
+
;/* empty css */
|
|
6
|
+
const Form = ({ children, ...props }) => {
|
|
7
|
+
return /* @__PURE__ */ jsxRuntime.jsx(formikAntd.Form, { ...props, children });
|
|
8
|
+
};
|
|
9
|
+
Form.Item = formikAntd.FormItem;
|
|
10
|
+
exports.Form = Form;
|
|
11
|
+
//# sourceMappingURL=Form.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Form.cjs","sources":["../../../../src/components/form/Form.tsx"],"sourcesContent":["import { FormProps } from 'antd'\nimport { Form as AntdForm, FormItem } from 'formik-antd'\nimport './Form.css'\n\ntype Props = Expand<FormProps>\n\nexport const Form = ({ children, ...props }: Props) => {\n return <AntdForm {...props}>{children}</AntdForm>\n}\n\nForm.Item = FormItem\n"],"names":["jsx","AntdForm","FormItem"],"mappings":";;;;;AAMO,MAAM,OAAO,CAAC,EAAE,UAAU,GAAG,YAAmB;AACrD,SAAOA,2BAAAA,IAACC,WAAAA,MAAA,EAAU,GAAG,OAAQ,SAAA,CAAS;AACxC;AAEA,KAAK,OAAOC,WAAAA;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Form as Form$1, FormItem } from "formik-antd";
|
|
3
|
+
/* empty css */
|
|
4
|
+
const Form = ({ children, ...props }) => {
|
|
5
|
+
return /* @__PURE__ */ jsx(Form$1, { ...props, children });
|
|
6
|
+
};
|
|
7
|
+
Form.Item = FormItem;
|
|
8
|
+
export {
|
|
9
|
+
Form
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=Form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Form.js","sources":["../../../../src/components/form/Form.tsx"],"sourcesContent":["import { FormProps } from 'antd'\nimport { Form as AntdForm, FormItem } from 'formik-antd'\nimport './Form.css'\n\ntype Props = Expand<FormProps>\n\nexport const Form = ({ children, ...props }: Props) => {\n return <AntdForm {...props}>{children}</AntdForm>\n}\n\nForm.Item = FormItem\n"],"names":["AntdForm"],"mappings":";;;AAMO,MAAM,OAAO,CAAC,EAAE,UAAU,GAAG,YAAmB;AACrD,SAAO,oBAACA,QAAA,EAAU,GAAG,OAAQ,SAAA,CAAS;AACxC;AAEA,KAAK,OAAO;"}
|