@vuu-ui/vuu-filters 4.0.0-beta.2 → 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.
|
|
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.
|
|
14
|
-
"@vuu-ui/vuu-protocol-types": "4.0.0-beta.
|
|
15
|
-
"@vuu-ui/vuu-table-types": "4.0.0-beta.
|
|
16
|
-
"@vuu-ui/vuu-filter-types": "4.0.0-beta.
|
|
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.
|
|
20
|
-
"@vuu-ui/vuu-data-react": "4.0.0-beta.
|
|
21
|
-
"@vuu-ui/vuu-filter-parser": "4.0.0-beta.
|
|
22
|
-
"@vuu-ui/vuu-popups": "4.0.0-beta.
|
|
23
|
-
"@vuu-ui/vuu-ui-controls": "4.0.0-beta.
|
|
24
|
-
"@vuu-ui/vuu-table": "4.0.0-beta.
|
|
25
|
-
"@vuu-ui/vuu-utils": "4.0.0-beta.
|
|
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
|
|
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;
|