@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FilterProvider.js","sources":["../../../../packages/vuu-filters/src/filter-provider/FilterProvider.tsx"],"sourcesContent":["import {\n FilterContainerFilter,\n FilterContainerFilterDescriptor,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ReactElement, ReactNode, useCallback, useMemo, useState } from \"react\";\nimport { FilterNamePrompt } from \"../saved-filters/FilterNamePrompt\";\nimport { DeleteFilterPrompt } from \"../saved-filters/DeleteFilterPrompt\";\nimport {\n activateFilter,\n findFilter,\n insertOrReplaceFilter,\n renameFilter,\n} from \"./filter-descriptor-utils\";\nimport { uuid } from \"@vuu-ui/vuu-utils\";\nimport {\n EMPTY_FILTER,\n EmptyFilterDescriptor,\n FilterContext,\n FilterContextFilterMenuActionHandler,\n NULL_FILTER,\n NullFilterDescriptor,\n UNSAVED_FILTER,\n} from \"./FilterContext\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\n\nconst findActiveFilter = (\n filterDescriptors: FilterContainerFilterDescriptor[],\n) => filterDescriptors.find((f) => f.active) ?? NullFilterDescriptor;\n\nconst findFilterByName = (\n filterDescriptors: FilterContainerFilterDescriptor[],\n name: string,\n) => filterDescriptors.find((f) => f.filter?.name === name);\n\ntype SavedFilterMap = Map<string, FilterContainerFilterDescriptor[]>;\nexport type SavedFilterRecord = Record<\n string,\n FilterContainerFilterDescriptor[]\n>;\n\nconst mapToRecord = (savedFilters: SavedFilterMap) => {\n const record: SavedFilterRecord = {};\n savedFilters.forEach((filterDescriptors, key) => {\n record[key] = filterDescriptors;\n });\n return record;\n};\n\nexport interface FilterProviderProps {\n children: ReactNode;\n onFiltersSaved?: (savedFilters: SavedFilterRecord) => void;\n savedFilters?: SavedFilterRecord;\n filterNameMaxLength?: number;\n}\n\nexport const FilterProvider = ({\n children,\n onFiltersSaved,\n savedFilters: savedFiltersProp,\n filterNameMaxLength,\n}: FilterProviderProps) => {\n const [, forceRefresh] = useState({});\n const savedFilters = useMemo<SavedFilterMap>(\n () =>\n savedFiltersProp ? new Map(Object.entries(savedFiltersProp)) : new Map(),\n [savedFiltersProp],\n );\n\n const [dialog, setDialog] = useState<ReactElement | null>(null);\n\n const deleteFilter = useCallback(\n (key: string, filterId: string) => {\n const filterDescriptors = savedFilters.get(key);\n if (filterDescriptors === undefined) {\n throw Error(`[FilterProvider] deleteFilter, key ${key} not found`);\n } else {\n const newFilterDescriptors = filterDescriptors.filter(\n ({ id }) => id !== filterId,\n );\n savedFilters.set(key, newFilterDescriptors);\n if (filterId !== UNSAVED_FILTER) {\n onFiltersSaved?.(mapToRecord(savedFilters));\n }\n }\n },\n [onFiltersSaved, savedFilters],\n );\n\n const applyNewName = useCallback(\n (key: string, filterId: string, name: string) => {\n const filterDescriptors = savedFilters.get(key);\n if (filterDescriptors === undefined) {\n throw Error(`[FilterProvider] applyNewName, key ${key} not found`);\n } else {\n const newFilterDescriptors = renameFilter(\n filterDescriptors,\n filterId,\n name,\n );\n savedFilters.set(key, newFilterDescriptors);\n onFiltersSaved?.(mapToRecord(savedFilters));\n }\n },\n [onFiltersSaved, savedFilters],\n );\n\n const promptForFilterName = useCallback(\n (key: string, { filter, id }: FilterContainerFilterDescriptor) => {\n const originalFilterName = filter?.name ?? \"\";\n setDialog(\n <FilterNamePrompt\n filterName={filter?.name}\n title=\"Rename filter\"\n onClose={() => setDialog(null)}\n onConfirm={(name) => {\n setDialog(null);\n if (originalFilterName !== name) {\n applyNewName(key, id, name);\n }\n }}\n filterNameMaxLength={filterNameMaxLength}\n />,\n );\n },\n [applyNewName, filterNameMaxLength],\n );\n\n const promptForConfirmationOfDelete = useCallback(\n (\n key: string,\n filterDescriptor: FilterContainerFilterDescriptor,\n columns?: ColumnDescriptor[],\n ) => {\n setDialog(\n <DeleteFilterPrompt\n columns={columns}\n filterDescriptor={filterDescriptor}\n onConfirm={() => {\n setDialog(null);\n deleteFilter(key, filterDescriptor.id);\n }}\n onClose={() => setDialog(null)}\n />,\n );\n },\n [deleteFilter],\n );\n\n const handleFilterMenuAction =\n useCallback<FilterContextFilterMenuActionHandler>(\n (key: string, filterId, actionType, columns) => {\n const filterDescriptors = savedFilters.get(key);\n if (filterDescriptors === undefined) {\n throw Error(`[FilterProvider] applyNewName, key ${key} not found`);\n } else {\n const targetFilter = findFilter(filterDescriptors, filterId);\n switch (actionType) {\n case \"close\":\n console.log(`close filter ${filterId}`);\n break;\n case \"edit\":\n console.log(`edit filter ${filterId}`);\n break;\n case \"remove\":\n if (filterId === UNSAVED_FILTER) {\n console.log(\"remove unsaved filter\");\n } else {\n promptForConfirmationOfDelete(key, targetFilter, columns);\n }\n break;\n case \"rename\":\n return promptForFilterName(key, targetFilter);\n }\n }\n },\n [promptForConfirmationOfDelete, promptForFilterName, savedFilters],\n );\n\n const handleSaveFilter = useCallback(\n (key: string, name: string) => {\n const filterDescriptors = savedFilters.get(key);\n if (filterDescriptors === undefined) {\n throw Error(`[FilterProvider] applyNewName, key ${key} not found`);\n } else {\n const activeFilter = findActiveFilter(filterDescriptors);\n if (activeFilter.filter === null) {\n throw Error(\"[FilterProvider] cannot save an empty filter\");\n }\n const filterWithSameName = findFilterByName(filterDescriptors, name);\n // We are always renaming the active filter, how this will play out depends on whether\n // the name is unique and has actually changed\n if (activeFilter === filterWithSameName) {\n // name has not changed\n return;\n } else if (filterWithSameName !== undefined) {\n // we are renaming the active filter, but another filter already has the same name,\n // keep the active filter, remove the duplicate.\n const newFilterDescriptors = filterDescriptors.reduce<\n FilterContainerFilterDescriptor[]\n >((list, filterDescriptor) => {\n if (filterDescriptor === activeFilter) {\n list.push({\n active: true,\n filter: { ...filterDescriptor.filter, name },\n id: uuid(),\n name,\n } as FilterContainerFilterDescriptor);\n } else if (filterDescriptor.filter?.name !== name) {\n list.push(filterDescriptor);\n }\n return list;\n }, []);\n savedFilters.set(key, newFilterDescriptors);\n } else {\n const newFilterDescriptors = filterDescriptors.map(\n (filterDescriptor) =>\n filterDescriptor === activeFilter\n ? ({\n active: true,\n filter: { ...filterDescriptor.filter, name },\n id: uuid(),\n name,\n } as FilterContainerFilterDescriptor)\n : filterDescriptor,\n );\n savedFilters.set(key, newFilterDescriptors);\n onFiltersSaved?.(mapToRecord(savedFilters));\n }\n }\n forceRefresh({});\n },\n [onFiltersSaved, savedFilters],\n );\n\n /**\n * Allows switching between saved filters. Alternatively, an anonymous\n * filter can be assigned. This is to allow for a dynamically created\n * filter to be active.\n */\n const setCurrentFilter = useCallback(\n (key: string, filter: string | FilterContainerFilter) => {\n const filterDescriptors = savedFilters.get(key) ?? [];\n\n if (filter === NULL_FILTER) {\n const newFilterDescriptors = insertOrReplaceFilter(\n filterDescriptors,\n NullFilterDescriptor,\n );\n savedFilters.set(key, newFilterDescriptors);\n } else if (filter === EMPTY_FILTER) {\n const newFilterDescriptors = insertOrReplaceFilter(\n filterDescriptors,\n EmptyFilterDescriptor,\n );\n savedFilters.set(key, newFilterDescriptors);\n } else if (typeof filter === \"string\") {\n const newFilterDescriptors = activateFilter(filterDescriptors, filter);\n savedFilters.set(key, newFilterDescriptors);\n } else if (filter) {\n const newFilterDescriptors = insertOrReplaceFilter(filterDescriptors, {\n active: true,\n filter,\n id: UNSAVED_FILTER,\n });\n savedFilters.set(key, newFilterDescriptors);\n } else {\n deleteFilter(key, UNSAVED_FILTER);\n }\n\n forceRefresh({});\n },\n [deleteFilter, savedFilters],\n );\n\n const clearCurrentFilter = useCallback(\n (key: string) => {\n setCurrentFilter(key, NULL_FILTER);\n },\n [setCurrentFilter],\n );\n\n return (\n <FilterContext.Provider\n value={{\n onFilterMenuAction: handleFilterMenuAction,\n deleteFilter,\n saveFilter: handleSaveFilter,\n filterDescriptors: savedFilters,\n clearCurrentFilter,\n setCurrentFilter,\n filterNameMaxLength,\n }}\n >\n {children}\n {dialog}\n </FilterContext.Provider>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { EMPTY_FILTER, NULL_FILTER, UNSAVED_FILTER } from './FilterContext.js';
|
|
2
|
-
|
|
3
|
-
function findFilter(filterDescriptors, filterId, throwIfNotFound = true) {
|
|
4
|
-
const filter = filterDescriptors.find(({ id }) => id === filterId);
|
|
5
|
-
if (filter) {
|
|
6
|
-
return filter;
|
|
7
|
-
} else if (throwIfNotFound) {
|
|
8
|
-
throw Error(`[FilterProvider] findFilter, filter not found ${filterId}`);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
const deactivateFilter = (filterDescriptors) => activateFilter(filterDescriptors, void 0);
|
|
12
|
-
const namedFilters = (filterDescriptor) => filterDescriptor.id !== EMPTY_FILTER && filterDescriptor.id !== NULL_FILTER && filterDescriptor.id !== UNSAVED_FILTER;
|
|
13
|
-
const activateFilter = (filterDescriptors, activeFilterId) => filterDescriptors.map((f) => {
|
|
14
|
-
if (f.id === activeFilterId) {
|
|
15
|
-
return {
|
|
16
|
-
...f,
|
|
17
|
-
active: !f.active
|
|
18
|
-
};
|
|
19
|
-
} else if (f.active) {
|
|
20
|
-
return {
|
|
21
|
-
...f,
|
|
22
|
-
active: false
|
|
23
|
-
};
|
|
24
|
-
} else {
|
|
25
|
-
return f;
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
const insertOrReplaceFilter = (filterDescriptors, filterDescriptor) => {
|
|
29
|
-
if (!filterDescriptors.some(({ id }) => id === filterDescriptor.id)) {
|
|
30
|
-
return deactivateFilter(filterDescriptors).filter(namedFilters).concat(filterDescriptor);
|
|
31
|
-
} else {
|
|
32
|
-
return filterDescriptors.map((f) => {
|
|
33
|
-
if (f.id === filterDescriptor.id) {
|
|
34
|
-
return filterDescriptor;
|
|
35
|
-
} else if (f.active) {
|
|
36
|
-
return {
|
|
37
|
-
...f,
|
|
38
|
-
active: false
|
|
39
|
-
};
|
|
40
|
-
} else {
|
|
41
|
-
return f;
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
const renameFilter = (filterDescriptors, filterId, name) => filterDescriptors.map((f) => {
|
|
47
|
-
if (f.id === filterId && f.filter !== null) {
|
|
48
|
-
return {
|
|
49
|
-
...f,
|
|
50
|
-
filter: {
|
|
51
|
-
...f.filter,
|
|
52
|
-
name
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
} else {
|
|
56
|
-
return f;
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
export { activateFilter, deactivateFilter, findFilter, insertOrReplaceFilter, renameFilter };
|
|
61
|
-
//# sourceMappingURL=filter-descriptor-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter-descriptor-utils.js","sources":["../../../../packages/vuu-filters/src/filter-provider/filter-descriptor-utils.ts"],"sourcesContent":["import { FilterContainerFilterDescriptor } from \"@vuu-ui/vuu-filter-types\";\nimport { EMPTY_FILTER, NULL_FILTER, UNSAVED_FILTER } from \"./FilterContext\";\n\nexport function findFilter(\n filterDescriptors: FilterContainerFilterDescriptor[],\n filterId: string,\n throwIfNotFound?: true,\n): FilterContainerFilterDescriptor;\nexport function findFilter(\n filterDescriptors: FilterContainerFilterDescriptor[],\n filterId: string,\n throwIfNotFound: false,\n): FilterContainerFilterDescriptor | undefined;\nexport function findFilter(\n filterDescriptors: FilterContainerFilterDescriptor[],\n filterId: string,\n throwIfNotFound = true,\n) {\n const filter = filterDescriptors.find(({ id }) => id === filterId);\n if (filter) {\n return filter;\n } else if (throwIfNotFound) {\n throw Error(`[FilterProvider] findFilter, filter not found ${filterId}`);\n }\n}\n\nexport const deactivateFilter = (\n filterDescriptors: FilterContainerFilterDescriptor[],\n) => activateFilter(filterDescriptors, undefined);\n\nconst namedFilters = (filterDescriptor: FilterContainerFilterDescriptor) =>\n filterDescriptor.id !== EMPTY_FILTER &&\n filterDescriptor.id !== NULL_FILTER &&\n filterDescriptor.id !== UNSAVED_FILTER;\n\nexport const activateFilter = (\n filterDescriptors: FilterContainerFilterDescriptor[],\n activeFilterId?: string,\n) =>\n filterDescriptors.map<FilterContainerFilterDescriptor>((f) => {\n if (f.id === activeFilterId) {\n return {\n ...f,\n active: !f.active,\n };\n } else if (f.active) {\n return {\n ...f,\n active: false,\n };\n } else {\n return f;\n }\n });\n\nexport const insertOrReplaceFilter = (\n filterDescriptors: FilterContainerFilterDescriptor[],\n filterDescriptor: FilterContainerFilterDescriptor,\n) => {\n if (!filterDescriptors.some(({ id }) => id === filterDescriptor.id)) {\n return deactivateFilter(filterDescriptors)\n .filter(namedFilters)\n .concat(filterDescriptor);\n } else {\n return filterDescriptors.map<FilterContainerFilterDescriptor>((f) => {\n if (f.id === filterDescriptor.id) {\n return filterDescriptor;\n } else if (f.active) {\n return {\n ...f,\n active: false,\n };\n } else {\n return f;\n }\n });\n }\n};\n\nexport const renameFilter = (\n filterDescriptors: FilterContainerFilterDescriptor[],\n filterId: string,\n name: string,\n) =>\n filterDescriptors.map<FilterContainerFilterDescriptor>((f) => {\n if (f.id === filterId && f.filter !== null) {\n return {\n ...f,\n filter: {\n ...f.filter,\n name,\n },\n };\n } else {\n return f;\n }\n });\n"],"names":[],"mappings":";;AAaO,SAAS,UACd,CAAA,iBAAA,EACA,QACA,EAAA,eAAA,GAAkB,IAClB,EAAA;AACA,EAAM,MAAA,MAAA,GAAS,kBAAkB,IAAK,CAAA,CAAC,EAAE,EAAG,EAAA,KAAM,OAAO,QAAQ,CAAA;AACjE,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,OAAA,MAAA;AAAA,aACE,eAAiB,EAAA;AAC1B,IAAM,MAAA,KAAA,CAAM,CAAiD,8CAAA,EAAA,QAAQ,CAAE,CAAA,CAAA;AAAA;AAE3E;AAEO,MAAM,gBAAmB,GAAA,CAC9B,iBACG,KAAA,cAAA,CAAe,mBAAmB,KAAS,CAAA;AAEhD,MAAM,YAAA,GAAe,CAAC,gBAAA,KACpB,gBAAiB,CAAA,EAAA,KAAO,gBACxB,gBAAiB,CAAA,EAAA,KAAO,WACxB,IAAA,gBAAA,CAAiB,EAAO,KAAA,cAAA;AAEnB,MAAM,iBAAiB,CAC5B,iBAAA,EACA,mBAEA,iBAAkB,CAAA,GAAA,CAAqC,CAAC,CAAM,KAAA;AAC5D,EAAI,IAAA,CAAA,CAAE,OAAO,cAAgB,EAAA;AAC3B,IAAO,OAAA;AAAA,MACL,GAAG,CAAA;AAAA,MACH,MAAA,EAAQ,CAAC,CAAE,CAAA;AAAA,KACb;AAAA,GACF,MAAA,IAAW,EAAE,MAAQ,EAAA;AACnB,IAAO,OAAA;AAAA,MACL,GAAG,CAAA;AAAA,MACH,MAAQ,EAAA;AAAA,KACV;AAAA,GACK,MAAA;AACL,IAAO,OAAA,CAAA;AAAA;AAEX,CAAC;AAEU,MAAA,qBAAA,GAAwB,CACnC,iBAAA,EACA,gBACG,KAAA;AACH,EAAI,IAAA,CAAC,iBAAkB,CAAA,IAAA,CAAK,CAAC,EAAE,IAAS,KAAA,EAAA,KAAO,gBAAiB,CAAA,EAAE,CAAG,EAAA;AACnE,IAAA,OAAO,iBAAiB,iBAAiB,CAAA,CACtC,OAAO,YAAY,CAAA,CACnB,OAAO,gBAAgB,CAAA;AAAA,GACrB,MAAA;AACL,IAAO,OAAA,iBAAA,CAAkB,GAAqC,CAAA,CAAC,CAAM,KAAA;AACnE,MAAI,IAAA,CAAA,CAAE,EAAO,KAAA,gBAAA,CAAiB,EAAI,EAAA;AAChC,QAAO,OAAA,gBAAA;AAAA,OACT,MAAA,IAAW,EAAE,MAAQ,EAAA;AACnB,QAAO,OAAA;AAAA,UACL,GAAG,CAAA;AAAA,UACH,MAAQ,EAAA;AAAA,SACV;AAAA,OACK,MAAA;AACL,QAAO,OAAA,CAAA;AAAA;AACT,KACD,CAAA;AAAA;AAEL;AAEa,MAAA,YAAA,GAAe,CAC1B,iBACA,EAAA,QAAA,EACA,SAEA,iBAAkB,CAAA,GAAA,CAAqC,CAAC,CAAM,KAAA;AAC5D,EAAA,IAAI,CAAE,CAAA,EAAA,KAAO,QAAY,IAAA,CAAA,CAAE,WAAW,IAAM,EAAA;AAC1C,IAAO,OAAA;AAAA,MACL,GAAG,CAAA;AAAA,MACH,MAAQ,EAAA;AAAA,QACN,GAAG,CAAE,CAAA,MAAA;AAAA,QACL;AAAA;AACF,KACF;AAAA,GACK,MAAA;AACL,IAAO,OAAA,CAAA;AAAA;AAEX,CAAC;;;;"}
|
package/esm/filter-utils.js
DELETED
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
import { isMultiClauseFilter, isInFilter, isAndFilter, partition, isOrFilter, isSingleValueFilter, isMultiValueFilter, extractFilterForColumn, isBetweenFilter, isTimeDataValue, Time, filtersAreEqual } from '@vuu-ui/vuu-utils';
|
|
2
|
-
|
|
3
|
-
const AND = "and";
|
|
4
|
-
const EQUALS = "=";
|
|
5
|
-
const GREATER_THAN = ">";
|
|
6
|
-
const LESS_THAN = "<";
|
|
7
|
-
const OR = "or";
|
|
8
|
-
const STARTS_WITH = "starts";
|
|
9
|
-
const ENDS_WITH = "ends";
|
|
10
|
-
const IN = "in";
|
|
11
|
-
const filterClauses = (filter, clauses = []) => {
|
|
12
|
-
if (filter) {
|
|
13
|
-
if (isMultiClauseFilter(filter)) {
|
|
14
|
-
filter.filters.forEach((f) => clauses.push(...filterClauses(f)));
|
|
15
|
-
} else {
|
|
16
|
-
clauses.push(filter);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return clauses;
|
|
20
|
-
};
|
|
21
|
-
const DEFAULT_ADD_FILTER_OPTS = {
|
|
22
|
-
combineWith: "and"
|
|
23
|
-
};
|
|
24
|
-
const removeLastClause = (filter) => {
|
|
25
|
-
const { filters } = filter;
|
|
26
|
-
if (filters.length > 2) {
|
|
27
|
-
return {
|
|
28
|
-
...filter,
|
|
29
|
-
filters: filter.filters.slice(0, -1)
|
|
30
|
-
};
|
|
31
|
-
} else {
|
|
32
|
-
return filter.filters[0];
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
const addClause = (existingFilter, clause, { combineWith = AND } = DEFAULT_ADD_FILTER_OPTS) => {
|
|
36
|
-
if (isMultiClauseFilter(existingFilter) && existingFilter.op === combineWith) {
|
|
37
|
-
return {
|
|
38
|
-
...existingFilter,
|
|
39
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
40
|
-
// @ts-ignore
|
|
41
|
-
filters: existingFilter.filters.concat(clause)
|
|
42
|
-
};
|
|
43
|
-
} else {
|
|
44
|
-
return {
|
|
45
|
-
op: combineWith,
|
|
46
|
-
filters: [existingFilter, clause]
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
const addFilter = (existingFilter, filter, { combineWith = AND } = DEFAULT_ADD_FILTER_OPTS) => {
|
|
51
|
-
if (includesNoValues(filter)) {
|
|
52
|
-
if (isMultiClauseFilter(filter)) ; else {
|
|
53
|
-
existingFilter = removeFilterForColumn(existingFilter, {
|
|
54
|
-
name: filter.column
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
} else if (includesAllValues(filter)) {
|
|
58
|
-
if (isMultiClauseFilter(filter)) ;
|
|
59
|
-
return removeFilterForColumn(existingFilter, { name: filter.column ?? "" });
|
|
60
|
-
}
|
|
61
|
-
if (!existingFilter) {
|
|
62
|
-
return filter;
|
|
63
|
-
}
|
|
64
|
-
if (!filter) {
|
|
65
|
-
return existingFilter;
|
|
66
|
-
}
|
|
67
|
-
if (existingFilter.op === AND && filter.op === AND) {
|
|
68
|
-
return {
|
|
69
|
-
op: AND,
|
|
70
|
-
filters: combine(existingFilter.filters, filter.filters)
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
if (existingFilter.op === AND) {
|
|
74
|
-
const filters = replaceOrInsert(existingFilter.filters, filter);
|
|
75
|
-
return filters.length > 1 ? { op: AND, filters } : filters[0];
|
|
76
|
-
}
|
|
77
|
-
if (filter.op === AND) {
|
|
78
|
-
return { op: AND, filters: filter.filters.concat(existingFilter) };
|
|
79
|
-
}
|
|
80
|
-
if (filterEquals(existingFilter, filter, true)) {
|
|
81
|
-
return filter;
|
|
82
|
-
}
|
|
83
|
-
if (canMerge(existingFilter, filter)) {
|
|
84
|
-
return merge(existingFilter, filter);
|
|
85
|
-
}
|
|
86
|
-
return { op: combineWith, filters: [existingFilter, filter] };
|
|
87
|
-
};
|
|
88
|
-
const includesNoValues = (filter) => {
|
|
89
|
-
if (!filter) {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
if (isInFilter(filter) && filter.values.length === 0) {
|
|
93
|
-
return true;
|
|
94
|
-
}
|
|
95
|
-
return isAndFilter(filter) && filter.filters.some((f) => includesNoValues(f));
|
|
96
|
-
};
|
|
97
|
-
const includesAllValues = (filter) => {
|
|
98
|
-
if (!filter) {
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
if (filter.op === STARTS_WITH && filter.value === "") {
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
104
|
-
return filter.op === STARTS_WITH && filter.value === "";
|
|
105
|
-
};
|
|
106
|
-
const replaceOrInsert = (filters, filter) => {
|
|
107
|
-
return filters.concat(filter);
|
|
108
|
-
};
|
|
109
|
-
const merge = (f1, f2) => {
|
|
110
|
-
if (includesNoValues(f2)) {
|
|
111
|
-
return f2;
|
|
112
|
-
}
|
|
113
|
-
if (isInFilter(f1) && isInFilter(f2)) {
|
|
114
|
-
return {
|
|
115
|
-
...f1,
|
|
116
|
-
values: [
|
|
117
|
-
...f1.values,
|
|
118
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
119
|
-
...f2.values.filter(
|
|
120
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
|
-
(v) => !f1.values.includes(v)
|
|
122
|
-
)
|
|
123
|
-
]
|
|
124
|
-
};
|
|
125
|
-
} else if (isInFilter(f1) && f2.op === EQUALS) {
|
|
126
|
-
return {
|
|
127
|
-
...f1,
|
|
128
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
129
|
-
// @ts-ignore
|
|
130
|
-
values: f1.values.concat([f2.value])
|
|
131
|
-
};
|
|
132
|
-
} else if (f1.op === EQUALS && f2.op === EQUALS) {
|
|
133
|
-
return {
|
|
134
|
-
column: f1.column,
|
|
135
|
-
op: IN,
|
|
136
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
137
|
-
// @ts-ignore
|
|
138
|
-
values: [f1.value, f2.value]
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
return f2;
|
|
142
|
-
};
|
|
143
|
-
const combine = (existingFilters, replacementFilters) => {
|
|
144
|
-
const equivalentType = ({ op: op1 }, { op: op2 }) => {
|
|
145
|
-
return op1 === op2 || op1[0] === ">" && op2[0] === ">" || op1[0] === "<" && op2[0] === "<";
|
|
146
|
-
};
|
|
147
|
-
const replaces = (existingFilter, replacementFilter) => {
|
|
148
|
-
return existingFilter.column === replacementFilter.column && equivalentType(existingFilter, replacementFilter);
|
|
149
|
-
};
|
|
150
|
-
const stillApplicable = (existingFilter) => replacementFilters.some(
|
|
151
|
-
(replacementFilter) => replaces(existingFilter, replacementFilter)
|
|
152
|
-
) === false;
|
|
153
|
-
return existingFilters.filter(stillApplicable).concat(replacementFilters);
|
|
154
|
-
};
|
|
155
|
-
const removeFilter = (sourceFilter, filterToRemove) => {
|
|
156
|
-
if (filterEquals(sourceFilter, filterToRemove, true)) {
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
if (sourceFilter.op !== AND) {
|
|
160
|
-
throw Error(
|
|
161
|
-
`removeFilter cannot remove ${JSON.stringify(
|
|
162
|
-
filterToRemove
|
|
163
|
-
)} from ${JSON.stringify(sourceFilter)}`
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
const filters = sourceFilter.filters.filter(
|
|
167
|
-
(f) => !filterEquals(f, filterToRemove)
|
|
168
|
-
);
|
|
169
|
-
return filters.length > 0 ? { type: AND, filters } : null;
|
|
170
|
-
};
|
|
171
|
-
const splitFilterOnColumn = (columnName, filter) => {
|
|
172
|
-
if (!filter) {
|
|
173
|
-
return [void 0, void 0];
|
|
174
|
-
}
|
|
175
|
-
if (filter.column === columnName) {
|
|
176
|
-
return [filter, void 0];
|
|
177
|
-
}
|
|
178
|
-
if (filter.op !== AND) {
|
|
179
|
-
return [void 0, filter];
|
|
180
|
-
}
|
|
181
|
-
const [[columnFilter = void 0], filters] = partition(
|
|
182
|
-
filter.filters,
|
|
183
|
-
(f) => f.column === columnName
|
|
184
|
-
);
|
|
185
|
-
return filters.length === 1 ? [columnFilter, filters[0]] : [columnFilter, { op: AND, filters }];
|
|
186
|
-
};
|
|
187
|
-
const overrideColName = (filter, column) => {
|
|
188
|
-
if (isMultiClauseFilter(filter)) {
|
|
189
|
-
return {
|
|
190
|
-
op: filter.op,
|
|
191
|
-
filters: filter.filters.map((f) => overrideColName(f, column))
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
return { ...filter, column };
|
|
195
|
-
};
|
|
196
|
-
const filterIncludesColumn = (filter, column) => {
|
|
197
|
-
if (!filter) {
|
|
198
|
-
return false;
|
|
199
|
-
}
|
|
200
|
-
const { op, column: filterColName } = filter;
|
|
201
|
-
switch (op) {
|
|
202
|
-
case AND:
|
|
203
|
-
case OR:
|
|
204
|
-
return filter.filters != null && filter.filters.some((f) => filterIncludesColumn(f, column));
|
|
205
|
-
default:
|
|
206
|
-
return filterColName === column.name;
|
|
207
|
-
}
|
|
208
|
-
};
|
|
209
|
-
const removeFilterForColumn = (sourceFilter, column) => {
|
|
210
|
-
const colName = column.name;
|
|
211
|
-
if (!sourceFilter) {
|
|
212
|
-
return void 0;
|
|
213
|
-
}
|
|
214
|
-
if (sourceFilter.column === colName) {
|
|
215
|
-
return void 0;
|
|
216
|
-
}
|
|
217
|
-
if (isAndFilter(sourceFilter) || isOrFilter(sourceFilter)) {
|
|
218
|
-
const { op } = sourceFilter;
|
|
219
|
-
const filters = sourceFilter.filters;
|
|
220
|
-
const otherColFilters = filters.filter((f) => f.column !== colName);
|
|
221
|
-
switch (otherColFilters.length) {
|
|
222
|
-
case 0:
|
|
223
|
-
return void 0;
|
|
224
|
-
case 1:
|
|
225
|
-
return otherColFilters[0];
|
|
226
|
-
default:
|
|
227
|
-
return { op, filters: otherColFilters };
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
return sourceFilter;
|
|
231
|
-
};
|
|
232
|
-
const canMerge = (f1, f2) => f1.column === f2.column && (f1.op === "=" || f1.op === "in") && (f2.op === "=" || f2.op === "in");
|
|
233
|
-
const sameValues = (arr1, arr2) => {
|
|
234
|
-
if (arr1 === arr2) {
|
|
235
|
-
return true;
|
|
236
|
-
}
|
|
237
|
-
if (arr1.length === arr2.length) {
|
|
238
|
-
const a = arr1.slice().sort();
|
|
239
|
-
const b = arr2.slice().sort();
|
|
240
|
-
return a.join("|") === b.join("|");
|
|
241
|
-
}
|
|
242
|
-
return false;
|
|
243
|
-
};
|
|
244
|
-
const filterEquals = (f1, f2, strict = false) => {
|
|
245
|
-
if (!strict) {
|
|
246
|
-
return true;
|
|
247
|
-
}
|
|
248
|
-
if (f1 && f2 && canMerge(f1, f2)) {
|
|
249
|
-
return f1.op === f2.op && (isSingleValueFilter(f1) && isSingleValueFilter(f2) && f1.value === f2.value || isMultiValueFilter(f1) && isMultiValueFilter(f2) && // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
250
|
-
sameValues(f1.values, f2.values));
|
|
251
|
-
}
|
|
252
|
-
return false;
|
|
253
|
-
};
|
|
254
|
-
const updateFilter = (filter, newFilter, mode) => {
|
|
255
|
-
if (filter && newFilter) {
|
|
256
|
-
if (mode === "replace") {
|
|
257
|
-
return newFilter;
|
|
258
|
-
}
|
|
259
|
-
if (filter.op === "and") {
|
|
260
|
-
return {
|
|
261
|
-
...filter,
|
|
262
|
-
filters: filter.filters.concat(newFilter)
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
const { column: columnName } = newFilter;
|
|
266
|
-
if (columnName) {
|
|
267
|
-
const existingClause = newFilter.column ? extractFilterForColumn(filter, columnName) : void 0;
|
|
268
|
-
if (existingClause && columnName) {
|
|
269
|
-
const result = removeFilterForColumn(filter, { name: columnName });
|
|
270
|
-
return updateFilter(result, newFilter, "add");
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
return {
|
|
274
|
-
op: "and",
|
|
275
|
-
filters: [filter, newFilter]
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
if (newFilter) {
|
|
279
|
-
return newFilter;
|
|
280
|
-
}
|
|
281
|
-
return filter;
|
|
282
|
-
};
|
|
283
|
-
const getTypeaheadFilter = (column, filterValues, isStartsWithFilter) => {
|
|
284
|
-
if (filterValues.length === 0) {
|
|
285
|
-
return void 0;
|
|
286
|
-
}
|
|
287
|
-
if (isStartsWithFilter) {
|
|
288
|
-
const startsWith = filterValues[0].substring(0, filterValues[0].length - 3);
|
|
289
|
-
return {
|
|
290
|
-
column,
|
|
291
|
-
op: "starts",
|
|
292
|
-
value: `"${startsWith}"`
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
return {
|
|
296
|
-
column,
|
|
297
|
-
op: "in",
|
|
298
|
-
values: filterValues.map((value) => `"${value}"`)
|
|
299
|
-
};
|
|
300
|
-
};
|
|
301
|
-
const getNumericFilter = (column, op, value) => {
|
|
302
|
-
if (op === void 0) return void 0;
|
|
303
|
-
if (value === void 0 || isNaN(value)) return void 0;
|
|
304
|
-
return { column, op, value };
|
|
305
|
-
};
|
|
306
|
-
const getFilterClausesForDisplay = (filter, columns = [], clauses = []) => {
|
|
307
|
-
if (filter === void 0) {
|
|
308
|
-
return clauses;
|
|
309
|
-
} else if (isSingleValueFilter(filter)) {
|
|
310
|
-
const column = columns.find((c) => c.name === filter.column);
|
|
311
|
-
if (column) {
|
|
312
|
-
const { name, label = name } = column;
|
|
313
|
-
clauses.push([label, filter.value.toString()]);
|
|
314
|
-
} else {
|
|
315
|
-
clauses.push([filter.column, filter.value.toString()]);
|
|
316
|
-
}
|
|
317
|
-
} else if (isBetweenFilter(filter)) {
|
|
318
|
-
const [f1, f2] = filter.filters;
|
|
319
|
-
const column = columns.find((c) => c.name === f1.column);
|
|
320
|
-
if (isTimeDataValue(column) && typeof f1.value === "number" && typeof f2.value === "number") {
|
|
321
|
-
const { name, label = name } = column;
|
|
322
|
-
clauses.push([
|
|
323
|
-
label,
|
|
324
|
-
`${Time.millisToTimeString(f1.value)} - ${Time.millisToTimeString(f2.value)}`
|
|
325
|
-
]);
|
|
326
|
-
} else if (column) {
|
|
327
|
-
const { name, label = name } = column;
|
|
328
|
-
clauses.push([label, `${f1.value} - ${f2.value}`]);
|
|
329
|
-
} else {
|
|
330
|
-
clauses.push([f1.column, `${f1.value} - ${f2.value}`]);
|
|
331
|
-
}
|
|
332
|
-
} else if (isAndFilter(filter)) {
|
|
333
|
-
filter.filters.forEach(
|
|
334
|
-
(f) => getFilterClausesForDisplay(f, columns, clauses)
|
|
335
|
-
);
|
|
336
|
-
}
|
|
337
|
-
return clauses;
|
|
338
|
-
};
|
|
339
|
-
const findMatchingFilter = (filterDescriptors, filter) => filterDescriptors.find(
|
|
340
|
-
({ active, filter: f }) => !active && f !== null && f !== filter && filtersAreEqual(f, filter)
|
|
341
|
-
);
|
|
342
|
-
|
|
343
|
-
export { AND, ENDS_WITH, EQUALS, GREATER_THAN, IN, LESS_THAN, OR, STARTS_WITH, addClause, addFilter, filterClauses, filterEquals, filterIncludesColumn, findMatchingFilter, getFilterClausesForDisplay, getNumericFilter, getTypeaheadFilter, overrideColName, removeFilter, removeLastClause, splitFilterOnColumn, updateFilter };
|
|
344
|
-
//# sourceMappingURL=filter-utils.js.map
|
package/esm/filter-utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter-utils.js","sources":["../../../packages/vuu-filters/src/filter-utils.ts"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n Filter,\n FilterClause,\n FilterCombinatorOp,\n FilterContainerFilter,\n FilterContainerFilterDescriptor,\n FilterWithPartialClause,\n MultiClauseFilter,\n NumericFilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport {\n extractFilterForColumn,\n filtersAreEqual,\n isAndFilter,\n isBetweenFilter,\n isInFilter,\n isMultiClauseFilter,\n isMultiValueFilter,\n isOrFilter,\n isSingleValueFilter,\n isTimeDataValue,\n partition,\n Time,\n} from \"@vuu-ui/vuu-utils\";\n\nexport const AND = \"and\";\nexport const EQUALS = \"=\";\nexport const GREATER_THAN = \">\";\nexport const LESS_THAN = \"<\";\nexport const OR = \"or\";\nexport const STARTS_WITH = \"starts\";\nexport const ENDS_WITH = \"ends\";\nexport const IN = \"in\";\n\nexport type FilterType =\n | \"and\"\n | \"=\"\n | \">\"\n | \">=\"\n | \"in\"\n | \"<=\"\n | \"<\"\n | \"NOT_IN\"\n | \"NOT_SW\"\n | \"or\"\n | \"SW\";\n\nexport const filterClauses = (\n filter: Partial<Filter> | FilterWithPartialClause | null,\n clauses: Partial<FilterClause>[] = [],\n): Partial<FilterClause>[] => {\n if (filter) {\n if (isMultiClauseFilter(filter)) {\n filter.filters.forEach((f) => clauses.push(...filterClauses(f)));\n } else {\n clauses.push(filter as Partial<FilterClause>);\n }\n }\n return clauses;\n};\n\ntype AddFilterOptions = {\n combineWith: FilterCombinatorOp;\n};\n\nconst DEFAULT_ADD_FILTER_OPTS: AddFilterOptions = {\n combineWith: \"and\",\n};\n\nexport const removeLastClause = (filter: MultiClauseFilter) => {\n const { filters } = filter;\n if (filters.length > 2) {\n return {\n ...filter,\n filters: filter.filters.slice(0, -1),\n };\n } else {\n // must be 2, we never have 1\n return filter.filters[0];\n }\n};\n\n/**\n Allows an empty FilterClause to be appended to an existing filter - for use\n in filter editing UI only.\n*/\nexport const addClause = (\n existingFilter: Filter,\n clause: Partial<Filter>,\n { combineWith = AND }: AddFilterOptions = DEFAULT_ADD_FILTER_OPTS,\n): FilterWithPartialClause => {\n if (\n isMultiClauseFilter(existingFilter) &&\n existingFilter.op === combineWith\n ) {\n // if (isCompleteFilter(clause)) {\n return {\n ...existingFilter,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n filters: existingFilter.filters.concat(clause),\n };\n // } else {\n // throw Error(\n // \"filter-utils, replaceFilter, only a valid clause can be added to a filter\"\n // );\n // }\n } else {\n return {\n op: combineWith,\n filters: [existingFilter, clause],\n };\n }\n};\n\nexport const addFilter = (\n existingFilter: Filter | undefined,\n filter: Filter,\n { combineWith = AND }: AddFilterOptions = DEFAULT_ADD_FILTER_OPTS,\n): Filter | undefined => {\n if (includesNoValues(filter)) {\n if (isMultiClauseFilter(filter)) {\n // TODO identify the column that is contributing the no-values filter\n } else {\n existingFilter = removeFilterForColumn(existingFilter, {\n name: filter.column,\n });\n }\n } else if (includesAllValues(filter)) {\n if (isMultiClauseFilter(filter)) {\n // TODO identify the column that is contributing the all-values filter\n }\n return removeFilterForColumn(existingFilter, { name: filter.column ?? \"\" });\n }\n\n if (!existingFilter) {\n return filter;\n }\n if (!filter) {\n return existingFilter;\n }\n if (existingFilter.op === AND && filter.op === AND) {\n return {\n op: AND,\n filters: combine(existingFilter.filters, filter.filters),\n };\n }\n if (existingFilter.op === AND) {\n const filters = replaceOrInsert(existingFilter.filters, filter);\n return filters.length > 1 ? { op: AND, filters } : filters[0];\n }\n if (filter.op === AND) {\n return { op: AND, filters: filter.filters.concat(existingFilter) };\n }\n\n if (filterEquals(existingFilter, filter, true)) {\n return filter;\n }\n\n if (canMerge(existingFilter, filter)) {\n return merge(existingFilter, filter);\n }\n\n return { op: combineWith, filters: [existingFilter, filter] };\n};\n\nconst includesNoValues = (filter?: Filter | null): boolean => {\n if (!filter) {\n return false;\n }\n if (isInFilter(filter) && filter.values.length === 0) {\n return true;\n }\n return isAndFilter(filter) && filter.filters.some((f) => includesNoValues(f));\n};\n\ninterface CommonFilter {\n colName?: string;\n otherColFilters?: Filter[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mode?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values?: any;\n op?: \"or\" | \"and\";\n column?: string;\n filters?: Filter[];\n}\n\nexport interface OtherFilter extends CommonFilter {\n type: FilterType;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values?: any[];\n}\n\nconst includesAllValues = (filter?: Filter | null): boolean => {\n if (!filter) {\n return false;\n }\n if (filter.op === STARTS_WITH && filter.value === \"\") {\n return true;\n }\n return filter.op === STARTS_WITH && filter.value === \"\";\n};\n\nconst replaceOrInsert = (filters: Filter[], filter: Filter) => {\n return filters.concat(filter);\n};\n\nconst merge = (f1: Filter, f2: Filter): Filter | undefined => {\n if (includesNoValues(f2)) {\n return f2;\n }\n if (isInFilter(f1) && isInFilter(f2)) {\n return {\n ...f1,\n values: [\n ...f1.values,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(f2.values as any[]).filter(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (v: string | number) => !(f1.values as any[]).includes(v),\n ),\n ],\n };\n } else if (isInFilter(f1) && f2.op === EQUALS) {\n return {\n ...f1,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n values: f1.values.concat([f2.value]),\n };\n } else if (f1.op === EQUALS && f2.op === EQUALS) {\n return {\n column: f1.column,\n op: IN,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n values: [f1.value, f2.value],\n };\n }\n return f2;\n};\n\nconst combine = (existingFilters: Filter[], replacementFilters: Filter[]) => {\n const equivalentType = ({ op: op1 }: Filter, { op: op2 }: Filter) => {\n return (\n op1 === op2 ||\n (op1[0] === \">\" && op2[0] === \">\") ||\n (op1[0] === \"<\" && op2[0] === \"<\")\n );\n };\n const replaces = (existingFilter: Filter, replacementFilter: Filter) => {\n return (\n existingFilter.column === replacementFilter.column &&\n equivalentType(existingFilter, replacementFilter)\n );\n };\n const stillApplicable = (existingFilter: Filter) =>\n replacementFilters.some((replacementFilter) =>\n replaces(existingFilter, replacementFilter),\n ) === false;\n return existingFilters.filter(stillApplicable).concat(replacementFilters);\n};\n\nexport const removeFilter = (sourceFilter: Filter, filterToRemove: Filter) => {\n if (filterEquals(sourceFilter, filterToRemove, true)) {\n return null;\n }\n if (sourceFilter.op !== AND) {\n throw Error(\n `removeFilter cannot remove ${JSON.stringify(\n filterToRemove,\n )} from ${JSON.stringify(sourceFilter)}`,\n );\n }\n const filters = sourceFilter.filters.filter(\n (f) => !filterEquals(f, filterToRemove),\n );\n return filters.length > 0 ? { type: AND, filters } : null;\n};\n\nexport const splitFilterOnColumn = (\n columnName: string,\n filter?: Filter,\n): [Filter | undefined, Filter | undefined] => {\n if (!filter) {\n return [undefined, undefined];\n }\n if (filter.column === columnName) {\n return [filter, undefined];\n }\n if (filter.op !== AND) {\n return [undefined, filter];\n }\n const [[columnFilter = undefined], filters] = partition(\n (filter as MultiClauseFilter<\"and\">).filters,\n (f) => f.column === columnName,\n );\n return filters.length === 1\n ? [columnFilter, filters[0]]\n : [columnFilter, { op: AND, filters }];\n};\n\nexport const overrideColName = (filter: Filter, column: string): Filter => {\n if (isMultiClauseFilter(filter)) {\n return {\n op: filter.op,\n filters: filter.filters.map((f) => overrideColName(f, column)),\n };\n }\n return { ...filter, column };\n};\n\nexport const filterIncludesColumn = (\n filter: Filter,\n column: ColumnDescriptor,\n): boolean => {\n if (!filter) {\n return false;\n }\n const { op, column: filterColName } = filter;\n switch (op) {\n case AND:\n case OR:\n return (\n filter.filters != null &&\n filter.filters.some((f) => filterIncludesColumn(f, column))\n );\n default:\n return filterColName === column.name;\n }\n};\n\nconst removeFilterForColumn = (\n sourceFilter: Filter | undefined,\n column: ColumnDescriptor,\n): Filter | undefined => {\n const colName = column.name;\n if (!sourceFilter) {\n return undefined;\n }\n if (sourceFilter.column === colName) {\n return undefined;\n }\n if (isAndFilter(sourceFilter) || isOrFilter(sourceFilter)) {\n const { op } = sourceFilter;\n const filters = sourceFilter.filters;\n const otherColFilters = filters.filter((f) => f.column !== colName);\n switch (otherColFilters.length) {\n case 0:\n return undefined;\n case 1:\n return otherColFilters[0];\n default:\n return { op, filters: otherColFilters };\n }\n }\n return sourceFilter;\n};\n\nconst canMerge = (f1: Filter, f2: Filter) =>\n f1.column === f2.column &&\n (f1.op === \"=\" || f1.op === \"in\") &&\n (f2.op === \"=\" || f2.op === \"in\");\n\nconst sameValues = <T>(arr1: T[], arr2: T[]) => {\n if (arr1 === arr2) {\n return true;\n }\n if (arr1.length === arr2.length) {\n const a = arr1.slice().sort();\n const b = arr2.slice().sort();\n return a.join(\"|\") === b.join(\"|\");\n }\n return false;\n};\n\nexport const filterEquals = (f1?: Filter, f2?: Filter, strict = false) => {\n if (!strict) {\n return true;\n }\n if (f1 && f2 && canMerge(f1, f2)) {\n return (\n f1.op === f2.op &&\n ((isSingleValueFilter(f1) &&\n isSingleValueFilter(f2) &&\n f1.value === f2.value) ||\n (isMultiValueFilter(f1) &&\n isMultiValueFilter(f2) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sameValues(f1.values as any[], f2.values)))\n );\n }\n return false;\n};\n\nexport const updateFilter = (\n filter: Filter | undefined,\n newFilter: Filter | undefined,\n mode: \"add\" | \"replace\",\n): Filter | undefined => {\n if (filter && newFilter) {\n if (mode === \"replace\") {\n return newFilter;\n }\n if (filter.op === \"and\") {\n return {\n ...filter,\n filters: filter.filters.concat(newFilter),\n };\n }\n const { column: columnName } = newFilter;\n if (columnName) {\n const existingClause = newFilter.column\n ? extractFilterForColumn(filter, columnName)\n : undefined;\n if (existingClause && columnName) {\n // The filter already contains a clause for this column, replace\n // with the new clause\n const result = removeFilterForColumn(filter, { name: columnName });\n return updateFilter(result, newFilter, \"add\");\n }\n }\n return {\n op: \"and\",\n filters: [filter, newFilter],\n };\n }\n if (newFilter) {\n return newFilter;\n }\n return filter;\n};\n\nexport const getTypeaheadFilter = (\n column: string,\n filterValues: string[],\n isStartsWithFilter?: boolean,\n): Filter | undefined => {\n if (filterValues.length === 0) {\n return undefined;\n }\n\n if (isStartsWithFilter) {\n // multiple starts with filters not currently supported\n const startsWith = filterValues[0].substring(0, filterValues[0].length - 3);\n return {\n column,\n op: \"starts\",\n value: `\"${startsWith}\"`,\n };\n }\n\n return {\n column,\n op: \"in\",\n values: filterValues.map((value) => `\"${value}\"`),\n };\n};\n\nexport const getNumericFilter = (\n column: string,\n op?: NumericFilterClauseOp,\n value?: number,\n): FilterClause | undefined => {\n if (op === undefined) return undefined;\n if (value === undefined || isNaN(value)) return undefined;\n return { column, op, value };\n};\n\ntype FilterClauseList = Array<[string, string]>;\n\n/**\n * Restructure a FilterContainerFilter into a list of [column, value] tuples\n * suitable for display in a text based control.\n */\nexport const getFilterClausesForDisplay = (\n filter?: FilterContainerFilter,\n columns: readonly ColumnDescriptor[] = [],\n clauses: FilterClauseList = [],\n): FilterClauseList => {\n if (filter === undefined) {\n return clauses;\n } else if (isSingleValueFilter(filter)) {\n const column = columns.find((c) => c.name === filter.column);\n if (column) {\n const { name, label = name } = column;\n clauses.push([label, filter.value.toString()]);\n } else {\n clauses.push([filter.column, filter.value.toString()]);\n }\n } else if (isBetweenFilter(filter)) {\n const [f1, f2] = filter.filters;\n const column = columns.find((c) => c.name === f1.column);\n if (\n isTimeDataValue(column) &&\n typeof f1.value === \"number\" &&\n typeof f2.value === \"number\"\n ) {\n const { name, label = name } = column;\n clauses.push([\n label,\n `${Time.millisToTimeString(f1.value)} - ${Time.millisToTimeString(f2.value)}`,\n ]);\n } else if (column) {\n const { name, label = name } = column;\n clauses.push([label, `${f1.value} - ${f2.value}`]);\n } else {\n clauses.push([f1.column, `${f1.value} - ${f2.value}`]);\n }\n } else if (isAndFilter(filter)) {\n filter.filters.forEach((f) =>\n getFilterClausesForDisplay(f, columns, clauses),\n );\n }\n return clauses;\n};\n\n/**\n * Given a list of FilterContainerFilterDescriptors and a FilterContainerFilter,\n * find filter descriptor from the list with an equal filter. If\n * none exists, return undefined, otherwise return the matched filter descriptor\n */\nexport const findMatchingFilter = (\n filterDescriptors: FilterContainerFilterDescriptor[],\n filter: FilterContainerFilter,\n) =>\n filterDescriptors.find(\n ({ active, filter: f }) =>\n !active && f !== null && f !== filter && filtersAreEqual(f, filter),\n );\n"],"names":[],"mappings":"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"}
|
package/esm/index.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export { ColumnFilter } from './column-filter/ColumnFilter.js';
|
|
2
|
-
export { FilterBar } from './filter-bar/FilterBar.js';
|
|
3
|
-
export { ColumnPicker } from './filter-clause/column-picker/ColumnPicker.js';
|
|
4
|
-
export { OperatorPicker } from './filter-clause/operator-picker/OperatorPicker.js';
|
|
5
|
-
export { ExpandoCombobox } from './filter-clause/ExpandoCombobox.js';
|
|
6
|
-
export { FilterClause } from './filter-clause/FilterClause.js';
|
|
7
|
-
export { FilterClauseValueEditorText } from './filter-clause/value-editors/FilterClauseValueEditorText.js';
|
|
8
|
-
export { ExtendedSingleValueFilterClause } from './filter-container/ExtendedSingleValueFilterClause.js';
|
|
9
|
-
export { FilterContainer, FilterContainerColumnFilter } from './filter-container/FilterContainer.js';
|
|
10
|
-
export { useFilterContextMenu } from './filter-context-menu/useFilterContextMenu.js';
|
|
11
|
-
export { FilterDisplay } from './filter-display/FilterDisplay.js';
|
|
12
|
-
export { FilterEditor } from './filter-editor/FilterEditor.js';
|
|
13
|
-
export { FilterPanel } from './filter-panel/FilterPanel.js';
|
|
14
|
-
export { FilterPill } from './filter-pill/FilterPill.js';
|
|
15
|
-
export { FilterPillNext } from './filter-pill/FilterPillNext.js';
|
|
16
|
-
export { NULL_FILTER, useSavedFilters } from './filter-provider/FilterContext.js';
|
|
17
|
-
export { FilterProvider } from './filter-provider/FilterProvider.js';
|
|
18
|
-
export { AND, ENDS_WITH, EQUALS, GREATER_THAN, IN, LESS_THAN, OR, STARTS_WITH, addClause, addFilter, filterClauses, filterEquals, filterIncludesColumn, findMatchingFilter, getFilterClausesForDisplay, getNumericFilter, getTypeaheadFilter, overrideColName, removeFilter, removeLastClause, splitFilterOnColumn, updateFilter } from './filter-utils.js';
|
|
19
|
-
export { FilterClauseModel, FilterModel } from './FilterModel.js';
|
|
20
|
-
export { InlineFilter } from './inline-filter/InlineFilter.js';
|
|
21
|
-
export { QuickFilters } from './quick-filters/QuickFilters.js';
|
|
22
|
-
export { FilterNamePrompt as SaveFilterConfirmPrompt } from './saved-filters/FilterNamePrompt.js';
|
|
23
|
-
export { SavedFilterPanel } from './saved-filters/SavedFilterPanel.js';
|
|
24
|
-
export { TabbedFilterContainer } from './tabbed-filter-container/TabbedFilterContainer.js';
|
|
25
|
-
export { ToggleFilter } from './toggle-filter/ToggleFilter.js';
|
|
26
|
-
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
var inlineFilteCss = ".vuuInlineFilter {\n --filter-borderColor: var(--salt-separable-secondary-borderColor);\n --filter-color: var(--salt-content-primary-foreground-disabled);\n --filter-padding: 1px 1px 1px 0;\n --item-content-height: 20px;\n height: var(--salt-size-base);\n\n .vuuInlineFilterCell {\n /* the padding ensures the outline is not clipped */\n --saltInput-paddingLeft: 2px;\n --filter-padding: 0 2px;\n }\n\n .vuuInlineFilterCell:has(input:focus) {\n --filter-borderColor: transparent;\n\n outline-width: 2px;\n outline-offset: -2px;\n outline-style: dotted;\n outline-color: var(--salt-focused-outlineColor);\n\n .saltInput-input {\n outline: none;\n }\n .saltInput-focused {\n border: none;\n outline: none;\n }\n\n .saltComboBox-focused {\n outline: none;\n }\n }\n\n .vuuInlineFilterCell:focus {\n --filter-borderColor: transparent;\n }\n\n .vuuInlineFilterCell {\n --saltInput-minHeight: var(--item-content-height);\n --saltPillInput-minHeight: var(--item-content-height);\n align-items: center;\n display: inline-flex;\n height: 100%;\n padding: var(--filter-padding);\n\n .vuuTypeaheadInput {\n border-style: solid;\n border-color: var(--filter-borderColor);\n border-width: 1px;\n border-radius: 0;\n height: var(--item-content-height);\n input::placeholder {\n color: var(--filter-color);\n }\n\n .saltButton:after {\n --vuu-icon-size: 6px;\n }\n }\n\n .saltInput-primary.vuuInput {\n border-style: solid;\n border-color: var(--filter-borderColor);\n border-width: 1px;\n border-radius: 0;\n height: var(--item-content-height);\n min-height: var(--item-content-height);\n input::placeholder {\n color: var(--filter-color);\n }\n }\n\n }\n\n .vuuInlineFilter-virtualColSpan {\n display: inline-block;\n }\n}\n\n.vuuInlineFilter:focus-within {\n --filter-borderColor: var(--salt-separable-primary-borderColor);\n --filter-color: var(--salt-content-primary-foreground);\n}\n";
|
|
2
|
-
|
|
3
|
-
export { inlineFilteCss as default };
|
|
4
|
-
//# sourceMappingURL=InlineFilter.css.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InlineFilter.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
3
|
-
import { useWindow } from '@salt-ds/window';
|
|
4
|
-
import { VirtualColSpan } from '@vuu-ui/vuu-table';
|
|
5
|
-
import cx from 'clsx';
|
|
6
|
-
import { FilterContainer, FilterContainerColumnFilter } from '../filter-container/FilterContainer.js';
|
|
7
|
-
import { useInlineFilter } from './useInlineFilter.js';
|
|
8
|
-
import inlineFilteCss from './InlineFilter.css.js';
|
|
9
|
-
|
|
10
|
-
const classBase = "vuuInlineFilter";
|
|
11
|
-
const InputProps = {
|
|
12
|
-
inputProps: {
|
|
13
|
-
placeholder: "Filter value"
|
|
14
|
-
},
|
|
15
|
-
variant: "primary"
|
|
16
|
-
};
|
|
17
|
-
const TypeaheadProps = {
|
|
18
|
-
highlightFirstSuggestion: false,
|
|
19
|
-
minCharacterCountToTriggerSuggestions: 0
|
|
20
|
-
};
|
|
21
|
-
const InlineFilter = ({
|
|
22
|
-
ariaRole,
|
|
23
|
-
onFilterApplied,
|
|
24
|
-
onFilterCleared,
|
|
25
|
-
table,
|
|
26
|
-
...htmlAttributes
|
|
27
|
-
}) => {
|
|
28
|
-
const targetWindow = useWindow();
|
|
29
|
-
useComponentCssInjection({
|
|
30
|
-
testId: "vuu-inline-filter",
|
|
31
|
-
css: inlineFilteCss,
|
|
32
|
-
window: targetWindow
|
|
33
|
-
});
|
|
34
|
-
const { columns, onKeyDown, virtualColSpan } = useInlineFilter();
|
|
35
|
-
return /* @__PURE__ */ jsxs(
|
|
36
|
-
FilterContainer,
|
|
37
|
-
{
|
|
38
|
-
...htmlAttributes,
|
|
39
|
-
className: classBase,
|
|
40
|
-
onFilterApplied,
|
|
41
|
-
onFilterCleared,
|
|
42
|
-
role: ariaRole,
|
|
43
|
-
children: [
|
|
44
|
-
/* @__PURE__ */ jsx(VirtualColSpan, { width: virtualColSpan }),
|
|
45
|
-
columns.map((column, i) => /* @__PURE__ */ jsx(
|
|
46
|
-
FilterContainerColumnFilter,
|
|
47
|
-
{
|
|
48
|
-
InputProps,
|
|
49
|
-
TypeaheadProps,
|
|
50
|
-
"aria-colindex": i + 1,
|
|
51
|
-
className: cx(`${classBase}Cell`, "vuuTableCell", {
|
|
52
|
-
"vuuTableCell-right": column.align === "right"
|
|
53
|
-
}),
|
|
54
|
-
column,
|
|
55
|
-
onKeyDown,
|
|
56
|
-
role: "cell",
|
|
57
|
-
style: { width: column.width },
|
|
58
|
-
table
|
|
59
|
-
},
|
|
60
|
-
column.name
|
|
61
|
-
))
|
|
62
|
-
]
|
|
63
|
-
}
|
|
64
|
-
);
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
export { InlineFilter };
|
|
68
|
-
//# sourceMappingURL=InlineFilter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InlineFilter.js","sources":["../../../../packages/vuu-filters/src/inline-filter/InlineFilter.tsx"],"sourcesContent":["import { type InputProps } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { TableSchemaTable } from \"@vuu-ui/vuu-data-types\";\nimport { VuuFilter } from \"@vuu-ui/vuu-protocol-types\";\nimport { VirtualColSpan } from \"@vuu-ui/vuu-table\";\nimport { BaseRowProps } from \"@vuu-ui/vuu-table-types\";\nimport cx from \"clsx\";\nimport { HTMLAttributes } from \"react\";\nimport {\n FilterContainerColumnFilter as ColumnFilter,\n FilterContainer,\n} from \"../filter-container/FilterContainer\";\nimport { useInlineFilter } from \"./useInlineFilter\";\n\nimport { ColumnFilterProps } from \"../column-filter/ColumnFilter\";\nimport { FilterAppliedHandler } from \"../filter-container/useFilterContainer\";\nimport inlineFilteCss from \"./InlineFilter.css\";\n\nconst classBase = \"vuuInlineFilter\";\n\nexport type FilterValueChangeHandler = (filter: VuuFilter) => void;\nexport interface InlineFilterProps\n extends Partial<BaseRowProps>,\n Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n onFilterApplied?: FilterAppliedHandler;\n onFilterCleared?: () => void;\n table: TableSchemaTable;\n}\n\nconst InputProps: Partial<InputProps> = {\n inputProps: {\n placeholder: \"Filter value\",\n },\n variant: \"primary\",\n};\n\nconst TypeaheadProps: ColumnFilterProps[\"TypeaheadProps\"] = {\n highlightFirstSuggestion: false,\n minCharacterCountToTriggerSuggestions: 0,\n};\n\nexport const InlineFilter = ({\n ariaRole,\n onFilterApplied,\n onFilterCleared,\n table,\n ...htmlAttributes\n}: InlineFilterProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-inline-filter\",\n css: inlineFilteCss,\n window: targetWindow,\n });\n\n const { columns, onKeyDown, virtualColSpan } = useInlineFilter();\n\n return (\n <FilterContainer\n {...htmlAttributes}\n className={classBase}\n onFilterApplied={onFilterApplied}\n onFilterCleared={onFilterCleared}\n role={ariaRole}\n >\n <VirtualColSpan width={virtualColSpan} />\n {columns.map((column, i) => (\n <ColumnFilter\n InputProps={InputProps}\n TypeaheadProps={TypeaheadProps}\n aria-colindex={i + 1}\n className={cx(`${classBase}Cell`, \"vuuTableCell\", {\n \"vuuTableCell-right\": column.align === \"right\",\n })}\n column={column}\n onKeyDown={onKeyDown}\n key={column.name}\n role=\"cell\"\n style={{ width: column.width }}\n table={table}\n />\n ))}\n </FilterContainer>\n );\n};\n"],"names":["ColumnFilter"],"mappings":";;;;;;;;;AAmBA,MAAM,SAAY,GAAA,iBAAA;AAWlB,MAAM,UAAkC,GAAA;AAAA,EACtC,UAAY,EAAA;AAAA,IACV,WAAa,EAAA;AAAA,GACf;AAAA,EACA,OAAS,EAAA;AACX,CAAA;AAEA,MAAM,cAAsD,GAAA;AAAA,EAC1D,wBAA0B,EAAA,KAAA;AAAA,EAC1B,qCAAuC,EAAA;AACzC,CAAA;AAEO,MAAM,eAAe,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAyB,KAAA;AACvB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAA,cAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,SAAW,EAAA,cAAA,KAAmB,eAAgB,EAAA;AAE/D,EACE,uBAAA,IAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAW,EAAA,SAAA;AAAA,MACX,eAAA;AAAA,MACA,eAAA;AAAA,MACA,IAAM,EAAA,QAAA;AAAA,MAEN,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,cAAA,EAAA,EAAe,OAAO,cAAgB,EAAA,CAAA;AAAA,QACtC,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,CACpB,qBAAA,GAAA;AAAA,UAACA,2BAAA;AAAA,UAAA;AAAA,YACC,UAAA;AAAA,YACA,cAAA;AAAA,YACA,iBAAe,CAAI,GAAA,CAAA;AAAA,YACnB,SAAW,EAAA,EAAA,CAAG,CAAG,EAAA,SAAS,QAAQ,cAAgB,EAAA;AAAA,cAChD,oBAAA,EAAsB,OAAO,KAAU,KAAA;AAAA,aACxC,CAAA;AAAA,YACD,MAAA;AAAA,YACA,SAAA;AAAA,YAEA,IAAK,EAAA,MAAA;AAAA,YACL,KAAO,EAAA,EAAE,KAAO,EAAA,MAAA,CAAO,KAAM,EAAA;AAAA,YAC7B;AAAA,WAAA;AAAA,UAHK,MAAO,CAAA;AAAA,SAKf;AAAA;AAAA;AAAA,GACH;AAEJ;;;;"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { useHeaderProps, useEditableCell } from '@vuu-ui/vuu-table';
|
|
2
|
-
|
|
3
|
-
const useInlineFilter = () => {
|
|
4
|
-
const { columns = [], virtualColSpan = 0 } = useHeaderProps();
|
|
5
|
-
const onKeyDown = useEditableCell();
|
|
6
|
-
return {
|
|
7
|
-
columns,
|
|
8
|
-
onKeyDown,
|
|
9
|
-
virtualColSpan
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export { useInlineFilter };
|
|
14
|
-
//# sourceMappingURL=useInlineFilter.js.map
|