@j2-health/design-system 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +96 -3614
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +48 -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 +148 -0
- package/dist/src/components/barchart/BarChart.cjs.map +1 -0
- package/dist/src/components/barchart/BarChart.js +148 -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 +175 -0
- package/dist/src/components/filterform/FilterInput.cjs.map +1 -0
- package/dist/src/components/filterform/FilterInput.js +158 -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 +48 -0
- package/dist/src/components/filterform/filterHelpers.cjs.map +1 -0
- package/dist/src/components/filterform/filterHelpers.js +48 -0
- package/dist/src/components/filterform/filterHelpers.js.map +1 -0
- package/dist/src/components/filterform/useFilterField.cjs +210 -0
- package/dist/src/components/filterform/useFilterField.cjs.map +1 -0
- package/dist/src/components/filterform/useFilterField.js +193 -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 +47 -0
- package/dist/src/components/vennDiagram/VennDiagram.cjs.map +1 -0
- package/dist/src/components/vennDiagram/VennDiagram.js +47 -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 +1 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("@phosphor-icons/react");
|
|
5
|
+
const FiltersForm_module = require("./FiltersForm.module.css.cjs");
|
|
6
|
+
const cx = require("classnames");
|
|
7
|
+
const filterHelpers = require("./filterHelpers.cjs");
|
|
8
|
+
const React = require("react");
|
|
9
|
+
const FilterInput = require("./FilterInput.cjs");
|
|
10
|
+
const useFiltersForm = require("./useFiltersForm.cjs");
|
|
11
|
+
const FilterGroup = require("./FilterGroup.cjs");
|
|
12
|
+
const Button = require("../button/Button.cjs");
|
|
13
|
+
const FiltersForm = ({
|
|
14
|
+
title,
|
|
15
|
+
filterConfigs,
|
|
16
|
+
onSubmit,
|
|
17
|
+
initialValues,
|
|
18
|
+
maxFiltersPerField = 5
|
|
19
|
+
}) => {
|
|
20
|
+
const { dispatch, filterGroups, isNewFilterInputOpen, isValid, isEmpty } = useFiltersForm.useFiltersForm({
|
|
21
|
+
initialValues
|
|
22
|
+
});
|
|
23
|
+
const handleSubmit = () => {
|
|
24
|
+
onSubmit({
|
|
25
|
+
filters: filterGroups.flatMap((group) => group.filters).filter((filter) => filterHelpers.isFilter(filter)).filter((filter) => !filterHelpers.isEmptyFilter(filter))
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
const availableFilterConfigs = React.useMemo(() => {
|
|
29
|
+
const filterFieldCounts = filterGroups.reduce(
|
|
30
|
+
(acc, filterGroup) => {
|
|
31
|
+
acc[filterGroup.field] = filterGroup.filters.length;
|
|
32
|
+
return acc;
|
|
33
|
+
},
|
|
34
|
+
{}
|
|
35
|
+
);
|
|
36
|
+
return filterConfigs.map((config) => ({
|
|
37
|
+
...config,
|
|
38
|
+
disabled: (filterFieldCounts[config.field] || 0) >= maxFiltersPerField
|
|
39
|
+
}));
|
|
40
|
+
}, [
|
|
41
|
+
filterConfigs,
|
|
42
|
+
filterGroups.map((g) => `${g.field}-${g.filters.length}`).join(","),
|
|
43
|
+
maxFiltersPerField
|
|
44
|
+
]);
|
|
45
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx(FiltersForm_module.default.j2FilterForm), children: [
|
|
46
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
47
|
+
"div",
|
|
48
|
+
{
|
|
49
|
+
className: cx(
|
|
50
|
+
FiltersForm_module.default.filterFormFieldsContainer,
|
|
51
|
+
"flex flex-col gap-4",
|
|
52
|
+
"p-4 mb-6"
|
|
53
|
+
),
|
|
54
|
+
children: [
|
|
55
|
+
title && /* @__PURE__ */ jsxRuntime.jsx("span", { className: FiltersForm_module.default.filterFormTitle, children: title }),
|
|
56
|
+
filterGroups.map((filterGroup, groupIndex) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
57
|
+
"div",
|
|
58
|
+
{
|
|
59
|
+
className: cx("flex gap-3", {
|
|
60
|
+
"items-center": filterGroup.filters.length === 1
|
|
61
|
+
}),
|
|
62
|
+
children: [
|
|
63
|
+
groupIndex > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
+
"span",
|
|
65
|
+
{
|
|
66
|
+
className: cx(FiltersForm_module.default.filterFormConjunction, {
|
|
67
|
+
"pt-4": filterGroup.filters.length > 1
|
|
68
|
+
}),
|
|
69
|
+
children: "and"
|
|
70
|
+
}
|
|
71
|
+
) : null,
|
|
72
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
73
|
+
FilterGroup.FilterGroup,
|
|
74
|
+
{
|
|
75
|
+
filterGroup,
|
|
76
|
+
groupIndex,
|
|
77
|
+
filterConfigs: availableFilterConfigs,
|
|
78
|
+
className: "grow",
|
|
79
|
+
onChange: (filter, filterIndex) => {
|
|
80
|
+
dispatch({
|
|
81
|
+
type: "changeFilter",
|
|
82
|
+
payload: { groupIndex, filterIndex, filter }
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
onDone: (filter, filterIndex) => {
|
|
86
|
+
dispatch({
|
|
87
|
+
type: "updateFilter",
|
|
88
|
+
payload: { groupIndex, filterIndex, filter }
|
|
89
|
+
});
|
|
90
|
+
},
|
|
91
|
+
onRemove: (filterIndex) => {
|
|
92
|
+
dispatch({
|
|
93
|
+
type: "removeFilter",
|
|
94
|
+
payload: { groupIndex, filterIndex }
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
)
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
`filter-group-${filterGroup.field}-${filterGroup.filters.length}`
|
|
102
|
+
)),
|
|
103
|
+
isNewFilterInputOpen && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx("flex gap-3 items-center"), children: [
|
|
104
|
+
filterGroups.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cx(FiltersForm_module.default.filterFormConjunction), children: "and" }) : null,
|
|
105
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx("flex items-center justify-between", "grow"), children: [
|
|
106
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
107
|
+
FilterInput.FilterInput,
|
|
108
|
+
{
|
|
109
|
+
filterConfigs: availableFilterConfigs,
|
|
110
|
+
className: "flex-1",
|
|
111
|
+
onChange: (filter) => {
|
|
112
|
+
dispatch({ type: "changeNewFilter", payload: filter });
|
|
113
|
+
},
|
|
114
|
+
onBlur: (filter) => {
|
|
115
|
+
dispatch({ type: "addNewFilter", payload: filter });
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
JSON.stringify(filterGroups)
|
|
119
|
+
),
|
|
120
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mr-3", children: filterGroups.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
121
|
+
Button.Button,
|
|
122
|
+
{
|
|
123
|
+
type: "text",
|
|
124
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(react.TrashIcon, {}),
|
|
125
|
+
onClick: () => dispatch({ type: "removeNewFilter" })
|
|
126
|
+
}
|
|
127
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8" }) })
|
|
128
|
+
] })
|
|
129
|
+
] }),
|
|
130
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center", children: [
|
|
131
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
132
|
+
Button.Button,
|
|
133
|
+
{
|
|
134
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(react.PlusCircleIcon, {}),
|
|
135
|
+
onClick: () => dispatch({ type: "openNewFilterInput" }),
|
|
136
|
+
disabled: !isValid,
|
|
137
|
+
children: "Add Rule"
|
|
138
|
+
}
|
|
139
|
+
),
|
|
140
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
141
|
+
Button.Button,
|
|
142
|
+
{
|
|
143
|
+
type: "text",
|
|
144
|
+
onClick: () => {
|
|
145
|
+
dispatch({
|
|
146
|
+
type: "clearAllFilters"
|
|
147
|
+
});
|
|
148
|
+
},
|
|
149
|
+
children: "Clear All Rules"
|
|
150
|
+
}
|
|
151
|
+
)
|
|
152
|
+
] })
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
),
|
|
156
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
157
|
+
Button.Button,
|
|
158
|
+
{
|
|
159
|
+
onClick: handleSubmit,
|
|
160
|
+
type: "primary",
|
|
161
|
+
disabled: isEmpty ? false : !isValid,
|
|
162
|
+
children: "Apply Filters"
|
|
163
|
+
}
|
|
164
|
+
) })
|
|
165
|
+
] });
|
|
166
|
+
};
|
|
167
|
+
exports.FiltersForm = FiltersForm;
|
|
168
|
+
//# sourceMappingURL=FiltersForm.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FiltersForm.cjs","sources":["../../../../src/components/filterform/FiltersForm.tsx"],"sourcesContent":["import { Button } from '../button'\nimport { PlusCircleIcon, TrashIcon } from '@phosphor-icons/react'\nimport s from './FiltersForm.module.css'\nimport cx from 'classnames'\nimport { FilterForm, FilterConfig } from '.'\nimport { isEmptyFilter, isFilter } from './filterHelpers'\nimport { useMemo } from 'react'\nimport { FilterInput } from './FilterInput'\nimport { useFiltersForm } from './useFiltersForm'\nimport { FilterGroup } from './FilterGroup'\n\ntype Props = {\n filterConfigs: FilterConfig[]\n title?: string\n onSubmit: (values: FilterForm) => void\n initialValues?: FilterForm\n maxFiltersPerField?: number\n}\n\nexport const FiltersForm = ({\n title,\n filterConfigs,\n onSubmit,\n initialValues,\n maxFiltersPerField = 5,\n}: Props) => {\n const { dispatch, filterGroups, isNewFilterInputOpen, isValid, isEmpty } =\n useFiltersForm({\n initialValues,\n })\n\n const handleSubmit = () => {\n onSubmit({\n filters: filterGroups\n .flatMap((group) => group.filters)\n .filter((filter) => isFilter(filter))\n .filter((filter) => !isEmptyFilter(filter)),\n })\n }\n\n const availableFilterConfigs = useMemo(() => {\n const filterFieldCounts = filterGroups.reduce(\n (acc, filterGroup) => {\n acc[filterGroup.field] = filterGroup.filters.length\n return acc\n },\n {} as Record<string, number>\n )\n\n return filterConfigs.map((config) => ({\n ...config,\n disabled: (filterFieldCounts[config.field] || 0) >= maxFiltersPerField,\n }))\n }, [\n filterConfigs,\n filterGroups.map((g) => `${g.field}-${g.filters.length}`).join(','),\n maxFiltersPerField,\n ])\n\n return (\n <div className={cx(s.j2FilterForm)}>\n <div\n className={cx(\n s.filterFormFieldsContainer,\n 'flex flex-col gap-4',\n 'p-4 mb-6'\n )}\n >\n {title && <span className={s.filterFormTitle}>{title}</span>}\n {filterGroups.map((filterGroup, groupIndex) => (\n <div\n key={`filter-group-${filterGroup.field}-${filterGroup.filters.length}`}\n className={cx('flex gap-3', {\n 'items-center': filterGroup.filters.length === 1,\n })}\n >\n {groupIndex > 0 ? (\n <span\n className={cx(s.filterFormConjunction, {\n 'pt-4': filterGroup.filters.length > 1,\n })}\n >\n and\n </span>\n ) : null}\n <FilterGroup\n filterGroup={filterGroup}\n groupIndex={groupIndex}\n filterConfigs={availableFilterConfigs}\n className=\"grow\"\n onChange={(filter, filterIndex) => {\n dispatch({\n type: 'changeFilter',\n payload: { groupIndex, filterIndex, filter },\n })\n }}\n onDone={(filter, filterIndex) => {\n dispatch({\n type: 'updateFilter',\n payload: { groupIndex, filterIndex, filter },\n })\n }}\n onRemove={(filterIndex) => {\n dispatch({\n type: 'removeFilter',\n payload: { groupIndex, filterIndex },\n })\n }}\n />\n </div>\n ))}\n {isNewFilterInputOpen && (\n <div className={cx('flex gap-3 items-center')}>\n {filterGroups.length > 0 ? (\n <span className={cx(s.filterFormConjunction)}>and</span>\n ) : null}\n <div className={cx('flex items-center justify-between', 'grow')}>\n <FilterInput\n key={JSON.stringify(filterGroups)}\n filterConfigs={availableFilterConfigs}\n className=\"flex-1\"\n onChange={(filter) => {\n dispatch({ type: 'changeNewFilter', payload: filter })\n }}\n onBlur={(filter) => {\n dispatch({ type: 'addNewFilter', payload: filter })\n }}\n />\n <div className=\"mr-3\">\n {filterGroups.length > 0 ? (\n <Button\n type=\"text\"\n icon={<TrashIcon />}\n onClick={() => dispatch({ type: 'removeNewFilter' })}\n />\n ) : (\n <div className=\"w-8\" />\n )}\n </div>\n </div>\n </div>\n )}\n <div className=\"flex items-center\">\n <Button\n icon={<PlusCircleIcon />}\n onClick={() => dispatch({ type: 'openNewFilterInput' })}\n disabled={!isValid}\n >\n Add Rule\n </Button>\n <Button\n type=\"text\"\n onClick={() => {\n dispatch({\n type: 'clearAllFilters',\n })\n }}\n >\n Clear All Rules\n </Button>\n </div>\n </div>\n <div className=\"flex justify-end\">\n <Button\n onClick={handleSubmit}\n type=\"primary\"\n disabled={isEmpty ? false : !isValid}\n >\n Apply Filters\n </Button>\n </div>\n </div>\n )\n}\n"],"names":["useFiltersForm","isFilter","isEmptyFilter","useMemo","s","jsxs","jsx","FilterGroup","FilterInput","Button","TrashIcon","PlusCircleIcon"],"mappings":"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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { TrashIcon, PlusCircleIcon } from "@phosphor-icons/react";
|
|
3
|
+
import s from "./FiltersForm.module.css.js";
|
|
4
|
+
import cx from "classnames";
|
|
5
|
+
import { isFilter, isEmptyFilter } from "./filterHelpers.js";
|
|
6
|
+
import { useMemo } from "react";
|
|
7
|
+
import { FilterInput } from "./FilterInput.js";
|
|
8
|
+
import { useFiltersForm } from "./useFiltersForm.js";
|
|
9
|
+
import { FilterGroup } from "./FilterGroup.js";
|
|
10
|
+
import { Button } from "../button/Button.js";
|
|
11
|
+
const FiltersForm = ({
|
|
12
|
+
title,
|
|
13
|
+
filterConfigs,
|
|
14
|
+
onSubmit,
|
|
15
|
+
initialValues,
|
|
16
|
+
maxFiltersPerField = 5
|
|
17
|
+
}) => {
|
|
18
|
+
const { dispatch, filterGroups, isNewFilterInputOpen, isValid, isEmpty } = useFiltersForm({
|
|
19
|
+
initialValues
|
|
20
|
+
});
|
|
21
|
+
const handleSubmit = () => {
|
|
22
|
+
onSubmit({
|
|
23
|
+
filters: filterGroups.flatMap((group) => group.filters).filter((filter) => isFilter(filter)).filter((filter) => !isEmptyFilter(filter))
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
const availableFilterConfigs = useMemo(() => {
|
|
27
|
+
const filterFieldCounts = filterGroups.reduce(
|
|
28
|
+
(acc, filterGroup) => {
|
|
29
|
+
acc[filterGroup.field] = filterGroup.filters.length;
|
|
30
|
+
return acc;
|
|
31
|
+
},
|
|
32
|
+
{}
|
|
33
|
+
);
|
|
34
|
+
return filterConfigs.map((config) => ({
|
|
35
|
+
...config,
|
|
36
|
+
disabled: (filterFieldCounts[config.field] || 0) >= maxFiltersPerField
|
|
37
|
+
}));
|
|
38
|
+
}, [
|
|
39
|
+
filterConfigs,
|
|
40
|
+
filterGroups.map((g) => `${g.field}-${g.filters.length}`).join(","),
|
|
41
|
+
maxFiltersPerField
|
|
42
|
+
]);
|
|
43
|
+
return /* @__PURE__ */ jsxs("div", { className: cx(s.j2FilterForm), children: [
|
|
44
|
+
/* @__PURE__ */ jsxs(
|
|
45
|
+
"div",
|
|
46
|
+
{
|
|
47
|
+
className: cx(
|
|
48
|
+
s.filterFormFieldsContainer,
|
|
49
|
+
"flex flex-col gap-4",
|
|
50
|
+
"p-4 mb-6"
|
|
51
|
+
),
|
|
52
|
+
children: [
|
|
53
|
+
title && /* @__PURE__ */ jsx("span", { className: s.filterFormTitle, children: title }),
|
|
54
|
+
filterGroups.map((filterGroup, groupIndex) => /* @__PURE__ */ jsxs(
|
|
55
|
+
"div",
|
|
56
|
+
{
|
|
57
|
+
className: cx("flex gap-3", {
|
|
58
|
+
"items-center": filterGroup.filters.length === 1
|
|
59
|
+
}),
|
|
60
|
+
children: [
|
|
61
|
+
groupIndex > 0 ? /* @__PURE__ */ jsx(
|
|
62
|
+
"span",
|
|
63
|
+
{
|
|
64
|
+
className: cx(s.filterFormConjunction, {
|
|
65
|
+
"pt-4": filterGroup.filters.length > 1
|
|
66
|
+
}),
|
|
67
|
+
children: "and"
|
|
68
|
+
}
|
|
69
|
+
) : null,
|
|
70
|
+
/* @__PURE__ */ jsx(
|
|
71
|
+
FilterGroup,
|
|
72
|
+
{
|
|
73
|
+
filterGroup,
|
|
74
|
+
groupIndex,
|
|
75
|
+
filterConfigs: availableFilterConfigs,
|
|
76
|
+
className: "grow",
|
|
77
|
+
onChange: (filter, filterIndex) => {
|
|
78
|
+
dispatch({
|
|
79
|
+
type: "changeFilter",
|
|
80
|
+
payload: { groupIndex, filterIndex, filter }
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
onDone: (filter, filterIndex) => {
|
|
84
|
+
dispatch({
|
|
85
|
+
type: "updateFilter",
|
|
86
|
+
payload: { groupIndex, filterIndex, filter }
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
onRemove: (filterIndex) => {
|
|
90
|
+
dispatch({
|
|
91
|
+
type: "removeFilter",
|
|
92
|
+
payload: { groupIndex, filterIndex }
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
)
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
`filter-group-${filterGroup.field}-${filterGroup.filters.length}`
|
|
100
|
+
)),
|
|
101
|
+
isNewFilterInputOpen && /* @__PURE__ */ jsxs("div", { className: cx("flex gap-3 items-center"), children: [
|
|
102
|
+
filterGroups.length > 0 ? /* @__PURE__ */ jsx("span", { className: cx(s.filterFormConjunction), children: "and" }) : null,
|
|
103
|
+
/* @__PURE__ */ jsxs("div", { className: cx("flex items-center justify-between", "grow"), children: [
|
|
104
|
+
/* @__PURE__ */ jsx(
|
|
105
|
+
FilterInput,
|
|
106
|
+
{
|
|
107
|
+
filterConfigs: availableFilterConfigs,
|
|
108
|
+
className: "flex-1",
|
|
109
|
+
onChange: (filter) => {
|
|
110
|
+
dispatch({ type: "changeNewFilter", payload: filter });
|
|
111
|
+
},
|
|
112
|
+
onBlur: (filter) => {
|
|
113
|
+
dispatch({ type: "addNewFilter", payload: filter });
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
JSON.stringify(filterGroups)
|
|
117
|
+
),
|
|
118
|
+
/* @__PURE__ */ jsx("div", { className: "mr-3", children: filterGroups.length > 0 ? /* @__PURE__ */ jsx(
|
|
119
|
+
Button,
|
|
120
|
+
{
|
|
121
|
+
type: "text",
|
|
122
|
+
icon: /* @__PURE__ */ jsx(TrashIcon, {}),
|
|
123
|
+
onClick: () => dispatch({ type: "removeNewFilter" })
|
|
124
|
+
}
|
|
125
|
+
) : /* @__PURE__ */ jsx("div", { className: "w-8" }) })
|
|
126
|
+
] })
|
|
127
|
+
] }),
|
|
128
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
|
|
129
|
+
/* @__PURE__ */ jsx(
|
|
130
|
+
Button,
|
|
131
|
+
{
|
|
132
|
+
icon: /* @__PURE__ */ jsx(PlusCircleIcon, {}),
|
|
133
|
+
onClick: () => dispatch({ type: "openNewFilterInput" }),
|
|
134
|
+
disabled: !isValid,
|
|
135
|
+
children: "Add Rule"
|
|
136
|
+
}
|
|
137
|
+
),
|
|
138
|
+
/* @__PURE__ */ jsx(
|
|
139
|
+
Button,
|
|
140
|
+
{
|
|
141
|
+
type: "text",
|
|
142
|
+
onClick: () => {
|
|
143
|
+
dispatch({
|
|
144
|
+
type: "clearAllFilters"
|
|
145
|
+
});
|
|
146
|
+
},
|
|
147
|
+
children: "Clear All Rules"
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
] })
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
),
|
|
154
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx(
|
|
155
|
+
Button,
|
|
156
|
+
{
|
|
157
|
+
onClick: handleSubmit,
|
|
158
|
+
type: "primary",
|
|
159
|
+
disabled: isEmpty ? false : !isValid,
|
|
160
|
+
children: "Apply Filters"
|
|
161
|
+
}
|
|
162
|
+
) })
|
|
163
|
+
] });
|
|
164
|
+
};
|
|
165
|
+
export {
|
|
166
|
+
FiltersForm
|
|
167
|
+
};
|
|
168
|
+
//# sourceMappingURL=FiltersForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FiltersForm.js","sources":["../../../../src/components/filterform/FiltersForm.tsx"],"sourcesContent":["import { Button } from '../button'\nimport { PlusCircleIcon, TrashIcon } from '@phosphor-icons/react'\nimport s from './FiltersForm.module.css'\nimport cx from 'classnames'\nimport { FilterForm, FilterConfig } from '.'\nimport { isEmptyFilter, isFilter } from './filterHelpers'\nimport { useMemo } from 'react'\nimport { FilterInput } from './FilterInput'\nimport { useFiltersForm } from './useFiltersForm'\nimport { FilterGroup } from './FilterGroup'\n\ntype Props = {\n filterConfigs: FilterConfig[]\n title?: string\n onSubmit: (values: FilterForm) => void\n initialValues?: FilterForm\n maxFiltersPerField?: number\n}\n\nexport const FiltersForm = ({\n title,\n filterConfigs,\n onSubmit,\n initialValues,\n maxFiltersPerField = 5,\n}: Props) => {\n const { dispatch, filterGroups, isNewFilterInputOpen, isValid, isEmpty } =\n useFiltersForm({\n initialValues,\n })\n\n const handleSubmit = () => {\n onSubmit({\n filters: filterGroups\n .flatMap((group) => group.filters)\n .filter((filter) => isFilter(filter))\n .filter((filter) => !isEmptyFilter(filter)),\n })\n }\n\n const availableFilterConfigs = useMemo(() => {\n const filterFieldCounts = filterGroups.reduce(\n (acc, filterGroup) => {\n acc[filterGroup.field] = filterGroup.filters.length\n return acc\n },\n {} as Record<string, number>\n )\n\n return filterConfigs.map((config) => ({\n ...config,\n disabled: (filterFieldCounts[config.field] || 0) >= maxFiltersPerField,\n }))\n }, [\n filterConfigs,\n filterGroups.map((g) => `${g.field}-${g.filters.length}`).join(','),\n maxFiltersPerField,\n ])\n\n return (\n <div className={cx(s.j2FilterForm)}>\n <div\n className={cx(\n s.filterFormFieldsContainer,\n 'flex flex-col gap-4',\n 'p-4 mb-6'\n )}\n >\n {title && <span className={s.filterFormTitle}>{title}</span>}\n {filterGroups.map((filterGroup, groupIndex) => (\n <div\n key={`filter-group-${filterGroup.field}-${filterGroup.filters.length}`}\n className={cx('flex gap-3', {\n 'items-center': filterGroup.filters.length === 1,\n })}\n >\n {groupIndex > 0 ? (\n <span\n className={cx(s.filterFormConjunction, {\n 'pt-4': filterGroup.filters.length > 1,\n })}\n >\n and\n </span>\n ) : null}\n <FilterGroup\n filterGroup={filterGroup}\n groupIndex={groupIndex}\n filterConfigs={availableFilterConfigs}\n className=\"grow\"\n onChange={(filter, filterIndex) => {\n dispatch({\n type: 'changeFilter',\n payload: { groupIndex, filterIndex, filter },\n })\n }}\n onDone={(filter, filterIndex) => {\n dispatch({\n type: 'updateFilter',\n payload: { groupIndex, filterIndex, filter },\n })\n }}\n onRemove={(filterIndex) => {\n dispatch({\n type: 'removeFilter',\n payload: { groupIndex, filterIndex },\n })\n }}\n />\n </div>\n ))}\n {isNewFilterInputOpen && (\n <div className={cx('flex gap-3 items-center')}>\n {filterGroups.length > 0 ? (\n <span className={cx(s.filterFormConjunction)}>and</span>\n ) : null}\n <div className={cx('flex items-center justify-between', 'grow')}>\n <FilterInput\n key={JSON.stringify(filterGroups)}\n filterConfigs={availableFilterConfigs}\n className=\"flex-1\"\n onChange={(filter) => {\n dispatch({ type: 'changeNewFilter', payload: filter })\n }}\n onBlur={(filter) => {\n dispatch({ type: 'addNewFilter', payload: filter })\n }}\n />\n <div className=\"mr-3\">\n {filterGroups.length > 0 ? (\n <Button\n type=\"text\"\n icon={<TrashIcon />}\n onClick={() => dispatch({ type: 'removeNewFilter' })}\n />\n ) : (\n <div className=\"w-8\" />\n )}\n </div>\n </div>\n </div>\n )}\n <div className=\"flex items-center\">\n <Button\n icon={<PlusCircleIcon />}\n onClick={() => dispatch({ type: 'openNewFilterInput' })}\n disabled={!isValid}\n >\n Add Rule\n </Button>\n <Button\n type=\"text\"\n onClick={() => {\n dispatch({\n type: 'clearAllFilters',\n })\n }}\n >\n Clear All Rules\n </Button>\n </div>\n </div>\n <div className=\"flex justify-end\">\n <Button\n onClick={handleSubmit}\n type=\"primary\"\n disabled={isEmpty ? false : !isValid}\n >\n Apply Filters\n </Button>\n </div>\n </div>\n )\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const j2FilterForm = "_j2FilterForm_rdja9_1";
|
|
4
|
+
const filterFormTitle = "_filterFormTitle_rdja9_2";
|
|
5
|
+
const filterFormConjunction = "_filterFormConjunction_rdja9_6";
|
|
6
|
+
const filterFormFieldsContainer = "_filterFormFieldsContainer_rdja9_10";
|
|
7
|
+
const filterFormGroupContainer = "_filterFormGroupContainer_rdja9_15";
|
|
8
|
+
const s = {
|
|
9
|
+
j2FilterForm,
|
|
10
|
+
filterFormTitle,
|
|
11
|
+
filterFormConjunction,
|
|
12
|
+
filterFormFieldsContainer,
|
|
13
|
+
filterFormGroupContainer
|
|
14
|
+
};
|
|
15
|
+
exports.default = s;
|
|
16
|
+
exports.filterFormConjunction = filterFormConjunction;
|
|
17
|
+
exports.filterFormFieldsContainer = filterFormFieldsContainer;
|
|
18
|
+
exports.filterFormGroupContainer = filterFormGroupContainer;
|
|
19
|
+
exports.filterFormTitle = filterFormTitle;
|
|
20
|
+
exports.j2FilterForm = j2FilterForm;
|
|
21
|
+
//# sourceMappingURL=FiltersForm.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FiltersForm.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const j2FilterForm = "_j2FilterForm_rdja9_1";
|
|
2
|
+
const filterFormTitle = "_filterFormTitle_rdja9_2";
|
|
3
|
+
const filterFormConjunction = "_filterFormConjunction_rdja9_6";
|
|
4
|
+
const filterFormFieldsContainer = "_filterFormFieldsContainer_rdja9_10";
|
|
5
|
+
const filterFormGroupContainer = "_filterFormGroupContainer_rdja9_15";
|
|
6
|
+
const s = {
|
|
7
|
+
j2FilterForm,
|
|
8
|
+
filterFormTitle,
|
|
9
|
+
filterFormConjunction,
|
|
10
|
+
filterFormFieldsContainer,
|
|
11
|
+
filterFormGroupContainer
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
s as default,
|
|
15
|
+
filterFormConjunction,
|
|
16
|
+
filterFormFieldsContainer,
|
|
17
|
+
filterFormGroupContainer,
|
|
18
|
+
filterFormTitle,
|
|
19
|
+
j2FilterForm
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=FiltersForm.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FiltersForm.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const isEmptyFilter = (filter) => {
|
|
4
|
+
if (filter.operator === "blank" || filter.operator === "notBlank") {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
if (filter.values && filter.values.length > 0 && filter.values.every(
|
|
8
|
+
(value) => value !== "" && value !== void 0 && value !== null
|
|
9
|
+
)) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
return true;
|
|
13
|
+
};
|
|
14
|
+
const isEmptyFormFilter = (filter) => {
|
|
15
|
+
if (filter.operator === "blank" || filter.operator === "notBlank") {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (filter.values && filter.values.length > 0 && filter.values.every(
|
|
19
|
+
(value) => value !== "" && value !== void 0 && value !== null
|
|
20
|
+
)) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
return true;
|
|
24
|
+
};
|
|
25
|
+
const validateFormFilter = (filter) => {
|
|
26
|
+
const errors = [];
|
|
27
|
+
if (!filter.operator) {
|
|
28
|
+
errors.push("Operator is required");
|
|
29
|
+
return errors;
|
|
30
|
+
}
|
|
31
|
+
if (isEmptyFormFilter(filter)) {
|
|
32
|
+
errors.push("Value is required");
|
|
33
|
+
}
|
|
34
|
+
if (filter.type === "number" && filter.operator === "inRange") {
|
|
35
|
+
if (filter.values && filter.values.length !== 2) {
|
|
36
|
+
errors.push("Value is required");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return errors;
|
|
40
|
+
};
|
|
41
|
+
const isFilter = (filter) => {
|
|
42
|
+
return filter.operator !== void 0 && filter.field !== void 0 && filter.type !== void 0;
|
|
43
|
+
};
|
|
44
|
+
exports.isEmptyFilter = isEmptyFilter;
|
|
45
|
+
exports.isEmptyFormFilter = isEmptyFormFilter;
|
|
46
|
+
exports.isFilter = isFilter;
|
|
47
|
+
exports.validateFormFilter = validateFormFilter;
|
|
48
|
+
//# sourceMappingURL=filterHelpers.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterHelpers.cjs","sources":["../../../../src/components/filterform/filterHelpers.ts"],"sourcesContent":["import { Filter } from './types'\n\nexport const isEmptyFilter = (filter: Filter) => {\n if (filter.operator === 'blank' || filter.operator === 'notBlank') {\n return false\n }\n\n if (\n filter.values &&\n filter.values.length > 0 &&\n filter.values.every(\n (value) => value !== '' && value !== undefined && value !== null\n )\n ) {\n return false\n }\n\n return true\n}\n\nexport const isValidFilter = (filter: Filter) => {\n return validateFilterField(filter).length === 0\n}\n\nexport const validateFilterField = (\n filter: Filter\n): { field: string; message: string }[] => {\n const errors = []\n\n if (!filter.operator) {\n errors.push({ field: filter.field, message: 'Operator is required' })\n return errors\n }\n\n if (isEmptyFilter(filter)) {\n errors.push({ field: filter.field, message: 'Value is required' })\n }\n\n if (filter.type === 'number' && filter.operator === 'inRange') {\n if (filter.values && filter.values.length !== 2) {\n errors.push({ field: filter.field, message: 'Value is required' })\n }\n }\n\n return errors\n}\n\nimport { FormFilter } from './types'\n\nexport const isEmptyFormFilter = (filter: FormFilter) => {\n if (filter.operator === 'blank' || filter.operator === 'notBlank') {\n return false\n }\n\n if (\n filter.values &&\n filter.values.length > 0 &&\n filter.values.every(\n (value) => value !== '' && value !== undefined && value !== null\n )\n ) {\n return false\n }\n\n return true\n}\n\nexport const isValidFormFilter = (filter: FormFilter) => {\n return validateFormFilter(filter).length === 0\n}\n\nexport const validateFormFilter = (filter: FormFilter): string[] => {\n const errors = []\n\n if (!filter.operator) {\n errors.push('Operator is required')\n return errors\n }\n\n if (isEmptyFormFilter(filter)) {\n errors.push('Value is required')\n }\n\n if (filter.type === 'number' && filter.operator === 'inRange') {\n if (filter.values && filter.values.length !== 2) {\n errors.push('Value is required')\n }\n }\n\n return errors\n}\n\nexport const isFilter = (filter: FormFilter): filter is Filter => {\n return (\n filter.operator !== undefined &&\n filter.field !== undefined &&\n filter.type !== undefined\n )\n}\n"],"names":[],"mappings":";;AAEO,MAAM,gBAAgB,CAAC,WAAmB;AAC/C,MAAI,OAAO,aAAa,WAAW,OAAO,aAAa,YAAY;AACjE,WAAO;AAAA,EACT;AAEA,MACE,OAAO,UACP,OAAO,OAAO,SAAS,KACvB,OAAO,OAAO;AAAA,IACZ,CAAC,UAAU,UAAU,MAAM,UAAU,UAAa,UAAU;AAAA,EAAA,GAE9D;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AA+BO,MAAM,oBAAoB,CAAC,WAAuB;AACvD,MAAI,OAAO,aAAa,WAAW,OAAO,aAAa,YAAY;AACjE,WAAO;AAAA,EACT;AAEA,MACE,OAAO,UACP,OAAO,OAAO,SAAS,KACvB,OAAO,OAAO;AAAA,IACZ,CAAC,UAAU,UAAU,MAAM,UAAU,UAAa,UAAU;AAAA,EAAA,GAE9D;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAMO,MAAM,qBAAqB,CAAC,WAAiC;AAClE,QAAM,SAAS,CAAA;AAEf,MAAI,CAAC,OAAO,UAAU;AACpB,WAAO,KAAK,sBAAsB;AAClC,WAAO;AAAA,EACT;AAEA,MAAI,kBAAkB,MAAM,GAAG;AAC7B,WAAO,KAAK,mBAAmB;AAAA,EACjC;AAEA,MAAI,OAAO,SAAS,YAAY,OAAO,aAAa,WAAW;AAC7D,QAAI,OAAO,UAAU,OAAO,OAAO,WAAW,GAAG;AAC/C,aAAO,KAAK,mBAAmB;AAAA,IACjC;AAAA,EACF;AAEA,SAAO;AACT;AAEO,MAAM,WAAW,CAAC,WAAyC;AAChE,SACE,OAAO,aAAa,UACpB,OAAO,UAAU,UACjB,OAAO,SAAS;AAEpB;;;;;"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const isEmptyFilter = (filter) => {
|
|
2
|
+
if (filter.operator === "blank" || filter.operator === "notBlank") {
|
|
3
|
+
return false;
|
|
4
|
+
}
|
|
5
|
+
if (filter.values && filter.values.length > 0 && filter.values.every(
|
|
6
|
+
(value) => value !== "" && value !== void 0 && value !== null
|
|
7
|
+
)) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
return true;
|
|
11
|
+
};
|
|
12
|
+
const isEmptyFormFilter = (filter) => {
|
|
13
|
+
if (filter.operator === "blank" || filter.operator === "notBlank") {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (filter.values && filter.values.length > 0 && filter.values.every(
|
|
17
|
+
(value) => value !== "" && value !== void 0 && value !== null
|
|
18
|
+
)) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
};
|
|
23
|
+
const validateFormFilter = (filter) => {
|
|
24
|
+
const errors = [];
|
|
25
|
+
if (!filter.operator) {
|
|
26
|
+
errors.push("Operator is required");
|
|
27
|
+
return errors;
|
|
28
|
+
}
|
|
29
|
+
if (isEmptyFormFilter(filter)) {
|
|
30
|
+
errors.push("Value is required");
|
|
31
|
+
}
|
|
32
|
+
if (filter.type === "number" && filter.operator === "inRange") {
|
|
33
|
+
if (filter.values && filter.values.length !== 2) {
|
|
34
|
+
errors.push("Value is required");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return errors;
|
|
38
|
+
};
|
|
39
|
+
const isFilter = (filter) => {
|
|
40
|
+
return filter.operator !== void 0 && filter.field !== void 0 && filter.type !== void 0;
|
|
41
|
+
};
|
|
42
|
+
export {
|
|
43
|
+
isEmptyFilter,
|
|
44
|
+
isEmptyFormFilter,
|
|
45
|
+
isFilter,
|
|
46
|
+
validateFormFilter
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=filterHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterHelpers.js","sources":["../../../../src/components/filterform/filterHelpers.ts"],"sourcesContent":["import { Filter } from './types'\n\nexport const isEmptyFilter = (filter: Filter) => {\n if (filter.operator === 'blank' || filter.operator === 'notBlank') {\n return false\n }\n\n if (\n filter.values &&\n filter.values.length > 0 &&\n filter.values.every(\n (value) => value !== '' && value !== undefined && value !== null\n )\n ) {\n return false\n }\n\n return true\n}\n\nexport const isValidFilter = (filter: Filter) => {\n return validateFilterField(filter).length === 0\n}\n\nexport const validateFilterField = (\n filter: Filter\n): { field: string; message: string }[] => {\n const errors = []\n\n if (!filter.operator) {\n errors.push({ field: filter.field, message: 'Operator is required' })\n return errors\n }\n\n if (isEmptyFilter(filter)) {\n errors.push({ field: filter.field, message: 'Value is required' })\n }\n\n if (filter.type === 'number' && filter.operator === 'inRange') {\n if (filter.values && filter.values.length !== 2) {\n errors.push({ field: filter.field, message: 'Value is required' })\n }\n }\n\n return errors\n}\n\nimport { FormFilter } from './types'\n\nexport const isEmptyFormFilter = (filter: FormFilter) => {\n if (filter.operator === 'blank' || filter.operator === 'notBlank') {\n return false\n }\n\n if (\n filter.values &&\n filter.values.length > 0 &&\n filter.values.every(\n (value) => value !== '' && value !== undefined && value !== null\n )\n ) {\n return false\n }\n\n return true\n}\n\nexport const isValidFormFilter = (filter: FormFilter) => {\n return validateFormFilter(filter).length === 0\n}\n\nexport const validateFormFilter = (filter: FormFilter): string[] => {\n const errors = []\n\n if (!filter.operator) {\n errors.push('Operator is required')\n return errors\n }\n\n if (isEmptyFormFilter(filter)) {\n errors.push('Value is required')\n }\n\n if (filter.type === 'number' && filter.operator === 'inRange') {\n if (filter.values && filter.values.length !== 2) {\n errors.push('Value is required')\n }\n }\n\n return errors\n}\n\nexport const isFilter = (filter: FormFilter): filter is Filter => {\n return (\n filter.operator !== undefined &&\n filter.field !== undefined &&\n filter.type !== undefined\n )\n}\n"],"names":[],"mappings":"AAEO,MAAM,gBAAgB,CAAC,WAAmB;AAC/C,MAAI,OAAO,aAAa,WAAW,OAAO,aAAa,YAAY;AACjE,WAAO;AAAA,EACT;AAEA,MACE,OAAO,UACP,OAAO,OAAO,SAAS,KACvB,OAAO,OAAO;AAAA,IACZ,CAAC,UAAU,UAAU,MAAM,UAAU,UAAa,UAAU;AAAA,EAAA,GAE9D;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AA+BO,MAAM,oBAAoB,CAAC,WAAuB;AACvD,MAAI,OAAO,aAAa,WAAW,OAAO,aAAa,YAAY;AACjE,WAAO;AAAA,EACT;AAEA,MACE,OAAO,UACP,OAAO,OAAO,SAAS,KACvB,OAAO,OAAO;AAAA,IACZ,CAAC,UAAU,UAAU,MAAM,UAAU,UAAa,UAAU;AAAA,EAAA,GAE9D;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAMO,MAAM,qBAAqB,CAAC,WAAiC;AAClE,QAAM,SAAS,CAAA;AAEf,MAAI,CAAC,OAAO,UAAU;AACpB,WAAO,KAAK,sBAAsB;AAClC,WAAO;AAAA,EACT;AAEA,MAAI,kBAAkB,MAAM,GAAG;AAC7B,WAAO,KAAK,mBAAmB;AAAA,EACjC;AAEA,MAAI,OAAO,SAAS,YAAY,OAAO,aAAa,WAAW;AAC7D,QAAI,OAAO,UAAU,OAAO,OAAO,WAAW,GAAG;AAC/C,aAAO,KAAK,mBAAmB;AAAA,IACjC;AAAA,EACF;AAEA,SAAO;AACT;AAEO,MAAM,WAAW,CAAC,WAAyC;AAChE,SACE,OAAO,aAAa,UACpB,OAAO,UAAU,UACjB,OAAO,SAAS;AAEpB;"}
|