@toptal/picasso-forms 49.0.1 → 49.1.0

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.
@@ -7,7 +7,7 @@ export declare const FormCompound: {
7
7
  (props: import("../Autocomplete/Autocomplete").Props): JSX.Element;
8
8
  displayName: string;
9
9
  };
10
- Input: import("react").ForwardRefExoticComponent<Pick<import("../Input").Props, keyof import("react-final-form").FieldProps<string | undefined, import("react-final-form").FieldRenderProps<string | undefined, HTMLInputElement>, HTMLInputElement>> & import("react").RefAttributes<HTMLInputElement>>;
10
+ Input: import("react").ForwardRefExoticComponent<Pick<import("../Input").Props, keyof import("react-final-form").FieldProps<string | undefined, import("react-final-form").FieldRenderProps<string | undefined, HTMLInputElement, string | undefined>, HTMLInputElement, string | undefined>> & import("react").RefAttributes<HTMLInputElement>>;
11
11
  Select: {
12
12
  <T_1 extends import("@toptal/picasso").SelectValueType, M extends boolean = false>(props: import("../Select/Select").Props<T_1, M>): JSX.Element;
13
13
  defaultProps: {};
@@ -95,7 +95,7 @@ export declare const FormCompound: {
95
95
  };
96
96
  RichTextEditor: (props: import("../RichTextEditor/RichTextEditor").Props) => JSX.Element;
97
97
  AvatarUpload: {
98
- (props: import("@toptal/picasso").AvatarUploadProps & import("react-final-form").FieldProps<import("@toptal/picasso").AvatarUploadFileUpload | undefined, import("react-final-form").FieldRenderProps<import("@toptal/picasso").AvatarUploadFileUpload | undefined, HTMLInputElement>, HTMLInputElement> & import("@toptal/picasso-shared/src").TextLabelProps): JSX.Element;
98
+ (props: import("@toptal/picasso").AvatarUploadProps & import("react-final-form").FieldProps<import("@toptal/picasso").AvatarUploadFileUpload | undefined, import("react-final-form").FieldRenderProps<import("@toptal/picasso").AvatarUploadFileUpload | undefined, HTMLInputElement, import("@toptal/picasso").AvatarUploadFileUpload | undefined>, HTMLInputElement, import("@toptal/picasso").AvatarUploadFileUpload | undefined> & import("@toptal/picasso-shared/src").TextLabelProps): JSX.Element;
99
99
  defaultProps: {};
100
100
  displayName: string;
101
101
  };
package/Input/Input.d.ts CHANGED
@@ -6,5 +6,5 @@ export declare type FormInputProps = Omit<InputProps, 'onResetClick'> & {
6
6
  onResetClick?: (set: (value: string) => void) => void;
7
7
  };
8
8
  export declare type Props = FormInputProps & FieldProps<InputProps['value']>;
9
- export declare const Input: React.ForwardRefExoticComponent<Pick<Props, keyof import("react-final-form").FieldProps<string | undefined, import("react-final-form").FieldRenderProps<string | undefined, HTMLInputElement>, HTMLInputElement>> & React.RefAttributes<HTMLInputElement>>;
9
+ export declare const Input: React.ForwardRefExoticComponent<Pick<Props, keyof import("react-final-form").FieldProps<string | undefined, import("react-final-form").FieldRenderProps<string | undefined, HTMLInputElement, string | undefined>, HTMLInputElement, string | undefined>> & React.RefAttributes<HTMLInputElement>>;
10
10
  export default Input;
package/index.d.ts CHANGED
@@ -10,3 +10,4 @@ export { FormCompound as Form } from './FormCompound';
10
10
  export { default as FieldWrapper } from './FieldWrapper';
11
11
  export type { FieldProps } from './Field';
12
12
  export type { FormConfigProps, RequiredVariant } from './FormConfig';
13
+ export { default as createFormValuesChangeDecorator } from './utils/form-values-change-decorator';
package/index.js CHANGED
@@ -6,5 +6,6 @@ export { OnChange, OnFocus, ExternallyChanged, OnBlur, } from 'react-final-form-
6
6
  // Picasso Forms exports
7
7
  export { FormCompound as Form } from './FormCompound';
8
8
  export { default as FieldWrapper } from './FieldWrapper';
9
+ export { default as createFormValuesChangeDecorator } from './utils/form-values-change-decorator';
9
10
  // hygen code generator inserts export statements above this comment.
10
11
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EACL,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,IAAI,IAAI,SAAS,EACjB,KAAK,IAAI,UAAU,GACpB,MAAM,kBAAkB,CAAA;AASzB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAKnE,OAAO,EACL,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,MAAM,GACP,MAAM,4BAA4B,CAAA;AAEnC,wBAAwB;AACxB,OAAO,EAAE,YAAY,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGxD,qEAAqE"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EACL,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,IAAI,IAAI,SAAS,EACjB,KAAK,IAAI,UAAU,GACpB,MAAM,kBAAkB,CAAA;AASzB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAKnE,OAAO,EACL,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,MAAM,GACP,MAAM,4BAA4B,CAAA;AAEnC,wBAAwB;AACxB,OAAO,EAAE,YAAY,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGxD,OAAO,EAAE,OAAO,IAAI,+BAA+B,EAAE,MAAM,sCAAsC,CAAA;AACjG,qEAAqE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toptal/picasso-forms",
3
- "version": "49.0.1",
3
+ "version": "49.1.0",
4
4
  "description": "Picasso form components",
5
5
  "author": "Toptal",
6
6
  "homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso-forms#readme",
@@ -34,8 +34,8 @@
34
34
  "detect-browser": "^5.3.0",
35
35
  "final-form": "^4.20.2",
36
36
  "final-form-arrays": "^3.0.2",
37
- "react-final-form": "^6.5.1",
38
- "react-final-form-arrays": "^3.1.3",
37
+ "react-final-form": "^6.5.9",
38
+ "react-final-form-arrays": "^3.1.4",
39
39
  "react-final-form-listeners": "^1.0.3"
40
40
  },
41
41
  "devDependencies": {
@@ -0,0 +1,9 @@
1
+ import { AnyObject, FormApi } from 'final-form';
2
+ declare type ChangedFields<T extends AnyObject> = Partial<Record<keyof T, boolean>>;
3
+ export declare const getChangedFields: <T extends AnyObject>(newValues: T, existingValues?: T | undefined, subscribedFields?: (keyof T)[] | undefined) => Partial<Record<keyof T, boolean>>;
4
+ interface Props<T extends AnyObject> {
5
+ onChange: (changedFields: ChangedFields<T>, values: T) => void;
6
+ subscribedFields?: (keyof T)[];
7
+ }
8
+ declare const createFormValuesChangeDecorator: <T extends AnyObject>({ onChange, subscribedFields, }: Props<T>) => (form: FormApi<T, Partial<T>>) => () => void;
9
+ export default createFormValuesChangeDecorator;
@@ -0,0 +1,30 @@
1
+ export const getChangedFields = (newValues, existingValues, subscribedFields) => {
2
+ if (!existingValues) {
3
+ return {};
4
+ }
5
+ const keysArray = subscribedFields !== null && subscribedFields !== void 0 ? subscribedFields : Object.keys(newValues);
6
+ const result = keysArray.reduce((changedFields, field) => {
7
+ if (newValues[field] !== existingValues[field]) {
8
+ changedFields[field] = true;
9
+ }
10
+ return changedFields;
11
+ }, {});
12
+ return result;
13
+ };
14
+ let oldValues = {};
15
+ const createFormValuesChangeDecorator = ({ onChange, subscribedFields, }) => {
16
+ return (form) => {
17
+ const unsubscribe = form.subscribe(nextState => {
18
+ const changedFields = getChangedFields(nextState.values, oldValues, subscribedFields);
19
+ if (Object.keys(changedFields).length > 0) {
20
+ onChange(changedFields, nextState.values);
21
+ oldValues = nextState.values;
22
+ }
23
+ }, { values: true });
24
+ return () => {
25
+ unsubscribe();
26
+ };
27
+ };
28
+ };
29
+ export default createFormValuesChangeDecorator;
30
+ //# sourceMappingURL=form-values-change-decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-values-change-decorator.js","sourceRoot":"","sources":["../../../src/utils/form-values-change-decorator/form-values-change-decorator.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,SAAY,EACZ,cAAkB,EAClB,gBAA8B,EACZ,EAAE;IACpB,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,EAAE,CAAA;KACV;IAED,MAAM,SAAS,GAAG,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAiB,CAAA;IAE7E,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAmB,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE;QACzE,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE;YAC9C,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;SAC5B;QAED,OAAO,aAAa,CAAA;IACtB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAOD,IAAI,SAAS,GAAc,EAAE,CAAA;AAE7B,MAAM,+BAA+B,GAAG,CAAsB,EAC5D,QAAQ,EACR,gBAAgB,GACP,EAAE,EAAE;IACb,OAAO,CAAC,IAAgB,EAAE,EAAE;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAChC,SAAS,CAAC,EAAE;YACV,MAAM,aAAa,GAAG,gBAAgB,CACpC,SAAS,CAAC,MAAM,EAChB,SAAc,EACd,gBAAgB,CACjB,CAAA;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;gBAEzC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAA;aAC7B;QACH,CAAC,EACD,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAA;QAED,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAA;QACf,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC,CAAA;AAED,eAAe,+BAA+B,CAAA"}
@@ -0,0 +1 @@
1
+ export { default } from './form-values-change-decorator';
@@ -0,0 +1,2 @@
1
+ export { default } from './form-values-change-decorator';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/form-values-change-decorator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA"}
package/utils/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { default as validators } from './validators';
2
2
  export { default as createScrollToErrorDecorator } from './scroll-to-error-decorator';
3
+ export { default as createFormValuesChangeDecorator } from './form-values-change-decorator';
3
4
  export { default as flatMap } from './flat-map';
4
5
  export { default as useFieldValidation } from './use-field-validation';
package/utils/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { default as validators } from './validators';
2
2
  export { default as createScrollToErrorDecorator } from './scroll-to-error-decorator';
3
+ export { default as createFormValuesChangeDecorator } from './form-values-change-decorator';
3
4
  export { default as flatMap } from './flat-map';
4
5
  export { default as useFieldValidation } from './use-field-validation';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AACrF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AACrF,OAAO,EAAE,OAAO,IAAI,+BAA+B,EAAE,MAAM,gCAAgC,CAAA;AAC3F,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAA"}