@toptal/picasso-query-builder 7.2.18 → 8.0.1

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.
@@ -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
- customValueEditor?: ValueEditorComponentProps;
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, customValueEditor, footer, hideControls, header, enableDragAndDrop, resetOnFieldChange, padded, runQueryButtonContent, onQueryReset, testIds, }: Props) => JSX.Element;
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;AAahF,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,iBAAiB,CAAC,EAAE,yBAAyB,CAAA;IAC7C,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,yQAmBf,KAAK,gBAuJP,CAAA;AAED,eAAe,YAAY,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, customValueEditor = ValueEditor, footer, hideControls, header, enableDragAndDrop = false, resetOnFieldChange = true, padded = SPACING_6, runQueryButtonContent, onQueryReset, testIds, }) => {
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: customValueEditor,
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":"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"}
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-validator';
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,+BAA+B,CAAA;AACnF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,yBAAyB,CAAA"}
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-validator';
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,+BAA+B,CAAA;AACnF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,yBAAyB,CAAA"}
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"}
@@ -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 useQueryBuilderValidator = ({ fields, onValidChange, onValidationResultChange, }) => {
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
- onValidChange === null || onValidChange === void 0 ? void 0 : onValidChange(isValid);
48
- onValidationResultChange === null || onValidationResultChange === void 0 ? void 0 : onValidationResultChange(valResult);
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, onValidChange, onValidationResultChange]);
51
- return { validator };
52
+ }, [fieldValidatorMap]);
53
+ return { validator, validationErrors, queryBuilderValid };
52
54
  };
53
- export default useQueryBuilderValidator;
54
- //# sourceMappingURL=use-query-builder-validator.js.map
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": "7.2.18",
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.10",
35
- "@toptal/picasso-select": "4.0.8",
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.10",
42
- "@toptal/picasso-input": "4.0.8",
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.8",
46
- "@toptal/picasso-prompt-modal": "2.0.21",
47
- "@toptal/picasso-notification": "4.0.10",
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
- customValueEditor?: ValueEditorComponentProps
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
- customValueEditor = ValueEditor,
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 } = useQueryBuilderValidator({
117
- fields,
118
- onValidChange: setIsQueryBuilderValid,
119
- onValidationResultChange: setValidationErrors,
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: customValueEditor,
219
+ valueEditor,
226
220
  }}
227
221
  enableDragAndDrop={enableDragAndDrop}
228
222
  />
@@ -1,9 +1,9 @@
1
1
  import React, { useState } from 'react'
2
- import type { ValueEditorProps } from '@toptal/picasso-query-builder'
3
- import {
4
- QueryBuilder,
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
- customValueEditor={CustomValueEditor}
70
+ valueEditor={CustomValueEditor}
71
71
  />
72
72
  )
73
73
  }
@@ -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-validator'
5
+ export { default as useQueryBuilderValidator } from './use-query-builder-validation'
6
6
  export { default as validateValueEditor } from './validate-value-editor'
@@ -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 useQueryBuilderValidator from './use-query-builder-validator'
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
- const onValidChangeMock = jest.fn()
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
- useQueryBuilderValidator({
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
- expect(validator(query())).toBe(true)
112
+ act(() => {
113
+ expect(validator(query())).toBe(true)
114
+ })
115
+
116
+ const { validationErrors, queryBuilderValid } = result.current
118
117
 
119
- expect(onValidChangeMock).toHaveBeenCalledWith(true)
120
- expect(onValidationResultChangeMock).toHaveBeenCalledWith({
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
- useQueryBuilderValidator({
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
- const isValid = validator(query('invalid value for field2'))
137
+ act(() => {
138
+ expect(validator(query('invalid value for field2'))).toBe(false)
139
+ })
141
140
 
142
- expect(isValid).toBe(false)
141
+ const { validationErrors, queryBuilderValid } = result.current
143
142
 
144
- expect(onValidChangeMock).toHaveBeenCalledWith(false)
145
- expect(onValidationResultChangeMock).toHaveBeenCalledWith({
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
- useQueryBuilderValidator({
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
- expect(validator(groupedQuery())).toBe(true)
171
- expect(onValidChangeMock).toHaveBeenCalledWith(true)
172
- expect(onValidationResultChangeMock).toHaveBeenCalledWith({
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
- useQueryBuilderValidator({
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
- expect(validator(groupedQuery('invalid rule'))).toBe(false)
195
- expect(onValidChangeMock).toHaveBeenCalledWith(false)
196
- expect(onValidationResultChangeMock).toHaveBeenCalledWith({
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 useQueryBuilderValidator = ({
76
- fields,
77
- onValidChange,
78
- onValidationResultChange,
79
- }: Props) => {
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
- onValidChange?.(isValid)
101
- onValidationResultChange?.(valResult)
98
+ setIsQueryBuilderValid?.(isValid)
99
+ setValidationErrors?.(valResult)
102
100
 
103
101
  return isValid
104
102
  },
105
- [fieldValidatorMap, onValidChange, onValidationResultChange]
103
+ [fieldValidatorMap]
106
104
  )
107
105
 
108
- return { validator }
106
+ return { validator, validationErrors, queryBuilderValid }
109
107
  }
110
108
 
111
- export default useQueryBuilderValidator
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"}