@vuu-ui/vuu-filters 0.13.37 → 0.13.38

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 (30) hide show
  1. package/cjs/column-filter/ColumnFilter.js +9 -13
  2. package/cjs/column-filter/ColumnFilter.js.map +1 -1
  3. package/cjs/column-filter/useColumnFilter.js +29 -57
  4. package/cjs/column-filter/useColumnFilter.js.map +1 -1
  5. package/cjs/index.js +0 -2
  6. package/cjs/index.js.map +1 -1
  7. package/esm/column-filter/ColumnFilter.js +11 -15
  8. package/esm/column-filter/ColumnFilter.js.map +1 -1
  9. package/esm/column-filter/useColumnFilter.js +30 -58
  10. package/esm/column-filter/useColumnFilter.js.map +1 -1
  11. package/esm/index.js +0 -1
  12. package/esm/index.js.map +1 -1
  13. package/package.json +11 -11
  14. package/types/column-filter/ColumnFilter.d.ts +1 -1
  15. package/types/column-filter/useColumnFilter.d.ts +9 -4
  16. package/types/index.d.ts +0 -1
  17. package/cjs/basic-column-filter/BasicColumnFilter.css.js +0 -6
  18. package/cjs/basic-column-filter/BasicColumnFilter.css.js.map +0 -1
  19. package/cjs/basic-column-filter/BasicColumnFilter.js +0 -61
  20. package/cjs/basic-column-filter/BasicColumnFilter.js.map +0 -1
  21. package/cjs/basic-column-filter/useBasicColumnFilter.js +0 -45
  22. package/cjs/basic-column-filter/useBasicColumnFilter.js.map +0 -1
  23. package/esm/basic-column-filter/BasicColumnFilter.css.js +0 -4
  24. package/esm/basic-column-filter/BasicColumnFilter.css.js.map +0 -1
  25. package/esm/basic-column-filter/BasicColumnFilter.js +0 -59
  26. package/esm/basic-column-filter/BasicColumnFilter.js.map +0 -1
  27. package/esm/basic-column-filter/useBasicColumnFilter.js +0 -43
  28. package/esm/basic-column-filter/useBasicColumnFilter.js.map +0 -1
  29. package/types/basic-column-filter/BasicColumnFilter.d.ts +0 -26
  30. package/types/basic-column-filter/useBasicColumnFilter.d.ts +0 -10
@@ -14,6 +14,7 @@ const classBase = "vuuColumnFilter";
14
14
  const ColumnFilter = react.forwardRef(function ColumnFilter2({
15
15
  column,
16
16
  className,
17
+ onCommit: onCommitProp,
17
18
  operator = "=",
18
19
  showOperatorPicker = false,
19
20
  table,
@@ -30,26 +31,18 @@ const ColumnFilter = react.forwardRef(function ColumnFilter2({
30
31
  const {
31
32
  op,
32
33
  allowedOperators,
33
- filterValue,
34
34
  inputProps,
35
35
  rangeInputProps,
36
36
  handleOperatorChange,
37
- handleCommit,
38
- handleRangeCommit
37
+ onCommit,
38
+ onCommitRange
39
39
  } = useColumnFilter.useColumnFilter({
40
+ onCommit: onCommitProp,
40
41
  operator,
41
42
  column,
42
43
  value,
43
44
  onColumnFilterChange
44
45
  });
45
- react.useMemo(
46
- () => useColumnFilter.assertValidOperator(allowedOperators, column, operator),
47
- [column, operator, allowedOperators]
48
- );
49
- react.useMemo(
50
- () => useColumnFilter.assertValidValue(column, op, filterValue),
51
- [column, op, filterValue]
52
- );
53
46
  return /* @__PURE__ */ jsxRuntime.jsxs(
54
47
  core.SegmentedButtonGroup,
55
48
  {
@@ -80,15 +73,18 @@ const ColumnFilter = react.forwardRef(function ColumnFilter2({
80
73
  ] }) : null,
81
74
  vuuDataReact.getDataItemEditControl({
82
75
  InputProps: { inputProps },
76
+ commitOnBlur: false,
77
+ commitWhenCleared: true,
83
78
  dataDescriptor: column,
84
- onCommit: handleCommit,
79
+ onCommit,
85
80
  table
86
81
  }),
87
82
  op === "between" ? vuuDataReact.getDataItemEditControl({
88
83
  className: `${classBase}-rangeHigh`,
84
+ commitWhenCleared: true,
89
85
  InputProps: { inputProps: rangeInputProps },
90
86
  dataDescriptor: column,
91
- onCommit: handleRangeCommit,
87
+ onCommit: onCommitRange,
92
88
  table
93
89
  }) : null
94
90
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/ColumnFilter.tsx"],"sourcesContent":["import {\n Button,\n Menu,\n MenuItem,\n MenuPanel,\n MenuTrigger,\n SegmentedButtonGroup,\n SegmentedButtonGroupProps,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport columnFilterCss from \"./ColumnFilter.css\";\nimport { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { ForwardedRef, forwardRef, ReactElement, useMemo } from \"react\";\nimport {\n assertValidOperator,\n assertValidValue,\n ColumnFilterHookProps,\n useColumnFilter,\n} from \"./useColumnFilter\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\n\nconst classBase = \"vuuColumnFilter\";\n\nexport interface ColumnFilterProps\n extends SegmentedButtonGroupProps,\n Pick<\n ColumnFilterHookProps,\n \"column\" | \"operator\" | \"value\" | \"onColumnFilterChange\"\n > {\n /**\n * Display operator picker.\n */\n showOperatorPicker?: boolean;\n /**\n * VuuTable is required if typeahead support is expected.\n */\n table?: VuuTable;\n}\n\nexport const ColumnFilter = forwardRef(function ColumnFilter(\n {\n column,\n className,\n operator = \"=\",\n showOperatorPicker = false,\n table,\n value,\n onColumnFilterChange,\n ...buttonGroupProps\n }: ColumnFilterProps,\n forwardRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-filter\",\n css: columnFilterCss,\n window: targetWindow,\n });\n\n const {\n op,\n allowedOperators,\n filterValue,\n inputProps,\n rangeInputProps,\n handleOperatorChange,\n handleCommit,\n handleRangeCommit,\n } = useColumnFilter({\n operator,\n column,\n value,\n onColumnFilterChange,\n });\n\n useMemo(\n () => assertValidOperator(allowedOperators, column, operator),\n [column, operator, allowedOperators],\n );\n\n useMemo(\n () => assertValidValue(column, op, filterValue),\n [column, op, filterValue],\n );\n\n return (\n <SegmentedButtonGroup\n {...buttonGroupProps}\n className={cx(classBase, className)}\n ref={forwardRef}\n >\n {showOperatorPicker ? (\n <Menu placement=\"bottom-start\">\n <MenuTrigger>\n <Button\n appearance=\"solid\"\n aria-label=\"Open Menu\"\n className={`${classBase}-trigger`}\n data-embedded\n sentiment=\"neutral\"\n >\n {op}\n </Button>\n </MenuTrigger>\n <MenuPanel>\n {allowedOperators.map((allowedOp) => (\n <MenuItem\n key={`allowedOp`}\n onClick={() => handleOperatorChange(allowedOp)}\n >\n {allowedOp}\n </MenuItem>\n ))}\n </MenuPanel>\n </Menu>\n ) : null}\n {getDataItemEditControl({\n InputProps: { inputProps },\n dataDescriptor: column,\n onCommit: handleCommit,\n table,\n })}\n {op === \"between\"\n ? getDataItemEditControl({\n className: `${classBase}-rangeHigh`,\n InputProps: { inputProps: rangeInputProps },\n dataDescriptor: column,\n onCommit: handleRangeCommit,\n table,\n })\n : null}\n </SegmentedButtonGroup>\n );\n}) as (\n props: ColumnFilterProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement<ColumnFilterProps>;\n"],"names":["forwardRef","ColumnFilter","useWindow","useComponentCssInjection","columnFilterCss","useColumnFilter","useMemo","assertValidOperator","assertValidValue","jsxs","SegmentedButtonGroup","Menu","jsx","MenuTrigger","Button","MenuPanel","MenuItem","getDataItemEditControl"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/ColumnFilter.tsx"],"sourcesContent":["import {\n Button,\n Menu,\n MenuItem,\n MenuPanel,\n MenuTrigger,\n SegmentedButtonGroup,\n SegmentedButtonGroupProps,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport columnFilterCss from \"./ColumnFilter.css\";\nimport { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { ForwardedRef, forwardRef, ReactElement } from \"react\";\nimport { ColumnFilterHookProps, useColumnFilter } from \"./useColumnFilter\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\n\nconst classBase = \"vuuColumnFilter\";\n\nexport interface ColumnFilterProps\n extends SegmentedButtonGroupProps,\n ColumnFilterHookProps {\n /**\n * Display operator picker.\n */\n showOperatorPicker?: boolean;\n /**\n * VuuTable is required if typeahead support is expected.\n */\n table?: VuuTable;\n}\n\nexport const ColumnFilter = forwardRef(function ColumnFilter(\n {\n column,\n className,\n onCommit: onCommitProp,\n operator = \"=\",\n showOperatorPicker = false,\n table,\n value,\n onColumnFilterChange,\n ...buttonGroupProps\n }: ColumnFilterProps,\n forwardRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-filter\",\n css: columnFilterCss,\n window: targetWindow,\n });\n\n const {\n op,\n allowedOperators,\n inputProps,\n rangeInputProps,\n handleOperatorChange,\n onCommit,\n onCommitRange,\n } = useColumnFilter({\n onCommit: onCommitProp,\n operator,\n column,\n value,\n onColumnFilterChange,\n });\n\n return (\n <SegmentedButtonGroup\n {...buttonGroupProps}\n className={cx(classBase, className)}\n ref={forwardRef}\n >\n {showOperatorPicker ? (\n <Menu placement=\"bottom-start\">\n <MenuTrigger>\n <Button\n appearance=\"solid\"\n aria-label=\"Open Menu\"\n className={`${classBase}-trigger`}\n data-embedded\n sentiment=\"neutral\"\n >\n {op}\n </Button>\n </MenuTrigger>\n <MenuPanel>\n {allowedOperators.map((allowedOp) => (\n <MenuItem\n key={`allowedOp`}\n onClick={() => handleOperatorChange(allowedOp)}\n >\n {allowedOp}\n </MenuItem>\n ))}\n </MenuPanel>\n </Menu>\n ) : null}\n {getDataItemEditControl({\n InputProps: { inputProps },\n commitOnBlur: false,\n commitWhenCleared: true,\n dataDescriptor: column,\n onCommit,\n table,\n })}\n {op === \"between\"\n ? getDataItemEditControl({\n className: `${classBase}-rangeHigh`,\n commitWhenCleared: true,\n InputProps: { inputProps: rangeInputProps },\n dataDescriptor: column,\n onCommit: onCommitRange,\n table,\n })\n : null}\n </SegmentedButtonGroup>\n );\n}) as (\n props: ColumnFilterProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement<ColumnFilterProps>;\n"],"names":["forwardRef","ColumnFilter","useWindow","useComponentCssInjection","columnFilterCss","useColumnFilter","jsxs","SegmentedButtonGroup","Menu","jsx","MenuTrigger","Button","MenuPanel","MenuItem","getDataItemEditControl"],"mappings":";;;;;;;;;;;;AAmBA,MAAM,SAAY,GAAA,iBAAA;AAeL,MAAA,YAAA,GAAeA,gBAAW,CAAA,SAASC,aAC9C,CAAA;AAAA,EACE,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAU,EAAA,YAAA;AAAA,EACV,QAAW,GAAA,GAAA;AAAA,EACX,kBAAqB,GAAA,KAAA;AAAA,EACrB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,oBAAA;AAAA,EACA,GAAG;AACL,CAAA,EACAD,WACA,EAAA;AACA,EAAA,MAAM,eAAeE,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAAC,cAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,EAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,oBAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,MACEC,+BAAgB,CAAA;AAAA,IAClB,QAAU,EAAA,YAAA;AAAA,IACV,QAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAAC,eAAA;AAAA,IAACC,yBAAA;AAAA,IAAA;AAAA,MACE,GAAG,gBAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAKP,EAAAA,WAAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,QACC,kBAAA,mBAAAM,eAAA,CAACE,SAAK,EAAA,EAAA,SAAA,EAAU,cACd,EAAA,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAACC,gBACC,EAAA,EAAA,QAAA,kBAAAD,cAAA;AAAA,YAACE,WAAA;AAAA,YAAA;AAAA,cACC,UAAW,EAAA,OAAA;AAAA,cACX,YAAW,EAAA,WAAA;AAAA,cACX,SAAA,EAAW,GAAG,SAAS,CAAA,QAAA,CAAA;AAAA,cACvB,eAAa,EAAA,IAAA;AAAA,cACb,SAAU,EAAA,SAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WAEL,EAAA,CAAA;AAAA,0BACCF,cAAA,CAAAG,cAAA,EAAA,EACE,QAAiB,EAAA,gBAAA,CAAA,GAAA,CAAI,CAAC,SACrB,qBAAAH,cAAA;AAAA,YAACI,aAAA;AAAA,YAAA;AAAA,cAEC,OAAA,EAAS,MAAM,oBAAA,CAAqB,SAAS,CAAA;AAAA,cAE5C,QAAA,EAAA;AAAA,aAAA;AAAA,YAHI,CAAA,SAAA;AAAA,WAKR,CACH,EAAA;AAAA,SAAA,EACF,CACE,GAAA,IAAA;AAAA,QACHC,mCAAuB,CAAA;AAAA,UACtB,UAAA,EAAY,EAAE,UAAW,EAAA;AAAA,UACzB,YAAc,EAAA,KAAA;AAAA,UACd,iBAAmB,EAAA,IAAA;AAAA,UACnB,cAAgB,EAAA,MAAA;AAAA,UAChB,QAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,QACA,EAAA,KAAO,YACJA,mCAAuB,CAAA;AAAA,UACrB,SAAA,EAAW,GAAG,SAAS,CAAA,UAAA,CAAA;AAAA,UACvB,iBAAmB,EAAA,IAAA;AAAA,UACnB,UAAA,EAAY,EAAE,UAAA,EAAY,eAAgB,EAAA;AAAA,UAC1C,cAAgB,EAAA,MAAA;AAAA,UAChB,QAAU,EAAA,aAAA;AAAA,UACV;AAAA,SACD,CACD,GAAA;AAAA;AAAA;AAAA,GACN;AAEJ,CAAC;;;;"}
@@ -5,7 +5,7 @@ var vuuUtils = require('@vuu-ui/vuu-utils');
5
5
  var operatorUtils = require('../filter-clause/operator-utils.js');
6
6
 
7
7
  const assertValidOperator = (allowedOperators, column, op) => {
8
- if (!allowedOperators.find((filterClauseOp) => filterClauseOp === op) && !(op === "between")) {
8
+ if (op !== "between" && !allowedOperators.includes(op)) {
9
9
  console.warn(
10
10
  `[useColumnFilter] '${op} not supported for column ${column.name}'`
11
11
  );
@@ -14,15 +14,11 @@ const assertValidOperator = (allowedOperators, column, op) => {
14
14
  const assertValidValue = ({ serverDataType: _ }, operator, value) => {
15
15
  if (value !== void 0) {
16
16
  if (operator === "between") {
17
- if (!Array.isArray(value)) {
17
+ if (!Array.isArray(value) || value.length !== 2) {
18
18
  throw Error(
19
- "[useColumnFilter] 'between operator requires array of two values'"
19
+ `[useColumnFilter] between operator requires array of two values, received ${value}`
20
20
  );
21
- } else if (value.length !== 2) {
22
- throw Error(
23
- `[useColumnFilter] 'between operator requires two values, received ${value}'`
24
- );
25
- } else if (value[0] && value[1] && typeof value[0] !== typeof value[1]) {
21
+ } else if (value[0] !== void 0 && value[1] !== void 0 && typeof value[0] !== typeof value[1]) {
26
22
  throw Error(
27
23
  `[useColumnFilter] 'between operator values must be of same type, received ${typeof value[0]} and ${typeof value[1]}`
28
24
  );
@@ -31,98 +27,74 @@ const assertValidValue = ({ serverDataType: _ }, operator, value) => {
31
27
  }
32
28
  };
33
29
  const useColumnFilter = ({
30
+ onCommit,
34
31
  operator = "=",
35
32
  value,
36
33
  column,
37
34
  onColumnFilterChange
38
35
  }) => {
39
- const getDefaultValue = (op2) => op2 === "between" ? ["", ""] : "";
40
- const filterValue = react.useRef(value ?? getDefaultValue(operator));
41
36
  const [op, setOp] = react.useState(operator);
42
37
  const allowedOperators = react.useMemo(() => operatorUtils.getOperators(column), [column]);
43
38
  react.useMemo(() => {
44
- if (value && value !== filterValue.current) {
45
- filterValue.current = value;
46
- setTimeout(() => {
47
- onColumnFilterChange?.(value, column, op);
48
- }, 100);
49
- }
50
- }, [value, column, op, onColumnFilterChange]);
39
+ assertValidOperator(allowedOperators, column, operator);
40
+ assertValidValue(column, op, value);
41
+ }, [allowedOperators, column, operator, op, value]);
51
42
  const handleOperatorChange = react.useCallback((changedOp) => {
52
43
  setOp(changedOp);
53
44
  }, []);
54
45
  const handleCommit = react.useCallback(
55
- (e, newValue) => {
56
- console.log(`[useColumnFilter] handleCommit ${newValue}`);
57
- if (Array.isArray(filterValue.current)) {
58
- filterValue.current = [newValue.toString(), filterValue.current[1]];
59
- if (filterValue.current && (filterValue.current[0] === void 0 || filterValue.current[1] === void 0)) {
60
- console.info(
61
- "Range start or end value missing - ignoring onFilterChange"
62
- );
63
- }
46
+ (_e, newValue) => {
47
+ if (Array.isArray(value)) {
48
+ onCommit?.(column, op, [`${newValue}`, value[1]]);
64
49
  } else {
65
- filterValue.current = newValue;
50
+ onCommit?.(column, op, `${newValue}`);
66
51
  }
67
- onColumnFilterChange?.(filterValue.current, column, op);
68
52
  },
69
- [op, column, onColumnFilterChange]
53
+ [value, onCommit, column, op]
70
54
  );
71
55
  const handleRangeCommit = react.useCallback(
72
- (e, newValue) => {
73
- if (Array.isArray(filterValue.current)) {
74
- filterValue.current = [filterValue.current[0], newValue.toString()];
75
- if (filterValue.current && (filterValue.current[0] === void 0 || filterValue.current[1] === void 0)) {
76
- console.info(
77
- "Range start or end value missing - ignoring onFilterChange"
78
- );
79
- }
80
- } else {
81
- filterValue.current = newValue;
82
- }
83
- onColumnFilterChange?.(filterValue.current, column, op);
56
+ (_e, newValue) => {
57
+ const [firstValue] = value;
58
+ onCommit?.(column, op, [firstValue, `${newValue}`]);
84
59
  },
85
- [op, column, onColumnFilterChange]
60
+ [onCommit, column, op, value]
86
61
  );
87
62
  const handleInputChange = react.useCallback(
88
63
  (e) => {
89
- if (Array.isArray(filterValue.current)) {
64
+ if (Array.isArray(value)) {
90
65
  const editControl = vuuUtils.queryClosest(e.target, "[data-edit-control]", true);
91
66
  const updated = [
92
- !editControl.className?.includes("rangeHigh") ? e.target.value : filterValue.current[0],
93
- editControl.className?.includes("rangeHigh") ? e.target.value : filterValue.current[1]
67
+ !editControl.className.includes("rangeHigh") ? e.target.value : value[0],
68
+ editControl.className?.includes("rangeHigh") ? e.target.value : value[1]
94
69
  ];
95
- filterValue.current = updated;
96
70
  onColumnFilterChange?.(updated, column, op);
97
71
  } else {
98
- filterValue.current = e.target.value;
99
72
  onColumnFilterChange?.(e.target.value, column, op);
100
73
  }
101
74
  },
102
- [op, column, onColumnFilterChange]
75
+ [value, onColumnFilterChange, column, op]
103
76
  );
104
77
  const inputProps = react.useMemo(
105
78
  () => ({
106
79
  onChange: handleInputChange,
107
- value: Array.isArray(filterValue.current) ? filterValue.current[0] : filterValue.current
80
+ value: Array.isArray(value) ? value[0] : value
108
81
  }),
109
- [handleInputChange]
82
+ [handleInputChange, value]
110
83
  );
111
84
  const rangeInputProps = react.useMemo(
112
- () => ({
85
+ () => Array.isArray(value) ? {
113
86
  onChange: handleInputChange,
114
- value: Array.isArray(filterValue.current) ? filterValue.current[1] : filterValue.current
115
- }),
116
- [handleInputChange]
87
+ value: value[1]
88
+ } : void 0,
89
+ [handleInputChange, value]
117
90
  );
118
91
  return {
119
92
  op,
120
93
  allowedOperators,
121
- filterValue: filterValue.current,
122
94
  inputProps,
123
95
  rangeInputProps,
124
- handleCommit,
125
- handleRangeCommit,
96
+ onCommit: handleCommit,
97
+ onCommitRange: handleRangeCommit,
126
98
  handleOperatorChange
127
99
  };
128
100
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/useColumnFilter.ts"],"sourcesContent":["import {\n ColumnFilterChangeHandler,\n ColumnFilterOp,\n ColumnFilterValue,\n FilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n ChangeEventHandler,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { CommitHandler, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { VuuTypeaheadInputProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { getOperators } from \"../filter-clause/operator-utils\";\n\nexport const assertValidOperator = (\n allowedOperators: FilterClauseOp[],\n column: ColumnDescriptor,\n op: ColumnFilterOp,\n) => {\n if (\n !allowedOperators.find((filterClauseOp) => filterClauseOp === op) &&\n !(op === \"between\")\n ) {\n console.warn(\n `[useColumnFilter] '${op} not supported for column ${column.name}'`,\n );\n }\n};\n\nexport const assertValidValue = (\n { serverDataType: _ }: ColumnDescriptor,\n operator: ColumnFilterOp,\n value?: ColumnFilterValue,\n) => {\n if (value !== undefined) {\n if (operator === \"between\") {\n if (!Array.isArray(value)) {\n throw Error(\n \"[useColumnFilter] 'between operator requires array of two values'\",\n );\n } else if (value.length !== 2) {\n throw Error(\n `[useColumnFilter] 'between operator requires two values, received ${value}'`,\n );\n } else if (value[0] && value[1] && typeof value[0] !== typeof value[1]) {\n throw Error(\n `[useColumnFilter] 'between operator values must be of same type, received ${typeof value[0]} and ${typeof value[1]}`,\n );\n }\n }\n // TODO validate value(s) against serverDataType\n }\n};\n\nexport type ColumnFilterHookProps = {\n column: ColumnDescriptor;\n operator?: ColumnFilterOp;\n /**\n * Filter value. Pair of values expected when operator is\n * 'between'\n */\n value?: ColumnFilterValue;\n /**\n * Filter change events.\n */\n onColumnFilterChange?: ColumnFilterChangeHandler;\n};\n\nexport const useColumnFilter = ({\n operator = \"=\",\n value,\n column,\n onColumnFilterChange,\n}: ColumnFilterHookProps) => {\n const getDefaultValue = (op: ColumnFilterOp): ColumnFilterValue =>\n op === \"between\" ? [\"\", \"\"] : \"\";\n const filterValue = useRef(value ?? getDefaultValue(operator));\n const [op, setOp] = useState(operator);\n const allowedOperators = useMemo(() => getOperators(column), [column]);\n\n useMemo(() => {\n if (value && value !== filterValue.current) {\n filterValue.current = value;\n setTimeout(() => {\n onColumnFilterChange?.(value, column, op);\n }, 100);\n }\n }, [value, column, op, onColumnFilterChange]);\n\n const handleOperatorChange = useCallback((changedOp: ColumnFilterOp) => {\n setOp(changedOp);\n }, []);\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (e, newValue) => {\n console.log(`[useColumnFilter] handleCommit ${newValue}`);\n if (Array.isArray(filterValue.current)) {\n filterValue.current = [newValue.toString(), filterValue.current[1]];\n if (\n filterValue.current &&\n (filterValue.current[0] === undefined ||\n filterValue.current[1] === undefined)\n ) {\n console.info(\n \"Range start or end value missing - ignoring onFilterChange\",\n );\n }\n } else {\n filterValue.current = newValue as ColumnFilterValue;\n }\n onColumnFilterChange?.(filterValue.current, column, op);\n },\n [op, column, onColumnFilterChange],\n );\n\n const handleRangeCommit = useCallback<CommitHandler<HTMLElement>>(\n (e, newValue) => {\n if (Array.isArray(filterValue.current)) {\n filterValue.current = [filterValue.current[0], newValue.toString()];\n if (\n filterValue.current &&\n (filterValue.current[0] === undefined ||\n filterValue.current[1] === undefined)\n ) {\n console.info(\n \"Range start or end value missing - ignoring onFilterChange\",\n );\n }\n } else {\n filterValue.current = newValue as ColumnFilterValue;\n }\n onColumnFilterChange?.(filterValue.current, column, op);\n },\n [op, column, onColumnFilterChange],\n );\n\n const handleInputChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n if (Array.isArray(filterValue.current)) {\n const editControl = queryClosest(e.target, \"[data-edit-control]\", true);\n const updated: ColumnFilterValue = [\n !editControl.className?.includes(\"rangeHigh\")\n ? e.target.value\n : filterValue.current[0],\n editControl.className?.includes(\"rangeHigh\")\n ? e.target.value\n : filterValue.current[1],\n ];\n filterValue.current = updated;\n onColumnFilterChange?.(updated, column, op);\n } else {\n filterValue.current = e.target.value;\n onColumnFilterChange?.(e.target.value, column, op);\n }\n },\n [op, column, onColumnFilterChange],\n );\n\n const inputProps = useMemo<VuuTypeaheadInputProps[\"inputProps\"]>(\n () => ({\n onChange: handleInputChange,\n value: Array.isArray(filterValue.current)\n ? filterValue.current[0]\n : filterValue.current,\n }),\n [handleInputChange],\n );\n\n const rangeInputProps = useMemo<VuuTypeaheadInputProps[\"inputProps\"]>(\n () => ({\n onChange: handleInputChange,\n value: Array.isArray(filterValue.current)\n ? filterValue.current[1]\n : filterValue.current,\n }),\n [handleInputChange],\n );\n\n return {\n op,\n allowedOperators,\n filterValue: filterValue.current,\n inputProps,\n rangeInputProps,\n handleCommit,\n handleRangeCommit,\n handleOperatorChange,\n };\n};\n"],"names":["op","useRef","useState","useMemo","getOperators","useCallback","queryClosest"],"mappings":"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"}
1
+ {"version":3,"file":"useColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/useColumnFilter.ts"],"sourcesContent":["import {\n ColumnFilterChangeHandler,\n ColumnFilterOp,\n ColumnFilterValue,\n FilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { ChangeEventHandler, useCallback, useMemo, useState } from \"react\";\nimport { CommitHandler, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { VuuTypeaheadInputProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { getOperators } from \"../filter-clause/operator-utils\";\n\nexport const assertValidOperator = (\n allowedOperators: FilterClauseOp[],\n column: ColumnDescriptor,\n op: ColumnFilterOp,\n) => {\n if (op !== \"between\" && !allowedOperators.includes(op)) {\n console.warn(\n `[useColumnFilter] '${op} not supported for column ${column.name}'`,\n );\n }\n};\n\nexport type ColumnFilterCommitHandler = (\n column: ColumnDescriptor,\n op: FilterClauseOp | \"between\",\n value: ColumnFilterValue,\n) => void;\n\nexport const assertValidValue = (\n { serverDataType: _ }: ColumnDescriptor,\n operator: ColumnFilterOp,\n value?: ColumnFilterValue,\n) => {\n if (value !== undefined) {\n if (operator === \"between\") {\n if (!Array.isArray(value) || value.length !== 2) {\n throw Error(\n `[useColumnFilter] between operator requires array of two values, received ${value}`,\n );\n } else if (\n value[0] !== undefined &&\n value[1] !== undefined &&\n typeof value[0] !== typeof value[1]\n ) {\n throw Error(\n `[useColumnFilter] 'between operator values must be of same type, received ${typeof value[0]} and ${typeof value[1]}`,\n );\n }\n }\n // TODO validate value(s) against serverDataType\n }\n};\n\nexport type ColumnFilterHookProps = {\n column: ColumnDescriptor;\n operator?: ColumnFilterOp;\n /**\n * Filter value. Pair of values expected when operator is\n * 'between'\n */\n value?: ColumnFilterValue;\n /**\n * Filter change events.\n */\n onColumnFilterChange?: ColumnFilterChangeHandler;\n /**\n * Called when user 'commits' filter value, either by pressing enter,\n * tabbing away from control or making selection from list\n */\n onCommit: ColumnFilterCommitHandler;\n};\n\nexport const useColumnFilter = ({\n onCommit,\n operator = \"=\",\n value,\n column,\n onColumnFilterChange,\n}: ColumnFilterHookProps) => {\n const [op, setOp] = useState(operator);\n const allowedOperators = useMemo(() => getOperators(column), [column]);\n\n useMemo(() => {\n assertValidOperator(allowedOperators, column, operator);\n assertValidValue(column, op, value);\n }, [allowedOperators, column, operator, op, value]);\n\n const handleOperatorChange = useCallback((changedOp: ColumnFilterOp) => {\n setOp(changedOp);\n }, []);\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (_e, newValue) => {\n if (Array.isArray(value)) {\n onCommit?.(column, op, [`${newValue}`, value[1]]);\n } else {\n onCommit?.(column, op, `${newValue}`);\n }\n },\n [value, onCommit, column, op],\n );\n\n const handleRangeCommit = useCallback<CommitHandler<HTMLElement>>(\n (_e, newValue) => {\n const [firstValue] = value as [string, string];\n onCommit?.(column, op, [firstValue, `${newValue}`]);\n },\n [onCommit, column, op, value],\n );\n\n const handleInputChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n if (Array.isArray(value)) {\n const editControl = queryClosest(e.target, \"[data-edit-control]\", true);\n const updated: ColumnFilterValue = [\n !editControl.className.includes(\"rangeHigh\")\n ? e.target.value\n : value[0],\n editControl.className?.includes(\"rangeHigh\")\n ? e.target.value\n : value[1],\n ];\n onColumnFilterChange?.(updated, column, op);\n } else {\n onColumnFilterChange?.(e.target.value, column, op);\n }\n },\n [value, onColumnFilterChange, column, op],\n );\n\n const inputProps = useMemo<VuuTypeaheadInputProps[\"inputProps\"]>(\n () => ({\n onChange: handleInputChange,\n value: Array.isArray(value) ? value[0] : value,\n }),\n [handleInputChange, value],\n );\n\n const rangeInputProps = useMemo<VuuTypeaheadInputProps[\"inputProps\"]>(\n () =>\n Array.isArray(value)\n ? {\n onChange: handleInputChange,\n value: value[1],\n }\n : undefined,\n [handleInputChange, value],\n );\n\n return {\n op,\n allowedOperators,\n inputProps,\n rangeInputProps,\n onCommit: handleCommit,\n onCommitRange: handleRangeCommit,\n handleOperatorChange,\n };\n};\n"],"names":["useState","useMemo","getOperators","useCallback","queryClosest"],"mappings":";;;;;;AAYO,MAAM,mBAAsB,GAAA,CACjC,gBACA,EAAA,MAAA,EACA,EACG,KAAA;AACH,EAAA,IAAI,OAAO,SAAa,IAAA,CAAC,gBAAiB,CAAA,QAAA,CAAS,EAAE,CAAG,EAAA;AACtD,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN,CAAsB,mBAAA,EAAA,EAAE,CAA6B,0BAAA,EAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA,KAClE;AAAA;AAEJ;AAQO,MAAM,mBAAmB,CAC9B,EAAE,gBAAgB,CAAE,EAAA,EACpB,UACA,KACG,KAAA;AACH,EAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,IAAA,IAAI,aAAa,SAAW,EAAA;AAC1B,MAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAK,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AAC/C,QAAM,MAAA,KAAA;AAAA,UACJ,6EAA6E,KAAK,CAAA;AAAA,SACpF;AAAA,iBAEA,KAAM,CAAA,CAAC,CAAM,KAAA,KAAA,CAAA,IACb,MAAM,CAAC,CAAA,KAAM,KACb,CAAA,IAAA,OAAO,MAAM,CAAC,CAAA,KAAM,OAAO,KAAA,CAAM,CAAC,CAClC,EAAA;AACA,QAAM,MAAA,KAAA;AAAA,UACJ,CAAA,0EAAA,EAA6E,OAAO,KAAM,CAAA,CAAC,CAAC,CAAQ,KAAA,EAAA,OAAO,KAAM,CAAA,CAAC,CAAC,CAAA;AAAA,SACrH;AAAA;AACF;AACF;AAGJ;AAqBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,QAAA;AAAA,EACA,QAAW,GAAA,GAAA;AAAA,EACX,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAA6B,KAAA;AAC3B,EAAA,MAAM,CAAC,EAAA,EAAI,KAAK,CAAA,GAAIA,eAAS,QAAQ,CAAA;AACrC,EAAM,MAAA,gBAAA,GAAmBC,cAAQ,MAAMC,0BAAA,CAAa,MAAM,CAAG,EAAA,CAAC,MAAM,CAAC,CAAA;AAErE,EAAAD,aAAA,CAAQ,MAAM;AACZ,IAAoB,mBAAA,CAAA,gBAAA,EAAkB,QAAQ,QAAQ,CAAA;AACtD,IAAiB,gBAAA,CAAA,MAAA,EAAQ,IAAI,KAAK,CAAA;AAAA,KACjC,CAAC,gBAAA,EAAkB,QAAQ,QAAU,EAAA,EAAA,EAAI,KAAK,CAAC,CAAA;AAElD,EAAM,MAAA,oBAAA,GAAuBE,iBAAY,CAAA,CAAC,SAA8B,KAAA;AACtE,IAAA,KAAA,CAAM,SAAS,CAAA;AAAA,GACjB,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAe,GAAAA,iBAAA;AAAA,IACnB,CAAC,IAAI,QAAa,KAAA;AAChB,MAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACxB,QAAW,QAAA,GAAA,MAAA,EAAQ,IAAI,CAAC,CAAA,EAAG,QAAQ,CAAI,CAAA,EAAA,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAAA,OAC3C,MAAA;AACL,QAAA,QAAA,GAAW,MAAQ,EAAA,EAAA,EAAI,CAAG,EAAA,QAAQ,CAAE,CAAA,CAAA;AAAA;AACtC,KACF;AAAA,IACA,CAAC,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,EAAE;AAAA,GAC9B;AAEA,EAAA,MAAM,iBAAoB,GAAAA,iBAAA;AAAA,IACxB,CAAC,IAAI,QAAa,KAAA;AAChB,MAAM,MAAA,CAAC,UAAU,CAAI,GAAA,KAAA;AACrB,MAAA,QAAA,GAAW,QAAQ,EAAI,EAAA,CAAC,YAAY,CAAG,EAAA,QAAQ,EAAE,CAAC,CAAA;AAAA,KACpD;AAAA,IACA,CAAC,QAAA,EAAU,MAAQ,EAAA,EAAA,EAAI,KAAK;AAAA,GAC9B;AAEA,EAAA,MAAM,iBAAoB,GAAAA,iBAAA;AAAA,IACxB,CAAC,CAAM,KAAA;AACL,MAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACxB,QAAA,MAAM,WAAc,GAAAC,qBAAA,CAAa,CAAE,CAAA,MAAA,EAAQ,uBAAuB,IAAI,CAAA;AACtE,QAAA,MAAM,OAA6B,GAAA;AAAA,UACjC,CAAC,WAAY,CAAA,SAAA,CAAU,QAAS,CAAA,WAAW,IACvC,CAAE,CAAA,MAAA,CAAO,KACT,GAAA,KAAA,CAAM,CAAC,CAAA;AAAA,UACX,WAAA,CAAY,WAAW,QAAS,CAAA,WAAW,IACvC,CAAE,CAAA,MAAA,CAAO,KACT,GAAA,KAAA,CAAM,CAAC;AAAA,SACb;AACA,QAAuB,oBAAA,GAAA,OAAA,EAAS,QAAQ,EAAE,CAAA;AAAA,OACrC,MAAA;AACL,QAAA,oBAAA,GAAuB,CAAE,CAAA,MAAA,CAAO,KAAO,EAAA,MAAA,EAAQ,EAAE,CAAA;AAAA;AACnD,KACF;AAAA,IACA,CAAC,KAAA,EAAO,oBAAsB,EAAA,MAAA,EAAQ,EAAE;AAAA,GAC1C;AAEA,EAAA,MAAM,UAAa,GAAAH,aAAA;AAAA,IACjB,OAAO;AAAA,MACL,QAAU,EAAA,iBAAA;AAAA,MACV,OAAO,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAI,GAAA,KAAA,CAAM,CAAC,CAAI,GAAA;AAAA,KAC3C,CAAA;AAAA,IACA,CAAC,mBAAmB,KAAK;AAAA,GAC3B;AAEA,EAAA,MAAM,eAAkB,GAAAA,aAAA;AAAA,IACtB,MACE,KAAA,CAAM,OAAQ,CAAA,KAAK,CACf,GAAA;AAAA,MACE,QAAU,EAAA,iBAAA;AAAA,MACV,KAAA,EAAO,MAAM,CAAC;AAAA,KAEhB,GAAA,KAAA,CAAA;AAAA,IACN,CAAC,mBAAmB,KAAK;AAAA,GAC3B;AAEA,EAAO,OAAA;AAAA,IACL,EAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,aAAe,EAAA,iBAAA;AAAA,IACf;AAAA,GACF;AACF;;;;;;"}
package/cjs/index.js CHANGED
@@ -14,7 +14,6 @@ var filterUtils = require('./filter-utils.js');
14
14
  var FilterModel = require('./FilterModel.js');
15
15
  var InlineFilter = require('./inline-filter/InlineFilter.js');
16
16
  var QuickFilters = require('./quick-filters/QuickFilters.js');
17
- var BasicColumnFilter = require('./basic-column-filter/BasicColumnFilter.js');
18
17
  var SavedFilterPanel = require('./saved-filters/SavedFilterPanel.js');
19
18
  var FilterNamePrompt = require('./saved-filters/FilterNamePrompt.js');
20
19
 
@@ -56,7 +55,6 @@ exports.FilterClauseModel = FilterModel.FilterClauseModel;
56
55
  exports.FilterModel = FilterModel.FilterModel;
57
56
  exports.InlineFilter = InlineFilter.InlineFilter;
58
57
  exports.QuickFilters = QuickFilters.QuickFilters;
59
- exports.BasicColumnFilter = BasicColumnFilter.BasicColumnFilter;
60
58
  exports.SavedFilterPanel = SavedFilterPanel.SavedFilterPanel;
61
59
  exports.SaveFilterConfirmPrompt = FilterNamePrompt.FilterNamePrompt;
62
60
  //# sourceMappingURL=index.js.map
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,13 +5,14 @@ import { useWindow } from '@salt-ds/window';
5
5
  import cx from 'clsx';
6
6
  import columnFilterCss from './ColumnFilter.css.js';
7
7
  import { getDataItemEditControl } from '@vuu-ui/vuu-data-react';
8
- import { forwardRef, useMemo } from 'react';
9
- import { useColumnFilter, assertValidOperator, assertValidValue } from './useColumnFilter.js';
8
+ import { forwardRef } from 'react';
9
+ import { useColumnFilter } from './useColumnFilter.js';
10
10
 
11
11
  const classBase = "vuuColumnFilter";
12
12
  const ColumnFilter = forwardRef(function ColumnFilter2({
13
13
  column,
14
14
  className,
15
+ onCommit: onCommitProp,
15
16
  operator = "=",
16
17
  showOperatorPicker = false,
17
18
  table,
@@ -28,26 +29,18 @@ const ColumnFilter = forwardRef(function ColumnFilter2({
28
29
  const {
29
30
  op,
30
31
  allowedOperators,
31
- filterValue,
32
32
  inputProps,
33
33
  rangeInputProps,
34
34
  handleOperatorChange,
35
- handleCommit,
36
- handleRangeCommit
35
+ onCommit,
36
+ onCommitRange
37
37
  } = useColumnFilter({
38
+ onCommit: onCommitProp,
38
39
  operator,
39
40
  column,
40
41
  value,
41
42
  onColumnFilterChange
42
43
  });
43
- useMemo(
44
- () => assertValidOperator(allowedOperators, column, operator),
45
- [column, operator, allowedOperators]
46
- );
47
- useMemo(
48
- () => assertValidValue(column, op, filterValue),
49
- [column, op, filterValue]
50
- );
51
44
  return /* @__PURE__ */ jsxs(
52
45
  SegmentedButtonGroup,
53
46
  {
@@ -78,15 +71,18 @@ const ColumnFilter = forwardRef(function ColumnFilter2({
78
71
  ] }) : null,
79
72
  getDataItemEditControl({
80
73
  InputProps: { inputProps },
74
+ commitOnBlur: false,
75
+ commitWhenCleared: true,
81
76
  dataDescriptor: column,
82
- onCommit: handleCommit,
77
+ onCommit,
83
78
  table
84
79
  }),
85
80
  op === "between" ? getDataItemEditControl({
86
81
  className: `${classBase}-rangeHigh`,
82
+ commitWhenCleared: true,
87
83
  InputProps: { inputProps: rangeInputProps },
88
84
  dataDescriptor: column,
89
- onCommit: handleRangeCommit,
85
+ onCommit: onCommitRange,
90
86
  table
91
87
  }) : null
92
88
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/ColumnFilter.tsx"],"sourcesContent":["import {\n Button,\n Menu,\n MenuItem,\n MenuPanel,\n MenuTrigger,\n SegmentedButtonGroup,\n SegmentedButtonGroupProps,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport columnFilterCss from \"./ColumnFilter.css\";\nimport { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { ForwardedRef, forwardRef, ReactElement, useMemo } from \"react\";\nimport {\n assertValidOperator,\n assertValidValue,\n ColumnFilterHookProps,\n useColumnFilter,\n} from \"./useColumnFilter\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\n\nconst classBase = \"vuuColumnFilter\";\n\nexport interface ColumnFilterProps\n extends SegmentedButtonGroupProps,\n Pick<\n ColumnFilterHookProps,\n \"column\" | \"operator\" | \"value\" | \"onColumnFilterChange\"\n > {\n /**\n * Display operator picker.\n */\n showOperatorPicker?: boolean;\n /**\n * VuuTable is required if typeahead support is expected.\n */\n table?: VuuTable;\n}\n\nexport const ColumnFilter = forwardRef(function ColumnFilter(\n {\n column,\n className,\n operator = \"=\",\n showOperatorPicker = false,\n table,\n value,\n onColumnFilterChange,\n ...buttonGroupProps\n }: ColumnFilterProps,\n forwardRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-filter\",\n css: columnFilterCss,\n window: targetWindow,\n });\n\n const {\n op,\n allowedOperators,\n filterValue,\n inputProps,\n rangeInputProps,\n handleOperatorChange,\n handleCommit,\n handleRangeCommit,\n } = useColumnFilter({\n operator,\n column,\n value,\n onColumnFilterChange,\n });\n\n useMemo(\n () => assertValidOperator(allowedOperators, column, operator),\n [column, operator, allowedOperators],\n );\n\n useMemo(\n () => assertValidValue(column, op, filterValue),\n [column, op, filterValue],\n );\n\n return (\n <SegmentedButtonGroup\n {...buttonGroupProps}\n className={cx(classBase, className)}\n ref={forwardRef}\n >\n {showOperatorPicker ? (\n <Menu placement=\"bottom-start\">\n <MenuTrigger>\n <Button\n appearance=\"solid\"\n aria-label=\"Open Menu\"\n className={`${classBase}-trigger`}\n data-embedded\n sentiment=\"neutral\"\n >\n {op}\n </Button>\n </MenuTrigger>\n <MenuPanel>\n {allowedOperators.map((allowedOp) => (\n <MenuItem\n key={`allowedOp`}\n onClick={() => handleOperatorChange(allowedOp)}\n >\n {allowedOp}\n </MenuItem>\n ))}\n </MenuPanel>\n </Menu>\n ) : null}\n {getDataItemEditControl({\n InputProps: { inputProps },\n dataDescriptor: column,\n onCommit: handleCommit,\n table,\n })}\n {op === \"between\"\n ? getDataItemEditControl({\n className: `${classBase}-rangeHigh`,\n InputProps: { inputProps: rangeInputProps },\n dataDescriptor: column,\n onCommit: handleRangeCommit,\n table,\n })\n : null}\n </SegmentedButtonGroup>\n );\n}) as (\n props: ColumnFilterProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement<ColumnFilterProps>;\n"],"names":["ColumnFilter","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/ColumnFilter.tsx"],"sourcesContent":["import {\n Button,\n Menu,\n MenuItem,\n MenuPanel,\n MenuTrigger,\n SegmentedButtonGroup,\n SegmentedButtonGroupProps,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport columnFilterCss from \"./ColumnFilter.css\";\nimport { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { ForwardedRef, forwardRef, ReactElement } from \"react\";\nimport { ColumnFilterHookProps, useColumnFilter } from \"./useColumnFilter\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\n\nconst classBase = \"vuuColumnFilter\";\n\nexport interface ColumnFilterProps\n extends SegmentedButtonGroupProps,\n ColumnFilterHookProps {\n /**\n * Display operator picker.\n */\n showOperatorPicker?: boolean;\n /**\n * VuuTable is required if typeahead support is expected.\n */\n table?: VuuTable;\n}\n\nexport const ColumnFilter = forwardRef(function ColumnFilter(\n {\n column,\n className,\n onCommit: onCommitProp,\n operator = \"=\",\n showOperatorPicker = false,\n table,\n value,\n onColumnFilterChange,\n ...buttonGroupProps\n }: ColumnFilterProps,\n forwardRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-filter\",\n css: columnFilterCss,\n window: targetWindow,\n });\n\n const {\n op,\n allowedOperators,\n inputProps,\n rangeInputProps,\n handleOperatorChange,\n onCommit,\n onCommitRange,\n } = useColumnFilter({\n onCommit: onCommitProp,\n operator,\n column,\n value,\n onColumnFilterChange,\n });\n\n return (\n <SegmentedButtonGroup\n {...buttonGroupProps}\n className={cx(classBase, className)}\n ref={forwardRef}\n >\n {showOperatorPicker ? (\n <Menu placement=\"bottom-start\">\n <MenuTrigger>\n <Button\n appearance=\"solid\"\n aria-label=\"Open Menu\"\n className={`${classBase}-trigger`}\n data-embedded\n sentiment=\"neutral\"\n >\n {op}\n </Button>\n </MenuTrigger>\n <MenuPanel>\n {allowedOperators.map((allowedOp) => (\n <MenuItem\n key={`allowedOp`}\n onClick={() => handleOperatorChange(allowedOp)}\n >\n {allowedOp}\n </MenuItem>\n ))}\n </MenuPanel>\n </Menu>\n ) : null}\n {getDataItemEditControl({\n InputProps: { inputProps },\n commitOnBlur: false,\n commitWhenCleared: true,\n dataDescriptor: column,\n onCommit,\n table,\n })}\n {op === \"between\"\n ? getDataItemEditControl({\n className: `${classBase}-rangeHigh`,\n commitWhenCleared: true,\n InputProps: { inputProps: rangeInputProps },\n dataDescriptor: column,\n onCommit: onCommitRange,\n table,\n })\n : null}\n </SegmentedButtonGroup>\n );\n}) as (\n props: ColumnFilterProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement<ColumnFilterProps>;\n"],"names":["ColumnFilter","forwardRef"],"mappings":";;;;;;;;;;AAmBA,MAAM,SAAY,GAAA,iBAAA;AAeL,MAAA,YAAA,GAAe,UAAW,CAAA,SAASA,aAC9C,CAAA;AAAA,EACE,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAU,EAAA,YAAA;AAAA,EACV,QAAW,GAAA,GAAA;AAAA,EACX,kBAAqB,GAAA,KAAA;AAAA,EACrB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,oBAAA;AAAA,EACA,GAAG;AACL,CAAA,EACAC,WACA,EAAA;AACA,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAA,eAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,EAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,oBAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,MACE,eAAgB,CAAA;AAAA,IAClB,QAAU,EAAA,YAAA;AAAA,IACV,QAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAA,IAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACE,GAAG,gBAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAKA,EAAAA,WAAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,QACC,kBAAA,mBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAU,cACd,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,WACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,UAAW,EAAA,OAAA;AAAA,cACX,YAAW,EAAA,WAAA;AAAA,cACX,SAAA,EAAW,GAAG,SAAS,CAAA,QAAA,CAAA;AAAA,cACvB,eAAa,EAAA,IAAA;AAAA,cACb,SAAU,EAAA,SAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WAEL,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,SAAA,EAAA,EACE,QAAiB,EAAA,gBAAA,CAAA,GAAA,CAAI,CAAC,SACrB,qBAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,OAAA,EAAS,MAAM,oBAAA,CAAqB,SAAS,CAAA;AAAA,cAE5C,QAAA,EAAA;AAAA,aAAA;AAAA,YAHI,CAAA,SAAA;AAAA,WAKR,CACH,EAAA;AAAA,SAAA,EACF,CACE,GAAA,IAAA;AAAA,QACH,sBAAuB,CAAA;AAAA,UACtB,UAAA,EAAY,EAAE,UAAW,EAAA;AAAA,UACzB,YAAc,EAAA,KAAA;AAAA,UACd,iBAAmB,EAAA,IAAA;AAAA,UACnB,cAAgB,EAAA,MAAA;AAAA,UAChB,QAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,QACA,EAAA,KAAO,YACJ,sBAAuB,CAAA;AAAA,UACrB,SAAA,EAAW,GAAG,SAAS,CAAA,UAAA,CAAA;AAAA,UACvB,iBAAmB,EAAA,IAAA;AAAA,UACnB,UAAA,EAAY,EAAE,UAAA,EAAY,eAAgB,EAAA;AAAA,UAC1C,cAAgB,EAAA,MAAA;AAAA,UAChB,QAAU,EAAA,aAAA;AAAA,UACV;AAAA,SACD,CACD,GAAA;AAAA;AAAA;AAAA,GACN;AAEJ,CAAC;;;;"}
@@ -1,9 +1,9 @@
1
- import { useRef, useState, useMemo, useCallback } from 'react';
1
+ import { useState, useMemo, useCallback } from 'react';
2
2
  import { queryClosest } from '@vuu-ui/vuu-utils';
3
3
  import { getOperators } from '../filter-clause/operator-utils.js';
4
4
 
5
5
  const assertValidOperator = (allowedOperators, column, op) => {
6
- if (!allowedOperators.find((filterClauseOp) => filterClauseOp === op) && !(op === "between")) {
6
+ if (op !== "between" && !allowedOperators.includes(op)) {
7
7
  console.warn(
8
8
  `[useColumnFilter] '${op} not supported for column ${column.name}'`
9
9
  );
@@ -12,15 +12,11 @@ const assertValidOperator = (allowedOperators, column, op) => {
12
12
  const assertValidValue = ({ serverDataType: _ }, operator, value) => {
13
13
  if (value !== void 0) {
14
14
  if (operator === "between") {
15
- if (!Array.isArray(value)) {
15
+ if (!Array.isArray(value) || value.length !== 2) {
16
16
  throw Error(
17
- "[useColumnFilter] 'between operator requires array of two values'"
17
+ `[useColumnFilter] between operator requires array of two values, received ${value}`
18
18
  );
19
- } else if (value.length !== 2) {
20
- throw Error(
21
- `[useColumnFilter] 'between operator requires two values, received ${value}'`
22
- );
23
- } else if (value[0] && value[1] && typeof value[0] !== typeof value[1]) {
19
+ } else if (value[0] !== void 0 && value[1] !== void 0 && typeof value[0] !== typeof value[1]) {
24
20
  throw Error(
25
21
  `[useColumnFilter] 'between operator values must be of same type, received ${typeof value[0]} and ${typeof value[1]}`
26
22
  );
@@ -29,98 +25,74 @@ const assertValidValue = ({ serverDataType: _ }, operator, value) => {
29
25
  }
30
26
  };
31
27
  const useColumnFilter = ({
28
+ onCommit,
32
29
  operator = "=",
33
30
  value,
34
31
  column,
35
32
  onColumnFilterChange
36
33
  }) => {
37
- const getDefaultValue = (op2) => op2 === "between" ? ["", ""] : "";
38
- const filterValue = useRef(value ?? getDefaultValue(operator));
39
34
  const [op, setOp] = useState(operator);
40
35
  const allowedOperators = useMemo(() => getOperators(column), [column]);
41
36
  useMemo(() => {
42
- if (value && value !== filterValue.current) {
43
- filterValue.current = value;
44
- setTimeout(() => {
45
- onColumnFilterChange?.(value, column, op);
46
- }, 100);
47
- }
48
- }, [value, column, op, onColumnFilterChange]);
37
+ assertValidOperator(allowedOperators, column, operator);
38
+ assertValidValue(column, op, value);
39
+ }, [allowedOperators, column, operator, op, value]);
49
40
  const handleOperatorChange = useCallback((changedOp) => {
50
41
  setOp(changedOp);
51
42
  }, []);
52
43
  const handleCommit = useCallback(
53
- (e, newValue) => {
54
- console.log(`[useColumnFilter] handleCommit ${newValue}`);
55
- if (Array.isArray(filterValue.current)) {
56
- filterValue.current = [newValue.toString(), filterValue.current[1]];
57
- if (filterValue.current && (filterValue.current[0] === void 0 || filterValue.current[1] === void 0)) {
58
- console.info(
59
- "Range start or end value missing - ignoring onFilterChange"
60
- );
61
- }
44
+ (_e, newValue) => {
45
+ if (Array.isArray(value)) {
46
+ onCommit?.(column, op, [`${newValue}`, value[1]]);
62
47
  } else {
63
- filterValue.current = newValue;
48
+ onCommit?.(column, op, `${newValue}`);
64
49
  }
65
- onColumnFilterChange?.(filterValue.current, column, op);
66
50
  },
67
- [op, column, onColumnFilterChange]
51
+ [value, onCommit, column, op]
68
52
  );
69
53
  const handleRangeCommit = useCallback(
70
- (e, newValue) => {
71
- if (Array.isArray(filterValue.current)) {
72
- filterValue.current = [filterValue.current[0], newValue.toString()];
73
- if (filterValue.current && (filterValue.current[0] === void 0 || filterValue.current[1] === void 0)) {
74
- console.info(
75
- "Range start or end value missing - ignoring onFilterChange"
76
- );
77
- }
78
- } else {
79
- filterValue.current = newValue;
80
- }
81
- onColumnFilterChange?.(filterValue.current, column, op);
54
+ (_e, newValue) => {
55
+ const [firstValue] = value;
56
+ onCommit?.(column, op, [firstValue, `${newValue}`]);
82
57
  },
83
- [op, column, onColumnFilterChange]
58
+ [onCommit, column, op, value]
84
59
  );
85
60
  const handleInputChange = useCallback(
86
61
  (e) => {
87
- if (Array.isArray(filterValue.current)) {
62
+ if (Array.isArray(value)) {
88
63
  const editControl = queryClosest(e.target, "[data-edit-control]", true);
89
64
  const updated = [
90
- !editControl.className?.includes("rangeHigh") ? e.target.value : filterValue.current[0],
91
- editControl.className?.includes("rangeHigh") ? e.target.value : filterValue.current[1]
65
+ !editControl.className.includes("rangeHigh") ? e.target.value : value[0],
66
+ editControl.className?.includes("rangeHigh") ? e.target.value : value[1]
92
67
  ];
93
- filterValue.current = updated;
94
68
  onColumnFilterChange?.(updated, column, op);
95
69
  } else {
96
- filterValue.current = e.target.value;
97
70
  onColumnFilterChange?.(e.target.value, column, op);
98
71
  }
99
72
  },
100
- [op, column, onColumnFilterChange]
73
+ [value, onColumnFilterChange, column, op]
101
74
  );
102
75
  const inputProps = useMemo(
103
76
  () => ({
104
77
  onChange: handleInputChange,
105
- value: Array.isArray(filterValue.current) ? filterValue.current[0] : filterValue.current
78
+ value: Array.isArray(value) ? value[0] : value
106
79
  }),
107
- [handleInputChange]
80
+ [handleInputChange, value]
108
81
  );
109
82
  const rangeInputProps = useMemo(
110
- () => ({
83
+ () => Array.isArray(value) ? {
111
84
  onChange: handleInputChange,
112
- value: Array.isArray(filterValue.current) ? filterValue.current[1] : filterValue.current
113
- }),
114
- [handleInputChange]
85
+ value: value[1]
86
+ } : void 0,
87
+ [handleInputChange, value]
115
88
  );
116
89
  return {
117
90
  op,
118
91
  allowedOperators,
119
- filterValue: filterValue.current,
120
92
  inputProps,
121
93
  rangeInputProps,
122
- handleCommit,
123
- handleRangeCommit,
94
+ onCommit: handleCommit,
95
+ onCommitRange: handleRangeCommit,
124
96
  handleOperatorChange
125
97
  };
126
98
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/useColumnFilter.ts"],"sourcesContent":["import {\n ColumnFilterChangeHandler,\n ColumnFilterOp,\n ColumnFilterValue,\n FilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n ChangeEventHandler,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { CommitHandler, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { VuuTypeaheadInputProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { getOperators } from \"../filter-clause/operator-utils\";\n\nexport const assertValidOperator = (\n allowedOperators: FilterClauseOp[],\n column: ColumnDescriptor,\n op: ColumnFilterOp,\n) => {\n if (\n !allowedOperators.find((filterClauseOp) => filterClauseOp === op) &&\n !(op === \"between\")\n ) {\n console.warn(\n `[useColumnFilter] '${op} not supported for column ${column.name}'`,\n );\n }\n};\n\nexport const assertValidValue = (\n { serverDataType: _ }: ColumnDescriptor,\n operator: ColumnFilterOp,\n value?: ColumnFilterValue,\n) => {\n if (value !== undefined) {\n if (operator === \"between\") {\n if (!Array.isArray(value)) {\n throw Error(\n \"[useColumnFilter] 'between operator requires array of two values'\",\n );\n } else if (value.length !== 2) {\n throw Error(\n `[useColumnFilter] 'between operator requires two values, received ${value}'`,\n );\n } else if (value[0] && value[1] && typeof value[0] !== typeof value[1]) {\n throw Error(\n `[useColumnFilter] 'between operator values must be of same type, received ${typeof value[0]} and ${typeof value[1]}`,\n );\n }\n }\n // TODO validate value(s) against serverDataType\n }\n};\n\nexport type ColumnFilterHookProps = {\n column: ColumnDescriptor;\n operator?: ColumnFilterOp;\n /**\n * Filter value. Pair of values expected when operator is\n * 'between'\n */\n value?: ColumnFilterValue;\n /**\n * Filter change events.\n */\n onColumnFilterChange?: ColumnFilterChangeHandler;\n};\n\nexport const useColumnFilter = ({\n operator = \"=\",\n value,\n column,\n onColumnFilterChange,\n}: ColumnFilterHookProps) => {\n const getDefaultValue = (op: ColumnFilterOp): ColumnFilterValue =>\n op === \"between\" ? [\"\", \"\"] : \"\";\n const filterValue = useRef(value ?? getDefaultValue(operator));\n const [op, setOp] = useState(operator);\n const allowedOperators = useMemo(() => getOperators(column), [column]);\n\n useMemo(() => {\n if (value && value !== filterValue.current) {\n filterValue.current = value;\n setTimeout(() => {\n onColumnFilterChange?.(value, column, op);\n }, 100);\n }\n }, [value, column, op, onColumnFilterChange]);\n\n const handleOperatorChange = useCallback((changedOp: ColumnFilterOp) => {\n setOp(changedOp);\n }, []);\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (e, newValue) => {\n console.log(`[useColumnFilter] handleCommit ${newValue}`);\n if (Array.isArray(filterValue.current)) {\n filterValue.current = [newValue.toString(), filterValue.current[1]];\n if (\n filterValue.current &&\n (filterValue.current[0] === undefined ||\n filterValue.current[1] === undefined)\n ) {\n console.info(\n \"Range start or end value missing - ignoring onFilterChange\",\n );\n }\n } else {\n filterValue.current = newValue as ColumnFilterValue;\n }\n onColumnFilterChange?.(filterValue.current, column, op);\n },\n [op, column, onColumnFilterChange],\n );\n\n const handleRangeCommit = useCallback<CommitHandler<HTMLElement>>(\n (e, newValue) => {\n if (Array.isArray(filterValue.current)) {\n filterValue.current = [filterValue.current[0], newValue.toString()];\n if (\n filterValue.current &&\n (filterValue.current[0] === undefined ||\n filterValue.current[1] === undefined)\n ) {\n console.info(\n \"Range start or end value missing - ignoring onFilterChange\",\n );\n }\n } else {\n filterValue.current = newValue as ColumnFilterValue;\n }\n onColumnFilterChange?.(filterValue.current, column, op);\n },\n [op, column, onColumnFilterChange],\n );\n\n const handleInputChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n if (Array.isArray(filterValue.current)) {\n const editControl = queryClosest(e.target, \"[data-edit-control]\", true);\n const updated: ColumnFilterValue = [\n !editControl.className?.includes(\"rangeHigh\")\n ? e.target.value\n : filterValue.current[0],\n editControl.className?.includes(\"rangeHigh\")\n ? e.target.value\n : filterValue.current[1],\n ];\n filterValue.current = updated;\n onColumnFilterChange?.(updated, column, op);\n } else {\n filterValue.current = e.target.value;\n onColumnFilterChange?.(e.target.value, column, op);\n }\n },\n [op, column, onColumnFilterChange],\n );\n\n const inputProps = useMemo<VuuTypeaheadInputProps[\"inputProps\"]>(\n () => ({\n onChange: handleInputChange,\n value: Array.isArray(filterValue.current)\n ? filterValue.current[0]\n : filterValue.current,\n }),\n [handleInputChange],\n );\n\n const rangeInputProps = useMemo<VuuTypeaheadInputProps[\"inputProps\"]>(\n () => ({\n onChange: handleInputChange,\n value: Array.isArray(filterValue.current)\n ? filterValue.current[1]\n : filterValue.current,\n }),\n [handleInputChange],\n );\n\n return {\n op,\n allowedOperators,\n filterValue: filterValue.current,\n inputProps,\n rangeInputProps,\n handleCommit,\n handleRangeCommit,\n handleOperatorChange,\n };\n};\n"],"names":["op"],"mappings":"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"}
1
+ {"version":3,"file":"useColumnFilter.js","sources":["../../../../packages/vuu-filters/src/column-filter/useColumnFilter.ts"],"sourcesContent":["import {\n ColumnFilterChangeHandler,\n ColumnFilterOp,\n ColumnFilterValue,\n FilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { ChangeEventHandler, useCallback, useMemo, useState } from \"react\";\nimport { CommitHandler, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { VuuTypeaheadInputProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { getOperators } from \"../filter-clause/operator-utils\";\n\nexport const assertValidOperator = (\n allowedOperators: FilterClauseOp[],\n column: ColumnDescriptor,\n op: ColumnFilterOp,\n) => {\n if (op !== \"between\" && !allowedOperators.includes(op)) {\n console.warn(\n `[useColumnFilter] '${op} not supported for column ${column.name}'`,\n );\n }\n};\n\nexport type ColumnFilterCommitHandler = (\n column: ColumnDescriptor,\n op: FilterClauseOp | \"between\",\n value: ColumnFilterValue,\n) => void;\n\nexport const assertValidValue = (\n { serverDataType: _ }: ColumnDescriptor,\n operator: ColumnFilterOp,\n value?: ColumnFilterValue,\n) => {\n if (value !== undefined) {\n if (operator === \"between\") {\n if (!Array.isArray(value) || value.length !== 2) {\n throw Error(\n `[useColumnFilter] between operator requires array of two values, received ${value}`,\n );\n } else if (\n value[0] !== undefined &&\n value[1] !== undefined &&\n typeof value[0] !== typeof value[1]\n ) {\n throw Error(\n `[useColumnFilter] 'between operator values must be of same type, received ${typeof value[0]} and ${typeof value[1]}`,\n );\n }\n }\n // TODO validate value(s) against serverDataType\n }\n};\n\nexport type ColumnFilterHookProps = {\n column: ColumnDescriptor;\n operator?: ColumnFilterOp;\n /**\n * Filter value. Pair of values expected when operator is\n * 'between'\n */\n value?: ColumnFilterValue;\n /**\n * Filter change events.\n */\n onColumnFilterChange?: ColumnFilterChangeHandler;\n /**\n * Called when user 'commits' filter value, either by pressing enter,\n * tabbing away from control or making selection from list\n */\n onCommit: ColumnFilterCommitHandler;\n};\n\nexport const useColumnFilter = ({\n onCommit,\n operator = \"=\",\n value,\n column,\n onColumnFilterChange,\n}: ColumnFilterHookProps) => {\n const [op, setOp] = useState(operator);\n const allowedOperators = useMemo(() => getOperators(column), [column]);\n\n useMemo(() => {\n assertValidOperator(allowedOperators, column, operator);\n assertValidValue(column, op, value);\n }, [allowedOperators, column, operator, op, value]);\n\n const handleOperatorChange = useCallback((changedOp: ColumnFilterOp) => {\n setOp(changedOp);\n }, []);\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (_e, newValue) => {\n if (Array.isArray(value)) {\n onCommit?.(column, op, [`${newValue}`, value[1]]);\n } else {\n onCommit?.(column, op, `${newValue}`);\n }\n },\n [value, onCommit, column, op],\n );\n\n const handleRangeCommit = useCallback<CommitHandler<HTMLElement>>(\n (_e, newValue) => {\n const [firstValue] = value as [string, string];\n onCommit?.(column, op, [firstValue, `${newValue}`]);\n },\n [onCommit, column, op, value],\n );\n\n const handleInputChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n if (Array.isArray(value)) {\n const editControl = queryClosest(e.target, \"[data-edit-control]\", true);\n const updated: ColumnFilterValue = [\n !editControl.className.includes(\"rangeHigh\")\n ? e.target.value\n : value[0],\n editControl.className?.includes(\"rangeHigh\")\n ? e.target.value\n : value[1],\n ];\n onColumnFilterChange?.(updated, column, op);\n } else {\n onColumnFilterChange?.(e.target.value, column, op);\n }\n },\n [value, onColumnFilterChange, column, op],\n );\n\n const inputProps = useMemo<VuuTypeaheadInputProps[\"inputProps\"]>(\n () => ({\n onChange: handleInputChange,\n value: Array.isArray(value) ? value[0] : value,\n }),\n [handleInputChange, value],\n );\n\n const rangeInputProps = useMemo<VuuTypeaheadInputProps[\"inputProps\"]>(\n () =>\n Array.isArray(value)\n ? {\n onChange: handleInputChange,\n value: value[1],\n }\n : undefined,\n [handleInputChange, value],\n );\n\n return {\n op,\n allowedOperators,\n inputProps,\n rangeInputProps,\n onCommit: handleCommit,\n onCommitRange: handleRangeCommit,\n handleOperatorChange,\n };\n};\n"],"names":[],"mappings":"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"}
package/esm/index.js CHANGED
@@ -12,7 +12,6 @@ export { AND, ENDS_WITH, EQUALS, GREATER_THAN, IN, LESS_THAN, OR, STARTS_WITH, a
12
12
  export { FilterClauseModel, FilterModel } from './FilterModel.js';
13
13
  export { InlineFilter } from './inline-filter/InlineFilter.js';
14
14
  export { QuickFilters } from './quick-filters/QuickFilters.js';
15
- export { BasicColumnFilter } from './basic-column-filter/BasicColumnFilter.js';
16
15
  export { SavedFilterPanel } from './saved-filters/SavedFilterPanel.js';
17
16
  export { FilterNamePrompt as SaveFilterConfirmPrompt } from './saved-filters/FilterNamePrompt.js';
18
17
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
- "version": "0.13.37",
2
+ "version": "0.13.38",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "devDependencies": {
7
- "@vuu-ui/vuu-data-types": "0.13.37",
8
- "@vuu-ui/vuu-protocol-types": "0.13.37",
9
- "@vuu-ui/vuu-table-types": "0.13.37",
10
- "@vuu-ui/vuu-filter-types": "0.13.37"
7
+ "@vuu-ui/vuu-data-types": "0.13.38",
8
+ "@vuu-ui/vuu-protocol-types": "0.13.38",
9
+ "@vuu-ui/vuu-table-types": "0.13.38",
10
+ "@vuu-ui/vuu-filter-types": "0.13.38"
11
11
  },
12
12
  "dependencies": {
13
- "@vuu-ui/vuu-data-react": "0.13.37",
14
- "@vuu-ui/vuu-filter-parser": "0.13.37",
15
- "@vuu-ui/vuu-popups": "0.13.37",
16
- "@vuu-ui/vuu-ui-controls": "0.13.37",
17
- "@vuu-ui/vuu-table": "0.13.37",
18
- "@vuu-ui/vuu-utils": "0.13.37",
13
+ "@vuu-ui/vuu-data-react": "0.13.38",
14
+ "@vuu-ui/vuu-filter-parser": "0.13.38",
15
+ "@vuu-ui/vuu-popups": "0.13.38",
16
+ "@vuu-ui/vuu-ui-controls": "0.13.38",
17
+ "@vuu-ui/vuu-table": "0.13.38",
18
+ "@vuu-ui/vuu-utils": "0.13.38",
19
19
  "@salt-ds/core": "1.43.0",
20
20
  "@salt-ds/styles": "0.2.1",
21
21
  "@salt-ds/window": "0.1.1"
@@ -2,7 +2,7 @@ import { SegmentedButtonGroupProps } from "@salt-ds/core";
2
2
  import { ForwardedRef, ReactElement } from "react";
3
3
  import { ColumnFilterHookProps } from "./useColumnFilter";
4
4
  import { VuuTable } from "@vuu-ui/vuu-protocol-types";
5
- export interface ColumnFilterProps extends SegmentedButtonGroupProps, Pick<ColumnFilterHookProps, "column" | "operator" | "value" | "onColumnFilterChange"> {
5
+ export interface ColumnFilterProps extends SegmentedButtonGroupProps, ColumnFilterHookProps {
6
6
  /**
7
7
  * Display operator picker.
8
8
  */
@@ -2,6 +2,7 @@ import { ColumnFilterChangeHandler, ColumnFilterOp, ColumnFilterValue, FilterCla
2
2
  import { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
3
3
  import { CommitHandler } from "@vuu-ui/vuu-utils";
4
4
  export declare const assertValidOperator: (allowedOperators: FilterClauseOp[], column: ColumnDescriptor, op: ColumnFilterOp) => void;
5
+ export type ColumnFilterCommitHandler = (column: ColumnDescriptor, op: FilterClauseOp | "between", value: ColumnFilterValue) => void;
5
6
  export declare const assertValidValue: ({ serverDataType: _ }: ColumnDescriptor, operator: ColumnFilterOp, value?: ColumnFilterValue) => void;
6
7
  export type ColumnFilterHookProps = {
7
8
  column: ColumnDescriptor;
@@ -15,14 +16,18 @@ export type ColumnFilterHookProps = {
15
16
  * Filter change events.
16
17
  */
17
18
  onColumnFilterChange?: ColumnFilterChangeHandler;
19
+ /**
20
+ * Called when user 'commits' filter value, either by pressing enter,
21
+ * tabbing away from control or making selection from list
22
+ */
23
+ onCommit: ColumnFilterCommitHandler;
18
24
  };
19
- export declare const useColumnFilter: ({ operator, value, column, onColumnFilterChange, }: ColumnFilterHookProps) => {
25
+ export declare const useColumnFilter: ({ onCommit, operator, value, column, onColumnFilterChange, }: ColumnFilterHookProps) => {
20
26
  op: "contains" | "starts" | "=" | "!=" | ">" | ">=" | "<=" | "<" | "ends" | "in" | "between";
21
27
  allowedOperators: FilterClauseOp[];
22
- filterValue: ColumnFilterValue;
23
28
  inputProps: (Partial<import("react").InputHTMLAttributes<HTMLInputElement>> & import("@salt-ds/core").DataAttributes) | undefined;
24
29
  rangeInputProps: (Partial<import("react").InputHTMLAttributes<HTMLInputElement>> & import("@salt-ds/core").DataAttributes) | undefined;
25
- handleCommit: CommitHandler<HTMLElement>;
26
- handleRangeCommit: CommitHandler<HTMLElement>;
30
+ onCommit: CommitHandler<HTMLElement>;
31
+ onCommitRange: CommitHandler<HTMLElement>;
27
32
  handleOperatorChange: (changedOp: ColumnFilterOp) => void;
28
33
  };
package/types/index.d.ts CHANGED
@@ -10,7 +10,6 @@ export * from "./filter-utils";
10
10
  export * from "./FilterModel";
11
11
  export * from "./inline-filter";
12
12
  export * from "./quick-filters";
13
- export { BasicColumnFilter, type BasicColumnFilterProps, } from "./basic-column-filter/BasicColumnFilter";
14
13
  export { SavedFilterPanel } from "./saved-filters/SavedFilterPanel";
15
14
  export type { FilterClickHandler, FilterDescriptor, } from "./saved-filters/useSavedFilterPanel";
16
15
  export { FilterNamePrompt as SaveFilterConfirmPrompt, type FilterNamePromptProps as SaveFilterConfirmPromptProps, } from "./saved-filters/FilterNamePrompt";
@@ -1,6 +0,0 @@
1
- 'use strict';
2
-
3
- var basicColumnFilterCss = ".vuuBasicColumnFilter {\n border: solid 1px var(--salt-editable-borderColor);\n border-radius: 4px;\n max-width: 210px;\n\n .vuuBasicColumnFilter-edit-control {\n display: flex;\n }\n}\n";
4
-
5
- module.exports = basicColumnFilterCss;
6
- //# sourceMappingURL=BasicColumnFilter.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BasicColumnFilter.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,61 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var styles = require('@salt-ds/styles');
5
- var window = require('@salt-ds/window');
6
- var cx = require('clsx');
7
- var vuuDataReact = require('@vuu-ui/vuu-data-react');
8
- var react = require('react');
9
- var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
10
- var useBasicColumnFilter = require('./useBasicColumnFilter.js');
11
- var BasicColumnFilter$1 = require('./BasicColumnFilter.css.js');
12
-
13
- const classBase = "vuuBasicColumnFilter";
14
- const searchIcon = /* @__PURE__ */ jsxRuntime.jsx(vuuUiControls.Icon, { name: "search", size: 18 });
15
- const BasicColumnFilter = react.forwardRef(function BasicColumnFilter2({
16
- column,
17
- className,
18
- table,
19
- initialValue,
20
- onApplyFilter,
21
- withStartAdornment = true,
22
- ...htmlAttributes
23
- }, forwardRef2) {
24
- const targetWindow = window.useWindow();
25
- styles.useComponentCssInjection({
26
- testId: "vuu-basic-column-filter",
27
- css: BasicColumnFilter$1,
28
- window: targetWindow
29
- });
30
- const { filterValue, onInputChange, onCommit } = useBasicColumnFilter.useBasicColumnFilter({
31
- column,
32
- initialValue,
33
- onApplyFilter
34
- });
35
- return /* @__PURE__ */ jsxRuntime.jsx(
36
- "div",
37
- {
38
- ...htmlAttributes,
39
- className: cx(classBase, className),
40
- ref: forwardRef2,
41
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-edit-control`, children: [
42
- withStartAdornment && searchIcon,
43
- vuuDataReact.getDataItemEditControl({
44
- InputProps: {
45
- inputProps: {
46
- placeholder: "Find",
47
- value: filterValue,
48
- onChange: onInputChange
49
- }
50
- },
51
- dataDescriptor: column,
52
- table,
53
- onCommit
54
- })
55
- ] })
56
- }
57
- );
58
- });
59
-
60
- exports.BasicColumnFilter = BasicColumnFilter;
61
- //# sourceMappingURL=BasicColumnFilter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BasicColumnFilter.js","sources":["../../../../packages/vuu-filters/src/basic-column-filter/BasicColumnFilter.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { ForwardedRef, forwardRef, HTMLAttributes, ReactElement } from \"react\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { Icon } from \"@vuu-ui/vuu-ui-controls\";\nimport { FilterBarProps } from \"../filter-bar\";\nimport { useBasicColumnFilter } from \"./useBasicColumnFilter\";\n\nimport basicColumnFilterCss from \"./BasicColumnFilter.css\";\n\nexport type FilterValue = string | number;\n\nconst classBase = \"vuuBasicColumnFilter\";\nconst searchIcon = <Icon name=\"search\" size={18} />;\n\nexport interface BasicColumnFilterProps\n extends HTMLAttributes<HTMLDivElement>,\n Pick<FilterBarProps, \"onApplyFilter\"> {\n /**\n * Column Attributes.\n */\n column: ColumnDescriptor;\n /**\n * VuuTable is required if typeahead support is expected.\n */\n table?: VuuTable;\n /**\n * Initial filter value.\n */\n initialValue?: FilterValue;\n /**\n *Show search icon as start adornment.\n */\n withStartAdornment?: boolean;\n}\n\nexport const BasicColumnFilter = forwardRef(function BasicColumnFilter(\n {\n column,\n className,\n table,\n initialValue,\n onApplyFilter,\n withStartAdornment = true,\n ...htmlAttributes\n }: BasicColumnFilterProps,\n forwardRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-basic-column-filter\",\n css: basicColumnFilterCss,\n window: targetWindow,\n });\n\n const { filterValue, onInputChange, onCommit } = useBasicColumnFilter({\n column,\n initialValue,\n onApplyFilter,\n });\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardRef}\n >\n <div className={`${classBase}-edit-control`}>\n {withStartAdornment && searchIcon}\n {getDataItemEditControl({\n InputProps: {\n inputProps: {\n placeholder: \"Find\",\n value: filterValue,\n onChange: onInputChange,\n },\n },\n dataDescriptor: column,\n table,\n onCommit,\n })}\n </div>\n </div>\n );\n}) as (\n props: BasicColumnFilterProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement<BasicColumnFilterProps>;\n"],"names":["jsx","Icon","forwardRef","BasicColumnFilter","useWindow","useComponentCssInjection","basicColumnFilterCss","useBasicColumnFilter","jsxs","getDataItemEditControl"],"mappings":";;;;;;;;;;;;AAeA,MAAM,SAAY,GAAA,sBAAA;AAClB,MAAM,6BAAcA,cAAA,CAAAC,kBAAA,EAAA,EAAK,IAAK,EAAA,QAAA,EAAS,MAAM,EAAI,EAAA,CAAA;AAuBpC,MAAA,iBAAA,GAAoBC,gBAAW,CAAA,SAASC,kBACnD,CAAA;AAAA,EACE,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAqB,GAAA,IAAA;AAAA,EACrB,GAAG;AACL,CAAA,EACAD,WACA,EAAA;AACA,EAAA,MAAM,eAAeE,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,yBAAA;AAAA,IACR,GAAK,EAAAC,mBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,WAAA,EAAa,aAAe,EAAA,QAAA,KAAaC,yCAAqB,CAAA;AAAA,IACpE,MAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAAP,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAKE,EAAAA,WAAAA;AAAA,MAEL,QAAC,kBAAAM,eAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CACzB,aAAA,CAAA,EAAA,QAAA,EAAA;AAAA,QAAsB,kBAAA,IAAA,UAAA;AAAA,QACtBC,mCAAuB,CAAA;AAAA,UACtB,UAAY,EAAA;AAAA,YACV,UAAY,EAAA;AAAA,cACV,WAAa,EAAA,MAAA;AAAA,cACb,KAAO,EAAA,WAAA;AAAA,cACP,QAAU,EAAA;AAAA;AACZ,WACF;AAAA,UACA,cAAgB,EAAA,MAAA;AAAA,UAChB,KAAA;AAAA,UACA;AAAA,SACD;AAAA,OACH,EAAA;AAAA;AAAA,GACF;AAEJ,CAAC;;;;"}
@@ -1,45 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
- var vuuUtils = require('@vuu-ui/vuu-utils');
5
-
6
- const filterOp = "=";
7
- const asDataSourceFilter = (filter) => {
8
- if (filter) {
9
- return {
10
- filter: vuuUtils.filterAsQuery(filter),
11
- filterStruct: filter
12
- };
13
- } else {
14
- return vuuUtils.NoFilter;
15
- }
16
- };
17
- const useBasicColumnFilter = ({
18
- initialValue,
19
- column,
20
- onApplyFilter
21
- }) => {
22
- const [filterValue, setFilterValue] = react.useState(initialValue);
23
- const handleInputChange = react.useCallback(
24
- (e) => {
25
- setFilterValue(e.target.value);
26
- },
27
- []
28
- );
29
- const handleCommit = react.useCallback(
30
- (_, value) => {
31
- const filter = { column: column.name, op: filterOp, value };
32
- setFilterValue((value ?? "").toString());
33
- onApplyFilter?.(asDataSourceFilter(filter));
34
- },
35
- [column, onApplyFilter]
36
- );
37
- return {
38
- filterValue: filterValue ?? "",
39
- onInputChange: handleInputChange,
40
- onCommit: handleCommit
41
- };
42
- };
43
-
44
- exports.useBasicColumnFilter = useBasicColumnFilter;
45
- //# sourceMappingURL=useBasicColumnFilter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useBasicColumnFilter.js","sources":["../../../../packages/vuu-filters/src/basic-column-filter/useBasicColumnFilter.ts"],"sourcesContent":["import { ChangeEventHandler, useCallback, useState } from \"react\";\nimport { BasicColumnFilterProps } from \"./BasicColumnFilter\";\nimport { CommitHandler, filterAsQuery, NoFilter } from \"@vuu-ui/vuu-utils\";\nimport { Filter, SingleValueFilterClauseOp } from \"@vuu-ui/vuu-filter-types\";\nimport { DataSourceFilter } from \"@vuu-ui/vuu-data-types\";\n\nexport type FilterValue = string | number;\n\nexport type BasicColumnFilterHookProps = Pick<\n BasicColumnFilterProps,\n \"column\" | \"onApplyFilter\" | \"initialValue\"\n>;\n\nconst filterOp: SingleValueFilterClauseOp = \"=\";\n\nconst asDataSourceFilter = (filter: Filter): DataSourceFilter => {\n if (filter) {\n return {\n filter: filterAsQuery(filter),\n filterStruct: filter,\n };\n } else {\n return NoFilter;\n }\n};\n\nexport const useBasicColumnFilter = ({\n initialValue,\n column,\n onApplyFilter,\n}: BasicColumnFilterHookProps) => {\n const [filterValue, setFilterValue] = useState(initialValue);\n\n const handleInputChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n setFilterValue(e.target.value);\n },\n [],\n );\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (_, value) => {\n const filter: Filter = { column: column.name, op: filterOp, value };\n setFilterValue((value ?? \"\").toString());\n onApplyFilter?.(asDataSourceFilter(filter));\n },\n [column, onApplyFilter],\n );\n\n return {\n filterValue: filterValue ?? \"\",\n onInputChange: handleInputChange,\n onCommit: handleCommit,\n };\n};\n"],"names":["filterAsQuery","NoFilter","useState","useCallback"],"mappings":";;;;;AAaA,MAAM,QAAsC,GAAA,GAAA;AAE5C,MAAM,kBAAA,GAAqB,CAAC,MAAqC,KAAA;AAC/D,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,OAAA;AAAA,MACL,MAAA,EAAQA,uBAAc,MAAM,CAAA;AAAA,MAC5B,YAAc,EAAA;AAAA,KAChB;AAAA,GACK,MAAA;AACL,IAAO,OAAAC,iBAAA;AAAA;AAEX,CAAA;AAEO,MAAM,uBAAuB,CAAC;AAAA,EACnC,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAkC,KAAA;AAChC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAS,YAAY,CAAA;AAE3D,EAAA,MAAM,iBAAoB,GAAAC,iBAAA;AAAA,IACxB,CAAC,CAAM,KAAA;AACL,MAAe,cAAA,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,KAC/B;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,YAAe,GAAAA,iBAAA;AAAA,IACnB,CAAC,GAAG,KAAU,KAAA;AACZ,MAAA,MAAM,SAAiB,EAAE,MAAA,EAAQ,OAAO,IAAM,EAAA,EAAA,EAAI,UAAU,KAAM,EAAA;AAClE,MAAgB,cAAA,CAAA,CAAA,KAAA,IAAS,EAAI,EAAA,QAAA,EAAU,CAAA;AACvC,MAAgB,aAAA,GAAA,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,KAC5C;AAAA,IACA,CAAC,QAAQ,aAAa;AAAA,GACxB;AAEA,EAAO,OAAA;AAAA,IACL,aAAa,WAAe,IAAA,EAAA;AAAA,IAC5B,aAAe,EAAA,iBAAA;AAAA,IACf,QAAU,EAAA;AAAA,GACZ;AACF;;;;"}
@@ -1,4 +0,0 @@
1
- var basicColumnFilterCss = ".vuuBasicColumnFilter {\n border: solid 1px var(--salt-editable-borderColor);\n border-radius: 4px;\n max-width: 210px;\n\n .vuuBasicColumnFilter-edit-control {\n display: flex;\n }\n}\n";
2
-
3
- export { basicColumnFilterCss as default };
4
- //# sourceMappingURL=BasicColumnFilter.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BasicColumnFilter.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,59 +0,0 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { useComponentCssInjection } from '@salt-ds/styles';
3
- import { useWindow } from '@salt-ds/window';
4
- import cx from 'clsx';
5
- import { getDataItemEditControl } from '@vuu-ui/vuu-data-react';
6
- import { forwardRef } from 'react';
7
- import { Icon } from '@vuu-ui/vuu-ui-controls';
8
- import { useBasicColumnFilter } from './useBasicColumnFilter.js';
9
- import basicColumnFilterCss from './BasicColumnFilter.css.js';
10
-
11
- const classBase = "vuuBasicColumnFilter";
12
- const searchIcon = /* @__PURE__ */ jsx(Icon, { name: "search", size: 18 });
13
- const BasicColumnFilter = forwardRef(function BasicColumnFilter2({
14
- column,
15
- className,
16
- table,
17
- initialValue,
18
- onApplyFilter,
19
- withStartAdornment = true,
20
- ...htmlAttributes
21
- }, forwardRef2) {
22
- const targetWindow = useWindow();
23
- useComponentCssInjection({
24
- testId: "vuu-basic-column-filter",
25
- css: basicColumnFilterCss,
26
- window: targetWindow
27
- });
28
- const { filterValue, onInputChange, onCommit } = useBasicColumnFilter({
29
- column,
30
- initialValue,
31
- onApplyFilter
32
- });
33
- return /* @__PURE__ */ jsx(
34
- "div",
35
- {
36
- ...htmlAttributes,
37
- className: cx(classBase, className),
38
- ref: forwardRef2,
39
- children: /* @__PURE__ */ jsxs("div", { className: `${classBase}-edit-control`, children: [
40
- withStartAdornment && searchIcon,
41
- getDataItemEditControl({
42
- InputProps: {
43
- inputProps: {
44
- placeholder: "Find",
45
- value: filterValue,
46
- onChange: onInputChange
47
- }
48
- },
49
- dataDescriptor: column,
50
- table,
51
- onCommit
52
- })
53
- ] })
54
- }
55
- );
56
- });
57
-
58
- export { BasicColumnFilter };
59
- //# sourceMappingURL=BasicColumnFilter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BasicColumnFilter.js","sources":["../../../../packages/vuu-filters/src/basic-column-filter/BasicColumnFilter.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { ForwardedRef, forwardRef, HTMLAttributes, ReactElement } from \"react\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { Icon } from \"@vuu-ui/vuu-ui-controls\";\nimport { FilterBarProps } from \"../filter-bar\";\nimport { useBasicColumnFilter } from \"./useBasicColumnFilter\";\n\nimport basicColumnFilterCss from \"./BasicColumnFilter.css\";\n\nexport type FilterValue = string | number;\n\nconst classBase = \"vuuBasicColumnFilter\";\nconst searchIcon = <Icon name=\"search\" size={18} />;\n\nexport interface BasicColumnFilterProps\n extends HTMLAttributes<HTMLDivElement>,\n Pick<FilterBarProps, \"onApplyFilter\"> {\n /**\n * Column Attributes.\n */\n column: ColumnDescriptor;\n /**\n * VuuTable is required if typeahead support is expected.\n */\n table?: VuuTable;\n /**\n * Initial filter value.\n */\n initialValue?: FilterValue;\n /**\n *Show search icon as start adornment.\n */\n withStartAdornment?: boolean;\n}\n\nexport const BasicColumnFilter = forwardRef(function BasicColumnFilter(\n {\n column,\n className,\n table,\n initialValue,\n onApplyFilter,\n withStartAdornment = true,\n ...htmlAttributes\n }: BasicColumnFilterProps,\n forwardRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-basic-column-filter\",\n css: basicColumnFilterCss,\n window: targetWindow,\n });\n\n const { filterValue, onInputChange, onCommit } = useBasicColumnFilter({\n column,\n initialValue,\n onApplyFilter,\n });\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardRef}\n >\n <div className={`${classBase}-edit-control`}>\n {withStartAdornment && searchIcon}\n {getDataItemEditControl({\n InputProps: {\n inputProps: {\n placeholder: \"Find\",\n value: filterValue,\n onChange: onInputChange,\n },\n },\n dataDescriptor: column,\n table,\n onCommit,\n })}\n </div>\n </div>\n );\n}) as (\n props: BasicColumnFilterProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement<BasicColumnFilterProps>;\n"],"names":["BasicColumnFilter","forwardRef"],"mappings":";;;;;;;;;;AAeA,MAAM,SAAY,GAAA,sBAAA;AAClB,MAAM,6BAAc,GAAA,CAAA,IAAA,EAAA,EAAK,IAAK,EAAA,QAAA,EAAS,MAAM,EAAI,EAAA,CAAA;AAuBpC,MAAA,iBAAA,GAAoB,UAAW,CAAA,SAASA,kBACnD,CAAA;AAAA,EACE,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAqB,GAAA,IAAA;AAAA,EACrB,GAAG;AACL,CAAA,EACAC,WACA,EAAA;AACA,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,yBAAA;AAAA,IACR,GAAK,EAAA,oBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,WAAA,EAAa,aAAe,EAAA,QAAA,KAAa,oBAAqB,CAAA;AAAA,IACpE,MAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAKA,EAAAA,WAAAA;AAAA,MAEL,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CACzB,aAAA,CAAA,EAAA,QAAA,EAAA;AAAA,QAAsB,kBAAA,IAAA,UAAA;AAAA,QACtB,sBAAuB,CAAA;AAAA,UACtB,UAAY,EAAA;AAAA,YACV,UAAY,EAAA;AAAA,cACV,WAAa,EAAA,MAAA;AAAA,cACb,KAAO,EAAA,WAAA;AAAA,cACP,QAAU,EAAA;AAAA;AACZ,WACF;AAAA,UACA,cAAgB,EAAA,MAAA;AAAA,UAChB,KAAA;AAAA,UACA;AAAA,SACD;AAAA,OACH,EAAA;AAAA;AAAA,GACF;AAEJ,CAAC;;;;"}
@@ -1,43 +0,0 @@
1
- import { useState, useCallback } from 'react';
2
- import { filterAsQuery, NoFilter } from '@vuu-ui/vuu-utils';
3
-
4
- const filterOp = "=";
5
- const asDataSourceFilter = (filter) => {
6
- if (filter) {
7
- return {
8
- filter: filterAsQuery(filter),
9
- filterStruct: filter
10
- };
11
- } else {
12
- return NoFilter;
13
- }
14
- };
15
- const useBasicColumnFilter = ({
16
- initialValue,
17
- column,
18
- onApplyFilter
19
- }) => {
20
- const [filterValue, setFilterValue] = useState(initialValue);
21
- const handleInputChange = useCallback(
22
- (e) => {
23
- setFilterValue(e.target.value);
24
- },
25
- []
26
- );
27
- const handleCommit = useCallback(
28
- (_, value) => {
29
- const filter = { column: column.name, op: filterOp, value };
30
- setFilterValue((value ?? "").toString());
31
- onApplyFilter?.(asDataSourceFilter(filter));
32
- },
33
- [column, onApplyFilter]
34
- );
35
- return {
36
- filterValue: filterValue ?? "",
37
- onInputChange: handleInputChange,
38
- onCommit: handleCommit
39
- };
40
- };
41
-
42
- export { useBasicColumnFilter };
43
- //# sourceMappingURL=useBasicColumnFilter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useBasicColumnFilter.js","sources":["../../../../packages/vuu-filters/src/basic-column-filter/useBasicColumnFilter.ts"],"sourcesContent":["import { ChangeEventHandler, useCallback, useState } from \"react\";\nimport { BasicColumnFilterProps } from \"./BasicColumnFilter\";\nimport { CommitHandler, filterAsQuery, NoFilter } from \"@vuu-ui/vuu-utils\";\nimport { Filter, SingleValueFilterClauseOp } from \"@vuu-ui/vuu-filter-types\";\nimport { DataSourceFilter } from \"@vuu-ui/vuu-data-types\";\n\nexport type FilterValue = string | number;\n\nexport type BasicColumnFilterHookProps = Pick<\n BasicColumnFilterProps,\n \"column\" | \"onApplyFilter\" | \"initialValue\"\n>;\n\nconst filterOp: SingleValueFilterClauseOp = \"=\";\n\nconst asDataSourceFilter = (filter: Filter): DataSourceFilter => {\n if (filter) {\n return {\n filter: filterAsQuery(filter),\n filterStruct: filter,\n };\n } else {\n return NoFilter;\n }\n};\n\nexport const useBasicColumnFilter = ({\n initialValue,\n column,\n onApplyFilter,\n}: BasicColumnFilterHookProps) => {\n const [filterValue, setFilterValue] = useState(initialValue);\n\n const handleInputChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n setFilterValue(e.target.value);\n },\n [],\n );\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (_, value) => {\n const filter: Filter = { column: column.name, op: filterOp, value };\n setFilterValue((value ?? \"\").toString());\n onApplyFilter?.(asDataSourceFilter(filter));\n },\n [column, onApplyFilter],\n );\n\n return {\n filterValue: filterValue ?? \"\",\n onInputChange: handleInputChange,\n onCommit: handleCommit,\n };\n};\n"],"names":[],"mappings":";;;AAaA,MAAM,QAAsC,GAAA,GAAA;AAE5C,MAAM,kBAAA,GAAqB,CAAC,MAAqC,KAAA;AAC/D,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,OAAA;AAAA,MACL,MAAA,EAAQ,cAAc,MAAM,CAAA;AAAA,MAC5B,YAAc,EAAA;AAAA,KAChB;AAAA,GACK,MAAA;AACL,IAAO,OAAA,QAAA;AAAA;AAEX,CAAA;AAEO,MAAM,uBAAuB,CAAC;AAAA,EACnC,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAkC,KAAA;AAChC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,YAAY,CAAA;AAE3D,EAAA,MAAM,iBAAoB,GAAA,WAAA;AAAA,IACxB,CAAC,CAAM,KAAA;AACL,MAAe,cAAA,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,KAC/B;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,GAAG,KAAU,KAAA;AACZ,MAAA,MAAM,SAAiB,EAAE,MAAA,EAAQ,OAAO,IAAM,EAAA,EAAA,EAAI,UAAU,KAAM,EAAA;AAClE,MAAgB,cAAA,CAAA,CAAA,KAAA,IAAS,EAAI,EAAA,QAAA,EAAU,CAAA;AACvC,MAAgB,aAAA,GAAA,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,KAC5C;AAAA,IACA,CAAC,QAAQ,aAAa;AAAA,GACxB;AAEA,EAAO,OAAA;AAAA,IACL,aAAa,WAAe,IAAA,EAAA;AAAA,IAC5B,aAAe,EAAA,iBAAA;AAAA,IACf,QAAU,EAAA;AAAA,GACZ;AACF;;;;"}
@@ -1,26 +0,0 @@
1
- import { ForwardedRef, HTMLAttributes, ReactElement } from "react";
2
- import { VuuTable } from "@vuu-ui/vuu-protocol-types";
3
- import { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
4
- import { FilterBarProps } from "../filter-bar";
5
- export type FilterValue = string | number;
6
- export interface BasicColumnFilterProps extends HTMLAttributes<HTMLDivElement>, Pick<FilterBarProps, "onApplyFilter"> {
7
- /**
8
- * Column Attributes.
9
- */
10
- column: ColumnDescriptor;
11
- /**
12
- * VuuTable is required if typeahead support is expected.
13
- */
14
- table?: VuuTable;
15
- /**
16
- * Initial filter value.
17
- */
18
- initialValue?: FilterValue;
19
- /**
20
- *Show search icon as start adornment.
21
- */
22
- withStartAdornment?: boolean;
23
- }
24
- export declare const BasicColumnFilter: (props: BasicColumnFilterProps & {
25
- ref?: ForwardedRef<HTMLDivElement>;
26
- }) => ReactElement<BasicColumnFilterProps>;
@@ -1,10 +0,0 @@
1
- import { ChangeEventHandler } from "react";
2
- import { BasicColumnFilterProps } from "./BasicColumnFilter";
3
- import { CommitHandler } from "@vuu-ui/vuu-utils";
4
- export type FilterValue = string | number;
5
- export type BasicColumnFilterHookProps = Pick<BasicColumnFilterProps, "column" | "onApplyFilter" | "initialValue">;
6
- export declare const useBasicColumnFilter: ({ initialValue, column, onApplyFilter, }: BasicColumnFilterHookProps) => {
7
- filterValue: string | number;
8
- onInputChange: ChangeEventHandler<HTMLInputElement>;
9
- onCommit: CommitHandler<HTMLElement>;
10
- };