@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,300 @@
|
|
|
1
|
+
import { Time, extractFilterForColumn, filtersAreEqual, isAndFilter, isBetweenFilter, isInFilter, isMultiClauseFilter, isMultiValueFilter, isOrFilter, isSingleValueFilter, isTimeDataValue, partition } from "@vuu-ui/vuu-utils";
|
|
2
|
+
const AND = "and";
|
|
3
|
+
const EQUALS = "=";
|
|
4
|
+
const GREATER_THAN = ">";
|
|
5
|
+
const LESS_THAN = "<";
|
|
6
|
+
const OR = "or";
|
|
7
|
+
const STARTS_WITH = "starts";
|
|
8
|
+
const ENDS_WITH = "ends";
|
|
9
|
+
const IN = "in";
|
|
10
|
+
const filterClauses = (filter, clauses = [])=>{
|
|
11
|
+
if (filter) if (isMultiClauseFilter(filter)) filter.filters.forEach((f)=>clauses.push(...filterClauses(f)));
|
|
12
|
+
else clauses.push(filter);
|
|
13
|
+
return clauses;
|
|
14
|
+
};
|
|
15
|
+
const DEFAULT_ADD_FILTER_OPTS = {
|
|
16
|
+
combineWith: "and"
|
|
17
|
+
};
|
|
18
|
+
const removeLastClause = (filter)=>{
|
|
19
|
+
const { filters } = filter;
|
|
20
|
+
if (filters.length > 2) return {
|
|
21
|
+
...filter,
|
|
22
|
+
filters: filter.filters.slice(0, -1)
|
|
23
|
+
};
|
|
24
|
+
return filter.filters[0];
|
|
25
|
+
};
|
|
26
|
+
const addClause = (existingFilter, clause, { combineWith = AND } = DEFAULT_ADD_FILTER_OPTS)=>{
|
|
27
|
+
if (isMultiClauseFilter(existingFilter) && existingFilter.op === combineWith) return {
|
|
28
|
+
...existingFilter,
|
|
29
|
+
filters: existingFilter.filters.concat(clause)
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
op: combineWith,
|
|
33
|
+
filters: [
|
|
34
|
+
existingFilter,
|
|
35
|
+
clause
|
|
36
|
+
]
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
const addFilter = (existingFilter, filter, { combineWith = AND } = DEFAULT_ADD_FILTER_OPTS)=>{
|
|
40
|
+
if (includesNoValues(filter)) isMultiClauseFilter(filter) || (existingFilter = removeFilterForColumn(existingFilter, {
|
|
41
|
+
name: filter.column
|
|
42
|
+
}));
|
|
43
|
+
else if (includesAllValues(filter)) {
|
|
44
|
+
isMultiClauseFilter(filter);
|
|
45
|
+
return removeFilterForColumn(existingFilter, {
|
|
46
|
+
name: filter.column ?? ""
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (!existingFilter) return filter;
|
|
50
|
+
if (!filter) return existingFilter;
|
|
51
|
+
if (existingFilter.op === AND && filter.op === AND) return {
|
|
52
|
+
op: AND,
|
|
53
|
+
filters: combine(existingFilter.filters, filter.filters)
|
|
54
|
+
};
|
|
55
|
+
if (existingFilter.op === AND) {
|
|
56
|
+
const filters = replaceOrInsert(existingFilter.filters, filter);
|
|
57
|
+
return filters.length > 1 ? {
|
|
58
|
+
op: AND,
|
|
59
|
+
filters
|
|
60
|
+
} : filters[0];
|
|
61
|
+
}
|
|
62
|
+
if (filter.op === AND) return {
|
|
63
|
+
op: AND,
|
|
64
|
+
filters: filter.filters.concat(existingFilter)
|
|
65
|
+
};
|
|
66
|
+
if (filterEquals(existingFilter, filter, true)) return filter;
|
|
67
|
+
if (canMerge(existingFilter, filter)) return merge(existingFilter, filter);
|
|
68
|
+
return {
|
|
69
|
+
op: combineWith,
|
|
70
|
+
filters: [
|
|
71
|
+
existingFilter,
|
|
72
|
+
filter
|
|
73
|
+
]
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
const includesNoValues = (filter)=>{
|
|
77
|
+
if (!filter) return false;
|
|
78
|
+
if (isInFilter(filter) && 0 === filter.values.length) return true;
|
|
79
|
+
return isAndFilter(filter) && filter.filters.some((f)=>includesNoValues(f));
|
|
80
|
+
};
|
|
81
|
+
const includesAllValues = (filter)=>{
|
|
82
|
+
if (!filter) return false;
|
|
83
|
+
if (filter.op === STARTS_WITH && "" === filter.value) return true;
|
|
84
|
+
return filter.op === STARTS_WITH && "" === filter.value;
|
|
85
|
+
};
|
|
86
|
+
const replaceOrInsert = (filters, filter)=>filters.concat(filter);
|
|
87
|
+
const merge = (f1, f2)=>{
|
|
88
|
+
if (includesNoValues(f2)) return f2;
|
|
89
|
+
if (isInFilter(f1) && isInFilter(f2)) return {
|
|
90
|
+
...f1,
|
|
91
|
+
values: [
|
|
92
|
+
...f1.values,
|
|
93
|
+
...f2.values.filter((v)=>!f1.values.includes(v))
|
|
94
|
+
]
|
|
95
|
+
};
|
|
96
|
+
if (isInFilter(f1) && f2.op === EQUALS) return {
|
|
97
|
+
...f1,
|
|
98
|
+
values: f1.values.concat([
|
|
99
|
+
f2.value
|
|
100
|
+
])
|
|
101
|
+
};
|
|
102
|
+
if (f1.op === EQUALS && f2.op === EQUALS) return {
|
|
103
|
+
column: f1.column,
|
|
104
|
+
op: IN,
|
|
105
|
+
values: [
|
|
106
|
+
f1.value,
|
|
107
|
+
f2.value
|
|
108
|
+
]
|
|
109
|
+
};
|
|
110
|
+
return f2;
|
|
111
|
+
};
|
|
112
|
+
const combine = (existingFilters, replacementFilters)=>{
|
|
113
|
+
const equivalentType = ({ op: op1 }, { op: op2 })=>op1 === op2 || ">" === op1[0] && ">" === op2[0] || "<" === op1[0] && "<" === op2[0];
|
|
114
|
+
const replaces = (existingFilter, replacementFilter)=>existingFilter.column === replacementFilter.column && equivalentType(existingFilter, replacementFilter);
|
|
115
|
+
const stillApplicable = (existingFilter)=>false === replacementFilters.some((replacementFilter)=>replaces(existingFilter, replacementFilter));
|
|
116
|
+
return existingFilters.filter(stillApplicable).concat(replacementFilters);
|
|
117
|
+
};
|
|
118
|
+
const removeFilter = (sourceFilter, filterToRemove)=>{
|
|
119
|
+
if (filterEquals(sourceFilter, filterToRemove, true)) return null;
|
|
120
|
+
if (sourceFilter.op !== AND) throw Error(`removeFilter cannot remove ${JSON.stringify(filterToRemove)} from ${JSON.stringify(sourceFilter)}`);
|
|
121
|
+
const filters = sourceFilter.filters.filter((f)=>!filterEquals(f, filterToRemove));
|
|
122
|
+
return filters.length > 0 ? {
|
|
123
|
+
type: AND,
|
|
124
|
+
filters
|
|
125
|
+
} : null;
|
|
126
|
+
};
|
|
127
|
+
const splitFilterOnColumn = (columnName, filter)=>{
|
|
128
|
+
if (!filter) return [
|
|
129
|
+
void 0,
|
|
130
|
+
void 0
|
|
131
|
+
];
|
|
132
|
+
if (filter.column === columnName) return [
|
|
133
|
+
filter,
|
|
134
|
+
void 0
|
|
135
|
+
];
|
|
136
|
+
if (filter.op !== AND) return [
|
|
137
|
+
void 0,
|
|
138
|
+
filter
|
|
139
|
+
];
|
|
140
|
+
const [[columnFilter], filters] = partition(filter.filters, (f)=>f.column === columnName);
|
|
141
|
+
return 1 === filters.length ? [
|
|
142
|
+
columnFilter,
|
|
143
|
+
filters[0]
|
|
144
|
+
] : [
|
|
145
|
+
columnFilter,
|
|
146
|
+
{
|
|
147
|
+
op: AND,
|
|
148
|
+
filters
|
|
149
|
+
}
|
|
150
|
+
];
|
|
151
|
+
};
|
|
152
|
+
const overrideColName = (filter, column)=>{
|
|
153
|
+
if (isMultiClauseFilter(filter)) return {
|
|
154
|
+
op: filter.op,
|
|
155
|
+
filters: filter.filters.map((f)=>overrideColName(f, column))
|
|
156
|
+
};
|
|
157
|
+
return {
|
|
158
|
+
...filter,
|
|
159
|
+
column
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
const filterIncludesColumn = (filter, column)=>{
|
|
163
|
+
if (!filter) return false;
|
|
164
|
+
const { op, column: filterColName } = filter;
|
|
165
|
+
switch(op){
|
|
166
|
+
case AND:
|
|
167
|
+
case OR:
|
|
168
|
+
return null != filter.filters && filter.filters.some((f)=>filterIncludesColumn(f, column));
|
|
169
|
+
default:
|
|
170
|
+
return filterColName === column.name;
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
const removeFilterForColumn = (sourceFilter, column)=>{
|
|
174
|
+
const colName = column.name;
|
|
175
|
+
if (!sourceFilter) return;
|
|
176
|
+
if (sourceFilter.column === colName) return;
|
|
177
|
+
if (isAndFilter(sourceFilter) || isOrFilter(sourceFilter)) {
|
|
178
|
+
const { op } = sourceFilter;
|
|
179
|
+
const filters = sourceFilter.filters;
|
|
180
|
+
const otherColFilters = filters.filter((f)=>f.column !== colName);
|
|
181
|
+
switch(otherColFilters.length){
|
|
182
|
+
case 0:
|
|
183
|
+
return;
|
|
184
|
+
case 1:
|
|
185
|
+
return otherColFilters[0];
|
|
186
|
+
default:
|
|
187
|
+
return {
|
|
188
|
+
op,
|
|
189
|
+
filters: otherColFilters
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return sourceFilter;
|
|
194
|
+
};
|
|
195
|
+
const canMerge = (f1, f2)=>f1.column === f2.column && ("=" === f1.op || "in" === f1.op) && ("=" === f2.op || "in" === f2.op);
|
|
196
|
+
const sameValues = (arr1, arr2)=>{
|
|
197
|
+
if (arr1 === arr2) return true;
|
|
198
|
+
if (arr1.length === arr2.length) {
|
|
199
|
+
const a = arr1.slice().sort();
|
|
200
|
+
const b = arr2.slice().sort();
|
|
201
|
+
return a.join("|") === b.join("|");
|
|
202
|
+
}
|
|
203
|
+
return false;
|
|
204
|
+
};
|
|
205
|
+
const filterEquals = (f1, f2, strict = false)=>{
|
|
206
|
+
if (!strict) return true;
|
|
207
|
+
if (f1 && f2 && canMerge(f1, f2)) return f1.op === f2.op && (isSingleValueFilter(f1) && isSingleValueFilter(f2) && f1.value === f2.value || isMultiValueFilter(f1) && isMultiValueFilter(f2) && sameValues(f1.values, f2.values));
|
|
208
|
+
return false;
|
|
209
|
+
};
|
|
210
|
+
const updateFilter = (filter, newFilter, mode)=>{
|
|
211
|
+
if (filter && newFilter) {
|
|
212
|
+
if ("replace" === mode) return newFilter;
|
|
213
|
+
if ("and" === filter.op) return {
|
|
214
|
+
...filter,
|
|
215
|
+
filters: filter.filters.concat(newFilter)
|
|
216
|
+
};
|
|
217
|
+
const { column: columnName } = newFilter;
|
|
218
|
+
if (columnName) {
|
|
219
|
+
const existingClause = newFilter.column ? extractFilterForColumn(filter, columnName) : void 0;
|
|
220
|
+
if (existingClause && columnName) {
|
|
221
|
+
const result = removeFilterForColumn(filter, {
|
|
222
|
+
name: columnName
|
|
223
|
+
});
|
|
224
|
+
return updateFilter(result, newFilter, "add");
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
op: "and",
|
|
229
|
+
filters: [
|
|
230
|
+
filter,
|
|
231
|
+
newFilter
|
|
232
|
+
]
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
if (newFilter) return newFilter;
|
|
236
|
+
return filter;
|
|
237
|
+
};
|
|
238
|
+
const getTypeaheadFilter = (column, filterValues, isStartsWithFilter)=>{
|
|
239
|
+
if (0 === filterValues.length) return;
|
|
240
|
+
if (isStartsWithFilter) {
|
|
241
|
+
const startsWith = filterValues[0].substring(0, filterValues[0].length - 3);
|
|
242
|
+
return {
|
|
243
|
+
column,
|
|
244
|
+
op: "starts",
|
|
245
|
+
value: `"${startsWith}"`
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
column,
|
|
250
|
+
op: "in",
|
|
251
|
+
values: filterValues.map((value)=>`"${value}"`)
|
|
252
|
+
};
|
|
253
|
+
};
|
|
254
|
+
const getNumericFilter = (column, op, value)=>{
|
|
255
|
+
if (void 0 === op) return;
|
|
256
|
+
if (void 0 === value || isNaN(value)) return;
|
|
257
|
+
return {
|
|
258
|
+
column,
|
|
259
|
+
op,
|
|
260
|
+
value
|
|
261
|
+
};
|
|
262
|
+
};
|
|
263
|
+
const getFilterClausesForDisplay = (filter, columns = [], clauses = [])=>{
|
|
264
|
+
if (void 0 === filter) ;
|
|
265
|
+
else if (isSingleValueFilter(filter)) {
|
|
266
|
+
const column = columns.find((c)=>c.name === filter.column);
|
|
267
|
+
if (column) {
|
|
268
|
+
const { name, label = name } = column;
|
|
269
|
+
clauses.push([
|
|
270
|
+
label,
|
|
271
|
+
filter.value.toString()
|
|
272
|
+
]);
|
|
273
|
+
} else clauses.push([
|
|
274
|
+
filter.column,
|
|
275
|
+
filter.value.toString()
|
|
276
|
+
]);
|
|
277
|
+
} else if (isBetweenFilter(filter)) {
|
|
278
|
+
const [f1, f2] = filter.filters;
|
|
279
|
+
const column = columns.find((c)=>c.name === f1.column);
|
|
280
|
+
if (isTimeDataValue(column) && "number" == typeof f1.value && "number" == typeof f2.value) {
|
|
281
|
+
const { name, label = name } = column;
|
|
282
|
+
clauses.push([
|
|
283
|
+
label,
|
|
284
|
+
`${Time.millisToTimeString(f1.value)} - ${Time.millisToTimeString(f2.value)}`
|
|
285
|
+
]);
|
|
286
|
+
} else if (column) {
|
|
287
|
+
const { name, label = name } = column;
|
|
288
|
+
clauses.push([
|
|
289
|
+
label,
|
|
290
|
+
`${f1.value} - ${f2.value}`
|
|
291
|
+
]);
|
|
292
|
+
} else clauses.push([
|
|
293
|
+
f1.column,
|
|
294
|
+
`${f1.value} - ${f2.value}`
|
|
295
|
+
]);
|
|
296
|
+
} else if (isAndFilter(filter)) filter.filters.forEach((f)=>getFilterClausesForDisplay(f, columns, clauses));
|
|
297
|
+
return clauses;
|
|
298
|
+
};
|
|
299
|
+
const findMatchingFilter = (filterDescriptors, filter)=>filterDescriptors.find(({ active, filter: f })=>!active && null !== f && f !== filter && filtersAreEqual(f, filter));
|
|
300
|
+
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 };
|
package/src/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export * from "./filter-bar/index.js";
|
|
2
|
+
export * from "./filter-clause/index.js";
|
|
3
|
+
export * from "./filter-editor/index.js";
|
|
4
|
+
export * from "./filter-pill/index.js";
|
|
5
|
+
export * from "./filter-utils.js";
|
|
6
|
+
export * from "./FilterModel.js";
|
|
7
|
+
export * from "./inline-filter/index.js";
|
|
8
|
+
export * from "./quick-filters/index.js";
|
|
9
|
+
export { ColumnFilter } from "./column-filter/ColumnFilter.js";
|
|
10
|
+
export { ExtendedSingleValueFilterClause } from "./filter-container/ExtendedSingleValueFilterClause.js";
|
|
11
|
+
export { FilterContainer, FilterContainerColumnFilter } from "./filter-container/FilterContainer.js";
|
|
12
|
+
export { useFilterContextMenu } from "./filter-context-menu/useFilterContextMenu.js";
|
|
13
|
+
export { FilterDisplay } from "./filter-display/FilterDisplay.js";
|
|
14
|
+
export { FilterPanel } from "./filter-panel/FilterPanel.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 { FilterNamePrompt as SaveFilterConfirmPrompt } from "./saved-filters/FilterNamePrompt.js";
|
|
19
|
+
export { SavedFilterPanel } from "./saved-filters/SavedFilterPanel.js";
|
|
20
|
+
export { TabbedFilterContainer } from "./tabbed-filter-container/TabbedFilterContainer.js";
|
|
21
|
+
export { ToggleFilter } from "./toggle-filter/ToggleFilter.js";
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
const css = `
|
|
2
|
+
.vuuInlineFilter {
|
|
3
|
+
--filter-borderColor: var(--salt-separable-secondary-borderColor);
|
|
4
|
+
--filter-color: var(--salt-content-primary-foreground-disabled);
|
|
5
|
+
--filter-padding: 1px 1px 1px 0;
|
|
6
|
+
--item-content-height: 20px;
|
|
7
|
+
height: var(--salt-size-base);
|
|
8
|
+
|
|
9
|
+
& .vuuInlineFilterCell {
|
|
10
|
+
--saltInput-paddingLeft: 2px;
|
|
11
|
+
--filter-padding: 0 2px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
& .vuuInlineFilterCell:has(input:focus) {
|
|
15
|
+
--filter-borderColor: transparent;
|
|
16
|
+
outline-offset: -2px;
|
|
17
|
+
outline-width: 2px;
|
|
18
|
+
outline-style: dotted;
|
|
19
|
+
outline-color: var(--salt-focused-outlineColor);
|
|
20
|
+
|
|
21
|
+
& .saltInput-input {
|
|
22
|
+
outline: none;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
& .saltInput-focused {
|
|
26
|
+
border: none;
|
|
27
|
+
outline: none;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
& .saltComboBox-focused {
|
|
31
|
+
outline: none;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
& .vuuInlineFilterCell:focus {
|
|
36
|
+
--filter-borderColor: transparent;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
& .vuuInlineFilterCell {
|
|
40
|
+
--saltInput-minHeight: var(--item-content-height);
|
|
41
|
+
--saltPillInput-minHeight: var(--item-content-height);
|
|
42
|
+
height: 100%;
|
|
43
|
+
padding: var(--filter-padding);
|
|
44
|
+
align-items: center;
|
|
45
|
+
display: inline-flex;
|
|
46
|
+
|
|
47
|
+
& .vuuTypeaheadInput {
|
|
48
|
+
border-style: solid;
|
|
49
|
+
border-color: var(--filter-borderColor);
|
|
50
|
+
height: var(--item-content-height);
|
|
51
|
+
border-width: 1px;
|
|
52
|
+
border-radius: 0;
|
|
53
|
+
|
|
54
|
+
& input::placeholder {
|
|
55
|
+
color: var(--filter-color);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
& .saltButton:after {
|
|
59
|
+
--vuu-icon-size: 6px;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
& .saltInput-primary.vuuInput {
|
|
64
|
+
border-style: solid;
|
|
65
|
+
border-color: var(--filter-borderColor);
|
|
66
|
+
height: var(--item-content-height);
|
|
67
|
+
min-height: var(--item-content-height);
|
|
68
|
+
border-width: 1px;
|
|
69
|
+
border-radius: 0;
|
|
70
|
+
|
|
71
|
+
& input::placeholder {
|
|
72
|
+
color: var(--filter-color);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
& .vuuInlineFilter-virtualColSpan {
|
|
78
|
+
display: inline-block;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.vuuInlineFilter:focus-within {
|
|
83
|
+
--filter-borderColor: var(--salt-separable-primary-borderColor);
|
|
84
|
+
--filter-color: var(--salt-content-primary-foreground);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
`;
|
|
89
|
+
export default css;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx, jsxs } 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 clsx from "clsx";
|
|
6
|
+
import { FilterContainer, FilterContainerColumnFilter } from "../filter-container/FilterContainer.js";
|
|
7
|
+
import { useInlineFilter } from "./useInlineFilter.js";
|
|
8
|
+
import InlineFilter from "./InlineFilter.css";
|
|
9
|
+
const classBase = "vuuInlineFilter";
|
|
10
|
+
const InputProps = {
|
|
11
|
+
inputProps: {
|
|
12
|
+
placeholder: "Filter value"
|
|
13
|
+
},
|
|
14
|
+
variant: "primary"
|
|
15
|
+
};
|
|
16
|
+
const TypeaheadProps = {
|
|
17
|
+
highlightFirstSuggestion: false,
|
|
18
|
+
minCharacterCountToTriggerSuggestions: 0
|
|
19
|
+
};
|
|
20
|
+
const InlineFilter_InlineFilter = ({ ariaRole, onFilterApplied, onFilterCleared, table, ...htmlAttributes })=>{
|
|
21
|
+
const targetWindow = useWindow();
|
|
22
|
+
useComponentCssInjection({
|
|
23
|
+
testId: "vuu-inline-filter",
|
|
24
|
+
css: InlineFilter,
|
|
25
|
+
window: targetWindow
|
|
26
|
+
});
|
|
27
|
+
const { columns, onKeyDown, virtualColSpan } = useInlineFilter();
|
|
28
|
+
return /*#__PURE__*/ jsxs(FilterContainer, {
|
|
29
|
+
...htmlAttributes,
|
|
30
|
+
className: classBase,
|
|
31
|
+
onFilterApplied: onFilterApplied,
|
|
32
|
+
onFilterCleared: onFilterCleared,
|
|
33
|
+
role: ariaRole,
|
|
34
|
+
children: [
|
|
35
|
+
/*#__PURE__*/ jsx(VirtualColSpan, {
|
|
36
|
+
width: virtualColSpan
|
|
37
|
+
}),
|
|
38
|
+
columns.map((column, i)=>/*#__PURE__*/ jsx(FilterContainerColumnFilter, {
|
|
39
|
+
InputProps: InputProps,
|
|
40
|
+
TypeaheadProps: TypeaheadProps,
|
|
41
|
+
"aria-colindex": i + 1,
|
|
42
|
+
className: clsx(`${classBase}Cell`, "vuuTableCell", {
|
|
43
|
+
"vuuTableCell-right": "right" === column.align
|
|
44
|
+
}),
|
|
45
|
+
column: column,
|
|
46
|
+
onKeyDown: onKeyDown,
|
|
47
|
+
role: "cell",
|
|
48
|
+
style: {
|
|
49
|
+
width: column.width
|
|
50
|
+
},
|
|
51
|
+
table: table
|
|
52
|
+
}, column.name))
|
|
53
|
+
]
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
export { InlineFilter_InlineFilter as InlineFilter };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./InlineFilter.js";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useEditableCell, useHeaderProps } from "@vuu-ui/vuu-table";
|
|
2
|
+
const useInlineFilter = ()=>{
|
|
3
|
+
const { columns = [], virtualColSpan = 0 } = useHeaderProps();
|
|
4
|
+
const onKeyDown = useEditableCell();
|
|
5
|
+
return {
|
|
6
|
+
columns,
|
|
7
|
+
onKeyDown,
|
|
8
|
+
virtualColSpan
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export { useInlineFilter };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const css = `
|
|
2
|
+
.vuuQuickFilters {
|
|
3
|
+
--saltFormField-width: 150px;
|
|
4
|
+
--saltInput-background: transparent;
|
|
5
|
+
--saltInput-height: 18px;
|
|
6
|
+
--saltInput-minHeight: 18px;
|
|
7
|
+
gap: var(--salt-spacing-100);
|
|
8
|
+
align-items: end;
|
|
9
|
+
width: fit-content;
|
|
10
|
+
display: flex;
|
|
11
|
+
|
|
12
|
+
& .vuuQuickFilters-filter-container {
|
|
13
|
+
background-color: var(--salt-container-primary-background);
|
|
14
|
+
border: solid 1px var(--salt-editable-borderColor);
|
|
15
|
+
border-radius: 2px;
|
|
16
|
+
height: 43px;
|
|
17
|
+
display: flex;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
& .saltFormField {
|
|
21
|
+
padding: 2px var(--salt-spacing-200);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
& .saltFormField:not(:last-child) {
|
|
25
|
+
border-right: solid 1px var(--salt-editable-borderColor);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
& .vuuTypeaheadInput {
|
|
29
|
+
& .saltPillInput-endAdornmentContainer {
|
|
30
|
+
& .saltButton {
|
|
31
|
+
border-style: none;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
`;
|
|
39
|
+
export default css;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getDataItemEditControl } from "@vuu-ui/vuu-data-react";
|
|
3
|
+
import { ColumnPicker, Icon, VuuInput } from "@vuu-ui/vuu-ui-controls";
|
|
4
|
+
import { FormField, FormFieldLabel } from "@salt-ds/core";
|
|
5
|
+
import { useComponentCssInjection } from "@salt-ds/styles";
|
|
6
|
+
import { useWindow } from "@salt-ds/window";
|
|
7
|
+
import { useQuickFilters } from "./useQuickFilters.js";
|
|
8
|
+
import QuickFilters from "./QuickFilters.css";
|
|
9
|
+
const classBase = "vuuQuickFilters";
|
|
10
|
+
const QuickFilters_QuickFilters = ({ allowAddColumn = true, allowFind = true, availableColumns, onApplyFilter, onClearFilter, onChangeQuickFilterColumns, quickFilterColumns, vuuTable })=>{
|
|
11
|
+
const targetWindow = useWindow();
|
|
12
|
+
useComponentCssInjection({
|
|
13
|
+
testId: "vuu-quick-filters",
|
|
14
|
+
css: QuickFilters,
|
|
15
|
+
window: targetWindow
|
|
16
|
+
});
|
|
17
|
+
const searchIcon = /*#__PURE__*/ jsx(Icon, {
|
|
18
|
+
name: "search",
|
|
19
|
+
size: 18
|
|
20
|
+
});
|
|
21
|
+
const { availableColumnNames, onChange, onColumnsSelectionChange, onCommit, rootRef } = useQuickFilters({
|
|
22
|
+
availableColumns,
|
|
23
|
+
onApplyFilter,
|
|
24
|
+
onClearFilter,
|
|
25
|
+
onChangeQuickFilterColumns,
|
|
26
|
+
quickFilterColumns
|
|
27
|
+
});
|
|
28
|
+
const filterColumns = availableColumns.filter(({ name })=>quickFilterColumns?.includes(name));
|
|
29
|
+
const getFilterControls = ()=>{
|
|
30
|
+
const controls = [];
|
|
31
|
+
if (allowFind) controls.push(/*#__PURE__*/ jsxs(FormField, {
|
|
32
|
+
"data-embedded": true,
|
|
33
|
+
"data-field": "find",
|
|
34
|
+
children: [
|
|
35
|
+
/*#__PURE__*/ jsx(FormFieldLabel, {
|
|
36
|
+
children: "Find"
|
|
37
|
+
}),
|
|
38
|
+
/*#__PURE__*/ jsx(VuuInput, {
|
|
39
|
+
inputProps: {
|
|
40
|
+
onChange
|
|
41
|
+
},
|
|
42
|
+
onCommit: onCommit,
|
|
43
|
+
startAdornment: searchIcon,
|
|
44
|
+
variant: "secondary"
|
|
45
|
+
})
|
|
46
|
+
]
|
|
47
|
+
}, "find"));
|
|
48
|
+
filterColumns?.forEach((column)=>controls.push(/*#__PURE__*/ jsxs(FormField, {
|
|
49
|
+
"data-field": column.name,
|
|
50
|
+
children: [
|
|
51
|
+
/*#__PURE__*/ jsx(FormFieldLabel, {
|
|
52
|
+
children: column.label ?? column.name
|
|
53
|
+
}),
|
|
54
|
+
getDataItemEditControl({
|
|
55
|
+
dataDescriptor: column,
|
|
56
|
+
onCommit,
|
|
57
|
+
table: vuuTable
|
|
58
|
+
})
|
|
59
|
+
]
|
|
60
|
+
}, column.label ?? column.name)));
|
|
61
|
+
return controls;
|
|
62
|
+
};
|
|
63
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
64
|
+
className: classBase,
|
|
65
|
+
ref: rootRef,
|
|
66
|
+
children: [
|
|
67
|
+
/*#__PURE__*/ jsx("div", {
|
|
68
|
+
className: `${classBase}-filter-container`,
|
|
69
|
+
children: getFilterControls()
|
|
70
|
+
}),
|
|
71
|
+
allowAddColumn ? /*#__PURE__*/ jsx(ColumnPicker, {
|
|
72
|
+
columns: availableColumnNames,
|
|
73
|
+
icon: "more-horiz",
|
|
74
|
+
iconSize: 16,
|
|
75
|
+
onSelectionChange: onColumnsSelectionChange,
|
|
76
|
+
selected: quickFilterColumns
|
|
77
|
+
}) : null
|
|
78
|
+
]
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
export { QuickFilters_QuickFilters as QuickFilters };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./QuickFilters.js";
|