@rainbow-oh/yee-c 0.4.5 → 0.5.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/cjs/Dialog/demo/basic.js +1 -1
- package/dist/cjs/Dialog/dialog.js +1 -1
- package/dist/cjs/Field/demo/validation.js +23 -3
- package/dist/cjs/Field/field.js +1 -1
- package/dist/cjs/Form/Field.js +1 -4
- package/dist/cjs/Form/Form.js +1 -1
- package/dist/cjs/Form/Group.js +36 -14
- package/dist/cjs/Form/List.js +23 -3
- package/dist/cjs/Form/demo/async-validate.d.ts +3 -0
- package/dist/cjs/Form/demo/async-validate.js +108 -0
- package/dist/cjs/Form/demo/virtual.js +1 -1
- package/dist/cjs/Form/form-store.d.ts +4 -4
- package/dist/cjs/Form/form-store.js +55 -25
- package/dist/cjs/Form/interface.d.ts +10 -7
- package/dist/cjs/Form/utils/validate.d.ts +23 -2
- package/dist/cjs/Form/utils/validate.js +59 -10
- package/dist/cjs/Select/demo/basic.js +1 -1
- package/dist/cjs/Select/demo/virtual.d.ts +3 -0
- package/dist/cjs/Select/demo/virtual.js +55 -0
- package/dist/cjs/Select/hooks/useSelectKeyboard.d.ts +7 -1
- package/dist/cjs/Select/hooks/useSelectKeyboard.js +16 -6
- package/dist/cjs/Select/interface.d.ts +44 -0
- package/dist/cjs/Select/option.js +3 -2
- package/dist/cjs/Select/options.js +115 -15
- package/dist/cjs/Select/select.js +20 -4
- package/dist/cjs/Select/style/index.less +17 -0
- package/dist/cjs/Table/style/index.less +19 -0
- package/dist/cjs/hooks/index.d.ts +2 -1
- package/dist/cjs/hooks/index.js +3 -1
- package/dist/cjs/hooks/useVirtualList.d.ts +71 -0
- package/dist/cjs/hooks/useVirtualList.js +117 -0
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Dialog/demo/basic.js +1 -1
- package/dist/esm/Dialog/dialog.js +1 -1
- package/dist/esm/Field/demo/validation.js +30 -9
- package/dist/esm/Field/field.js +2 -1
- package/dist/esm/Form/Field.js +3 -4
- package/dist/esm/Form/Form.js +1 -1
- package/dist/esm/Form/Group.js +142 -53
- package/dist/esm/Form/List.js +61 -42
- package/dist/esm/Form/demo/async-validate.d.ts +3 -0
- package/dist/esm/Form/demo/async-validate.js +95 -0
- package/dist/esm/Form/demo/virtual.js +1 -1
- package/dist/esm/Form/form-store.d.ts +4 -4
- package/dist/esm/Form/form-store.js +187 -93
- package/dist/esm/Form/interface.d.ts +10 -7
- package/dist/esm/Form/utils/validate.d.ts +23 -2
- package/dist/esm/Form/utils/validate.js +122 -17
- package/dist/esm/Select/demo/basic.js +1 -1
- package/dist/esm/Select/demo/virtual.d.ts +3 -0
- package/dist/esm/Select/demo/virtual.js +38 -0
- package/dist/esm/Select/hooks/useSelectKeyboard.d.ts +7 -1
- package/dist/esm/Select/hooks/useSelectKeyboard.js +25 -9
- package/dist/esm/Select/interface.d.ts +44 -0
- package/dist/esm/Select/option.js +4 -2
- package/dist/esm/Select/options.js +132 -13
- package/dist/esm/Select/select.js +19 -4
- package/dist/esm/Select/style/index.less +17 -0
- package/dist/esm/Table/style/index.less +19 -0
- package/dist/esm/hooks/index.d.ts +2 -1
- package/dist/esm/hooks/index.js +2 -1
- package/dist/esm/hooks/useVirtualList.d.ts +71 -0
- package/dist/esm/hooks/useVirtualList.js +129 -0
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/yee-c.min.css +1 -1
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Dialog/demo/basic.tsx +1 -1
- package/src/Dialog/dialog.tsx +1 -1
- package/src/Field/demo/validation.tsx +2 -2
- package/src/Field/field.tsx +2 -1
- package/src/Field/index.en-US.md +1 -1
- package/src/Field/index.zh-CN.md +1 -1
- package/src/Form/Field.tsx +3 -4
- package/src/Form/Form.tsx +1 -1
- package/src/Form/Group.tsx +15 -12
- package/src/Form/List.tsx +3 -3
- package/src/Form/demo/async-validate.tsx +71 -0
- package/src/Form/demo/virtual.tsx +1 -1
- package/src/Form/form-store.ts +37 -21
- package/src/Form/index.en-US.md +6 -5
- package/src/Form/index.zh-CN.md +6 -5
- package/src/Form/interface.ts +13 -7
- package/src/Form/utils/validate.ts +65 -13
- package/src/Select/demo/basic.tsx +1 -1
- package/src/Select/demo/virtual.tsx +25 -0
- package/src/Select/hooks/useSelectKeyboard.ts +30 -6
- package/src/Select/index.en-US.md +4 -0
- package/src/Select/index.zh-CN.md +4 -0
- package/src/Select/interface.ts +48 -2
- package/src/Select/option.tsx +2 -1
- package/src/Select/options.tsx +139 -8
- package/src/Select/select.tsx +23 -1
- package/src/Select/style/index.less +17 -0
- package/src/Table/style/index.less +19 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useVirtualList.ts +169 -0
- package/src/version.ts +1 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface UseVirtualListOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Total number of items in the list.
|
|
5
|
+
*/
|
|
6
|
+
itemCount: number;
|
|
7
|
+
/**
|
|
8
|
+
* Fixed height of every item in pixels.
|
|
9
|
+
*/
|
|
10
|
+
itemHeight: number;
|
|
11
|
+
/**
|
|
12
|
+
* Extra items rendered above and below the visible window
|
|
13
|
+
* to avoid white flashes while scrolling.
|
|
14
|
+
* @default 4
|
|
15
|
+
*/
|
|
16
|
+
overscan?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface UseVirtualListResult {
|
|
19
|
+
/**
|
|
20
|
+
* Inclusive start index of the render window (already includes overscan).
|
|
21
|
+
*/
|
|
22
|
+
start: number;
|
|
23
|
+
/**
|
|
24
|
+
* Exclusive end index of the render window (already includes overscan).
|
|
25
|
+
*/
|
|
26
|
+
end: number;
|
|
27
|
+
/**
|
|
28
|
+
* Vertical offset to apply to the rendered block, equal to `start * itemHeight`.
|
|
29
|
+
* Use it as `transform: translateY(offsetY)` or `top: offsetY`.
|
|
30
|
+
*/
|
|
31
|
+
offsetY: number;
|
|
32
|
+
/**
|
|
33
|
+
* Total scrollable height, equal to `itemCount * itemHeight`.
|
|
34
|
+
* Apply it to the inner spacer element so the scrollbar matches the full list.
|
|
35
|
+
*/
|
|
36
|
+
totalHeight: number;
|
|
37
|
+
/**
|
|
38
|
+
* Ref to bind to the scroll container element.
|
|
39
|
+
*/
|
|
40
|
+
viewportRef: React.RefObject<HTMLDivElement | null>;
|
|
41
|
+
/**
|
|
42
|
+
* Stable scroll handler (rAF-throttled). Bind to the viewport's `onScroll`.
|
|
43
|
+
*/
|
|
44
|
+
onScroll: () => void;
|
|
45
|
+
/**
|
|
46
|
+
* Scroll the viewport so that the item at `index` is visible.
|
|
47
|
+
* Used by keyboard navigation to replace `scrollIntoView`.
|
|
48
|
+
*/
|
|
49
|
+
scrollToIndex: (index: number) => void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Fixed-height virtual scrolling hook.
|
|
53
|
+
*
|
|
54
|
+
* Renders only the items inside the visible window (plus an `overscan` buffer)
|
|
55
|
+
* and keeps the DOM node count constant regardless of `itemCount`.
|
|
56
|
+
*
|
|
57
|
+
* Usage:
|
|
58
|
+
* const { start, end, offsetY, totalHeight, viewportRef, onScroll, scrollToIndex } =
|
|
59
|
+
* useVirtualList({ itemCount, itemHeight });
|
|
60
|
+
*
|
|
61
|
+
* <div ref={viewportRef} onScroll={onScroll} style={{ maxHeight: 200, overflowY: 'auto' }}>
|
|
62
|
+
* <div style={{ height: totalHeight, position: 'relative' }}>
|
|
63
|
+
* {items.slice(start, end).map((it, i) => (
|
|
64
|
+
* <div key={it.key} style={{ position: 'absolute', height: itemHeight, transform: `translateY(${offsetY + i * itemHeight}px)` }}>
|
|
65
|
+
* {it.content}
|
|
66
|
+
* </div>
|
|
67
|
+
* ))}
|
|
68
|
+
* </div>
|
|
69
|
+
* </div>
|
|
70
|
+
*/
|
|
71
|
+
export default function useVirtualList({ itemCount, itemHeight, overscan, }: UseVirtualListOptions): UseVirtualListResult;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/hooks/useVirtualList.ts
|
|
30
|
+
var useVirtualList_exports = {};
|
|
31
|
+
__export(useVirtualList_exports, {
|
|
32
|
+
default: () => useVirtualList
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(useVirtualList_exports);
|
|
35
|
+
var import_react = require("react");
|
|
36
|
+
var import_useEvent = __toESM(require("./useEvent"));
|
|
37
|
+
var import_useResizeObserver = __toESM(require("./useResizeObserver"));
|
|
38
|
+
function useVirtualList({
|
|
39
|
+
itemCount,
|
|
40
|
+
itemHeight,
|
|
41
|
+
overscan = 4
|
|
42
|
+
}) {
|
|
43
|
+
const [scrollTop, setScrollTop] = (0, import_react.useState)(0);
|
|
44
|
+
const [visibleHeight, setVisibleHeight] = (0, import_react.useState)(0);
|
|
45
|
+
const rafRef = (0, import_react.useRef)(null);
|
|
46
|
+
const { ref: viewportRef } = (0, import_useResizeObserver.default)((entries) => {
|
|
47
|
+
const entry = entries[0];
|
|
48
|
+
if (!entry)
|
|
49
|
+
return;
|
|
50
|
+
const h = entry.contentRect.height;
|
|
51
|
+
setVisibleHeight((prev) => prev === h ? prev : h);
|
|
52
|
+
});
|
|
53
|
+
const totalHeight = itemCount * itemHeight;
|
|
54
|
+
const readViewport = (0, import_useEvent.default)(() => {
|
|
55
|
+
const viewport = viewportRef.current;
|
|
56
|
+
if (!viewport)
|
|
57
|
+
return;
|
|
58
|
+
const top = viewport.scrollTop;
|
|
59
|
+
const h = viewport.clientHeight;
|
|
60
|
+
setScrollTop((prev) => prev === top ? prev : top);
|
|
61
|
+
setVisibleHeight((prev) => prev === h ? prev : h);
|
|
62
|
+
});
|
|
63
|
+
const onScroll = (0, import_useEvent.default)(() => {
|
|
64
|
+
if (rafRef.current !== null)
|
|
65
|
+
return;
|
|
66
|
+
rafRef.current = requestAnimationFrame(() => {
|
|
67
|
+
rafRef.current = null;
|
|
68
|
+
readViewport();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
(0, import_react.useEffect)(
|
|
72
|
+
() => () => {
|
|
73
|
+
if (rafRef.current !== null) {
|
|
74
|
+
cancelAnimationFrame(rafRef.current);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
[]
|
|
78
|
+
);
|
|
79
|
+
(0, import_react.useEffect)(() => {
|
|
80
|
+
readViewport();
|
|
81
|
+
}, [readViewport]);
|
|
82
|
+
(0, import_react.useEffect)(() => {
|
|
83
|
+
const viewport = viewportRef.current;
|
|
84
|
+
if (!viewport)
|
|
85
|
+
return;
|
|
86
|
+
const maxScroll = Math.max(0, totalHeight - viewport.clientHeight);
|
|
87
|
+
if (viewport.scrollTop > maxScroll) {
|
|
88
|
+
viewport.scrollTop = maxScroll;
|
|
89
|
+
setScrollTop(maxScroll);
|
|
90
|
+
}
|
|
91
|
+
}, [totalHeight, viewportRef]);
|
|
92
|
+
const scrollToIndex = (0, import_useEvent.default)((index) => {
|
|
93
|
+
const viewport = viewportRef.current;
|
|
94
|
+
if (!viewport)
|
|
95
|
+
return;
|
|
96
|
+
const maxScroll = Math.max(0, totalHeight - viewport.clientHeight);
|
|
97
|
+
const target = Math.min(Math.max(0, index * itemHeight), maxScroll);
|
|
98
|
+
if (viewport.scrollTop !== target) {
|
|
99
|
+
viewport.scrollTop = target;
|
|
100
|
+
}
|
|
101
|
+
readViewport();
|
|
102
|
+
});
|
|
103
|
+
const effectiveVisibleHeight = visibleHeight || itemHeight;
|
|
104
|
+
const visibleCount = Math.ceil(effectiveVisibleHeight / itemHeight);
|
|
105
|
+
const start = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);
|
|
106
|
+
const end = Math.min(itemCount, start + visibleCount + overscan * 2);
|
|
107
|
+
const offsetY = start * itemHeight;
|
|
108
|
+
return {
|
|
109
|
+
start,
|
|
110
|
+
end,
|
|
111
|
+
offsetY,
|
|
112
|
+
totalHeight,
|
|
113
|
+
viewportRef,
|
|
114
|
+
onScroll,
|
|
115
|
+
scrollToIndex
|
|
116
|
+
};
|
|
117
|
+
}
|
package/dist/cjs/version.d.ts
CHANGED
package/dist/cjs/version.js
CHANGED
|
@@ -116,7 +116,7 @@ var Dialog = function Dialog(baseprops) {
|
|
|
116
116
|
useFocusManage(contentRef.current, delayOpen);
|
|
117
117
|
var cls = clsx(prefixCls, _defineProperty(_defineProperty({}, "".concat(prefixCls, "-open"), delayOpen), "".concat(prefixCls, "-fullscreen"), fullscreen));
|
|
118
118
|
var renderFooter = function renderFooter() {
|
|
119
|
-
if (footer === false) {
|
|
119
|
+
if (footer === false || footer === null) {
|
|
120
120
|
return null;
|
|
121
121
|
}
|
|
122
122
|
if (footer === true || footer === undefined) {
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
3
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
1
5
|
import { Button, Field, Input, useVirtualForm } from "../..";
|
|
2
6
|
import React, { useLayoutEffect } from 'react';
|
|
3
7
|
export default (function () {
|
|
@@ -7,15 +11,32 @@ export default (function () {
|
|
|
7
11
|
useLayoutEffect(function () {
|
|
8
12
|
createForm('validationForm');
|
|
9
13
|
}, []);
|
|
10
|
-
var handleSubmit = function
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
var handleSubmit = /*#__PURE__*/function () {
|
|
15
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
16
|
+
var form, errors;
|
|
17
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
18
|
+
while (1) switch (_context.prev = _context.next) {
|
|
19
|
+
case 0:
|
|
20
|
+
form = getForm('validationForm');
|
|
21
|
+
console.log('form: ', form);
|
|
22
|
+
_context.next = 4;
|
|
23
|
+
return form === null || form === void 0 ? void 0 : form.submit();
|
|
24
|
+
case 4:
|
|
25
|
+
errors = _context.sent;
|
|
26
|
+
console.log('errors: ', errors);
|
|
27
|
+
if (errors && errors.length === 0) {
|
|
28
|
+
console.log('Submit success:', form === null || form === void 0 ? void 0 : form.getFieldsValue());
|
|
29
|
+
}
|
|
30
|
+
case 7:
|
|
31
|
+
case "end":
|
|
32
|
+
return _context.stop();
|
|
33
|
+
}
|
|
34
|
+
}, _callee);
|
|
35
|
+
}));
|
|
36
|
+
return function handleSubmit() {
|
|
37
|
+
return _ref.apply(this, arguments);
|
|
38
|
+
};
|
|
39
|
+
}();
|
|
19
40
|
return /*#__PURE__*/React.createElement("div", {
|
|
20
41
|
style: {
|
|
21
42
|
maxWidth: 400
|
package/dist/esm/Field/field.js
CHANGED
|
@@ -84,7 +84,8 @@ var Field = function Field(props) {
|
|
|
84
84
|
forceUpdate();
|
|
85
85
|
},
|
|
86
86
|
onBlur: function onBlur(event) {
|
|
87
|
-
|
|
87
|
+
// Fire-and-forget async validation; store notifies onStoreChange on completion.
|
|
88
|
+
void (validateField === null || validateField === void 0 ? void 0 : validateField(name, 'onBlur'));
|
|
88
89
|
|
|
89
90
|
// Call child component's onBlur
|
|
90
91
|
if (children.props.onBlur) {
|
package/dist/esm/Form/Field.js
CHANGED
|
@@ -155,10 +155,9 @@ var Field = function Field(props) {
|
|
|
155
155
|
},
|
|
156
156
|
onBlur: function onBlur(event) {
|
|
157
157
|
var _props$onBlur;
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
158
|
+
// Fire-and-forget; the store calls onStoreChange (→ forceUpdate) when
|
|
159
|
+
// the (possibly async) validation completes, so the error UI refreshes.
|
|
160
|
+
void (validateField === null || validateField === void 0 ? void 0 : validateField(normalizedName, 'onBlur'));
|
|
162
161
|
props === null || props === void 0 || (_props$onBlur = props.onBlur) === null || _props$onBlur === void 0 || _props$onBlur.call(props, event);
|
|
163
162
|
}
|
|
164
163
|
});
|
package/dist/esm/Form/Form.js
CHANGED
package/dist/esm/Form/Group.js
CHANGED
|
@@ -2,6 +2,10 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
|
|
|
2
2
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
3
3
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
4
4
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
5
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
6
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
7
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
8
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
5
9
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
6
10
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
7
11
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
@@ -12,6 +16,7 @@ import clsx from 'clsx';
|
|
|
12
16
|
import { AnimatePresence, motion } from 'motion/react';
|
|
13
17
|
import React, { useContext, useEffect, useId, useMemo, useReducer, useRef } from 'react';
|
|
14
18
|
import Grid from "../Grid";
|
|
19
|
+
import { runValidator } from "./utils/validate";
|
|
15
20
|
import FieldContext from "./FieldContext";
|
|
16
21
|
import FormContext from "./FormContext";
|
|
17
22
|
var Group = function Group(props) {
|
|
@@ -52,50 +57,99 @@ var Group = function Group(props) {
|
|
|
52
57
|
forceValidate = _useReducer4[1]; // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
53
58
|
|
|
54
59
|
// Group validation
|
|
55
|
-
var _validate = function
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
message: "".concat(label || '', " is required")
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Custom rules validation
|
|
82
|
-
if (rules) {
|
|
83
|
-
rules.forEach(function (rule) {
|
|
84
|
-
if (rule.validator) {
|
|
85
|
-
var passed = rule.validator(values);
|
|
86
|
-
if (!passed) {
|
|
87
|
-
errors.push({
|
|
88
|
-
name: childNames,
|
|
89
|
-
status: 'error',
|
|
90
|
-
value: values,
|
|
91
|
-
message: rule.message || ''
|
|
60
|
+
var _validate = /*#__PURE__*/function () {
|
|
61
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(force) {
|
|
62
|
+
var values, errors, hasEmpty, _iterator, _step, rule, result, _ref2, _result$message;
|
|
63
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
64
|
+
while (1) switch (_context.prev = _context.next) {
|
|
65
|
+
case 0:
|
|
66
|
+
if (!(!required && (!rules || rules.length === 0))) {
|
|
67
|
+
_context.next = 2;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
return _context.abrupt("return", []);
|
|
71
|
+
case 2:
|
|
72
|
+
if (!(!force && !touchedRef.current)) {
|
|
73
|
+
_context.next = 4;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
return _context.abrupt("return", []);
|
|
77
|
+
case 4:
|
|
78
|
+
values = {};
|
|
79
|
+
childNames.forEach(function (name) {
|
|
80
|
+
values[name] = formInstance.getFieldValue(name);
|
|
92
81
|
});
|
|
93
|
-
|
|
82
|
+
errors = []; // Required validation: error if any child field is empty
|
|
83
|
+
if (required) {
|
|
84
|
+
hasEmpty = childNames.some(function (name) {
|
|
85
|
+
return !values[name] && values[name] !== 0;
|
|
86
|
+
});
|
|
87
|
+
if (hasEmpty) {
|
|
88
|
+
errors.push({
|
|
89
|
+
name: childNames,
|
|
90
|
+
status: 'error',
|
|
91
|
+
value: values,
|
|
92
|
+
message: "".concat(label || '', " is required")
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Custom rules validation (supports sync + async validators)
|
|
98
|
+
if (!rules) {
|
|
99
|
+
_context.next = 29;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
_iterator = _createForOfIteratorHelper(rules);
|
|
103
|
+
_context.prev = 10;
|
|
104
|
+
_iterator.s();
|
|
105
|
+
case 12:
|
|
106
|
+
if ((_step = _iterator.n()).done) {
|
|
107
|
+
_context.next = 21;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
rule = _step.value;
|
|
111
|
+
if (!rule.validator) {
|
|
112
|
+
_context.next = 19;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
_context.next = 17;
|
|
116
|
+
return runValidator(rule.validator, values);
|
|
117
|
+
case 17:
|
|
118
|
+
result = _context.sent;
|
|
119
|
+
if (!result.passed) {
|
|
120
|
+
errors.push({
|
|
121
|
+
name: childNames,
|
|
122
|
+
status: 'error',
|
|
123
|
+
value: values,
|
|
124
|
+
message: (_ref2 = (_result$message = result.message) !== null && _result$message !== void 0 ? _result$message : rule.message) !== null && _ref2 !== void 0 ? _ref2 : ''
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
case 19:
|
|
128
|
+
_context.next = 12;
|
|
129
|
+
break;
|
|
130
|
+
case 21:
|
|
131
|
+
_context.next = 26;
|
|
132
|
+
break;
|
|
133
|
+
case 23:
|
|
134
|
+
_context.prev = 23;
|
|
135
|
+
_context.t0 = _context["catch"](10);
|
|
136
|
+
_iterator.e(_context.t0);
|
|
137
|
+
case 26:
|
|
138
|
+
_context.prev = 26;
|
|
139
|
+
_iterator.f();
|
|
140
|
+
return _context.finish(26);
|
|
141
|
+
case 29:
|
|
142
|
+
return _context.abrupt("return", errors);
|
|
143
|
+
case 30:
|
|
144
|
+
case "end":
|
|
145
|
+
return _context.stop();
|
|
94
146
|
}
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
return
|
|
98
|
-
|
|
147
|
+
}, _callee, null, [[10, 23, 26, 29]]);
|
|
148
|
+
}));
|
|
149
|
+
return function validate(_x) {
|
|
150
|
+
return _ref.apply(this, arguments);
|
|
151
|
+
};
|
|
152
|
+
}();
|
|
99
153
|
|
|
100
154
|
// Validation result state
|
|
101
155
|
var _useReducer5 = useReducer(function (prev, next) {
|
|
@@ -104,17 +158,34 @@ var Group = function Group(props) {
|
|
|
104
158
|
_useReducer6 = _slicedToArray(_useReducer5, 2),
|
|
105
159
|
errors = _useReducer6[0],
|
|
106
160
|
setErrors = _useReducer6[1];
|
|
107
|
-
var runValidation = function
|
|
108
|
-
var
|
|
109
|
-
|
|
110
|
-
|
|
161
|
+
var runValidation = /*#__PURE__*/function () {
|
|
162
|
+
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
163
|
+
var result;
|
|
164
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
165
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
166
|
+
case 0:
|
|
167
|
+
_context2.next = 2;
|
|
168
|
+
return _validate(false);
|
|
169
|
+
case 2:
|
|
170
|
+
result = _context2.sent;
|
|
171
|
+
setErrors(result);
|
|
172
|
+
case 4:
|
|
173
|
+
case "end":
|
|
174
|
+
return _context2.stop();
|
|
175
|
+
}
|
|
176
|
+
}, _callee2);
|
|
177
|
+
}));
|
|
178
|
+
return function runValidation() {
|
|
179
|
+
return _ref3.apply(this, arguments);
|
|
180
|
+
};
|
|
181
|
+
}();
|
|
111
182
|
|
|
112
183
|
// Subscribe to child field changes
|
|
113
184
|
useEffect(function () {
|
|
114
185
|
var unsubscribes = childNames.map(function (name) {
|
|
115
186
|
return formInstance.subscribe(name, function () {
|
|
116
187
|
touchedRef.current = true;
|
|
117
|
-
runValidation();
|
|
188
|
+
void runValidation();
|
|
118
189
|
});
|
|
119
190
|
});
|
|
120
191
|
return function () {
|
|
@@ -127,12 +198,30 @@ var Group = function Group(props) {
|
|
|
127
198
|
// Register group validator to FormStore
|
|
128
199
|
useEffect(function () {
|
|
129
200
|
var unregister = formInstance.registerGroupEntity(groupId, {
|
|
130
|
-
validate: function
|
|
131
|
-
var
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
201
|
+
validate: function () {
|
|
202
|
+
var _validate2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(force) {
|
|
203
|
+
var result;
|
|
204
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
205
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
206
|
+
case 0:
|
|
207
|
+
_context3.next = 2;
|
|
208
|
+
return _validate(force);
|
|
209
|
+
case 2:
|
|
210
|
+
result = _context3.sent;
|
|
211
|
+
setErrors(result);
|
|
212
|
+
forceUpdate();
|
|
213
|
+
return _context3.abrupt("return", result);
|
|
214
|
+
case 6:
|
|
215
|
+
case "end":
|
|
216
|
+
return _context3.stop();
|
|
217
|
+
}
|
|
218
|
+
}, _callee3);
|
|
219
|
+
}));
|
|
220
|
+
function validate(_x2) {
|
|
221
|
+
return _validate2.apply(this, arguments);
|
|
222
|
+
}
|
|
223
|
+
return validate;
|
|
224
|
+
}(),
|
|
136
225
|
reset: function reset() {
|
|
137
226
|
touchedRef.current = false;
|
|
138
227
|
setErrors([]);
|