@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,220 +0,0 @@
|
|
|
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 { dispatchKeyboardEvent, getVuuTable, NO_DATA_MATCH } from '@vuu-ui/vuu-utils';
|
|
5
|
-
import { useForkRef, Option } from '@salt-ds/core';
|
|
6
|
-
import { forwardRef, useRef, useState, useCallback, useEffect, useMemo } from 'react';
|
|
7
|
-
import { ExpandoCombobox } from '../ExpandoCombobox.js';
|
|
8
|
-
|
|
9
|
-
const FilterClauseValueEditorText = forwardRef(
|
|
10
|
-
function FilterClauseTextValueEditor({
|
|
11
|
-
inputProps: inputPropsProp,
|
|
12
|
-
className,
|
|
13
|
-
column,
|
|
14
|
-
onChangeValue,
|
|
15
|
-
onOpenChange,
|
|
16
|
-
operator,
|
|
17
|
-
table,
|
|
18
|
-
value,
|
|
19
|
-
dropdownOnAutofocus = true
|
|
20
|
-
}, forwardedRef) {
|
|
21
|
-
const isMultiValue = operator === "in";
|
|
22
|
-
const expandoRef = useRef(null);
|
|
23
|
-
const combinedRef = useForkRef(forwardedRef, expandoRef);
|
|
24
|
-
const [valueInputValue, setValueInputValue] = useState(
|
|
25
|
-
value?.toString() ?? ""
|
|
26
|
-
);
|
|
27
|
-
const [typeaheadValues, setTypeaheadValues] = useState(
|
|
28
|
-
[]
|
|
29
|
-
);
|
|
30
|
-
const getSuggestions = useTypeaheadSuggestions();
|
|
31
|
-
const handleSingleValueSelectionChange = useCallback(
|
|
32
|
-
(_, [value2]) => onChangeValue(value2),
|
|
33
|
-
[onChangeValue]
|
|
34
|
-
);
|
|
35
|
-
const handleMultiValueSelectionChange = useCallback(
|
|
36
|
-
// TODO when will this ever be final ?
|
|
37
|
-
(_, values) => onChangeValue(values, false),
|
|
38
|
-
[onChangeValue]
|
|
39
|
-
);
|
|
40
|
-
const highlightFirstOption = useCallback(() => {
|
|
41
|
-
if (expandoRef.current) {
|
|
42
|
-
const input = expandoRef.current?.querySelector(
|
|
43
|
-
'input[role="combobox"]'
|
|
44
|
-
);
|
|
45
|
-
if (input) {
|
|
46
|
-
requestAnimationFrame(() => {
|
|
47
|
-
dispatchKeyboardEvent(input, "keydown", "ArrowDown");
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}, []);
|
|
52
|
-
const handleOpenChange = useCallback(
|
|
53
|
-
(open, reason) => {
|
|
54
|
-
if (open && reason === "focus" && expandoRef.current) {
|
|
55
|
-
highlightFirstOption();
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
[highlightFirstOption]
|
|
59
|
-
);
|
|
60
|
-
useEffect(() => {
|
|
61
|
-
if (table) {
|
|
62
|
-
const vuuTable = getVuuTable(table);
|
|
63
|
-
const params = valueInputValue && !isMultiValue ? [vuuTable, column.name, valueInputValue] : [vuuTable, column.name];
|
|
64
|
-
getSuggestions(params).then((suggestions) => {
|
|
65
|
-
if (suggestions === false) {
|
|
66
|
-
setTypeaheadValues(false);
|
|
67
|
-
} else if (suggestions.length === 0 && valueInputValue) {
|
|
68
|
-
setTypeaheadValues(NO_DATA_MATCH);
|
|
69
|
-
} else {
|
|
70
|
-
setTypeaheadValues(suggestions);
|
|
71
|
-
}
|
|
72
|
-
}).catch((err) => {
|
|
73
|
-
console.error("Error getting suggestions", err);
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
}, [table, column, valueInputValue, getSuggestions, isMultiValue]);
|
|
77
|
-
const handleInputChange = useCallback(
|
|
78
|
-
(evt) => {
|
|
79
|
-
const { value: value2 } = evt.target;
|
|
80
|
-
setValueInputValue(value2);
|
|
81
|
-
if (operator === "starts" || operator === "ends" || operator === "contains") {
|
|
82
|
-
onChangeValue(value2, false);
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
[onChangeValue, operator]
|
|
86
|
-
);
|
|
87
|
-
const handleInputCommit = useCallback(
|
|
88
|
-
(_, value2 = "") => {
|
|
89
|
-
if (typeof value2 === "string") {
|
|
90
|
-
onChangeValue(value2);
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
[onChangeValue]
|
|
94
|
-
);
|
|
95
|
-
const handleKeyDownFreeTextInput = useCallback(
|
|
96
|
-
(evt) => {
|
|
97
|
-
if ((evt.key === "Enter" || evt.key === "Tab") && valueInputValue !== "") {
|
|
98
|
-
evt.stopPropagation();
|
|
99
|
-
evt.preventDefault();
|
|
100
|
-
onChangeValue(valueInputValue);
|
|
101
|
-
} else {
|
|
102
|
-
inputPropsProp?.onKeyDown?.(evt);
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
[inputPropsProp, onChangeValue, valueInputValue]
|
|
106
|
-
);
|
|
107
|
-
const inputProps = useMemo(() => {
|
|
108
|
-
if (operator === "starts" || operator === "ends") {
|
|
109
|
-
return {
|
|
110
|
-
...inputPropsProp,
|
|
111
|
-
onKeyDown: handleKeyDownFreeTextInput
|
|
112
|
-
};
|
|
113
|
-
} else {
|
|
114
|
-
return inputPropsProp;
|
|
115
|
-
}
|
|
116
|
-
}, [inputPropsProp, handleKeyDownFreeTextInput, operator]);
|
|
117
|
-
const getValueInputField = useCallback(() => {
|
|
118
|
-
if (typeaheadValues === false) {
|
|
119
|
-
return /* @__PURE__ */ jsx(
|
|
120
|
-
ExpandoInput,
|
|
121
|
-
{
|
|
122
|
-
inputProps,
|
|
123
|
-
className,
|
|
124
|
-
"data-field": "value",
|
|
125
|
-
value: valueInputValue,
|
|
126
|
-
ref: forwardedRef,
|
|
127
|
-
onChange: handleInputChange,
|
|
128
|
-
onCommit: handleInputCommit
|
|
129
|
-
}
|
|
130
|
-
);
|
|
131
|
-
}
|
|
132
|
-
switch (operator) {
|
|
133
|
-
case "in":
|
|
134
|
-
return /* @__PURE__ */ jsx(
|
|
135
|
-
ExpandoCombobox,
|
|
136
|
-
{
|
|
137
|
-
inputProps,
|
|
138
|
-
className,
|
|
139
|
-
"data-field": "value",
|
|
140
|
-
onChange: handleInputChange,
|
|
141
|
-
onOpenChange,
|
|
142
|
-
onSelectionChange: handleMultiValueSelectionChange,
|
|
143
|
-
ref: forwardedRef,
|
|
144
|
-
multiselect: true,
|
|
145
|
-
truncate: true,
|
|
146
|
-
value,
|
|
147
|
-
dropdownOnAutofocus,
|
|
148
|
-
children: typeaheadValues.map((state) => /* @__PURE__ */ jsx(Option, { value: state }, state))
|
|
149
|
-
}
|
|
150
|
-
);
|
|
151
|
-
case "starts": {
|
|
152
|
-
return /* @__PURE__ */ jsx(
|
|
153
|
-
ExpandoCombobox,
|
|
154
|
-
{
|
|
155
|
-
inputProps,
|
|
156
|
-
className,
|
|
157
|
-
"data-field": "value",
|
|
158
|
-
dropdownOnAutofocus,
|
|
159
|
-
onChange: handleInputChange,
|
|
160
|
-
onSelectionChange: handleSingleValueSelectionChange,
|
|
161
|
-
ref: forwardedRef,
|
|
162
|
-
value,
|
|
163
|
-
children: typeaheadValues.map((state) => /* @__PURE__ */ jsx(Option, { value: state, disabled: true }, state))
|
|
164
|
-
}
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
case "ends":
|
|
168
|
-
return /* @__PURE__ */ jsx(
|
|
169
|
-
ExpandoInput,
|
|
170
|
-
{
|
|
171
|
-
inputProps,
|
|
172
|
-
className,
|
|
173
|
-
"data-field": "value",
|
|
174
|
-
value: valueInputValue,
|
|
175
|
-
ref: forwardedRef,
|
|
176
|
-
onChange: handleInputChange
|
|
177
|
-
}
|
|
178
|
-
);
|
|
179
|
-
default: {
|
|
180
|
-
return typeaheadValues.length > 0 ? /* @__PURE__ */ jsx(
|
|
181
|
-
ExpandoCombobox,
|
|
182
|
-
{
|
|
183
|
-
className,
|
|
184
|
-
"data-field": "value",
|
|
185
|
-
dropdownOnAutofocus,
|
|
186
|
-
inputProps,
|
|
187
|
-
onChange: handleInputChange,
|
|
188
|
-
onOpenChange: handleOpenChange,
|
|
189
|
-
onSelectionChange: handleSingleValueSelectionChange,
|
|
190
|
-
ref: combinedRef,
|
|
191
|
-
title: "value",
|
|
192
|
-
value,
|
|
193
|
-
children: typeaheadValues.map((state) => /* @__PURE__ */ jsx(Option, { value: state }, state))
|
|
194
|
-
}
|
|
195
|
-
) : null;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}, [
|
|
199
|
-
typeaheadValues,
|
|
200
|
-
operator,
|
|
201
|
-
inputProps,
|
|
202
|
-
className,
|
|
203
|
-
valueInputValue,
|
|
204
|
-
forwardedRef,
|
|
205
|
-
handleInputChange,
|
|
206
|
-
handleInputCommit,
|
|
207
|
-
onOpenChange,
|
|
208
|
-
handleMultiValueSelectionChange,
|
|
209
|
-
value,
|
|
210
|
-
dropdownOnAutofocus,
|
|
211
|
-
handleSingleValueSelectionChange,
|
|
212
|
-
handleOpenChange,
|
|
213
|
-
combinedRef
|
|
214
|
-
]);
|
|
215
|
-
return getValueInputField();
|
|
216
|
-
}
|
|
217
|
-
);
|
|
218
|
-
|
|
219
|
-
export { FilterClauseValueEditorText };
|
|
220
|
-
//# sourceMappingURL=FilterClauseValueEditorText.js.map
|
|
@@ -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":["value"],"mappings":"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"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useState, useCallback } 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
|
-
|
|
7
|
-
const FilterClauseValueEditorTime = (props) => {
|
|
8
|
-
const { className, onChangeValue, operator, value } = props;
|
|
9
|
-
const toEpochMilliS = getEpochMillisConverter(operator);
|
|
10
|
-
const [date, setDate] = useState(
|
|
11
|
-
() => getInitialState(value)
|
|
12
|
-
);
|
|
13
|
-
const handleCommit = useCallback(
|
|
14
|
-
(e, selectedDateInputValue) => {
|
|
15
|
-
console.log("change time");
|
|
16
|
-
if (selectedDateInputValue) {
|
|
17
|
-
const dateValue = toCalendarDate(new Date(selectedDateInputValue));
|
|
18
|
-
setDate(dateValue);
|
|
19
|
-
if (selectedDateInputValue) {
|
|
20
|
-
onChangeValue(toEpochMilliS(dateValue));
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
[onChangeValue, toEpochMilliS]
|
|
25
|
-
);
|
|
26
|
-
const onBlur = useCallback(() => {
|
|
27
|
-
date && onChangeValue(toEpochMilliS(date));
|
|
28
|
-
}, [date, onChangeValue, toEpochMilliS]);
|
|
29
|
-
return /* @__PURE__ */ jsx(
|
|
30
|
-
VuuTimePicker,
|
|
31
|
-
{
|
|
32
|
-
"data-field": "value",
|
|
33
|
-
className,
|
|
34
|
-
onBlur,
|
|
35
|
-
onCommit: handleCommit
|
|
36
|
-
}
|
|
37
|
-
);
|
|
38
|
-
};
|
|
39
|
-
function getInitialState(value) {
|
|
40
|
-
return value ? toCalendarDate(new Date(value)) : void 0;
|
|
41
|
-
}
|
|
42
|
-
const getEpochMillisConverter = (op) => (date, timezone = getLocalTimeZone()) => {
|
|
43
|
-
const d = date.toDate(timezone);
|
|
44
|
-
switch (op) {
|
|
45
|
-
case ">":
|
|
46
|
-
case "<=":
|
|
47
|
-
d.setHours(23, 59, 59, 999);
|
|
48
|
-
return d.getTime();
|
|
49
|
-
case ">=":
|
|
50
|
-
case "<":
|
|
51
|
-
case "=":
|
|
52
|
-
// converted to "< `start of next day` and >= `start of this day`" when query is created
|
|
53
|
-
case "!=":
|
|
54
|
-
d.setHours(0, 0, 0, 0);
|
|
55
|
-
return d.getTime();
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export { FilterClauseValueEditorTime };
|
|
60
|
-
//# 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":[],"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,GAAA,QAAA;AAAA,IAAgC,MACtD,gBAAgB,KAAK;AAAA,GACvB;AAEA,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,GAAG,sBAA2B,KAAA;AAC7B,MAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,MAAA,IAAI,sBAAwB,EAAA;AAC1B,QAAA,MAAM,SAAY,GAAA,cAAA,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,GAAS,YAAY,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,uBAAA,GAAA;AAAA,IAAC,aAAA;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,QAAQ,cAAe,CAAA,IAAI,IAAK,CAAA,KAAK,CAAC,CAAI,GAAA,KAAA,CAAA;AACnD;AAEA,MAAM,0BACJ,CAAC,EAAA,KACD,CAAC,IAAiB,EAAA,QAAA,GAAmB,kBAA+B,KAAA;AAClE,EAAM,MAAA,CAAA,GAAI,IAAK,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,60 +0,0 @@
|
|
|
1
|
-
import { isValidTimeString, Time } from '@vuu-ui/vuu-utils';
|
|
2
|
-
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __typeError = (msg) => {
|
|
5
|
-
throw TypeError(msg);
|
|
6
|
-
};
|
|
7
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
|
|
9
|
-
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
10
|
-
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
11
|
-
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);
|
|
12
|
-
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
13
|
-
var _options;
|
|
14
|
-
const isTimeToday = (options) => options.type === "TimeString" && options.date === "today";
|
|
15
|
-
class ExtendedSingleValueFilterClause {
|
|
16
|
-
constructor(column, op, value, extendedOptions) {
|
|
17
|
-
this.column = column;
|
|
18
|
-
this.op = op;
|
|
19
|
-
this.value = value;
|
|
20
|
-
__privateAdd(this, _options);
|
|
21
|
-
__publicField(this, "name");
|
|
22
|
-
__privateSet(this, _options, extendedOptions);
|
|
23
|
-
}
|
|
24
|
-
asQuery() {
|
|
25
|
-
const { column, op, value } = this;
|
|
26
|
-
if (isTimeToday(__privateGet(this, _options))) {
|
|
27
|
-
if (isValidTimeString(value)) {
|
|
28
|
-
const timeValue = +Time(value).asDate();
|
|
29
|
-
if (op === ">=") {
|
|
30
|
-
return `${column} > ${timeValue - 1}`;
|
|
31
|
-
} else if (op === "<=") {
|
|
32
|
-
return `${column} < ${timeValue + 1}`;
|
|
33
|
-
} else {
|
|
34
|
-
return `${column} ${op} ${timeValue}`;
|
|
35
|
-
}
|
|
36
|
-
} else {
|
|
37
|
-
throw Error(
|
|
38
|
-
`[ExtendedSingleValueFilterClause] invalid TimeStrong ${value}`
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
} else {
|
|
42
|
-
throw Error(
|
|
43
|
-
"[ExtendedSingleValueFilterClause] unhandled extended filter type"
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
toJSON() {
|
|
48
|
-
const { column, op, value } = this;
|
|
49
|
-
return {
|
|
50
|
-
column,
|
|
51
|
-
op,
|
|
52
|
-
value,
|
|
53
|
-
extendedOptions: __privateGet(this, _options)
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
_options = new WeakMap();
|
|
58
|
-
|
|
59
|
-
export { ExtendedSingleValueFilterClause, isTimeToday };
|
|
60
|
-
//# 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":[],"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,IAAA,iBAAA,CAAkB,KAAK,CAAG,EAAA;AAC5B,QAAA,MAAM,SAAY,GAAA,CAAC,IAAK,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,4 +0,0 @@
|
|
|
1
|
-
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}";
|
|
2
|
-
|
|
3
|
-
export { filterContainerCss as default };
|
|
4
|
-
//# sourceMappingURL=FilterContainer.css.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FilterContainer.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import cx from 'clsx';
|
|
3
|
-
import { useMemo, useState, useRef, useCallback } from 'react';
|
|
4
|
-
import { useFilterContext, useFilterContainer, ColumnFilterContext } from './useFilterContainer.js';
|
|
5
|
-
import { ColumnFilter } from '../column-filter/ColumnFilter.js';
|
|
6
|
-
import { useSavedFilters, isNullFilter, filterDescriptorHasFilter } from '../filter-provider/FilterContext.js';
|
|
7
|
-
import { filtersAreEqual, getColumnValueFromFilter, isBetweenOperator } from '@vuu-ui/vuu-utils';
|
|
8
|
-
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
9
|
-
import { useWindow } from '@salt-ds/window';
|
|
10
|
-
import filterContainerCss from './FilterContainer.css.js';
|
|
11
|
-
|
|
12
|
-
const classBase = "vuuFilterContainer";
|
|
13
|
-
const notEmpty = (value) => Array.isArray(value) ? value[0] !== "" && value[1] !== "" : value !== "";
|
|
14
|
-
const FilterContainerColumnFilter = ({
|
|
15
|
-
column,
|
|
16
|
-
operator = "=",
|
|
17
|
-
variant,
|
|
18
|
-
...props
|
|
19
|
-
}) => {
|
|
20
|
-
const {
|
|
21
|
-
filterProviderKey,
|
|
22
|
-
onChange: onFilterContextChange,
|
|
23
|
-
onCommit: onFilterContextCommit,
|
|
24
|
-
register
|
|
25
|
-
} = useFilterContext(column, true);
|
|
26
|
-
const initialValue = useMemo(
|
|
27
|
-
() => register(column, operator),
|
|
28
|
-
[column, operator, register]
|
|
29
|
-
);
|
|
30
|
-
const [value, setValue] = useState(initialValue);
|
|
31
|
-
const valueRef = useRef(initialValue);
|
|
32
|
-
const { currentFilter } = useSavedFilters(filterProviderKey);
|
|
33
|
-
const currentFilterRef = useRef(currentFilter);
|
|
34
|
-
useMemo(() => {
|
|
35
|
-
if (currentFilterRef.current.id !== currentFilter.id || !filtersAreEqual(currentFilterRef.current.filter, currentFilter.filter)) {
|
|
36
|
-
currentFilterRef.current = currentFilter;
|
|
37
|
-
if (isNullFilter(currentFilter) && notEmpty(valueRef.current)) {
|
|
38
|
-
if (Array.isArray(valueRef.current)) {
|
|
39
|
-
if (column.type === "time") {
|
|
40
|
-
valueRef.current = ["00:00:00", "23:59:59"];
|
|
41
|
-
} else {
|
|
42
|
-
valueRef.current = ["", ""];
|
|
43
|
-
}
|
|
44
|
-
} else {
|
|
45
|
-
valueRef.current = "";
|
|
46
|
-
}
|
|
47
|
-
setValue(valueRef.current);
|
|
48
|
-
} else if (filterDescriptorHasFilter(currentFilter)) {
|
|
49
|
-
const v = getColumnValueFromFilter(
|
|
50
|
-
column,
|
|
51
|
-
operator,
|
|
52
|
-
currentFilter.filter
|
|
53
|
-
);
|
|
54
|
-
if (isBetweenOperator(operator) && !Array.isArray(v) && Array.isArray(valueRef.current)) {
|
|
55
|
-
const [v1, v2] = valueRef.current;
|
|
56
|
-
if (`${v}` === v1 && v2 === "") {
|
|
57
|
-
return;
|
|
58
|
-
} else {
|
|
59
|
-
valueRef.current = [`${v}`, ""];
|
|
60
|
-
setValue(valueRef.current);
|
|
61
|
-
}
|
|
62
|
-
} else if (v !== valueRef.current) {
|
|
63
|
-
valueRef.current = v;
|
|
64
|
-
setValue(v);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}, [column, currentFilter]);
|
|
69
|
-
const handleCommit = useCallback(
|
|
70
|
-
(column2, op, value2, extendedFilterOptions) => {
|
|
71
|
-
valueRef.current = value2;
|
|
72
|
-
setValue(value2);
|
|
73
|
-
onFilterContextCommit(column2, op, value2, extendedFilterOptions);
|
|
74
|
-
},
|
|
75
|
-
[onFilterContextCommit]
|
|
76
|
-
);
|
|
77
|
-
const handleColumnFilterChange = useCallback(
|
|
78
|
-
(value2, column2, op) => {
|
|
79
|
-
const { current: v } = valueRef;
|
|
80
|
-
valueRef.current = Array.isArray(v) ? [`${value2}`, v[1]] : value2;
|
|
81
|
-
setValue(valueRef.current);
|
|
82
|
-
onFilterContextChange(valueRef.current, column2, op);
|
|
83
|
-
},
|
|
84
|
-
[onFilterContextChange]
|
|
85
|
-
);
|
|
86
|
-
const handleColumnRangeFilterChange = useCallback(
|
|
87
|
-
(value2, column2, op) => {
|
|
88
|
-
const { current: v } = valueRef;
|
|
89
|
-
valueRef.current = Array.isArray(v) ? [v[0], `${value2}`] : value2;
|
|
90
|
-
setValue(valueRef.current);
|
|
91
|
-
onFilterContextChange(valueRef.current, column2, op);
|
|
92
|
-
},
|
|
93
|
-
[onFilterContextChange]
|
|
94
|
-
);
|
|
95
|
-
return /* @__PURE__ */ jsx(
|
|
96
|
-
ColumnFilter,
|
|
97
|
-
{
|
|
98
|
-
...props,
|
|
99
|
-
column,
|
|
100
|
-
onColumnFilterChange: handleColumnFilterChange,
|
|
101
|
-
onColumnRangeFilterChange: handleColumnRangeFilterChange,
|
|
102
|
-
onCommit: handleCommit,
|
|
103
|
-
operator,
|
|
104
|
-
value,
|
|
105
|
-
variant
|
|
106
|
-
}
|
|
107
|
-
);
|
|
108
|
-
};
|
|
109
|
-
const FilterContainer = ({
|
|
110
|
-
children,
|
|
111
|
-
className,
|
|
112
|
-
filter,
|
|
113
|
-
filterProviderKey,
|
|
114
|
-
onFilterApplied,
|
|
115
|
-
onFilterCleared,
|
|
116
|
-
...htmlAttributes
|
|
117
|
-
}) => {
|
|
118
|
-
const targetWindow = useWindow();
|
|
119
|
-
useComponentCssInjection({
|
|
120
|
-
testId: "vuu-filter-container",
|
|
121
|
-
css: filterContainerCss,
|
|
122
|
-
window: targetWindow
|
|
123
|
-
});
|
|
124
|
-
console.log(`[FilterContainer] current filter ${JSON.stringify(filter)}`);
|
|
125
|
-
const filterContextProps = useFilterContainer({
|
|
126
|
-
filter,
|
|
127
|
-
filterProviderKey,
|
|
128
|
-
onFilterApplied,
|
|
129
|
-
onFilterCleared
|
|
130
|
-
});
|
|
131
|
-
return /* @__PURE__ */ jsx(ColumnFilterContext.Provider, { value: filterContextProps, children: /* @__PURE__ */ jsx(
|
|
132
|
-
"div",
|
|
133
|
-
{
|
|
134
|
-
...htmlAttributes,
|
|
135
|
-
className: cx(classBase, className, "vuuScrollable"),
|
|
136
|
-
children
|
|
137
|
-
}
|
|
138
|
-
) });
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
export { FilterContainer, FilterContainerColumnFilter };
|
|
142
|
-
//# 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":["column","value"],"mappings":"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"}
|