@vuu-ui/vuu-filters 4.0.0-beta.1 → 4.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.0.0-beta.1",
2
+ "version": "4.0.0-beta.3",
3
3
  "main": "./src/index.js",
4
4
  "author": "heswell",
5
5
  "license": "Apache-2.0",
@@ -10,19 +10,19 @@
10
10
  "type-defs": "node ../../scripts/build-type-defs.mjs"
11
11
  },
12
12
  "devDependencies": {
13
- "@vuu-ui/vuu-data-types": "4.0.0-beta.1",
14
- "@vuu-ui/vuu-protocol-types": "4.0.0-beta.1",
15
- "@vuu-ui/vuu-table-types": "4.0.0-beta.1",
16
- "@vuu-ui/vuu-filter-types": "4.0.0-beta.1"
13
+ "@vuu-ui/vuu-data-types": "4.0.0-beta.3",
14
+ "@vuu-ui/vuu-protocol-types": "4.0.0-beta.3",
15
+ "@vuu-ui/vuu-table-types": "4.0.0-beta.3",
16
+ "@vuu-ui/vuu-filter-types": "4.0.0-beta.3"
17
17
  },
18
18
  "dependencies": {
19
- "@vuu-ui/vuu-context-menu": "4.0.0-beta.1",
20
- "@vuu-ui/vuu-data-react": "4.0.0-beta.1",
21
- "@vuu-ui/vuu-filter-parser": "4.0.0-beta.1",
22
- "@vuu-ui/vuu-popups": "4.0.0-beta.1",
23
- "@vuu-ui/vuu-ui-controls": "4.0.0-beta.1",
24
- "@vuu-ui/vuu-table": "4.0.0-beta.1",
25
- "@vuu-ui/vuu-utils": "4.0.0-beta.1",
19
+ "@vuu-ui/vuu-context-menu": "4.0.0-beta.3",
20
+ "@vuu-ui/vuu-data-react": "4.0.0-beta.3",
21
+ "@vuu-ui/vuu-filter-parser": "4.0.0-beta.3",
22
+ "@vuu-ui/vuu-popups": "4.0.0-beta.3",
23
+ "@vuu-ui/vuu-ui-controls": "4.0.0-beta.3",
24
+ "@vuu-ui/vuu-table": "4.0.0-beta.3",
25
+ "@vuu-ui/vuu-utils": "4.0.0-beta.3",
26
26
  "@salt-ds/core": "1.72.0",
27
27
  "@salt-ds/styles": "0.4.1",
28
28
  "@salt-ds/window": "0.1.2"
@@ -28,7 +28,7 @@ const getValues = (defaultValueProp, valueProp)=>{
28
28
  };
29
29
  const classBase = "vuuToggleFilter";
30
30
  const NO_MATCHING_DATA = "No matching data";
31
- 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) {
32
32
  const targetWindow = useWindow();
33
33
  useComponentCssInjection({
34
34
  testId: "vuu-toggle-filter",
@@ -40,6 +40,7 @@ const ToggleFilter_ToggleFilter = /*#__PURE__*/ forwardRef(function({ className,
40
40
  const stringValues = values.map(String);
41
41
  const { onlyAvailableValue, unavailableValues } = useToggleFilter({
42
42
  column,
43
+ disableTypeahead,
43
44
  table,
44
45
  values: stringValues
45
46
  });
@@ -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: []
@@ -12,6 +12,9 @@ type Value = ToggleButtonGroupProps["value"];
12
12
  * values from dataSource.
13
13
  * With neither of these Providers available, the ToggleFilter is
14
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.
15
18
  */
16
19
  export interface ToggleFilterProps extends Omit<ToggleButtonGroupProps, "defaultValue" | "value">, Omit<ToggleFilterHookProps, "values"> {
17
20
  defaultValue?: ToggleFilterValue | Value;
@@ -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;