@toptal/picasso-query-builder 7.2.15 → 7.2.16-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.4

Sign up to get free protection for your applications and to get access to all the features.
package/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021-2022 Toptal, LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the “Software”), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -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.15",
3
+ "version": "7.2.16-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.4+baea90bfe",
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",
@@ -23,29 +23,29 @@
23
23
  },
24
24
  "peerDependencies": {
25
25
  "@toptal/picasso-provider": "*",
26
- "react": ">=16.12.0 < 19.0.0",
27
26
  "@toptal/picasso-tailwind": ">=2.7",
27
+ "react": ">=16.12.0 < 19.0.0",
28
28
  "react-dom": ">=16.12.0 < 19.0.0",
29
29
  "typescript": "~4.7.0"
30
30
  },
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.8",
35
- "@toptal/picasso-select": "4.0.6",
36
- "@toptal/picasso-typography": "4.0.1",
37
- "@toptal/picasso-container": "3.1.0",
38
- "@toptal/picasso-radio": "5.0.3",
39
- "@toptal/picasso-icons": "1.7.0",
40
- "@toptal/picasso-tooltip": "2.0.0",
41
- "@toptal/picasso-tagselector": "3.1.7",
42
- "@toptal/picasso-input": "4.0.6",
43
- "@toptal/picasso-list": "5.0.3",
44
- "@toptal/picasso-loader": "3.0.1",
45
- "@toptal/picasso-number-input": "4.0.6",
46
- "@toptal/picasso-prompt-modal": "2.0.19",
47
- "@toptal/picasso-notification": "4.0.8",
48
- "@toptal/picasso-utils": "2.0.0",
34
+ "@toptal/picasso-button": "4.0.9-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.4+baea90bfe",
35
+ "@toptal/picasso-container": "3.1.1-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.20+baea90bfe",
36
+ "@toptal/picasso-icons": "1.7.1-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.6+baea90bfe",
37
+ "@toptal/picasso-input": "4.0.7-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.4+baea90bfe",
38
+ "@toptal/picasso-list": "5.0.4-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.6+baea90bfe",
39
+ "@toptal/picasso-loader": "3.0.2-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.27+baea90bfe",
40
+ "@toptal/picasso-notification": "4.0.9-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.4+baea90bfe",
41
+ "@toptal/picasso-number-input": "4.0.7-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.4+baea90bfe",
42
+ "@toptal/picasso-prompt-modal": "2.0.20-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.4+baea90bfe",
43
+ "@toptal/picasso-radio": "5.0.4-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.6+baea90bfe",
44
+ "@toptal/picasso-select": "4.0.7-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.4+baea90bfe",
45
+ "@toptal/picasso-tagselector": "3.1.8-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.4+baea90bfe",
46
+ "@toptal/picasso-tooltip": "2.0.1-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.27+baea90bfe",
47
+ "@toptal/picasso-typography": "4.0.2-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.27+baea90bfe",
48
+ "@toptal/picasso-utils": "2.0.1-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.27+baea90bfe",
49
49
  "classnames": "^2.5.1",
50
50
  "react-dnd": "^16.0.1",
51
51
  "react-dnd-html5-backend": "^16.0.1",
@@ -54,7 +54,7 @@
54
54
  },
55
55
  "devDependencies": {
56
56
  "@testing-library/react-hooks": "^8.0.1",
57
- "@toptal/picasso-test-utils": "1.1.1",
57
+ "@toptal/picasso-test-utils": "1.1.2-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.221+baea90bfe",
58
58
  "@types/classnames": "^2.3.1"
59
59
  },
60
60
  "sideEffects": false,
@@ -65,5 +65,6 @@
65
65
  "dist-package/**",
66
66
  "!dist-package/tsconfig.tsbuildinfo",
67
67
  "src"
68
- ]
68
+ ],
69
+ "gitHead": "baea90bfed02f48aaae4af1eb68e67f9c0aa8ed6"
69
70
  }
@@ -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,7 +1,7 @@
1
1
  import React, { useState } from 'react'
2
- import type { ValueEditorProps } from '@toptal/picasso-query-builder'
3
- import {
4
- QueryBuilder,
2
+ import { QueryBuilder } from '@toptal/picasso-query-builder'
3
+ import type {
4
+ ValueEditorProps,
5
5
  type RuleGroupTypeAny,
6
6
  } from '@toptal/picasso-query-builder'
7
7
  import { Input, Select } from '@toptal/picasso'
@@ -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"}