@reformer/core 11.0.0-beta.3 → 11.0.0-beta.4
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/behaviors.d.ts +1 -1
- package/dist/behaviors.js +37 -37
- package/dist/create-model-Dxh9cfLp.js +97 -0
- package/dist/form/behaviors/collections.d.ts +50 -0
- package/dist/form/behaviors/context.d.ts +23 -0
- package/dist/form/behaviors/index.d.ts +28 -0
- package/dist/form/behaviors/internals.d.ts +26 -0
- package/dist/form/{behaviors-node.d.ts → behaviors/node.d.ts} +3 -3
- package/dist/form/behaviors/operators.d.ts +51 -0
- package/dist/form/behaviors/types.d.ts +17 -0
- package/dist/form/create-core-form.d.ts +3 -3
- package/dist/form/create-form.d.ts +1 -1
- package/dist/form/index.d.ts +10 -16
- package/dist/form/nodes/model-array-node.d.ts +1 -1
- package/dist/form/types/contracts.d.ts +9 -6
- package/dist/form/types/validation-schema.d.ts +1 -1
- package/dist/form/{validation-config.d.ts → validation/config.d.ts} +3 -3
- package/dist/form/validation/context.d.ts +27 -0
- package/dist/form/{error-handler.d.ts → validation/error-handler.d.ts} +1 -1
- package/dist/form/validation/index.d.ts +23 -28
- package/dist/form/validation/operators.d.ts +42 -0
- package/dist/form/validation/run.d.ts +45 -0
- package/dist/form/{validation-strategy.d.ts → validation/strategy.d.ts} +2 -2
- package/dist/form/validation/types.d.ts +28 -0
- package/dist/form/{validation/validators → validators}/date-utils.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/email.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/file-type.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/file-utils.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/future-date.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/index.d.ts +6 -4
- package/dist/form/{validation/validators → validators}/integer.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/is-date.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/is-number.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/max-age.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/max-date.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/max-file-size.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/max-files.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/max-length.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/max-total-file-size.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/max.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/min-age.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/min-date.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/min-file-size.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/min-files.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/min-length.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/min.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/multiple-of.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/non-negative.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/non-zero.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/past-date.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/pattern.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/phone.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/required.d.ts +1 -1
- package/dist/form/{validation/validators → validators}/url.d.ts +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.js +246 -71
- package/dist/{state/form-model.d.ts → model/create-model.d.ts} +0 -14
- package/dist/{state → model}/index.d.ts +10 -11
- package/dist/model/model-nodes.d.ts +60 -0
- package/dist/model/model-signals-proxy.d.ts +32 -0
- package/dist/model/model-value-proxy.d.ts +3 -0
- package/dist/{state → model}/safe-effect.d.ts +1 -1
- package/dist/model-signals-proxy-mV3WGdlO.js +233 -0
- package/dist/model.d.ts +2 -0
- package/dist/model.js +21 -0
- package/dist/{form → platforms/react}/hooks/types.d.ts +1 -1
- package/dist/{form → platforms/react}/hooks/use-form-bundle.d.ts +1 -1
- package/dist/{form → platforms/react}/hooks/use-form-validation.d.ts +3 -3
- package/dist/{form → platforms/react}/hooks/useArrayLength.d.ts +1 -1
- package/dist/{form → platforms/react}/hooks/useFormControl.d.ts +3 -3
- package/dist/{form → platforms/react}/hooks/useFormControlValue.d.ts +2 -2
- package/dist/platforms/react/index.d.ts +23 -0
- package/dist/signals.d.ts +1 -1
- package/dist/strategy-DA3JwxsR.js +170 -0
- package/dist/validation.d.ts +1 -1
- package/dist/validation.js +10 -165
- package/dist/validators/email.d.ts +1 -1
- package/dist/validators/future-date.d.ts +1 -1
- package/dist/validators/integer.d.ts +1 -1
- package/dist/validators/is-date.d.ts +1 -1
- package/dist/validators/is-number.d.ts +1 -1
- package/dist/validators/max-age.d.ts +1 -1
- package/dist/validators/max-date.d.ts +1 -1
- package/dist/validators/max-length.d.ts +1 -1
- package/dist/validators/max.d.ts +1 -1
- package/dist/validators/min-age.d.ts +1 -1
- package/dist/validators/min-date.d.ts +1 -1
- package/dist/validators/min-length.d.ts +1 -1
- package/dist/validators/min.d.ts +1 -1
- package/dist/validators/multiple-of.d.ts +1 -1
- package/dist/validators/non-negative.d.ts +1 -1
- package/dist/validators/non-zero.d.ts +1 -1
- package/dist/validators/past-date.d.ts +1 -1
- package/dist/validators/pattern.d.ts +1 -1
- package/dist/validators/phone.d.ts +1 -1
- package/dist/validators/required.d.ts +1 -1
- package/dist/validators/url.d.ts +1 -1
- package/dist/validators.d.ts +1 -1
- package/llms.txt +64 -43
- package/package.json +4 -4
- package/dist/form/behaviors.d.ts +0 -133
- package/dist/form/validation-schema.d.ts +0 -106
- package/dist/form/validators.d.ts +0 -11
- package/dist/form-model-DhW2HZOB.js +0 -323
- package/dist/state.d.ts +0 -2
- package/dist/state.js +0 -21
- package/dist/subscription-manager-705bls97.js +0 -171
- /package/dist/{state → form/nodes}/subscription-manager.d.ts +0 -0
- /package/dist/{state → model}/behaviors-value.d.ts +0 -0
- /package/dist/{state → model}/derived-registry.d.ts +0 -0
- /package/dist/{state → model}/types.d.ts +0 -0
- /package/dist/{behaviors-node-DGEFMTQu.js → node-DGEFMTQu.js} +0 -0
- /package/dist/{form → platforms/react}/hooks/useSignalSubscription.d.ts +0 -0
package/dist/validation.js
CHANGED
|
@@ -1,167 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { e as E } from "./form-model-DhW2HZOB.js";
|
|
3
|
-
import { g as p } from "./signal-node-registry-tiwel-TV.js";
|
|
4
|
-
function B(e, n, t = {}) {
|
|
5
|
-
const { strategy: r = "submit", debounce: o = 0, liveAfterSubmit: i = "change" } = t, s = A(!1);
|
|
6
|
-
let a = 0, c = !1, d, l;
|
|
7
|
-
const w = async (u) => {
|
|
8
|
-
a++, s.value = !0;
|
|
9
|
-
try {
|
|
10
|
-
return await W(e, n, { touch: u });
|
|
11
|
-
} finally {
|
|
12
|
-
--a === 0 && (s.value = !1);
|
|
13
|
-
}
|
|
14
|
-
}, h = () => {
|
|
15
|
-
w(!1);
|
|
16
|
-
}, F = () => {
|
|
17
|
-
if (!o) {
|
|
18
|
-
h();
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
l && clearTimeout(l), l = setTimeout(h, o);
|
|
22
|
-
}, k = (u, g) => {
|
|
23
|
-
let S = !0;
|
|
24
|
-
return M(() => {
|
|
25
|
-
if (E(e, u), S) {
|
|
26
|
-
S = !1;
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
r === "afterFirstSubmit" && !c || g();
|
|
30
|
-
});
|
|
31
|
-
}, m = {
|
|
32
|
-
async validate() {
|
|
33
|
-
return c = !0, w(!0);
|
|
34
|
-
},
|
|
35
|
-
start() {
|
|
36
|
-
if (d) return () => m.dispose();
|
|
37
|
-
const u = r === "afterFirstSubmit" ? i : r;
|
|
38
|
-
return u === "change" ? d = k((g) => void g.value, F) : u === "blur" && (d = k((g) => void p(g)?.touched.value, h)), () => m.dispose();
|
|
39
|
-
},
|
|
40
|
-
dispose() {
|
|
41
|
-
l && (clearTimeout(l), l = void 0), d?.(), d = void 0;
|
|
42
|
-
},
|
|
43
|
-
get isValidating() {
|
|
44
|
-
return s.value;
|
|
45
|
-
},
|
|
46
|
-
get validating() {
|
|
47
|
-
return s;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
return m;
|
|
51
|
-
}
|
|
52
|
-
let v = null;
|
|
53
|
-
function f(e) {
|
|
54
|
-
if (!v)
|
|
55
|
-
throw new Error(
|
|
56
|
-
`[@reformer/core/validation] "${e}" вызван вне схемы валидации — операторы валидации можно вызывать только внутри прогона validateModel(...) (напрямую или через apply/each).`
|
|
57
|
-
);
|
|
58
|
-
return v;
|
|
59
|
-
}
|
|
60
|
-
function b(e, n) {
|
|
61
|
-
let t = e.errors.get(n);
|
|
62
|
-
return t || e.errors.set(n, t = []), t;
|
|
63
|
-
}
|
|
64
|
-
const y = (e) => e.whenStack.every((n) => n());
|
|
65
|
-
function D(e, n) {
|
|
66
|
-
const t = f("validate"), r = b(t, e);
|
|
67
|
-
if (!y(t)) return;
|
|
68
|
-
const o = e.peek();
|
|
69
|
-
for (const i of n) {
|
|
70
|
-
const s = i(o, t.model, t.model);
|
|
71
|
-
s && r.push(s);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
function N(e, n) {
|
|
75
|
-
const t = f("validateAsync"), r = b(t, e);
|
|
76
|
-
if (!y(t)) return;
|
|
77
|
-
const o = e.peek(), i = t.signal;
|
|
78
|
-
for (const s of n)
|
|
79
|
-
t.pending.push(
|
|
80
|
-
s(o, { signal: i }).then(
|
|
81
|
-
(a) => {
|
|
82
|
-
a && !i.aborted && r.push(a);
|
|
83
|
-
},
|
|
84
|
-
() => {
|
|
85
|
-
}
|
|
86
|
-
)
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
function R(e, n) {
|
|
90
|
-
const t = f("validateWhen");
|
|
91
|
-
t.whenStack.push(e);
|
|
92
|
-
try {
|
|
93
|
-
n();
|
|
94
|
-
} finally {
|
|
95
|
-
t.whenStack.pop();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
function _(e, n) {
|
|
99
|
-
const t = f("cross"), r = b(t, e);
|
|
100
|
-
if (!y(t)) return;
|
|
101
|
-
const o = n(t.model.get());
|
|
102
|
-
o && r.push(o);
|
|
103
|
-
}
|
|
104
|
-
function $(e, n) {
|
|
105
|
-
f("each");
|
|
106
|
-
const t = e.length;
|
|
107
|
-
for (let r = 0; r < t; r++) n(e.at(r));
|
|
108
|
-
}
|
|
109
|
-
function j(...e) {
|
|
110
|
-
const t = f("apply").model;
|
|
111
|
-
for (const r of e) r({ model: t });
|
|
112
|
-
}
|
|
113
|
-
function z(e) {
|
|
114
|
-
return e;
|
|
115
|
-
}
|
|
116
|
-
const x = /* @__PURE__ */ new WeakMap();
|
|
117
|
-
function L(e, n) {
|
|
118
|
-
let t = x.get(e);
|
|
119
|
-
t || x.set(e, t = /* @__PURE__ */ new WeakMap());
|
|
120
|
-
let r = t.get(n);
|
|
121
|
-
return r || t.set(n, r = { fields: /* @__PURE__ */ new Set(), ac: null }), r;
|
|
122
|
-
}
|
|
123
|
-
const P = (e) => {
|
|
124
|
-
for (const n of e.values()) for (const t of n) if (t.severity !== "warning") return !0;
|
|
125
|
-
return !1;
|
|
126
|
-
};
|
|
127
|
-
function T(e) {
|
|
128
|
-
return e.aborted ? Promise.resolve() : new Promise((n) => {
|
|
129
|
-
e.addEventListener("abort", () => n(), { once: !0 });
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
async function W(e, n, t) {
|
|
133
|
-
const r = L(e, n);
|
|
134
|
-
r.ac?.abort();
|
|
135
|
-
const o = new AbortController();
|
|
136
|
-
r.ac = o;
|
|
137
|
-
const i = {
|
|
138
|
-
model: e,
|
|
139
|
-
errors: /* @__PURE__ */ new Map(),
|
|
140
|
-
pending: [],
|
|
141
|
-
whenStack: [],
|
|
142
|
-
signal: o.signal
|
|
143
|
-
}, s = v;
|
|
144
|
-
v = i;
|
|
145
|
-
try {
|
|
146
|
-
n({ model: e });
|
|
147
|
-
} finally {
|
|
148
|
-
v = s;
|
|
149
|
-
}
|
|
150
|
-
if (i.pending.length && await Promise.race([Promise.all(i.pending), T(o.signal)]), o.signal.aborted) return !1;
|
|
151
|
-
const a = new Set(i.errors.keys());
|
|
152
|
-
for (const c of r.fields) a.has(c) || p(c)?.setErrors([]);
|
|
153
|
-
for (const c of a) p(c)?.setErrors(i.errors.get(c) ?? []);
|
|
154
|
-
if (t?.touch) for (const c of a) p(c)?.markAsTouched();
|
|
155
|
-
return r.fields = a, !P(i.errors);
|
|
156
|
-
}
|
|
1
|
+
import { d as s, h as d, c as i, f as l, e as t, v as o, a as c, g as n, b as r } from "./strategy-DA3JwxsR.js";
|
|
157
2
|
export {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
3
|
+
s as apply,
|
|
4
|
+
d as createFormValidation,
|
|
5
|
+
i as cross,
|
|
6
|
+
l as defineValidationSchema,
|
|
7
|
+
t as each,
|
|
8
|
+
o as validate,
|
|
9
|
+
c as validateAsync,
|
|
10
|
+
n as validateModel,
|
|
11
|
+
r as validateWhen
|
|
167
12
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/email'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/future-date'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/integer'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/is-date'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/is-number'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/max-age'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/max-date'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/max-length'
|
|
2
2
|
export {}
|
package/dist/validators/max.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/max'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/min-age'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/min-date'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/min-length'
|
|
2
2
|
export {}
|
package/dist/validators/min.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/min'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/multiple-of'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/non-negative'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/non-zero'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/past-date'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/pattern'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/phone'
|
|
2
2
|
export {}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/required'
|
|
2
2
|
export {}
|
package/dist/validators/url.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '../form/
|
|
1
|
+
export * from '../form/validators/url'
|
|
2
2
|
export {}
|
package/dist/validators.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './form/validators'
|
|
1
|
+
export * from './form/validators/index'
|
|
2
2
|
export {}
|
package/llms.txt
CHANGED
|
@@ -4537,7 +4537,7 @@ Add Phone
|
|
|
4537
4537
|
- {@link useFormControl} - хук для получения состояния
|
|
4538
4538
|
- {@link FieldControlState} - состояние для полей
|
|
4539
4539
|
|
|
4540
|
-
_Source: src/
|
|
4540
|
+
_Source: src/platforms/react/hooks/types.ts_
|
|
4541
4541
|
|
|
4542
4542
|
### ArrayNode
|
|
4543
4543
|
|
|
@@ -4655,7 +4655,7 @@ _Source: src/form/types/contracts.ts_
|
|
|
4655
4655
|
export type BehaviorCleanup = () => void;
|
|
4656
4656
|
```
|
|
4657
4657
|
|
|
4658
|
-
_Source: src/
|
|
4658
|
+
_Source: src/model/behaviors-value.ts_
|
|
4659
4659
|
|
|
4660
4660
|
### buildValidation
|
|
4661
4661
|
|
|
@@ -4692,7 +4692,7 @@ await v!.validateStep(1); // правила шага `loan`
|
|
|
4692
4692
|
await v!.validateAll(); // все шаги + extras
|
|
4693
4693
|
```
|
|
4694
4694
|
|
|
4695
|
-
_Source: src/form/validation
|
|
4695
|
+
_Source: src/form/validation/config.ts_
|
|
4696
4696
|
|
|
4697
4697
|
### computeFrom
|
|
4698
4698
|
|
|
@@ -4723,7 +4723,7 @@ export function computeFrom<R>(
|
|
|
4723
4723
|
computeFrom([model.$.price, model.$.qty], model.$.total, (price, qty) => price * qty);
|
|
4724
4724
|
```
|
|
4725
4725
|
|
|
4726
|
-
_Source: src/
|
|
4726
|
+
_Source: src/model/behaviors-value.ts_
|
|
4727
4727
|
|
|
4728
4728
|
### ConfigWithSchema
|
|
4729
4729
|
|
|
@@ -4777,7 +4777,7 @@ export function copyFrom<T>(
|
|
|
4777
4777
|
copyFrom(model.$.email, model.$.emailAdditional, { when: () => model.sameEmail });
|
|
4778
4778
|
```
|
|
4779
4779
|
|
|
4780
|
-
_Source: src/
|
|
4780
|
+
_Source: src/model/behaviors-value.ts_
|
|
4781
4781
|
|
|
4782
4782
|
### CORE_RUNTIME_TOKEN
|
|
4783
4783
|
|
|
@@ -5087,7 +5087,7 @@ model.tags.push('x');
|
|
|
5087
5087
|
model.get(); // { email: 'a@b.c', profile: { name: 'Ada' }, tags: ['x'] }
|
|
5088
5088
|
```
|
|
5089
5089
|
|
|
5090
|
-
_Source: src/
|
|
5090
|
+
_Source: src/model/create-model.ts_
|
|
5091
5091
|
|
|
5092
5092
|
### disableWhen
|
|
5093
5093
|
|
|
@@ -5119,7 +5119,28 @@ export function disableWhen(
|
|
|
5119
5119
|
disableWhen(model.$.discount, () => model.plan !== 'promo', { resetOnDisable: true });
|
|
5120
5120
|
```
|
|
5121
5121
|
|
|
5122
|
-
_Source: src/form/behaviors
|
|
5122
|
+
_Source: src/form/behaviors/node.ts_
|
|
5123
|
+
|
|
5124
|
+
### eachLeafSignal
|
|
5125
|
+
|
|
5126
|
+
**Kind:** `function`
|
|
5127
|
+
|
|
5128
|
+
Обойти ВСЕ листовые сигналы модели (включая элементы массивов), вызвав `visit` на каждом.
|
|
5129
|
+
|
|
5130
|
+
Внутри реактивного `effect` служит подпиской «любое поле изменилось»: `visit(sig => void sig.value)`
|
|
5131
|
+
подписывает на значения листьев, а обход массивов через `items.value` — на их состав. Так строятся
|
|
5132
|
+
триггеры `change`/`blur` стратегий валидации (см. `createFormValidation`), тем же паттерном, что
|
|
5133
|
+
`revalidateWhen`, но без ручного перечисления зависимостей.
|
|
5134
|
+
|
|
5135
|
+
**Signature:**
|
|
5136
|
+
```typescript
|
|
5137
|
+
export function eachLeafSignal<T>(
|
|
5138
|
+
model: FormModel<T>,
|
|
5139
|
+
visit: (signal: PathAwareSignal<unknown>) => void
|
|
5140
|
+
): void
|
|
5141
|
+
```
|
|
5142
|
+
|
|
5143
|
+
_Source: src/model/create-model.ts_
|
|
5123
5144
|
|
|
5124
5145
|
### enableWhen
|
|
5125
5146
|
|
|
@@ -5163,7 +5184,7 @@ compute(model.$.initialPayment, () => model.propertyValue * 0.2, {
|
|
|
5163
5184
|
});
|
|
5164
5185
|
```
|
|
5165
5186
|
|
|
5166
|
-
_Source: src/form/behaviors
|
|
5187
|
+
_Source: src/form/behaviors/node.ts_
|
|
5167
5188
|
|
|
5168
5189
|
### ErrorFilterOptions
|
|
5169
5190
|
|
|
@@ -5221,7 +5242,7 @@ export enum ErrorStrategy {
|
|
|
5221
5242
|
}
|
|
5222
5243
|
```
|
|
5223
5244
|
|
|
5224
|
-
_Source: src/form/error-handler.ts_
|
|
5245
|
+
_Source: src/form/validation/error-handler.ts_
|
|
5225
5246
|
|
|
5226
5247
|
### FieldConfig
|
|
5227
5248
|
|
|
@@ -5483,7 +5504,7 @@ onChange={e => control.setValue(e.target.value)}
|
|
|
5483
5504
|
- {@link useFormControl} - хук для получения состояния
|
|
5484
5505
|
- {@link ArrayControlState} - состояние для массивов
|
|
5485
5506
|
|
|
5486
|
-
_Source: src/
|
|
5507
|
+
_Source: src/platforms/react/hooks/types.ts_
|
|
5487
5508
|
|
|
5488
5509
|
### FieldNode
|
|
5489
5510
|
|
|
@@ -5595,7 +5616,7 @@ export interface FormBundleLike {
|
|
|
5595
5616
|
}
|
|
5596
5617
|
```
|
|
5597
5618
|
|
|
5598
|
-
_Source: src/
|
|
5619
|
+
_Source: src/platforms/react/hooks/use-form-bundle.ts_
|
|
5599
5620
|
|
|
5600
5621
|
### FormControlsProxy
|
|
5601
5622
|
|
|
@@ -5709,7 +5730,7 @@ try {
|
|
|
5709
5730
|
}
|
|
5710
5731
|
```
|
|
5711
5732
|
|
|
5712
|
-
_Source: src/form/error-handler.ts_
|
|
5733
|
+
_Source: src/form/validation/error-handler.ts_
|
|
5713
5734
|
|
|
5714
5735
|
### FormModel
|
|
5715
5736
|
|
|
@@ -5724,7 +5745,7 @@ FormModel — под-модель объекта `T`: value-доступ ({@link
|
|
|
5724
5745
|
export type FormModel<T> = ModelObject<T> & ModelApi<T>;
|
|
5725
5746
|
```
|
|
5726
5747
|
|
|
5727
|
-
_Source: src/
|
|
5748
|
+
_Source: src/model/types.ts_
|
|
5728
5749
|
|
|
5729
5750
|
### FormNode
|
|
5730
5751
|
|
|
@@ -6020,7 +6041,7 @@ export interface FormValidation<T> {
|
|
|
6020
6041
|
}
|
|
6021
6042
|
```
|
|
6022
6043
|
|
|
6023
|
-
_Source: src/form/validation
|
|
6044
|
+
_Source: src/form/validation/config.ts_
|
|
6024
6045
|
|
|
6025
6046
|
### FormValidationBundle
|
|
6026
6047
|
|
|
@@ -6051,7 +6072,7 @@ export interface FormValidationBundle<T> {
|
|
|
6051
6072
|
}
|
|
6052
6073
|
```
|
|
6053
6074
|
|
|
6054
|
-
_Source: src/form/validation
|
|
6075
|
+
_Source: src/form/validation/config.ts_
|
|
6055
6076
|
|
|
6056
6077
|
### FormValue
|
|
6057
6078
|
|
|
@@ -6254,7 +6275,7 @@ if (!isDerived(model.$.total)) {
|
|
|
6254
6275
|
**See also:**
|
|
6255
6276
|
- {@link markDerived} - пометить сигнал производным
|
|
6256
6277
|
|
|
6257
|
-
_Source: src/
|
|
6278
|
+
_Source: src/model/derived-registry.ts_
|
|
6258
6279
|
|
|
6259
6280
|
### isFieldNode
|
|
6260
6281
|
|
|
@@ -6366,7 +6387,7 @@ export function isModelContainerSignal(value: unknown): boolean
|
|
|
6366
6387
|
const isLeaf = (v: unknown) => isSignalLike(v) && !isModelContainerSignal(v);
|
|
6367
6388
|
```
|
|
6368
6389
|
|
|
6369
|
-
_Source: src/
|
|
6390
|
+
_Source: src/model/model-signals-proxy.ts_
|
|
6370
6391
|
|
|
6371
6392
|
### markDerived
|
|
6372
6393
|
|
|
@@ -6402,7 +6423,7 @@ markDerived(model.$.total);
|
|
|
6402
6423
|
- {@link isDerived} - проверка пометки
|
|
6403
6424
|
- {@link unmarkDerived} - снять пометку при dispose оператора
|
|
6404
6425
|
|
|
6405
|
-
_Source: src/
|
|
6426
|
+
_Source: src/model/derived-registry.ts_
|
|
6406
6427
|
|
|
6407
6428
|
### ModelApi
|
|
6408
6429
|
|
|
@@ -6445,7 +6466,7 @@ export interface ModelApi<T> {
|
|
|
6445
6466
|
}
|
|
6446
6467
|
```
|
|
6447
6468
|
|
|
6448
|
-
_Source: src/
|
|
6469
|
+
_Source: src/model/types.ts_
|
|
6449
6470
|
|
|
6450
6471
|
### ModelArray
|
|
6451
6472
|
|
|
@@ -6491,7 +6512,7 @@ export interface ModelArray<U> {
|
|
|
6491
6512
|
}
|
|
6492
6513
|
```
|
|
6493
6514
|
|
|
6494
|
-
_Source: src/
|
|
6515
|
+
_Source: src/model/types.ts_
|
|
6495
6516
|
|
|
6496
6517
|
### ModelArrayControl
|
|
6497
6518
|
|
|
@@ -6580,7 +6601,7 @@ export type ModelArraySignals<U, V> = ContainerSignal<V, 'length'> & {
|
|
|
6580
6601
|
};
|
|
6581
6602
|
```
|
|
6582
6603
|
|
|
6583
|
-
_Source: src/
|
|
6604
|
+
_Source: src/model/types.ts_
|
|
6584
6605
|
|
|
6585
6606
|
### ModelGroupSignals
|
|
6586
6607
|
|
|
@@ -6597,7 +6618,7 @@ _Source: src/state/types.ts_
|
|
|
6597
6618
|
export type ModelGroupSignals<T> = ModelSignals<T> & ContainerSignal<T, keyof T>;
|
|
6598
6619
|
```
|
|
6599
6620
|
|
|
6600
|
-
_Source: src/
|
|
6621
|
+
_Source: src/model/types.ts_
|
|
6601
6622
|
|
|
6602
6623
|
### ModelObject
|
|
6603
6624
|
|
|
@@ -6614,7 +6635,7 @@ export type ModelObject<T> = {
|
|
|
6614
6635
|
};
|
|
6615
6636
|
```
|
|
6616
6637
|
|
|
6617
|
-
_Source: src/
|
|
6638
|
+
_Source: src/model/types.ts_
|
|
6618
6639
|
|
|
6619
6640
|
### ModelSignals
|
|
6620
6641
|
|
|
@@ -6630,7 +6651,7 @@ export type ModelSignals<T> = {
|
|
|
6630
6651
|
};
|
|
6631
6652
|
```
|
|
6632
6653
|
|
|
6633
|
-
_Source: src/
|
|
6654
|
+
_Source: src/model/types.ts_
|
|
6634
6655
|
|
|
6635
6656
|
### ModelValue
|
|
6636
6657
|
|
|
@@ -6655,7 +6676,7 @@ export type ModelValue<V> =
|
|
|
6655
6676
|
: V;
|
|
6656
6677
|
```
|
|
6657
6678
|
|
|
6658
|
-
_Source: src/
|
|
6679
|
+
_Source: src/model/types.ts_
|
|
6659
6680
|
|
|
6660
6681
|
### NodeFactory
|
|
6661
6682
|
|
|
@@ -6742,7 +6763,7 @@ export type PathAwareSignal<T> = Signal<T> & {
|
|
|
6742
6763
|
};
|
|
6743
6764
|
```
|
|
6744
6765
|
|
|
6745
|
-
_Source: src/
|
|
6766
|
+
_Source: src/model/types.ts_
|
|
6746
6767
|
|
|
6747
6768
|
### registerSignalNode
|
|
6748
6769
|
|
|
@@ -6799,7 +6820,7 @@ export function resetWhen<T>(
|
|
|
6799
6820
|
resetWhen(model.$.cardNumber, () => model.paymentType !== 'card', { resetValue: '' });
|
|
6800
6821
|
```
|
|
6801
6822
|
|
|
6802
|
-
_Source: src/
|
|
6823
|
+
_Source: src/model/behaviors-value.ts_
|
|
6803
6824
|
|
|
6804
6825
|
### revalidateWhen
|
|
6805
6826
|
|
|
@@ -6822,7 +6843,7 @@ export function revalidateWhen(
|
|
|
6822
6843
|
revalidateWhen([model.$.maxAmount], () => void validateModel(model, schema));
|
|
6823
6844
|
```
|
|
6824
6845
|
|
|
6825
|
-
_Source: src/
|
|
6846
|
+
_Source: src/model/behaviors-value.ts_
|
|
6826
6847
|
|
|
6827
6848
|
### runOutsideEffect
|
|
6828
6849
|
|
|
@@ -6856,7 +6877,7 @@ effect(() => {
|
|
|
6856
6877
|
});
|
|
6857
6878
|
```
|
|
6858
6879
|
|
|
6859
|
-
_Source: src/
|
|
6880
|
+
_Source: src/model/safe-effect.ts_
|
|
6860
6881
|
|
|
6861
6882
|
### safeCallback
|
|
6862
6883
|
|
|
@@ -6895,7 +6916,7 @@ effect(() => {
|
|
|
6895
6916
|
});
|
|
6896
6917
|
```
|
|
6897
6918
|
|
|
6898
|
-
_Source: src/
|
|
6919
|
+
_Source: src/model/safe-effect.ts_
|
|
6899
6920
|
|
|
6900
6921
|
### safeDebouncedCallback
|
|
6901
6922
|
|
|
@@ -6933,7 +6954,7 @@ return effect(() => {
|
|
|
6933
6954
|
});
|
|
6934
6955
|
```
|
|
6935
6956
|
|
|
6936
|
-
_Source: src/
|
|
6957
|
+
_Source: src/model/safe-effect.ts_
|
|
6937
6958
|
|
|
6938
6959
|
### SchemaArrayControl
|
|
6939
6960
|
|
|
@@ -7076,7 +7097,7 @@ class FieldNode {
|
|
|
7076
7097
|
}
|
|
7077
7098
|
```
|
|
7078
7099
|
|
|
7079
|
-
_Source: src/
|
|
7100
|
+
_Source: src/form/nodes/subscription-manager.ts_
|
|
7080
7101
|
|
|
7081
7102
|
### syncFields
|
|
7082
7103
|
|
|
@@ -7100,7 +7121,7 @@ export function syncFields<T>(
|
|
|
7100
7121
|
syncFields(model.$.field1, model.$.field2);
|
|
7101
7122
|
```
|
|
7102
7123
|
|
|
7103
|
-
_Source: src/
|
|
7124
|
+
_Source: src/model/behaviors-value.ts_
|
|
7104
7125
|
|
|
7105
7126
|
### transformValue
|
|
7106
7127
|
|
|
@@ -7123,7 +7144,7 @@ export function transformValue<T>(
|
|
|
7123
7144
|
transformValue(model.$.promoCode, (v) => (v ?? '').toUpperCase());
|
|
7124
7145
|
```
|
|
7125
7146
|
|
|
7126
|
-
_Source: src/
|
|
7147
|
+
_Source: src/model/behaviors-value.ts_
|
|
7127
7148
|
|
|
7128
7149
|
### UnknownRecord
|
|
7129
7150
|
|
|
@@ -7173,7 +7194,7 @@ onDispose(() => unmarkDerived(model.$.total)); // при снятии compute с
|
|
|
7173
7194
|
**See also:**
|
|
7174
7195
|
- {@link markDerived} - пометить сигнал производным
|
|
7175
7196
|
|
|
7176
|
-
_Source: src/
|
|
7197
|
+
_Source: src/model/derived-registry.ts_
|
|
7177
7198
|
|
|
7178
7199
|
### useArrayLength
|
|
7179
7200
|
|
|
@@ -7211,7 +7232,7 @@ function ArrayRenderer({ arrayNode }) {
|
|
|
7211
7232
|
}
|
|
7212
7233
|
```
|
|
7213
7234
|
|
|
7214
|
-
_Source: src/
|
|
7235
|
+
_Source: src/platforms/react/hooks/useArrayLength.ts_
|
|
7215
7236
|
|
|
7216
7237
|
### useFormBundle
|
|
7217
7238
|
|
|
@@ -7236,7 +7257,7 @@ export function useFormBundle<B extends FormBundleLike>(factory: () => B): B
|
|
|
7236
7257
|
const credit = useFormBundle(() => createCoreForm<CreditForm>({ model: createCreditModel() }));
|
|
7237
7258
|
```
|
|
7238
7259
|
|
|
7239
|
-
_Source: src/
|
|
7260
|
+
_Source: src/platforms/react/hooks/use-form-bundle.ts_
|
|
7240
7261
|
|
|
7241
7262
|
### useFormControl
|
|
7242
7263
|
|
|
@@ -7470,7 +7491,7 @@ return <div>Items: {length}</div>;
|
|
|
7470
7491
|
- {@link FieldControlState} - тип состояния для FieldNode
|
|
7471
7492
|
- {@link ArrayControlState} - тип состояния для ArrayNode
|
|
7472
7493
|
|
|
7473
|
-
_Source: src/
|
|
7494
|
+
_Source: src/platforms/react/hooks/useFormControl.ts_
|
|
7474
7495
|
|
|
7475
7496
|
### useFormControlValue
|
|
7476
7497
|
|
|
@@ -7651,7 +7672,7 @@ return (
|
|
|
7651
7672
|
- {@link useFormControl} - для полного состояния поля
|
|
7652
7673
|
- {@link FieldNode} - тип контрола поля
|
|
7653
7674
|
|
|
7654
|
-
_Source: src/
|
|
7675
|
+
_Source: src/platforms/react/hooks/useFormControlValue.ts_
|
|
7655
7676
|
|
|
7656
7677
|
### useFormValidation
|
|
7657
7678
|
|
|
@@ -7686,7 +7707,7 @@ function MyForm() {
|
|
|
7686
7707
|
}
|
|
7687
7708
|
```
|
|
7688
7709
|
|
|
7689
|
-
_Source: src/
|
|
7710
|
+
_Source: src/platforms/react/hooks/use-form-validation.ts_
|
|
7690
7711
|
|
|
7691
7712
|
### UseFormValidationArgs
|
|
7692
7713
|
|
|
@@ -7708,7 +7729,7 @@ export interface UseFormValidationArgs<T> {
|
|
|
7708
7729
|
}
|
|
7709
7730
|
```
|
|
7710
7731
|
|
|
7711
|
-
_Source: src/
|
|
7732
|
+
_Source: src/platforms/react/hooks/use-form-validation.ts_
|
|
7712
7733
|
|
|
7713
7734
|
### UseFormValidationResult
|
|
7714
7735
|
|
|
@@ -7726,7 +7747,7 @@ export interface UseFormValidationResult {
|
|
|
7726
7747
|
}
|
|
7727
7748
|
```
|
|
7728
7749
|
|
|
7729
|
-
_Source: src/
|
|
7750
|
+
_Source: src/platforms/react/hooks/use-form-validation.ts_
|
|
7730
7751
|
|
|
7731
7752
|
### ValidateOptions
|
|
7732
7753
|
|
|
@@ -7829,4 +7850,4 @@ watchField(model.$.country, async (country) => {
|
|
|
7829
7850
|
});
|
|
7830
7851
|
```
|
|
7831
7852
|
|
|
7832
|
-
_Source: src/
|
|
7853
|
+
_Source: src/model/behaviors-value.ts_
|