@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,139 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var core = require('@salt-ds/core');
|
|
4
|
-
var react = require('react');
|
|
5
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
6
|
-
|
|
7
|
-
const injectInputProps = (InputProps2, inputProps) => {
|
|
8
|
-
if (InputProps2 === void 0) {
|
|
9
|
-
return {
|
|
10
|
-
inputProps
|
|
11
|
-
};
|
|
12
|
-
} else {
|
|
13
|
-
return {
|
|
14
|
-
...InputProps2,
|
|
15
|
-
inputProps: {
|
|
16
|
-
...InputProps2.inputProps,
|
|
17
|
-
...inputProps
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
const useColumnFilter = ({
|
|
23
|
-
InputProps: InputPropsProp,
|
|
24
|
-
column,
|
|
25
|
-
defaultValue,
|
|
26
|
-
extendedFilterOptions,
|
|
27
|
-
onColumnFilterChange,
|
|
28
|
-
onColumnRangeFilterChange,
|
|
29
|
-
onCommit,
|
|
30
|
-
operator = "=",
|
|
31
|
-
value: valueProp
|
|
32
|
-
}) => {
|
|
33
|
-
const [isInvalid, setIsInvalid] = react.useState(false);
|
|
34
|
-
const [value, setValue] = core.useControlled({
|
|
35
|
-
controlled: valueProp,
|
|
36
|
-
default: defaultValue,
|
|
37
|
-
name: "ColumnFilterNext",
|
|
38
|
-
state: "value"
|
|
39
|
-
});
|
|
40
|
-
const handleCommit = react.useCallback(
|
|
41
|
-
(_e, newValue = "") => {
|
|
42
|
-
if (Array.isArray(value)) {
|
|
43
|
-
if (vuuUtils.isBetweenOperator(operator)) {
|
|
44
|
-
setValue([`${newValue}`, value[1]]);
|
|
45
|
-
onCommit?.(
|
|
46
|
-
column,
|
|
47
|
-
operator,
|
|
48
|
-
[`${newValue}`, value[1]],
|
|
49
|
-
extendedFilterOptions
|
|
50
|
-
);
|
|
51
|
-
} else {
|
|
52
|
-
throw Error(
|
|
53
|
-
`[useColumnFilterNext] value has been initialised incorrectly for non-range filter`
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
} else {
|
|
57
|
-
setValue(newValue);
|
|
58
|
-
onCommit?.(column, operator, `${newValue}`, extendedFilterOptions);
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
[value, operator, setValue, onCommit, column, extendedFilterOptions]
|
|
62
|
-
);
|
|
63
|
-
const handleRangeCommit = react.useCallback(
|
|
64
|
-
(_e, newValue = "") => {
|
|
65
|
-
if (Array.isArray(value)) {
|
|
66
|
-
const [firstValue] = value;
|
|
67
|
-
const newRange = [value[0], `${newValue}`];
|
|
68
|
-
setValue(newRange);
|
|
69
|
-
const validRange = vuuUtils.isValidRange(newRange);
|
|
70
|
-
setIsInvalid(!validRange);
|
|
71
|
-
if (validRange) {
|
|
72
|
-
onCommit?.(
|
|
73
|
-
column,
|
|
74
|
-
operator,
|
|
75
|
-
[firstValue, `${newValue}`],
|
|
76
|
-
extendedFilterOptions
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
} else if (value !== "") {
|
|
80
|
-
const currentValue = `${value}`;
|
|
81
|
-
setValue([currentValue, `${newValue}`]);
|
|
82
|
-
onCommit?.(
|
|
83
|
-
column,
|
|
84
|
-
operator,
|
|
85
|
-
[currentValue, `${newValue}`],
|
|
86
|
-
extendedFilterOptions
|
|
87
|
-
);
|
|
88
|
-
} else {
|
|
89
|
-
throw Error(
|
|
90
|
-
`[useColumnFilterNext] value has been initialised incorrectly for range filter`
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
[value, setValue, onCommit, column, operator, extendedFilterOptions]
|
|
95
|
-
);
|
|
96
|
-
const onChange = react.useCallback(
|
|
97
|
-
(e) => {
|
|
98
|
-
const { value: value2 = "" } = e.target;
|
|
99
|
-
setValue((v) => Array.isArray(v) ? [value2, v[1]] : value2);
|
|
100
|
-
onColumnFilterChange?.(e.target.value, column, operator);
|
|
101
|
-
},
|
|
102
|
-
[column, onColumnFilterChange, operator, setValue]
|
|
103
|
-
);
|
|
104
|
-
const onRangeInputChange = react.useCallback(
|
|
105
|
-
(e) => {
|
|
106
|
-
const { value: value2 = "" } = e.target;
|
|
107
|
-
setValue((v) => Array.isArray(v) ? [v[0], value2] : value2);
|
|
108
|
-
onColumnRangeFilterChange?.(value2, column, operator);
|
|
109
|
-
},
|
|
110
|
-
[setValue, onColumnRangeFilterChange, column, operator]
|
|
111
|
-
);
|
|
112
|
-
const InputProps2 = react.useMemo(
|
|
113
|
-
() => injectInputProps(InputPropsProp, {
|
|
114
|
-
onChange,
|
|
115
|
-
value: Array.isArray(value) ? value[0] : value
|
|
116
|
-
}),
|
|
117
|
-
[InputPropsProp, onChange, value]
|
|
118
|
-
);
|
|
119
|
-
const InputPropsRange = react.useMemo(
|
|
120
|
-
() => injectInputProps(
|
|
121
|
-
InputPropsProp,
|
|
122
|
-
Array.isArray(value) ? {
|
|
123
|
-
onChange: onRangeInputChange,
|
|
124
|
-
value: value[1]
|
|
125
|
-
} : void 0
|
|
126
|
-
),
|
|
127
|
-
[InputPropsProp, onRangeInputChange, value]
|
|
128
|
-
);
|
|
129
|
-
return {
|
|
130
|
-
InputProps: InputProps2,
|
|
131
|
-
InputPropsRange,
|
|
132
|
-
isInvalid,
|
|
133
|
-
onCommit: handleCommit,
|
|
134
|
-
onCommitRange: handleRangeCommit
|
|
135
|
-
};
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
exports.useColumnFilter = useColumnFilter;
|
|
139
|
-
//# sourceMappingURL=useColumnFilter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/useColumnFilter.ts"],"sourcesContent":["import {\n ColumnFilterChangeHandler,\n ColumnFilterCommitHandler,\n ColumnFilterOp,\n ColumnFilterValue,\n ExtendedFilterOptions,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { InputProps, useControlled } from \"@salt-ds/core\";\nimport { ChangeEventHandler, useCallback, useMemo, useState } from \"react\";\nimport {\n CommitHandler,\n isBetweenOperator,\n isValidRange,\n} from \"@vuu-ui/vuu-utils\";\nimport { DataItemEditControlProps } from \"@vuu-ui/vuu-data-react\";\n\nconst injectInputProps = (\n InputProps: InputProps | undefined,\n inputProps: InputProps[\"inputProps\"],\n): InputProps => {\n if (InputProps === undefined) {\n return {\n inputProps,\n };\n } else {\n return {\n ...InputProps,\n inputProps: {\n ...InputProps.inputProps,\n ...inputProps,\n },\n };\n }\n};\n\nexport interface ColumnFilterHookProps\n extends Pick<DataItemEditControlProps, \"InputProps\"> {\n column: ColumnDescriptor;\n /**\n * Filter defaultValue. Pair of values expected when operator is\n * 'between'. If provided, component is uncontrolled\n */\n\n defaultValue?: ColumnFilterValue;\n /**\n * Provides for custom filters.\n */\n extendedFilterOptions?: ExtendedFilterOptions;\n\n /**\n * Filter change events.\n */\n onColumnFilterChange?: ColumnFilterChangeHandler;\n /**\n * Filter change events on second control in range filter\n */\n onColumnRangeFilterChange?: ColumnFilterChangeHandler;\n /**\n * Called when user 'commits' filter value, either by pressing enter,\n * tabbing away from control or making selection from list\n */\n onCommit: ColumnFilterCommitHandler;\n operator?: ColumnFilterOp;\n /**\n * Filter value. Pair of values expected when operator is\n * 'between'. If provided, component is controlled.\n */\n value?: ColumnFilterValue;\n}\n\nexport const useColumnFilter = ({\n InputProps: InputPropsProp,\n column,\n defaultValue,\n extendedFilterOptions,\n onColumnFilterChange,\n onColumnRangeFilterChange,\n onCommit,\n operator = \"=\",\n value: valueProp,\n}: ColumnFilterHookProps) => {\n const [isInvalid, setIsInvalid] = useState(false);\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"ColumnFilterNext\",\n state: \"value\",\n });\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (_e, newValue = \"\") => {\n if (Array.isArray(value)) {\n if (isBetweenOperator(operator)) {\n setValue([`${newValue}`, value[1]]);\n onCommit?.(\n column,\n operator,\n [`${newValue}`, value[1]],\n extendedFilterOptions,\n );\n } else {\n throw Error(\n `[useColumnFilterNext] value has been initialised incorrectly for non-range filter`,\n );\n }\n } else {\n setValue(newValue as ColumnFilterValue);\n onCommit?.(column, operator, `${newValue}`, extendedFilterOptions);\n }\n },\n [value, operator, setValue, onCommit, column, extendedFilterOptions],\n );\n\n const handleRangeCommit = useCallback<CommitHandler<HTMLElement>>(\n (_e, newValue = \"\") => {\n if (Array.isArray(value)) {\n const [firstValue] = value as [string, string];\n const newRange: [string, string] = [value[0], `${newValue}`];\n setValue(newRange);\n const validRange = isValidRange(newRange);\n setIsInvalid(!validRange);\n if (validRange) {\n onCommit?.(\n column,\n operator,\n [firstValue, `${newValue}`],\n extendedFilterOptions,\n );\n }\n } else if (value !== \"\") {\n // If we have already committed the first value, filter has been\n // saved as a single value '='.\n const currentValue = `${value}`;\n setValue([currentValue, `${newValue}`]);\n onCommit?.(\n column,\n operator,\n [currentValue, `${newValue}`],\n extendedFilterOptions,\n );\n } else {\n throw Error(\n `[useColumnFilterNext] value has been initialised incorrectly for range filter`,\n );\n }\n },\n [value, setValue, onCommit, column, operator, extendedFilterOptions],\n );\n\n const onChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const { value = \"\" } = e.target;\n setValue((v) => (Array.isArray(v) ? [value, v[1]] : value));\n onColumnFilterChange?.(e.target.value, column, operator);\n },\n [column, onColumnFilterChange, operator, setValue],\n );\n\n const onRangeInputChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n const { value = \"\" } = e.target;\n setValue((v) => (Array.isArray(v) ? [v[0], value] : value));\n\n onColumnRangeFilterChange?.(value, column, operator);\n },\n [setValue, onColumnRangeFilterChange, column, operator],\n );\n\n const InputProps = useMemo(\n () =>\n injectInputProps(InputPropsProp, {\n onChange,\n value: Array.isArray(value) ? value[0] : value,\n }),\n [InputPropsProp, onChange, value],\n );\n\n const InputPropsRange = useMemo(\n () =>\n injectInputProps(\n InputPropsProp,\n Array.isArray(value)\n ? {\n onChange: onRangeInputChange,\n value: value[1],\n }\n : undefined,\n ),\n [InputPropsProp, onRangeInputChange, value],\n );\n\n return {\n InputProps,\n InputPropsRange,\n isInvalid,\n onCommit: handleCommit,\n onCommitRange: handleRangeCommit,\n };\n};\n"],"names":["InputProps","useState","useControlled","useCallback","isBetweenOperator","isValidRange","value","useMemo"],"mappings":"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"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var react = require('react');
|
|
5
|
-
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
6
|
-
var FilterEditor = require('../filter-editor/FilterEditor.js');
|
|
7
|
-
var FilterPill = require('../filter-pill/FilterPill.js');
|
|
8
|
-
var FilterModel = require('../FilterModel.js');
|
|
9
|
-
var useCustomFilters = require('./useCustomFilters.js');
|
|
10
|
-
|
|
11
|
-
const classBase = "vuuCustomFilters";
|
|
12
|
-
const CustomFilters = ({
|
|
13
|
-
columnDescriptors,
|
|
14
|
-
defaultFilterState,
|
|
15
|
-
filterState,
|
|
16
|
-
onApplyFilter,
|
|
17
|
-
onClearFilter,
|
|
18
|
-
onFilterDeleted,
|
|
19
|
-
onFilterRenamed,
|
|
20
|
-
onFilterStateChanged,
|
|
21
|
-
vuuTable
|
|
22
|
-
}) => {
|
|
23
|
-
const rootRef = react.useRef(null);
|
|
24
|
-
const {
|
|
25
|
-
activeFilterIndex,
|
|
26
|
-
addButtonProps,
|
|
27
|
-
columnsByName,
|
|
28
|
-
filters,
|
|
29
|
-
interactedFilterState,
|
|
30
|
-
onCancelEdit,
|
|
31
|
-
onSave,
|
|
32
|
-
FilterPillProps,
|
|
33
|
-
promptProps
|
|
34
|
-
} = useCustomFilters.useCustomFilters({
|
|
35
|
-
containerRef: rootRef,
|
|
36
|
-
columnDescriptors,
|
|
37
|
-
defaultFilterState,
|
|
38
|
-
filterState,
|
|
39
|
-
onApplyFilter,
|
|
40
|
-
onClearFilter,
|
|
41
|
-
onFilterStateChanged,
|
|
42
|
-
onFilterDeleted,
|
|
43
|
-
onFilterRenamed
|
|
44
|
-
});
|
|
45
|
-
const indexOfFilterBeingRenamed = interactedFilterState?.state === "rename" ? interactedFilterState.index : -1;
|
|
46
|
-
const filterModel = useCustomFilters.isEditFilterState(interactedFilterState?.state) ? new FilterModel.FilterModel(interactedFilterState.filter) : void 0;
|
|
47
|
-
const getFilterPills = () => {
|
|
48
|
-
const items = [];
|
|
49
|
-
filters.forEach((filter, i) => {
|
|
50
|
-
items.push(
|
|
51
|
-
/* @__PURE__ */ react.createElement(
|
|
52
|
-
FilterPill.FilterPill,
|
|
53
|
-
{
|
|
54
|
-
...FilterPillProps,
|
|
55
|
-
editing: indexOfFilterBeingRenamed === i,
|
|
56
|
-
columnsByName,
|
|
57
|
-
"data-index": i,
|
|
58
|
-
filter,
|
|
59
|
-
key: `filter-${i}`,
|
|
60
|
-
selected: activeFilterIndex.includes(i)
|
|
61
|
-
}
|
|
62
|
-
)
|
|
63
|
-
);
|
|
64
|
-
});
|
|
65
|
-
return items;
|
|
66
|
-
};
|
|
67
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
68
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "vuuCustomFilters", ref: rootRef, children: [
|
|
69
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-filters`, children: getFilterPills() }),
|
|
70
|
-
/* @__PURE__ */ react.createElement(
|
|
71
|
-
vuuUiControls.IconButton,
|
|
72
|
-
{
|
|
73
|
-
...addButtonProps,
|
|
74
|
-
"aria-label": "Add filter",
|
|
75
|
-
"data-selectable": false,
|
|
76
|
-
icon: "plus",
|
|
77
|
-
key: "filter-add",
|
|
78
|
-
tabIndex: 0,
|
|
79
|
-
variant: "secondary"
|
|
80
|
-
}
|
|
81
|
-
),
|
|
82
|
-
promptProps ? /* @__PURE__ */ jsxRuntime.jsx(vuuUiControls.Prompt, { ...promptProps, open: true }) : null
|
|
83
|
-
] }),
|
|
84
|
-
filterModel && vuuTable && /* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
-
FilterEditor.FilterEditor,
|
|
86
|
-
{
|
|
87
|
-
columnDescriptors,
|
|
88
|
-
onCancel: onCancelEdit,
|
|
89
|
-
onSave,
|
|
90
|
-
filter: interactedFilterState?.filter,
|
|
91
|
-
vuuTable
|
|
92
|
-
},
|
|
93
|
-
"filter-editor"
|
|
94
|
-
)
|
|
95
|
-
] });
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
exports.CustomFilters = CustomFilters;
|
|
99
|
-
//# sourceMappingURL=CustomFilters.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFilters.js","sources":["../../../../packages/vuu-filters/src/custom-filters/CustomFilters.tsx"],"sourcesContent":["import { Prompt } from \"@vuu-ui/vuu-ui-controls\";\nimport type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { IconButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { HTMLAttributes, ReactElement, useRef } from \"react\";\nimport { type FilterBarProps } from \"../filter-bar\";\nimport { FilterEditor } from \"../filter-editor\";\nimport { FilterPill } from \"../filter-pill\";\nimport { FilterModel } from \"../FilterModel\";\nimport { isEditFilterState, useCustomFilters } from \"./useCustomFilters\";\n\nconst classBase = \"vuuCustomFilters\";\n\nexport interface CustomFilterProps\n extends HTMLAttributes<HTMLDivElement>,\n Pick<\n FilterBarProps,\n | \"defaultFilterState\"\n | \"filterState\"\n | \"onApplyFilter\"\n | \"onClearFilter\"\n | \"onFilterDeleted\"\n | \"onFilterRenamed\"\n | \"onFilterStateChanged\"\n | \"vuuTable\"\n > {\n columnDescriptors: readonly ColumnDescriptor[];\n}\n\nexport const CustomFilters = ({\n columnDescriptors,\n defaultFilterState,\n filterState,\n onApplyFilter,\n onClearFilter,\n onFilterDeleted,\n onFilterRenamed,\n onFilterStateChanged,\n vuuTable,\n}: CustomFilterProps) => {\n const rootRef = useRef<HTMLDivElement>(null);\n\n const {\n activeFilterIndex,\n addButtonProps,\n columnsByName,\n filters,\n interactedFilterState,\n onCancelEdit,\n onSave,\n FilterPillProps,\n promptProps,\n } = useCustomFilters({\n containerRef: rootRef,\n columnDescriptors,\n defaultFilterState,\n filterState,\n onApplyFilter,\n onClearFilter,\n onFilterStateChanged,\n onFilterDeleted,\n onFilterRenamed,\n });\n\n const indexOfFilterBeingRenamed =\n interactedFilterState?.state === \"rename\"\n ? interactedFilterState.index\n : -1;\n\n const filterModel = isEditFilterState(interactedFilterState?.state)\n ? new FilterModel(interactedFilterState.filter)\n : undefined;\n\n const getFilterPills = () => {\n const items: ReactElement[] = [];\n filters.forEach((filter, i) => {\n items.push(\n <FilterPill\n {...FilterPillProps}\n editing={indexOfFilterBeingRenamed === i}\n columnsByName={columnsByName}\n data-index={i}\n filter={filter}\n key={`filter-${i}`}\n selected={activeFilterIndex.includes(i)}\n />,\n );\n });\n return items;\n };\n\n return (\n <>\n <div className=\"vuuCustomFilters\" ref={rootRef}>\n <div className={`${classBase}-filters`}>{getFilterPills()}</div>\n <IconButton\n {...addButtonProps}\n aria-label=\"Add filter\"\n data-selectable={false}\n icon=\"plus\"\n key=\"filter-add\"\n tabIndex={0}\n variant=\"secondary\"\n />\n\n {promptProps ? <Prompt {...promptProps} open /> : null}\n </div>\n {filterModel && vuuTable && (\n <FilterEditor\n columnDescriptors={columnDescriptors}\n key=\"filter-editor\"\n onCancel={onCancelEdit}\n onSave={onSave}\n filter={interactedFilterState?.filter}\n vuuTable={vuuTable}\n />\n )}\n </>\n );\n};\n"],"names":["useRef","useCustomFilters","isEditFilterState","FilterModel","createElement","FilterPill","jsxs","Fragment","jsx","IconButton","Prompt","FilterEditor"],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
-
|
|
5
|
-
const QUERY_ADD_BUTTON = '.saltButton:has([aria-label="Add filter"])';
|
|
6
|
-
const navigateToNextItem = (el, direction = "fwd") => {
|
|
7
|
-
const pill = vuuUtils.queryClosest(el, ".vuuFilterPill");
|
|
8
|
-
if (pill) {
|
|
9
|
-
const index = vuuUtils.getElementDataIndex(pill);
|
|
10
|
-
if (typeof index === "number") {
|
|
11
|
-
const target = direction === "fwd" ? vuuUtils.getElementByDataIndex(pill.parentElement, index + 1) : vuuUtils.getElementByDataIndex(pill.parentElement, index - 1);
|
|
12
|
-
if (target) {
|
|
13
|
-
target.focus();
|
|
14
|
-
} else if (direction === "fwd") {
|
|
15
|
-
const filterBar = vuuUtils.queryClosest(el, ".vuuFilterBar");
|
|
16
|
-
const addButton = filterBar?.querySelector(
|
|
17
|
-
QUERY_ADD_BUTTON
|
|
18
|
-
);
|
|
19
|
-
addButton?.focus();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
} else {
|
|
23
|
-
const button = vuuUtils.queryClosest(el, QUERY_ADD_BUTTON);
|
|
24
|
-
if (button) {
|
|
25
|
-
const filterBar = vuuUtils.queryClosest(el, ".vuuFilterBar");
|
|
26
|
-
const target = filterBar?.querySelector(
|
|
27
|
-
".vuuFilterPill:last-child"
|
|
28
|
-
);
|
|
29
|
-
target?.focus();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
exports.navigateToNextItem = navigateToNextItem;
|
|
35
|
-
//# sourceMappingURL=filterBarFocusManagement.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filterBarFocusManagement.js","sources":["../../../../packages/vuu-filters/src/custom-filters/filterBarFocusManagement.ts"],"sourcesContent":["import {\n getElementByDataIndex,\n getElementDataIndex,\n queryClosest,\n} from \"@vuu-ui/vuu-utils\";\n\nconst QUERY_ADD_BUTTON = '.saltButton:has([aria-label=\"Add filter\"])';\n\nexport const navigateToNextItem = (\n el: HTMLElement | EventTarget,\n direction: \"bwd\" | \"fwd\" = \"fwd\",\n) => {\n const pill = queryClosest(el, \".vuuFilterPill\");\n if (pill) {\n const index = getElementDataIndex(pill);\n if (typeof index === \"number\") {\n const target =\n direction === \"fwd\"\n ? getElementByDataIndex(pill.parentElement, index + 1)\n : getElementByDataIndex(pill.parentElement, index - 1);\n if (target) {\n target.focus();\n } else if (direction === \"fwd\") {\n const filterBar = queryClosest(el, \".vuuFilterBar\");\n const addButton = filterBar?.querySelector(\n QUERY_ADD_BUTTON,\n ) as HTMLElement;\n addButton?.focus();\n }\n }\n } else {\n const button = queryClosest(el, QUERY_ADD_BUTTON);\n if (button) {\n const filterBar = queryClosest(el, \".vuuFilterBar\");\n const target = filterBar?.querySelector(\n \".vuuFilterPill:last-child\",\n ) as HTMLElement;\n target?.focus();\n }\n }\n};\n"],"names":["queryClosest","getElementDataIndex","getElementByDataIndex"],"mappings":";;;;AAMA,MAAM,gBAAmB,GAAA,4CAAA;AAElB,MAAM,kBAAqB,GAAA,CAChC,EACA,EAAA,SAAA,GAA2B,KACxB,KAAA;AACH,EAAM,MAAA,IAAA,GAAOA,qBAAa,CAAA,EAAA,EAAI,gBAAgB,CAAA;AAC9C,EAAA,IAAI,IAAM,EAAA;AACR,IAAM,MAAA,KAAA,GAAQC,6BAAoB,IAAI,CAAA;AACtC,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,MAAA,MAAM,MACJ,GAAA,SAAA,KAAc,KACV,GAAAC,8BAAA,CAAsB,IAAK,CAAA,aAAA,EAAe,KAAQ,GAAA,CAAC,CACnD,GAAAA,8BAAA,CAAsB,IAAK,CAAA,aAAA,EAAe,QAAQ,CAAC,CAAA;AACzD,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,MAAA,CAAO,KAAM,EAAA;AAAA,OACf,MAAA,IAAW,cAAc,KAAO,EAAA;AAC9B,QAAM,MAAA,SAAA,GAAYF,qBAAa,CAAA,EAAA,EAAI,eAAe,CAAA;AAClD,QAAA,MAAM,YAAY,SAAW,EAAA,aAAA;AAAA,UAC3B;AAAA,SACF;AACA,QAAA,SAAA,EAAW,KAAM,EAAA;AAAA;AACnB;AACF,GACK,MAAA;AACL,IAAM,MAAA,MAAA,GAASA,qBAAa,CAAA,EAAA,EAAI,gBAAgB,CAAA;AAChD,IAAA,IAAI,MAAQ,EAAA;AACV,MAAM,MAAA,SAAA,GAAYA,qBAAa,CAAA,EAAA,EAAI,eAAe,CAAA;AAClD,MAAA,MAAM,SAAS,SAAW,EAAA,aAAA;AAAA,QACxB;AAAA,OACF;AACA,MAAA,MAAA,EAAQ,KAAM,EAAA;AAAA;AAChB;AAEJ;;;;"}
|
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
4
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
-
var react = require('react');
|
|
6
|
-
var filterBarFocusManagement = require('./filterBarFocusManagement.js');
|
|
7
|
-
var useFilterState = require('./useFilterState.js');
|
|
8
|
-
|
|
9
|
-
const isEditFilterState = (filterState) => filterState === "edit" || filterState === "create";
|
|
10
|
-
const useCustomFilters = ({
|
|
11
|
-
columnDescriptors,
|
|
12
|
-
containerRef,
|
|
13
|
-
defaultFilterState,
|
|
14
|
-
filterState,
|
|
15
|
-
onApplyFilter,
|
|
16
|
-
onClearFilter,
|
|
17
|
-
onFilterDeleted,
|
|
18
|
-
onFilterRenamed,
|
|
19
|
-
onFilterStateChanged
|
|
20
|
-
}) => {
|
|
21
|
-
const addButtonRef = react.useRef(null);
|
|
22
|
-
const [interactedFilterState, setInteractedFilterState] = react.useState();
|
|
23
|
-
const [promptProps, setPromptProps] = react.useState(null);
|
|
24
|
-
const editPillLabelAPI = react.useRef(vuuUiControls.NullEditAPI);
|
|
25
|
-
const columnsByName = react.useMemo(
|
|
26
|
-
() => columnDescriptorsByName(columnDescriptors),
|
|
27
|
-
[columnDescriptors]
|
|
28
|
-
);
|
|
29
|
-
const {
|
|
30
|
-
activeFilterIndex,
|
|
31
|
-
filters,
|
|
32
|
-
onAddFilter,
|
|
33
|
-
onChangeFilter,
|
|
34
|
-
onDeleteFilter,
|
|
35
|
-
onRenameFilter,
|
|
36
|
-
onToggleFilterActive
|
|
37
|
-
} = useFilterState.useFilterState({
|
|
38
|
-
defaultFilterState,
|
|
39
|
-
filterState,
|
|
40
|
-
onFilterDeleted,
|
|
41
|
-
onFilterRenamed,
|
|
42
|
-
onFilterStateChanged
|
|
43
|
-
});
|
|
44
|
-
react.useEffect(() => {
|
|
45
|
-
const activeFilters = activeFilterIndex.map((i) => filters[i]);
|
|
46
|
-
const applyFilter = (filter) => {
|
|
47
|
-
if (filter) {
|
|
48
|
-
onApplyFilter(filter);
|
|
49
|
-
} else {
|
|
50
|
-
onClearFilter();
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
if (activeFilters.length === 0) {
|
|
54
|
-
applyFilter();
|
|
55
|
-
} else if (activeFilters.length === 1) {
|
|
56
|
-
const [filter] = activeFilters;
|
|
57
|
-
applyFilter(filter);
|
|
58
|
-
} else {
|
|
59
|
-
applyFilter({ op: "and", filters: activeFilters });
|
|
60
|
-
}
|
|
61
|
-
}, [activeFilterIndex, columnsByName, filters, onApplyFilter, onClearFilter]);
|
|
62
|
-
const editPillLabel = react.useCallback((index, filter) => {
|
|
63
|
-
setTimeout(() => {
|
|
64
|
-
setInteractedFilterState({
|
|
65
|
-
filter,
|
|
66
|
-
index,
|
|
67
|
-
state: "rename"
|
|
68
|
-
});
|
|
69
|
-
}, 100);
|
|
70
|
-
}, []);
|
|
71
|
-
const focusFilterPill = react.useCallback(
|
|
72
|
-
(index = 0) => {
|
|
73
|
-
requestAnimationFrame(() => {
|
|
74
|
-
const target = containerRef.current?.querySelector(
|
|
75
|
-
`.vuuFilterPill[data-index="${index}"] button`
|
|
76
|
-
);
|
|
77
|
-
if (target) {
|
|
78
|
-
target.focus();
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
},
|
|
82
|
-
[containerRef]
|
|
83
|
-
);
|
|
84
|
-
const deleteConfirmed = react.useCallback(
|
|
85
|
-
(filter) => {
|
|
86
|
-
onDeleteFilter(filter);
|
|
87
|
-
requestAnimationFrame(() => {
|
|
88
|
-
if (filters.length) {
|
|
89
|
-
focusFilterPill(0);
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
},
|
|
93
|
-
[filters.length, focusFilterPill, onDeleteFilter]
|
|
94
|
-
);
|
|
95
|
-
const getDeletePrompt = react.useMemo(
|
|
96
|
-
() => (filter) => {
|
|
97
|
-
const close = () => {
|
|
98
|
-
setPromptProps(null);
|
|
99
|
-
focusFilterPill();
|
|
100
|
-
};
|
|
101
|
-
return {
|
|
102
|
-
className: "vuuFilterDeletePrompt",
|
|
103
|
-
confirmButtonLabel: "Remove",
|
|
104
|
-
icon: "warn-triangle",
|
|
105
|
-
initialFocusedItem: "confirm",
|
|
106
|
-
onCancel: close,
|
|
107
|
-
onClose: close,
|
|
108
|
-
onConfirm: () => {
|
|
109
|
-
setPromptProps(null);
|
|
110
|
-
deleteConfirmed(filter);
|
|
111
|
-
},
|
|
112
|
-
children: `Are you sure you want to delete filter '${filter.name}'`,
|
|
113
|
-
title: "Remove Filter",
|
|
114
|
-
status: "warning"
|
|
115
|
-
};
|
|
116
|
-
},
|
|
117
|
-
[deleteConfirmed, focusFilterPill]
|
|
118
|
-
);
|
|
119
|
-
const deleteFilter = react.useCallback(
|
|
120
|
-
(filter, withPrompt) => {
|
|
121
|
-
if (withPrompt) {
|
|
122
|
-
setPromptProps(getDeletePrompt(filter));
|
|
123
|
-
} else {
|
|
124
|
-
deleteConfirmed(filter);
|
|
125
|
-
}
|
|
126
|
-
},
|
|
127
|
-
[deleteConfirmed, getDeletePrompt]
|
|
128
|
-
);
|
|
129
|
-
const handleExitEditFilterName = react.useCallback(
|
|
130
|
-
(_, editedValue = "") => {
|
|
131
|
-
if (interactedFilterState?.state === "rename" && interactedFilterState.filter) {
|
|
132
|
-
const { filter } = interactedFilterState;
|
|
133
|
-
const indexOfEditedFilter = onRenameFilter(filter, editedValue);
|
|
134
|
-
setInteractedFilterState(void 0);
|
|
135
|
-
focusFilterPill(indexOfEditedFilter);
|
|
136
|
-
}
|
|
137
|
-
setInteractedFilterState(void 0);
|
|
138
|
-
},
|
|
139
|
-
[focusFilterPill, interactedFilterState, onRenameFilter]
|
|
140
|
-
);
|
|
141
|
-
const handlePillMenuAction = react.useCallback(
|
|
142
|
-
(menuId, options) => {
|
|
143
|
-
switch (menuId) {
|
|
144
|
-
case "delete-filter": {
|
|
145
|
-
const { filter } = options;
|
|
146
|
-
deleteFilter(filter, true);
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
case "rename-filter": {
|
|
150
|
-
const { filter } = options;
|
|
151
|
-
const index = filters.indexOf(filter);
|
|
152
|
-
editPillLabel(index, filter);
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
case "edit-filter": {
|
|
156
|
-
const { filter } = options;
|
|
157
|
-
setInteractedFilterState({
|
|
158
|
-
filter,
|
|
159
|
-
index: filters.indexOf(filter),
|
|
160
|
-
state: "edit"
|
|
161
|
-
});
|
|
162
|
-
return true;
|
|
163
|
-
}
|
|
164
|
-
default:
|
|
165
|
-
return false;
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
|
-
[deleteFilter, editPillLabel, filters]
|
|
169
|
-
);
|
|
170
|
-
const handlePillKeyDown = react.useCallback((e) => {
|
|
171
|
-
if (e.key === "ArrowRight" || e.key === "ArrowLeft") {
|
|
172
|
-
filterBarFocusManagement.navigateToNextItem(e.target, e.key === "ArrowLeft" ? "bwd" : "fwd");
|
|
173
|
-
}
|
|
174
|
-
}, []);
|
|
175
|
-
const addIfNewElseUpdate = react.useCallback(
|
|
176
|
-
(newOrUpdatedFilter, existing) => {
|
|
177
|
-
if (existing === void 0) {
|
|
178
|
-
const idx = onAddFilter(newOrUpdatedFilter);
|
|
179
|
-
focusFilterPill(idx);
|
|
180
|
-
editPillLabel(idx, newOrUpdatedFilter);
|
|
181
|
-
} else {
|
|
182
|
-
const idx = onChangeFilter(existing, newOrUpdatedFilter);
|
|
183
|
-
focusFilterPill(idx);
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
[editPillLabel, focusFilterPill, onAddFilter, onChangeFilter]
|
|
187
|
-
);
|
|
188
|
-
const filterSaveHandler = react.useCallback(
|
|
189
|
-
(filter) => {
|
|
190
|
-
if (interactedFilterState) {
|
|
191
|
-
const { filter: existingFilter } = interactedFilterState;
|
|
192
|
-
setInteractedFilterState(void 0);
|
|
193
|
-
addIfNewElseUpdate(filter, existingFilter);
|
|
194
|
-
}
|
|
195
|
-
},
|
|
196
|
-
[addIfNewElseUpdate, interactedFilterState]
|
|
197
|
-
);
|
|
198
|
-
const handlePillClick = react.useCallback(
|
|
199
|
-
(e) => {
|
|
200
|
-
const isEditing = e.target.querySelector(
|
|
201
|
-
".vuuEditableLabel-editing"
|
|
202
|
-
);
|
|
203
|
-
if (!isEditing) {
|
|
204
|
-
const pill = vuuUtils.queryClosest(e.target, ".vuuFilterPill");
|
|
205
|
-
if (pill) {
|
|
206
|
-
const index = vuuUtils.getElementDataIndex(pill);
|
|
207
|
-
onToggleFilterActive(index, e.shiftKey);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
},
|
|
211
|
-
[onToggleFilterActive]
|
|
212
|
-
);
|
|
213
|
-
const FilterPillProps2 = {
|
|
214
|
-
editLabelApiRef: editPillLabelAPI,
|
|
215
|
-
// onBeginEdit: handleBeginEditFilterName,
|
|
216
|
-
onClick: handlePillClick,
|
|
217
|
-
onKeyDown: handlePillKeyDown,
|
|
218
|
-
onMenuAction: handlePillMenuAction,
|
|
219
|
-
onExitEditMode: handleExitEditFilterName
|
|
220
|
-
};
|
|
221
|
-
const handleClickAddButton = react.useCallback(() => {
|
|
222
|
-
setInteractedFilterState({
|
|
223
|
-
index: -1,
|
|
224
|
-
state: "create"
|
|
225
|
-
});
|
|
226
|
-
}, []);
|
|
227
|
-
const handleKeyDownAddButton = react.useCallback((evt) => {
|
|
228
|
-
if (evt.key === "ArrowLeft") {
|
|
229
|
-
filterBarFocusManagement.navigateToNextItem(evt.target, "bwd");
|
|
230
|
-
}
|
|
231
|
-
}, []);
|
|
232
|
-
const handleCancelEdit = react.useCallback(() => {
|
|
233
|
-
if (interactedFilterState) {
|
|
234
|
-
const { index } = interactedFilterState;
|
|
235
|
-
if (index === -1) {
|
|
236
|
-
addButtonRef.current?.focus();
|
|
237
|
-
} else {
|
|
238
|
-
focusFilterPill(index);
|
|
239
|
-
}
|
|
240
|
-
setInteractedFilterState(void 0);
|
|
241
|
-
}
|
|
242
|
-
}, [focusFilterPill, interactedFilterState]);
|
|
243
|
-
const addButtonProps = {
|
|
244
|
-
ref: addButtonRef,
|
|
245
|
-
onClick: handleClickAddButton,
|
|
246
|
-
onKeyDown: handleKeyDownAddButton
|
|
247
|
-
};
|
|
248
|
-
return {
|
|
249
|
-
FilterPillProps: FilterPillProps2,
|
|
250
|
-
activeFilterIndex,
|
|
251
|
-
addButtonProps,
|
|
252
|
-
columnsByName,
|
|
253
|
-
filters,
|
|
254
|
-
interactedFilterState,
|
|
255
|
-
onCancelEdit: handleCancelEdit,
|
|
256
|
-
onSave: filterSaveHandler,
|
|
257
|
-
promptProps
|
|
258
|
-
};
|
|
259
|
-
};
|
|
260
|
-
function columnDescriptorsByName(columns) {
|
|
261
|
-
return columns.reduce((m, col) => ({ ...m, [col.name]: col }), {});
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
exports.isEditFilterState = isEditFilterState;
|
|
265
|
-
exports.useCustomFilters = useCustomFilters;
|
|
266
|
-
//# sourceMappingURL=useCustomFilters.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useCustomFilters.js","sources":["../../../../packages/vuu-filters/src/custom-filters/useCustomFilters.ts"],"sourcesContent":["import { ColumnDescriptorsByName, Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { PromptProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n EditableLabelProps,\n EditAPI,\n NullEditAPI,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport { getElementDataIndex, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport {\n KeyboardEventHandler,\n MouseEventHandler,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { FilterBarProps } from \"../filter-bar\";\nimport {\n FilterEditCancelHandler,\n FilterEditSaveHandler,\n} from \"../filter-editor\";\nimport { FilterPillProps } from \"../filter-pill\";\nimport { FilterMenuOptions } from \"../filter-pill-menu\";\nimport { navigateToNextItem } from \"./filterBarFocusManagement\";\nimport { useFilterState } from \"./useFilterState\";\nimport { MenuActionHandler } from \"@vuu-ui/vuu-context-menu\";\n\nexport type EditFilterState = \"create\" | \"edit\";\nexport type FilterState = EditFilterState | \"rename\";\nexport const isEditFilterState = (\n filterState?: string,\n): filterState is EditFilterState =>\n filterState === \"edit\" || filterState === \"create\";\n\ntype InteractedFilterState = {\n filter?: Filter;\n index: number;\n state: FilterState;\n};\n\nexport interface CustomFilterHookProps\n extends Pick<\n FilterBarProps,\n | \"columnDescriptors\"\n | \"defaultFilterState\"\n | \"filterState\"\n | \"onApplyFilter\"\n | \"onClearFilter\"\n | \"onFilterDeleted\"\n | \"onFilterRenamed\"\n | \"onFilterStateChanged\"\n > {\n containerRef: RefObject<HTMLDivElement | null>;\n}\n\nexport const useCustomFilters = ({\n columnDescriptors,\n containerRef,\n defaultFilterState,\n filterState,\n onApplyFilter,\n onClearFilter,\n onFilterDeleted,\n onFilterRenamed,\n onFilterStateChanged,\n}: CustomFilterHookProps) => {\n const addButtonRef = useRef<HTMLButtonElement>(null);\n const [interactedFilterState, setInteractedFilterState] = useState<\n InteractedFilterState | undefined\n >();\n const [promptProps, setPromptProps] = useState<PromptProps | null>(null);\n const editPillLabelAPI = useRef<EditAPI>(NullEditAPI);\n\n const columnsByName = useMemo(\n () => columnDescriptorsByName(columnDescriptors),\n [columnDescriptors],\n );\n\n const {\n activeFilterIndex,\n filters,\n onAddFilter,\n onChangeFilter,\n onDeleteFilter,\n onRenameFilter,\n onToggleFilterActive,\n } = useFilterState({\n defaultFilterState,\n filterState,\n onFilterDeleted,\n onFilterRenamed,\n onFilterStateChanged,\n });\n\n useEffect(() => {\n const activeFilters = activeFilterIndex.map((i) => filters[i]);\n const applyFilter = (filter?: Filter) => {\n if (filter) {\n onApplyFilter(filter);\n } else {\n onClearFilter();\n }\n };\n if (activeFilters.length === 0) {\n applyFilter();\n } else if (activeFilters.length === 1) {\n const [filter] = activeFilters;\n applyFilter(filter);\n } else {\n applyFilter({ op: \"and\", filters: activeFilters });\n }\n }, [activeFilterIndex, columnsByName, filters, onApplyFilter, onClearFilter]);\n\n const editPillLabel = useCallback((index: number, filter: Filter) => {\n setTimeout(() => {\n setInteractedFilterState({\n filter,\n index,\n state: \"rename\",\n });\n }, 100);\n }, []);\n\n const focusFilterPill = useCallback(\n (index = 0) => {\n requestAnimationFrame(() => {\n const target = containerRef.current?.querySelector(\n `.vuuFilterPill[data-index=\"${index}\"] button`,\n ) as undefined | HTMLInputElement;\n if (target) {\n target.focus();\n }\n });\n },\n [containerRef],\n );\n\n const deleteConfirmed = useCallback(\n (filter: Filter) => {\n onDeleteFilter(filter);\n\n // TODO move focus to next/previous filter\n requestAnimationFrame(() => {\n if (filters.length) {\n focusFilterPill(0);\n }\n });\n },\n [filters.length, focusFilterPill, onDeleteFilter],\n );\n\n const getDeletePrompt = useMemo(\n () => (filter: Filter) => {\n const close = () => {\n setPromptProps(null);\n focusFilterPill();\n };\n return {\n className: \"vuuFilterDeletePrompt\",\n confirmButtonLabel: \"Remove\",\n icon: \"warn-triangle\",\n initialFocusedItem: \"confirm\",\n onCancel: close,\n onClose: close,\n onConfirm: () => {\n setPromptProps(null);\n deleteConfirmed(filter);\n },\n children: `Are you sure you want to delete filter '${filter.name}'`,\n title: \"Remove Filter\",\n status: \"warning\",\n } as PromptProps;\n },\n [deleteConfirmed, focusFilterPill],\n );\n\n const deleteFilter = useCallback(\n (filter: Filter, withPrompt: boolean) => {\n if (withPrompt) {\n setPromptProps(getDeletePrompt(filter));\n } else {\n deleteConfirmed(filter);\n }\n },\n [deleteConfirmed, getDeletePrompt],\n );\n\n // TODO handle cancel edit name\n const handleExitEditFilterName: EditableLabelProps[\"onExitEditMode\"] =\n useCallback(\n (_, editedValue = \"\") => {\n if (\n interactedFilterState?.state === \"rename\" &&\n interactedFilterState.filter\n ) {\n const { filter } = interactedFilterState;\n const indexOfEditedFilter = onRenameFilter(filter, editedValue);\n\n setInteractedFilterState(undefined);\n focusFilterPill(indexOfEditedFilter);\n }\n setInteractedFilterState(undefined);\n },\n [focusFilterPill, interactedFilterState, onRenameFilter],\n );\n\n const handlePillMenuAction = useCallback<MenuActionHandler>(\n (menuId, options) => {\n switch (menuId) {\n case \"delete-filter\": {\n const { filter } = options as FilterMenuOptions;\n deleteFilter(filter, true);\n return true;\n }\n case \"rename-filter\": {\n const { filter } = options as FilterMenuOptions;\n const index = filters.indexOf(filter);\n editPillLabel(index, filter);\n return true;\n }\n case \"edit-filter\": {\n const { filter } = options as FilterMenuOptions;\n setInteractedFilterState({\n filter,\n index: filters.indexOf(filter),\n state: \"edit\",\n });\n return true;\n }\n default:\n return false;\n }\n },\n [deleteFilter, editPillLabel, filters],\n );\n\n const handlePillKeyDown = useCallback<KeyboardEventHandler>((e) => {\n if (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\") {\n navigateToNextItem(e.target, e.key === \"ArrowLeft\" ? \"bwd\" : \"fwd\");\n }\n }, []);\n\n const addIfNewElseUpdate = useCallback(\n (newOrUpdatedFilter: Filter, existing: Filter | undefined) => {\n if (existing === undefined) {\n const idx = onAddFilter(newOrUpdatedFilter);\n focusFilterPill(idx);\n editPillLabel(idx, newOrUpdatedFilter);\n } else {\n const idx = onChangeFilter(existing, newOrUpdatedFilter);\n focusFilterPill(idx);\n }\n },\n [editPillLabel, focusFilterPill, onAddFilter, onChangeFilter],\n );\n\n const filterSaveHandler = useCallback<FilterEditSaveHandler>(\n (filter) => {\n if (interactedFilterState) {\n const { filter: existingFilter } = interactedFilterState;\n setInteractedFilterState(undefined);\n addIfNewElseUpdate(filter, existingFilter);\n }\n },\n [addIfNewElseUpdate, interactedFilterState],\n );\n\n const handlePillClick = useCallback<MouseEventHandler<HTMLButtonElement>>(\n (e) => {\n const isEditing = (e.target as HTMLElement).querySelector(\n \".vuuEditableLabel-editing\",\n );\n if (!isEditing) {\n const pill = queryClosest(e.target, \".vuuFilterPill\");\n if (pill) {\n const index = getElementDataIndex(pill);\n onToggleFilterActive(index, e.shiftKey);\n }\n }\n },\n [onToggleFilterActive],\n );\n\n const FilterPillProps: Omit<FilterPillProps, \"filter\" | \"selected\"> = {\n editLabelApiRef: editPillLabelAPI,\n // onBeginEdit: handleBeginEditFilterName,\n onClick: handlePillClick,\n onKeyDown: handlePillKeyDown,\n onMenuAction: handlePillMenuAction,\n onExitEditMode: handleExitEditFilterName,\n };\n\n const handleClickAddButton = useCallback(() => {\n setInteractedFilterState({\n index: -1,\n state: \"create\",\n });\n }, []);\n\n const handleKeyDownAddButton = useCallback<KeyboardEventHandler>((evt) => {\n if (evt.key === \"ArrowLeft\") {\n navigateToNextItem(evt.target, \"bwd\");\n }\n }, []);\n\n const handleCancelEdit = useCallback<FilterEditCancelHandler>(() => {\n if (interactedFilterState) {\n const { index } = interactedFilterState;\n if (index === -1) {\n addButtonRef.current?.focus();\n } else {\n focusFilterPill(index);\n }\n setInteractedFilterState(undefined);\n }\n }, [focusFilterPill, interactedFilterState]);\n\n const addButtonProps = {\n ref: addButtonRef,\n onClick: handleClickAddButton,\n onKeyDown: handleKeyDownAddButton,\n };\n\n return {\n FilterPillProps,\n activeFilterIndex,\n addButtonProps,\n columnsByName,\n filters,\n interactedFilterState,\n onCancelEdit: handleCancelEdit,\n onSave: filterSaveHandler,\n promptProps,\n };\n};\n\nfunction columnDescriptorsByName(\n columns: readonly ColumnDescriptor[],\n): ColumnDescriptorsByName {\n return columns.reduce((m, col) => ({ ...m, [col.name]: col }), {});\n}\n"],"names":["useRef","useState","NullEditAPI","useMemo","useFilterState","useEffect","useCallback","navigateToNextItem","queryClosest","getElementDataIndex","FilterPillProps"],"mappings":"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"}
|