@vuu-ui/vuu-filters 2.1.18 → 2.1.19-beta.2
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/package.json +15 -18
- package/src/FilterAggregator.js +107 -0
- package/src/FilterModel.js +161 -0
- package/src/column-filter/ColumnFilter.css.js +52 -0
- package/src/column-filter/ColumnFilter.js +59 -0
- package/src/column-filter/useColumnFilter.js +130 -0
- package/src/column-filter/utils.js +35 -0
- package/src/custom-filters/CustomFilters.js +74 -0
- package/src/custom-filters/filterBarFocusManagement.js +25 -0
- package/src/custom-filters/index.js +1 -0
- package/src/custom-filters/useCustomFilters.js +237 -0
- package/src/custom-filters/useFilterState.js +123 -0
- package/src/filter-bar/FilterBar.css.js +81 -0
- package/src/filter-bar/FilterBar.js +97 -0
- package/src/filter-bar/FilterBarMenu.js +14 -0
- package/src/filter-bar/index.js +1 -0
- package/src/filter-bar/useFilterBar.js +28 -0
- package/src/filter-clause/ExpandoCombobox.css.js +54 -0
- package/src/filter-clause/ExpandoCombobox.js +86 -0
- package/src/filter-clause/FilterClause.css.js +101 -0
- package/src/filter-clause/FilterClause.js +69 -0
- package/src/filter-clause/column-picker/ColumnPicker.js +25 -0
- package/src/filter-clause/column-picker/useColumnPicker.js +42 -0
- package/src/filter-clause/filterClauseFocusManagement.js +156 -0
- package/src/filter-clause/filterClauseTypes.js +0 -0
- package/src/filter-clause/index.js +5 -0
- package/src/filter-clause/operator-picker/OperatorPicker.js +25 -0
- package/src/filter-clause/operator-picker/operator-utils.js +23 -0
- package/src/filter-clause/operator-picker/useOperatorPicker.js +42 -0
- package/src/filter-clause/useFilterClause.js +135 -0
- package/src/filter-clause/value-editors/FilterClauseValueEditor.js +59 -0
- package/src/filter-clause/value-editors/FilterClauseValueEditorDate.js +55 -0
- package/src/filter-clause/value-editors/FilterClauseValueEditorNumber.js +32 -0
- package/src/filter-clause/value-editors/FilterClauseValueEditorText.js +182 -0
- package/src/filter-clause/value-editors/FilterClauseValueEditorTime.js +53 -0
- package/src/filter-container/ExtendedSingleValueFilterClause.js +35 -0
- package/src/filter-container/FilterContainer.css.js +13 -0
- package/src/filter-container/FilterContainer.js +121 -0
- package/src/filter-container/useFilterContainer.js +82 -0
- package/src/filter-context-menu/useFilterContextMenu.js +106 -0
- package/src/filter-display/FilterDisplay.css.js +31 -0
- package/src/filter-display/FilterDisplay.js +59 -0
- package/src/filter-editor/FilterClauseCombinator.css.js +15 -0
- package/src/filter-editor/FilterClauseCombinator.js +32 -0
- package/src/filter-editor/FilterEditor.css.js +13 -0
- package/src/filter-editor/FilterEditor.js +65 -0
- package/src/filter-editor/index.js +1 -0
- package/src/filter-editor/useFilterEditor.js +193 -0
- package/src/filter-panel/FilterPanel.css.js +22 -0
- package/src/filter-panel/FilterPanel.js +59 -0
- package/src/filter-panel/useFilterPanel.js +58 -0
- package/src/filter-pill/FilterMenu.js +48 -0
- package/src/filter-pill/FilterPill.css.js +15 -0
- package/src/filter-pill/FilterPill.js +114 -0
- package/src/filter-pill/FilterPillNext.css.js +12 -0
- package/src/filter-pill/FilterPillNext.js +65 -0
- package/src/filter-pill/filterAsReactNode.js +28 -0
- package/src/filter-pill/getFilterLabel.js +11 -0
- package/src/filter-pill/getFilterTooltipText.js +32 -0
- package/src/filter-pill/index.js +1 -0
- package/src/filter-pill/useFilterPillNext.js +53 -0
- package/src/filter-pill-menu/FilterPillMenu.css.js +8 -0
- package/src/filter-pill-menu/FilterPillMenu.js +46 -0
- package/src/filter-pill-menu/FilterPillMenuOptions.js +26 -0
- package/src/filter-pill-menu/index.js +1 -0
- package/src/filter-provider/FilterContext.js +71 -0
- package/src/filter-provider/FilterProvider.js +188 -0
- package/src/filter-provider/filter-descriptor-utils.js +41 -0
- package/src/filter-toggle-button/FilterToggleButton.css.js +22 -0
- package/src/filter-toggle-button/FilterToggleButton.js +103 -0
- package/src/filter-utils.js +300 -0
- package/src/index.js +21 -0
- package/src/inline-filter/InlineFilter.css.js +89 -0
- package/src/inline-filter/InlineFilter.js +56 -0
- package/src/inline-filter/index.js +1 -0
- package/src/inline-filter/useInlineFilter.js +11 -0
- package/src/quick-filters/QuickFilters.css.js +39 -0
- package/src/quick-filters/QuickFilters.js +81 -0
- package/src/quick-filters/index.js +1 -0
- package/src/quick-filters/useQuickFilters.js +108 -0
- package/src/saved-filters/DeleteFilterPrompt.js +23 -0
- package/src/saved-filters/FilterNamePrompt.css.js +19 -0
- package/src/saved-filters/FilterNamePrompt.js +74 -0
- package/src/saved-filters/SavedFilterPanel.css.js +21 -0
- package/src/saved-filters/SavedFilterPanel.js +53 -0
- package/src/saved-filters/useFilterNamePrompt.js +74 -0
- package/src/saved-filters/useSavedFilterPanel.js +19 -0
- package/src/tabbed-filter-container/TabbedFilterContainer.js +61 -0
- package/src/toggle-filter/ToggleFilter.css.js +10 -0
- package/src/toggle-filter/ToggleFilter.js +68 -0
- package/src/toggle-filter/useToggleFilter.js +57 -0
- package/types/filter-clause/column-picker/ColumnPicker.d.ts +1 -1
- package/types/filter-clause/operator-picker/OperatorPicker.d.ts +1 -1
- package/types/filter-clause/value-editors/FilterClauseValueEditor.d.ts +1 -1
- package/cjs/FilterAggregator.js +0 -162
- package/cjs/FilterAggregator.js.map +0 -1
- package/cjs/FilterModel.js +0 -227
- package/cjs/FilterModel.js.map +0 -1
- package/cjs/column-filter/ColumnFilter.css.js +0 -6
- package/cjs/column-filter/ColumnFilter.css.js.map +0 -1
- package/cjs/column-filter/ColumnFilter.js +0 -83
- package/cjs/column-filter/ColumnFilter.js.map +0 -1
- package/cjs/column-filter/useColumnFilter.js +0 -139
- package/cjs/column-filter/useColumnFilter.js.map +0 -1
- package/cjs/custom-filters/CustomFilters.js +0 -99
- package/cjs/custom-filters/CustomFilters.js.map +0 -1
- package/cjs/custom-filters/filterBarFocusManagement.js +0 -35
- package/cjs/custom-filters/filterBarFocusManagement.js.map +0 -1
- package/cjs/custom-filters/useCustomFilters.js +0 -266
- package/cjs/custom-filters/useCustomFilters.js.map +0 -1
- package/cjs/custom-filters/useFilterState.js +0 -149
- package/cjs/custom-filters/useFilterState.js.map +0 -1
- package/cjs/filter-bar/FilterBar.css.js +0 -6
- package/cjs/filter-bar/FilterBar.css.js.map +0 -1
- package/cjs/filter-bar/FilterBar.js +0 -123
- package/cjs/filter-bar/FilterBar.js.map +0 -1
- package/cjs/filter-bar/useFilterBar.js +0 -37
- package/cjs/filter-bar/useFilterBar.js.map +0 -1
- package/cjs/filter-clause/ExpandoCombobox.css.js +0 -6
- package/cjs/filter-clause/ExpandoCombobox.css.js.map +0 -1
- package/cjs/filter-clause/ExpandoCombobox.js +0 -114
- package/cjs/filter-clause/ExpandoCombobox.js.map +0 -1
- package/cjs/filter-clause/FilterClause.css.js +0 -6
- package/cjs/filter-clause/FilterClause.css.js.map +0 -1
- package/cjs/filter-clause/FilterClause.js +0 -102
- package/cjs/filter-clause/FilterClause.js.map +0 -1
- package/cjs/filter-clause/column-picker/ColumnPicker.js +0 -39
- package/cjs/filter-clause/column-picker/ColumnPicker.js.map +0 -1
- package/cjs/filter-clause/column-picker/useColumnPicker.js +0 -61
- package/cjs/filter-clause/column-picker/useColumnPicker.js.map +0 -1
- package/cjs/filter-clause/filterClauseFocusManagement.js +0 -204
- package/cjs/filter-clause/filterClauseFocusManagement.js.map +0 -1
- package/cjs/filter-clause/operator-picker/OperatorPicker.js +0 -40
- package/cjs/filter-clause/operator-picker/OperatorPicker.js.map +0 -1
- package/cjs/filter-clause/operator-picker/operator-utils.js +0 -34
- package/cjs/filter-clause/operator-picker/operator-utils.js.map +0 -1
- package/cjs/filter-clause/operator-picker/useOperatorPicker.js +0 -61
- package/cjs/filter-clause/operator-picker/useOperatorPicker.js.map +0 -1
- package/cjs/filter-clause/useFilterClause.js +0 -172
- package/cjs/filter-clause/useFilterClause.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditor.js +0 -93
- package/cjs/filter-clause/value-editors/FilterClauseValueEditor.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorDate.js +0 -64
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorDate.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorNumber.js +0 -55
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorNumber.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorText.js +0 -222
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorText.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorTime.js +0 -62
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorTime.js.map +0 -1
- package/cjs/filter-container/ExtendedSingleValueFilterClause.js +0 -63
- package/cjs/filter-container/ExtendedSingleValueFilterClause.js.map +0 -1
- package/cjs/filter-container/FilterContainer.css.js +0 -6
- package/cjs/filter-container/FilterContainer.css.js.map +0 -1
- package/cjs/filter-container/FilterContainer.js +0 -145
- package/cjs/filter-container/FilterContainer.js.map +0 -1
- package/cjs/filter-container/useFilterContainer.js +0 -137
- package/cjs/filter-container/useFilterContainer.js.map +0 -1
- package/cjs/filter-context-menu/useFilterContextMenu.js +0 -129
- package/cjs/filter-context-menu/useFilterContextMenu.js.map +0 -1
- package/cjs/filter-display/FilterDisplay.css.js +0 -6
- package/cjs/filter-display/FilterDisplay.css.js.map +0 -1
- package/cjs/filter-display/FilterDisplay.js +0 -79
- package/cjs/filter-display/FilterDisplay.js.map +0 -1
- package/cjs/filter-editor/FilterClauseCombinator.css.js +0 -6
- package/cjs/filter-editor/FilterClauseCombinator.css.js.map +0 -1
- package/cjs/filter-editor/FilterClauseCombinator.js +0 -42
- package/cjs/filter-editor/FilterClauseCombinator.js.map +0 -1
- package/cjs/filter-editor/FilterEditor.css.js +0 -6
- package/cjs/filter-editor/FilterEditor.css.js.map +0 -1
- package/cjs/filter-editor/FilterEditor.js +0 -101
- package/cjs/filter-editor/FilterEditor.js.map +0 -1
- package/cjs/filter-editor/useFilterEditor.js +0 -191
- package/cjs/filter-editor/useFilterEditor.js.map +0 -1
- package/cjs/filter-panel/FilterPanel.css.js +0 -6
- package/cjs/filter-panel/FilterPanel.css.js.map +0 -1
- package/cjs/filter-panel/FilterPanel.js +0 -91
- package/cjs/filter-panel/FilterPanel.js.map +0 -1
- package/cjs/filter-panel/useFilterPanel.js +0 -68
- package/cjs/filter-panel/useFilterPanel.js.map +0 -1
- package/cjs/filter-pill/FilterMenu.js +0 -63
- package/cjs/filter-pill/FilterMenu.js.map +0 -1
- package/cjs/filter-pill/FilterPill.css.js +0 -6
- package/cjs/filter-pill/FilterPill.css.js.map +0 -1
- package/cjs/filter-pill/FilterPill.js +0 -147
- package/cjs/filter-pill/FilterPill.js.map +0 -1
- package/cjs/filter-pill/FilterPillNext.css.js +0 -6
- package/cjs/filter-pill/FilterPillNext.css.js.map +0 -1
- package/cjs/filter-pill/FilterPillNext.js +0 -91
- package/cjs/filter-pill/FilterPillNext.js.map +0 -1
- package/cjs/filter-pill/filterAsReactNode.js +0 -27
- package/cjs/filter-pill/filterAsReactNode.js.map +0 -1
- package/cjs/filter-pill/getFilterLabel.js +0 -22
- package/cjs/filter-pill/getFilterLabel.js.map +0 -1
- package/cjs/filter-pill/getFilterTooltipText.js +0 -41
- package/cjs/filter-pill/getFilterTooltipText.js.map +0 -1
- package/cjs/filter-pill/useFilterPillNext.js +0 -65
- package/cjs/filter-pill/useFilterPillNext.js.map +0 -1
- package/cjs/filter-pill-menu/FilterPillMenuOptions.js +0 -32
- package/cjs/filter-pill-menu/FilterPillMenuOptions.js.map +0 -1
- package/cjs/filter-provider/FilterContext.js +0 -105
- package/cjs/filter-provider/FilterContext.js.map +0 -1
- package/cjs/filter-provider/FilterProvider.js +0 -240
- package/cjs/filter-provider/FilterProvider.js.map +0 -1
- package/cjs/filter-provider/filter-descriptor-utils.js +0 -67
- package/cjs/filter-provider/filter-descriptor-utils.js.map +0 -1
- package/cjs/filter-utils.js +0 -367
- package/cjs/filter-utils.js.map +0 -1
- package/cjs/index.js +0 -80
- package/cjs/index.js.map +0 -1
- package/cjs/inline-filter/InlineFilter.css.js +0 -6
- package/cjs/inline-filter/InlineFilter.css.js.map +0 -1
- package/cjs/inline-filter/InlineFilter.js +0 -70
- package/cjs/inline-filter/InlineFilter.js.map +0 -1
- package/cjs/inline-filter/useInlineFilter.js +0 -16
- package/cjs/inline-filter/useInlineFilter.js.map +0 -1
- package/cjs/quick-filters/QuickFilters.css.js +0 -6
- package/cjs/quick-filters/QuickFilters.css.js.map +0 -1
- package/cjs/quick-filters/QuickFilters.js +0 -98
- package/cjs/quick-filters/QuickFilters.js.map +0 -1
- package/cjs/quick-filters/useQuickFilters.js +0 -152
- package/cjs/quick-filters/useQuickFilters.js.map +0 -1
- package/cjs/saved-filters/DeleteFilterPrompt.js +0 -37
- package/cjs/saved-filters/DeleteFilterPrompt.js.map +0 -1
- package/cjs/saved-filters/FilterNamePrompt.css.js +0 -6
- package/cjs/saved-filters/FilterNamePrompt.css.js.map +0 -1
- package/cjs/saved-filters/FilterNamePrompt.js +0 -89
- package/cjs/saved-filters/FilterNamePrompt.js.map +0 -1
- package/cjs/saved-filters/SavedFilterPanel.css.js +0 -6
- package/cjs/saved-filters/SavedFilterPanel.css.js.map +0 -1
- package/cjs/saved-filters/SavedFilterPanel.js +0 -62
- package/cjs/saved-filters/SavedFilterPanel.js.map +0 -1
- package/cjs/saved-filters/useFilterNamePrompt.js +0 -98
- package/cjs/saved-filters/useFilterNamePrompt.js.map +0 -1
- package/cjs/saved-filters/useSavedFilterPanel.js +0 -29
- package/cjs/saved-filters/useSavedFilterPanel.js.map +0 -1
- package/cjs/tabbed-filter-container/TabbedFilterContainer.css.js +0 -6
- package/cjs/tabbed-filter-container/TabbedFilterContainer.css.js.map +0 -1
- package/cjs/tabbed-filter-container/TabbedFilterContainer.js +0 -57
- package/cjs/tabbed-filter-container/TabbedFilterContainer.js.map +0 -1
- package/cjs/toggle-filter/ToggleFilter.css.js +0 -6
- package/cjs/toggle-filter/ToggleFilter.css.js.map +0 -1
- package/cjs/toggle-filter/ToggleFilter.js +0 -85
- package/cjs/toggle-filter/ToggleFilter.js.map +0 -1
- package/cjs/toggle-filter/useToggleFilter.js +0 -67
- package/cjs/toggle-filter/useToggleFilter.js.map +0 -1
- package/esm/FilterAggregator.js +0 -160
- package/esm/FilterAggregator.js.map +0 -1
- package/esm/FilterModel.js +0 -224
- package/esm/FilterModel.js.map +0 -1
- package/esm/column-filter/ColumnFilter.css.js +0 -4
- package/esm/column-filter/ColumnFilter.css.js.map +0 -1
- package/esm/column-filter/ColumnFilter.js +0 -81
- package/esm/column-filter/ColumnFilter.js.map +0 -1
- package/esm/column-filter/useColumnFilter.js +0 -137
- package/esm/column-filter/useColumnFilter.js.map +0 -1
- package/esm/custom-filters/CustomFilters.js +0 -97
- package/esm/custom-filters/CustomFilters.js.map +0 -1
- package/esm/custom-filters/filterBarFocusManagement.js +0 -33
- package/esm/custom-filters/filterBarFocusManagement.js.map +0 -1
- package/esm/custom-filters/useCustomFilters.js +0 -263
- package/esm/custom-filters/useCustomFilters.js.map +0 -1
- package/esm/custom-filters/useFilterState.js +0 -147
- package/esm/custom-filters/useFilterState.js.map +0 -1
- package/esm/filter-bar/FilterBar.css.js +0 -4
- package/esm/filter-bar/FilterBar.css.js.map +0 -1
- package/esm/filter-bar/FilterBar.js +0 -121
- package/esm/filter-bar/FilterBar.js.map +0 -1
- package/esm/filter-bar/useFilterBar.js +0 -35
- package/esm/filter-bar/useFilterBar.js.map +0 -1
- package/esm/filter-clause/ExpandoCombobox.css.js +0 -4
- package/esm/filter-clause/ExpandoCombobox.css.js.map +0 -1
- package/esm/filter-clause/ExpandoCombobox.js +0 -112
- package/esm/filter-clause/ExpandoCombobox.js.map +0 -1
- package/esm/filter-clause/FilterClause.css.js +0 -4
- package/esm/filter-clause/FilterClause.css.js.map +0 -1
- package/esm/filter-clause/FilterClause.js +0 -100
- package/esm/filter-clause/FilterClause.js.map +0 -1
- package/esm/filter-clause/column-picker/ColumnPicker.js +0 -37
- package/esm/filter-clause/column-picker/ColumnPicker.js.map +0 -1
- package/esm/filter-clause/column-picker/useColumnPicker.js +0 -59
- package/esm/filter-clause/column-picker/useColumnPicker.js.map +0 -1
- package/esm/filter-clause/filterClauseFocusManagement.js +0 -191
- package/esm/filter-clause/filterClauseFocusManagement.js.map +0 -1
- package/esm/filter-clause/operator-picker/OperatorPicker.js +0 -38
- package/esm/filter-clause/operator-picker/OperatorPicker.js.map +0 -1
- package/esm/filter-clause/operator-picker/operator-utils.js +0 -30
- package/esm/filter-clause/operator-picker/operator-utils.js.map +0 -1
- package/esm/filter-clause/operator-picker/useOperatorPicker.js +0 -59
- package/esm/filter-clause/operator-picker/useOperatorPicker.js.map +0 -1
- package/esm/filter-clause/useFilterClause.js +0 -170
- package/esm/filter-clause/useFilterClause.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditor.js +0 -91
- package/esm/filter-clause/value-editors/FilterClauseValueEditor.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorDate.js +0 -62
- package/esm/filter-clause/value-editors/FilterClauseValueEditorDate.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorNumber.js +0 -53
- package/esm/filter-clause/value-editors/FilterClauseValueEditorNumber.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorText.js +0 -220
- package/esm/filter-clause/value-editors/FilterClauseValueEditorText.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorTime.js +0 -60
- package/esm/filter-clause/value-editors/FilterClauseValueEditorTime.js.map +0 -1
- package/esm/filter-container/ExtendedSingleValueFilterClause.js +0 -60
- package/esm/filter-container/ExtendedSingleValueFilterClause.js.map +0 -1
- package/esm/filter-container/FilterContainer.css.js +0 -4
- package/esm/filter-container/FilterContainer.css.js.map +0 -1
- package/esm/filter-container/FilterContainer.js +0 -142
- package/esm/filter-container/FilterContainer.js.map +0 -1
- package/esm/filter-container/useFilterContainer.js +0 -133
- package/esm/filter-container/useFilterContainer.js.map +0 -1
- package/esm/filter-context-menu/useFilterContextMenu.js +0 -127
- package/esm/filter-context-menu/useFilterContextMenu.js.map +0 -1
- package/esm/filter-display/FilterDisplay.css.js +0 -4
- package/esm/filter-display/FilterDisplay.css.js.map +0 -1
- package/esm/filter-display/FilterDisplay.js +0 -77
- package/esm/filter-display/FilterDisplay.js.map +0 -1
- package/esm/filter-editor/FilterClauseCombinator.css.js +0 -4
- package/esm/filter-editor/FilterClauseCombinator.css.js.map +0 -1
- package/esm/filter-editor/FilterClauseCombinator.js +0 -40
- package/esm/filter-editor/FilterClauseCombinator.js.map +0 -1
- package/esm/filter-editor/FilterEditor.css.js +0 -4
- package/esm/filter-editor/FilterEditor.css.js.map +0 -1
- package/esm/filter-editor/FilterEditor.js +0 -99
- package/esm/filter-editor/FilterEditor.js.map +0 -1
- package/esm/filter-editor/useFilterEditor.js +0 -189
- package/esm/filter-editor/useFilterEditor.js.map +0 -1
- package/esm/filter-panel/FilterPanel.css.js +0 -4
- package/esm/filter-panel/FilterPanel.css.js.map +0 -1
- package/esm/filter-panel/FilterPanel.js +0 -89
- package/esm/filter-panel/FilterPanel.js.map +0 -1
- package/esm/filter-panel/useFilterPanel.js +0 -66
- package/esm/filter-panel/useFilterPanel.js.map +0 -1
- package/esm/filter-pill/FilterMenu.js +0 -61
- package/esm/filter-pill/FilterMenu.js.map +0 -1
- package/esm/filter-pill/FilterPill.css.js +0 -4
- package/esm/filter-pill/FilterPill.css.js.map +0 -1
- package/esm/filter-pill/FilterPill.js +0 -145
- package/esm/filter-pill/FilterPill.js.map +0 -1
- package/esm/filter-pill/FilterPillNext.css.js +0 -4
- package/esm/filter-pill/FilterPillNext.css.js.map +0 -1
- package/esm/filter-pill/FilterPillNext.js +0 -89
- package/esm/filter-pill/FilterPillNext.js.map +0 -1
- package/esm/filter-pill/filterAsReactNode.js +0 -25
- package/esm/filter-pill/filterAsReactNode.js.map +0 -1
- package/esm/filter-pill/getFilterLabel.js +0 -20
- package/esm/filter-pill/getFilterLabel.js.map +0 -1
- package/esm/filter-pill/getFilterTooltipText.js +0 -39
- package/esm/filter-pill/getFilterTooltipText.js.map +0 -1
- package/esm/filter-pill/useFilterPillNext.js +0 -63
- package/esm/filter-pill/useFilterPillNext.js.map +0 -1
- package/esm/filter-pill-menu/FilterPillMenuOptions.js +0 -27
- package/esm/filter-pill-menu/FilterPillMenuOptions.js.map +0 -1
- package/esm/filter-provider/FilterContext.js +0 -94
- package/esm/filter-provider/FilterContext.js.map +0 -1
- package/esm/filter-provider/FilterProvider.js +0 -238
- package/esm/filter-provider/FilterProvider.js.map +0 -1
- package/esm/filter-provider/filter-descriptor-utils.js +0 -61
- package/esm/filter-provider/filter-descriptor-utils.js.map +0 -1
- package/esm/filter-utils.js +0 -344
- package/esm/filter-utils.js.map +0 -1
- package/esm/index.js +0 -26
- package/esm/index.js.map +0 -1
- package/esm/inline-filter/InlineFilter.css.js +0 -4
- package/esm/inline-filter/InlineFilter.css.js.map +0 -1
- package/esm/inline-filter/InlineFilter.js +0 -68
- package/esm/inline-filter/InlineFilter.js.map +0 -1
- package/esm/inline-filter/useInlineFilter.js +0 -14
- package/esm/inline-filter/useInlineFilter.js.map +0 -1
- package/esm/quick-filters/QuickFilters.css.js +0 -4
- package/esm/quick-filters/QuickFilters.css.js.map +0 -1
- package/esm/quick-filters/QuickFilters.js +0 -96
- package/esm/quick-filters/QuickFilters.js.map +0 -1
- package/esm/quick-filters/useQuickFilters.js +0 -150
- package/esm/quick-filters/useQuickFilters.js.map +0 -1
- package/esm/saved-filters/DeleteFilterPrompt.js +0 -35
- package/esm/saved-filters/DeleteFilterPrompt.js.map +0 -1
- package/esm/saved-filters/FilterNamePrompt.css.js +0 -4
- package/esm/saved-filters/FilterNamePrompt.css.js.map +0 -1
- package/esm/saved-filters/FilterNamePrompt.js +0 -87
- package/esm/saved-filters/FilterNamePrompt.js.map +0 -1
- package/esm/saved-filters/SavedFilterPanel.css.js +0 -4
- package/esm/saved-filters/SavedFilterPanel.css.js.map +0 -1
- package/esm/saved-filters/SavedFilterPanel.js +0 -60
- package/esm/saved-filters/SavedFilterPanel.js.map +0 -1
- package/esm/saved-filters/useFilterNamePrompt.js +0 -95
- package/esm/saved-filters/useFilterNamePrompt.js.map +0 -1
- package/esm/saved-filters/useSavedFilterPanel.js +0 -27
- package/esm/saved-filters/useSavedFilterPanel.js.map +0 -1
- package/esm/tabbed-filter-container/TabbedFilterContainer.css.js +0 -4
- package/esm/tabbed-filter-container/TabbedFilterContainer.css.js.map +0 -1
- package/esm/tabbed-filter-container/TabbedFilterContainer.js +0 -55
- package/esm/tabbed-filter-container/TabbedFilterContainer.js.map +0 -1
- package/esm/toggle-filter/ToggleFilter.css.js +0 -4
- package/esm/toggle-filter/ToggleFilter.css.js.map +0 -1
- package/esm/toggle-filter/ToggleFilter.js +0 -83
- package/esm/toggle-filter/ToggleFilter.js.map +0 -1
- package/esm/toggle-filter/useToggleFilter.js +0 -65
- package/esm/toggle-filter/useToggleFilter.js.map +0 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
import { useCallback, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { ColumnFilterContext, useFilterContainer, useFilterContext } from "./useFilterContainer.js";
|
|
5
|
+
import { ColumnFilter } from "../column-filter/ColumnFilter.js";
|
|
6
|
+
import { filterDescriptorHasFilter, isNullFilter, useSavedFilters } from "../filter-provider/FilterContext.js";
|
|
7
|
+
import { filtersAreEqual, getColumnValueFromFilter, isBetweenOperator } from "@vuu-ui/vuu-utils";
|
|
8
|
+
import { useComponentCssInjection } from "@salt-ds/styles";
|
|
9
|
+
import { useWindow } from "@salt-ds/window";
|
|
10
|
+
import FilterContainer from "./FilterContainer.css";
|
|
11
|
+
const classBase = "vuuFilterContainer";
|
|
12
|
+
const notEmpty = (value)=>Array.isArray(value) ? "" !== value[0] && "" !== value[1] : "" !== value;
|
|
13
|
+
const FilterContainerColumnFilter = ({ column, operator = "=", variant, ...props })=>{
|
|
14
|
+
const { filterProviderKey, onChange: onFilterContextChange, onCommit: onFilterContextCommit, register } = useFilterContext(column, true);
|
|
15
|
+
const initialValue = useMemo(()=>register(column, operator), [
|
|
16
|
+
column,
|
|
17
|
+
operator,
|
|
18
|
+
register
|
|
19
|
+
]);
|
|
20
|
+
const [value, setValue] = useState(initialValue);
|
|
21
|
+
const valueRef = useRef(initialValue);
|
|
22
|
+
const { currentFilter } = useSavedFilters(filterProviderKey);
|
|
23
|
+
const currentFilterRef = useRef(currentFilter);
|
|
24
|
+
useMemo(()=>{
|
|
25
|
+
if (currentFilterRef.current.id !== currentFilter.id || !filtersAreEqual(currentFilterRef.current.filter, currentFilter.filter)) {
|
|
26
|
+
currentFilterRef.current = currentFilter;
|
|
27
|
+
if (isNullFilter(currentFilter) && notEmpty(valueRef.current)) {
|
|
28
|
+
if (Array.isArray(valueRef.current)) if ("time" === column.type) valueRef.current = [
|
|
29
|
+
"00:00:00",
|
|
30
|
+
"23:59:59"
|
|
31
|
+
];
|
|
32
|
+
else valueRef.current = [
|
|
33
|
+
"",
|
|
34
|
+
""
|
|
35
|
+
];
|
|
36
|
+
else valueRef.current = "";
|
|
37
|
+
setValue(valueRef.current);
|
|
38
|
+
} else if (filterDescriptorHasFilter(currentFilter)) {
|
|
39
|
+
const v = getColumnValueFromFilter(column, operator, currentFilter.filter);
|
|
40
|
+
if (isBetweenOperator(operator) && !Array.isArray(v) && Array.isArray(valueRef.current)) {
|
|
41
|
+
const [v1, v2] = valueRef.current;
|
|
42
|
+
if (`${v}` === v1 && "" === v2) return;
|
|
43
|
+
valueRef.current = [
|
|
44
|
+
`${v}`,
|
|
45
|
+
""
|
|
46
|
+
];
|
|
47
|
+
setValue(valueRef.current);
|
|
48
|
+
} else if (v !== valueRef.current) {
|
|
49
|
+
valueRef.current = v;
|
|
50
|
+
setValue(v);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}, [
|
|
55
|
+
column,
|
|
56
|
+
currentFilter
|
|
57
|
+
]);
|
|
58
|
+
const handleCommit = useCallback((column, op, value, extendedFilterOptions)=>{
|
|
59
|
+
valueRef.current = value;
|
|
60
|
+
setValue(value);
|
|
61
|
+
onFilterContextCommit(column, op, value, extendedFilterOptions);
|
|
62
|
+
}, [
|
|
63
|
+
onFilterContextCommit
|
|
64
|
+
]);
|
|
65
|
+
const handleColumnFilterChange = useCallback((value, column, op)=>{
|
|
66
|
+
const { current: v } = valueRef;
|
|
67
|
+
valueRef.current = Array.isArray(v) ? [
|
|
68
|
+
`${value}`,
|
|
69
|
+
v[1]
|
|
70
|
+
] : value;
|
|
71
|
+
setValue(valueRef.current);
|
|
72
|
+
onFilterContextChange(valueRef.current, column, op);
|
|
73
|
+
}, [
|
|
74
|
+
onFilterContextChange
|
|
75
|
+
]);
|
|
76
|
+
const handleColumnRangeFilterChange = useCallback((value, column, op)=>{
|
|
77
|
+
const { current: v } = valueRef;
|
|
78
|
+
valueRef.current = Array.isArray(v) ? [
|
|
79
|
+
v[0],
|
|
80
|
+
`${value}`
|
|
81
|
+
] : value;
|
|
82
|
+
setValue(valueRef.current);
|
|
83
|
+
onFilterContextChange(valueRef.current, column, op);
|
|
84
|
+
}, [
|
|
85
|
+
onFilterContextChange
|
|
86
|
+
]);
|
|
87
|
+
return /*#__PURE__*/ jsx(ColumnFilter, {
|
|
88
|
+
...props,
|
|
89
|
+
column: column,
|
|
90
|
+
onColumnFilterChange: handleColumnFilterChange,
|
|
91
|
+
onColumnRangeFilterChange: handleColumnRangeFilterChange,
|
|
92
|
+
onCommit: handleCommit,
|
|
93
|
+
operator: operator,
|
|
94
|
+
value: value,
|
|
95
|
+
variant: variant
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
const FilterContainer_FilterContainer = ({ children, className, filter, filterProviderKey, onFilterApplied, onFilterCleared, ...htmlAttributes })=>{
|
|
99
|
+
const targetWindow = useWindow();
|
|
100
|
+
useComponentCssInjection({
|
|
101
|
+
testId: "vuu-filter-container",
|
|
102
|
+
css: FilterContainer,
|
|
103
|
+
window: targetWindow
|
|
104
|
+
});
|
|
105
|
+
console.log(`[FilterContainer] current filter ${JSON.stringify(filter)}`);
|
|
106
|
+
const filterContextProps = useFilterContainer({
|
|
107
|
+
filter,
|
|
108
|
+
filterProviderKey,
|
|
109
|
+
onFilterApplied,
|
|
110
|
+
onFilterCleared
|
|
111
|
+
});
|
|
112
|
+
return /*#__PURE__*/ jsx(ColumnFilterContext.Provider, {
|
|
113
|
+
value: filterContextProps,
|
|
114
|
+
children: /*#__PURE__*/ jsx("div", {
|
|
115
|
+
...htmlAttributes,
|
|
116
|
+
className: clsx(classBase, className, "vuuScrollable"),
|
|
117
|
+
children: children
|
|
118
|
+
})
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
export { FilterContainerColumnFilter, FilterContainer_FilterContainer as FilterContainer };
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createContext, useCallback, useContext, useMemo, useRef } from "react";
|
|
2
|
+
import { getColumnValueFromFilter, isBetweenOperator, isSingleValueFilter } from "@vuu-ui/vuu-utils";
|
|
3
|
+
import { FilterAggregator } from "../FilterAggregator.js";
|
|
4
|
+
const ColumnFilterContext = createContext({
|
|
5
|
+
filterContainerInstalled: false
|
|
6
|
+
});
|
|
7
|
+
function useFilterContext(column, throwIfNoContainer = false) {
|
|
8
|
+
const ctx = useContext(ColumnFilterContext);
|
|
9
|
+
if (ctx) return {
|
|
10
|
+
filterProviderKey: ctx.filterProviderKey,
|
|
11
|
+
register: ctx.register,
|
|
12
|
+
getValue: ctx.getValue,
|
|
13
|
+
onChange: ctx.onChange,
|
|
14
|
+
onCommit: ctx.onCommit
|
|
15
|
+
};
|
|
16
|
+
if (!throwIfNoContainer) return {
|
|
17
|
+
filterContainerInstalled: false
|
|
18
|
+
};
|
|
19
|
+
throw Error("[useFilterContainer:useFilterContext] no FilterContainer installed");
|
|
20
|
+
}
|
|
21
|
+
const EmptyTuple = [
|
|
22
|
+
"",
|
|
23
|
+
""
|
|
24
|
+
];
|
|
25
|
+
const useFilterContainer = ({ filter, filterProviderKey = "GLOBAL", onFilterApplied, onFilterCleared })=>{
|
|
26
|
+
const valueRef = useRef({});
|
|
27
|
+
const filterRef = useRef(void 0);
|
|
28
|
+
filterRef.current = filter;
|
|
29
|
+
const filterAggregator = useMemo(()=>new FilterAggregator(filter), [
|
|
30
|
+
filter
|
|
31
|
+
]);
|
|
32
|
+
const register = useCallback((column, op)=>valueRef.current[column.name] = getColumnValueFromFilter(column, op, filterRef.current), []);
|
|
33
|
+
const getValue = useCallback((column, fallbackValue)=>{
|
|
34
|
+
const value = valueRef.current[column.name];
|
|
35
|
+
if (void 0 !== value) return value;
|
|
36
|
+
if (void 0 !== fallbackValue) return fallbackValue;
|
|
37
|
+
throw Error(`[useFilterContainer] column ${column.name} has not been registered`);
|
|
38
|
+
}, []);
|
|
39
|
+
const handleCommit = useCallback((column, op, value = "", extendedFilterOptions)=>{
|
|
40
|
+
if (Array.isArray(value)) {
|
|
41
|
+
if (!isBetweenOperator(op)) throw Error(`[useFilterContainer] array value is not valid for operator ${op}`);
|
|
42
|
+
if ("" === value[0] && "" === value[1]) {
|
|
43
|
+
if (!filterAggregator.remove(column)) return;
|
|
44
|
+
} else if ("string" == typeof value[0] && "string" == typeof value[1]) filterAggregator.add(column, value, op, extendedFilterOptions);
|
|
45
|
+
else throw Error(`[useFilterContainer] handleCommit value [${typeof value[0]},${typeof value[1]}] for operator ${op} supports [string,string] only`);
|
|
46
|
+
} else if ("" === value) {
|
|
47
|
+
if (!filterAggregator.remove(column)) return;
|
|
48
|
+
} else if ("string" == typeof value || "number" == typeof value) filterAggregator.add(column, value, op, extendedFilterOptions);
|
|
49
|
+
else throw Error(`[useFilterContainer] handleCommit value ${typeof value} supports string, number only`);
|
|
50
|
+
const { filter } = filterAggregator;
|
|
51
|
+
if (filter) {
|
|
52
|
+
console.log(`filter applied ${JSON.stringify(filter)}`);
|
|
53
|
+
onFilterApplied?.(filter);
|
|
54
|
+
} else onFilterCleared?.();
|
|
55
|
+
}, [
|
|
56
|
+
filterAggregator,
|
|
57
|
+
onFilterApplied,
|
|
58
|
+
onFilterCleared
|
|
59
|
+
]);
|
|
60
|
+
const handleInputChange = useCallback((value, column)=>{
|
|
61
|
+
if (filterAggregator.has(column)) if (Array.isArray(value)) {
|
|
62
|
+
const filter = filterAggregator.get(column);
|
|
63
|
+
isSingleValueFilter(filter) || handleCommit(column, "between", [
|
|
64
|
+
"",
|
|
65
|
+
""
|
|
66
|
+
]);
|
|
67
|
+
} else handleCommit(column, "=", "");
|
|
68
|
+
valueRef.current[column.name] = value;
|
|
69
|
+
}, [
|
|
70
|
+
filterAggregator,
|
|
71
|
+
handleCommit
|
|
72
|
+
]);
|
|
73
|
+
return {
|
|
74
|
+
filterContainerInstalled: true,
|
|
75
|
+
filterProviderKey,
|
|
76
|
+
onChange: handleInputChange,
|
|
77
|
+
onCommit: handleCommit,
|
|
78
|
+
getValue,
|
|
79
|
+
register
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
export { ColumnFilterContext, EmptyTuple, useFilterContainer, useFilterContext };
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { filtersAreEqual } from "@vuu-ui/vuu-utils";
|
|
2
|
+
import { useCallback, useMemo, useRef } from "react";
|
|
3
|
+
import { useSavedFilters } from "../filter-provider/FilterContext.js";
|
|
4
|
+
import { FilterAggregator } from "../FilterAggregator.js";
|
|
5
|
+
const EmptyAggregator = new FilterAggregator();
|
|
6
|
+
const defaultProps = {
|
|
7
|
+
filterColumns: "*"
|
|
8
|
+
};
|
|
9
|
+
const useFilterContextMenu = ({ filterColumns = "*", filterProviderKey } = defaultProps)=>{
|
|
10
|
+
const { currentFilter, clearCurrentFilter, setCurrentFilter } = useSavedFilters(filterProviderKey);
|
|
11
|
+
const filterAggregatorRef = useRef(EmptyAggregator);
|
|
12
|
+
useMemo(()=>{
|
|
13
|
+
if (!filtersAreEqual(currentFilter.filter, filterAggregatorRef.current.filter)) filterAggregatorRef.current = currentFilter.filter ? new FilterAggregator(currentFilter.filter) : new FilterAggregator();
|
|
14
|
+
}, [
|
|
15
|
+
currentFilter
|
|
16
|
+
]);
|
|
17
|
+
const menuBuilder = useCallback((_location, options)=>{
|
|
18
|
+
const { column, dataRow } = options;
|
|
19
|
+
const { current: fag } = filterAggregatorRef;
|
|
20
|
+
const { name, label = name } = column;
|
|
21
|
+
const value = dataRow[column.name];
|
|
22
|
+
const ClearFilter = {
|
|
23
|
+
id: "filter-clear",
|
|
24
|
+
label: "Clear filter",
|
|
25
|
+
options
|
|
26
|
+
};
|
|
27
|
+
if ("*" === filterColumns || filterColumns.includes(column.name)) {
|
|
28
|
+
const SetFilter = {
|
|
29
|
+
id: "filter-set",
|
|
30
|
+
label: `Set filter ${label} '${value}'`,
|
|
31
|
+
options
|
|
32
|
+
};
|
|
33
|
+
if (fag.isEmpty) return [
|
|
34
|
+
SetFilter
|
|
35
|
+
];
|
|
36
|
+
if (!fag.has(column)) return [
|
|
37
|
+
SetFilter,
|
|
38
|
+
{
|
|
39
|
+
id: "filter-add",
|
|
40
|
+
label: `Add ${label} '${value}' to existing filter`,
|
|
41
|
+
options
|
|
42
|
+
},
|
|
43
|
+
ClearFilter
|
|
44
|
+
];
|
|
45
|
+
if (1 === fag.count) return [
|
|
46
|
+
ClearFilter
|
|
47
|
+
];
|
|
48
|
+
else return [
|
|
49
|
+
{
|
|
50
|
+
id: "filter-remove",
|
|
51
|
+
label: `Remove ${label} '${value}' from filter`,
|
|
52
|
+
options
|
|
53
|
+
},
|
|
54
|
+
SetFilter,
|
|
55
|
+
ClearFilter
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
if (!fag.isEmpty) return [
|
|
59
|
+
ClearFilter
|
|
60
|
+
];
|
|
61
|
+
return [];
|
|
62
|
+
}, [
|
|
63
|
+
filterColumns
|
|
64
|
+
]);
|
|
65
|
+
const menuActionHandler = useCallback((menuItemId, options)=>{
|
|
66
|
+
if (!options) return false;
|
|
67
|
+
{
|
|
68
|
+
const { current: fag } = filterAggregatorRef;
|
|
69
|
+
const { column, dataRow } = options;
|
|
70
|
+
switch(menuItemId){
|
|
71
|
+
case "filter-clear":
|
|
72
|
+
clearCurrentFilter();
|
|
73
|
+
break;
|
|
74
|
+
case "filter-add":
|
|
75
|
+
{
|
|
76
|
+
const value = dataRow[column.name];
|
|
77
|
+
fag.add(column, value, "=");
|
|
78
|
+
if (fag.filter) setCurrentFilter(fag.filter);
|
|
79
|
+
}
|
|
80
|
+
break;
|
|
81
|
+
case "filter-remove":
|
|
82
|
+
fag.remove(column);
|
|
83
|
+
if (fag.filter) setCurrentFilter(fag.filter);
|
|
84
|
+
break;
|
|
85
|
+
case "filter-set":
|
|
86
|
+
{
|
|
87
|
+
const value = dataRow[column.name];
|
|
88
|
+
fag.clear();
|
|
89
|
+
fag.add(column, value, "=");
|
|
90
|
+
if (fag.filter) setCurrentFilter(fag.filter);
|
|
91
|
+
}
|
|
92
|
+
break;
|
|
93
|
+
default:
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}, [
|
|
98
|
+
clearCurrentFilter,
|
|
99
|
+
setCurrentFilter
|
|
100
|
+
]);
|
|
101
|
+
return {
|
|
102
|
+
menuActionHandler,
|
|
103
|
+
menuBuilder
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
export { useFilterContextMenu };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const css = `
|
|
2
|
+
.vuuFilterDisplay {
|
|
3
|
+
gap: var(--salt-spacing-50);
|
|
4
|
+
padding: var(--vuuFilterDisplay-padding, var(--salt-spacing-200));
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
width: fit-content;
|
|
7
|
+
display: flex;
|
|
8
|
+
|
|
9
|
+
& .vuuFilterDisplay-filter-clause {
|
|
10
|
+
align-items: center;
|
|
11
|
+
gap: var(--salt-spacing-200);
|
|
12
|
+
white-space: no;
|
|
13
|
+
justify-content: space-between;
|
|
14
|
+
display: flex;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
& .vuuFilterDisplay-column {
|
|
18
|
+
white-space: no;
|
|
19
|
+
flex: auto;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
& .vuuFilterDisplay-value {
|
|
23
|
+
text-align: right;
|
|
24
|
+
white-space: nowrap;
|
|
25
|
+
flex: 0 0 120px;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
`;
|
|
31
|
+
export default css;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useComponentCssInjection } from "@salt-ds/styles";
|
|
3
|
+
import { useWindow } from "@salt-ds/window";
|
|
4
|
+
import clsx from "clsx";
|
|
5
|
+
import { forwardRef, useCallback } from "react";
|
|
6
|
+
import { getFilterClausesForDisplay } from "../filter-utils.js";
|
|
7
|
+
import FilterDisplay_0 from "./FilterDisplay.css";
|
|
8
|
+
import { IconButton } from "@vuu-ui/vuu-ui-controls";
|
|
9
|
+
import { queryClosest } from "@vuu-ui/vuu-utils";
|
|
10
|
+
const classBase = "vuuFilterDisplay";
|
|
11
|
+
const getColumnLabel = (columnName, columns)=>{
|
|
12
|
+
if (columns) {
|
|
13
|
+
const column = columns.find((c)=>c.name === columnName);
|
|
14
|
+
if (column) return column.label ?? columnName;
|
|
15
|
+
}
|
|
16
|
+
return columnName;
|
|
17
|
+
};
|
|
18
|
+
const FilterDisplay_FilterDisplay = /*#__PURE__*/ forwardRef(function({ allowDelete = false, className, columns, filter, onDeleteFilterClause, ...htmlAttributes }, forwardedRef) {
|
|
19
|
+
const targetWindow = useWindow();
|
|
20
|
+
useComponentCssInjection({
|
|
21
|
+
testId: "vuu-filter-display",
|
|
22
|
+
css: FilterDisplay_0,
|
|
23
|
+
window: targetWindow
|
|
24
|
+
});
|
|
25
|
+
const handleDelete = useCallback((e)=>{
|
|
26
|
+
const { dataset: { columnName } } = queryClosest(e.target, "[data-column-name]", true);
|
|
27
|
+
if (columnName) onDeleteFilterClause?.(columnName);
|
|
28
|
+
}, [
|
|
29
|
+
onDeleteFilterClause
|
|
30
|
+
]);
|
|
31
|
+
const filterClauseList = getFilterClausesForDisplay(filter, columns);
|
|
32
|
+
return /*#__PURE__*/ jsx("div", {
|
|
33
|
+
...htmlAttributes,
|
|
34
|
+
className: clsx(classBase, className),
|
|
35
|
+
ref: forwardedRef,
|
|
36
|
+
children: filterClauseList.map(([columnName, value])=>/*#__PURE__*/ jsxs("div", {
|
|
37
|
+
className: `${classBase}-filter-clause`,
|
|
38
|
+
"data-column-name": columnName,
|
|
39
|
+
children: [
|
|
40
|
+
/*#__PURE__*/ jsx("span", {
|
|
41
|
+
className: `${classBase}-column`,
|
|
42
|
+
children: getColumnLabel(columnName)
|
|
43
|
+
}),
|
|
44
|
+
/*#__PURE__*/ jsx("span", {
|
|
45
|
+
className: `${classBase}-value`,
|
|
46
|
+
children: value
|
|
47
|
+
}),
|
|
48
|
+
allowDelete ? /*#__PURE__*/ jsx(IconButton, {
|
|
49
|
+
"data-embedded": true,
|
|
50
|
+
icon: "close",
|
|
51
|
+
appearance: "transparent",
|
|
52
|
+
sentiment: "neutral",
|
|
53
|
+
onClick: handleDelete
|
|
54
|
+
}) : null
|
|
55
|
+
]
|
|
56
|
+
}, columnName), [])
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
export { FilterDisplay_FilterDisplay as FilterDisplay };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const css = `
|
|
2
|
+
.vuuFilterClauseCombinator {
|
|
3
|
+
--saltButton-height: calc(var(--salt-spacing-400));
|
|
4
|
+
padding: 0 4px;
|
|
5
|
+
font-size: 9px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.vuuFilterClauseCombinator:focus {
|
|
9
|
+
background-color: var(--vuu-color-gray-50);
|
|
10
|
+
color: #fff;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
`;
|
|
15
|
+
export default css;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { CycleStateButton } from "@vuu-ui/vuu-ui-controls";
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
import { useComponentCssInjection } from "@salt-ds/styles";
|
|
5
|
+
import { useWindow } from "@salt-ds/window";
|
|
6
|
+
import FilterClauseCombinator from "./FilterClauseCombinator.css";
|
|
7
|
+
const classBase = "vuuFilterClauseCombinator";
|
|
8
|
+
const FilterClauseCombinator_FilterClauseCombinator = ({ onChange, onKeyDown, operator })=>{
|
|
9
|
+
const targetWindow = useWindow();
|
|
10
|
+
useComponentCssInjection({
|
|
11
|
+
testId: "vuu-filterclause-combinator",
|
|
12
|
+
css: FilterClauseCombinator,
|
|
13
|
+
window: targetWindow
|
|
14
|
+
});
|
|
15
|
+
const handleChange = useCallback((value)=>{
|
|
16
|
+
onChange(value);
|
|
17
|
+
}, [
|
|
18
|
+
onChange
|
|
19
|
+
]);
|
|
20
|
+
return /*#__PURE__*/ jsx(CycleStateButton, {
|
|
21
|
+
className: classBase,
|
|
22
|
+
onChange: handleChange,
|
|
23
|
+
onKeyDown: onKeyDown,
|
|
24
|
+
value: operator,
|
|
25
|
+
values: [
|
|
26
|
+
"and",
|
|
27
|
+
"or"
|
|
28
|
+
],
|
|
29
|
+
variant: "primary"
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
export { FilterClauseCombinator_FilterClauseCombinator as FilterClauseCombinator };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const css = `
|
|
2
|
+
.vuuFilterEditor {
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: var(--salt-spacing-200);
|
|
5
|
+
height: var(--vuuFilterEditor-height, calc(var(--salt-size-base) + var(--salt-size-unit)));
|
|
6
|
+
grid-area: 2 / 1 / 3 / 4;
|
|
7
|
+
width: 100%;
|
|
8
|
+
display: flex;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
`;
|
|
13
|
+
export default css;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createElement } from "react";
|
|
3
|
+
import { SplitButton } from "@vuu-ui/vuu-ui-controls";
|
|
4
|
+
import { Button } from "@salt-ds/core";
|
|
5
|
+
import { useComponentCssInjection } from "@salt-ds/styles";
|
|
6
|
+
import { useWindow } from "@salt-ds/window";
|
|
7
|
+
import { FilterClause } from "../filter-clause/index.js";
|
|
8
|
+
import { FilterClauseCombinator } from "./FilterClauseCombinator.js";
|
|
9
|
+
import { useFilterEditor } from "./useFilterEditor.js";
|
|
10
|
+
import FilterEditor from "./FilterEditor.css";
|
|
11
|
+
const classBase = "vuuFilterEditor";
|
|
12
|
+
const FilterEditor_FilterEditor = ({ columnDescriptors, filter, onCancel, onSave, vuuTable, ...htmlAttributes })=>{
|
|
13
|
+
const targetWindow = useWindow();
|
|
14
|
+
useComponentCssInjection({
|
|
15
|
+
testId: "vuu-filter-editor",
|
|
16
|
+
css: FilterEditor,
|
|
17
|
+
window: targetWindow
|
|
18
|
+
});
|
|
19
|
+
const { columnsByName, filterModel, focusSaveButton, setContainer, onCancelFilterClause, onCancelFilterEdit, onChangeFilterCombinator, onKeyDownCombinator, saveButtonRef, saveButtonProps } = useFilterEditor({
|
|
20
|
+
columnDescriptors,
|
|
21
|
+
filter,
|
|
22
|
+
onCancel,
|
|
23
|
+
onSave
|
|
24
|
+
});
|
|
25
|
+
const getContents = ()=>{
|
|
26
|
+
const { op } = filterModel;
|
|
27
|
+
const content = [];
|
|
28
|
+
filterModel.filterClauses.forEach((filterClauseModel, i)=>{
|
|
29
|
+
if (i > 0 && op) content.push(/*#__PURE__*/ jsx(FilterClauseCombinator, {
|
|
30
|
+
onChange: onChangeFilterCombinator,
|
|
31
|
+
onKeyDown: onKeyDownCombinator,
|
|
32
|
+
operator: op
|
|
33
|
+
}, `filter-operator-${i}`));
|
|
34
|
+
content.push(/*#__PURE__*/ jsx(FilterClause, {
|
|
35
|
+
columnsByName: columnsByName,
|
|
36
|
+
"data-index": i,
|
|
37
|
+
filterClauseModel: filterClauseModel,
|
|
38
|
+
onCancel: onCancelFilterClause,
|
|
39
|
+
onFocusSave: focusSaveButton,
|
|
40
|
+
vuuTable: vuuTable
|
|
41
|
+
}, `editor-${i}`));
|
|
42
|
+
});
|
|
43
|
+
return content;
|
|
44
|
+
};
|
|
45
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
46
|
+
...htmlAttributes,
|
|
47
|
+
className: classBase,
|
|
48
|
+
ref: setContainer,
|
|
49
|
+
children: [
|
|
50
|
+
getContents(),
|
|
51
|
+
/*#__PURE__*/ createElement(SplitButton, {
|
|
52
|
+
...saveButtonProps,
|
|
53
|
+
disabled: !filterModel.isValid,
|
|
54
|
+
key: "save-button",
|
|
55
|
+
ref: saveButtonRef
|
|
56
|
+
}, "Save"),
|
|
57
|
+
/*#__PURE__*/ jsx(Button, {
|
|
58
|
+
onClick: onCancelFilterEdit,
|
|
59
|
+
variant: "secondary",
|
|
60
|
+
children: "Cancel"
|
|
61
|
+
})
|
|
62
|
+
]
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
export { FilterEditor_FilterEditor as FilterEditor };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./FilterEditor.js";
|