@neovici/cosmoz-form 2.1.0 → 2.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/dist/async-rule.d.ts +83 -0
- package/dist/async-rule.d.ts.map +1 -0
- package/dist/async-rule.js +20 -0
- package/dist/index.d.ts +13 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -5
- package/dist/make-debounce-runner.d.ts +4 -0
- package/dist/make-debounce-runner.d.ts.map +1 -0
- package/dist/make-debounce-runner.js +50 -0
- package/dist/make-take-latest-runner.d.ts +4 -0
- package/dist/make-take-latest-runner.d.ts.map +1 -0
- package/dist/make-take-latest-runner.js +27 -0
- package/dist/test/make-debounce-runner.test.d.ts +2 -0
- package/dist/test/make-debounce-runner.test.d.ts.map +1 -0
- package/dist/test/make-debounce-runner.test.js +123 -0
- package/dist/test/make-take-latest-runner.test.d.ts +2 -0
- package/dist/test/make-take-latest-runner.test.d.ts.map +1 -0
- package/dist/test/make-take-latest-runner.test.js +110 -0
- package/dist/test/use-async-form-core.test.d.ts +2 -0
- package/dist/test/use-async-form-core.test.d.ts.map +1 -0
- package/dist/test/use-async-form-core.test.js +238 -0
- package/dist/test/use-async-rules.test.d.ts +2 -0
- package/dist/test/use-async-rules.test.d.ts.map +1 -0
- package/dist/test/use-async-rules.test.js +180 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/use-async-form-core.d.ts +21 -0
- package/dist/use-async-form-core.d.ts.map +1 -0
- package/dist/use-async-form-core.js +71 -0
- package/dist/use-items/use-async-rules.d.ts +17 -0
- package/dist/use-items/use-async-rules.d.ts.map +1 -0
- package/dist/use-items/use-async-rules.js +78 -0
- package/dist/use-items/use-items.d.ts.map +1 -1
- package/dist/use-items/use-items.js +2 -2
- package/dist/use-validated-form$.d.ts +4 -1
- package/dist/use-validated-form$.d.ts.map +1 -1
- package/dist/use-validated-form$.js +4 -1
- package/dist/validation/rules.d.ts.map +1 -1
- package/dist/validation/rules.js +7 -4
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-items.d.ts","sourceRoot":"","sources":["../../src/use-items/use-items.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-items.d.ts","sourceRoot":"","sources":["../../src/use-items/use-items.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAkC,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAc,QAAQ,EAAE,MAAM,eAAe,CAAC;AAErD,UAAU,KAAK,CAAC,CAAC,SAAS,MAAM;IAC/B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;CACtB;AAYD,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI;IAC5C,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CACP,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EACxD,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KACd,IAAI,CAAC;IACV,SAAS,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACrE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;CAC1D,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,MAAM,EAAE,sCAK5C,KAAK,CAAC,CAAC,CAAC,GAAG;IACb,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;CAC5B,KAAG,YAAY,CAAC,CAAC,CA+FjB,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,EAAE,oBAAoB,KAAK,CAAC,CAAC,CAAC,oBAStE,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { useCallback, useMemo, useState } from '@pionjs/pion';
|
|
2
1
|
import { invoke } from '@neovici/cosmoz-utils/function';
|
|
3
|
-
import {
|
|
2
|
+
import { useCallback, useMemo, useState } from '@pionjs/pion';
|
|
4
3
|
import { touch, touched } from '../touch';
|
|
4
|
+
import { applyRules } from './apply-rules';
|
|
5
5
|
const changes = (indexOrChanges, update) => {
|
|
6
6
|
if (Array.isArray(indexOrChanges)) {
|
|
7
7
|
return indexOrChanges;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ItemRule } from '.';
|
|
2
|
+
import type { AsyncItemRule } from './async-rule';
|
|
2
3
|
import type { Fields } from './types';
|
|
3
4
|
import { UseValidatedForm } from './use-validated-form';
|
|
4
5
|
export type ProgressValue = string | number;
|
|
@@ -7,17 +8,19 @@ export interface Props<T extends object> {
|
|
|
7
8
|
fields: Fields<T>;
|
|
8
9
|
initial: T;
|
|
9
10
|
rules?: ItemRule<T>[];
|
|
11
|
+
asyncRules?: readonly AsyncItemRule<T>[];
|
|
10
12
|
onSave?: (values: T, initial: T, setProgress?: (p: Progress) => void) => PromiseLike<unknown>;
|
|
11
13
|
allowEmpty?: boolean;
|
|
12
14
|
}
|
|
13
15
|
interface Opts {
|
|
14
16
|
disabled: boolean;
|
|
17
|
+
processing: boolean;
|
|
15
18
|
progress?: Progress;
|
|
16
19
|
save$?: PromiseLike<unknown>;
|
|
17
20
|
onSave: () => void;
|
|
18
21
|
}
|
|
19
22
|
export interface UseValidatedForm$<T extends object> extends UseValidatedForm<T>, Opts {
|
|
20
23
|
}
|
|
21
|
-
declare function useValidatedForm$<T extends object>({ fields, initial, rules, onSave, allowEmpty, }: Props<T>): UseValidatedForm$<T>;
|
|
24
|
+
declare function useValidatedForm$<T extends object>({ fields, initial, rules, asyncRules, onSave, allowEmpty, }: Props<T>): UseValidatedForm$<T>;
|
|
22
25
|
export { useValidatedForm$ };
|
|
23
26
|
//# sourceMappingURL=use-validated-form$.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-validated-form$.d.ts","sourceRoot":"","sources":["../src/use-validated-form$.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"use-validated-form$.d.ts","sourceRoot":"","sources":["../src/use-validated-form$.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAoB,MAAM,sBAAsB,CAAC;AAE1E,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAC5C,MAAM,MAAM,QAAQ,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAEtD,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,MAAM;IACtC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,MAAM,CAAC,EAAE,CACR,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,EACV,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,KAC/B,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,IAAI;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAClD,SAAQ,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI;CAAG;AAErC,iBAAS,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,EAC5C,MAAM,EACN,OAAO,EACP,KAAK,EACL,UAAU,EACV,MAAM,EACN,UAAU,GACV,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAqBjC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { useCallback, useState } from '@pionjs/pion';
|
|
2
|
+
import { useAsyncFormCore } from './use-async-form-core';
|
|
2
3
|
import { useValidatedForm } from './use-validated-form';
|
|
3
|
-
function useValidatedForm$({ fields, initial, rules, onSave, allowEmpty, }) {
|
|
4
|
+
function useValidatedForm$({ fields, initial, rules, asyncRules, onSave, allowEmpty, }) {
|
|
4
5
|
const form = useValidatedForm({ fields, initial, rules });
|
|
6
|
+
const { processing } = useAsyncFormCore(form, asyncRules);
|
|
5
7
|
const { values, invalid } = form;
|
|
6
8
|
const [save$, setSave$] = useState();
|
|
7
9
|
const [progress, setProgress] = useState();
|
|
@@ -12,6 +14,7 @@ function useValidatedForm$({ fields, initial, rules, onSave, allowEmpty, }) {
|
|
|
12
14
|
save$,
|
|
13
15
|
onSave: useCallback(() => setSave$(onSave?.(values, initial, setProgress)), [onSave, values, initial]),
|
|
14
16
|
disabled,
|
|
17
|
+
processing,
|
|
15
18
|
progress,
|
|
16
19
|
};
|
|
17
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/validation/rules.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAIhC,eAAO,MAAM,WAAW,MAAM,EAC7B,WAAW,KAAK,EAChB,YAAY,KAAK,CAAC;AAEnB,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,OAAO,CAAC,YAIQ,CAAC;AAE5C,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAoB,CAAC;AAEhF,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,OAAO,CAAC,mBAAoC,CAAC;AAEzE,eAAO,MAAM,YAAY,GACvB,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACnD,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,KACzC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/validation/rules.ts"],"names":[],"mappings":"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"}
|
package/dist/validation/rules.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { _ } from '@neovici/cosmoz-i18next';
|
|
2
|
-
import { luhn as isLuhn } from '../util/luhn';
|
|
3
|
-
import { gln as isGln } from '../util/gln';
|
|
4
2
|
import { ensureDate } from '@neovici/cosmoz-utils/date';
|
|
5
3
|
import { format } from 'date-fns/format';
|
|
6
4
|
import { addDays } from 'date-fns/fp/addDays';
|
|
5
|
+
import { gln as isGln } from '../util/gln';
|
|
6
|
+
import { luhn as isLuhn } from '../util/luhn';
|
|
7
7
|
export const STRING_TEXT = 200, STRING_LONG = 50, STRING_SHORT = 20;
|
|
8
8
|
export const missing = (value) => value == null ||
|
|
9
9
|
value === '' ||
|
|
@@ -11,8 +11,11 @@ export const missing = (value) => value == null ||
|
|
|
11
11
|
(Array.isArray(value) && value.length < 1);
|
|
12
12
|
export const exists = (value) => !missing(value);
|
|
13
13
|
export const required = (value) => missing(value) && _('Required');
|
|
14
|
-
export const requiredWhen = (condition) => (value, values) => condition(value, values) ? required(value) : false;
|
|
15
|
-
export const requireEither = (otherField) => (value, values) => missing(value) &&
|
|
14
|
+
export const requiredWhen = (condition) => (value, values) => values != null && condition(value, values) ? required(value) : false;
|
|
15
|
+
export const requireEither = (otherField) => (value, values) => missing(value) &&
|
|
16
|
+
values != null &&
|
|
17
|
+
missing(values[otherField]) &&
|
|
18
|
+
_('Required');
|
|
16
19
|
export function notAnOption(options, key) {
|
|
17
20
|
return (value) => !missing(value) &&
|
|
18
21
|
options != null &&
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neovici/cosmoz-form",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "A pionjs component",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"web-components",
|
|
@@ -76,20 +76,21 @@
|
|
|
76
76
|
"@commitlint/cli": "^20.0.0",
|
|
77
77
|
"@commitlint/config-conventional": "^20.0.0",
|
|
78
78
|
"@neovici/cfg": "^2.8.0",
|
|
79
|
-
"lint-staged": "^15.4.3",
|
|
80
79
|
"@neovici/testing": "^2.0.0",
|
|
81
80
|
"@open-wc/testing": "^4.0.0",
|
|
82
81
|
"@open-wc/testing-helpers": "^3.0.1",
|
|
83
82
|
"@semantic-release/changelog": "^6.0.0",
|
|
84
83
|
"@semantic-release/git": "^10.0.0",
|
|
85
|
-
"@storybook/addon-
|
|
86
|
-
"@storybook/
|
|
87
|
-
"@storybook/web-components
|
|
84
|
+
"@storybook/addon-docs": "^10.2.17",
|
|
85
|
+
"@storybook/addon-links": "^10.2.17",
|
|
86
|
+
"@storybook/web-components": "^10.2.17",
|
|
87
|
+
"@storybook/web-components-vite": "^10.2.17",
|
|
88
88
|
"@types/mocha": "^10.0.0",
|
|
89
89
|
"@types/node": "^24.0.0",
|
|
90
90
|
"esbuild": "^0.27.0",
|
|
91
91
|
"http-server": "^14.1.1",
|
|
92
92
|
"husky": "^9.0.11",
|
|
93
|
+
"lint-staged": "^15.4.3",
|
|
93
94
|
"semantic-release": "^25.0.0",
|
|
94
95
|
"sinon": "^19.0.0",
|
|
95
96
|
"storybook": "^10.0.0"
|