@toptal/picasso-query-builder 7.2.18 → 8.0.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist-package/src/QueryBuilder/QueryBuilder.d.ts +2 -2
- package/dist-package/src/QueryBuilder/QueryBuilder.d.ts.map +1 -1
- package/dist-package/src/QueryBuilder/QueryBuilder.js +3 -7
- package/dist-package/src/QueryBuilder/QueryBuilder.js.map +1 -1
- package/dist-package/src/utils/index.d.ts +1 -1
- package/dist-package/src/utils/index.d.ts.map +1 -1
- package/dist-package/src/utils/index.js +1 -1
- package/dist-package/src/utils/index.js.map +1 -1
- package/dist-package/src/utils/use-query-builder-validation.d.ts +13 -0
- package/dist-package/src/utils/use-query-builder-validation.d.ts.map +1 -0
- package/dist-package/src/utils/{use-query-builder-validator.js → use-query-builder-validation.js} +10 -8
- package/dist-package/src/utils/use-query-builder-validation.js.map +1 -0
- package/package.json +8 -8
- package/src/QueryBuilder/QueryBuilder.tsx +7 -13
- package/src/QueryBuilder/story/CustomValueEditor.example.tsx +5 -5
- package/src/utils/index.ts +1 -1
- package/src/utils/{use-query-builder-validator.test.ts → use-query-builder-validation.test.ts} +36 -31
- package/src/utils/{use-query-builder-validator.ts → use-query-builder-validation.ts} +11 -13
- package/dist-package/src/utils/use-query-builder-validator.d.ts +0 -13
- package/dist-package/src/utils/use-query-builder-validator.d.ts.map +0 -1
- package/dist-package/src/utils/use-query-builder-validator.js.map +0 -1
@@ -22,7 +22,7 @@ declare type Props = {
|
|
22
22
|
/** Defines a function that is called when the user submits a query constructed in the QB. This function takes a single argument - constructed query. */
|
23
23
|
onSubmit?: (query: RuleGroupTypeAny) => void;
|
24
24
|
/** Defines a component that allows possibility to customize value editor that is used in QB. By default, QB provides default set of editors (text inputs, dropdowns, etc.). */
|
25
|
-
|
25
|
+
valueEditor?: ValueEditorComponentProps;
|
26
26
|
/** Defines the loading state. */
|
27
27
|
loading?: boolean;
|
28
28
|
/** Defines padded layout. */
|
@@ -41,6 +41,6 @@ declare type Props = {
|
|
41
41
|
resetOnFieldChange?: boolean;
|
42
42
|
testIds?: TestId;
|
43
43
|
};
|
44
|
-
declare const QueryBuilder: ({ fields, query, onQueryChange, onValidationChange, getOperators: customOperators, maxGroupDepth, loading, onSubmit,
|
44
|
+
declare const QueryBuilder: ({ fields, query, onQueryChange, onValidationChange, getOperators: customOperators, maxGroupDepth, loading, onSubmit, valueEditor, footer, hideControls, header, enableDragAndDrop, resetOnFieldChange, padded, runQueryButtonContent, onQueryReset, testIds, }: Props) => JSX.Element;
|
45
45
|
export default QueryBuilder;
|
46
46
|
//# sourceMappingURL=QueryBuilder.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../../../src/QueryBuilder/QueryBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGrD,OAAO,KAAK,EACV,gBAAgB,IAAI,uBAAuB,EAE3C,gBAAgB,EAChB,QAAQ,EACT,MAAM,oBAAoB,CAAA;AAW3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAG3D,OAAO,KAAK,EAAuB,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;
|
1
|
+
{"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../../../src/QueryBuilder/QueryBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGrD,OAAO,KAAK,EACV,gBAAgB,IAAI,uBAAuB,EAE3C,gBAAgB,EAChB,QAAQ,EACT,MAAM,oBAAoB,CAAA;AAW3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAG3D,OAAO,KAAK,EAAuB,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAYhF,aAAK,yBAAyB,GAAG,aAAa,CAAC,uBAAuB,CAAC,CAAA;AAEvE,aAAK,KAAK,GAAG;IACX,mGAAmG;IACnG,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,4FAA4F;IAC5F,KAAK,EAAE,gBAAgB,CAAA;IACvB,qJAAqJ;IACrJ,aAAa,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAA;IACnD,8GAA8G;IAC9G,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,4GAA4G;IAC5G,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAA;IACjE,wJAAwJ;IACxJ,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC5C,+KAA+K;IAC/K,WAAW,CAAC,EAAE,yBAAyB,CAAA;IACvC,iCAAiC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,yHAAyH;IACzH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sJAAsJ;IACtJ,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,yGAAyG;IACzG,qBAAqB,CAAC,EAAE,SAAS,CAAA;IACjC,mEAAmE;IACnE,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB,gEAAgE;IAChE,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB,gIAAgI;IAChI,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAMD,QAAA,MAAM,YAAY,mQAmBf,KAAK,gBAkJP,CAAA;AAED,eAAe,YAAY,CAAA"}
|
@@ -19,20 +19,16 @@ import { useOnQueryChange } from './hooks/useOnQueryChange';
|
|
19
19
|
import { ValidationErrors } from '../ValidationErrors';
|
20
20
|
const useStyles = makeStyles(styles);
|
21
21
|
const ValueEditor = (props) => React.createElement(DefaultValEditor, Object.assign({}, props));
|
22
|
-
const QueryBuilder = ({ fields, query, onQueryChange, onValidationChange, getOperators: customOperators, maxGroupDepth = 3, loading = false, onSubmit,
|
22
|
+
const QueryBuilder = ({ fields, query, onQueryChange, onValidationChange, getOperators: customOperators, maxGroupDepth = 3, loading = false, onSubmit, valueEditor = ValueEditor, footer, hideControls, header, enableDragAndDrop = false, resetOnFieldChange = true, padded = SPACING_6, runQueryButtonContent, onQueryReset, testIds, }) => {
|
23
23
|
const classes = useStyles();
|
24
24
|
const [submitButtonClicked, setSubmitButtonClicked] = useState(false);
|
25
|
-
const [queryBuilderValid, setIsQueryBuilderValid] = useState();
|
26
|
-
const [validationErrors, setValidationErrors] = useState({});
|
27
25
|
const { showError } = useNotifications();
|
28
26
|
const { handleQueryChange } = useOnQueryChange({
|
29
27
|
maxGroupDepth,
|
30
28
|
callback: onQueryChange,
|
31
29
|
});
|
32
|
-
const { validator } = useQueryBuilderValidator({
|
30
|
+
const { validator, validationErrors, queryBuilderValid } = useQueryBuilderValidator({
|
33
31
|
fields,
|
34
|
-
onValidChange: setIsQueryBuilderValid,
|
35
|
-
onValidationResultChange: setValidationErrors,
|
36
32
|
});
|
37
33
|
const resetQuery = useCallback(() => {
|
38
34
|
if (onQueryReset) {
|
@@ -92,7 +88,7 @@ const QueryBuilder = ({ fields, query, onQueryChange, onValidationChange, getOpe
|
|
92
88
|
getDisabledFields,
|
93
89
|
testIds,
|
94
90
|
}, controlElements: {
|
95
|
-
valueEditor
|
91
|
+
valueEditor,
|
96
92
|
}, enableDragAndDrop: enableDragAndDrop })),
|
97
93
|
!hideControls && (React.createElement(Container, { flex: true, justifyContent: 'flex-end', "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.controls },
|
98
94
|
React.createElement(ClearQueryButton, { onClick: resetQuery }),
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../../src/QueryBuilder/QueryBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAO/D,OAAO,EACL,YAAY,IAAI,iBAAiB,EACjC,gBAAgB,EAChB,MAAM,GACP,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAA;AACrC,OAAO,KAAK,oBAAoB,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAGpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAE3D,OAAO,EAAE,WAAW,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AACtE,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;
|
1
|
+
{"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../../src/QueryBuilder/QueryBuilder.tsx"],"names":[],"mappings":"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"}
|
@@ -2,6 +2,6 @@ export { controlClassnames } from './config';
|
|
2
2
|
export { generateSelectOptions } from './generate-select-options';
|
3
3
|
export { getQueryDepth } from './get-query-depth';
|
4
4
|
export { default as useHandleTouched } from './use-handle-touched';
|
5
|
-
export { default as useQueryBuilderValidator } from './use-query-builder-
|
5
|
+
export { default as useQueryBuilderValidator } from './use-query-builder-validation';
|
6
6
|
export { default as validateValueEditor } from './validate-value-editor';
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AACpF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,yBAAyB,CAAA"}
|
@@ -2,6 +2,6 @@ export { controlClassnames } from './config';
|
|
2
2
|
export { generateSelectOptions } from './generate-select-options';
|
3
3
|
export { getQueryDepth } from './get-query-depth';
|
4
4
|
export { default as useHandleTouched } from './use-handle-touched';
|
5
|
-
export { default as useQueryBuilderValidator } from './use-query-builder-
|
5
|
+
export { default as useQueryBuilderValidator } from './use-query-builder-validation';
|
6
6
|
export { default as validateValueEditor } from './validate-value-editor';
|
7
7
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AACpF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,yBAAyB,CAAA"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import type { RuleGroupTypeAny, ValidationResult } from 'react-querybuilder';
|
2
|
+
import type { Field } from '../types/query-builder';
|
3
|
+
export declare type ValidatorResult = Record<string, ValidationResult | boolean>;
|
4
|
+
declare type Props = {
|
5
|
+
fields: Field[];
|
6
|
+
};
|
7
|
+
declare const useQueryBuilderValidation: ({ fields }: Props) => {
|
8
|
+
validator: (queryToValidate: RuleGroupTypeAny) => boolean;
|
9
|
+
validationErrors: ValidatorResult;
|
10
|
+
queryBuilderValid: boolean | undefined;
|
11
|
+
};
|
12
|
+
export default useQueryBuilderValidation;
|
13
|
+
//# sourceMappingURL=use-query-builder-validation.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"use-query-builder-validation.d.ts","sourceRoot":"","sources":["../../../src/utils/use-query-builder-validation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAGhB,gBAAgB,EACjB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAGnD,oBAAY,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAA;AAExE,aAAK,KAAK,GAAG;IACX,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AAwDD,QAAA,MAAM,yBAAyB,eAAgB,KAAK;iCAgB9B,gBAAgB;;;CAkBrC,CAAA;AAED,eAAe,yBAAyB,CAAA"}
|
package/dist-package/src/utils/{use-query-builder-validator.js → use-query-builder-validation.js}
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { useCallback, useMemo } from 'react';
|
1
|
+
import { useCallback, useMemo, useState } from 'react';
|
2
2
|
import { isRuleGroup } from 'react-querybuilder';
|
3
3
|
const validateRule = (rule, fieldValidatorMap) => {
|
4
4
|
const { field, id } = rule;
|
@@ -34,7 +34,9 @@ const validateQuery = (query, fieldValidatorMap) => {
|
|
34
34
|
*/
|
35
35
|
return validateRule(query, fieldValidatorMap);
|
36
36
|
};
|
37
|
-
const
|
37
|
+
const useQueryBuilderValidation = ({ fields }) => {
|
38
|
+
const [validationErrors, setValidationErrors] = useState({});
|
39
|
+
const [queryBuilderValid, setIsQueryBuilderValid] = useState();
|
38
40
|
const fieldValidatorMap = useMemo(() => {
|
39
41
|
return fields.reduce((acc, field) => (Object.assign(Object.assign({}, acc), { [field.name]: field.validator || null })), {});
|
40
42
|
}, [fields]);
|
@@ -44,11 +46,11 @@ const useQueryBuilderValidator = ({ fields, onValidChange, onValidationResultCha
|
|
44
46
|
}
|
45
47
|
const valResult = validateQuery(queryToValidate, fieldValidatorMap);
|
46
48
|
const isValid = !Object.values(valResult).some(result => result !== true);
|
47
|
-
|
48
|
-
|
49
|
+
setIsQueryBuilderValid === null || setIsQueryBuilderValid === void 0 ? void 0 : setIsQueryBuilderValid(isValid);
|
50
|
+
setValidationErrors === null || setValidationErrors === void 0 ? void 0 : setValidationErrors(valResult);
|
49
51
|
return isValid;
|
50
|
-
}, [fieldValidatorMap
|
51
|
-
return { validator };
|
52
|
+
}, [fieldValidatorMap]);
|
53
|
+
return { validator, validationErrors, queryBuilderValid };
|
52
54
|
};
|
53
|
-
export default
|
54
|
-
//# sourceMappingURL=use-query-builder-
|
55
|
+
export default useQueryBuilderValidation;
|
56
|
+
//# sourceMappingURL=use-query-builder-validation.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"use-query-builder-validation.js","sourceRoot":"","sources":["../../../src/utils/use-query-builder-validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@toptal/picasso-query-builder",
|
3
|
-
"version": "
|
3
|
+
"version": "8.0.1",
|
4
4
|
"description": "Picasso query builder",
|
5
5
|
"author": "Toptal",
|
6
6
|
"homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso-query-builder#readme",
|
@@ -31,20 +31,20 @@
|
|
31
31
|
"dependencies": {
|
32
32
|
"@material-ui/core": "4.12.4",
|
33
33
|
"@react-querybuilder/dnd": "6.5.4",
|
34
|
-
"@toptal/picasso-button": "4.0.
|
35
|
-
"@toptal/picasso-select": "4.0.
|
34
|
+
"@toptal/picasso-button": "4.0.11",
|
35
|
+
"@toptal/picasso-select": "4.0.9",
|
36
36
|
"@toptal/picasso-typography": "4.0.1",
|
37
37
|
"@toptal/picasso-container": "3.1.0",
|
38
38
|
"@toptal/picasso-radio": "5.0.3",
|
39
39
|
"@toptal/picasso-icons": "1.7.0",
|
40
40
|
"@toptal/picasso-tooltip": "2.0.0",
|
41
|
-
"@toptal/picasso-tagselector": "3.1.
|
42
|
-
"@toptal/picasso-input": "4.0.
|
41
|
+
"@toptal/picasso-tagselector": "3.1.11",
|
42
|
+
"@toptal/picasso-input": "4.0.9",
|
43
43
|
"@toptal/picasso-list": "5.0.3",
|
44
44
|
"@toptal/picasso-loader": "3.0.1",
|
45
|
-
"@toptal/picasso-number-input": "4.0.
|
46
|
-
"@toptal/picasso-prompt-modal": "2.0.
|
47
|
-
"@toptal/picasso-notification": "4.0.
|
45
|
+
"@toptal/picasso-number-input": "4.0.9",
|
46
|
+
"@toptal/picasso-prompt-modal": "2.0.22",
|
47
|
+
"@toptal/picasso-notification": "4.0.11",
|
48
48
|
"@toptal/picasso-utils": "2.0.0",
|
49
49
|
"classnames": "^2.5.1",
|
50
50
|
"react-dnd": "^16.0.1",
|
@@ -32,7 +32,6 @@ import { controlClassnames, useQueryBuilderValidator } from '../utils'
|
|
32
32
|
import styles from './styles'
|
33
33
|
import { useOnQueryChange } from './hooks/useOnQueryChange'
|
34
34
|
import { ValidationErrors } from '../ValidationErrors'
|
35
|
-
import type { ValidatorResult } from '../utils/use-query-builder-validator'
|
36
35
|
|
37
36
|
type ValueEditorComponentProps = ComponentType<DefaultValueEditorProps>
|
38
37
|
|
@@ -54,7 +53,7 @@ type Props = {
|
|
54
53
|
/** Defines a function that is called when the user submits a query constructed in the QB. This function takes a single argument - constructed query. */
|
55
54
|
onSubmit?: (query: RuleGroupTypeAny) => void
|
56
55
|
/** Defines a component that allows possibility to customize value editor that is used in QB. By default, QB provides default set of editors (text inputs, dropdowns, etc.). */
|
57
|
-
|
56
|
+
valueEditor?: ValueEditorComponentProps
|
58
57
|
/** Defines the loading state. */
|
59
58
|
loading?: boolean
|
60
59
|
/** Defines padded layout. */
|
@@ -87,7 +86,7 @@ const QueryBuilder = ({
|
|
87
86
|
maxGroupDepth = 3,
|
88
87
|
loading = false,
|
89
88
|
onSubmit,
|
90
|
-
|
89
|
+
valueEditor = ValueEditor,
|
91
90
|
footer,
|
92
91
|
hideControls,
|
93
92
|
header,
|
@@ -101,10 +100,6 @@ const QueryBuilder = ({
|
|
101
100
|
const classes = useStyles()
|
102
101
|
|
103
102
|
const [submitButtonClicked, setSubmitButtonClicked] = useState(false)
|
104
|
-
const [queryBuilderValid, setIsQueryBuilderValid] = useState<
|
105
|
-
boolean | undefined
|
106
|
-
>()
|
107
|
-
const [validationErrors, setValidationErrors] = useState<ValidatorResult>({})
|
108
103
|
|
109
104
|
const { showError } = useNotifications()
|
110
105
|
|
@@ -113,11 +108,10 @@ const QueryBuilder = ({
|
|
113
108
|
callback: onQueryChange,
|
114
109
|
})
|
115
110
|
|
116
|
-
const { validator } =
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
})
|
111
|
+
const { validator, validationErrors, queryBuilderValid } =
|
112
|
+
useQueryBuilderValidator({
|
113
|
+
fields,
|
114
|
+
})
|
121
115
|
|
122
116
|
const resetQuery = useCallback(() => {
|
123
117
|
if (onQueryReset) {
|
@@ -222,7 +216,7 @@ const QueryBuilder = ({
|
|
222
216
|
} as QueryBuilderContext
|
223
217
|
}
|
224
218
|
controlElements={{
|
225
|
-
valueEditor
|
219
|
+
valueEditor,
|
226
220
|
}}
|
227
221
|
enableDragAndDrop={enableDragAndDrop}
|
228
222
|
/>
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import React, { useState } from 'react'
|
2
|
-
import type {
|
3
|
-
|
4
|
-
|
5
|
-
type RuleGroupTypeAny,
|
2
|
+
import type {
|
3
|
+
RuleGroupTypeAny,
|
4
|
+
ValueEditorProps,
|
6
5
|
} from '@toptal/picasso-query-builder'
|
6
|
+
import { QueryBuilder } from '@toptal/picasso-query-builder'
|
7
7
|
import { Input, Select } from '@toptal/picasso'
|
8
8
|
|
9
9
|
const initialQuery = {
|
@@ -67,7 +67,7 @@ const Example = () => {
|
|
67
67
|
query={query}
|
68
68
|
onQueryChange={handleQueryChange}
|
69
69
|
fields={fields}
|
70
|
-
|
70
|
+
valueEditor={CustomValueEditor}
|
71
71
|
/>
|
72
72
|
)
|
73
73
|
}
|
package/src/utils/index.ts
CHANGED
@@ -2,5 +2,5 @@ export { controlClassnames } from './config'
|
|
2
2
|
export { generateSelectOptions } from './generate-select-options'
|
3
3
|
export { getQueryDepth } from './get-query-depth'
|
4
4
|
export { default as useHandleTouched } from './use-handle-touched'
|
5
|
-
export { default as useQueryBuilderValidator } from './use-query-builder-
|
5
|
+
export { default as useQueryBuilderValidator } from './use-query-builder-validation'
|
6
6
|
export { default as validateValueEditor } from './validate-value-editor'
|
package/src/utils/{use-query-builder-validator.test.ts → use-query-builder-validation.test.ts}
RENAMED
@@ -1,8 +1,8 @@
|
|
1
|
-
import { renderHook } from '@testing-library/react-hooks'
|
1
|
+
import { act, renderHook } from '@testing-library/react-hooks'
|
2
2
|
import type { RuleGroupTypeAny, RuleType } from 'react-querybuilder'
|
3
3
|
|
4
4
|
import type { Field } from '../types/query-builder'
|
5
|
-
import
|
5
|
+
import useQueryBuilderValidation from './use-query-builder-validation'
|
6
6
|
|
7
7
|
const validateMock1 = (rule: RuleType) => {
|
8
8
|
if (!rule.value) {
|
@@ -97,27 +97,26 @@ const groupedQuery = (field3value = 'should be this'): RuleGroupTypeAny => ({
|
|
97
97
|
],
|
98
98
|
})
|
99
99
|
|
100
|
-
|
101
|
-
const onValidationResultChangeMock = jest.fn()
|
102
|
-
|
103
|
-
describe('useQueryBuilderValidator', () => {
|
100
|
+
describe('useQueryBuilderValidation', () => {
|
104
101
|
describe('when query has only a single group of rule', () => {
|
105
102
|
describe('when query does not contain an invalid rule', () => {
|
106
103
|
it('returns true', () => {
|
107
104
|
const { result } = renderHook(() =>
|
108
|
-
|
105
|
+
useQueryBuilderValidation({
|
109
106
|
fields,
|
110
|
-
onValidChange: onValidChangeMock,
|
111
|
-
onValidationResultChange: onValidationResultChangeMock,
|
112
107
|
})
|
113
108
|
)
|
114
109
|
|
115
110
|
const { validator } = result.current
|
116
111
|
|
117
|
-
|
112
|
+
act(() => {
|
113
|
+
expect(validator(query())).toBe(true)
|
114
|
+
})
|
115
|
+
|
116
|
+
const { validationErrors, queryBuilderValid } = result.current
|
118
117
|
|
119
|
-
expect(
|
120
|
-
expect(
|
118
|
+
expect(queryBuilderValid).toBe(true)
|
119
|
+
expect(validationErrors).toEqual({
|
121
120
|
rule1: true,
|
122
121
|
rule2: true,
|
123
122
|
rule3: true,
|
@@ -128,21 +127,21 @@ describe('useQueryBuilderValidator', () => {
|
|
128
127
|
describe('when query contains an invalid rule', () => {
|
129
128
|
it('returns false', () => {
|
130
129
|
const { result } = renderHook(() =>
|
131
|
-
|
130
|
+
useQueryBuilderValidation({
|
132
131
|
fields,
|
133
|
-
onValidChange: onValidChangeMock,
|
134
|
-
onValidationResultChange: onValidationResultChangeMock,
|
135
132
|
})
|
136
133
|
)
|
137
134
|
|
138
135
|
const { validator } = result.current
|
139
136
|
|
140
|
-
|
137
|
+
act(() => {
|
138
|
+
expect(validator(query('invalid value for field2'))).toBe(false)
|
139
|
+
})
|
141
140
|
|
142
|
-
|
141
|
+
const { validationErrors, queryBuilderValid } = result.current
|
143
142
|
|
144
|
-
expect(
|
145
|
-
expect(
|
143
|
+
expect(queryBuilderValid).toBe(false)
|
144
|
+
expect(validationErrors).toEqual({
|
146
145
|
rule1: true,
|
147
146
|
rule2: true,
|
148
147
|
rule3: {
|
@@ -158,18 +157,21 @@ describe('useQueryBuilderValidator', () => {
|
|
158
157
|
describe('when query does not contain invalid rule', () => {
|
159
158
|
it('returns true', () => {
|
160
159
|
const { result } = renderHook(() =>
|
161
|
-
|
160
|
+
useQueryBuilderValidation({
|
162
161
|
fields,
|
163
|
-
onValidChange: onValidChangeMock,
|
164
|
-
onValidationResultChange: onValidationResultChangeMock,
|
165
162
|
})
|
166
163
|
)
|
167
164
|
|
168
165
|
const { validator } = result.current
|
169
166
|
|
170
|
-
|
171
|
-
|
172
|
-
|
167
|
+
act(() => {
|
168
|
+
expect(validator(groupedQuery())).toBe(true)
|
169
|
+
})
|
170
|
+
|
171
|
+
const { validationErrors, queryBuilderValid } = result.current
|
172
|
+
|
173
|
+
expect(queryBuilderValid).toBe(true)
|
174
|
+
expect(validationErrors).toEqual({
|
173
175
|
group1: true,
|
174
176
|
group2: true,
|
175
177
|
rule1: true,
|
@@ -182,18 +184,21 @@ describe('useQueryBuilderValidator', () => {
|
|
182
184
|
describe('when query contains invalid rule', () => {
|
183
185
|
it('returns false', () => {
|
184
186
|
const { result } = renderHook(() =>
|
185
|
-
|
187
|
+
useQueryBuilderValidation({
|
186
188
|
fields,
|
187
|
-
onValidChange: onValidChangeMock,
|
188
|
-
onValidationResultChange: onValidationResultChangeMock,
|
189
189
|
})
|
190
190
|
)
|
191
191
|
|
192
192
|
const { validator } = result.current
|
193
193
|
|
194
|
-
|
195
|
-
|
196
|
-
|
194
|
+
act(() => {
|
195
|
+
expect(validator(groupedQuery('invalid rule'))).toBe(false)
|
196
|
+
})
|
197
|
+
|
198
|
+
const { validationErrors, queryBuilderValid } = result.current
|
199
|
+
|
200
|
+
expect(queryBuilderValid).toBe(false)
|
201
|
+
expect(validationErrors).toEqual({
|
197
202
|
group1: true,
|
198
203
|
group2: true,
|
199
204
|
rule1: true,
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { useCallback, useMemo } from 'react'
|
1
|
+
import { useCallback, useMemo, useState } from 'react'
|
2
2
|
import type {
|
3
3
|
RuleGroupTypeAny,
|
4
4
|
RuleType,
|
@@ -14,8 +14,6 @@ export type ValidatorResult = Record<string, ValidationResult | boolean>
|
|
14
14
|
|
15
15
|
type Props = {
|
16
16
|
fields: Field[]
|
17
|
-
onValidChange?: (isValid: boolean) => void
|
18
|
-
onValidationResultChange?: (validationResult: ValidatorResult) => void
|
19
17
|
}
|
20
18
|
|
21
19
|
const validateRule = (rule: RuleType, fieldValidatorMap: ValidatorMap) => {
|
@@ -72,11 +70,11 @@ const validateQuery = (
|
|
72
70
|
return validateRule(query as RuleType, fieldValidatorMap)
|
73
71
|
}
|
74
72
|
|
75
|
-
const
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
73
|
+
const useQueryBuilderValidation = ({ fields }: Props) => {
|
74
|
+
const [validationErrors, setValidationErrors] = useState<ValidatorResult>({})
|
75
|
+
const [queryBuilderValid, setIsQueryBuilderValid] = useState<
|
76
|
+
boolean | undefined
|
77
|
+
>()
|
80
78
|
const fieldValidatorMap: ValidatorMap = useMemo(() => {
|
81
79
|
return fields.reduce(
|
82
80
|
(acc, field) => ({
|
@@ -97,15 +95,15 @@ const useQueryBuilderValidator = ({
|
|
97
95
|
|
98
96
|
const isValid = !Object.values(valResult).some(result => result !== true)
|
99
97
|
|
100
|
-
|
101
|
-
|
98
|
+
setIsQueryBuilderValid?.(isValid)
|
99
|
+
setValidationErrors?.(valResult)
|
102
100
|
|
103
101
|
return isValid
|
104
102
|
},
|
105
|
-
[fieldValidatorMap
|
103
|
+
[fieldValidatorMap]
|
106
104
|
)
|
107
105
|
|
108
|
-
return { validator }
|
106
|
+
return { validator, validationErrors, queryBuilderValid }
|
109
107
|
}
|
110
108
|
|
111
|
-
export default
|
109
|
+
export default useQueryBuilderValidation
|
@@ -1,13 +0,0 @@
|
|
1
|
-
import type { RuleGroupTypeAny, ValidationResult } from 'react-querybuilder';
|
2
|
-
import type { Field } from '../types/query-builder';
|
3
|
-
export declare type ValidatorResult = Record<string, ValidationResult | boolean>;
|
4
|
-
declare type Props = {
|
5
|
-
fields: Field[];
|
6
|
-
onValidChange?: (isValid: boolean) => void;
|
7
|
-
onValidationResultChange?: (validationResult: ValidatorResult) => void;
|
8
|
-
};
|
9
|
-
declare const useQueryBuilderValidator: ({ fields, onValidChange, onValidationResultChange, }: Props) => {
|
10
|
-
validator: (queryToValidate: RuleGroupTypeAny) => boolean;
|
11
|
-
};
|
12
|
-
export default useQueryBuilderValidator;
|
13
|
-
//# sourceMappingURL=use-query-builder-validator.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"use-query-builder-validator.d.ts","sourceRoot":"","sources":["../../../src/utils/use-query-builder-validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAGhB,gBAAgB,EACjB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAGnD,oBAAY,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAA;AAExE,aAAK,KAAK,GAAG;IACX,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC1C,wBAAwB,CAAC,EAAE,CAAC,gBAAgB,EAAE,eAAe,KAAK,IAAI,CAAA;CACvE,CAAA;AAwDD,QAAA,MAAM,wBAAwB,yDAI3B,KAAK;iCAYc,gBAAgB;CAkBrC,CAAA;AAED,eAAe,wBAAwB,CAAA"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"use-query-builder-validator.js","sourceRoot":"","sources":["../../../src/utils/use-query-builder-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAO5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAahD,MAAM,YAAY,GAAG,CAAC,IAAc,EAAE,iBAA+B,EAAE,EAAE;IACvE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,CAAA;IAE1B,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAE/C,OAAO;QACL,CAAC,EAAY,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;KAC7D,CAAA;AACH,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CACpB,KAAkC,EAClC,iBAA+B,EACd,EAAE;IACnB;;OAEG;IACH,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;QACtB,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,CAAA;QAE3B;;WAEG;QACH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,OAAO;gBACL,CAAC,EAAY,CAAC,EAAE;oBACd,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,CAAC,wBAAwB,CAAC;iBACpC;aACF,CAAA;SACF;QAED,MAAM,MAAM,GAAG,KAAK;aACjB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAwB,EAAE,iBAAiB,CAAC,CAAC;aACvE,MAAM,CACL,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,iCAChB,GAAG,GACH,UAAU,EACb,EACF,EAAE,CACH,CAAA;QAEH,uBACE,CAAC,EAAY,CAAC,EAAE,IAAI,IACjB,MAAM,EACV;KACF;IAED;;OAEG;IACH,OAAO,YAAY,CAAC,KAAiB,EAAE,iBAAiB,CAAC,CAAA;AAC3D,CAAC,CAAA;AAED,MAAM,wBAAwB,GAAG,CAAC,EAChC,MAAM,EACN,aAAa,EACb,wBAAwB,GAClB,EAAE,EAAE;IACV,MAAM,iBAAiB,GAAiB,OAAO,CAAC,GAAG,EAAE;QACnD,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,iCACX,GAAG,KACN,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,IACrC,EACF,EAAE,CACH,CAAA;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,eAAiC,EAAE,EAAE;QACpC,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,KAAK,CAAA;SACb;QAED,MAAM,SAAS,GAAG,aAAa,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAA;QAEnE,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAA;QAEzE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,OAAO,CAAC,CAAA;QACxB,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CAAG,SAAS,CAAC,CAAA;QAErC,OAAO,OAAO,CAAA;IAChB,CAAC,EACD,CAAC,iBAAiB,EAAE,aAAa,EAAE,wBAAwB,CAAC,CAC7D,CAAA;IAED,OAAO,EAAE,SAAS,EAAE,CAAA;AACtB,CAAC,CAAA;AAED,eAAe,wBAAwB,CAAA"}
|