@vuu-ui/vuu-filters 3.0.0 → 3.1.0-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 +21 -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/cjs/FilterAggregator.js +0 -162
- package/cjs/FilterAggregator.js.map +0 -1
- package/cjs/FilterModel.js +0 -227
- package/cjs/FilterModel.js.map +0 -1
- package/cjs/column-filter/ColumnFilter.css.js +0 -6
- package/cjs/column-filter/ColumnFilter.css.js.map +0 -1
- package/cjs/column-filter/ColumnFilter.js +0 -83
- package/cjs/column-filter/ColumnFilter.js.map +0 -1
- package/cjs/column-filter/useColumnFilter.js +0 -139
- package/cjs/column-filter/useColumnFilter.js.map +0 -1
- package/cjs/custom-filters/CustomFilters.js +0 -99
- package/cjs/custom-filters/CustomFilters.js.map +0 -1
- package/cjs/custom-filters/filterBarFocusManagement.js +0 -35
- package/cjs/custom-filters/filterBarFocusManagement.js.map +0 -1
- package/cjs/custom-filters/useCustomFilters.js +0 -266
- package/cjs/custom-filters/useCustomFilters.js.map +0 -1
- package/cjs/custom-filters/useFilterState.js +0 -149
- package/cjs/custom-filters/useFilterState.js.map +0 -1
- package/cjs/filter-bar/FilterBar.css.js +0 -6
- package/cjs/filter-bar/FilterBar.css.js.map +0 -1
- package/cjs/filter-bar/FilterBar.js +0 -123
- package/cjs/filter-bar/FilterBar.js.map +0 -1
- package/cjs/filter-bar/useFilterBar.js +0 -37
- package/cjs/filter-bar/useFilterBar.js.map +0 -1
- package/cjs/filter-clause/ExpandoCombobox.css.js +0 -6
- package/cjs/filter-clause/ExpandoCombobox.css.js.map +0 -1
- package/cjs/filter-clause/ExpandoCombobox.js +0 -114
- package/cjs/filter-clause/ExpandoCombobox.js.map +0 -1
- package/cjs/filter-clause/FilterClause.css.js +0 -6
- package/cjs/filter-clause/FilterClause.css.js.map +0 -1
- package/cjs/filter-clause/FilterClause.js +0 -102
- package/cjs/filter-clause/FilterClause.js.map +0 -1
- package/cjs/filter-clause/column-picker/ColumnPicker.js +0 -39
- package/cjs/filter-clause/column-picker/ColumnPicker.js.map +0 -1
- package/cjs/filter-clause/column-picker/useColumnPicker.js +0 -61
- package/cjs/filter-clause/column-picker/useColumnPicker.js.map +0 -1
- package/cjs/filter-clause/filterClauseFocusManagement.js +0 -204
- package/cjs/filter-clause/filterClauseFocusManagement.js.map +0 -1
- package/cjs/filter-clause/operator-picker/OperatorPicker.js +0 -40
- package/cjs/filter-clause/operator-picker/OperatorPicker.js.map +0 -1
- package/cjs/filter-clause/operator-picker/operator-utils.js +0 -34
- package/cjs/filter-clause/operator-picker/operator-utils.js.map +0 -1
- package/cjs/filter-clause/operator-picker/useOperatorPicker.js +0 -61
- package/cjs/filter-clause/operator-picker/useOperatorPicker.js.map +0 -1
- package/cjs/filter-clause/useFilterClause.js +0 -172
- package/cjs/filter-clause/useFilterClause.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditor.js +0 -93
- package/cjs/filter-clause/value-editors/FilterClauseValueEditor.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorDate.js +0 -64
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorDate.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorNumber.js +0 -55
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorNumber.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorText.js +0 -222
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorText.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorTime.js +0 -62
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorTime.js.map +0 -1
- package/cjs/filter-container/ExtendedSingleValueFilterClause.js +0 -63
- package/cjs/filter-container/ExtendedSingleValueFilterClause.js.map +0 -1
- package/cjs/filter-container/FilterContainer.css.js +0 -6
- package/cjs/filter-container/FilterContainer.css.js.map +0 -1
- package/cjs/filter-container/FilterContainer.js +0 -145
- package/cjs/filter-container/FilterContainer.js.map +0 -1
- package/cjs/filter-container/useFilterContainer.js +0 -137
- package/cjs/filter-container/useFilterContainer.js.map +0 -1
- package/cjs/filter-context-menu/useFilterContextMenu.js +0 -129
- package/cjs/filter-context-menu/useFilterContextMenu.js.map +0 -1
- package/cjs/filter-display/FilterDisplay.css.js +0 -6
- package/cjs/filter-display/FilterDisplay.css.js.map +0 -1
- package/cjs/filter-display/FilterDisplay.js +0 -79
- package/cjs/filter-display/FilterDisplay.js.map +0 -1
- package/cjs/filter-editor/FilterClauseCombinator.css.js +0 -6
- package/cjs/filter-editor/FilterClauseCombinator.css.js.map +0 -1
- package/cjs/filter-editor/FilterClauseCombinator.js +0 -42
- package/cjs/filter-editor/FilterClauseCombinator.js.map +0 -1
- package/cjs/filter-editor/FilterEditor.css.js +0 -6
- package/cjs/filter-editor/FilterEditor.css.js.map +0 -1
- package/cjs/filter-editor/FilterEditor.js +0 -101
- package/cjs/filter-editor/FilterEditor.js.map +0 -1
- package/cjs/filter-editor/useFilterEditor.js +0 -191
- package/cjs/filter-editor/useFilterEditor.js.map +0 -1
- package/cjs/filter-panel/FilterPanel.css.js +0 -6
- package/cjs/filter-panel/FilterPanel.css.js.map +0 -1
- package/cjs/filter-panel/FilterPanel.js +0 -91
- package/cjs/filter-panel/FilterPanel.js.map +0 -1
- package/cjs/filter-panel/useFilterPanel.js +0 -68
- package/cjs/filter-panel/useFilterPanel.js.map +0 -1
- package/cjs/filter-pill/FilterMenu.js +0 -63
- package/cjs/filter-pill/FilterMenu.js.map +0 -1
- package/cjs/filter-pill/FilterPill.css.js +0 -6
- package/cjs/filter-pill/FilterPill.css.js.map +0 -1
- package/cjs/filter-pill/FilterPill.js +0 -147
- package/cjs/filter-pill/FilterPill.js.map +0 -1
- package/cjs/filter-pill/FilterPillNext.css.js +0 -6
- package/cjs/filter-pill/FilterPillNext.css.js.map +0 -1
- package/cjs/filter-pill/FilterPillNext.js +0 -91
- package/cjs/filter-pill/FilterPillNext.js.map +0 -1
- package/cjs/filter-pill/filterAsReactNode.js +0 -27
- package/cjs/filter-pill/filterAsReactNode.js.map +0 -1
- package/cjs/filter-pill/getFilterLabel.js +0 -22
- package/cjs/filter-pill/getFilterLabel.js.map +0 -1
- package/cjs/filter-pill/getFilterTooltipText.js +0 -41
- package/cjs/filter-pill/getFilterTooltipText.js.map +0 -1
- package/cjs/filter-pill/useFilterPillNext.js +0 -65
- package/cjs/filter-pill/useFilterPillNext.js.map +0 -1
- package/cjs/filter-pill-menu/FilterPillMenuOptions.js +0 -32
- package/cjs/filter-pill-menu/FilterPillMenuOptions.js.map +0 -1
- package/cjs/filter-provider/FilterContext.js +0 -105
- package/cjs/filter-provider/FilterContext.js.map +0 -1
- package/cjs/filter-provider/FilterProvider.js +0 -240
- package/cjs/filter-provider/FilterProvider.js.map +0 -1
- package/cjs/filter-provider/filter-descriptor-utils.js +0 -67
- package/cjs/filter-provider/filter-descriptor-utils.js.map +0 -1
- package/cjs/filter-utils.js +0 -367
- package/cjs/filter-utils.js.map +0 -1
- package/cjs/index.js +0 -80
- package/cjs/index.js.map +0 -1
- package/cjs/inline-filter/InlineFilter.css.js +0 -6
- package/cjs/inline-filter/InlineFilter.css.js.map +0 -1
- package/cjs/inline-filter/InlineFilter.js +0 -70
- package/cjs/inline-filter/InlineFilter.js.map +0 -1
- package/cjs/inline-filter/useInlineFilter.js +0 -16
- package/cjs/inline-filter/useInlineFilter.js.map +0 -1
- package/cjs/quick-filters/QuickFilters.css.js +0 -6
- package/cjs/quick-filters/QuickFilters.css.js.map +0 -1
- package/cjs/quick-filters/QuickFilters.js +0 -98
- package/cjs/quick-filters/QuickFilters.js.map +0 -1
- package/cjs/quick-filters/useQuickFilters.js +0 -152
- package/cjs/quick-filters/useQuickFilters.js.map +0 -1
- package/cjs/saved-filters/DeleteFilterPrompt.js +0 -37
- package/cjs/saved-filters/DeleteFilterPrompt.js.map +0 -1
- package/cjs/saved-filters/FilterNamePrompt.css.js +0 -6
- package/cjs/saved-filters/FilterNamePrompt.css.js.map +0 -1
- package/cjs/saved-filters/FilterNamePrompt.js +0 -89
- package/cjs/saved-filters/FilterNamePrompt.js.map +0 -1
- package/cjs/saved-filters/SavedFilterPanel.css.js +0 -6
- package/cjs/saved-filters/SavedFilterPanel.css.js.map +0 -1
- package/cjs/saved-filters/SavedFilterPanel.js +0 -62
- package/cjs/saved-filters/SavedFilterPanel.js.map +0 -1
- package/cjs/saved-filters/useFilterNamePrompt.js +0 -98
- package/cjs/saved-filters/useFilterNamePrompt.js.map +0 -1
- package/cjs/saved-filters/useSavedFilterPanel.js +0 -29
- package/cjs/saved-filters/useSavedFilterPanel.js.map +0 -1
- package/cjs/tabbed-filter-container/TabbedFilterContainer.css.js +0 -6
- package/cjs/tabbed-filter-container/TabbedFilterContainer.css.js.map +0 -1
- package/cjs/tabbed-filter-container/TabbedFilterContainer.js +0 -57
- package/cjs/tabbed-filter-container/TabbedFilterContainer.js.map +0 -1
- package/cjs/toggle-filter/ToggleFilter.css.js +0 -6
- package/cjs/toggle-filter/ToggleFilter.css.js.map +0 -1
- package/cjs/toggle-filter/ToggleFilter.js +0 -85
- package/cjs/toggle-filter/ToggleFilter.js.map +0 -1
- package/cjs/toggle-filter/useToggleFilter.js +0 -67
- package/cjs/toggle-filter/useToggleFilter.js.map +0 -1
- package/esm/FilterAggregator.js +0 -160
- package/esm/FilterAggregator.js.map +0 -1
- package/esm/FilterModel.js +0 -224
- package/esm/FilterModel.js.map +0 -1
- package/esm/column-filter/ColumnFilter.css.js +0 -4
- package/esm/column-filter/ColumnFilter.css.js.map +0 -1
- package/esm/column-filter/ColumnFilter.js +0 -81
- package/esm/column-filter/ColumnFilter.js.map +0 -1
- package/esm/column-filter/useColumnFilter.js +0 -137
- package/esm/column-filter/useColumnFilter.js.map +0 -1
- package/esm/custom-filters/CustomFilters.js +0 -97
- package/esm/custom-filters/CustomFilters.js.map +0 -1
- package/esm/custom-filters/filterBarFocusManagement.js +0 -33
- package/esm/custom-filters/filterBarFocusManagement.js.map +0 -1
- package/esm/custom-filters/useCustomFilters.js +0 -263
- package/esm/custom-filters/useCustomFilters.js.map +0 -1
- package/esm/custom-filters/useFilterState.js +0 -147
- package/esm/custom-filters/useFilterState.js.map +0 -1
- package/esm/filter-bar/FilterBar.css.js +0 -4
- package/esm/filter-bar/FilterBar.css.js.map +0 -1
- package/esm/filter-bar/FilterBar.js +0 -121
- package/esm/filter-bar/FilterBar.js.map +0 -1
- package/esm/filter-bar/useFilterBar.js +0 -35
- package/esm/filter-bar/useFilterBar.js.map +0 -1
- package/esm/filter-clause/ExpandoCombobox.css.js +0 -4
- package/esm/filter-clause/ExpandoCombobox.css.js.map +0 -1
- package/esm/filter-clause/ExpandoCombobox.js +0 -112
- package/esm/filter-clause/ExpandoCombobox.js.map +0 -1
- package/esm/filter-clause/FilterClause.css.js +0 -4
- package/esm/filter-clause/FilterClause.css.js.map +0 -1
- package/esm/filter-clause/FilterClause.js +0 -100
- package/esm/filter-clause/FilterClause.js.map +0 -1
- package/esm/filter-clause/column-picker/ColumnPicker.js +0 -37
- package/esm/filter-clause/column-picker/ColumnPicker.js.map +0 -1
- package/esm/filter-clause/column-picker/useColumnPicker.js +0 -59
- package/esm/filter-clause/column-picker/useColumnPicker.js.map +0 -1
- package/esm/filter-clause/filterClauseFocusManagement.js +0 -191
- package/esm/filter-clause/filterClauseFocusManagement.js.map +0 -1
- package/esm/filter-clause/operator-picker/OperatorPicker.js +0 -38
- package/esm/filter-clause/operator-picker/OperatorPicker.js.map +0 -1
- package/esm/filter-clause/operator-picker/operator-utils.js +0 -30
- package/esm/filter-clause/operator-picker/operator-utils.js.map +0 -1
- package/esm/filter-clause/operator-picker/useOperatorPicker.js +0 -59
- package/esm/filter-clause/operator-picker/useOperatorPicker.js.map +0 -1
- package/esm/filter-clause/useFilterClause.js +0 -170
- package/esm/filter-clause/useFilterClause.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditor.js +0 -91
- package/esm/filter-clause/value-editors/FilterClauseValueEditor.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorDate.js +0 -62
- package/esm/filter-clause/value-editors/FilterClauseValueEditorDate.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorNumber.js +0 -53
- package/esm/filter-clause/value-editors/FilterClauseValueEditorNumber.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorText.js +0 -220
- package/esm/filter-clause/value-editors/FilterClauseValueEditorText.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorTime.js +0 -60
- package/esm/filter-clause/value-editors/FilterClauseValueEditorTime.js.map +0 -1
- package/esm/filter-container/ExtendedSingleValueFilterClause.js +0 -60
- package/esm/filter-container/ExtendedSingleValueFilterClause.js.map +0 -1
- package/esm/filter-container/FilterContainer.css.js +0 -4
- package/esm/filter-container/FilterContainer.css.js.map +0 -1
- package/esm/filter-container/FilterContainer.js +0 -142
- package/esm/filter-container/FilterContainer.js.map +0 -1
- package/esm/filter-container/useFilterContainer.js +0 -133
- package/esm/filter-container/useFilterContainer.js.map +0 -1
- package/esm/filter-context-menu/useFilterContextMenu.js +0 -127
- package/esm/filter-context-menu/useFilterContextMenu.js.map +0 -1
- package/esm/filter-display/FilterDisplay.css.js +0 -4
- package/esm/filter-display/FilterDisplay.css.js.map +0 -1
- package/esm/filter-display/FilterDisplay.js +0 -77
- package/esm/filter-display/FilterDisplay.js.map +0 -1
- package/esm/filter-editor/FilterClauseCombinator.css.js +0 -4
- package/esm/filter-editor/FilterClauseCombinator.css.js.map +0 -1
- package/esm/filter-editor/FilterClauseCombinator.js +0 -40
- package/esm/filter-editor/FilterClauseCombinator.js.map +0 -1
- package/esm/filter-editor/FilterEditor.css.js +0 -4
- package/esm/filter-editor/FilterEditor.css.js.map +0 -1
- package/esm/filter-editor/FilterEditor.js +0 -99
- package/esm/filter-editor/FilterEditor.js.map +0 -1
- package/esm/filter-editor/useFilterEditor.js +0 -189
- package/esm/filter-editor/useFilterEditor.js.map +0 -1
- package/esm/filter-panel/FilterPanel.css.js +0 -4
- package/esm/filter-panel/FilterPanel.css.js.map +0 -1
- package/esm/filter-panel/FilterPanel.js +0 -89
- package/esm/filter-panel/FilterPanel.js.map +0 -1
- package/esm/filter-panel/useFilterPanel.js +0 -66
- package/esm/filter-panel/useFilterPanel.js.map +0 -1
- package/esm/filter-pill/FilterMenu.js +0 -61
- package/esm/filter-pill/FilterMenu.js.map +0 -1
- package/esm/filter-pill/FilterPill.css.js +0 -4
- package/esm/filter-pill/FilterPill.css.js.map +0 -1
- package/esm/filter-pill/FilterPill.js +0 -145
- package/esm/filter-pill/FilterPill.js.map +0 -1
- package/esm/filter-pill/FilterPillNext.css.js +0 -4
- package/esm/filter-pill/FilterPillNext.css.js.map +0 -1
- package/esm/filter-pill/FilterPillNext.js +0 -89
- package/esm/filter-pill/FilterPillNext.js.map +0 -1
- package/esm/filter-pill/filterAsReactNode.js +0 -25
- package/esm/filter-pill/filterAsReactNode.js.map +0 -1
- package/esm/filter-pill/getFilterLabel.js +0 -20
- package/esm/filter-pill/getFilterLabel.js.map +0 -1
- package/esm/filter-pill/getFilterTooltipText.js +0 -39
- package/esm/filter-pill/getFilterTooltipText.js.map +0 -1
- package/esm/filter-pill/useFilterPillNext.js +0 -63
- package/esm/filter-pill/useFilterPillNext.js.map +0 -1
- package/esm/filter-pill-menu/FilterPillMenuOptions.js +0 -27
- package/esm/filter-pill-menu/FilterPillMenuOptions.js.map +0 -1
- package/esm/filter-provider/FilterContext.js +0 -94
- package/esm/filter-provider/FilterContext.js.map +0 -1
- package/esm/filter-provider/FilterProvider.js +0 -238
- package/esm/filter-provider/FilterProvider.js.map +0 -1
- package/esm/filter-provider/filter-descriptor-utils.js +0 -61
- package/esm/filter-provider/filter-descriptor-utils.js.map +0 -1
- package/esm/filter-utils.js +0 -344
- package/esm/filter-utils.js.map +0 -1
- package/esm/index.js +0 -26
- package/esm/index.js.map +0 -1
- package/esm/inline-filter/InlineFilter.css.js +0 -4
- package/esm/inline-filter/InlineFilter.css.js.map +0 -1
- package/esm/inline-filter/InlineFilter.js +0 -68
- package/esm/inline-filter/InlineFilter.js.map +0 -1
- package/esm/inline-filter/useInlineFilter.js +0 -14
- package/esm/inline-filter/useInlineFilter.js.map +0 -1
- package/esm/quick-filters/QuickFilters.css.js +0 -4
- package/esm/quick-filters/QuickFilters.css.js.map +0 -1
- package/esm/quick-filters/QuickFilters.js +0 -96
- package/esm/quick-filters/QuickFilters.js.map +0 -1
- package/esm/quick-filters/useQuickFilters.js +0 -150
- package/esm/quick-filters/useQuickFilters.js.map +0 -1
- package/esm/saved-filters/DeleteFilterPrompt.js +0 -35
- package/esm/saved-filters/DeleteFilterPrompt.js.map +0 -1
- package/esm/saved-filters/FilterNamePrompt.css.js +0 -4
- package/esm/saved-filters/FilterNamePrompt.css.js.map +0 -1
- package/esm/saved-filters/FilterNamePrompt.js +0 -87
- package/esm/saved-filters/FilterNamePrompt.js.map +0 -1
- package/esm/saved-filters/SavedFilterPanel.css.js +0 -4
- package/esm/saved-filters/SavedFilterPanel.css.js.map +0 -1
- package/esm/saved-filters/SavedFilterPanel.js +0 -60
- package/esm/saved-filters/SavedFilterPanel.js.map +0 -1
- package/esm/saved-filters/useFilterNamePrompt.js +0 -95
- package/esm/saved-filters/useFilterNamePrompt.js.map +0 -1
- package/esm/saved-filters/useSavedFilterPanel.js +0 -27
- package/esm/saved-filters/useSavedFilterPanel.js.map +0 -1
- package/esm/tabbed-filter-container/TabbedFilterContainer.css.js +0 -4
- package/esm/tabbed-filter-container/TabbedFilterContainer.css.js.map +0 -1
- package/esm/tabbed-filter-container/TabbedFilterContainer.js +0 -55
- package/esm/tabbed-filter-container/TabbedFilterContainer.js.map +0 -1
- package/esm/toggle-filter/ToggleFilter.css.js +0 -4
- package/esm/toggle-filter/ToggleFilter.css.js.map +0 -1
- package/esm/toggle-filter/ToggleFilter.js +0 -83
- package/esm/toggle-filter/ToggleFilter.js.map +0 -1
- package/esm/toggle-filter/useToggleFilter.js +0 -65
- package/esm/toggle-filter/useToggleFilter.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FilterClauseValueEditorText.js","sources":["../../../../../packages/vuu-filters/src/filter-clause/value-editors/FilterClauseValueEditorText.tsx"],"sourcesContent":["import { useTypeaheadSuggestions } from \"@vuu-ui/vuu-data-react\";\nimport type { TypeaheadParams } from \"@vuu-ui/vuu-protocol-types\";\nimport { ExpandoInput, MultiSelectionHandler } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n CommitHandler,\n dispatchKeyboardEvent,\n getVuuTable,\n NO_DATA_MATCH,\n} from \"@vuu-ui/vuu-utils\";\nimport { Option, useForkRef } from \"@salt-ds/core\";\nimport {\n FormEvent,\n ForwardedRef,\n forwardRef,\n HTMLAttributes,\n KeyboardEventHandler,\n SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { ExpandoCombobox } from \"../ExpandoCombobox\";\nimport { FilterClauseValueEditor } from \"../filterClauseTypes\";\n\nexport interface FilterClauseTextValueEditorProps\n extends FilterClauseValueEditor,\n HTMLAttributes<HTMLDivElement> {\n \"data-field\"?: string;\n operator: string;\n value: string | string[];\n dropdownOnAutofocus?: boolean;\n}\n\nexport const FilterClauseValueEditorText = forwardRef(\n function FilterClauseTextValueEditor(\n {\n inputProps: inputPropsProp,\n className,\n column,\n onChangeValue,\n onOpenChange,\n operator,\n table,\n value,\n dropdownOnAutofocus = true,\n }: FilterClauseTextValueEditorProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n ) {\n const isMultiValue = operator === \"in\";\n\n const expandoRef = useRef<HTMLDivElement>(null);\n const combinedRef = useForkRef(forwardedRef, expandoRef);\n\n // If we have a multiselect text value which we are editing, this will render\n // a comma delimited list of the selected values. That is not what we display\n // by default when using a multiselect combo. Its not a huge problem - as soon\n // as user focuses this component and we display dropdown, input text is cleared\n // (so user can type to filter list) until dropdown closes again. <ight need to\n // revisit.\n const [valueInputValue, setValueInputValue] = useState(\n value?.toString() ?? \"\",\n );\n const [typeaheadValues, setTypeaheadValues] = useState<string[] | false>(\n [],\n );\n\n const getSuggestions = useTypeaheadSuggestions();\n\n const handleSingleValueSelectionChange = useCallback(\n (_: SyntheticEvent, [value]: string[]) => onChangeValue(value),\n [onChangeValue],\n );\n\n const handleMultiValueSelectionChange = useCallback<MultiSelectionHandler>(\n // TODO when will this ever be final ?\n (_, values) => onChangeValue(values, false),\n [onChangeValue],\n );\n\n const highlightFirstOption = useCallback(() => {\n if (expandoRef.current) {\n const input = expandoRef.current?.querySelector<HTMLInputElement>(\n 'input[role=\"combobox\"]',\n );\n if (input) {\n requestAnimationFrame(() => {\n dispatchKeyboardEvent(input, \"keydown\", \"ArrowDown\");\n });\n }\n }\n }, []);\n\n const handleOpenChange = useCallback(\n (open: boolean, reason?: \"focus\" | \"input\" | \"manual\") => {\n if (open && reason === \"focus\" && expandoRef.current) {\n highlightFirstOption();\n }\n },\n [highlightFirstOption],\n );\n\n useEffect(() => {\n if (table) {\n const vuuTable = getVuuTable(table);\n const params: TypeaheadParams =\n valueInputValue && !isMultiValue\n ? [vuuTable, column.name, valueInputValue]\n : [vuuTable, column.name];\n getSuggestions(params)\n .then((suggestions) => {\n if (suggestions === false) {\n setTypeaheadValues(false);\n } else if (suggestions.length === 0 && valueInputValue) {\n setTypeaheadValues(NO_DATA_MATCH);\n } else {\n setTypeaheadValues(suggestions);\n }\n })\n .catch((err) => {\n console.error(\"Error getting suggestions\", err);\n });\n }\n }, [table, column, valueInputValue, getSuggestions, isMultiValue]);\n\n const handleInputChange = useCallback(\n (evt: FormEvent<HTMLInputElement>) => {\n const { value } = evt.target as HTMLInputElement;\n setValueInputValue(value);\n // we want to set the filterclause status to valid, but not trigger focus change\n if (\n operator === \"starts\" ||\n operator === \"ends\" ||\n operator === \"contains\"\n ) {\n onChangeValue(value, false);\n }\n },\n [onChangeValue, operator],\n );\n\n const handleInputCommit = useCallback<CommitHandler>(\n (_, value = \"\") => {\n if (typeof value === \"string\") {\n onChangeValue(value);\n }\n },\n [onChangeValue],\n );\n\n const handleKeyDownFreeTextInput = useCallback<\n KeyboardEventHandler<HTMLInputElement>\n >(\n (evt) => {\n if (\n (evt.key === \"Enter\" || evt.key === \"Tab\") &&\n valueInputValue !== \"\"\n ) {\n evt.stopPropagation();\n evt.preventDefault();\n onChangeValue(valueInputValue);\n } else {\n inputPropsProp?.onKeyDown?.(evt);\n }\n },\n [inputPropsProp, onChangeValue, valueInputValue],\n );\n\n const inputProps = useMemo(() => {\n if (operator === \"starts\" || operator === \"ends\") {\n return {\n ...inputPropsProp,\n onKeyDown: handleKeyDownFreeTextInput,\n };\n } else {\n return inputPropsProp;\n }\n }, [inputPropsProp, handleKeyDownFreeTextInput, operator]);\n\n const getValueInputField = useCallback(() => {\n if (typeaheadValues === false) {\n // No typeahead service available\n return (\n <ExpandoInput\n inputProps={inputProps}\n className={className}\n data-field=\"value\"\n value={valueInputValue}\n ref={forwardedRef}\n onChange={handleInputChange}\n onCommit={handleInputCommit}\n />\n );\n }\n switch (operator) {\n case \"in\":\n return (\n <ExpandoCombobox\n inputProps={inputProps}\n className={className}\n data-field=\"value\"\n onChange={handleInputChange}\n onOpenChange={onOpenChange}\n onSelectionChange={handleMultiValueSelectionChange}\n ref={forwardedRef}\n multiselect\n truncate\n value={value}\n dropdownOnAutofocus={dropdownOnAutofocus}\n >\n {typeaheadValues\n // .filter((typeaheadValue) =>\n // typeaheadValue\n // .toLowerCase()\n // .includes(value.trim().toLowerCase())\n // )\n .map((state) => (\n <Option value={state} key={state} />\n ))}\n </ExpandoCombobox>\n );\n case \"starts\": {\n return (\n <ExpandoCombobox\n inputProps={inputProps}\n className={className}\n data-field=\"value\"\n dropdownOnAutofocus={dropdownOnAutofocus}\n onChange={handleInputChange}\n onSelectionChange={handleSingleValueSelectionChange}\n ref={forwardedRef}\n value={value}\n >\n {typeaheadValues.map((state) => (\n <Option value={state} key={state} disabled />\n ))}\n </ExpandoCombobox>\n );\n }\n\n case \"ends\":\n return (\n <ExpandoInput\n inputProps={inputProps}\n className={className}\n data-field=\"value\"\n value={valueInputValue}\n ref={forwardedRef}\n onChange={handleInputChange}\n />\n );\n\n default: {\n return typeaheadValues.length > 0 ? (\n <ExpandoCombobox\n className={className}\n data-field=\"value\"\n dropdownOnAutofocus={dropdownOnAutofocus}\n inputProps={inputProps}\n onChange={handleInputChange}\n onOpenChange={handleOpenChange}\n onSelectionChange={handleSingleValueSelectionChange}\n ref={combinedRef}\n title=\"value\"\n value={value}\n >\n {typeaheadValues.map((state) => (\n <Option value={state} key={state} />\n ))}\n </ExpandoCombobox>\n ) : null;\n }\n }\n }, [\n typeaheadValues,\n operator,\n inputProps,\n className,\n valueInputValue,\n forwardedRef,\n handleInputChange,\n handleInputCommit,\n onOpenChange,\n handleMultiValueSelectionChange,\n value,\n dropdownOnAutofocus,\n handleSingleValueSelectionChange,\n handleOpenChange,\n combinedRef,\n ]);\n\n return getValueInputField();\n },\n);\n"],"names":["forwardRef","useRef","useForkRef","useState","useTypeaheadSuggestions","useCallback","value","dispatchKeyboardEvent","useEffect","getVuuTable","NO_DATA_MATCH","useMemo","jsx","ExpandoInput","ExpandoCombobox","Option"],"mappings":"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"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var react = require('react');
|
|
5
|
-
var date = require('@internationalized/date');
|
|
6
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
7
|
-
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
8
|
-
|
|
9
|
-
const FilterClauseValueEditorTime = (props) => {
|
|
10
|
-
const { className, onChangeValue, operator, value } = props;
|
|
11
|
-
const toEpochMilliS = getEpochMillisConverter(operator);
|
|
12
|
-
const [date, setDate] = react.useState(
|
|
13
|
-
() => getInitialState(value)
|
|
14
|
-
);
|
|
15
|
-
const handleCommit = react.useCallback(
|
|
16
|
-
(e, selectedDateInputValue) => {
|
|
17
|
-
console.log("change time");
|
|
18
|
-
if (selectedDateInputValue) {
|
|
19
|
-
const dateValue = vuuUtils.toCalendarDate(new Date(selectedDateInputValue));
|
|
20
|
-
setDate(dateValue);
|
|
21
|
-
if (selectedDateInputValue) {
|
|
22
|
-
onChangeValue(toEpochMilliS(dateValue));
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
[onChangeValue, toEpochMilliS]
|
|
27
|
-
);
|
|
28
|
-
const onBlur = react.useCallback(() => {
|
|
29
|
-
date && onChangeValue(toEpochMilliS(date));
|
|
30
|
-
}, [date, onChangeValue, toEpochMilliS]);
|
|
31
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
32
|
-
vuuUiControls.VuuTimePicker,
|
|
33
|
-
{
|
|
34
|
-
"data-field": "value",
|
|
35
|
-
className,
|
|
36
|
-
onBlur,
|
|
37
|
-
onCommit: handleCommit
|
|
38
|
-
}
|
|
39
|
-
);
|
|
40
|
-
};
|
|
41
|
-
function getInitialState(value) {
|
|
42
|
-
return value ? vuuUtils.toCalendarDate(new Date(value)) : void 0;
|
|
43
|
-
}
|
|
44
|
-
const getEpochMillisConverter = (op) => (date$1, timezone = date.getLocalTimeZone()) => {
|
|
45
|
-
const d = date$1.toDate(timezone);
|
|
46
|
-
switch (op) {
|
|
47
|
-
case ">":
|
|
48
|
-
case "<=":
|
|
49
|
-
d.setHours(23, 59, 59, 999);
|
|
50
|
-
return d.getTime();
|
|
51
|
-
case ">=":
|
|
52
|
-
case "<":
|
|
53
|
-
case "=":
|
|
54
|
-
// converted to "< `start of next day` and >= `start of this day`" when query is created
|
|
55
|
-
case "!=":
|
|
56
|
-
d.setHours(0, 0, 0, 0);
|
|
57
|
-
return d.getTime();
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
exports.FilterClauseValueEditorTime = FilterClauseValueEditorTime;
|
|
62
|
-
//# sourceMappingURL=FilterClauseValueEditorTime.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FilterClauseValueEditorTime.js","sources":["../../../../../packages/vuu-filters/src/filter-clause/value-editors/FilterClauseValueEditorTime.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\nimport { getLocalTimeZone, DateValue } from \"@internationalized/date\";\nimport { CommitHandler, toCalendarDate } from \"@vuu-ui/vuu-utils\";\nimport { NumericFilterClauseOp } from \"@vuu-ui/vuu-filter-types\";\nimport { FilterClauseValueEditor } from \"../filterClauseTypes\";\nimport { VuuTimePicker } from \"@vuu-ui/vuu-ui-controls\";\n\ninterface FilterClauseValueEditorTimeProps\n extends Pick<FilterClauseValueEditor, \"onChangeValue\" | \"inputProps\"> {\n className?: string;\n value: number | undefined;\n operator: NumericFilterClauseOp;\n}\n\nexport const FilterClauseValueEditorTime = (\n props: FilterClauseValueEditorTimeProps,\n) => {\n const { className, onChangeValue, operator, value } = props;\n const toEpochMilliS = getEpochMillisConverter(operator);\n\n const [date, setDate] = useState<DateValue | undefined>(() =>\n getInitialState(value),\n );\n\n const handleCommit = useCallback<CommitHandler<HTMLInputElement, string>>(\n (e, selectedDateInputValue) => {\n console.log(\"change time\");\n if (selectedDateInputValue) {\n const dateValue = toCalendarDate(new Date(selectedDateInputValue));\n setDate(dateValue);\n if (selectedDateInputValue /* && source === \"calendar\"*/) {\n onChangeValue(toEpochMilliS(dateValue));\n }\n }\n },\n [onChangeValue, toEpochMilliS],\n );\n\n const onBlur = useCallback(() => {\n date && onChangeValue(toEpochMilliS(date));\n }, [date, onChangeValue, toEpochMilliS]);\n\n return (\n <VuuTimePicker\n data-field=\"value\"\n // inputProps={inputProps}\n className={className}\n onBlur={onBlur}\n onCommit={handleCommit}\n // selectedDate={date}\n />\n );\n};\n\nfunction getInitialState(value: FilterClauseValueEditorTimeProps[\"value\"]) {\n return value ? toCalendarDate(new Date(value)) : undefined;\n}\n\nconst getEpochMillisConverter =\n (op: NumericFilterClauseOp) =>\n (date: DateValue, timezone: string = getLocalTimeZone()): number => {\n const d = date.toDate(timezone);\n switch (op) {\n case \">\":\n case \"<=\":\n d.setHours(23, 59, 59, 999);\n return d.getTime();\n case \">=\":\n case \"<\":\n case \"=\": // converted to \"< `start of next day` and >= `start of this day`\" when query is created\n case \"!=\": // converted to \">= `start of next day` or < `start of this day`\" when query is created\n d.setHours(0, 0, 0, 0);\n return d.getTime();\n }\n };\n"],"names":["useState","useCallback","toCalendarDate","jsx","VuuTimePicker","date","getLocalTimeZone"],"mappings":";;;;;;;;AAca,MAAA,2BAAA,GAA8B,CACzC,KACG,KAAA;AACH,EAAA,MAAM,EAAE,SAAA,EAAW,aAAe,EAAA,QAAA,EAAU,OAAU,GAAA,KAAA;AACtD,EAAM,MAAA,aAAA,GAAgB,wBAAwB,QAAQ,CAAA;AAEtD,EAAM,MAAA,CAAC,IAAM,EAAA,OAAO,CAAI,GAAAA,cAAA;AAAA,IAAgC,MACtD,gBAAgB,KAAK;AAAA,GACvB;AAEA,EAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,IACnB,CAAC,GAAG,sBAA2B,KAAA;AAC7B,MAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,MAAA,IAAI,sBAAwB,EAAA;AAC1B,QAAA,MAAM,SAAY,GAAAC,uBAAA,CAAe,IAAI,IAAA,CAAK,sBAAsB,CAAC,CAAA;AACjE,QAAA,OAAA,CAAQ,SAAS,CAAA;AACjB,QAAA,IAAI,sBAAsD,EAAA;AACxD,UAAc,aAAA,CAAA,aAAA,CAAc,SAAS,CAAC,CAAA;AAAA;AACxC;AACF,KACF;AAAA,IACA,CAAC,eAAe,aAAa;AAAA,GAC/B;AAEA,EAAM,MAAA,MAAA,GAASD,kBAAY,MAAM;AAC/B,IAAQ,IAAA,IAAA,aAAA,CAAc,aAAc,CAAA,IAAI,CAAC,CAAA;AAAA,GACxC,EAAA,CAAC,IAAM,EAAA,aAAA,EAAe,aAAa,CAAC,CAAA;AAEvC,EACE,uBAAAE,cAAA;AAAA,IAACC,2BAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,OAAA;AAAA,MAEX,SAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAU,EAAA;AAAA;AAAA,GAEZ;AAEJ;AAEA,SAAS,gBAAgB,KAAkD,EAAA;AACzE,EAAA,OAAO,QAAQF,uBAAe,CAAA,IAAI,IAAK,CAAA,KAAK,CAAC,CAAI,GAAA,KAAA,CAAA;AACnD;AAEA,MAAM,0BACJ,CAAC,EAAA,KACD,CAACG,MAAiB,EAAA,QAAA,GAAmBC,uBAA+B,KAAA;AAClE,EAAM,MAAA,CAAA,GAAID,MAAK,CAAA,MAAA,CAAO,QAAQ,CAAA;AAC9B,EAAA,QAAQ,EAAI;AAAA,IACV,KAAK,GAAA;AAAA,IACL,KAAK,IAAA;AACH,MAAA,CAAA,CAAE,QAAS,CAAA,EAAA,EAAI,EAAI,EAAA,EAAA,EAAI,GAAG,CAAA;AAC1B,MAAA,OAAO,EAAE,OAAQ,EAAA;AAAA,IACnB,KAAK,IAAA;AAAA,IACL,KAAK,GAAA;AAAA,IACL,KAAK,GAAA;AAAA;AAAA,IACL,KAAK,IAAA;AACH,MAAA,CAAA,CAAE,QAAS,CAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAC,CAAA;AACrB,MAAA,OAAO,EAAE,OAAQ,EAAA;AAAA;AAEvB,CAAA;;;;"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
-
|
|
5
|
-
var __defProp = Object.defineProperty;
|
|
6
|
-
var __typeError = (msg) => {
|
|
7
|
-
throw TypeError(msg);
|
|
8
|
-
};
|
|
9
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
|
|
11
|
-
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
12
|
-
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
13
|
-
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
14
|
-
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
15
|
-
var _options;
|
|
16
|
-
const isTimeToday = (options) => options.type === "TimeString" && options.date === "today";
|
|
17
|
-
class ExtendedSingleValueFilterClause {
|
|
18
|
-
constructor(column, op, value, extendedOptions) {
|
|
19
|
-
this.column = column;
|
|
20
|
-
this.op = op;
|
|
21
|
-
this.value = value;
|
|
22
|
-
__privateAdd(this, _options);
|
|
23
|
-
__publicField(this, "name");
|
|
24
|
-
__privateSet(this, _options, extendedOptions);
|
|
25
|
-
}
|
|
26
|
-
asQuery() {
|
|
27
|
-
const { column, op, value } = this;
|
|
28
|
-
if (isTimeToday(__privateGet(this, _options))) {
|
|
29
|
-
if (vuuUtils.isValidTimeString(value)) {
|
|
30
|
-
const timeValue = +vuuUtils.Time(value).asDate();
|
|
31
|
-
if (op === ">=") {
|
|
32
|
-
return `${column} > ${timeValue - 1}`;
|
|
33
|
-
} else if (op === "<=") {
|
|
34
|
-
return `${column} < ${timeValue + 1}`;
|
|
35
|
-
} else {
|
|
36
|
-
return `${column} ${op} ${timeValue}`;
|
|
37
|
-
}
|
|
38
|
-
} else {
|
|
39
|
-
throw Error(
|
|
40
|
-
`[ExtendedSingleValueFilterClause] invalid TimeStrong ${value}`
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
} else {
|
|
44
|
-
throw Error(
|
|
45
|
-
"[ExtendedSingleValueFilterClause] unhandled extended filter type"
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
toJSON() {
|
|
50
|
-
const { column, op, value } = this;
|
|
51
|
-
return {
|
|
52
|
-
column,
|
|
53
|
-
op,
|
|
54
|
-
value,
|
|
55
|
-
extendedOptions: __privateGet(this, _options)
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
_options = new WeakMap();
|
|
60
|
-
|
|
61
|
-
exports.ExtendedSingleValueFilterClause = ExtendedSingleValueFilterClause;
|
|
62
|
-
exports.isTimeToday = isTimeToday;
|
|
63
|
-
//# sourceMappingURL=ExtendedSingleValueFilterClause.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ExtendedSingleValueFilterClause.js","sources":["../../../../packages/vuu-filters/src/filter-container/ExtendedSingleValueFilterClause.ts"],"sourcesContent":["import type {\n ExtendedFilterOptions,\n SerializableSingleValueFilterClause,\n SingleValueFilterClauseOp,\n TimeTodayFilterOptions,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { isValidTimeString, Time } from \"@vuu-ui/vuu-utils\";\n\nexport const isTimeToday = (\n options: ExtendedFilterOptions,\n): options is TimeTodayFilterOptions =>\n options.type === \"TimeString\" && options.date === \"today\";\n\nexport interface SerializableFilter {\n asQuery: () => string;\n}\n\nexport class ExtendedSingleValueFilterClause\n implements SerializableSingleValueFilterClause\n{\n #options: ExtendedFilterOptions;\n\n constructor(\n public column: string,\n public op: SingleValueFilterClauseOp,\n public value: VuuRowDataItemType,\n extendedOptions: ExtendedFilterOptions,\n ) {\n this.#options = extendedOptions;\n }\n name?: string | undefined;\n\n asQuery() {\n const { column, op, value } = this;\n if (isTimeToday(this.#options)) {\n if (isValidTimeString(value)) {\n const timeValue = +Time(value).asDate();\n if (op === \">=\") {\n return `${column} > ${timeValue - 1}`;\n } else if (op === \"<=\") {\n return `${column} < ${timeValue + 1}`;\n } else {\n return `${column} ${op} ${timeValue}`;\n }\n } else {\n throw Error(\n `[ExtendedSingleValueFilterClause] invalid TimeStrong ${value}`,\n );\n }\n } else {\n throw Error(\n \"[ExtendedSingleValueFilterClause] unhandled extended filter type\",\n );\n }\n }\n\n toJSON() {\n const { column, op, value } = this;\n return {\n column,\n op,\n value,\n extendedOptions: this.#options,\n };\n }\n}\n"],"names":["isValidTimeString","Time"],"mappings":";;;;;;;;;;;;;;AAAA,IAAA,QAAA;AASO,MAAM,cAAc,CACzB,OAAA,KAEA,QAAQ,IAAS,KAAA,YAAA,IAAgB,QAAQ,IAAS,KAAA;AAM7C,MAAM,+BAEb,CAAA;AAAA,EAGE,WACS,CAAA,MAAA,EACA,EACA,EAAA,KAAA,EACP,eACA,EAAA;AAJO,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AALT,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAUA,IAAA,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAFE,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,eAAA,CAAA;AAAA;AAClB,EAGA,OAAU,GAAA;AACR,IAAA,MAAM,EAAE,MAAA,EAAQ,EAAI,EAAA,KAAA,EAAU,GAAA,IAAA;AAC9B,IAAI,IAAA,WAAA,CAAY,YAAK,CAAA,IAAA,EAAA,QAAA,CAAQ,CAAG,EAAA;AAC9B,MAAI,IAAAA,0BAAA,CAAkB,KAAK,CAAG,EAAA;AAC5B,QAAA,MAAM,SAAY,GAAA,CAACC,aAAK,CAAA,KAAK,EAAE,MAAO,EAAA;AACtC,QAAA,IAAI,OAAO,IAAM,EAAA;AACf,UAAA,OAAO,CAAG,EAAA,MAAM,CAAM,GAAA,EAAA,SAAA,GAAY,CAAC,CAAA,CAAA;AAAA,SACrC,MAAA,IAAW,OAAO,IAAM,EAAA;AACtB,UAAA,OAAO,CAAG,EAAA,MAAM,CAAM,GAAA,EAAA,SAAA,GAAY,CAAC,CAAA,CAAA;AAAA,SAC9B,MAAA;AACL,UAAA,OAAO,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,EAAE,IAAI,SAAS,CAAA,CAAA;AAAA;AACrC,OACK,MAAA;AACL,QAAM,MAAA,KAAA;AAAA,UACJ,wDAAwD,KAAK,CAAA;AAAA,SAC/D;AAAA;AACF,KACK,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ;AAAA,OACF;AAAA;AACF;AACF,EAEA,MAAS,GAAA;AACP,IAAA,MAAM,EAAE,MAAA,EAAQ,EAAI,EAAA,KAAA,EAAU,GAAA,IAAA;AAC9B,IAAO,OAAA;AAAA,MACL,MAAA;AAAA,MACA,EAAA;AAAA,MACA,KAAA;AAAA,MACA,iBAAiB,YAAK,CAAA,IAAA,EAAA,QAAA;AAAA,KACxB;AAAA;AAEJ;AA7CE,QAAA,GAAA,IAAA,OAAA,EAAA;;;;;"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var filterContainerCss = ".vuuFilterContainer {\n display: var(--vuuFilterContainer-display,flex);\n flex: var(--vuuFilterContainer-flex);\n flex-direction: var(--vuuFilterContainer-flexDirection,column);\n gap: var(--salt-spacing-100);\n height: var(--vuuFilterContainer-height);\n overflow: auto;\n}";
|
|
4
|
-
|
|
5
|
-
module.exports = filterContainerCss;
|
|
6
|
-
//# sourceMappingURL=FilterContainer.css.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FilterContainer.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var cx = require('clsx');
|
|
5
|
-
var react = require('react');
|
|
6
|
-
var useFilterContainer = require('./useFilterContainer.js');
|
|
7
|
-
var ColumnFilter = require('../column-filter/ColumnFilter.js');
|
|
8
|
-
var FilterContext = require('../filter-provider/FilterContext.js');
|
|
9
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
10
|
-
var styles = require('@salt-ds/styles');
|
|
11
|
-
var window = require('@salt-ds/window');
|
|
12
|
-
var FilterContainer$1 = require('./FilterContainer.css.js');
|
|
13
|
-
|
|
14
|
-
const classBase = "vuuFilterContainer";
|
|
15
|
-
const notEmpty = (value) => Array.isArray(value) ? value[0] !== "" && value[1] !== "" : value !== "";
|
|
16
|
-
const FilterContainerColumnFilter = ({
|
|
17
|
-
column,
|
|
18
|
-
operator = "=",
|
|
19
|
-
variant,
|
|
20
|
-
...props
|
|
21
|
-
}) => {
|
|
22
|
-
const {
|
|
23
|
-
filterProviderKey,
|
|
24
|
-
onChange: onFilterContextChange,
|
|
25
|
-
onCommit: onFilterContextCommit,
|
|
26
|
-
register
|
|
27
|
-
} = useFilterContainer.useFilterContext(column, true);
|
|
28
|
-
const initialValue = react.useMemo(
|
|
29
|
-
() => register(column, operator),
|
|
30
|
-
[column, operator, register]
|
|
31
|
-
);
|
|
32
|
-
const [value, setValue] = react.useState(initialValue);
|
|
33
|
-
const valueRef = react.useRef(initialValue);
|
|
34
|
-
const { currentFilter } = FilterContext.useSavedFilters(filterProviderKey);
|
|
35
|
-
const currentFilterRef = react.useRef(currentFilter);
|
|
36
|
-
react.useMemo(() => {
|
|
37
|
-
if (currentFilterRef.current.id !== currentFilter.id || !vuuUtils.filtersAreEqual(currentFilterRef.current.filter, currentFilter.filter)) {
|
|
38
|
-
currentFilterRef.current = currentFilter;
|
|
39
|
-
if (FilterContext.isNullFilter(currentFilter) && notEmpty(valueRef.current)) {
|
|
40
|
-
if (Array.isArray(valueRef.current)) {
|
|
41
|
-
if (column.type === "time") {
|
|
42
|
-
valueRef.current = ["00:00:00", "23:59:59"];
|
|
43
|
-
} else {
|
|
44
|
-
valueRef.current = ["", ""];
|
|
45
|
-
}
|
|
46
|
-
} else {
|
|
47
|
-
valueRef.current = "";
|
|
48
|
-
}
|
|
49
|
-
setValue(valueRef.current);
|
|
50
|
-
} else if (FilterContext.filterDescriptorHasFilter(currentFilter)) {
|
|
51
|
-
const v = vuuUtils.getColumnValueFromFilter(
|
|
52
|
-
column,
|
|
53
|
-
operator,
|
|
54
|
-
currentFilter.filter
|
|
55
|
-
);
|
|
56
|
-
if (vuuUtils.isBetweenOperator(operator) && !Array.isArray(v) && Array.isArray(valueRef.current)) {
|
|
57
|
-
const [v1, v2] = valueRef.current;
|
|
58
|
-
if (`${v}` === v1 && v2 === "") {
|
|
59
|
-
return;
|
|
60
|
-
} else {
|
|
61
|
-
valueRef.current = [`${v}`, ""];
|
|
62
|
-
setValue(valueRef.current);
|
|
63
|
-
}
|
|
64
|
-
} else if (v !== valueRef.current) {
|
|
65
|
-
valueRef.current = v;
|
|
66
|
-
setValue(v);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}, [column, currentFilter]);
|
|
71
|
-
const handleCommit = react.useCallback(
|
|
72
|
-
(column2, op, value2, extendedFilterOptions) => {
|
|
73
|
-
valueRef.current = value2;
|
|
74
|
-
setValue(value2);
|
|
75
|
-
onFilterContextCommit(column2, op, value2, extendedFilterOptions);
|
|
76
|
-
},
|
|
77
|
-
[onFilterContextCommit]
|
|
78
|
-
);
|
|
79
|
-
const handleColumnFilterChange = react.useCallback(
|
|
80
|
-
(value2, column2, op) => {
|
|
81
|
-
const { current: v } = valueRef;
|
|
82
|
-
valueRef.current = Array.isArray(v) ? [`${value2}`, v[1]] : value2;
|
|
83
|
-
setValue(valueRef.current);
|
|
84
|
-
onFilterContextChange(valueRef.current, column2, op);
|
|
85
|
-
},
|
|
86
|
-
[onFilterContextChange]
|
|
87
|
-
);
|
|
88
|
-
const handleColumnRangeFilterChange = react.useCallback(
|
|
89
|
-
(value2, column2, op) => {
|
|
90
|
-
const { current: v } = valueRef;
|
|
91
|
-
valueRef.current = Array.isArray(v) ? [v[0], `${value2}`] : value2;
|
|
92
|
-
setValue(valueRef.current);
|
|
93
|
-
onFilterContextChange(valueRef.current, column2, op);
|
|
94
|
-
},
|
|
95
|
-
[onFilterContextChange]
|
|
96
|
-
);
|
|
97
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
98
|
-
ColumnFilter.ColumnFilter,
|
|
99
|
-
{
|
|
100
|
-
...props,
|
|
101
|
-
column,
|
|
102
|
-
onColumnFilterChange: handleColumnFilterChange,
|
|
103
|
-
onColumnRangeFilterChange: handleColumnRangeFilterChange,
|
|
104
|
-
onCommit: handleCommit,
|
|
105
|
-
operator,
|
|
106
|
-
value,
|
|
107
|
-
variant
|
|
108
|
-
}
|
|
109
|
-
);
|
|
110
|
-
};
|
|
111
|
-
const FilterContainer = ({
|
|
112
|
-
children,
|
|
113
|
-
className,
|
|
114
|
-
filter,
|
|
115
|
-
filterProviderKey,
|
|
116
|
-
onFilterApplied,
|
|
117
|
-
onFilterCleared,
|
|
118
|
-
...htmlAttributes
|
|
119
|
-
}) => {
|
|
120
|
-
const targetWindow = window.useWindow();
|
|
121
|
-
styles.useComponentCssInjection({
|
|
122
|
-
testId: "vuu-filter-container",
|
|
123
|
-
css: FilterContainer$1,
|
|
124
|
-
window: targetWindow
|
|
125
|
-
});
|
|
126
|
-
console.log(`[FilterContainer] current filter ${JSON.stringify(filter)}`);
|
|
127
|
-
const filterContextProps = useFilterContainer.useFilterContainer({
|
|
128
|
-
filter,
|
|
129
|
-
filterProviderKey,
|
|
130
|
-
onFilterApplied,
|
|
131
|
-
onFilterCleared
|
|
132
|
-
});
|
|
133
|
-
return /* @__PURE__ */ jsxRuntime.jsx(useFilterContainer.ColumnFilterContext.Provider, { value: filterContextProps, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
134
|
-
"div",
|
|
135
|
-
{
|
|
136
|
-
...htmlAttributes,
|
|
137
|
-
className: cx(classBase, className, "vuuScrollable"),
|
|
138
|
-
children
|
|
139
|
-
}
|
|
140
|
-
) });
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
exports.FilterContainer = FilterContainer;
|
|
144
|
-
exports.FilterContainerColumnFilter = FilterContainerColumnFilter;
|
|
145
|
-
//# sourceMappingURL=FilterContainer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FilterContainer.js","sources":["../../../../packages/vuu-filters/src/filter-container/FilterContainer.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport {\n useCallback,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport {\n ColumnFilterContext,\n useFilterContainer,\n useFilterContext,\n type ColumnFilterContainerHookProps,\n} from \"./useFilterContainer\";\nimport {\n ColumnFilterChangeHandler,\n ColumnFilterCommitHandler,\n ColumnFilterValue,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnFilter, ColumnFilterProps } from \"../column-filter/ColumnFilter\";\nimport {\n filterDescriptorHasFilter,\n isNullFilter,\n useSavedFilters,\n} from \"../filter-provider/FilterContext\";\nimport {\n filtersAreEqual,\n getColumnValueFromFilter,\n isBetweenOperator,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport filterContainerCss from \"./FilterContainer.css\";\n\nconst classBase = \"vuuFilterContainer\";\n\nconst notEmpty = (value: ColumnFilterValue) =>\n Array.isArray(value) ? value[0] !== \"\" && value[1] !== \"\" : value !== \"\";\n\nexport interface FilterContainerProps\n extends HTMLAttributes<HTMLDivElement>,\n ColumnFilterContainerHookProps {\n children: ReactNode;\n filterProviderKey?: string;\n}\n\nexport interface FilterContainerColumnFilterProps\n extends Omit<ColumnFilterProps, \"defaultValue\" | \"onCommit\" | \"value\"> {\n defaultValue?: ColumnFilterValue;\n}\n\nexport const FilterContainerColumnFilter = ({\n column,\n operator = \"=\",\n variant,\n ...props\n}: FilterContainerColumnFilterProps) => {\n const {\n filterProviderKey,\n onChange: onFilterContextChange,\n onCommit: onFilterContextCommit,\n register,\n } = useFilterContext(column, true);\n\n const initialValue = useMemo(\n () => register(column, operator),\n [column, operator, register],\n );\n\n const [value, setValue] = useState(initialValue);\n const valueRef = useRef<ColumnFilterValue>(initialValue);\n const { currentFilter } = useSavedFilters(filterProviderKey);\n\n // This is primarily to guard against client passing non-stable 'column' reference\n // which would trigger the commit check below.\n const currentFilterRef = useRef(currentFilter);\n\n useMemo(() => {\n if (\n currentFilterRef.current.id !== currentFilter.id ||\n !filtersAreEqual(currentFilterRef.current.filter, currentFilter.filter)\n ) {\n currentFilterRef.current = currentFilter;\n\n if (isNullFilter(currentFilter) && notEmpty(valueRef.current)) {\n if (Array.isArray(valueRef.current)) {\n if (column.type === \"time\") {\n valueRef.current = [\"00:00:00\", \"23:59:59\"];\n } else {\n valueRef.current = [\"\", \"\"];\n }\n } else {\n valueRef.current = \"\";\n }\n setValue(valueRef.current);\n } else if (filterDescriptorHasFilter(currentFilter)) {\n const v = getColumnValueFromFilter(\n column,\n operator,\n currentFilter.filter,\n );\n if (\n isBetweenOperator(operator) &&\n !Array.isArray(v) &&\n Array.isArray(valueRef.current)\n ) {\n // A between filter with only the first item filled is converted to an '=' filter\n // in FilterAggregator. Translate value back to range value here\n const [v1, v2] = valueRef.current;\n if (`${v}` === v1 && v2 === \"\") {\n return;\n } else {\n valueRef.current = [`${v}`, \"\"];\n setValue(valueRef.current);\n }\n } else if (v !== valueRef.current) {\n valueRef.current = v;\n setValue(v);\n }\n }\n }\n // We only want this to run when the filter id changes, not when\n // filter instance changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [column, currentFilter]);\n\n const handleCommit = useCallback<ColumnFilterCommitHandler>(\n (column, op, value, extendedFilterOptions) => {\n valueRef.current = value;\n setValue(value);\n onFilterContextCommit(column, op, value, extendedFilterOptions);\n },\n [onFilterContextCommit],\n );\n\n const handleColumnFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [`${value}`, v[1]] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n const handleColumnRangeFilterChange = useCallback<ColumnFilterChangeHandler>(\n (value, column, op) => {\n const { current: v } = valueRef;\n valueRef.current = Array.isArray(v) ? [v[0], `${value}`] : value;\n setValue(valueRef.current);\n onFilterContextChange(valueRef.current, column, op);\n },\n [onFilterContextChange],\n );\n\n return (\n <ColumnFilter\n {...props}\n column={column}\n onColumnFilterChange={handleColumnFilterChange}\n onColumnRangeFilterChange={handleColumnRangeFilterChange}\n onCommit={handleCommit}\n operator={operator}\n value={value}\n variant={variant}\n />\n );\n};\n\n/**\n * FilterContainer is a generic UI container for a collection of Filter\n * controls. Each control manages a single filter clause and the Filter\n * Container aggregates these clauses into a single filter. FilterContainer\n * provides a FilterContainerFilter which can be used to provide children.\n * This is a wrapper around ColumnFilter, which adds some plumbing to allow\n * the container to track changes and manage each individual contribution to\n * the top-level filter.\n * See FilterPanel and InlineFilter for examples of FilterContainer usage.\n */\nexport const FilterContainer = ({\n children,\n className,\n filter,\n filterProviderKey,\n onFilterApplied,\n onFilterCleared,\n ...htmlAttributes\n}: FilterContainerProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-filter-container\",\n css: filterContainerCss,\n window: targetWindow,\n });\n\n console.log(`[FilterContainer] current filter ${JSON.stringify(filter)}`);\n\n const filterContextProps = useFilterContainer({\n filter,\n filterProviderKey,\n onFilterApplied,\n onFilterCleared,\n });\n return (\n <ColumnFilterContext.Provider value={filterContextProps}>\n <div\n {...htmlAttributes}\n className={cx(classBase, className, \"vuuScrollable\")}\n >\n {children}\n </div>\n </ColumnFilterContext.Provider>\n );\n};\n"],"names":["useFilterContext","useMemo","useState","useRef","useSavedFilters","filtersAreEqual","isNullFilter","filterDescriptorHasFilter","getColumnValueFromFilter","isBetweenOperator","useCallback","column","value","jsx","ColumnFilter","useWindow","useComponentCssInjection","filterContainerCss","useFilterContainer","ColumnFilterContext"],"mappings":"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"}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var react = require('react');
|
|
4
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
-
var FilterAggregator = require('../FilterAggregator.js');
|
|
6
|
-
|
|
7
|
-
const ColumnFilterContext = react.createContext({
|
|
8
|
-
filterContainerInstalled: false
|
|
9
|
-
});
|
|
10
|
-
function useFilterContext(column, throwIfNoContainer = false) {
|
|
11
|
-
const ctx = react.useContext(ColumnFilterContext);
|
|
12
|
-
if (ctx) {
|
|
13
|
-
return {
|
|
14
|
-
filterProviderKey: ctx.filterProviderKey,
|
|
15
|
-
register: ctx.register,
|
|
16
|
-
getValue: ctx.getValue,
|
|
17
|
-
onChange: ctx.onChange,
|
|
18
|
-
onCommit: ctx.onCommit
|
|
19
|
-
};
|
|
20
|
-
} else if (throwIfNoContainer) {
|
|
21
|
-
throw Error(
|
|
22
|
-
`[useFilterContainer:useFilterContext] no FilterContainer installed`
|
|
23
|
-
);
|
|
24
|
-
} else {
|
|
25
|
-
return { filterContainerInstalled: false };
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
const useFilterContainer = ({
|
|
29
|
-
filter,
|
|
30
|
-
filterProviderKey = "GLOBAL",
|
|
31
|
-
onFilterApplied,
|
|
32
|
-
onFilterCleared
|
|
33
|
-
}) => {
|
|
34
|
-
const valueRef = react.useRef({});
|
|
35
|
-
const filterRef = react.useRef(void 0);
|
|
36
|
-
filterRef.current = filter;
|
|
37
|
-
const filterAggregator = react.useMemo(
|
|
38
|
-
() => new FilterAggregator.FilterAggregator(filter),
|
|
39
|
-
[filter]
|
|
40
|
-
);
|
|
41
|
-
const register = react.useCallback(
|
|
42
|
-
(column, op) => valueRef.current[column.name] = vuuUtils.getColumnValueFromFilter(
|
|
43
|
-
column,
|
|
44
|
-
op,
|
|
45
|
-
filterRef.current
|
|
46
|
-
),
|
|
47
|
-
[]
|
|
48
|
-
);
|
|
49
|
-
const getValue = react.useCallback(
|
|
50
|
-
(column, fallbackValue) => {
|
|
51
|
-
const value = valueRef.current[column.name];
|
|
52
|
-
if (value !== void 0) {
|
|
53
|
-
return value;
|
|
54
|
-
} else if (fallbackValue !== void 0) {
|
|
55
|
-
return fallbackValue;
|
|
56
|
-
} else {
|
|
57
|
-
throw Error(
|
|
58
|
-
`[useFilterContainer] column ${column.name} has not been registered`
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
[]
|
|
63
|
-
);
|
|
64
|
-
const handleCommit = react.useCallback(
|
|
65
|
-
(column, op, value = "", extendedFilterOptions) => {
|
|
66
|
-
if (Array.isArray(value)) {
|
|
67
|
-
if (!vuuUtils.isBetweenOperator(op)) {
|
|
68
|
-
throw Error(
|
|
69
|
-
`[useFilterContainer] array value is not valid for operator ${op}`
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
if (value[0] === "" && value[1] === "") {
|
|
73
|
-
if (!filterAggregator.remove(column)) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
} else {
|
|
77
|
-
if (typeof value[0] === "string" && typeof value[1] === "string") {
|
|
78
|
-
filterAggregator.add(column, value, op, extendedFilterOptions);
|
|
79
|
-
} else {
|
|
80
|
-
throw Error(
|
|
81
|
-
`[useFilterContainer] handleCommit value [${typeof value[0]},${typeof value[1]}] for operator ${op} supports [string,string] only`
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
} else if (value === "") {
|
|
86
|
-
if (!filterAggregator.remove(column)) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
} else {
|
|
90
|
-
if (typeof value === "string" || typeof value === "number") {
|
|
91
|
-
filterAggregator.add(column, value, op, extendedFilterOptions);
|
|
92
|
-
} else {
|
|
93
|
-
throw Error(
|
|
94
|
-
`[useFilterContainer] handleCommit value ${typeof value} supports string, number only`
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
const { filter: filter2 } = filterAggregator;
|
|
99
|
-
if (filter2) {
|
|
100
|
-
console.log(`filter applied ${JSON.stringify(filter2)}`);
|
|
101
|
-
onFilterApplied?.(filter2);
|
|
102
|
-
} else {
|
|
103
|
-
onFilterCleared?.();
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
[filterAggregator, onFilterApplied, onFilterCleared]
|
|
107
|
-
);
|
|
108
|
-
const handleInputChange = react.useCallback(
|
|
109
|
-
(value, column) => {
|
|
110
|
-
if (filterAggregator.has(column)) {
|
|
111
|
-
if (Array.isArray(value)) {
|
|
112
|
-
const filter2 = filterAggregator.get(column);
|
|
113
|
-
if (vuuUtils.isSingleValueFilter(filter2)) ; else {
|
|
114
|
-
handleCommit(column, "between", ["", ""]);
|
|
115
|
-
}
|
|
116
|
-
} else {
|
|
117
|
-
handleCommit(column, "=", "");
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
valueRef.current[column.name] = value;
|
|
121
|
-
},
|
|
122
|
-
[filterAggregator, handleCommit]
|
|
123
|
-
);
|
|
124
|
-
return {
|
|
125
|
-
filterContainerInstalled: true,
|
|
126
|
-
filterProviderKey,
|
|
127
|
-
onChange: handleInputChange,
|
|
128
|
-
onCommit: handleCommit,
|
|
129
|
-
getValue,
|
|
130
|
-
register
|
|
131
|
-
};
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
exports.ColumnFilterContext = ColumnFilterContext;
|
|
135
|
-
exports.useFilterContainer = useFilterContainer;
|
|
136
|
-
exports.useFilterContext = useFilterContext;
|
|
137
|
-
//# sourceMappingURL=useFilterContainer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFilterContainer.js","sources":["../../../../packages/vuu-filters/src/filter-container/useFilterContainer.ts"],"sourcesContent":["import {\n ColumnFilterChangeHandler,\n ColumnFilterCommitHandler,\n ColumnFilterOp,\n ColumnFilterValue,\n Filter,\n FilterContainerFilter,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { createContext, useCallback, useContext, useMemo, useRef } from \"react\";\nimport {\n getColumnValueFromFilter,\n isBetweenOperator,\n isSingleValueFilter,\n} from \"@vuu-ui/vuu-utils\";\nimport { FilterAggregator } from \"../FilterAggregator\";\n\nexport interface ColumnFilterContextProps {\n filterContainerInstalled: boolean;\n filterProviderKey?: string;\n onChange?: ColumnFilterChangeHandler;\n onCommit?: ColumnFilterCommitHandler;\n register?: (\n column: ColumnDescriptor,\n operator: ColumnFilterOp,\n ) => ColumnFilterValue;\n getValue?: (column: ColumnDescriptor) => ColumnFilterValue;\n}\n\nexport const ColumnFilterContext = createContext<ColumnFilterContextProps>({\n filterContainerInstalled: false,\n});\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore type-check incorrectly flags this as error, its perfectly valid\nexport function useFilterContext(\n column: ColumnDescriptor,\n throwIfNoContainer?: false,\n): ColumnFilterContextProps;\nexport function useFilterContext(\n column: ColumnDescriptor,\n throwIfNoContainer: true,\n): Required<ColumnFilterContextProps>;\nexport function useFilterContext(\n column: ColumnDescriptor,\n throwIfNoContainer = false,\n) {\n const ctx = useContext(ColumnFilterContext);\n if (ctx) {\n return {\n filterProviderKey: ctx.filterProviderKey,\n register: ctx.register,\n getValue: ctx.getValue,\n onChange: ctx.onChange,\n onCommit: ctx.onCommit,\n };\n } else if (throwIfNoContainer) {\n throw Error(\n `[useFilterContainer:useFilterContext] no FilterContainer installed`,\n );\n } else {\n return { filterContainerInstalled: false };\n }\n}\n\nexport type FilterAppliedHandler<F extends Filter = Filter> = (\n filter: F,\n) => void;\nexport type ColumnFilterContainerHookProps = {\n filter?: FilterContainerFilter;\n filterProviderKey?: string;\n onFilterApplied?: FilterAppliedHandler<FilterContainerFilter>;\n onFilterCleared?: () => void;\n};\n\ntype ColumnFilterValueMap = Record<string, ColumnFilterValue>;\n\nexport const EmptyTuple: ColumnFilterValue = [\"\", \"\"];\n\nexport const useFilterContainer = ({\n filter,\n filterProviderKey = \"GLOBAL\",\n onFilterApplied,\n onFilterCleared,\n}: ColumnFilterContainerHookProps): ColumnFilterContextProps => {\n const valueRef = useRef<ColumnFilterValueMap>({});\n const filterRef = useRef<FilterContainerFilter | undefined>(undefined);\n filterRef.current = filter;\n\n const filterAggregator = useMemo(\n () => new FilterAggregator(filter),\n [filter],\n );\n\n const register = useCallback(\n (column: ColumnDescriptor, op: ColumnFilterOp) =>\n (valueRef.current[column.name] = getColumnValueFromFilter(\n column,\n op,\n filterRef.current,\n )),\n [],\n );\n\n const getValue = useCallback(\n (column: ColumnDescriptor, fallbackValue?: ColumnFilterValue) => {\n const value = valueRef.current[column.name];\n if (value !== undefined) {\n return value;\n } else if (fallbackValue !== undefined) {\n return fallbackValue;\n } else {\n throw Error(\n `[useFilterContainer] column ${column.name} has not been registered`,\n );\n }\n },\n [],\n );\n\n const handleCommit = useCallback<ColumnFilterCommitHandler>(\n (column, op, value = \"\", extendedFilterOptions) => {\n if (Array.isArray(value)) {\n if (!isBetweenOperator(op)) {\n throw Error(\n `[useFilterContainer] array value is not valid for operator ${op}`,\n );\n }\n if (value[0] === \"\" && value[1] === \"\") {\n if (!filterAggregator.remove(column)) {\n return;\n }\n } else {\n if (typeof value[0] === \"string\" && typeof value[1] === \"string\") {\n // TODO we need to include operator, so we can distinguish between\n // between and between-inclusive\n filterAggregator.add(column, value, op, extendedFilterOptions);\n } else {\n throw Error(\n `[useFilterContainer] handleCommit value [${typeof value[0]},${typeof value[1]}] for operator ${op} supports [string,string] only`,\n );\n }\n }\n } else if (value === \"\") {\n if (!filterAggregator.remove(column)) {\n return;\n }\n } else {\n if (typeof value === \"string\" || typeof value === \"number\") {\n filterAggregator.add(column, value, op, extendedFilterOptions);\n } else {\n throw Error(\n `[useFilterContainer] handleCommit value ${typeof value} supports string, number only`,\n );\n }\n }\n const { filter } = filterAggregator;\n if (filter) {\n console.log(`filter applied ${JSON.stringify(filter)}`);\n onFilterApplied?.(filter);\n } else {\n onFilterCleared?.();\n }\n },\n [filterAggregator, onFilterApplied, onFilterCleared],\n );\n\n const handleInputChange = useCallback<ColumnFilterChangeHandler>(\n (value, column) => {\n // If the filterAggregator has this column, then the value has previously been committed.\n // As soon as user starts editing the value, we un-commit.\n if (filterAggregator.has(column)) {\n if (Array.isArray(value)) {\n // TODO check whether first value has been changed\n const filter = filterAggregator.get(column);\n if (isSingleValueFilter(filter)) {\n // do nothing, the first value has been committed\n } else {\n handleCommit(column, \"between\", [\"\", \"\"]);\n }\n } else {\n handleCommit(column, \"=\", \"\");\n }\n }\n valueRef.current[column.name] = value;\n },\n [filterAggregator, handleCommit],\n );\n\n return {\n filterContainerInstalled: true,\n filterProviderKey,\n onChange: handleInputChange,\n onCommit: handleCommit,\n getValue,\n register,\n };\n};\n"],"names":["createContext","useContext","useRef","useMemo","FilterAggregator","useCallback","getColumnValueFromFilter","isBetweenOperator","filter","isSingleValueFilter"],"mappings":"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"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
-
var react = require('react');
|
|
5
|
-
var FilterContext = require('../filter-provider/FilterContext.js');
|
|
6
|
-
var FilterAggregator = require('../FilterAggregator.js');
|
|
7
|
-
|
|
8
|
-
const EmptyAggregator = new FilterAggregator.FilterAggregator();
|
|
9
|
-
const defaultProps = {
|
|
10
|
-
filterColumns: "*"
|
|
11
|
-
};
|
|
12
|
-
const useFilterContextMenu = ({
|
|
13
|
-
filterColumns = "*",
|
|
14
|
-
filterProviderKey
|
|
15
|
-
} = defaultProps) => {
|
|
16
|
-
const { currentFilter, clearCurrentFilter, setCurrentFilter } = FilterContext.useSavedFilters(filterProviderKey);
|
|
17
|
-
const filterAggregatorRef = react.useRef(EmptyAggregator);
|
|
18
|
-
react.useMemo(() => {
|
|
19
|
-
if (!vuuUtils.filtersAreEqual(currentFilter.filter, filterAggregatorRef.current.filter)) {
|
|
20
|
-
filterAggregatorRef.current = currentFilter.filter ? new FilterAggregator.FilterAggregator(currentFilter.filter) : new FilterAggregator.FilterAggregator();
|
|
21
|
-
}
|
|
22
|
-
}, [currentFilter]);
|
|
23
|
-
const menuBuilder = react.useCallback(
|
|
24
|
-
(_location, options) => {
|
|
25
|
-
const { column, dataRow } = options;
|
|
26
|
-
const { current: fag } = filterAggregatorRef;
|
|
27
|
-
const { name, label = name } = column;
|
|
28
|
-
const value = dataRow[column.name];
|
|
29
|
-
const ClearFilter = {
|
|
30
|
-
id: "filter-clear",
|
|
31
|
-
label: "Clear filter",
|
|
32
|
-
options
|
|
33
|
-
};
|
|
34
|
-
if (filterColumns === "*" || filterColumns.includes(column.name)) {
|
|
35
|
-
const SetFilter = {
|
|
36
|
-
id: "filter-set",
|
|
37
|
-
label: `Set filter ${label} '${value}'`,
|
|
38
|
-
options
|
|
39
|
-
};
|
|
40
|
-
if (fag.isEmpty) {
|
|
41
|
-
return [SetFilter];
|
|
42
|
-
} else if (fag.has(column)) {
|
|
43
|
-
if (fag.count === 1) {
|
|
44
|
-
return [ClearFilter];
|
|
45
|
-
} else {
|
|
46
|
-
return [
|
|
47
|
-
{
|
|
48
|
-
id: "filter-remove",
|
|
49
|
-
label: `Remove ${label} '${value}' from filter`,
|
|
50
|
-
options
|
|
51
|
-
},
|
|
52
|
-
SetFilter,
|
|
53
|
-
ClearFilter
|
|
54
|
-
];
|
|
55
|
-
}
|
|
56
|
-
} else {
|
|
57
|
-
return [
|
|
58
|
-
SetFilter,
|
|
59
|
-
{
|
|
60
|
-
id: "filter-add",
|
|
61
|
-
label: `Add ${label} '${value}' to existing filter`,
|
|
62
|
-
options
|
|
63
|
-
},
|
|
64
|
-
ClearFilter
|
|
65
|
-
];
|
|
66
|
-
}
|
|
67
|
-
} else if (!fag.isEmpty) {
|
|
68
|
-
return [ClearFilter];
|
|
69
|
-
} else {
|
|
70
|
-
return [];
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
[filterColumns]
|
|
74
|
-
);
|
|
75
|
-
const menuActionHandler = react.useCallback(
|
|
76
|
-
(menuItemId, options) => {
|
|
77
|
-
if (options) {
|
|
78
|
-
const { current: fag } = filterAggregatorRef;
|
|
79
|
-
const { column, dataRow } = options;
|
|
80
|
-
switch (menuItemId) {
|
|
81
|
-
case "filter-clear":
|
|
82
|
-
{
|
|
83
|
-
clearCurrentFilter();
|
|
84
|
-
}
|
|
85
|
-
break;
|
|
86
|
-
case "filter-add":
|
|
87
|
-
{
|
|
88
|
-
const value = dataRow[column.name];
|
|
89
|
-
fag.add(column, value, "=");
|
|
90
|
-
if (fag.filter) {
|
|
91
|
-
setCurrentFilter(fag.filter);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
break;
|
|
95
|
-
case "filter-remove":
|
|
96
|
-
{
|
|
97
|
-
fag.remove(column);
|
|
98
|
-
if (fag.filter) {
|
|
99
|
-
setCurrentFilter(fag.filter);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
break;
|
|
103
|
-
case "filter-set":
|
|
104
|
-
{
|
|
105
|
-
const value = dataRow[column.name];
|
|
106
|
-
fag.clear();
|
|
107
|
-
fag.add(column, value, "=");
|
|
108
|
-
if (fag.filter) {
|
|
109
|
-
setCurrentFilter(fag.filter);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
break;
|
|
113
|
-
default:
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
} else {
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
[clearCurrentFilter, setCurrentFilter]
|
|
121
|
-
);
|
|
122
|
-
return {
|
|
123
|
-
menuActionHandler,
|
|
124
|
-
menuBuilder
|
|
125
|
-
};
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
exports.useFilterContextMenu = useFilterContextMenu;
|
|
129
|
-
//# sourceMappingURL=useFilterContextMenu.js.map
|