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

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- valueEditor?: ValueEditorComponentProps;
25
+ customValueEditor?: 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, valueEditor, 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, customValueEditor, 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;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"}
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"}
@@ -19,16 +19,20 @@ 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, valueEditor = 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, customValueEditor = 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({});
25
27
  const { showError } = useNotifications();
26
28
  const { handleQueryChange } = useOnQueryChange({
27
29
  maxGroupDepth,
28
30
  callback: onQueryChange,
29
31
  });
30
- const { validator, validationErrors, queryBuilderValid } = useQueryBuilderValidator({
32
+ const { validator } = useQueryBuilderValidator({
31
33
  fields,
34
+ onValidChange: setIsQueryBuilderValid,
35
+ onValidationResultChange: setValidationErrors,
32
36
  });
33
37
  const resetQuery = useCallback(() => {
34
38
  if (onQueryReset) {
@@ -88,7 +92,7 @@ const QueryBuilder = ({ fields, query, onQueryChange, onValidationChange, getOpe
88
92
  getDisabledFields,
89
93
  testIds,
90
94
  }, controlElements: {
91
- valueEditor,
95
+ valueEditor: customValueEditor,
92
96
  }, enableDragAndDrop: enableDragAndDrop })),
93
97
  !hideControls && (React.createElement(Container, { flex: true, justifyContent: 'flex-end', "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.controls },
94
98
  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-validation';
5
+ export { default as useQueryBuilderValidator } from './use-query-builder-validator';
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,gCAAgC,CAAA;AACpF,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,+BAA+B,CAAA;AACnF,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-validation';
5
+ export { default as useQueryBuilderValidator } from './use-query-builder-validator';
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,gCAAgC,CAAA;AACpF,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,+BAA+B,CAAA;AACnF,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
+ 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
@@ -0,0 +1 @@
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,4 +1,4 @@
1
- import { useCallback, useMemo, useState } from 'react';
1
+ import { useCallback, useMemo } from 'react';
2
2
  import { isRuleGroup } from 'react-querybuilder';
3
3
  const validateRule = (rule, fieldValidatorMap) => {
4
4
  const { field, id } = rule;
@@ -34,9 +34,7 @@ const validateQuery = (query, fieldValidatorMap) => {
34
34
  */
35
35
  return validateRule(query, fieldValidatorMap);
36
36
  };
37
- const useQueryBuilderValidation = ({ fields }) => {
38
- const [validationErrors, setValidationErrors] = useState({});
39
- const [queryBuilderValid, setIsQueryBuilderValid] = useState();
37
+ const useQueryBuilderValidator = ({ fields, onValidChange, onValidationResultChange, }) => {
40
38
  const fieldValidatorMap = useMemo(() => {
41
39
  return fields.reduce((acc, field) => (Object.assign(Object.assign({}, acc), { [field.name]: field.validator || null })), {});
42
40
  }, [fields]);
@@ -46,11 +44,11 @@ const useQueryBuilderValidation = ({ fields }) => {
46
44
  }
47
45
  const valResult = validateQuery(queryToValidate, fieldValidatorMap);
48
46
  const isValid = !Object.values(valResult).some(result => result !== true);
49
- setIsQueryBuilderValid === null || setIsQueryBuilderValid === void 0 ? void 0 : setIsQueryBuilderValid(isValid);
50
- setValidationErrors === null || setValidationErrors === void 0 ? void 0 : setValidationErrors(valResult);
47
+ onValidChange === null || onValidChange === void 0 ? void 0 : onValidChange(isValid);
48
+ onValidationResultChange === null || onValidationResultChange === void 0 ? void 0 : onValidationResultChange(valResult);
51
49
  return isValid;
52
- }, [fieldValidatorMap]);
53
- return { validator, validationErrors, queryBuilderValid };
50
+ }, [fieldValidatorMap, onValidChange, onValidationResultChange]);
51
+ return { validator };
54
52
  };
55
- export default useQueryBuilderValidation;
56
- //# sourceMappingURL=use-query-builder-validation.js.map
53
+ export default useQueryBuilderValidator;
54
+ //# sourceMappingURL=use-query-builder-validator.js.map
@@ -0,0 +1 @@
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toptal/picasso-query-builder",
3
- "version": "7.2.16-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.4+baea90bfe",
3
+ "version": "7.2.16",
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
- "@toptal/picasso-tailwind": ">=2.7",
27
26
  "react": ">=16.12.0 < 19.0.0",
27
+ "@toptal/picasso-tailwind": ">=2.7",
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.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",
34
+ "@toptal/picasso-button": "4.0.9",
35
+ "@toptal/picasso-select": "4.0.7",
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.8",
42
+ "@toptal/picasso-input": "4.0.7",
43
+ "@toptal/picasso-list": "5.0.3",
44
+ "@toptal/picasso-loader": "3.0.1",
45
+ "@toptal/picasso-number-input": "4.0.7",
46
+ "@toptal/picasso-prompt-modal": "2.0.20",
47
+ "@toptal/picasso-notification": "4.0.9",
48
+ "@toptal/picasso-utils": "2.0.0",
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.2-alpha-CPT-1332-fe-externalize-validation-again-in-picasso-query-builder-baea90bfe.221+baea90bfe",
57
+ "@toptal/picasso-test-utils": "1.1.1",
58
58
  "@types/classnames": "^2.3.1"
59
59
  },
60
60
  "sideEffects": false,
@@ -65,6 +65,5 @@
65
65
  "dist-package/**",
66
66
  "!dist-package/tsconfig.tsbuildinfo",
67
67
  "src"
68
- ],
69
- "gitHead": "baea90bfed02f48aaae4af1eb68e67f9c0aa8ed6"
68
+ ]
70
69
  }
@@ -32,6 +32,7 @@ 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'
35
36
 
36
37
  type ValueEditorComponentProps = ComponentType<DefaultValueEditorProps>
37
38
 
@@ -53,7 +54,7 @@ type Props = {
53
54
  /** Defines a function that is called when the user submits a query constructed in the QB. This function takes a single argument - constructed query. */
54
55
  onSubmit?: (query: RuleGroupTypeAny) => void
55
56
  /** 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.). */
56
- valueEditor?: ValueEditorComponentProps
57
+ customValueEditor?: ValueEditorComponentProps
57
58
  /** Defines the loading state. */
58
59
  loading?: boolean
59
60
  /** Defines padded layout. */
@@ -86,7 +87,7 @@ const QueryBuilder = ({
86
87
  maxGroupDepth = 3,
87
88
  loading = false,
88
89
  onSubmit,
89
- valueEditor = ValueEditor,
90
+ customValueEditor = ValueEditor,
90
91
  footer,
91
92
  hideControls,
92
93
  header,
@@ -100,6 +101,10 @@ const QueryBuilder = ({
100
101
  const classes = useStyles()
101
102
 
102
103
  const [submitButtonClicked, setSubmitButtonClicked] = useState(false)
104
+ const [queryBuilderValid, setIsQueryBuilderValid] = useState<
105
+ boolean | undefined
106
+ >()
107
+ const [validationErrors, setValidationErrors] = useState<ValidatorResult>({})
103
108
 
104
109
  const { showError } = useNotifications()
105
110
 
@@ -108,10 +113,11 @@ const QueryBuilder = ({
108
113
  callback: onQueryChange,
109
114
  })
110
115
 
111
- const { validator, validationErrors, queryBuilderValid } =
112
- useQueryBuilderValidator({
113
- fields,
114
- })
116
+ const { validator } = useQueryBuilderValidator({
117
+ fields,
118
+ onValidChange: setIsQueryBuilderValid,
119
+ onValidationResultChange: setValidationErrors,
120
+ })
115
121
 
116
122
  const resetQuery = useCallback(() => {
117
123
  if (onQueryReset) {
@@ -216,7 +222,7 @@ const QueryBuilder = ({
216
222
  } as QueryBuilderContext
217
223
  }
218
224
  controlElements={{
219
- valueEditor,
225
+ valueEditor: customValueEditor,
220
226
  }}
221
227
  enableDragAndDrop={enableDragAndDrop}
222
228
  />
@@ -1,7 +1,7 @@
1
1
  import React, { useState } from 'react'
2
- import { QueryBuilder } from '@toptal/picasso-query-builder'
3
- import type {
4
- ValueEditorProps,
2
+ import type { ValueEditorProps } from '@toptal/picasso-query-builder'
3
+ import {
4
+ QueryBuilder,
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
- valueEditor={CustomValueEditor}
70
+ customValueEditor={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-validation'
5
+ export { default as useQueryBuilderValidator } from './use-query-builder-validator'
6
6
  export { default as validateValueEditor } from './validate-value-editor'
@@ -1,8 +1,8 @@
1
- import { act, renderHook } from '@testing-library/react-hooks'
1
+ import { 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 useQueryBuilderValidation from './use-query-builder-validation'
5
+ import useQueryBuilderValidator from './use-query-builder-validator'
6
6
 
7
7
  const validateMock1 = (rule: RuleType) => {
8
8
  if (!rule.value) {
@@ -97,26 +97,27 @@ const groupedQuery = (field3value = 'should be this'): RuleGroupTypeAny => ({
97
97
  ],
98
98
  })
99
99
 
100
- describe('useQueryBuilderValidation', () => {
100
+ const onValidChangeMock = jest.fn()
101
+ const onValidationResultChangeMock = jest.fn()
102
+
103
+ describe('useQueryBuilderValidator', () => {
101
104
  describe('when query has only a single group of rule', () => {
102
105
  describe('when query does not contain an invalid rule', () => {
103
106
  it('returns true', () => {
104
107
  const { result } = renderHook(() =>
105
- useQueryBuilderValidation({
108
+ useQueryBuilderValidator({
106
109
  fields,
110
+ onValidChange: onValidChangeMock,
111
+ onValidationResultChange: onValidationResultChangeMock,
107
112
  })
108
113
  )
109
114
 
110
115
  const { validator } = result.current
111
116
 
112
- act(() => {
113
- expect(validator(query())).toBe(true)
114
- })
115
-
116
- const { validationErrors, queryBuilderValid } = result.current
117
+ expect(validator(query())).toBe(true)
117
118
 
118
- expect(queryBuilderValid).toBe(true)
119
- expect(validationErrors).toEqual({
119
+ expect(onValidChangeMock).toHaveBeenCalledWith(true)
120
+ expect(onValidationResultChangeMock).toHaveBeenCalledWith({
120
121
  rule1: true,
121
122
  rule2: true,
122
123
  rule3: true,
@@ -127,21 +128,21 @@ describe('useQueryBuilderValidation', () => {
127
128
  describe('when query contains an invalid rule', () => {
128
129
  it('returns false', () => {
129
130
  const { result } = renderHook(() =>
130
- useQueryBuilderValidation({
131
+ useQueryBuilderValidator({
131
132
  fields,
133
+ onValidChange: onValidChangeMock,
134
+ onValidationResultChange: onValidationResultChangeMock,
132
135
  })
133
136
  )
134
137
 
135
138
  const { validator } = result.current
136
139
 
137
- act(() => {
138
- expect(validator(query('invalid value for field2'))).toBe(false)
139
- })
140
+ const isValid = validator(query('invalid value for field2'))
140
141
 
141
- const { validationErrors, queryBuilderValid } = result.current
142
+ expect(isValid).toBe(false)
142
143
 
143
- expect(queryBuilderValid).toBe(false)
144
- expect(validationErrors).toEqual({
144
+ expect(onValidChangeMock).toHaveBeenCalledWith(false)
145
+ expect(onValidationResultChangeMock).toHaveBeenCalledWith({
145
146
  rule1: true,
146
147
  rule2: true,
147
148
  rule3: {
@@ -157,21 +158,18 @@ describe('useQueryBuilderValidation', () => {
157
158
  describe('when query does not contain invalid rule', () => {
158
159
  it('returns true', () => {
159
160
  const { result } = renderHook(() =>
160
- useQueryBuilderValidation({
161
+ useQueryBuilderValidator({
161
162
  fields,
163
+ onValidChange: onValidChangeMock,
164
+ onValidationResultChange: onValidationResultChangeMock,
162
165
  })
163
166
  )
164
167
 
165
168
  const { validator } = result.current
166
169
 
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({
170
+ expect(validator(groupedQuery())).toBe(true)
171
+ expect(onValidChangeMock).toHaveBeenCalledWith(true)
172
+ expect(onValidationResultChangeMock).toHaveBeenCalledWith({
175
173
  group1: true,
176
174
  group2: true,
177
175
  rule1: true,
@@ -184,21 +182,18 @@ describe('useQueryBuilderValidation', () => {
184
182
  describe('when query contains invalid rule', () => {
185
183
  it('returns false', () => {
186
184
  const { result } = renderHook(() =>
187
- useQueryBuilderValidation({
185
+ useQueryBuilderValidator({
188
186
  fields,
187
+ onValidChange: onValidChangeMock,
188
+ onValidationResultChange: onValidationResultChangeMock,
189
189
  })
190
190
  )
191
191
 
192
192
  const { validator } = result.current
193
193
 
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({
194
+ expect(validator(groupedQuery('invalid rule'))).toBe(false)
195
+ expect(onValidChangeMock).toHaveBeenCalledWith(false)
196
+ expect(onValidationResultChangeMock).toHaveBeenCalledWith({
202
197
  group1: true,
203
198
  group2: true,
204
199
  rule1: true,
@@ -1,4 +1,4 @@
1
- import { useCallback, useMemo, useState } from 'react'
1
+ import { useCallback, useMemo } from 'react'
2
2
  import type {
3
3
  RuleGroupTypeAny,
4
4
  RuleType,
@@ -14,6 +14,8 @@ 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
17
19
  }
18
20
 
19
21
  const validateRule = (rule: RuleType, fieldValidatorMap: ValidatorMap) => {
@@ -70,11 +72,11 @@ const validateQuery = (
70
72
  return validateRule(query as RuleType, fieldValidatorMap)
71
73
  }
72
74
 
73
- const useQueryBuilderValidation = ({ fields }: Props) => {
74
- const [validationErrors, setValidationErrors] = useState<ValidatorResult>({})
75
- const [queryBuilderValid, setIsQueryBuilderValid] = useState<
76
- boolean | undefined
77
- >()
75
+ const useQueryBuilderValidator = ({
76
+ fields,
77
+ onValidChange,
78
+ onValidationResultChange,
79
+ }: Props) => {
78
80
  const fieldValidatorMap: ValidatorMap = useMemo(() => {
79
81
  return fields.reduce(
80
82
  (acc, field) => ({
@@ -95,15 +97,15 @@ const useQueryBuilderValidation = ({ fields }: Props) => {
95
97
 
96
98
  const isValid = !Object.values(valResult).some(result => result !== true)
97
99
 
98
- setIsQueryBuilderValid?.(isValid)
99
- setValidationErrors?.(valResult)
100
+ onValidChange?.(isValid)
101
+ onValidationResultChange?.(valResult)
100
102
 
101
103
  return isValid
102
104
  },
103
- [fieldValidatorMap]
105
+ [fieldValidatorMap, onValidChange, onValidationResultChange]
104
106
  )
105
107
 
106
- return { validator, validationErrors, queryBuilderValid }
108
+ return { validator }
107
109
  }
108
110
 
109
- export default useQueryBuilderValidation
111
+ export default useQueryBuilderValidator
package/LICENSE DELETED
@@ -1,20 +0,0 @@
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.
@@ -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
- };
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
@@ -1 +0,0 @@
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 +0,0 @@
1
- {"version":3,"file":"use-query-builder-validation.js","sourceRoot":"","sources":["../../../src/utils/use-query-builder-validation.ts"],"names":[],"mappings":"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"}