@vuu-ui/vuu-filters 4.0.0-alpha.20 → 4.0.0-alpha.22

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.
Files changed (101) hide show
  1. package/package.json +15 -16
  2. package/src/filter-clause/FilterClause.css.js +1 -1
  3. package/src/tabbed-filter-container/TabbedFilterContainer.js +19 -17
  4. package/src/toggle-filter/ToggleFilter.js +16 -6
  5. package/src/toggle-filter/useToggleFilter.js +15 -2
  6. package/types/custom-filters/CustomFilters.d.ts +1 -1
  7. package/types/filter-bar/FilterBar.d.ts +1 -1
  8. package/types/filter-bar/FilterBarMenu.d.ts +1 -1
  9. package/types/filter-clause/FilterClause.d.ts +1 -1
  10. package/types/filter-clause/value-editors/FilterClauseValueEditorDate.d.ts +1 -1
  11. package/types/filter-clause/value-editors/FilterClauseValueEditorTime.d.ts +1 -1
  12. package/types/filter-container/FilterContainer.d.ts +2 -2
  13. package/types/filter-editor/FilterClauseCombinator.d.ts +1 -1
  14. package/types/filter-editor/FilterEditor.d.ts +1 -1
  15. package/types/filter-pill/FilterMenu.d.ts +1 -1
  16. package/types/filter-pill/FilterPill.d.ts +1 -1
  17. package/types/filter-pill/FilterPillNext.d.ts +1 -1
  18. package/types/filter-pill-menu/FilterPillMenu.d.ts +1 -1
  19. package/types/filter-provider/FilterProvider.d.ts +1 -1
  20. package/types/filter-toggle-button/FilterToggleButton.d.ts +1 -1
  21. package/types/index.d.ts +1 -1
  22. package/types/inline-filter/InlineFilter.d.ts +1 -1
  23. package/types/quick-filters/QuickFilters.d.ts +1 -1
  24. package/types/saved-filters/DeleteFilterPrompt.d.ts +1 -1
  25. package/types/saved-filters/FilterNamePrompt.d.ts +1 -1
  26. package/types/saved-filters/SavedFilterPanel.d.ts +1 -1
  27. package/types/tabbed-filter-container/TabbedFilterContainer.d.ts +1 -1
  28. package/types/toggle-filter/ToggleFilter.d.ts +14 -1
  29. package/types/toggle-filter/useToggleFilter.d.ts +9 -1
  30. package/types/src/FilterAggregator.d.ts +0 -28
  31. package/types/src/FilterModel.d.ts +0 -44
  32. package/types/src/column-filter/ColumnFilter.d.ts +0 -6
  33. package/types/src/column-filter/useColumnFilter.d.ts +0 -43
  34. package/types/src/column-filter/utils.d.ts +0 -4
  35. package/types/src/custom-filters/CustomFilters.d.ts +0 -7
  36. package/types/src/custom-filters/filterBarFocusManagement.d.ts +0 -1
  37. package/types/src/custom-filters/index.d.ts +0 -1
  38. package/types/src/custom-filters/useCustomFilters.d.ts +0 -33
  39. package/types/src/custom-filters/useFilterState.d.ts +0 -17
  40. package/types/src/filter-bar/FilterBar.d.ts +0 -33
  41. package/types/src/filter-bar/FilterBarMenu.d.ts +0 -1
  42. package/types/src/filter-bar/index.d.ts +0 -2
  43. package/types/src/filter-bar/useFilterBar.d.ts +0 -7
  44. package/types/src/filter-clause/ExpandoCombobox.d.ts +0 -10
  45. package/types/src/filter-clause/FilterClause.d.ts +0 -16
  46. package/types/src/filter-clause/column-picker/ColumnPicker.d.ts +0 -13
  47. package/types/src/filter-clause/column-picker/useColumnPicker.d.ts +0 -11
  48. package/types/src/filter-clause/filterClauseFocusManagement.d.ts +0 -15
  49. package/types/src/filter-clause/filterClauseTypes.d.ts +0 -12
  50. package/types/src/filter-clause/index.d.ts +0 -5
  51. package/types/src/filter-clause/operator-picker/OperatorPicker.d.ts +0 -14
  52. package/types/src/filter-clause/operator-picker/operator-utils.d.ts +0 -5
  53. package/types/src/filter-clause/operator-picker/useOperatorPicker.d.ts +0 -12
  54. package/types/src/filter-clause/useFilterClause.d.ts +0 -26
  55. package/types/src/filter-clause/value-editors/FilterClauseValueEditor.d.ts +0 -26
  56. package/types/src/filter-clause/value-editors/FilterClauseValueEditorDate.d.ts +0 -9
  57. package/types/src/filter-clause/value-editors/FilterClauseValueEditorNumber.d.ts +0 -9
  58. package/types/src/filter-clause/value-editors/FilterClauseValueEditorText.d.ts +0 -9
  59. package/types/src/filter-clause/value-editors/FilterClauseValueEditorTime.d.ts +0 -9
  60. package/types/src/filter-container/ExtendedSingleValueFilterClause.d.ts +0 -21
  61. package/types/src/filter-container/FilterContainer.d.ts +0 -23
  62. package/types/src/filter-container/useFilterContainer.d.ts +0 -22
  63. package/types/src/filter-context-menu/useFilterContextMenu.d.ts +0 -6
  64. package/types/src/filter-display/FilterDisplay.d.ts +0 -10
  65. package/types/src/filter-editor/FilterClauseCombinator.d.ts +0 -9
  66. package/types/src/filter-editor/FilterEditor.d.ts +0 -14
  67. package/types/src/filter-editor/index.d.ts +0 -1
  68. package/types/src/filter-editor/useFilterEditor.d.ts +0 -32
  69. package/types/src/filter-panel/FilterPanel.d.ts +0 -9
  70. package/types/src/filter-panel/useFilterPanel.d.ts +0 -14
  71. package/types/src/filter-pill/FilterMenu.d.ts +0 -24
  72. package/types/src/filter-pill/FilterPill.d.ts +0 -16
  73. package/types/src/filter-pill/FilterPillNext.d.ts +0 -15
  74. package/types/src/filter-pill/filterAsReactNode.d.ts +0 -3
  75. package/types/src/filter-pill/getFilterLabel.d.ts +0 -2
  76. package/types/src/filter-pill/getFilterTooltipText.d.ts +0 -2
  77. package/types/src/filter-pill/index.d.ts +0 -1
  78. package/types/src/filter-pill/useFilterPillNext.d.ts +0 -25
  79. package/types/src/filter-pill-menu/FilterPillMenu.d.ts +0 -17
  80. package/types/src/filter-pill-menu/FilterPillMenuOptions.d.ts +0 -12
  81. package/types/src/filter-pill-menu/index.d.ts +0 -1
  82. package/types/src/filter-provider/FilterContext.d.ts +0 -39
  83. package/types/src/filter-provider/FilterProvider.d.ts +0 -10
  84. package/types/src/filter-provider/filter-descriptor-utils.d.ts +0 -7
  85. package/types/src/filter-toggle-button/FilterToggleButton.d.ts +0 -9
  86. package/types/src/filter-utils.d.ts +0 -60
  87. package/types/src/index.d.ts +0 -24
  88. package/types/src/inline-filter/InlineFilter.d.ts +0 -12
  89. package/types/src/inline-filter/index.d.ts +0 -1
  90. package/types/src/inline-filter/useInlineFilter.d.ts +0 -5
  91. package/types/src/quick-filters/QuickFilters.d.ts +0 -17
  92. package/types/src/quick-filters/index.d.ts +0 -1
  93. package/types/src/quick-filters/useQuickFilters.d.ts +0 -12
  94. package/types/src/saved-filters/DeleteFilterPrompt.d.ts +0 -9
  95. package/types/src/saved-filters/FilterNamePrompt.d.ts +0 -6
  96. package/types/src/saved-filters/SavedFilterPanel.d.ts +0 -14
  97. package/types/src/saved-filters/useFilterNamePrompt.d.ts +0 -28
  98. package/types/src/saved-filters/useSavedFilterPanel.d.ts +0 -13
  99. package/types/src/tabbed-filter-container/TabbedFilterContainer.d.ts +0 -10
  100. package/types/src/toggle-filter/ToggleFilter.d.ts +0 -17
  101. package/types/src/toggle-filter/useToggleFilter.d.ts +0 -11
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.0.0-alpha.20",
2
+ "version": "4.0.0-alpha.22",
3
3
  "main": "./src/index.js",
4
4
  "author": "heswell",
5
5
  "license": "Apache-2.0",
@@ -10,23 +10,22 @@
10
10
  "type-defs": "node ../../scripts/build-type-defs.mjs"
11
11
  },
12
12
  "devDependencies": {
13
- "@vuu-ui/vuu-data-types": "4.0.0-alpha.20",
14
- "@vuu-ui/vuu-protocol-types": "4.0.0-alpha.20",
15
- "@vuu-ui/vuu-table-types": "4.0.0-alpha.20",
16
- "@vuu-ui/vuu-filter-types": "4.0.0-alpha.20"
13
+ "@vuu-ui/vuu-data-types": "4.0.0-alpha.22",
14
+ "@vuu-ui/vuu-protocol-types": "4.0.0-alpha.22",
15
+ "@vuu-ui/vuu-table-types": "4.0.0-alpha.22",
16
+ "@vuu-ui/vuu-filter-types": "4.0.0-alpha.22"
17
17
  },
18
18
  "dependencies": {
19
- "@vuu-ui/vuu-context-menu": "4.0.0-alpha.20",
20
- "@vuu-ui/vuu-data-react": "4.0.0-alpha.20",
21
- "@vuu-ui/vuu-filter-parser": "4.0.0-alpha.20",
22
- "@vuu-ui/vuu-popups": "4.0.0-alpha.20",
23
- "@vuu-ui/vuu-ui-controls": "4.0.0-alpha.20",
24
- "@vuu-ui/vuu-table": "4.0.0-alpha.20",
25
- "@vuu-ui/vuu-utils": "4.0.0-alpha.20",
26
- "@salt-ds/core": "1.67.0",
27
- "@salt-ds/lab": "1.0.0-alpha.99",
28
- "@salt-ds/styles": "0.2.1",
29
- "@salt-ds/window": "0.1.1"
19
+ "@vuu-ui/vuu-context-menu": "4.0.0-alpha.22",
20
+ "@vuu-ui/vuu-data-react": "4.0.0-alpha.22",
21
+ "@vuu-ui/vuu-filter-parser": "4.0.0-alpha.22",
22
+ "@vuu-ui/vuu-popups": "4.0.0-alpha.22",
23
+ "@vuu-ui/vuu-ui-controls": "4.0.0-alpha.22",
24
+ "@vuu-ui/vuu-table": "4.0.0-alpha.22",
25
+ "@vuu-ui/vuu-utils": "4.0.0-alpha.22",
26
+ "@salt-ds/core": "1.72.0",
27
+ "@salt-ds/styles": "0.4.1",
28
+ "@salt-ds/window": "0.1.2"
30
29
  },
31
30
  "peerDependencies": {
32
31
  "@internationalized/date": "^3.0.0",
@@ -12,7 +12,7 @@ const css = `
12
12
  border-radius: var(--saltButton-borderRadius);
13
13
  align-items: center;
14
14
  gap: var(--salt-spacing-50);
15
- height: calc(var(--salt-size-base) + var(--salt-size-spacing-100));
15
+ height: calc(var(--salt-size-base) + var(--salt-spacing-100));
16
16
  min-width: calc(var(--salt-size-base) * 4);
17
17
  padding: 0 var(--salt-spacing-100);
18
18
  border-style: solid;
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { Tab, TabList, TabPanel, TabTrigger, Tabs } from "@salt-ds/core";
2
+ import { Tab, TabBar, TabList, TabPanel, TabTrigger, Tabs } from "@salt-ds/core";
3
3
  import clsx from "clsx";
4
4
  import { FilterPanel } from "../filter-panel/FilterPanel.js";
5
5
  import { SavedFilterPanel } from "../saved-filters/SavedFilterPanel.js";
@@ -10,22 +10,24 @@ const TabbedFilterContainer = ({ SavedFilterPanelProps, children, className, fil
10
10
  children: /*#__PURE__*/ jsxs(Tabs, {
11
11
  defaultValue: "ad-hoc-filter",
12
12
  children: [
13
- /*#__PURE__*/ jsxs(TabList, {
14
- appearance: "transparent",
15
- children: [
16
- /*#__PURE__*/ jsx(Tab, {
17
- value: "ad-hoc-filter",
18
- children: /*#__PURE__*/ jsx(TabTrigger, {
19
- children: filterTabLabel
20
- })
21
- }, "ad-hoc-filter"),
22
- /*#__PURE__*/ jsx(Tab, {
23
- value: "saved-filters",
24
- children: /*#__PURE__*/ jsx(TabTrigger, {
25
- children: savedFilterLabel
26
- })
27
- }, "saved-filters")
28
- ]
13
+ /*#__PURE__*/ jsx(TabBar, {
14
+ children: /*#__PURE__*/ jsxs(TabList, {
15
+ appearance: "transparent",
16
+ children: [
17
+ /*#__PURE__*/ jsx(Tab, {
18
+ value: "ad-hoc-filter",
19
+ children: /*#__PURE__*/ jsx(TabTrigger, {
20
+ children: filterTabLabel
21
+ })
22
+ }, "ad-hoc-filter"),
23
+ /*#__PURE__*/ jsx(Tab, {
24
+ value: "saved-filters",
25
+ children: /*#__PURE__*/ jsx(TabTrigger, {
26
+ children: savedFilterLabel
27
+ })
28
+ }, "saved-filters")
29
+ ]
30
+ })
29
31
  }),
30
32
  /*#__PURE__*/ jsx(TabPanel, {
31
33
  value: "ad-hoc-filter",
@@ -6,7 +6,10 @@ import clsx from "clsx";
6
6
  import { forwardRef, useCallback } from "react";
7
7
  import { useToggleFilter } from "./useToggleFilter.js";
8
8
  import ToggleFilter_0 from "./ToggleFilter.css";
9
- const getValues = (defaultValue, value)=>{
9
+ const toToggleButtonValue = (value)=>"boolean" == typeof value ? `${value}` : value;
10
+ const getValues = (defaultValueProp, valueProp)=>{
11
+ const defaultValue = toToggleButtonValue(defaultValueProp);
12
+ const value = toToggleButtonValue(valueProp);
10
13
  if (void 0 === defaultValue && void 0 === value) return [
11
14
  "all"
12
15
  ];
@@ -25,7 +28,7 @@ const getValues = (defaultValue, value)=>{
25
28
  };
26
29
  const classBase = "vuuToggleFilter";
27
30
  const NO_MATCHING_DATA = "No matching data";
28
- const ToggleFilter_ToggleFilter = /*#__PURE__*/ forwardRef(function({ className, column, defaultValue: defaultValueProp, labels, onCommit, table, value: valueProp, values, ...ToggleButtonGroupProps }, forwardedRef) {
31
+ const ToggleFilter_ToggleFilter = /*#__PURE__*/ forwardRef(function({ className, column, defaultValue: defaultValueProp, disableTypeahead, labels, onCommit, table, value: valueProp, values, ...ToggleButtonGroupProps }, forwardedRef) {
29
32
  const targetWindow = useWindow();
30
33
  useComponentCssInjection({
31
34
  testId: "vuu-toggle-filter",
@@ -34,16 +37,23 @@ const ToggleFilter_ToggleFilter = /*#__PURE__*/ forwardRef(function({ className,
34
37
  });
35
38
  if (void 0 !== labels && labels.length !== values.length) throw Error("[ToggleFilter] labels must have the same number of items as values");
36
39
  const [defaultValue, value] = getValues(defaultValueProp, valueProp);
40
+ const stringValues = values.map(String);
37
41
  const { onlyAvailableValue, unavailableValues } = useToggleFilter({
38
42
  column,
43
+ disableTypeahead,
39
44
  table,
40
- values
45
+ values: stringValues
41
46
  });
42
47
  const handleChange = useCallback((e)=>{
43
48
  const value = e.currentTarget.value;
44
- "all" === value ? onCommit(e, "") : onCommit(e, value);
49
+ if ("all" === value) onCommit(e, "");
50
+ else {
51
+ const toggleValue = values.find((v)=>`${v}` === value);
52
+ onCommit(e, "boolean" == typeof toggleValue ? toggleValue : value);
53
+ }
45
54
  }, [
46
- onCommit
55
+ onCommit,
56
+ values
47
57
  ]);
48
58
  return /*#__PURE__*/ jsxs(ToggleButtonGroup, {
49
59
  ...ToggleButtonGroupProps,
@@ -57,7 +67,7 @@ const ToggleFilter_ToggleFilter = /*#__PURE__*/ forwardRef(function({ className,
57
67
  value: "all",
58
68
  children: "All"
59
69
  }, "all"),
60
- values.map((toggleValue, i)=>{
70
+ stringValues.map((toggleValue, i)=>{
61
71
  const unavailable = unavailableValues.includes(toggleValue);
62
72
  return /*#__PURE__*/ jsx(Tooltip, {
63
73
  content: NO_MATCHING_DATA,
@@ -12,7 +12,11 @@ const hasFilterOnColumn = (filterSpec, column)=>{
12
12
  const filter = filterSpec.filterStruct ?? parseFilter(filterSpec.filter);
13
13
  return void 0 !== extractFilterForColumn(filter, column);
14
14
  };
15
- const useToggleFilter = ({ column, table, values })=>{
15
+ const isNonStringColumn = (dataSource, column)=>{
16
+ const serverDataType = dataSource?.tableSchema?.columns.find((col)=>col.name === column)?.serverDataType;
17
+ return void 0 !== serverDataType && "string" !== serverDataType;
18
+ };
19
+ const useToggleFilter = ({ column, disableTypeahead = false, table, values })=>{
16
20
  const dataSource = useDataSource(false);
17
21
  const [typeaheadValues, setTypeaheadValues] = useState(void 0);
18
22
  const getSuggestions = useTypeaheadSuggestions();
@@ -24,7 +28,7 @@ const useToggleFilter = ({ column, table, values })=>{
24
28
  const tableModule = vuuTable?.module;
25
29
  const tableName = vuuTable?.table;
26
30
  const checkAvailability = useCallback(()=>{
27
- if (void 0 === tableModule || void 0 === tableName || void 0 === dataSource) return;
31
+ if (disableTypeahead || void 0 === tableModule || void 0 === tableName || void 0 === dataSource || isNonStringColumn(dataSource, column)) return;
28
32
  if (hasFilterOnColumn(dataSource.filter, column)) return;
29
33
  const requestId = ++requestIdRef.current;
30
34
  const params = [
@@ -42,6 +46,7 @@ const useToggleFilter = ({ column, table, values })=>{
42
46
  }, [
43
47
  column,
44
48
  dataSource,
49
+ disableTypeahead,
45
50
  getSuggestions,
46
51
  tableModule,
47
52
  tableName
@@ -65,6 +70,14 @@ const useToggleFilter = ({ column, table, values })=>{
65
70
  checkAvailability,
66
71
  dataSource
67
72
  ]);
73
+ useEffect(()=>{
74
+ if (disableTypeahead) {
75
+ requestIdRef.current += 1;
76
+ setTypeaheadValues(void 0);
77
+ }
78
+ }, [
79
+ disableTypeahead
80
+ ]);
68
81
  return useMemo(()=>{
69
82
  if (void 0 === typeaheadValues) return {
70
83
  unavailableValues: []
@@ -4,4 +4,4 @@ import { type FilterBarProps } from "../filter-bar";
4
4
  export interface CustomFilterProps extends HTMLAttributes<HTMLDivElement>, Pick<FilterBarProps, "defaultFilterState" | "filterState" | "onApplyFilter" | "onClearFilter" | "onFilterDeleted" | "onFilterRenamed" | "onFilterStateChanged" | "vuuTable"> {
5
5
  columnDescriptors: readonly ColumnDescriptor[];
6
6
  }
7
- export declare const CustomFilters: ({ columnDescriptors, defaultFilterState, filterState, onApplyFilter, onClearFilter, onFilterDeleted, onFilterRenamed, onFilterStateChanged, vuuTable, }: CustomFilterProps) => import("react").JSX.Element;
7
+ export declare const CustomFilters: ({ columnDescriptors, defaultFilterState, filterState, onApplyFilter, onClearFilter, onFilterDeleted, onFilterRenamed, onFilterStateChanged, vuuTable, }: CustomFilterProps) => import("react/jsx-runtime").JSX.Element;
@@ -30,4 +30,4 @@ export interface FilterBarProps extends HTMLAttributes<HTMLDivElement> {
30
30
  vuuTable?: VuuTable;
31
31
  variant?: FilterBarVariant;
32
32
  }
33
- export declare const FilterBar: ({ QuickFilterProps, className: classNameProp, columnDescriptors, defaultFilterMode, defaultFilterState, filterMode: filterModeProp, filterState, onApplyFilter, onChangeFilterMode: onChangeFilterModeProp, onClearFilter, onFilterDeleted, onFilterRenamed, onFilterStateChanged, vuuTable, variant, ...htmlAttributes }: FilterBarProps) => import("react").JSX.Element;
33
+ export declare const FilterBar: ({ QuickFilterProps, className: classNameProp, columnDescriptors, defaultFilterMode, defaultFilterState, filterMode: filterModeProp, filterState, onApplyFilter, onChangeFilterMode: onChangeFilterModeProp, onClearFilter, onFilterDeleted, onFilterRenamed, onFilterStateChanged, vuuTable, variant, ...htmlAttributes }: FilterBarProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- export declare const FilterBarMenu: () => import("react").JSX.Element;
1
+ export declare const FilterBarMenu: () => import("react/jsx-runtime").JSX.Element;
@@ -13,4 +13,4 @@ export interface FilterClauseProps extends Omit<HTMLAttributes<HTMLDivElement>,
13
13
  dropdownOnAutofocus?: boolean;
14
14
  vuuTable: VuuTable;
15
15
  }
16
- export declare const FilterClause: ({ className, columnsByName, onCancel, onDropdownOpen, onFocusSave, filterClauseModel, vuuTable, dropdownOnAutofocus, ...htmlAttributes }: FilterClauseProps) => import("react").JSX.Element;
16
+ export declare const FilterClause: ({ className, columnsByName, onCancel, onDropdownOpen, onFocusSave, filterClauseModel, vuuTable, dropdownOnAutofocus, ...htmlAttributes }: FilterClauseProps) => import("react/jsx-runtime").JSX.Element;
@@ -16,5 +16,5 @@ interface FilterClauseValueEditorDateProps extends Pick<FilterClauseValueEditor,
16
16
  * created, the clause is applied to the whole day e.g. '=' selects all values
17
17
  * on that day, '>' selects all values after that day (see temporalFilterAsQuery).
18
18
  */
19
- export declare const FilterClauseValueEditorDate: ({ className, inputProps, onChangeValue, temporalInfo, value, }: FilterClauseValueEditorDateProps) => import("react").JSX.Element;
19
+ export declare const FilterClauseValueEditorDate: ({ className, inputProps, onChangeValue, temporalInfo, value, }: FilterClauseValueEditorDateProps) => import("react/jsx-runtime").JSX.Element;
20
20
  export {};
@@ -16,5 +16,5 @@ interface FilterClauseValueEditorTimeProps extends Pick<FilterClauseValueEditor,
16
16
  * is created, the time is resolved against today's date (in the column time
17
17
  * zone), so a saved filter always applies to the current day.
18
18
  */
19
- export declare const FilterClauseValueEditorTime: ({ className, onChangeValue, temporalInfo, value, }: FilterClauseValueEditorTimeProps) => import("react").JSX.Element;
19
+ export declare const FilterClauseValueEditorTime: ({ className, onChangeValue, temporalInfo, value, }: FilterClauseValueEditorTimeProps) => import("react/jsx-runtime").JSX.Element;
20
20
  export {};
@@ -16,7 +16,7 @@ export interface FilterContainerColumnFilterProps extends Omit<ColumnFilterProps
16
16
  */
17
17
  pattern?: DateTimePattern;
18
18
  }
19
- export declare const FilterContainerColumnFilter: ({ column: columnProp, operator, pattern: patternProp, variant, ...props }: FilterContainerColumnFilterProps) => import("react").JSX.Element;
19
+ export declare const FilterContainerColumnFilter: ({ column: columnProp, operator, pattern: patternProp, variant, ...props }: FilterContainerColumnFilterProps) => import("react/jsx-runtime").JSX.Element;
20
20
  /**
21
21
  * FilterContainer is a generic UI container for a collection of Filter
22
22
  * controls. Each control manages a single filter clause and the Filter
@@ -27,4 +27,4 @@ export declare const FilterContainerColumnFilter: ({ column: columnProp, operato
27
27
  * the top-level filter.
28
28
  * See FilterPanel and InlineFilter for examples of FilterContainer usage.
29
29
  */
30
- export declare const FilterContainer: ({ children, className, filter, filterProviderKey, onFilterApplied, onFilterCleared, ...htmlAttributes }: FilterContainerProps) => import("react").JSX.Element;
30
+ export declare const FilterContainer: ({ children, className, filter, filterProviderKey, onFilterApplied, onFilterCleared, ...htmlAttributes }: FilterContainerProps) => import("react/jsx-runtime").JSX.Element;
@@ -6,4 +6,4 @@ export interface FilterClauseCombinatorProps {
6
6
  onKeyDown: KeyboardEventHandler;
7
7
  operator: FilterCombinatorOp;
8
8
  }
9
- export declare const FilterClauseCombinator: ({ onChange, onKeyDown, operator, }: FilterClauseCombinatorProps) => import("react").JSX.Element;
9
+ export declare const FilterClauseCombinator: ({ onChange, onKeyDown, operator, }: FilterClauseCombinatorProps) => import("react/jsx-runtime").JSX.Element;
@@ -11,4 +11,4 @@ export interface FilterEditorProps extends HTMLAttributes<HTMLDivElement> {
11
11
  onSave: FilterEditSaveHandler;
12
12
  vuuTable: VuuTable;
13
13
  }
14
- export declare const FilterEditor: ({ columnDescriptors, filter, onCancel, onSave, vuuTable, ...htmlAttributes }: FilterEditorProps) => import("react").JSX.Element;
14
+ export declare const FilterEditor: ({ columnDescriptors, filter, onCancel, onSave, vuuTable, ...htmlAttributes }: FilterEditorProps) => import("react/jsx-runtime").JSX.Element;
@@ -21,4 +21,4 @@ export interface FilterMenuProps extends Pick<MenuProps, "getVirtualElement" | "
21
21
  permissions?: FilterPermissions;
22
22
  }
23
23
  export type FilterAction = "close" | "remove" | "edit" | "rename";
24
- export declare const FilterMenu: ({ filterId, getVirtualElement, onMenuAction, onOpenChange, open, permissions, }: FilterMenuProps) => import("react").JSX.Element;
24
+ export declare const FilterMenu: ({ filterId, getVirtualElement, onMenuAction, onOpenChange, open, permissions, }: FilterMenuProps) => import("react/jsx-runtime").JSX.Element;
@@ -13,4 +13,4 @@ export interface FilterPillProps extends SplitStateButtonProps, Pick<Partial<Edi
13
13
  onBeginEdit?: (filter: Filter) => void;
14
14
  onMenuAction?: MenuActionHandler;
15
15
  }
16
- export declare const FilterPill: ({ allowClose, allowDelete, allowEdit, allowRename, className: classNameProp, columnsByName, editable, editing, editLabelApiRef, filter, id: idProp, onBeginEdit, onExitEditMode, onMenuAction, ...htmlAttributes }: FilterPillProps) => import("react").JSX.Element;
16
+ export declare const FilterPill: ({ allowClose, allowDelete, allowEdit, allowRename, className: classNameProp, columnsByName, editable, editing, editLabelApiRef, filter, id: idProp, onBeginEdit, onExitEditMode, onMenuAction, ...htmlAttributes }: FilterPillProps) => import("react/jsx-runtime").JSX.Element;
@@ -12,4 +12,4 @@ export interface FilterPillNextProps extends FilterPillNextHookProps, Omit<HTMLA
12
12
  permissions?: FilterPermissions;
13
13
  showTooltip?: boolean;
14
14
  }
15
- export declare const FilterPillNext: ({ active, appearence, columns, className, defaultActive, filter, id, onClick, onMenuAction: onMenuActionProp, permissions, showTooltip, ...htmlAttributes }: FilterPillNextProps) => import("react").JSX.Element;
15
+ export declare const FilterPillNext: ({ active, appearence, columns, className, defaultActive, filter, id, onClick, onMenuAction: onMenuActionProp, permissions, showTooltip, ...htmlAttributes }: FilterPillNextProps) => import("react/jsx-runtime").JSX.Element;
@@ -14,4 +14,4 @@ export interface FilterPillMenuProps {
14
14
  onMenuAction: MenuActionHandler;
15
15
  onMenuClose?: () => void;
16
16
  }
17
- export declare const FilterPillMenu: ({ allowClose, allowDelete, allowEdit, allowRename, filter, location, onMenuAction, onMenuClose, }: FilterPillMenuProps) => import("react").JSX.Element;
17
+ export declare const FilterPillMenu: ({ allowClose, allowDelete, allowEdit, allowRename, filter, location, onMenuAction, onMenuClose, }: FilterPillMenuProps) => import("react/jsx-runtime").JSX.Element;
@@ -25,4 +25,4 @@ export interface FilterProviderProps {
25
25
  savedFilters?: SavedFilterRecord;
26
26
  filterNameMaxLength?: number;
27
27
  }
28
- export declare const FilterProvider: ({ children, columnFilterPatterns, columnTypeFilterPatterns, onFiltersSaved, savedFilters: savedFiltersProp, filterNameMaxLength, }: FilterProviderProps) => import("react").JSX.Element;
28
+ export declare const FilterProvider: ({ children, columnFilterPatterns, columnTypeFilterPatterns, onFiltersSaved, savedFilters: savedFiltersProp, filterNameMaxLength, }: FilterProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -6,4 +6,4 @@ export interface FilterToggleButtonProps {
6
6
  filterProviderKey?: string;
7
7
  onToggle: () => void;
8
8
  }
9
- export declare const FilterToggleButton: ({ columns, filterProviderKey, onToggle, }: FilterToggleButtonProps) => import("react").JSX.Element;
9
+ export declare const FilterToggleButton: ({ columns, filterProviderKey, onToggle, }: FilterToggleButtonProps) => import("react/jsx-runtime").JSX.Element;
package/types/index.d.ts CHANGED
@@ -21,4 +21,4 @@ export { FilterNamePrompt as SaveFilterConfirmPrompt, type FilterNamePromptProps
21
21
  export { SavedFilterPanel, type SavedFilterPanelProps, } from "./saved-filters/SavedFilterPanel";
22
22
  export type { FilterClickHandler } from "./saved-filters/useSavedFilterPanel";
23
23
  export { TabbedFilterContainer, type TabbedFilterContainerProps, } from "./tabbed-filter-container/TabbedFilterContainer";
24
- export { ToggleFilter, type ToggleFilterProps, } from "./toggle-filter/ToggleFilter";
24
+ export { ToggleFilter, type ToggleFilterProps, type ToggleFilterValue, } from "./toggle-filter/ToggleFilter";
@@ -9,4 +9,4 @@ export interface InlineFilterProps extends Partial<BaseRowProps>, Omit<HTMLAttri
9
9
  onFilterCleared?: () => void;
10
10
  table: TableSchemaTable;
11
11
  }
12
- export declare const InlineFilter: ({ ariaRole, onFilterApplied, onFilterCleared, table, ...htmlAttributes }: InlineFilterProps) => import("react").JSX.Element;
12
+ export declare const InlineFilter: ({ ariaRole, onFilterApplied, onFilterCleared, table, ...htmlAttributes }: InlineFilterProps) => import("react/jsx-runtime").JSX.Element;
@@ -14,4 +14,4 @@ export interface QuickFilterProps extends HTMLAttributes<HTMLDivElement>, Pick<F
14
14
  */
15
15
  showFind?: boolean | string[];
16
16
  }
17
- export declare const QuickFilters: ({ allowAddColumn, allowFind, availableColumns, onApplyFilter, onClearFilter, onChangeQuickFilterColumns, quickFilterColumns, vuuTable, }: QuickFilterProps) => import("react").JSX.Element;
17
+ export declare const QuickFilters: ({ allowAddColumn, allowFind, availableColumns, onApplyFilter, onClearFilter, onChangeQuickFilterColumns, quickFilterColumns, vuuTable, }: QuickFilterProps) => import("react/jsx-runtime").JSX.Element;
@@ -6,4 +6,4 @@ export interface DeleteFilterPromptProps extends Pick<PromptProps, "onConfirm" |
6
6
  columns?: ColumnDescriptor[];
7
7
  filterDescriptor: FilterContainerFilterDescriptor;
8
8
  }
9
- export declare const DeleteFilterPrompt: ({ children, className, columns, filterDescriptor, onClose, onConfirm, open, ...htmlAttributes }: DeleteFilterPromptProps) => import("react").JSX.Element;
9
+ export declare const DeleteFilterPrompt: ({ children, className, columns, filterDescriptor, onClose, onConfirm, open, ...htmlAttributes }: DeleteFilterPromptProps) => import("react/jsx-runtime").JSX.Element;
@@ -3,4 +3,4 @@ import { HTMLAttributes } from "react";
3
3
  import { FilterNamePromptHookProps } from "./useFilterNamePrompt";
4
4
  export interface FilterNamePromptProps extends FilterNamePromptHookProps, Pick<PromptProps, "onClose" | "open" | "title">, Omit<HTMLAttributes<HTMLDivElement>, "title"> {
5
5
  }
6
- export declare const FilterNamePrompt: ({ className, filterName, onClose, onConfirm: onConfirmProp, open, title, filterNameMaxLength, ...htmlAttributes }: FilterNamePromptProps) => import("react").JSX.Element;
6
+ export declare const FilterNamePrompt: ({ className, filterName, onClose, onConfirm: onConfirmProp, open, title, filterNameMaxLength, ...htmlAttributes }: FilterNamePromptProps) => import("react/jsx-runtime").JSX.Element;
@@ -11,4 +11,4 @@ export interface SavedFilterPanelProps extends HTMLAttributes<HTMLDivElement>, P
11
11
  availableColumns?: ColumnDescriptor[];
12
12
  filterPillPermissions?: FilterPermissions;
13
13
  }
14
- export declare const SavedFilterPanel: ({ availableColumns, className, filterPillPermissions, filterProviderKey, ...htmlAttributes }: SavedFilterPanelProps) => import("react").JSX.Element;
14
+ export declare const SavedFilterPanel: ({ availableColumns, className, filterPillPermissions, filterProviderKey, ...htmlAttributes }: SavedFilterPanelProps) => import("react/jsx-runtime").JSX.Element;
@@ -7,4 +7,4 @@ export interface TabbedFilterContainerProps extends HTMLAttributes<HTMLDivElemen
7
7
  filterTabLabel?: string;
8
8
  savedFilterLabel?: string;
9
9
  }
10
- export declare const TabbedFilterContainer: ({ SavedFilterPanelProps, children, className, filter, filterProviderKey, filterTabLabel, onFilterApplied, onFilterCleared, savedFilterLabel, ...htmlAttributes }: TabbedFilterContainerProps) => import("react").JSX.Element;
10
+ export declare const TabbedFilterContainer: ({ SavedFilterPanelProps, children, className, filter, filterProviderKey, filterTabLabel, onFilterApplied, onFilterCleared, savedFilterLabel, ...htmlAttributes }: TabbedFilterContainerProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,8 @@
1
1
  import { ToggleButtonGroupProps } from "@salt-ds/core";
2
2
  import { CommitHandler } from "@vuu-ui/vuu-utils";
3
3
  import { type ToggleFilterHookProps } from "./useToggleFilter";
4
+ export type ToggleFilterValue = string | number | boolean;
5
+ type Value = ToggleButtonGroupProps["value"];
4
6
  /**
5
7
  * ToggleFilter is designed to work with a FilterProvider and
6
8
  * DataSourceProvider. With a DataSourceProvider, values will
@@ -10,13 +12,24 @@ import { type ToggleFilterHookProps } from "./useToggleFilter";
10
12
  * values from dataSource.
11
13
  * With neither of these Providers available, the ToggleFilter is
12
14
  * behaving like a regular ToggleButtonGroup.
15
+ * Validation of values uses the typeahead service, which only supports
16
+ * string columns. It can be disabled with disableTypeahead and is always
17
+ * disabled for a non-string (e.g. boolean or numeric) column.
13
18
  */
14
- export interface ToggleFilterProps extends ToggleButtonGroupProps, ToggleFilterHookProps {
19
+ export interface ToggleFilterProps extends Omit<ToggleButtonGroupProps, "defaultValue" | "value">, Omit<ToggleFilterHookProps, "values"> {
20
+ defaultValue?: ToggleFilterValue | Value;
15
21
  /**
16
22
  * Optional labels for the toggle buttons. If provided, must contain
17
23
  * the same number of items as values. Defaults to values.
18
24
  */
19
25
  labels?: string[];
20
26
  onCommit: CommitHandler<HTMLElement>;
27
+ value?: ToggleFilterValue | Value;
28
+ /**
29
+ * Values for the toggle buttons. Boolean values are converted to
30
+ * strings internally, the original value is passed to onCommit.
31
+ */
32
+ values: ToggleFilterValue[];
21
33
  }
22
34
  export declare const ToggleFilter: import("react").ForwardRefExoticComponent<ToggleFilterProps & import("react").RefAttributes<HTMLDivElement>>;
35
+ export {};
@@ -1,6 +1,14 @@
1
1
  import type { TableSchemaTable } from "@vuu-ui/vuu-data-types";
2
2
  export interface ToggleFilterHookProps {
3
3
  column: string;
4
+ /**
5
+ * Typeahead is used to determine which toggle values have matching
6
+ * data. Set disableTypeahead to opt out of this check, all values
7
+ * will then be treated as available. Typeahead only supports string
8
+ * lookups, so it is always disabled if the serverDataType of column
9
+ * (from the DataSource tableSchema) is anything other than string.
10
+ */
11
+ disableTypeahead?: boolean;
4
12
  /**
5
13
  * table must be provided to enable validation
6
14
  * of values using server data.
@@ -26,4 +34,4 @@ export interface ToggleFilterHookResult {
26
34
  * and the result of the last check (if any) is retained. If there has
27
35
  * been no check, all values are assumed to possibly have data.
28
36
  */
29
- export declare const useToggleFilter: ({ column, table, values, }: ToggleFilterHookProps) => ToggleFilterHookResult;
37
+ export declare const useToggleFilter: ({ column, disableTypeahead, table, values, }: ToggleFilterHookProps) => ToggleFilterHookResult;
@@ -1,28 +0,0 @@
1
- import { ColumnFilterValue, ExtendedFilterOptions, FilterClauseOp, FilterContainerFilter } from "@vuu-ui/vuu-filter-types";
2
- import { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
3
- /**
4
- * Manages a filter that can be updated one clause at a time.
5
- * Works with FilterContainer to aggregate multiple filter
6
- * clauses edited via individual controls. It is just a wrapper
7
- * around a Map, does not support switching filters - create a
8
- * new FilterAggregator for a new filter.
9
- *
10
- */
11
- export declare class FilterAggregator {
12
- #private;
13
- constructor(filter?: FilterContainerFilter);
14
- add(column: ColumnDescriptor, value: ColumnFilterValue, op?: FilterClauseOp | "between" | "between-inclusive", extendedFilterOptions?: ExtendedFilterOptions): void;
15
- has({ name }: ColumnDescriptor): boolean;
16
- get({ name }: ColumnDescriptor): FilterContainerFilter | undefined;
17
- clear(): void;
18
- /**
19
- * Remove filter for this column. Return false if no filter found, otw true
20
- */
21
- remove(column: ColumnDescriptor): boolean;
22
- get isEmpty(): boolean;
23
- /**
24
- * Count of the number of columns for which filters are stored
25
- */
26
- get count(): number;
27
- get filter(): FilterContainerFilter | undefined;
28
- }
@@ -1,44 +0,0 @@
1
- import { Filter, FilterClause, FilterClauseOp, FilterCombinatorOp } from "@vuu-ui/vuu-filter-types";
2
- import { EventEmitter } from "@vuu-ui/vuu-utils";
3
- export type FilterStatusChangeHandler = (isValid: boolean) => void;
4
- export type FilterChangeHandler = (filter: Partial<Filter>, isValid: boolean) => void;
5
- export type FilterClauseChangeHandler = (filter: Partial<FilterClause>, isValid: boolean) => void;
6
- export type FilterClauseModelEvents = {
7
- filterClause: FilterClauseChangeHandler;
8
- isValid: FilterStatusChangeHandler;
9
- };
10
- export type FilterModelEvents = {
11
- filter: FilterChangeHandler;
12
- isValid: FilterStatusChangeHandler;
13
- };
14
- export declare class FilterClauseModel extends EventEmitter<FilterClauseModelEvents> {
15
- #private;
16
- constructor(filterClause: Partial<FilterClause>);
17
- get isValid(): boolean;
18
- private setIsValid;
19
- get column(): undefined | string;
20
- set column(column: undefined | string);
21
- get op(): "in" | import("@vuu-ui/vuu-filter-types").SingleValueFilterClauseOp | undefined;
22
- setOp(op: undefined | FilterClauseOp): void;
23
- setValue(value: undefined | string | string[] | number | number[] | boolean | boolean[], isFinal?: boolean): void;
24
- asFilter(throwIfInvalid?: boolean): FilterClause;
25
- commit(): void;
26
- }
27
- export declare class FilterModel extends EventEmitter<FilterModelEvents> {
28
- #private;
29
- constructor(filter?: Filter);
30
- get isValid(): boolean;
31
- private setIsValid;
32
- addNewFilterClause(operator?: FilterCombinatorOp): void;
33
- addFilterClause(filterClause?: Partial<FilterClause>): void;
34
- removeFilterClause(filterClause: FilterClauseModel): void;
35
- checkValidStatus(): void;
36
- onFilterClauseChange: FilterChangeHandler;
37
- onFilterClauseStatusChange: (isValid: boolean) => void;
38
- getFilterClause(index: number): FilterClauseModel;
39
- get op(): FilterCombinatorOp | undefined;
40
- setOp(op: FilterCombinatorOp): void;
41
- get filterClauses(): FilterClauseModel[];
42
- get isMultiClauseFilter(): boolean;
43
- asFilter(throwIfInvalid?: boolean): Filter;
44
- }
@@ -1,6 +0,0 @@
1
- import { type SegmentedButtonGroupProps } from "@salt-ds/core";
2
- import { DataItemEditControlProps } from "@vuu-ui/vuu-data-react";
3
- import { ColumnFilterHookProps } from "./useColumnFilter";
4
- export interface ColumnFilterProps extends ColumnFilterHookProps, Omit<SegmentedButtonGroupProps, "defaultValue">, Pick<DataItemEditControlProps, "TypeaheadProps" | "table" | "values" | "variant"> {
5
- }
6
- export declare const ColumnFilter: import("react").ForwardRefExoticComponent<ColumnFilterProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,43 +0,0 @@
1
- import { ColumnFilterChangeHandler, ColumnFilterCommitHandler, ColumnFilterOp, ColumnFilterValue, ExtendedFilterOptions } from "@vuu-ui/vuu-filter-types";
2
- import { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
3
- import { InputProps } from "@salt-ds/core";
4
- import { CommitHandler } from "@vuu-ui/vuu-utils";
5
- import { DataItemEditControlProps } from "@vuu-ui/vuu-data-react";
6
- export interface ColumnFilterHookProps extends Pick<DataItemEditControlProps, "InputProps"> {
7
- column: ColumnDescriptor;
8
- /**
9
- * Filter defaultValue. Pair of values expected when operator is
10
- * 'between'. If provided, component is uncontrolled
11
- */
12
- defaultValue?: ColumnFilterValue;
13
- /**
14
- * Provides for custom filters.
15
- */
16
- extendedFilterOptions?: ExtendedFilterOptions;
17
- /**
18
- * Filter change events.
19
- */
20
- onColumnFilterChange?: ColumnFilterChangeHandler;
21
- /**
22
- * Filter change events on second control in range filter
23
- */
24
- onColumnRangeFilterChange?: ColumnFilterChangeHandler;
25
- /**
26
- * Called when user 'commits' filter value, either by pressing enter,
27
- * tabbing away from control or making selection from list
28
- */
29
- onCommit: ColumnFilterCommitHandler;
30
- operator?: ColumnFilterOp;
31
- /**
32
- * Filter value. Pair of values expected when operator is
33
- * 'between'. If provided, component is controlled.
34
- */
35
- value?: ColumnFilterValue;
36
- }
37
- export declare const useColumnFilter: ({ InputProps: InputPropsProp, column, defaultValue, extendedFilterOptions, onColumnFilterChange, onColumnRangeFilterChange, onCommit, operator, value: valueProp, }: ColumnFilterHookProps) => {
38
- InputProps: InputProps;
39
- InputPropsRange: InputProps;
40
- isInvalid: boolean;
41
- onCommit: CommitHandler<HTMLElement>;
42
- onCommitRange: CommitHandler<HTMLElement>;
43
- };
@@ -1,4 +0,0 @@
1
- import { Filter } from "@vuu-ui/vuu-filter-types";
2
- export declare const isStartsWithValue: (value: string) => boolean;
3
- export declare const getTypeaheadFilter: (column: string, filterValues: string[], isStartsWithFilter?: boolean) => Filter | undefined;
4
- export declare const getRangeFilter: (column: string, startValue?: number, endValue?: number) => Filter | undefined;
@@ -1,7 +0,0 @@
1
- import type { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
2
- import { HTMLAttributes } from "react";
3
- import { type FilterBarProps } from "../filter-bar";
4
- export interface CustomFilterProps extends HTMLAttributes<HTMLDivElement>, Pick<FilterBarProps, "defaultFilterState" | "filterState" | "onApplyFilter" | "onClearFilter" | "onFilterDeleted" | "onFilterRenamed" | "onFilterStateChanged" | "vuuTable"> {
5
- columnDescriptors: readonly ColumnDescriptor[];
6
- }
7
- export declare const CustomFilters: ({ columnDescriptors, defaultFilterState, filterState, onApplyFilter, onClearFilter, onFilterDeleted, onFilterRenamed, onFilterStateChanged, vuuTable, }: CustomFilterProps) => import("react").JSX.Element;
@@ -1 +0,0 @@
1
- export declare const navigateToNextItem: (el: HTMLElement | EventTarget, direction?: "bwd" | "fwd") => void;
@@ -1 +0,0 @@
1
- export * from "./CustomFilters";
@@ -1,33 +0,0 @@
1
- import { ColumnDescriptorsByName, Filter } from "@vuu-ui/vuu-filter-types";
2
- import { PromptProps } from "@vuu-ui/vuu-ui-controls";
3
- import { KeyboardEventHandler, RefObject } from "react";
4
- import { FilterBarProps } from "../filter-bar";
5
- import { FilterEditCancelHandler, FilterEditSaveHandler } from "../filter-editor";
6
- import { FilterPillProps } from "../filter-pill";
7
- export type EditFilterState = "create" | "edit";
8
- export type FilterState = EditFilterState | "rename";
9
- export declare const isEditFilterState: (filterState?: string) => filterState is EditFilterState;
10
- type InteractedFilterState = {
11
- filter?: Filter;
12
- index: number;
13
- state: FilterState;
14
- };
15
- export interface CustomFilterHookProps extends Pick<FilterBarProps, "columnDescriptors" | "defaultFilterState" | "filterState" | "onApplyFilter" | "onClearFilter" | "onFilterDeleted" | "onFilterRenamed" | "onFilterStateChanged"> {
16
- containerRef: RefObject<HTMLDivElement | null>;
17
- }
18
- export declare const useCustomFilters: ({ columnDescriptors, containerRef, defaultFilterState, filterState, onApplyFilter, onClearFilter, onFilterDeleted, onFilterRenamed, onFilterStateChanged, }: CustomFilterHookProps) => {
19
- FilterPillProps: Omit<FilterPillProps, "filter" | "selected">;
20
- activeFilterIndex: number[];
21
- addButtonProps: {
22
- ref: RefObject<HTMLButtonElement | null>;
23
- onClick: () => void;
24
- onKeyDown: KeyboardEventHandler;
25
- };
26
- columnsByName: ColumnDescriptorsByName;
27
- filters: Filter[];
28
- interactedFilterState: InteractedFilterState | undefined;
29
- onCancelEdit: FilterEditCancelHandler;
30
- onSave: FilterEditSaveHandler;
31
- promptProps: PromptProps | null;
32
- };
33
- export {};