@rainbow-oh/yee-c 0.4.5 → 0.5.1
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/Descriptions/descriptions.js +8 -1
- package/dist/cjs/Descriptions/interface.d.ts +1 -1
- 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/size.js +2 -0
- 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 +46 -1
- 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/Selector/style/index.less +8 -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/size.css +4 -0
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +5 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Descriptions/descriptions.js +2 -1
- package/dist/esm/Descriptions/interface.d.ts +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/size.js +2 -0
- 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 +46 -1
- 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/Selector/style/index.less +8 -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/size.css +4 -0
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +5 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/yee-c.min.css +2 -2
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Descriptions/descriptions.tsx +4 -1
- package/src/Descriptions/interface.ts +7 -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/size.tsx +2 -0
- 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 +51 -3
- 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/Selector/style/index.less +8 -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/style/size.css +4 -0
- package/src/version.ts +1 -1
|
@@ -249,7 +249,14 @@ var Descriptions = import_react.default.forwardRef(
|
|
|
249
249
|
});
|
|
250
250
|
return elements;
|
|
251
251
|
};
|
|
252
|
-
return /* @__PURE__ */ import_react.default.createElement("div", __spreadProps(__spreadValues({}, rest), { className: cls, style, ref }), renderHeader(), /* @__PURE__ */ import_react.default.createElement(
|
|
252
|
+
return /* @__PURE__ */ import_react.default.createElement("div", __spreadProps(__spreadValues({}, rest), { className: cls, style, ref }), renderHeader(), /* @__PURE__ */ import_react.default.createElement(
|
|
253
|
+
"table",
|
|
254
|
+
{
|
|
255
|
+
className: (0, import_clsx.default)(`${prefixCls}-table`, classNames == null ? void 0 : classNames.table),
|
|
256
|
+
style: styles == null ? void 0 : styles.table
|
|
257
|
+
},
|
|
258
|
+
/* @__PURE__ */ import_react.default.createElement("tbody", null, renderRows())
|
|
259
|
+
));
|
|
253
260
|
}
|
|
254
261
|
);
|
|
255
262
|
Descriptions.displayName = "Descriptions";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
2
|
import type { DataAttributeProps } from '../utils/types';
|
|
3
|
-
export type SemanticDOM = 'header' | 'title' | 'extra' | 'label' | 'content';
|
|
3
|
+
export type SemanticDOM = 'header' | 'title' | 'extra' | 'label' | 'content' | 'table';
|
|
4
4
|
export interface DescriptionsItem {
|
|
5
5
|
key?: React.Key;
|
|
6
6
|
label?: React.ReactNode;
|
|
@@ -162,7 +162,7 @@ var Dialog = (baseprops) => {
|
|
|
162
162
|
[`${prefixCls}-fullscreen`]: fullscreen
|
|
163
163
|
});
|
|
164
164
|
const renderFooter = () => {
|
|
165
|
-
if (footer === false) {
|
|
165
|
+
if (footer === false || footer === null) {
|
|
166
166
|
return null;
|
|
167
167
|
}
|
|
168
168
|
if (footer === true || footer === void 0) {
|
|
@@ -25,6 +25,26 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
25
25
|
mod
|
|
26
26
|
));
|
|
27
27
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var __async = (__this, __arguments, generator) => {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
var fulfilled = (value) => {
|
|
31
|
+
try {
|
|
32
|
+
step(generator.next(value));
|
|
33
|
+
} catch (e) {
|
|
34
|
+
reject(e);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var rejected = (value) => {
|
|
38
|
+
try {
|
|
39
|
+
step(generator.throw(value));
|
|
40
|
+
} catch (e) {
|
|
41
|
+
reject(e);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
45
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
46
|
+
});
|
|
47
|
+
};
|
|
28
48
|
|
|
29
49
|
// src/Field/demo/validation.tsx
|
|
30
50
|
var validation_exports = {};
|
|
@@ -39,15 +59,15 @@ var validation_default = () => {
|
|
|
39
59
|
(0, import_react.useLayoutEffect)(() => {
|
|
40
60
|
createForm("validationForm");
|
|
41
61
|
}, []);
|
|
42
|
-
const handleSubmit = () => {
|
|
62
|
+
const handleSubmit = () => __async(void 0, null, function* () {
|
|
43
63
|
const form = getForm("validationForm");
|
|
44
64
|
console.log("form: ", form);
|
|
45
|
-
const errors = form == null ? void 0 : form.submit();
|
|
65
|
+
const errors = yield form == null ? void 0 : form.submit();
|
|
46
66
|
console.log("errors: ", errors);
|
|
47
67
|
if (errors && errors.length === 0) {
|
|
48
68
|
console.log("Submit success:", form == null ? void 0 : form.getFieldsValue());
|
|
49
69
|
}
|
|
50
|
-
};
|
|
70
|
+
});
|
|
51
71
|
return /* @__PURE__ */ import_react.default.createElement("div", { style: { maxWidth: 400 } }, /* @__PURE__ */ import_react.default.createElement(
|
|
52
72
|
import_yee_c.Field,
|
|
53
73
|
{
|
package/dist/cjs/Field/field.js
CHANGED
|
@@ -98,7 +98,7 @@ var Field = (props) => {
|
|
|
98
98
|
forceUpdate();
|
|
99
99
|
},
|
|
100
100
|
onBlur: (event) => {
|
|
101
|
-
validateField == null ? void 0 : validateField(name, "onBlur");
|
|
101
|
+
void (validateField == null ? void 0 : validateField(name, "onBlur"));
|
|
102
102
|
if (children2.props.onBlur) {
|
|
103
103
|
children2.props.onBlur(event);
|
|
104
104
|
}
|
package/dist/cjs/Form/Field.js
CHANGED
|
@@ -171,10 +171,7 @@ var Field = (props) => {
|
|
|
171
171
|
},
|
|
172
172
|
onBlur: (event) => {
|
|
173
173
|
var _a2;
|
|
174
|
-
|
|
175
|
-
if (err.length) {
|
|
176
|
-
forceUpdate();
|
|
177
|
-
}
|
|
174
|
+
void (validateField == null ? void 0 : validateField(normalizedName, "onBlur"));
|
|
178
175
|
(_a2 = props2 == null ? void 0 : props2.onBlur) == null ? void 0 : _a2.call(props2, event);
|
|
179
176
|
}
|
|
180
177
|
});
|
package/dist/cjs/Form/Form.js
CHANGED
package/dist/cjs/Form/Group.js
CHANGED
|
@@ -25,6 +25,26 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
25
25
|
mod
|
|
26
26
|
));
|
|
27
27
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var __async = (__this, __arguments, generator) => {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
var fulfilled = (value) => {
|
|
31
|
+
try {
|
|
32
|
+
step(generator.next(value));
|
|
33
|
+
} catch (e) {
|
|
34
|
+
reject(e);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var rejected = (value) => {
|
|
38
|
+
try {
|
|
39
|
+
step(generator.throw(value));
|
|
40
|
+
} catch (e) {
|
|
41
|
+
reject(e);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
45
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
46
|
+
});
|
|
47
|
+
};
|
|
28
48
|
|
|
29
49
|
// src/Form/Group.tsx
|
|
30
50
|
var Group_exports = {};
|
|
@@ -36,6 +56,7 @@ var import_clsx = __toESM(require("clsx"));
|
|
|
36
56
|
var import_react = require("motion/react");
|
|
37
57
|
var import_react2 = __toESM(require("react"));
|
|
38
58
|
var import_Grid = __toESM(require("../Grid"));
|
|
59
|
+
var import_validate = require("./utils/validate");
|
|
39
60
|
var import_FieldContext = __toESM(require("./FieldContext"));
|
|
40
61
|
var import_FormContext = __toESM(require("./FormContext"));
|
|
41
62
|
var Group = (props) => {
|
|
@@ -53,7 +74,8 @@ var Group = (props) => {
|
|
|
53
74
|
}, [children]);
|
|
54
75
|
const touchedRef = (0, import_react2.useRef)(false);
|
|
55
76
|
const [, forceValidate] = (0, import_react2.useReducer)((x) => x + 1, 0);
|
|
56
|
-
const validate = (force) => {
|
|
77
|
+
const validate = (force) => __async(void 0, null, function* () {
|
|
78
|
+
var _a2, _b;
|
|
57
79
|
if (!required && (!rules || rules.length === 0))
|
|
58
80
|
return [];
|
|
59
81
|
if (!force && !touchedRef.current)
|
|
@@ -77,47 +99,47 @@ var Group = (props) => {
|
|
|
77
99
|
}
|
|
78
100
|
}
|
|
79
101
|
if (rules) {
|
|
80
|
-
|
|
102
|
+
for (const rule of rules) {
|
|
81
103
|
if (rule.validator) {
|
|
82
|
-
const
|
|
83
|
-
if (!passed) {
|
|
104
|
+
const result = yield (0, import_validate.runValidator)(rule.validator, values);
|
|
105
|
+
if (!result.passed) {
|
|
84
106
|
errors2.push({
|
|
85
107
|
name: childNames,
|
|
86
108
|
status: "error",
|
|
87
109
|
value: values,
|
|
88
|
-
message: rule.message
|
|
110
|
+
message: (_b = (_a2 = result.message) != null ? _a2 : rule.message) != null ? _b : ""
|
|
89
111
|
});
|
|
90
112
|
}
|
|
91
113
|
}
|
|
92
|
-
}
|
|
114
|
+
}
|
|
93
115
|
}
|
|
94
116
|
return errors2;
|
|
95
|
-
};
|
|
117
|
+
});
|
|
96
118
|
const [errors, setErrors] = (0, import_react2.useReducer)(
|
|
97
119
|
(prev, next) => next,
|
|
98
120
|
[]
|
|
99
121
|
);
|
|
100
|
-
const runValidation = () => {
|
|
101
|
-
const result = validate(false);
|
|
122
|
+
const runValidation = () => __async(void 0, null, function* () {
|
|
123
|
+
const result = yield validate(false);
|
|
102
124
|
setErrors(result);
|
|
103
|
-
};
|
|
125
|
+
});
|
|
104
126
|
(0, import_react2.useEffect)(() => {
|
|
105
127
|
const unsubscribes = childNames.map(
|
|
106
128
|
(name) => formInstance.subscribe(name, () => {
|
|
107
129
|
touchedRef.current = true;
|
|
108
|
-
runValidation();
|
|
130
|
+
void runValidation();
|
|
109
131
|
})
|
|
110
132
|
);
|
|
111
133
|
return () => unsubscribes.forEach((fn) => fn());
|
|
112
134
|
}, [childNames, formInstance]);
|
|
113
135
|
(0, import_react2.useEffect)(() => {
|
|
114
136
|
const unregister = formInstance.registerGroupEntity(groupId, {
|
|
115
|
-
validate: (force) => {
|
|
116
|
-
const result = validate(force);
|
|
137
|
+
validate: (force) => __async(void 0, null, function* () {
|
|
138
|
+
const result = yield validate(force);
|
|
117
139
|
setErrors(result);
|
|
118
140
|
forceUpdate();
|
|
119
141
|
return result;
|
|
120
|
-
},
|
|
142
|
+
}),
|
|
121
143
|
reset: () => {
|
|
122
144
|
touchedRef.current = false;
|
|
123
145
|
setErrors([]);
|
package/dist/cjs/Form/List.js
CHANGED
|
@@ -25,6 +25,26 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
25
25
|
mod
|
|
26
26
|
));
|
|
27
27
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var __async = (__this, __arguments, generator) => {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
var fulfilled = (value) => {
|
|
31
|
+
try {
|
|
32
|
+
step(generator.next(value));
|
|
33
|
+
} catch (e) {
|
|
34
|
+
reject(e);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var rejected = (value) => {
|
|
38
|
+
try {
|
|
39
|
+
step(generator.throw(value));
|
|
40
|
+
} catch (e) {
|
|
41
|
+
reject(e);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
45
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
46
|
+
});
|
|
47
|
+
};
|
|
28
48
|
|
|
29
49
|
// src/Form/List.tsx
|
|
30
50
|
var List_exports = {};
|
|
@@ -75,7 +95,7 @@ var List = ({
|
|
|
75
95
|
return Array.isArray(value) ? value : [];
|
|
76
96
|
};
|
|
77
97
|
const operations = (0, import_react.useMemo)(() => {
|
|
78
|
-
const add = (defaultValue, insertIndex) => {
|
|
98
|
+
const add = (defaultValue, insertIndex) => __async(void 0, null, function* () {
|
|
79
99
|
const currentValue = getListValue();
|
|
80
100
|
const pathStr = prefixName.join(".");
|
|
81
101
|
const fieldPaths = [];
|
|
@@ -87,7 +107,7 @@ var List = ({
|
|
|
87
107
|
});
|
|
88
108
|
}
|
|
89
109
|
});
|
|
90
|
-
const errors = validateFields == null ? void 0 : validateFields(fieldPaths);
|
|
110
|
+
const errors = yield validateFields == null ? void 0 : validateFields(fieldPaths);
|
|
91
111
|
if (errors && errors.length > 0) {
|
|
92
112
|
forceUpdate((prev) => prev + 1);
|
|
93
113
|
return;
|
|
@@ -114,7 +134,7 @@ var List = ({
|
|
|
114
134
|
}
|
|
115
135
|
keyManager.id += 1;
|
|
116
136
|
forceUpdate((prev) => prev + 1);
|
|
117
|
-
};
|
|
137
|
+
});
|
|
118
138
|
const remove = (index) => {
|
|
119
139
|
const indices = Array.isArray(index) ? index : [index];
|
|
120
140
|
const indexSet = new Set(indices);
|
|
@@ -0,0 +1,108 @@
|
|
|
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
|
+
var __async = (__this, __arguments, generator) => {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
var fulfilled = (value) => {
|
|
31
|
+
try {
|
|
32
|
+
step(generator.next(value));
|
|
33
|
+
} catch (e) {
|
|
34
|
+
reject(e);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var rejected = (value) => {
|
|
38
|
+
try {
|
|
39
|
+
step(generator.throw(value));
|
|
40
|
+
} catch (e) {
|
|
41
|
+
reject(e);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
45
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// src/Form/demo/async-validate.tsx
|
|
50
|
+
var async_validate_exports = {};
|
|
51
|
+
__export(async_validate_exports, {
|
|
52
|
+
default: () => async_validate_default
|
|
53
|
+
});
|
|
54
|
+
module.exports = __toCommonJS(async_validate_exports);
|
|
55
|
+
var import_yee_c = require("../..");
|
|
56
|
+
var import_react = __toESM(require("react"));
|
|
57
|
+
var TAKEN_USERNAMES = /* @__PURE__ */ new Set(["admin", "root", "test"]);
|
|
58
|
+
function checkUsernameUnique(username) {
|
|
59
|
+
return new Promise((resolve) => {
|
|
60
|
+
setTimeout(() => resolve(!TAKEN_USERNAMES.has(username)), 600);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
var async_validate_default = () => {
|
|
64
|
+
const [form] = import_yee_c.Form.useForm();
|
|
65
|
+
const onFinish = (values) => {
|
|
66
|
+
console.log("Received values:", values);
|
|
67
|
+
};
|
|
68
|
+
const onFinishFailed = (errorInfo) => {
|
|
69
|
+
console.log("Failed:", errorInfo);
|
|
70
|
+
};
|
|
71
|
+
return /* @__PURE__ */ import_react.default.createElement(import_yee_c.Form, { form, onFinish, onFinishFailed }, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Grid, null, /* @__PURE__ */ import_react.default.createElement(
|
|
72
|
+
import_yee_c.Form.Field,
|
|
73
|
+
{
|
|
74
|
+
name: "username",
|
|
75
|
+
label: "Username",
|
|
76
|
+
rules: [
|
|
77
|
+
{ required: true, message: "Please input your username!" },
|
|
78
|
+
{
|
|
79
|
+
// Async validator: resolve to pass, throw / reject to fail.
|
|
80
|
+
// The thrown Error's message overrides rule.message.
|
|
81
|
+
validator: (value) => __async(void 0, null, function* () {
|
|
82
|
+
const isUnique = yield checkUsernameUnique(String(value));
|
|
83
|
+
if (!isUnique) {
|
|
84
|
+
throw new Error("This username is already taken");
|
|
85
|
+
}
|
|
86
|
+
}),
|
|
87
|
+
// Validate on blur so we don't hit the "API" on every keystroke.
|
|
88
|
+
validateTrigger: "onBlur"
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
/* @__PURE__ */ import_react.default.createElement(import_yee_c.Input, { placeholder: "Try admin / root / test (already taken)" })
|
|
93
|
+
), /* @__PURE__ */ import_react.default.createElement(
|
|
94
|
+
import_yee_c.Form.Field,
|
|
95
|
+
{
|
|
96
|
+
name: "email",
|
|
97
|
+
label: "Email",
|
|
98
|
+
rules: [
|
|
99
|
+
{ required: true, message: "Please input your email!" },
|
|
100
|
+
{
|
|
101
|
+
regexp: /^[\w.+-]+@[\w-]+\.[\w.-]+$/,
|
|
102
|
+
message: "Please enter a valid email!"
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
/* @__PURE__ */ import_react.default.createElement(import_yee_c.Input, { placeholder: "Please input your email" })
|
|
107
|
+
)), /* @__PURE__ */ import_react.default.createElement(import_yee_c.Space, null, /* @__PURE__ */ import_react.default.createElement(import_yee_c.Button, { type: "primary", htmlType: "submit" }, "Submit"), /* @__PURE__ */ import_react.default.createElement(import_yee_c.Button, { htmlType: "reset" }, "Reset")));
|
|
108
|
+
};
|
|
@@ -26,13 +26,13 @@ export declare class FormStore {
|
|
|
26
26
|
setFieldsValue: (newStore: Store, trigger?: TRIGGER) => void;
|
|
27
27
|
resetFields: (name?: Name[]) => void;
|
|
28
28
|
clearFields: (name?: Name[]) => void;
|
|
29
|
-
validateField: (name: Name, trigger?: TRIGGER) => ValidateMessage[]
|
|
30
|
-
validateFields: (names?: string[], trigger?: TRIGGER) => ValidateMessage[]
|
|
29
|
+
validateField: (name: Name, trigger?: TRIGGER) => Promise<ValidateMessage[]>;
|
|
30
|
+
validateFields: (names?: string[], trigger?: TRIGGER) => Promise<ValidateMessage[]>;
|
|
31
31
|
refreshField: (newStore?: Store) => void;
|
|
32
32
|
subscribe: (namePath?: NamePath, callback?: () => void) => (() => void);
|
|
33
33
|
private notifyWatchers;
|
|
34
34
|
registerGroupEntity: (id: string, entity: GroupEntity) => (() => void);
|
|
35
|
-
validateGroups: (force?: boolean) => ValidateMessage[]
|
|
35
|
+
validateGroups: (force?: boolean) => Promise<ValidateMessage[]>;
|
|
36
36
|
setCallbacks: (callbacks: Callbacks) => void;
|
|
37
37
|
getCallbacks: () => Callbacks<any>;
|
|
38
38
|
/**
|
|
@@ -53,6 +53,6 @@ export declare class FormStore {
|
|
|
53
53
|
*/
|
|
54
54
|
private setListValue;
|
|
55
55
|
registerFieldEntities: (entity: FieldEntity) => () => void;
|
|
56
|
-
submit: () => ValidateMessage[]
|
|
56
|
+
submit: () => Promise<ValidateMessage[]>;
|
|
57
57
|
getForm(): FormInstance;
|
|
58
58
|
}
|
|
@@ -42,6 +42,26 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
42
42
|
mod
|
|
43
43
|
));
|
|
44
44
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
45
|
+
var __async = (__this, __arguments, generator) => {
|
|
46
|
+
return new Promise((resolve, reject) => {
|
|
47
|
+
var fulfilled = (value) => {
|
|
48
|
+
try {
|
|
49
|
+
step(generator.next(value));
|
|
50
|
+
} catch (e) {
|
|
51
|
+
reject(e);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
var rejected = (value) => {
|
|
55
|
+
try {
|
|
56
|
+
step(generator.throw(value));
|
|
57
|
+
} catch (e) {
|
|
58
|
+
reject(e);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
62
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
63
|
+
});
|
|
64
|
+
};
|
|
45
65
|
|
|
46
66
|
// src/Form/form-store.ts
|
|
47
67
|
var form_store_exports = {};
|
|
@@ -151,7 +171,7 @@ var FormStore = class {
|
|
|
151
171
|
});
|
|
152
172
|
}
|
|
153
173
|
if (trigger === "onChange" || trigger === "onBlur" || trigger === "onSubmit") {
|
|
154
|
-
this.validateFields(Object.keys(newStore), trigger);
|
|
174
|
+
void this.validateFields(Object.keys(newStore), trigger);
|
|
155
175
|
}
|
|
156
176
|
this.refreshField(newStore);
|
|
157
177
|
};
|
|
@@ -197,7 +217,8 @@ var FormStore = class {
|
|
|
197
217
|
}, {});
|
|
198
218
|
this.setFieldsValue(clearStore, "clear");
|
|
199
219
|
};
|
|
200
|
-
this.validateField = (name, trigger) => {
|
|
220
|
+
this.validateField = (name, trigger) => __async(this, null, function* () {
|
|
221
|
+
var _a;
|
|
201
222
|
const entity = this.fieldMap.get(name);
|
|
202
223
|
if (!entity) {
|
|
203
224
|
return [];
|
|
@@ -225,27 +246,32 @@ var FormStore = class {
|
|
|
225
246
|
});
|
|
226
247
|
}
|
|
227
248
|
const value = this.getFieldValue(name);
|
|
228
|
-
|
|
229
|
-
const
|
|
230
|
-
if (name && !
|
|
231
|
-
err.push(__spreadValues({
|
|
249
|
+
for (const rule of mergedRules) {
|
|
250
|
+
const result = yield (0, import_validate.default)(rule, value);
|
|
251
|
+
if (name && !result.passed) {
|
|
252
|
+
err.push(__spreadProps(__spreadValues({}, rule), {
|
|
232
253
|
name,
|
|
233
254
|
status: "error",
|
|
234
|
-
value
|
|
235
|
-
|
|
255
|
+
value,
|
|
256
|
+
message: (_a = result.message) != null ? _a : rule.message
|
|
257
|
+
}));
|
|
236
258
|
}
|
|
237
|
-
}
|
|
259
|
+
}
|
|
238
260
|
if (err.length > 0) {
|
|
239
261
|
this.validateMessages.set(name, err);
|
|
240
262
|
} else if (this.validateMessages.has(name)) {
|
|
241
263
|
this.validateMessages.delete(name);
|
|
242
264
|
}
|
|
265
|
+
entity == null ? void 0 : entity.onStoreChange();
|
|
243
266
|
return err;
|
|
244
|
-
};
|
|
245
|
-
this.validateFields = (names = Array.from(this.fieldMap.keys()), trigger)
|
|
267
|
+
});
|
|
268
|
+
this.validateFields = (..._0) => __async(this, [..._0], function* (names = Array.from(this.fieldMap.keys()), trigger) {
|
|
269
|
+
const results = yield Promise.all(
|
|
270
|
+
names.map((name) => this.validateField(name, trigger))
|
|
271
|
+
);
|
|
246
272
|
let err = [];
|
|
247
|
-
names.forEach((name) => {
|
|
248
|
-
const messages =
|
|
273
|
+
names.forEach((name, index) => {
|
|
274
|
+
const messages = results[index];
|
|
249
275
|
err = err.concat(messages);
|
|
250
276
|
if (messages.length > 0) {
|
|
251
277
|
this.validateMessages.set(name, messages);
|
|
@@ -254,7 +280,7 @@ var FormStore = class {
|
|
|
254
280
|
}
|
|
255
281
|
});
|
|
256
282
|
return err;
|
|
257
|
-
};
|
|
283
|
+
});
|
|
258
284
|
this.refreshField = (newStore) => {
|
|
259
285
|
if (newStore) {
|
|
260
286
|
const keys = Object.keys(newStore);
|
|
@@ -301,13 +327,17 @@ var FormStore = class {
|
|
|
301
327
|
this.groupEntities.delete(id);
|
|
302
328
|
};
|
|
303
329
|
};
|
|
304
|
-
this.validateGroups = (force = false) => {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
330
|
+
this.validateGroups = (force = false) => __async(this, null, function* () {
|
|
331
|
+
const results = yield Promise.all(
|
|
332
|
+
Array.from(this.groupEntities.values()).map(
|
|
333
|
+
(entity) => entity.validate(force)
|
|
334
|
+
)
|
|
335
|
+
);
|
|
336
|
+
return results.reduce(
|
|
337
|
+
(acc, messages) => acc.concat(messages),
|
|
338
|
+
[]
|
|
339
|
+
);
|
|
340
|
+
});
|
|
311
341
|
this.setCallbacks = (callbacks) => {
|
|
312
342
|
this.callbacks = __spreadValues(__spreadValues({}, this.callbacks), callbacks);
|
|
313
343
|
};
|
|
@@ -431,10 +461,10 @@ var FormStore = class {
|
|
|
431
461
|
this.fieldMap.delete(normalizedName);
|
|
432
462
|
};
|
|
433
463
|
};
|
|
434
|
-
this.submit = () => {
|
|
464
|
+
this.submit = () => __async(this, null, function* () {
|
|
435
465
|
const { onFinish, onFinishFailed } = this.callbacks;
|
|
436
|
-
const fieldErrors = this.validateFields();
|
|
437
|
-
const groupErrors = this.validateGroups(true);
|
|
466
|
+
const fieldErrors = yield this.validateFields();
|
|
467
|
+
const groupErrors = yield this.validateGroups(true);
|
|
438
468
|
const allErrors = [...fieldErrors, ...groupErrors];
|
|
439
469
|
if (allErrors.length === 0) {
|
|
440
470
|
onFinish == null ? void 0 : onFinish(this.getFieldsValue());
|
|
@@ -443,7 +473,7 @@ var FormStore = class {
|
|
|
443
473
|
}
|
|
444
474
|
this.refreshField();
|
|
445
475
|
return allErrors;
|
|
446
|
-
};
|
|
476
|
+
});
|
|
447
477
|
}
|
|
448
478
|
// Set default validation message
|
|
449
479
|
setDefaultValidateMessage(message) {
|
|
@@ -103,7 +103,7 @@ export interface FormInstance<Values = any> {
|
|
|
103
103
|
/**
|
|
104
104
|
* Submit form
|
|
105
105
|
*/
|
|
106
|
-
submit: () => ValidateMessage[]
|
|
106
|
+
submit: () => Promise<ValidateMessage[]>;
|
|
107
107
|
/**
|
|
108
108
|
* Get all field values
|
|
109
109
|
*/
|
|
@@ -127,7 +127,7 @@ export interface FormInstance<Values = any> {
|
|
|
127
127
|
/**
|
|
128
128
|
* Validate field
|
|
129
129
|
*/
|
|
130
|
-
validateField: (name: Name, trigger?: 'onChange' | 'onBlur') => ValidateMessage[]
|
|
130
|
+
validateField: (name: Name, trigger?: 'onChange' | 'onBlur') => Promise<ValidateMessage[]>;
|
|
131
131
|
/**
|
|
132
132
|
* Get callback functions
|
|
133
133
|
*/
|
|
@@ -139,7 +139,7 @@ export interface FormInstance<Values = any> {
|
|
|
139
139
|
/**
|
|
140
140
|
* Validate fields and get error messages
|
|
141
141
|
*/
|
|
142
|
-
validateFields: (names?: Name[], trigger?: TRIGGER) => ValidateMessage[]
|
|
142
|
+
validateFields: (names?: Name[], trigger?: TRIGGER) => Promise<ValidateMessage[]>;
|
|
143
143
|
/**
|
|
144
144
|
* Initialize form - mainly used to set initial values and callbacks
|
|
145
145
|
*/
|
|
@@ -214,9 +214,12 @@ export type Rule = {
|
|
|
214
214
|
*/
|
|
215
215
|
message?: string;
|
|
216
216
|
/**
|
|
217
|
-
* Custom validation function
|
|
217
|
+
* Custom validation function. Supports sync and async:
|
|
218
|
+
* - sync: return true/undefined to pass, return false or throw to fail
|
|
219
|
+
* - async: return a Promise (resolve to pass, reject/throw to fail)
|
|
220
|
+
* When throwing/rejecting with an Error, its message overrides rule.message.
|
|
218
221
|
*/
|
|
219
|
-
validator?: (value: unknown) => boolean
|
|
222
|
+
validator?: (value: unknown) => boolean | void | Promise<boolean | void>;
|
|
220
223
|
/**
|
|
221
224
|
* Validation trigger timing
|
|
222
225
|
*/
|
|
@@ -314,7 +317,7 @@ export type FormListField<T = any> = {
|
|
|
314
317
|
value: T;
|
|
315
318
|
};
|
|
316
319
|
export type FormListOperation = {
|
|
317
|
-
add: (defaultValue?: any, insertIndex?: number) => void
|
|
320
|
+
add: (defaultValue?: any, insertIndex?: number) => void | Promise<void>;
|
|
318
321
|
remove: (index: number | number[]) => void;
|
|
319
322
|
move: (from: number, to: number) => void;
|
|
320
323
|
};
|
|
@@ -357,6 +360,6 @@ export type FieldGroupProps = {
|
|
|
357
360
|
className?: string;
|
|
358
361
|
};
|
|
359
362
|
export interface GroupEntity {
|
|
360
|
-
validate: (force: boolean) => ValidateMessage[]
|
|
363
|
+
validate: (force: boolean) => Promise<ValidateMessage[]>;
|
|
361
364
|
reset: () => void;
|
|
362
365
|
}
|
|
@@ -1,3 +1,24 @@
|
|
|
1
|
-
import { Rule } from '../interface';
|
|
2
|
-
|
|
1
|
+
import type { Rule } from '../interface';
|
|
2
|
+
export interface ValidateResult {
|
|
3
|
+
passed: boolean;
|
|
4
|
+
message?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Run a custom validator, dispatching between sync and async at runtime.
|
|
8
|
+
*
|
|
9
|
+
* Supports all of the following shapes (backwards compatible):
|
|
10
|
+
* - sync `return true` / `return undefined` → pass
|
|
11
|
+
* - sync `return false` → fail (use rule.message)
|
|
12
|
+
* - sync `throw new Error(msg)` → fail (use msg)
|
|
13
|
+
* - async `return Promise.resolve()` → pass
|
|
14
|
+
* - async `return Promise.resolve(false)` → fail (use rule.message)
|
|
15
|
+
* - async `throw` / `return Promise.reject(new Error(msg))` → fail (use msg)
|
|
16
|
+
*/
|
|
17
|
+
export declare function runValidator(validator: NonNullable<Rule['validator']>, value: unknown): Promise<ValidateResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Validate a single rule against a value.
|
|
20
|
+
* Returns { passed, message? }. Sync rules short-circuit; the custom validator
|
|
21
|
+
* is awaited so async validators are supported.
|
|
22
|
+
*/
|
|
23
|
+
declare function validate(rule: Rule, value: unknown): Promise<ValidateResult>;
|
|
3
24
|
export default validate;
|