@vuu-ui/vuu-filters 2.1.18 → 2.1.19-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +15 -18
- package/src/FilterAggregator.js +107 -0
- package/src/FilterModel.js +161 -0
- package/src/column-filter/ColumnFilter.css.js +52 -0
- package/src/column-filter/ColumnFilter.js +59 -0
- package/src/column-filter/useColumnFilter.js +130 -0
- package/src/column-filter/utils.js +35 -0
- package/src/custom-filters/CustomFilters.js +74 -0
- package/src/custom-filters/filterBarFocusManagement.js +25 -0
- package/src/custom-filters/index.js +1 -0
- package/src/custom-filters/useCustomFilters.js +237 -0
- package/src/custom-filters/useFilterState.js +123 -0
- package/src/filter-bar/FilterBar.css.js +81 -0
- package/src/filter-bar/FilterBar.js +97 -0
- package/src/filter-bar/FilterBarMenu.js +14 -0
- package/src/filter-bar/index.js +1 -0
- package/src/filter-bar/useFilterBar.js +28 -0
- package/src/filter-clause/ExpandoCombobox.css.js +54 -0
- package/src/filter-clause/ExpandoCombobox.js +86 -0
- package/src/filter-clause/FilterClause.css.js +101 -0
- package/src/filter-clause/FilterClause.js +69 -0
- package/src/filter-clause/column-picker/ColumnPicker.js +25 -0
- package/src/filter-clause/column-picker/useColumnPicker.js +42 -0
- package/src/filter-clause/filterClauseFocusManagement.js +156 -0
- package/src/filter-clause/filterClauseTypes.js +0 -0
- package/src/filter-clause/index.js +5 -0
- package/src/filter-clause/operator-picker/OperatorPicker.js +25 -0
- package/src/filter-clause/operator-picker/operator-utils.js +23 -0
- package/src/filter-clause/operator-picker/useOperatorPicker.js +42 -0
- package/src/filter-clause/useFilterClause.js +135 -0
- package/src/filter-clause/value-editors/FilterClauseValueEditor.js +59 -0
- package/src/filter-clause/value-editors/FilterClauseValueEditorDate.js +55 -0
- package/src/filter-clause/value-editors/FilterClauseValueEditorNumber.js +32 -0
- package/src/filter-clause/value-editors/FilterClauseValueEditorText.js +182 -0
- package/src/filter-clause/value-editors/FilterClauseValueEditorTime.js +53 -0
- package/src/filter-container/ExtendedSingleValueFilterClause.js +35 -0
- package/src/filter-container/FilterContainer.css.js +13 -0
- package/src/filter-container/FilterContainer.js +121 -0
- package/src/filter-container/useFilterContainer.js +82 -0
- package/src/filter-context-menu/useFilterContextMenu.js +106 -0
- package/src/filter-display/FilterDisplay.css.js +31 -0
- package/src/filter-display/FilterDisplay.js +59 -0
- package/src/filter-editor/FilterClauseCombinator.css.js +15 -0
- package/src/filter-editor/FilterClauseCombinator.js +32 -0
- package/src/filter-editor/FilterEditor.css.js +13 -0
- package/src/filter-editor/FilterEditor.js +65 -0
- package/src/filter-editor/index.js +1 -0
- package/src/filter-editor/useFilterEditor.js +193 -0
- package/src/filter-panel/FilterPanel.css.js +22 -0
- package/src/filter-panel/FilterPanel.js +59 -0
- package/src/filter-panel/useFilterPanel.js +58 -0
- package/src/filter-pill/FilterMenu.js +48 -0
- package/src/filter-pill/FilterPill.css.js +15 -0
- package/src/filter-pill/FilterPill.js +114 -0
- package/src/filter-pill/FilterPillNext.css.js +12 -0
- package/src/filter-pill/FilterPillNext.js +65 -0
- package/src/filter-pill/filterAsReactNode.js +28 -0
- package/src/filter-pill/getFilterLabel.js +11 -0
- package/src/filter-pill/getFilterTooltipText.js +32 -0
- package/src/filter-pill/index.js +1 -0
- package/src/filter-pill/useFilterPillNext.js +53 -0
- package/src/filter-pill-menu/FilterPillMenu.css.js +8 -0
- package/src/filter-pill-menu/FilterPillMenu.js +46 -0
- package/src/filter-pill-menu/FilterPillMenuOptions.js +26 -0
- package/src/filter-pill-menu/index.js +1 -0
- package/src/filter-provider/FilterContext.js +71 -0
- package/src/filter-provider/FilterProvider.js +188 -0
- package/src/filter-provider/filter-descriptor-utils.js +41 -0
- package/src/filter-toggle-button/FilterToggleButton.css.js +22 -0
- package/src/filter-toggle-button/FilterToggleButton.js +103 -0
- package/src/filter-utils.js +300 -0
- package/src/index.js +21 -0
- package/src/inline-filter/InlineFilter.css.js +89 -0
- package/src/inline-filter/InlineFilter.js +56 -0
- package/src/inline-filter/index.js +1 -0
- package/src/inline-filter/useInlineFilter.js +11 -0
- package/src/quick-filters/QuickFilters.css.js +39 -0
- package/src/quick-filters/QuickFilters.js +81 -0
- package/src/quick-filters/index.js +1 -0
- package/src/quick-filters/useQuickFilters.js +108 -0
- package/src/saved-filters/DeleteFilterPrompt.js +23 -0
- package/src/saved-filters/FilterNamePrompt.css.js +19 -0
- package/src/saved-filters/FilterNamePrompt.js +74 -0
- package/src/saved-filters/SavedFilterPanel.css.js +21 -0
- package/src/saved-filters/SavedFilterPanel.js +53 -0
- package/src/saved-filters/useFilterNamePrompt.js +74 -0
- package/src/saved-filters/useSavedFilterPanel.js +19 -0
- package/src/tabbed-filter-container/TabbedFilterContainer.js +61 -0
- package/src/toggle-filter/ToggleFilter.css.js +10 -0
- package/src/toggle-filter/ToggleFilter.js +68 -0
- package/src/toggle-filter/useToggleFilter.js +57 -0
- package/types/filter-clause/column-picker/ColumnPicker.d.ts +1 -1
- package/types/filter-clause/operator-picker/OperatorPicker.d.ts +1 -1
- package/types/filter-clause/value-editors/FilterClauseValueEditor.d.ts +1 -1
- package/cjs/FilterAggregator.js +0 -162
- package/cjs/FilterAggregator.js.map +0 -1
- package/cjs/FilterModel.js +0 -227
- package/cjs/FilterModel.js.map +0 -1
- package/cjs/column-filter/ColumnFilter.css.js +0 -6
- package/cjs/column-filter/ColumnFilter.css.js.map +0 -1
- package/cjs/column-filter/ColumnFilter.js +0 -83
- package/cjs/column-filter/ColumnFilter.js.map +0 -1
- package/cjs/column-filter/useColumnFilter.js +0 -139
- package/cjs/column-filter/useColumnFilter.js.map +0 -1
- package/cjs/custom-filters/CustomFilters.js +0 -99
- package/cjs/custom-filters/CustomFilters.js.map +0 -1
- package/cjs/custom-filters/filterBarFocusManagement.js +0 -35
- package/cjs/custom-filters/filterBarFocusManagement.js.map +0 -1
- package/cjs/custom-filters/useCustomFilters.js +0 -266
- package/cjs/custom-filters/useCustomFilters.js.map +0 -1
- package/cjs/custom-filters/useFilterState.js +0 -149
- package/cjs/custom-filters/useFilterState.js.map +0 -1
- package/cjs/filter-bar/FilterBar.css.js +0 -6
- package/cjs/filter-bar/FilterBar.css.js.map +0 -1
- package/cjs/filter-bar/FilterBar.js +0 -123
- package/cjs/filter-bar/FilterBar.js.map +0 -1
- package/cjs/filter-bar/useFilterBar.js +0 -37
- package/cjs/filter-bar/useFilterBar.js.map +0 -1
- package/cjs/filter-clause/ExpandoCombobox.css.js +0 -6
- package/cjs/filter-clause/ExpandoCombobox.css.js.map +0 -1
- package/cjs/filter-clause/ExpandoCombobox.js +0 -114
- package/cjs/filter-clause/ExpandoCombobox.js.map +0 -1
- package/cjs/filter-clause/FilterClause.css.js +0 -6
- package/cjs/filter-clause/FilterClause.css.js.map +0 -1
- package/cjs/filter-clause/FilterClause.js +0 -102
- package/cjs/filter-clause/FilterClause.js.map +0 -1
- package/cjs/filter-clause/column-picker/ColumnPicker.js +0 -39
- package/cjs/filter-clause/column-picker/ColumnPicker.js.map +0 -1
- package/cjs/filter-clause/column-picker/useColumnPicker.js +0 -61
- package/cjs/filter-clause/column-picker/useColumnPicker.js.map +0 -1
- package/cjs/filter-clause/filterClauseFocusManagement.js +0 -204
- package/cjs/filter-clause/filterClauseFocusManagement.js.map +0 -1
- package/cjs/filter-clause/operator-picker/OperatorPicker.js +0 -40
- package/cjs/filter-clause/operator-picker/OperatorPicker.js.map +0 -1
- package/cjs/filter-clause/operator-picker/operator-utils.js +0 -34
- package/cjs/filter-clause/operator-picker/operator-utils.js.map +0 -1
- package/cjs/filter-clause/operator-picker/useOperatorPicker.js +0 -61
- package/cjs/filter-clause/operator-picker/useOperatorPicker.js.map +0 -1
- package/cjs/filter-clause/useFilterClause.js +0 -172
- package/cjs/filter-clause/useFilterClause.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditor.js +0 -93
- package/cjs/filter-clause/value-editors/FilterClauseValueEditor.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorDate.js +0 -64
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorDate.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorNumber.js +0 -55
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorNumber.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorText.js +0 -222
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorText.js.map +0 -1
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorTime.js +0 -62
- package/cjs/filter-clause/value-editors/FilterClauseValueEditorTime.js.map +0 -1
- package/cjs/filter-container/ExtendedSingleValueFilterClause.js +0 -63
- package/cjs/filter-container/ExtendedSingleValueFilterClause.js.map +0 -1
- package/cjs/filter-container/FilterContainer.css.js +0 -6
- package/cjs/filter-container/FilterContainer.css.js.map +0 -1
- package/cjs/filter-container/FilterContainer.js +0 -145
- package/cjs/filter-container/FilterContainer.js.map +0 -1
- package/cjs/filter-container/useFilterContainer.js +0 -137
- package/cjs/filter-container/useFilterContainer.js.map +0 -1
- package/cjs/filter-context-menu/useFilterContextMenu.js +0 -129
- package/cjs/filter-context-menu/useFilterContextMenu.js.map +0 -1
- package/cjs/filter-display/FilterDisplay.css.js +0 -6
- package/cjs/filter-display/FilterDisplay.css.js.map +0 -1
- package/cjs/filter-display/FilterDisplay.js +0 -79
- package/cjs/filter-display/FilterDisplay.js.map +0 -1
- package/cjs/filter-editor/FilterClauseCombinator.css.js +0 -6
- package/cjs/filter-editor/FilterClauseCombinator.css.js.map +0 -1
- package/cjs/filter-editor/FilterClauseCombinator.js +0 -42
- package/cjs/filter-editor/FilterClauseCombinator.js.map +0 -1
- package/cjs/filter-editor/FilterEditor.css.js +0 -6
- package/cjs/filter-editor/FilterEditor.css.js.map +0 -1
- package/cjs/filter-editor/FilterEditor.js +0 -101
- package/cjs/filter-editor/FilterEditor.js.map +0 -1
- package/cjs/filter-editor/useFilterEditor.js +0 -191
- package/cjs/filter-editor/useFilterEditor.js.map +0 -1
- package/cjs/filter-panel/FilterPanel.css.js +0 -6
- package/cjs/filter-panel/FilterPanel.css.js.map +0 -1
- package/cjs/filter-panel/FilterPanel.js +0 -91
- package/cjs/filter-panel/FilterPanel.js.map +0 -1
- package/cjs/filter-panel/useFilterPanel.js +0 -68
- package/cjs/filter-panel/useFilterPanel.js.map +0 -1
- package/cjs/filter-pill/FilterMenu.js +0 -63
- package/cjs/filter-pill/FilterMenu.js.map +0 -1
- package/cjs/filter-pill/FilterPill.css.js +0 -6
- package/cjs/filter-pill/FilterPill.css.js.map +0 -1
- package/cjs/filter-pill/FilterPill.js +0 -147
- package/cjs/filter-pill/FilterPill.js.map +0 -1
- package/cjs/filter-pill/FilterPillNext.css.js +0 -6
- package/cjs/filter-pill/FilterPillNext.css.js.map +0 -1
- package/cjs/filter-pill/FilterPillNext.js +0 -91
- package/cjs/filter-pill/FilterPillNext.js.map +0 -1
- package/cjs/filter-pill/filterAsReactNode.js +0 -27
- package/cjs/filter-pill/filterAsReactNode.js.map +0 -1
- package/cjs/filter-pill/getFilterLabel.js +0 -22
- package/cjs/filter-pill/getFilterLabel.js.map +0 -1
- package/cjs/filter-pill/getFilterTooltipText.js +0 -41
- package/cjs/filter-pill/getFilterTooltipText.js.map +0 -1
- package/cjs/filter-pill/useFilterPillNext.js +0 -65
- package/cjs/filter-pill/useFilterPillNext.js.map +0 -1
- package/cjs/filter-pill-menu/FilterPillMenuOptions.js +0 -32
- package/cjs/filter-pill-menu/FilterPillMenuOptions.js.map +0 -1
- package/cjs/filter-provider/FilterContext.js +0 -105
- package/cjs/filter-provider/FilterContext.js.map +0 -1
- package/cjs/filter-provider/FilterProvider.js +0 -240
- package/cjs/filter-provider/FilterProvider.js.map +0 -1
- package/cjs/filter-provider/filter-descriptor-utils.js +0 -67
- package/cjs/filter-provider/filter-descriptor-utils.js.map +0 -1
- package/cjs/filter-utils.js +0 -367
- package/cjs/filter-utils.js.map +0 -1
- package/cjs/index.js +0 -80
- package/cjs/index.js.map +0 -1
- package/cjs/inline-filter/InlineFilter.css.js +0 -6
- package/cjs/inline-filter/InlineFilter.css.js.map +0 -1
- package/cjs/inline-filter/InlineFilter.js +0 -70
- package/cjs/inline-filter/InlineFilter.js.map +0 -1
- package/cjs/inline-filter/useInlineFilter.js +0 -16
- package/cjs/inline-filter/useInlineFilter.js.map +0 -1
- package/cjs/quick-filters/QuickFilters.css.js +0 -6
- package/cjs/quick-filters/QuickFilters.css.js.map +0 -1
- package/cjs/quick-filters/QuickFilters.js +0 -98
- package/cjs/quick-filters/QuickFilters.js.map +0 -1
- package/cjs/quick-filters/useQuickFilters.js +0 -152
- package/cjs/quick-filters/useQuickFilters.js.map +0 -1
- package/cjs/saved-filters/DeleteFilterPrompt.js +0 -37
- package/cjs/saved-filters/DeleteFilterPrompt.js.map +0 -1
- package/cjs/saved-filters/FilterNamePrompt.css.js +0 -6
- package/cjs/saved-filters/FilterNamePrompt.css.js.map +0 -1
- package/cjs/saved-filters/FilterNamePrompt.js +0 -89
- package/cjs/saved-filters/FilterNamePrompt.js.map +0 -1
- package/cjs/saved-filters/SavedFilterPanel.css.js +0 -6
- package/cjs/saved-filters/SavedFilterPanel.css.js.map +0 -1
- package/cjs/saved-filters/SavedFilterPanel.js +0 -62
- package/cjs/saved-filters/SavedFilterPanel.js.map +0 -1
- package/cjs/saved-filters/useFilterNamePrompt.js +0 -98
- package/cjs/saved-filters/useFilterNamePrompt.js.map +0 -1
- package/cjs/saved-filters/useSavedFilterPanel.js +0 -29
- package/cjs/saved-filters/useSavedFilterPanel.js.map +0 -1
- package/cjs/tabbed-filter-container/TabbedFilterContainer.css.js +0 -6
- package/cjs/tabbed-filter-container/TabbedFilterContainer.css.js.map +0 -1
- package/cjs/tabbed-filter-container/TabbedFilterContainer.js +0 -57
- package/cjs/tabbed-filter-container/TabbedFilterContainer.js.map +0 -1
- package/cjs/toggle-filter/ToggleFilter.css.js +0 -6
- package/cjs/toggle-filter/ToggleFilter.css.js.map +0 -1
- package/cjs/toggle-filter/ToggleFilter.js +0 -85
- package/cjs/toggle-filter/ToggleFilter.js.map +0 -1
- package/cjs/toggle-filter/useToggleFilter.js +0 -67
- package/cjs/toggle-filter/useToggleFilter.js.map +0 -1
- package/esm/FilterAggregator.js +0 -160
- package/esm/FilterAggregator.js.map +0 -1
- package/esm/FilterModel.js +0 -224
- package/esm/FilterModel.js.map +0 -1
- package/esm/column-filter/ColumnFilter.css.js +0 -4
- package/esm/column-filter/ColumnFilter.css.js.map +0 -1
- package/esm/column-filter/ColumnFilter.js +0 -81
- package/esm/column-filter/ColumnFilter.js.map +0 -1
- package/esm/column-filter/useColumnFilter.js +0 -137
- package/esm/column-filter/useColumnFilter.js.map +0 -1
- package/esm/custom-filters/CustomFilters.js +0 -97
- package/esm/custom-filters/CustomFilters.js.map +0 -1
- package/esm/custom-filters/filterBarFocusManagement.js +0 -33
- package/esm/custom-filters/filterBarFocusManagement.js.map +0 -1
- package/esm/custom-filters/useCustomFilters.js +0 -263
- package/esm/custom-filters/useCustomFilters.js.map +0 -1
- package/esm/custom-filters/useFilterState.js +0 -147
- package/esm/custom-filters/useFilterState.js.map +0 -1
- package/esm/filter-bar/FilterBar.css.js +0 -4
- package/esm/filter-bar/FilterBar.css.js.map +0 -1
- package/esm/filter-bar/FilterBar.js +0 -121
- package/esm/filter-bar/FilterBar.js.map +0 -1
- package/esm/filter-bar/useFilterBar.js +0 -35
- package/esm/filter-bar/useFilterBar.js.map +0 -1
- package/esm/filter-clause/ExpandoCombobox.css.js +0 -4
- package/esm/filter-clause/ExpandoCombobox.css.js.map +0 -1
- package/esm/filter-clause/ExpandoCombobox.js +0 -112
- package/esm/filter-clause/ExpandoCombobox.js.map +0 -1
- package/esm/filter-clause/FilterClause.css.js +0 -4
- package/esm/filter-clause/FilterClause.css.js.map +0 -1
- package/esm/filter-clause/FilterClause.js +0 -100
- package/esm/filter-clause/FilterClause.js.map +0 -1
- package/esm/filter-clause/column-picker/ColumnPicker.js +0 -37
- package/esm/filter-clause/column-picker/ColumnPicker.js.map +0 -1
- package/esm/filter-clause/column-picker/useColumnPicker.js +0 -59
- package/esm/filter-clause/column-picker/useColumnPicker.js.map +0 -1
- package/esm/filter-clause/filterClauseFocusManagement.js +0 -191
- package/esm/filter-clause/filterClauseFocusManagement.js.map +0 -1
- package/esm/filter-clause/operator-picker/OperatorPicker.js +0 -38
- package/esm/filter-clause/operator-picker/OperatorPicker.js.map +0 -1
- package/esm/filter-clause/operator-picker/operator-utils.js +0 -30
- package/esm/filter-clause/operator-picker/operator-utils.js.map +0 -1
- package/esm/filter-clause/operator-picker/useOperatorPicker.js +0 -59
- package/esm/filter-clause/operator-picker/useOperatorPicker.js.map +0 -1
- package/esm/filter-clause/useFilterClause.js +0 -170
- package/esm/filter-clause/useFilterClause.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditor.js +0 -91
- package/esm/filter-clause/value-editors/FilterClauseValueEditor.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorDate.js +0 -62
- package/esm/filter-clause/value-editors/FilterClauseValueEditorDate.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorNumber.js +0 -53
- package/esm/filter-clause/value-editors/FilterClauseValueEditorNumber.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorText.js +0 -220
- package/esm/filter-clause/value-editors/FilterClauseValueEditorText.js.map +0 -1
- package/esm/filter-clause/value-editors/FilterClauseValueEditorTime.js +0 -60
- package/esm/filter-clause/value-editors/FilterClauseValueEditorTime.js.map +0 -1
- package/esm/filter-container/ExtendedSingleValueFilterClause.js +0 -60
- package/esm/filter-container/ExtendedSingleValueFilterClause.js.map +0 -1
- package/esm/filter-container/FilterContainer.css.js +0 -4
- package/esm/filter-container/FilterContainer.css.js.map +0 -1
- package/esm/filter-container/FilterContainer.js +0 -142
- package/esm/filter-container/FilterContainer.js.map +0 -1
- package/esm/filter-container/useFilterContainer.js +0 -133
- package/esm/filter-container/useFilterContainer.js.map +0 -1
- package/esm/filter-context-menu/useFilterContextMenu.js +0 -127
- package/esm/filter-context-menu/useFilterContextMenu.js.map +0 -1
- package/esm/filter-display/FilterDisplay.css.js +0 -4
- package/esm/filter-display/FilterDisplay.css.js.map +0 -1
- package/esm/filter-display/FilterDisplay.js +0 -77
- package/esm/filter-display/FilterDisplay.js.map +0 -1
- package/esm/filter-editor/FilterClauseCombinator.css.js +0 -4
- package/esm/filter-editor/FilterClauseCombinator.css.js.map +0 -1
- package/esm/filter-editor/FilterClauseCombinator.js +0 -40
- package/esm/filter-editor/FilterClauseCombinator.js.map +0 -1
- package/esm/filter-editor/FilterEditor.css.js +0 -4
- package/esm/filter-editor/FilterEditor.css.js.map +0 -1
- package/esm/filter-editor/FilterEditor.js +0 -99
- package/esm/filter-editor/FilterEditor.js.map +0 -1
- package/esm/filter-editor/useFilterEditor.js +0 -189
- package/esm/filter-editor/useFilterEditor.js.map +0 -1
- package/esm/filter-panel/FilterPanel.css.js +0 -4
- package/esm/filter-panel/FilterPanel.css.js.map +0 -1
- package/esm/filter-panel/FilterPanel.js +0 -89
- package/esm/filter-panel/FilterPanel.js.map +0 -1
- package/esm/filter-panel/useFilterPanel.js +0 -66
- package/esm/filter-panel/useFilterPanel.js.map +0 -1
- package/esm/filter-pill/FilterMenu.js +0 -61
- package/esm/filter-pill/FilterMenu.js.map +0 -1
- package/esm/filter-pill/FilterPill.css.js +0 -4
- package/esm/filter-pill/FilterPill.css.js.map +0 -1
- package/esm/filter-pill/FilterPill.js +0 -145
- package/esm/filter-pill/FilterPill.js.map +0 -1
- package/esm/filter-pill/FilterPillNext.css.js +0 -4
- package/esm/filter-pill/FilterPillNext.css.js.map +0 -1
- package/esm/filter-pill/FilterPillNext.js +0 -89
- package/esm/filter-pill/FilterPillNext.js.map +0 -1
- package/esm/filter-pill/filterAsReactNode.js +0 -25
- package/esm/filter-pill/filterAsReactNode.js.map +0 -1
- package/esm/filter-pill/getFilterLabel.js +0 -20
- package/esm/filter-pill/getFilterLabel.js.map +0 -1
- package/esm/filter-pill/getFilterTooltipText.js +0 -39
- package/esm/filter-pill/getFilterTooltipText.js.map +0 -1
- package/esm/filter-pill/useFilterPillNext.js +0 -63
- package/esm/filter-pill/useFilterPillNext.js.map +0 -1
- package/esm/filter-pill-menu/FilterPillMenuOptions.js +0 -27
- package/esm/filter-pill-menu/FilterPillMenuOptions.js.map +0 -1
- package/esm/filter-provider/FilterContext.js +0 -94
- package/esm/filter-provider/FilterContext.js.map +0 -1
- package/esm/filter-provider/FilterProvider.js +0 -238
- package/esm/filter-provider/FilterProvider.js.map +0 -1
- package/esm/filter-provider/filter-descriptor-utils.js +0 -61
- package/esm/filter-provider/filter-descriptor-utils.js.map +0 -1
- package/esm/filter-utils.js +0 -344
- package/esm/filter-utils.js.map +0 -1
- package/esm/index.js +0 -26
- package/esm/index.js.map +0 -1
- package/esm/inline-filter/InlineFilter.css.js +0 -4
- package/esm/inline-filter/InlineFilter.css.js.map +0 -1
- package/esm/inline-filter/InlineFilter.js +0 -68
- package/esm/inline-filter/InlineFilter.js.map +0 -1
- package/esm/inline-filter/useInlineFilter.js +0 -14
- package/esm/inline-filter/useInlineFilter.js.map +0 -1
- package/esm/quick-filters/QuickFilters.css.js +0 -4
- package/esm/quick-filters/QuickFilters.css.js.map +0 -1
- package/esm/quick-filters/QuickFilters.js +0 -96
- package/esm/quick-filters/QuickFilters.js.map +0 -1
- package/esm/quick-filters/useQuickFilters.js +0 -150
- package/esm/quick-filters/useQuickFilters.js.map +0 -1
- package/esm/saved-filters/DeleteFilterPrompt.js +0 -35
- package/esm/saved-filters/DeleteFilterPrompt.js.map +0 -1
- package/esm/saved-filters/FilterNamePrompt.css.js +0 -4
- package/esm/saved-filters/FilterNamePrompt.css.js.map +0 -1
- package/esm/saved-filters/FilterNamePrompt.js +0 -87
- package/esm/saved-filters/FilterNamePrompt.js.map +0 -1
- package/esm/saved-filters/SavedFilterPanel.css.js +0 -4
- package/esm/saved-filters/SavedFilterPanel.css.js.map +0 -1
- package/esm/saved-filters/SavedFilterPanel.js +0 -60
- package/esm/saved-filters/SavedFilterPanel.js.map +0 -1
- package/esm/saved-filters/useFilterNamePrompt.js +0 -95
- package/esm/saved-filters/useFilterNamePrompt.js.map +0 -1
- package/esm/saved-filters/useSavedFilterPanel.js +0 -27
- package/esm/saved-filters/useSavedFilterPanel.js.map +0 -1
- package/esm/tabbed-filter-container/TabbedFilterContainer.css.js +0 -4
- package/esm/tabbed-filter-container/TabbedFilterContainer.css.js.map +0 -1
- package/esm/tabbed-filter-container/TabbedFilterContainer.js +0 -55
- package/esm/tabbed-filter-container/TabbedFilterContainer.js.map +0 -1
- package/esm/toggle-filter/ToggleFilter.css.js +0 -4
- package/esm/toggle-filter/ToggleFilter.css.js.map +0 -1
- package/esm/toggle-filter/ToggleFilter.js +0 -83
- package/esm/toggle-filter/ToggleFilter.js.map +0 -1
- package/esm/toggle-filter/useToggleFilter.js +0 -65
- package/esm/toggle-filter/useToggleFilter.js.map +0 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { hasOpenOptionList } from "@vuu-ui/vuu-utils";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { clauseIsNotFirst, focusNextElement, focusNextFocusableElement, navigateToNextItemIfAtBoundary, tabToPreviousFilterCombinator } from "./filterClauseFocusManagement.js";
|
|
4
|
+
const useFilterClause = ({ filterClauseModel, onCancel, columnsByName, onFocusSave, onOpenChange, dropdownOnAutofocus = true })=>{
|
|
5
|
+
const [filterClause, setFilterClause] = useState(filterClauseModel.isValid ? filterClauseModel.asFilter() : {});
|
|
6
|
+
useMemo(()=>{
|
|
7
|
+
filterClauseModel.on("filterClause", (filterClause)=>{
|
|
8
|
+
setFilterClause(filterClause);
|
|
9
|
+
});
|
|
10
|
+
}, [
|
|
11
|
+
filterClauseModel
|
|
12
|
+
]);
|
|
13
|
+
const columnRef = useRef(null);
|
|
14
|
+
const operatorRef = useRef(null);
|
|
15
|
+
const valueRef = useRef(null);
|
|
16
|
+
const filterTouched = useRef(false);
|
|
17
|
+
const setValueRef = useCallback((el)=>{
|
|
18
|
+
valueRef.current = el;
|
|
19
|
+
if (!filterClauseModel.isValid) el?.querySelector("input")?.focus();
|
|
20
|
+
}, [
|
|
21
|
+
filterClauseModel.isValid
|
|
22
|
+
]);
|
|
23
|
+
const removeAndNavigateToNextInputIfAtBoundary = useCallback((evt)=>{
|
|
24
|
+
const input = evt.target;
|
|
25
|
+
if ("" === input.value) {
|
|
26
|
+
const field = input.closest("[data-field]");
|
|
27
|
+
switch(field?.dataset?.field){
|
|
28
|
+
case "operator":
|
|
29
|
+
filterClauseModel.column = void 0;
|
|
30
|
+
focusNextFocusableElement("bwd");
|
|
31
|
+
break;
|
|
32
|
+
case "value":
|
|
33
|
+
filterClauseModel.setOp(void 0);
|
|
34
|
+
focusNextFocusableElement("bwd");
|
|
35
|
+
break;
|
|
36
|
+
case "column":
|
|
37
|
+
if (clauseIsNotFirst(input)) {
|
|
38
|
+
evt.preventDefault();
|
|
39
|
+
onCancel?.(filterClauseModel, "Backspace");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}, [
|
|
44
|
+
filterClauseModel,
|
|
45
|
+
onCancel
|
|
46
|
+
]);
|
|
47
|
+
const onSelectColumn = (evt, selectedColumn)=>{
|
|
48
|
+
if (selectedColumn) {
|
|
49
|
+
if (evt?.type === "keydown") {
|
|
50
|
+
const { key } = evt;
|
|
51
|
+
if ("Tab" === key) if (filterClauseModel.column === selectedColumn) return;
|
|
52
|
+
else evt.preventDefault();
|
|
53
|
+
}
|
|
54
|
+
filterClauseModel.column = selectedColumn;
|
|
55
|
+
setTimeout(()=>{
|
|
56
|
+
focusNextElement();
|
|
57
|
+
}, 100);
|
|
58
|
+
} else filterClauseModel.column = void 0;
|
|
59
|
+
};
|
|
60
|
+
const onSelectOperator = useCallback((_, selectedOp)=>{
|
|
61
|
+
filterClauseModel.setOp(selectedOp);
|
|
62
|
+
if (selectedOp) focusNextElement();
|
|
63
|
+
}, [
|
|
64
|
+
filterClauseModel
|
|
65
|
+
]);
|
|
66
|
+
const handleChangeValue = useCallback((value, isFinal)=>filterClauseModel.setValue(value, isFinal), [
|
|
67
|
+
filterClauseModel
|
|
68
|
+
]);
|
|
69
|
+
const handleDeselectValue = useCallback(()=>filterClauseModel.setValue(void 0), [
|
|
70
|
+
filterClauseModel
|
|
71
|
+
]);
|
|
72
|
+
const handleKeyDownCaptureNavigation = useCallback((evt)=>{
|
|
73
|
+
if ([
|
|
74
|
+
"ArrowLeft",
|
|
75
|
+
"ArrowRight"
|
|
76
|
+
].includes(evt.key)) navigateToNextItemIfAtBoundary(evt);
|
|
77
|
+
else if ("Backspace" === evt.key) removeAndNavigateToNextInputIfAtBoundary(evt);
|
|
78
|
+
else if ("Escape" === evt.key) {
|
|
79
|
+
if (!hasOpenOptionList(evt.target)) onCancel?.(filterClauseModel, "Escape");
|
|
80
|
+
} else if ("Tab" === evt.key && evt.shiftKey) {
|
|
81
|
+
evt.preventDefault();
|
|
82
|
+
tabToPreviousFilterCombinator(evt.target);
|
|
83
|
+
} else if ("Tab" === evt.key) {
|
|
84
|
+
if (filterClauseModel.isValid) {
|
|
85
|
+
evt.preventDefault();
|
|
86
|
+
evt.stopPropagation();
|
|
87
|
+
onFocusSave?.();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}, [
|
|
91
|
+
filterClauseModel,
|
|
92
|
+
onCancel,
|
|
93
|
+
onFocusSave,
|
|
94
|
+
removeAndNavigateToNextInputIfAtBoundary
|
|
95
|
+
]);
|
|
96
|
+
const handleOpenChange = useCallback((open, closeReason)=>{
|
|
97
|
+
const isMultiSelect = "in" === filterClauseModel.op;
|
|
98
|
+
const filterHasNoValue = !filterClauseModel.isValid && void 0 !== filterClauseModel.op && void 0 !== filterClauseModel.column;
|
|
99
|
+
if (!open && isMultiSelect && (filterClauseModel.isValid || filterHasNoValue)) filterClauseModel.commit();
|
|
100
|
+
onOpenChange?.(open, closeReason);
|
|
101
|
+
}, [
|
|
102
|
+
filterClauseModel,
|
|
103
|
+
onOpenChange
|
|
104
|
+
]);
|
|
105
|
+
const inputProps = useMemo(()=>({
|
|
106
|
+
onKeyDownCapture: handleKeyDownCaptureNavigation,
|
|
107
|
+
tabIndex: -1,
|
|
108
|
+
onFocus: ()=>filterTouched.current = true
|
|
109
|
+
}), [
|
|
110
|
+
handleKeyDownCaptureNavigation
|
|
111
|
+
]);
|
|
112
|
+
useEffect(()=>{
|
|
113
|
+
const inputRef = void 0 === filterClauseModel.column ? columnRef : void 0 === filterClauseModel.op ? operatorRef : null;
|
|
114
|
+
if (!filterClauseModel.isValid && inputRef) requestAnimationFrame(()=>{
|
|
115
|
+
inputRef.current?.querySelector("input")?.focus();
|
|
116
|
+
});
|
|
117
|
+
}, [
|
|
118
|
+
filterClauseModel
|
|
119
|
+
]);
|
|
120
|
+
return {
|
|
121
|
+
inputProps,
|
|
122
|
+
columnRef,
|
|
123
|
+
filterClause,
|
|
124
|
+
onChangeValue: handleChangeValue,
|
|
125
|
+
onDeselectValue: handleDeselectValue,
|
|
126
|
+
onSelectColumn,
|
|
127
|
+
onSelectOperator,
|
|
128
|
+
onOpenChange: handleOpenChange,
|
|
129
|
+
operatorRef,
|
|
130
|
+
selectedColumn: columnsByName[filterClauseModel.column ?? ""],
|
|
131
|
+
valueRef: setValueRef,
|
|
132
|
+
showDropdownOnAutoFocus: dropdownOnAutofocus || filterTouched.current
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
export { useFilterClause };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
import { FilterClauseValueEditorNumber } from "./FilterClauseValueEditorNumber.js";
|
|
4
|
+
import { FilterClauseValueEditorText } from "./FilterClauseValueEditorText.js";
|
|
5
|
+
import { isDateTimeDataValue, isTimeDataValue } from "@vuu-ui/vuu-utils";
|
|
6
|
+
import { forwardRef } from "react";
|
|
7
|
+
import { FilterClauseValueEditorDate } from "./FilterClauseValueEditorDate.js";
|
|
8
|
+
import { FilterClauseValueEditorTime } from "./FilterClauseValueEditorTime.js";
|
|
9
|
+
const classBase = "vuuFilterClause";
|
|
10
|
+
const FilterClauseValueEditor_FilterClauseValueEditor = /*#__PURE__*/ forwardRef(function({ selectedColumn, operator, inputProps, onChangeValue, onDeselectValue, onOpenChange, table, value, dropdownOnAutofocus = true }, forwardedRef) {
|
|
11
|
+
if (void 0 === selectedColumn || void 0 === operator) return null;
|
|
12
|
+
if (isDateTimeDataValue(selectedColumn)) return /*#__PURE__*/ jsx(FilterClauseValueEditorDate, {
|
|
13
|
+
inputProps: inputProps,
|
|
14
|
+
className: clsx(`${classBase}Field`, `${classBase}Value`),
|
|
15
|
+
value: value,
|
|
16
|
+
operator: operator,
|
|
17
|
+
onChangeValue: onChangeValue
|
|
18
|
+
});
|
|
19
|
+
if (isTimeDataValue(selectedColumn)) return /*#__PURE__*/ jsx(FilterClauseValueEditorTime, {
|
|
20
|
+
inputProps: inputProps,
|
|
21
|
+
className: clsx(`${classBase}Field`, `${classBase}Value`),
|
|
22
|
+
value: value,
|
|
23
|
+
operator: operator,
|
|
24
|
+
onChangeValue: onChangeValue
|
|
25
|
+
});
|
|
26
|
+
switch(selectedColumn.serverDataType){
|
|
27
|
+
case "string":
|
|
28
|
+
case "char":
|
|
29
|
+
return /*#__PURE__*/ jsx(FilterClauseValueEditorText, {
|
|
30
|
+
inputProps: inputProps,
|
|
31
|
+
className: clsx(`${classBase}Field`, `${classBase}Value`),
|
|
32
|
+
column: selectedColumn,
|
|
33
|
+
dropdownOnAutofocus: dropdownOnAutofocus,
|
|
34
|
+
onDeselect: onDeselectValue,
|
|
35
|
+
onChangeValue: onChangeValue,
|
|
36
|
+
onOpenChange: onOpenChange,
|
|
37
|
+
operator: operator,
|
|
38
|
+
ref: forwardedRef,
|
|
39
|
+
table: table,
|
|
40
|
+
value: void 0 === value ? "" : Array.isArray(value) ? value.map((val)=>val.toString()) : value.toString()
|
|
41
|
+
});
|
|
42
|
+
case "int":
|
|
43
|
+
case "long":
|
|
44
|
+
case "double":
|
|
45
|
+
return /*#__PURE__*/ jsx(FilterClauseValueEditorNumber, {
|
|
46
|
+
inputProps: inputProps,
|
|
47
|
+
className: clsx(`${classBase}Field`, `${classBase}Value`),
|
|
48
|
+
column: selectedColumn,
|
|
49
|
+
"data-field": "value",
|
|
50
|
+
onChangeValue: onChangeValue,
|
|
51
|
+
operator: operator,
|
|
52
|
+
ref: forwardedRef
|
|
53
|
+
});
|
|
54
|
+
default:
|
|
55
|
+
console.log("returning null");
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
export { FilterClauseValueEditor_FilterClauseValueEditor as FilterClauseValueEditor };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
import { getLocalTimeZone } from "@internationalized/date";
|
|
4
|
+
import { toCalendarDate } from "@vuu-ui/vuu-utils";
|
|
5
|
+
import { VuuDatePicker } from "@vuu-ui/vuu-ui-controls";
|
|
6
|
+
const FilterClauseValueEditorDate = (props)=>{
|
|
7
|
+
const { inputProps, className, onChangeValue, operator, value } = props;
|
|
8
|
+
const toEpochMilliS = getEpochMillisConverter(operator);
|
|
9
|
+
const [date, setDate] = useState(()=>getInitialState(value));
|
|
10
|
+
const handleCommit = useCallback((e, selectedDateInputValue)=>{
|
|
11
|
+
console.log("change date");
|
|
12
|
+
if (selectedDateInputValue) {
|
|
13
|
+
const dateValue = toCalendarDate(new Date(selectedDateInputValue));
|
|
14
|
+
setDate(dateValue);
|
|
15
|
+
if (selectedDateInputValue) onChangeValue(toEpochMilliS(dateValue));
|
|
16
|
+
}
|
|
17
|
+
}, [
|
|
18
|
+
onChangeValue,
|
|
19
|
+
toEpochMilliS
|
|
20
|
+
]);
|
|
21
|
+
const onBlur = useCallback(()=>{
|
|
22
|
+
date && onChangeValue(toEpochMilliS(date));
|
|
23
|
+
}, [
|
|
24
|
+
date,
|
|
25
|
+
onChangeValue,
|
|
26
|
+
toEpochMilliS
|
|
27
|
+
]);
|
|
28
|
+
return /*#__PURE__*/ jsx(VuuDatePicker, {
|
|
29
|
+
"data-field": "value",
|
|
30
|
+
inputProps: inputProps,
|
|
31
|
+
className: className,
|
|
32
|
+
onBlur: onBlur,
|
|
33
|
+
onCommit: handleCommit,
|
|
34
|
+
selectedDate: date
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
function getInitialState(value) {
|
|
38
|
+
return value ? toCalendarDate(new Date(value)) : void 0;
|
|
39
|
+
}
|
|
40
|
+
const getEpochMillisConverter = (op)=>(date, timezone = getLocalTimeZone())=>{
|
|
41
|
+
const d = date.toDate(timezone);
|
|
42
|
+
switch(op){
|
|
43
|
+
case ">":
|
|
44
|
+
case "<=":
|
|
45
|
+
d.setHours(23, 59, 59, 999);
|
|
46
|
+
return d.getTime();
|
|
47
|
+
case ">=":
|
|
48
|
+
case "<":
|
|
49
|
+
case "=":
|
|
50
|
+
case "!=":
|
|
51
|
+
d.setHours(0, 0, 0, 0);
|
|
52
|
+
return d.getTime();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
export { FilterClauseValueEditorDate };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, useCallback, useState } from "react";
|
|
3
|
+
import { ExpandoInput } from "@vuu-ui/vuu-ui-controls";
|
|
4
|
+
import { isValidNumber } from "@vuu-ui/vuu-utils";
|
|
5
|
+
const FilterClauseValueEditorNumber = /*#__PURE__*/ forwardRef(function({ inputProps, className, "data-field": dataField, onChangeValue, value: valueProp }, forwardedRef) {
|
|
6
|
+
const [value, setValue] = useState(isValidNumber(valueProp) ? valueProp.toString() : "");
|
|
7
|
+
const handleChange = useCallback((evt)=>{
|
|
8
|
+
const { value } = evt.target;
|
|
9
|
+
const numericValue = parseFloat(value);
|
|
10
|
+
if (isValidNumber(numericValue)) console.log("its valid");
|
|
11
|
+
setValue(value);
|
|
12
|
+
}, []);
|
|
13
|
+
const handleKeyDown = useCallback((evt)=>{
|
|
14
|
+
if ("Enter" === evt.key || "Tab" === evt.key) {
|
|
15
|
+
const { value } = evt.target;
|
|
16
|
+
const numericValue = parseFloat(value);
|
|
17
|
+
if (isValidNumber(numericValue)) onChangeValue(numericValue);
|
|
18
|
+
}
|
|
19
|
+
}, [
|
|
20
|
+
onChangeValue
|
|
21
|
+
]);
|
|
22
|
+
return /*#__PURE__*/ jsx(ExpandoInput, {
|
|
23
|
+
inputProps: inputProps,
|
|
24
|
+
className: className,
|
|
25
|
+
"data-field": dataField,
|
|
26
|
+
onChange: handleChange,
|
|
27
|
+
onKeyDown: handleKeyDown,
|
|
28
|
+
ref: forwardedRef,
|
|
29
|
+
value: value
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
export { FilterClauseValueEditorNumber };
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useTypeaheadSuggestions } from "@vuu-ui/vuu-data-react";
|
|
3
|
+
import { ExpandoInput } from "@vuu-ui/vuu-ui-controls";
|
|
4
|
+
import { NO_DATA_MATCH, dispatchKeyboardEvent, getVuuTable } from "@vuu-ui/vuu-utils";
|
|
5
|
+
import { Option, useForkRef } from "@salt-ds/core";
|
|
6
|
+
import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
7
|
+
import { ExpandoCombobox } from "../ExpandoCombobox.js";
|
|
8
|
+
const FilterClauseValueEditorText = /*#__PURE__*/ forwardRef(function({ inputProps: inputPropsProp, className, column, onChangeValue, onOpenChange, operator, table, value, dropdownOnAutofocus = true }, forwardedRef) {
|
|
9
|
+
const isMultiValue = "in" === operator;
|
|
10
|
+
const expandoRef = useRef(null);
|
|
11
|
+
const combinedRef = useForkRef(forwardedRef, expandoRef);
|
|
12
|
+
const [valueInputValue, setValueInputValue] = useState(value?.toString() ?? "");
|
|
13
|
+
const [typeaheadValues, setTypeaheadValues] = useState([]);
|
|
14
|
+
const getSuggestions = useTypeaheadSuggestions();
|
|
15
|
+
const handleSingleValueSelectionChange = useCallback((_, [value])=>onChangeValue(value), [
|
|
16
|
+
onChangeValue
|
|
17
|
+
]);
|
|
18
|
+
const handleMultiValueSelectionChange = useCallback((_, values)=>onChangeValue(values, false), [
|
|
19
|
+
onChangeValue
|
|
20
|
+
]);
|
|
21
|
+
const highlightFirstOption = useCallback(()=>{
|
|
22
|
+
if (expandoRef.current) {
|
|
23
|
+
const input = expandoRef.current?.querySelector('input[role="combobox"]');
|
|
24
|
+
if (input) requestAnimationFrame(()=>{
|
|
25
|
+
dispatchKeyboardEvent(input, "keydown", "ArrowDown");
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}, []);
|
|
29
|
+
const handleOpenChange = useCallback((open, reason)=>{
|
|
30
|
+
if (open && "focus" === reason && expandoRef.current) highlightFirstOption();
|
|
31
|
+
}, [
|
|
32
|
+
highlightFirstOption
|
|
33
|
+
]);
|
|
34
|
+
useEffect(()=>{
|
|
35
|
+
if (table) {
|
|
36
|
+
const vuuTable = getVuuTable(table);
|
|
37
|
+
const params = valueInputValue && !isMultiValue ? [
|
|
38
|
+
vuuTable,
|
|
39
|
+
column.name,
|
|
40
|
+
valueInputValue
|
|
41
|
+
] : [
|
|
42
|
+
vuuTable,
|
|
43
|
+
column.name
|
|
44
|
+
];
|
|
45
|
+
getSuggestions(params).then((suggestions)=>{
|
|
46
|
+
if (false === suggestions) setTypeaheadValues(false);
|
|
47
|
+
else 0 === suggestions.length && valueInputValue ? setTypeaheadValues(NO_DATA_MATCH) : setTypeaheadValues(suggestions);
|
|
48
|
+
}).catch((err)=>{
|
|
49
|
+
console.error("Error getting suggestions", err);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}, [
|
|
53
|
+
table,
|
|
54
|
+
column,
|
|
55
|
+
valueInputValue,
|
|
56
|
+
getSuggestions,
|
|
57
|
+
isMultiValue
|
|
58
|
+
]);
|
|
59
|
+
const handleInputChange = useCallback((evt)=>{
|
|
60
|
+
const { value } = evt.target;
|
|
61
|
+
setValueInputValue(value);
|
|
62
|
+
if ("starts" === operator || "ends" === operator || "contains" === operator) onChangeValue(value, false);
|
|
63
|
+
}, [
|
|
64
|
+
onChangeValue,
|
|
65
|
+
operator
|
|
66
|
+
]);
|
|
67
|
+
const handleInputCommit = useCallback((_, value = "")=>{
|
|
68
|
+
if ("string" == typeof value) onChangeValue(value);
|
|
69
|
+
}, [
|
|
70
|
+
onChangeValue
|
|
71
|
+
]);
|
|
72
|
+
const handleKeyDownFreeTextInput = useCallback((evt)=>{
|
|
73
|
+
if (("Enter" === evt.key || "Tab" === evt.key) && "" !== valueInputValue) {
|
|
74
|
+
evt.stopPropagation();
|
|
75
|
+
evt.preventDefault();
|
|
76
|
+
onChangeValue(valueInputValue);
|
|
77
|
+
} else inputPropsProp?.onKeyDown?.(evt);
|
|
78
|
+
}, [
|
|
79
|
+
inputPropsProp,
|
|
80
|
+
onChangeValue,
|
|
81
|
+
valueInputValue
|
|
82
|
+
]);
|
|
83
|
+
const inputProps = useMemo(()=>{
|
|
84
|
+
if ("starts" === operator || "ends" === operator) return {
|
|
85
|
+
...inputPropsProp,
|
|
86
|
+
onKeyDown: handleKeyDownFreeTextInput
|
|
87
|
+
};
|
|
88
|
+
return inputPropsProp;
|
|
89
|
+
}, [
|
|
90
|
+
inputPropsProp,
|
|
91
|
+
handleKeyDownFreeTextInput,
|
|
92
|
+
operator
|
|
93
|
+
]);
|
|
94
|
+
const getValueInputField = useCallback(()=>{
|
|
95
|
+
if (false === typeaheadValues) return /*#__PURE__*/ jsx(ExpandoInput, {
|
|
96
|
+
inputProps: inputProps,
|
|
97
|
+
className: className,
|
|
98
|
+
"data-field": "value",
|
|
99
|
+
value: valueInputValue,
|
|
100
|
+
ref: forwardedRef,
|
|
101
|
+
onChange: handleInputChange,
|
|
102
|
+
onCommit: handleInputCommit
|
|
103
|
+
});
|
|
104
|
+
switch(operator){
|
|
105
|
+
case "in":
|
|
106
|
+
return /*#__PURE__*/ jsx(ExpandoCombobox, {
|
|
107
|
+
inputProps: inputProps,
|
|
108
|
+
className: className,
|
|
109
|
+
"data-field": "value",
|
|
110
|
+
onChange: handleInputChange,
|
|
111
|
+
onOpenChange: onOpenChange,
|
|
112
|
+
onSelectionChange: handleMultiValueSelectionChange,
|
|
113
|
+
ref: forwardedRef,
|
|
114
|
+
multiselect: true,
|
|
115
|
+
truncate: true,
|
|
116
|
+
value: value,
|
|
117
|
+
dropdownOnAutofocus: dropdownOnAutofocus,
|
|
118
|
+
children: typeaheadValues.map((state)=>/*#__PURE__*/ jsx(Option, {
|
|
119
|
+
value: state
|
|
120
|
+
}, state))
|
|
121
|
+
});
|
|
122
|
+
case "starts":
|
|
123
|
+
return /*#__PURE__*/ jsx(ExpandoCombobox, {
|
|
124
|
+
inputProps: inputProps,
|
|
125
|
+
className: className,
|
|
126
|
+
"data-field": "value",
|
|
127
|
+
dropdownOnAutofocus: dropdownOnAutofocus,
|
|
128
|
+
onChange: handleInputChange,
|
|
129
|
+
onSelectionChange: handleSingleValueSelectionChange,
|
|
130
|
+
ref: forwardedRef,
|
|
131
|
+
value: value,
|
|
132
|
+
children: typeaheadValues.map((state)=>/*#__PURE__*/ jsx(Option, {
|
|
133
|
+
value: state,
|
|
134
|
+
disabled: true
|
|
135
|
+
}, state))
|
|
136
|
+
});
|
|
137
|
+
case "ends":
|
|
138
|
+
return /*#__PURE__*/ jsx(ExpandoInput, {
|
|
139
|
+
inputProps: inputProps,
|
|
140
|
+
className: className,
|
|
141
|
+
"data-field": "value",
|
|
142
|
+
value: valueInputValue,
|
|
143
|
+
ref: forwardedRef,
|
|
144
|
+
onChange: handleInputChange
|
|
145
|
+
});
|
|
146
|
+
default:
|
|
147
|
+
return typeaheadValues.length > 0 ? /*#__PURE__*/ jsx(ExpandoCombobox, {
|
|
148
|
+
className: className,
|
|
149
|
+
"data-field": "value",
|
|
150
|
+
dropdownOnAutofocus: dropdownOnAutofocus,
|
|
151
|
+
inputProps: inputProps,
|
|
152
|
+
onChange: handleInputChange,
|
|
153
|
+
onOpenChange: handleOpenChange,
|
|
154
|
+
onSelectionChange: handleSingleValueSelectionChange,
|
|
155
|
+
ref: combinedRef,
|
|
156
|
+
title: "value",
|
|
157
|
+
value: value,
|
|
158
|
+
children: typeaheadValues.map((state)=>/*#__PURE__*/ jsx(Option, {
|
|
159
|
+
value: state
|
|
160
|
+
}, state))
|
|
161
|
+
}) : null;
|
|
162
|
+
}
|
|
163
|
+
}, [
|
|
164
|
+
typeaheadValues,
|
|
165
|
+
operator,
|
|
166
|
+
inputProps,
|
|
167
|
+
className,
|
|
168
|
+
valueInputValue,
|
|
169
|
+
forwardedRef,
|
|
170
|
+
handleInputChange,
|
|
171
|
+
handleInputCommit,
|
|
172
|
+
onOpenChange,
|
|
173
|
+
handleMultiValueSelectionChange,
|
|
174
|
+
value,
|
|
175
|
+
dropdownOnAutofocus,
|
|
176
|
+
handleSingleValueSelectionChange,
|
|
177
|
+
handleOpenChange,
|
|
178
|
+
combinedRef
|
|
179
|
+
]);
|
|
180
|
+
return getValueInputField();
|
|
181
|
+
});
|
|
182
|
+
export { FilterClauseValueEditorText };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
import { getLocalTimeZone } from "@internationalized/date";
|
|
4
|
+
import { toCalendarDate } from "@vuu-ui/vuu-utils";
|
|
5
|
+
import { VuuTimePicker } from "@vuu-ui/vuu-ui-controls";
|
|
6
|
+
const FilterClauseValueEditorTime = (props)=>{
|
|
7
|
+
const { className, onChangeValue, operator, value } = props;
|
|
8
|
+
const toEpochMilliS = getEpochMillisConverter(operator);
|
|
9
|
+
const [date, setDate] = useState(()=>getInitialState(value));
|
|
10
|
+
const handleCommit = useCallback((e, selectedDateInputValue)=>{
|
|
11
|
+
console.log("change time");
|
|
12
|
+
if (selectedDateInputValue) {
|
|
13
|
+
const dateValue = toCalendarDate(new Date(selectedDateInputValue));
|
|
14
|
+
setDate(dateValue);
|
|
15
|
+
if (selectedDateInputValue) onChangeValue(toEpochMilliS(dateValue));
|
|
16
|
+
}
|
|
17
|
+
}, [
|
|
18
|
+
onChangeValue,
|
|
19
|
+
toEpochMilliS
|
|
20
|
+
]);
|
|
21
|
+
const onBlur = useCallback(()=>{
|
|
22
|
+
date && onChangeValue(toEpochMilliS(date));
|
|
23
|
+
}, [
|
|
24
|
+
date,
|
|
25
|
+
onChangeValue,
|
|
26
|
+
toEpochMilliS
|
|
27
|
+
]);
|
|
28
|
+
return /*#__PURE__*/ jsx(VuuTimePicker, {
|
|
29
|
+
"data-field": "value",
|
|
30
|
+
className: className,
|
|
31
|
+
onBlur: onBlur,
|
|
32
|
+
onCommit: handleCommit
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
function getInitialState(value) {
|
|
36
|
+
return value ? toCalendarDate(new Date(value)) : void 0;
|
|
37
|
+
}
|
|
38
|
+
const getEpochMillisConverter = (op)=>(date, timezone = getLocalTimeZone())=>{
|
|
39
|
+
const d = date.toDate(timezone);
|
|
40
|
+
switch(op){
|
|
41
|
+
case ">":
|
|
42
|
+
case "<=":
|
|
43
|
+
d.setHours(23, 59, 59, 999);
|
|
44
|
+
return d.getTime();
|
|
45
|
+
case ">=":
|
|
46
|
+
case "<":
|
|
47
|
+
case "=":
|
|
48
|
+
case "!=":
|
|
49
|
+
d.setHours(0, 0, 0, 0);
|
|
50
|
+
return d.getTime();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
export { FilterClauseValueEditorTime };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Time, isValidTimeString } from "@vuu-ui/vuu-utils";
|
|
2
|
+
const isTimeToday = (options)=>"TimeString" === options.type && "today" === options.date;
|
|
3
|
+
class ExtendedSingleValueFilterClause {
|
|
4
|
+
column;
|
|
5
|
+
op;
|
|
6
|
+
value;
|
|
7
|
+
#options;
|
|
8
|
+
constructor(column, op, value, extendedOptions){
|
|
9
|
+
this.column = column;
|
|
10
|
+
this.op = op;
|
|
11
|
+
this.value = value;
|
|
12
|
+
this.#options = extendedOptions;
|
|
13
|
+
}
|
|
14
|
+
name;
|
|
15
|
+
asQuery() {
|
|
16
|
+
const { column, op, value } = this;
|
|
17
|
+
if (isTimeToday(this.#options)) if (isValidTimeString(value)) {
|
|
18
|
+
const timeValue = +Time(value).asDate();
|
|
19
|
+
if (">=" === op) return `${column} > ${timeValue - 1}`;
|
|
20
|
+
if ("<=" === op) return `${column} < ${timeValue + 1}`;
|
|
21
|
+
return `${column} ${op} ${timeValue}`;
|
|
22
|
+
} else throw Error(`[ExtendedSingleValueFilterClause] invalid TimeStrong ${value}`);
|
|
23
|
+
throw Error("[ExtendedSingleValueFilterClause] unhandled extended filter type");
|
|
24
|
+
}
|
|
25
|
+
toJSON() {
|
|
26
|
+
const { column, op, value } = this;
|
|
27
|
+
return {
|
|
28
|
+
column,
|
|
29
|
+
op,
|
|
30
|
+
value,
|
|
31
|
+
extendedOptions: this.#options
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export { ExtendedSingleValueFilterClause, isTimeToday };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const css = `
|
|
2
|
+
.vuuFilterContainer {
|
|
3
|
+
display: var(--vuuFilterContainer-display, flex);
|
|
4
|
+
flex: var(--vuuFilterContainer-flex);
|
|
5
|
+
flex-direction: var(--vuuFilterContainer-flexDirection, column);
|
|
6
|
+
gap: var(--salt-spacing-100);
|
|
7
|
+
height: var(--vuuFilterContainer-height);
|
|
8
|
+
overflow: auto;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
`;
|
|
13
|
+
export default css;
|