@toptal/picasso-forms 49.1.0 → 49.2.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.
- package/index.d.ts +2 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/package.json +2 -1
- package/utils/form-values-change-decorator/form-values-change-decorator.d.ts +1 -1
- package/utils/form-values-change-decorator/form-values-change-decorator.js.map +1 -1
- package/utils/form-values-change-decorator/index.d.ts +1 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/index.js.map +1 -1
- package/utils/use-form-auto-save/index.d.ts +1 -0
- package/utils/use-form-auto-save/index.js +2 -0
- package/utils/use-form-auto-save/index.js.map +1 -0
- package/utils/use-form-auto-save/use-form-auto-save.d.ts +12 -0
- package/utils/use-form-auto-save/use-form-auto-save.js +35 -0
- package/utils/use-form-auto-save/use-form-auto-save.js.map +1 -0
package/index.d.ts
CHANGED
|
@@ -11,3 +11,5 @@ export { default as FieldWrapper } from './FieldWrapper';
|
|
|
11
11
|
export type { FieldProps } from './Field';
|
|
12
12
|
export type { FormConfigProps, RequiredVariant } from './FormConfig';
|
|
13
13
|
export { default as createFormValuesChangeDecorator } from './utils/form-values-change-decorator';
|
|
14
|
+
export type { ChangedFields } from './utils/form-values-change-decorator';
|
|
15
|
+
export { default as useFormAutoSave } from './utils/use-form-auto-save/use-form-auto-save';
|
package/index.js
CHANGED
|
@@ -7,5 +7,6 @@ export { OnChange, OnFocus, ExternallyChanged, OnBlur, } from 'react-final-form-
|
|
|
7
7
|
export { FormCompound as Form } from './FormCompound';
|
|
8
8
|
export { default as FieldWrapper } from './FieldWrapper';
|
|
9
9
|
export { default as createFormValuesChangeDecorator } from './utils/form-values-change-decorator';
|
|
10
|
+
export { default as useFormAutoSave } from './utils/use-form-auto-save/use-form-auto-save';
|
|
10
11
|
// hygen code generator inserts export statements above this comment.
|
|
11
12
|
//# 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,OAAO,EAAE,OAAO,IAAI,+BAA+B,EAAE,MAAM,sCAAsC,CAAA;
|
|
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;AAEjG,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,+CAA+C,CAAA;AAC1F,qEAAqE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toptal/picasso-forms",
|
|
3
|
-
"version": "49.
|
|
3
|
+
"version": "49.2.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",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"classnames": "^2.3.1",
|
|
34
|
+
"debounce": "^1.2.1",
|
|
34
35
|
"detect-browser": "^5.3.0",
|
|
35
36
|
"final-form": "^4.20.2",
|
|
36
37
|
"final-form-arrays": "^3.0.2",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AnyObject, FormApi } from 'final-form';
|
|
2
|
-
declare type ChangedFields<T extends AnyObject> = Partial<Record<keyof T, boolean>>;
|
|
2
|
+
export declare type ChangedFields<T extends AnyObject> = Partial<Record<keyof T, boolean>>;
|
|
3
3
|
export declare const getChangedFields: <T extends AnyObject>(newValues: T, existingValues?: T | undefined, subscribedFields?: (keyof T)[] | undefined) => Partial<Record<keyof T, boolean>>;
|
|
4
4
|
interface Props<T extends AnyObject> {
|
|
5
5
|
onChange: (changedFields: ChangedFields<T>, values: T) => void;
|
|
@@ -1 +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":"
|
|
1
|
+
{"version":3,"file":"form-values-change-decorator.js","sourceRoot":"","sources":["../../../src/utils/form-values-change-decorator/form-values-change-decorator.ts"],"names":[],"mappings":"AAMA,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"}
|
package/utils/index.d.ts
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
3
|
export { default as createFormValuesChangeDecorator } from './form-values-change-decorator';
|
|
4
|
+
export { default as useFormAutoSave } from './use-form-auto-save';
|
|
4
5
|
export { default as flatMap } from './flat-map';
|
|
5
6
|
export { default as useFieldValidation } from './use-field-validation';
|
package/utils/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { default as validators } from './validators';
|
|
2
2
|
export { default as createScrollToErrorDecorator } from './scroll-to-error-decorator';
|
|
3
3
|
export { default as createFormValuesChangeDecorator } from './form-values-change-decorator';
|
|
4
|
+
export { default as useFormAutoSave } from './use-form-auto-save';
|
|
4
5
|
export { default as flatMap } from './flat-map';
|
|
5
6
|
export { default as useFieldValidation } from './use-field-validation';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/utils/index.js.map
CHANGED
|
@@ -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,+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"}
|
|
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,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './use-form-auto-save';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/use-form-auto-save/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AnyObject } from 'final-form';
|
|
2
|
+
import { ChangedFields } from '../form-values-change-decorator';
|
|
3
|
+
interface Props<T extends AnyObject> {
|
|
4
|
+
subscribedFields?: (keyof T)[];
|
|
5
|
+
onFormValuesChange: (changedFields: ChangedFields<T>, values: T) => void;
|
|
6
|
+
debounceDelay?: number;
|
|
7
|
+
}
|
|
8
|
+
declare const useFormAutoSave: <T extends AnyObject>(props: Props<T>) => {
|
|
9
|
+
savingFields: Partial<Record<keyof T, boolean>> | undefined;
|
|
10
|
+
autoSaveDecorator: (form: import("final-form").FormApi<T, Partial<T>>) => () => void;
|
|
11
|
+
};
|
|
12
|
+
export default useFormAutoSave;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
11
|
+
import { debounce } from 'debounce';
|
|
12
|
+
import createFormValuesChangeDecorator from '../form-values-change-decorator';
|
|
13
|
+
const useFormAutoSave = (props) => {
|
|
14
|
+
const [savingFields, setSavingFields] = useState();
|
|
15
|
+
const { onFormValuesChange, subscribedFields, debounceDelay: delay = 1000, } = props;
|
|
16
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
17
|
+
const handleValueChange = useCallback(debounce((changedValues, debouncedValues) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
yield onFormValuesChange(changedValues, debouncedValues);
|
|
19
|
+
setSavingFields(undefined);
|
|
20
|
+
}), delay), [delay, onFormValuesChange]);
|
|
21
|
+
const handleFormValuesChange = useCallback((changedFields, values) => {
|
|
22
|
+
setSavingFields(changedFields);
|
|
23
|
+
handleValueChange(changedFields, values);
|
|
24
|
+
}, [handleValueChange]);
|
|
25
|
+
const autoSaveDecorator = useMemo(() => createFormValuesChangeDecorator({
|
|
26
|
+
subscribedFields,
|
|
27
|
+
onChange: handleFormValuesChange,
|
|
28
|
+
}), [handleFormValuesChange, subscribedFields]);
|
|
29
|
+
return {
|
|
30
|
+
savingFields,
|
|
31
|
+
autoSaveDecorator,
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export default useFormAutoSave;
|
|
35
|
+
//# sourceMappingURL=use-form-auto-save.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form-auto-save.js","sourceRoot":"","sources":["../../../src/utils/use-form-auto-save/use-form-auto-save.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,OAAO,+BAEN,MAAM,iCAAiC,CAAA;AAQxC,MAAM,eAAe,GAAG,CAAsB,KAAe,EAAE,EAAE;IAC/D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,EAE7C,CAAA;IAEH,MAAM,EACJ,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EAAE,KAAK,GAAG,IAAI,GAC5B,GAAG,KAAK,CAAA;IAET,uDAAuD;IACvD,MAAM,iBAAiB,GAAG,WAAW,CACnC,QAAQ,CAAC,CAAO,aAA+B,EAAE,eAAkB,EAAE,EAAE;QACrE,MAAM,kBAAkB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAA;QAExD,eAAe,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC,CAAA,EAAE,KAAK,CAAC,EACT,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAC5B,CAAA;IAED,MAAM,sBAAsB,GAAG,WAAW,CACxC,CAAC,aAA+B,EAAE,MAAS,EAAE,EAAE;QAC7C,eAAe,CAAC,aAAa,CAAC,CAAA;QAE9B,iBAAiB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC1C,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB,CAAA;IAED,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CACH,+BAA+B,CAAC;QAC9B,gBAAgB;QAChB,QAAQ,EAAE,sBAAsB;KACjC,CAAC,EACJ,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,CAC3C,CAAA;IAED,OAAO;QACL,YAAY;QACZ,iBAAiB;KAClB,CAAA;AACH,CAAC,CAAA;AAED,eAAe,eAAe,CAAA"}
|