@hi-ui/form 4.0.0-alpha.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/LICENSE +21 -0
- package/README.md +11 -0
- package/lib/cjs/Form.js +106 -0
- package/lib/cjs/Form.js.map +1 -0
- package/lib/cjs/FormField.js +44 -0
- package/lib/cjs/FormField.js.map +1 -0
- package/lib/cjs/FormItem.js +61 -0
- package/lib/cjs/FormItem.js.map +1 -0
- package/lib/cjs/FormLabel.js +135 -0
- package/lib/cjs/FormLabel.js.map +1 -0
- package/lib/cjs/FormList.js +166 -0
- package/lib/cjs/FormList.js.map +1 -0
- package/lib/cjs/FormMessage.js +72 -0
- package/lib/cjs/FormMessage.js.map +1 -0
- package/lib/cjs/context.js +33 -0
- package/lib/cjs/context.js.map +1 -0
- package/lib/cjs/index.js +29 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/styles/index.scss.js +22 -0
- package/lib/cjs/styles/index.scss.js.map +1 -0
- package/lib/cjs/use-form-field.js +114 -0
- package/lib/cjs/use-form-field.js.map +1 -0
- package/lib/cjs/use-form.js +544 -0
- package/lib/cjs/use-form.js.map +1 -0
- package/lib/esm/Form.js +83 -0
- package/lib/esm/Form.js.map +1 -0
- package/lib/esm/FormField.js +35 -0
- package/lib/esm/FormField.js.map +1 -0
- package/lib/esm/FormItem.js +39 -0
- package/lib/esm/FormItem.js.map +1 -0
- package/lib/esm/FormLabel.js +113 -0
- package/lib/esm/FormLabel.js.map +1 -0
- package/lib/esm/FormList.js +145 -0
- package/lib/esm/FormList.js.map +1 -0
- package/lib/esm/FormMessage.js +51 -0
- package/lib/esm/FormMessage.js.map +1 -0
- package/lib/esm/context.js +25 -0
- package/lib/esm/context.js.map +1 -0
- package/lib/esm/index.js +14 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/styles/index.scss.js +17 -0
- package/lib/esm/styles/index.scss.js.map +1 -0
- package/lib/esm/use-form-field.js +94 -0
- package/lib/esm/use-form-field.js.map +1 -0
- package/lib/esm/use-form.js +519 -0
- package/lib/esm/use-form.js.map +1 -0
- package/lib/types/Form.d.ts +35 -0
- package/lib/types/FormField.d.ts +12 -0
- package/lib/types/FormItem.d.ts +13 -0
- package/lib/types/FormLabel.d.ts +28 -0
- package/lib/types/FormList.d.ts +15 -0
- package/lib/types/FormMessage.d.ts +27 -0
- package/lib/types/FormReset.d.ts +8 -0
- package/lib/types/FormSubmit.d.ts +8 -0
- package/lib/types/context.d.ts +55 -0
- package/lib/types/index.d.ts +6 -0
- package/lib/types/types.d.ts +113 -0
- package/lib/types/use-form-field.d.ts +37 -0
- package/lib/types/use-form.d.ts +78 -0
- package/lib/types/utils/index.d.ts +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
/** @LICENSE
|
|
2
|
+
* @hi-ui/form
|
|
3
|
+
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/form#readme
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) HIUI <mi-hiui@xiaomi.com>.
|
|
6
|
+
*
|
|
7
|
+
* This source code is licensed under the MIT license found in the
|
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
|
9
|
+
*/
|
|
10
|
+
'use strict';
|
|
11
|
+
|
|
12
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
13
|
+
|
|
14
|
+
Object.defineProperty(exports, '__esModule', {
|
|
15
|
+
value: true
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
var _regeneratorRuntime = require('@babel/runtime/regenerator');
|
|
19
|
+
|
|
20
|
+
var tslib = require('tslib');
|
|
21
|
+
|
|
22
|
+
var React = require('react');
|
|
23
|
+
|
|
24
|
+
var useLatest = require('@hi-ui/use-latest');
|
|
25
|
+
|
|
26
|
+
var typeAssertion = require('@hi-ui/type-assertion');
|
|
27
|
+
|
|
28
|
+
var funcUtils = require('@hi-ui/func-utils');
|
|
29
|
+
|
|
30
|
+
var domUtils = require('@hi-ui/dom-utils');
|
|
31
|
+
|
|
32
|
+
function _interopDefaultLegacy(e) {
|
|
33
|
+
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
|
34
|
+
'default': e
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
|
|
39
|
+
|
|
40
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
41
|
+
|
|
42
|
+
var EMPTY_RULES = {};
|
|
43
|
+
var EMPTY_ERRORS = {};
|
|
44
|
+
var EMPTY_TOUCHED = {};
|
|
45
|
+
var DEFAULT_VALIDATE_TRIGGER = ['onChange', 'onBlur'];
|
|
46
|
+
|
|
47
|
+
var useForm = function useForm(_a) {
|
|
48
|
+
var initialValues = _a.initialValues,
|
|
49
|
+
_a$initialErrors = _a.initialErrors,
|
|
50
|
+
initialErrors = _a$initialErrors === void 0 ? EMPTY_ERRORS : _a$initialErrors,
|
|
51
|
+
_a$initialTouched = _a.initialTouched,
|
|
52
|
+
initialTouched = _a$initialTouched === void 0 ? EMPTY_TOUCHED : _a$initialTouched,
|
|
53
|
+
onValuesChange = _a.onValuesChange,
|
|
54
|
+
onReset = _a.onReset,
|
|
55
|
+
onSubmit = _a.onSubmit,
|
|
56
|
+
_a$rules = _a.rules,
|
|
57
|
+
rules = _a$rules === void 0 ? EMPTY_RULES : _a$rules,
|
|
58
|
+
_a$validateAfterTouch = _a.validateAfterTouched,
|
|
59
|
+
validateAfterTouched = _a$validateAfterTouch === void 0 ? true : _a$validateAfterTouch,
|
|
60
|
+
_a$validateTrigger = _a.validateTrigger,
|
|
61
|
+
validateTriggerProp = _a$validateTrigger === void 0 ? DEFAULT_VALIDATE_TRIGGER : _a$validateTrigger,
|
|
62
|
+
rest = tslib.__rest(_a, ["initialValues", "initialErrors", "initialTouched", "lazyValidate", "onValuesChange", "onReset", "onSubmit", "rules", "validateAfterTouched", "validateTrigger"]);
|
|
63
|
+
/**
|
|
64
|
+
* 处理校验触发器,保证 memo 依赖的是数组每个项,避免无效重渲染
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
var validateTrigger = typeAssertion.isArray(validateTriggerProp) ? validateTriggerProp : [validateTriggerProp]; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
69
|
+
|
|
70
|
+
var validateTriggersMemo = React.useMemo(function () {
|
|
71
|
+
return validateTrigger;
|
|
72
|
+
}, validateTrigger);
|
|
73
|
+
/**
|
|
74
|
+
* 收集 Field 的校验器注册表
|
|
75
|
+
*/
|
|
76
|
+
|
|
77
|
+
var _useCollection = useCollection(),
|
|
78
|
+
getValidation = _useCollection[0],
|
|
79
|
+
registerField = _useCollection[1],
|
|
80
|
+
unregisterField = _useCollection[2];
|
|
81
|
+
/**
|
|
82
|
+
* form 数据管理中心
|
|
83
|
+
*/
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
var _useReducer = React.useReducer(formReducer, {
|
|
87
|
+
values: initialValues,
|
|
88
|
+
errors: initialErrors,
|
|
89
|
+
touched: initialTouched,
|
|
90
|
+
validating: false,
|
|
91
|
+
submitting: false
|
|
92
|
+
}),
|
|
93
|
+
formState = _useReducer[0],
|
|
94
|
+
formDispatch = _useReducer[1]; // 使用 latest ref 维护,保证每次主动拿取的 formState 都是最新的
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
var formStateRef = useLatest.useLatestRef(formState); // @ts-ignore
|
|
98
|
+
|
|
99
|
+
var getFieldNames = React.useCallback(function () {
|
|
100
|
+
return Object.keys(formStateRef.current.values);
|
|
101
|
+
}, [formStateRef]); // @ts-ignore
|
|
102
|
+
|
|
103
|
+
var getFieldValue = React.useCallback(function (fieldName) {
|
|
104
|
+
return formStateRef.current.values[fieldName];
|
|
105
|
+
}, [formStateRef]);
|
|
106
|
+
var getFieldError = React.useCallback(function (fieldName) {
|
|
107
|
+
return formStateRef.current.errors[fieldName];
|
|
108
|
+
}, [formStateRef]);
|
|
109
|
+
var setFieldError = React.useCallback(function (field, errorMessage) {
|
|
110
|
+
formDispatch({
|
|
111
|
+
type: 'SET_FIELD_ERROR',
|
|
112
|
+
// @ts-ignore
|
|
113
|
+
payload: {
|
|
114
|
+
field: field,
|
|
115
|
+
value: errorMessage
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}, []);
|
|
119
|
+
var setFieldTouched = React.useCallback(function (field, touched) {
|
|
120
|
+
if (touched === void 0) {
|
|
121
|
+
touched = false;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
formDispatch({
|
|
125
|
+
type: 'SET_FIELD_TOUCHED',
|
|
126
|
+
// @ts-ignore
|
|
127
|
+
payload: {
|
|
128
|
+
field: field,
|
|
129
|
+
value: touched
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}, []);
|
|
133
|
+
/**
|
|
134
|
+
* 使用单个 Field 规则对给定值进行校验
|
|
135
|
+
*/
|
|
136
|
+
|
|
137
|
+
var validateField = React.useCallback(function (field, value) {
|
|
138
|
+
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee() {
|
|
139
|
+
var fieldValidation, errorResultAsPromise;
|
|
140
|
+
return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
|
|
141
|
+
while (1) {
|
|
142
|
+
switch (_context.prev = _context.next) {
|
|
143
|
+
case 0:
|
|
144
|
+
fieldValidation = getValidation(field);
|
|
145
|
+
|
|
146
|
+
if (fieldValidation) {
|
|
147
|
+
_context.next = 3;
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return _context.abrupt("return");
|
|
152
|
+
|
|
153
|
+
case 3:
|
|
154
|
+
formDispatch({
|
|
155
|
+
type: 'SET_VALIDATING',
|
|
156
|
+
payload: true
|
|
157
|
+
});
|
|
158
|
+
errorResultAsPromise = fieldValidation.validate(value);
|
|
159
|
+
console.log('validate', errorResultAsPromise);
|
|
160
|
+
errorResultAsPromise.then(function (result) {
|
|
161
|
+
console.log('result', result);
|
|
162
|
+
formDispatch({
|
|
163
|
+
type: 'SET_VALIDATING',
|
|
164
|
+
payload: false
|
|
165
|
+
});
|
|
166
|
+
setFieldError(field, '');
|
|
167
|
+
})["catch"](function (errorMsg) {
|
|
168
|
+
// @ts-ignore
|
|
169
|
+
setFieldError(field, errorMsg.fields[field][0].message);
|
|
170
|
+
})["finally"](function () {
|
|
171
|
+
formDispatch({
|
|
172
|
+
type: 'SET_VALIDATING',
|
|
173
|
+
payload: false
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
case 7:
|
|
178
|
+
case "end":
|
|
179
|
+
return _context.stop();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}, _callee);
|
|
183
|
+
}));
|
|
184
|
+
}, [getValidation, setFieldError]);
|
|
185
|
+
/**
|
|
186
|
+
* 校验单个 Field 及其当前值
|
|
187
|
+
*/
|
|
188
|
+
|
|
189
|
+
var validateFieldState = React.useCallback(function (field) {
|
|
190
|
+
var value = getFieldValue(field);
|
|
191
|
+
return validateField(field, value);
|
|
192
|
+
}, [validateField, getFieldValue]);
|
|
193
|
+
/**
|
|
194
|
+
* 检验所有字段
|
|
195
|
+
*/
|
|
196
|
+
|
|
197
|
+
var validateAll = React.useCallback(function () {
|
|
198
|
+
var fieldNames = getFieldNames();
|
|
199
|
+
return Promise.all(fieldNames.map(function (fieldName) {
|
|
200
|
+
return validateFieldState(fieldName);
|
|
201
|
+
}));
|
|
202
|
+
}, [getFieldNames, validateFieldState]);
|
|
203
|
+
/**
|
|
204
|
+
* 控件值更新策略
|
|
205
|
+
*/
|
|
206
|
+
|
|
207
|
+
var setFieldValue = React.useCallback(function (field, value, shouldValidate) {
|
|
208
|
+
// @ts-ignore
|
|
209
|
+
formDispatch({
|
|
210
|
+
type: 'SET_FIELD_VALUE',
|
|
211
|
+
payload: {
|
|
212
|
+
field: field,
|
|
213
|
+
value: value
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
var shouldValidateField = shouldValidate !== null && shouldValidate !== void 0 ? shouldValidate : validateAfterTouched ? formState.touched[field] : true;
|
|
217
|
+
|
|
218
|
+
if (shouldValidateField) {
|
|
219
|
+
validateField(field, value);
|
|
220
|
+
}
|
|
221
|
+
}, [validateField, validateAfterTouched, formState]);
|
|
222
|
+
var normalizeValueFromChange = React.useCallback(function (eventOrValue) {
|
|
223
|
+
// TODO: handle correct value
|
|
224
|
+
return eventOrValue.target.value;
|
|
225
|
+
}, []);
|
|
226
|
+
var handleFieldChange = React.useCallback(function (fieldName, valueCollectPipe, shouldValidate) {
|
|
227
|
+
return function (evt) {
|
|
228
|
+
var _Object$assign; // TODO: 传递 onChange 其它参数
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
var nextValue = typeAssertion.isFunction(valueCollectPipe) ? valueCollectPipe(evt) : normalizeValueFromChange(evt);
|
|
232
|
+
setFieldValue(fieldName, nextValue, shouldValidate); // @ts-ignore
|
|
233
|
+
|
|
234
|
+
onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(Object.assign(Object.assign({}, formState.values), (_Object$assign = {}, _Object$assign[fieldName] = nextValue, _Object$assign)), formState.values);
|
|
235
|
+
};
|
|
236
|
+
}, [setFieldValue, onValuesChange, formState.values, normalizeValueFromChange]);
|
|
237
|
+
/**
|
|
238
|
+
* 控件失焦策略
|
|
239
|
+
*/
|
|
240
|
+
|
|
241
|
+
var handleFieldBlur = React.useCallback(function (fieldName, shouldValidate) {
|
|
242
|
+
return function (evt) {
|
|
243
|
+
if (shouldValidate) {
|
|
244
|
+
validateFieldState(fieldName);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
setFieldTouched(fieldName, true);
|
|
248
|
+
};
|
|
249
|
+
}, [setFieldTouched, validateFieldState]);
|
|
250
|
+
var handleFieldTrigger = React.useCallback(function (fieldName) {
|
|
251
|
+
return function (evt) {
|
|
252
|
+
validateFieldState(fieldName);
|
|
253
|
+
};
|
|
254
|
+
}, [validateFieldState]);
|
|
255
|
+
/**
|
|
256
|
+
* 表单重置,永远使用第一次的初始值
|
|
257
|
+
*/
|
|
258
|
+
|
|
259
|
+
var initialValuesRef = React.useRef(initialValues);
|
|
260
|
+
var initialErrorsRef = React.useRef(initialErrors);
|
|
261
|
+
var initialTouchedRef = React.useRef(initialTouched);
|
|
262
|
+
var onResetLatestRef = useLatest.useLatestRef(onReset);
|
|
263
|
+
var resetForm = React.useCallback(function (nextState) {
|
|
264
|
+
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee2() {
|
|
265
|
+
var values, errors, touched, submitting, validating, dispatchFn;
|
|
266
|
+
return _regeneratorRuntime__default['default'].wrap(function _callee2$(_context2) {
|
|
267
|
+
while (1) {
|
|
268
|
+
switch (_context2.prev = _context2.next) {
|
|
269
|
+
case 0:
|
|
270
|
+
values = nextState && nextState.values ? nextState.values : initialValuesRef.current;
|
|
271
|
+
errors = nextState && nextState.errors ? nextState.errors : initialErrorsRef.current;
|
|
272
|
+
touched = nextState && nextState.touched ? nextState.touched : initialTouchedRef.current;
|
|
273
|
+
initialValuesRef.current = values; // @ts-ignore
|
|
274
|
+
|
|
275
|
+
initialErrorsRef.current = errors;
|
|
276
|
+
initialTouchedRef.current = touched;
|
|
277
|
+
submitting = !!(nextState && nextState.submitting);
|
|
278
|
+
validating = !!(nextState && nextState.validating);
|
|
279
|
+
|
|
280
|
+
dispatchFn = function dispatchFn() {
|
|
281
|
+
formDispatch({
|
|
282
|
+
type: 'SET_FORM',
|
|
283
|
+
payload: {
|
|
284
|
+
submitting: submitting,
|
|
285
|
+
validating: validating,
|
|
286
|
+
errors: errors,
|
|
287
|
+
touched: touched,
|
|
288
|
+
values: values
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
if (!onResetLatestRef.current) {
|
|
294
|
+
_context2.next = 15;
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
_context2.next = 12;
|
|
299
|
+
return onResetLatestRef.current(formState.values);
|
|
300
|
+
|
|
301
|
+
case 12:
|
|
302
|
+
dispatchFn();
|
|
303
|
+
_context2.next = 16;
|
|
304
|
+
break;
|
|
305
|
+
|
|
306
|
+
case 15:
|
|
307
|
+
dispatchFn();
|
|
308
|
+
|
|
309
|
+
case 16:
|
|
310
|
+
case "end":
|
|
311
|
+
return _context2.stop();
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}, _callee2);
|
|
315
|
+
}));
|
|
316
|
+
}, [onResetLatestRef, formState.values]);
|
|
317
|
+
/**
|
|
318
|
+
* 表单提交
|
|
319
|
+
*/
|
|
320
|
+
|
|
321
|
+
var submitForm = React.useCallback(function () {
|
|
322
|
+
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee3() {
|
|
323
|
+
return _regeneratorRuntime__default['default'].wrap(function _callee3$(_context3) {
|
|
324
|
+
while (1) {
|
|
325
|
+
switch (_context3.prev = _context3.next) {
|
|
326
|
+
case 0:
|
|
327
|
+
formDispatch({
|
|
328
|
+
type: 'SUBMIT_ATTEMPT'
|
|
329
|
+
});
|
|
330
|
+
return _context3.abrupt("return", validateAll().then(function (combinedErrors) {
|
|
331
|
+
var isInstanceOfError = combinedErrors instanceof Error;
|
|
332
|
+
var isActuallyValid = !isInstanceOfError && Object.keys(combinedErrors).length === 0;
|
|
333
|
+
|
|
334
|
+
if (isActuallyValid) {
|
|
335
|
+
var promiseOrUndefined;
|
|
336
|
+
|
|
337
|
+
try {
|
|
338
|
+
// @ts-ignore
|
|
339
|
+
promiseOrUndefined = onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(formState.values);
|
|
340
|
+
} catch (error) {// throw error
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
if (promiseOrUndefined === undefined) return;
|
|
344
|
+
return Promise.resolve(promiseOrUndefined).then(function (result) {
|
|
345
|
+
formDispatch({
|
|
346
|
+
type: 'SUBMIT_DONE'
|
|
347
|
+
});
|
|
348
|
+
return result;
|
|
349
|
+
})["catch"](function (_errors) {
|
|
350
|
+
formDispatch({
|
|
351
|
+
type: 'SUBMIT_DONE'
|
|
352
|
+
});
|
|
353
|
+
throw _errors;
|
|
354
|
+
});
|
|
355
|
+
} else {
|
|
356
|
+
formDispatch({
|
|
357
|
+
type: 'SUBMIT_DONE'
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
if (isInstanceOfError) {
|
|
361
|
+
throw combinedErrors;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}));
|
|
365
|
+
|
|
366
|
+
case 2:
|
|
367
|
+
case "end":
|
|
368
|
+
return _context3.stop();
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}, _callee3);
|
|
372
|
+
}));
|
|
373
|
+
}, [formState, onSubmit, validateAll]);
|
|
374
|
+
var handleSubmit = React.useCallback(function (evt) {
|
|
375
|
+
domUtils.stopEvent(evt);
|
|
376
|
+
submitForm()["catch"](console.error);
|
|
377
|
+
}, [submitForm]);
|
|
378
|
+
var handleReset = React.useCallback(function (evt) {
|
|
379
|
+
domUtils.stopEvent(evt);
|
|
380
|
+
resetForm();
|
|
381
|
+
}, [resetForm]);
|
|
382
|
+
React.useCallback(function () {}, []);
|
|
383
|
+
React.useCallback(function () {
|
|
384
|
+
formDispatch({
|
|
385
|
+
// TODO: reset errorMsg
|
|
386
|
+
type: 'SET_ERRORS',
|
|
387
|
+
payload: {}
|
|
388
|
+
});
|
|
389
|
+
}, []);
|
|
390
|
+
var setFormState = React__default['default'].useCallback(function (stateOrFunc) {
|
|
391
|
+
// @ts-ignore
|
|
392
|
+
formDispatch({
|
|
393
|
+
type: 'SET_STATE',
|
|
394
|
+
payload: stateOrFunc
|
|
395
|
+
});
|
|
396
|
+
}, []);
|
|
397
|
+
var getRootProps = useLatest.useLatestCallback(function () {
|
|
398
|
+
return Object.assign(Object.assign({}, rest), {
|
|
399
|
+
onSubmit: handleSubmit,
|
|
400
|
+
onReset: handleReset
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
var getFieldProps = React.useCallback(function (props, ref) {
|
|
404
|
+
var _returnProps;
|
|
405
|
+
|
|
406
|
+
if (props === void 0) {
|
|
407
|
+
props = {};
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
if (ref === void 0) {
|
|
411
|
+
ref = null;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
var _props = props,
|
|
415
|
+
field = _props.field,
|
|
416
|
+
_props$valuePropName = _props.valuePropName,
|
|
417
|
+
valuePropName = _props$valuePropName === void 0 ? 'value' : _props$valuePropName,
|
|
418
|
+
_props$valueCollectPr = _props.valueCollectPropName,
|
|
419
|
+
valueCollectPropName = _props$valueCollectPr === void 0 ? 'onChange' : _props$valueCollectPr,
|
|
420
|
+
valueCollectPipe = _props.valueCollectPipe,
|
|
421
|
+
_props$validateTrigge = _props.validateTrigger,
|
|
422
|
+
validateTriggerProp = _props$validateTrigge === void 0 ? validateTriggersMemo : _props$validateTrigge,
|
|
423
|
+
onBlur = _props.onBlur;
|
|
424
|
+
var validateTrigger = typeAssertion.isArray(validateTriggerProp) ? validateTriggerProp : [validateTriggerProp];
|
|
425
|
+
var validateOnCollect = validateTrigger.includes(valueCollectPropName);
|
|
426
|
+
var validateOnBlur = validateTrigger.includes('onChange');
|
|
427
|
+
var returnProps = (_returnProps = {
|
|
428
|
+
ref: ref
|
|
429
|
+
}, _returnProps[valuePropName] = funcUtils.getNested(formState.values, field), _returnProps[valueCollectPropName] = funcUtils.callAllFuncs(props[valueCollectPropName], handleFieldChange(field, valueCollectPipe, validateOnCollect)), _returnProps.onBlur = funcUtils.callAllFuncs(onBlur, handleFieldBlur(field, validateOnBlur)), _returnProps.invalid = getFieldError(field), _returnProps);
|
|
430
|
+
validateTrigger.filter(function (triggerName) {
|
|
431
|
+
return [valueCollectPropName, 'onBlur'].indexOf(triggerName) === -1;
|
|
432
|
+
}) // @ts-ignore
|
|
433
|
+
.forEach(function (triggerName) {
|
|
434
|
+
// @ts-ignore
|
|
435
|
+
returnProps[triggerName] = funcUtils.callAllFuncs(props[triggerName], handleFieldTrigger(field));
|
|
436
|
+
});
|
|
437
|
+
return returnProps;
|
|
438
|
+
}, [formState, handleFieldChange, handleFieldBlur, validateTriggersMemo, handleFieldTrigger, getFieldError]);
|
|
439
|
+
var getFieldRules = React.useCallback(function (fieldName) {
|
|
440
|
+
return rules[fieldName];
|
|
441
|
+
}, [rules]);
|
|
442
|
+
return Object.assign(Object.assign({}, formState), {
|
|
443
|
+
setFormState: setFormState,
|
|
444
|
+
setFieldValue: setFieldValue,
|
|
445
|
+
setFieldError: setFieldError,
|
|
446
|
+
setFieldTouched: setFieldTouched,
|
|
447
|
+
getFieldError: getFieldError,
|
|
448
|
+
getFieldRules: getFieldRules,
|
|
449
|
+
getRootProps: getRootProps,
|
|
450
|
+
getFieldProps: getFieldProps,
|
|
451
|
+
registerField: registerField,
|
|
452
|
+
unregisterField: unregisterField,
|
|
453
|
+
submitForm: submitForm,
|
|
454
|
+
resetForm: resetForm
|
|
455
|
+
});
|
|
456
|
+
}; // TODO: field 支持数组
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
function formReducer(state, action) {
|
|
460
|
+
switch (action.type) {
|
|
461
|
+
case 'SET_STATE':
|
|
462
|
+
var nextState = typeAssertion.isFunction(action.payload) ? action.payload(state) : action.payload;
|
|
463
|
+
return Object.assign(Object.assign({}, state), nextState);
|
|
464
|
+
|
|
465
|
+
case 'SET_VALUES':
|
|
466
|
+
return Object.assign(Object.assign({}, state), {
|
|
467
|
+
values: action.payload
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
case 'SET_ERRORS':
|
|
471
|
+
return Object.assign(Object.assign({}, state), {
|
|
472
|
+
errors: action.payload
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
case 'SET_TOUCHED':
|
|
476
|
+
return Object.assign(Object.assign({}, state), {
|
|
477
|
+
touched: action.payload
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
case 'SET_SUBMITTING':
|
|
481
|
+
return Object.assign(Object.assign({}, state), {
|
|
482
|
+
submitting: action.payload
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
case 'SET_VALIDATING':
|
|
486
|
+
return Object.assign(Object.assign({}, state), {
|
|
487
|
+
validating: action.payload
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
case 'SET_FIELD_VALUE':
|
|
491
|
+
return Object.assign(Object.assign({}, state), {
|
|
492
|
+
values: funcUtils.setNested(state.values, action.payload.field, action.payload.value)
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
case 'SET_FIELD_TOUCHED':
|
|
496
|
+
return Object.assign(Object.assign({}, state), {
|
|
497
|
+
touched: funcUtils.setNested(state.touched, action.payload.field, action.payload.value)
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
case 'SET_FIELD_ERROR':
|
|
501
|
+
return Object.assign(Object.assign({}, state), {
|
|
502
|
+
errors: funcUtils.setNested(state.errors, action.payload.field, action.payload.value)
|
|
503
|
+
});
|
|
504
|
+
|
|
505
|
+
case 'SET_FORM':
|
|
506
|
+
return Object.assign(Object.assign({}, state), action.payload);
|
|
507
|
+
|
|
508
|
+
case 'SUBMIT_DONE':
|
|
509
|
+
return Object.assign(Object.assign({}, state), {
|
|
510
|
+
submitting: false
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
default:
|
|
514
|
+
return state;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* 一个注册表的收集器
|
|
519
|
+
*/
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
var useCollection = function useCollection() {
|
|
523
|
+
var collectionMp = React.useMemo(function () {
|
|
524
|
+
return new Map();
|
|
525
|
+
}, []);
|
|
526
|
+
var collectionRef = React.useRef(collectionMp);
|
|
527
|
+
var register = React.useCallback(function (key, value) {
|
|
528
|
+
collectionRef.current.set(key, value);
|
|
529
|
+
}, []);
|
|
530
|
+
var unregister = React.useCallback(function (key) {
|
|
531
|
+
collectionRef.current["delete"](key);
|
|
532
|
+
}, []);
|
|
533
|
+
var getCollection = React.useCallback(function (key) {
|
|
534
|
+
if (collectionRef.current.has(key)) {
|
|
535
|
+
return collectionRef.current.get(key);
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
return null;
|
|
539
|
+
}, []);
|
|
540
|
+
return [getCollection, register, unregister];
|
|
541
|
+
};
|
|
542
|
+
|
|
543
|
+
exports.useForm = useForm;
|
|
544
|
+
//# sourceMappingURL=use-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form.js","sources":["../../src/use-form.ts"],"sourcesContent":[null],"names":["EMPTY_RULES","EMPTY_ERRORS","EMPTY_TOUCHED","DEFAULT_VALIDATE_TRIGGER","useForm","_a","initialValues","initialErrors","initialTouched","onValuesChange","onReset","onSubmit","rules","validateAfterTouched","validateTrigger","validateTriggerProp","rest","isArray","validateTriggersMemo","useMemo","useCollection","getValidation","registerField","unregisterField","useReducer","formReducer","values","errors","touched","validating","submitting","formState","formDispatch","formStateRef","useLatestRef","getFieldNames","useCallback","Object","keys","current","getFieldValue","fieldName","getFieldError","setFieldError","field","errorMessage","type","payload","value","setFieldTouched","validateField","fieldValidation","errorResultAsPromise","validate","console","log","then","result","errorMsg","fields","message","validateFieldState","validateAll","fieldNames","Promise","all","map","setFieldValue","shouldValidate","shouldValidateField","normalizeValueFromChange","eventOrValue","target","handleFieldChange","valueCollectPipe","evt","nextValue","isFunction","handleFieldBlur","handleFieldTrigger","initialValuesRef","useRef","initialErrorsRef","initialTouchedRef","onResetLatestRef","resetForm","nextState","dispatchFn","submitForm","combinedErrors","isInstanceOfError","Error","isActuallyValid","length","promiseOrUndefined","error","undefined","resolve","_errors","handleSubmit","stopEvent","handleReset","setFormState","React","stateOrFunc","getRootProps","useLatestCallback","getFieldProps","props","ref","valuePropName","valueCollectPropName","onBlur","validateOnCollect","includes","validateOnBlur","returnProps","getNested","callAllFuncs","invalid","filter","triggerName","indexOf","forEach","getFieldRules","state","action","setNested","collectionMp","Map","collectionRef","register","key","set","unregister","getCollection","has","get"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,IAAMA,WAAW,GAAG,EAApB;AACA,IAAMC,YAAY,GAAG,EAArB;AACA,IAAMC,aAAa,GAAG,EAAtB;AACA,IAAMC,wBAAwB,GAAG,CAAC,UAAD,EAAa,QAAb,CAAjC;;IAEaC,OAAO,GAAG,SAAVA,OAAU,CAA+BC,EAA/B;MACrBC,mBAAAA;4BACAC;MAAAA,8CAAgBN;6BAChBO;MAAAA,gDAAiBN;MAEjBO,oBAAAA;MACAC,aAAAA;MACAC,cAAAA;oBAEAC;MAAAA,8BAAQZ;iCACRa;MAAAA,0DAAuB;8BACvBC;MAAiBC,sDAAsBZ;MACpCa,wBAZiD,gBAAA,iBAAA,kBAAA,gBAAA,kBAAA,WAAA,YAAA,SAAA,wBAAA,mBAAA;;;;;;MAiB9CF,eAAe,GAAGG,qBAAAA,CAAQF,mBAARE,IAA+BF,mBAA/BE,GAAqD,CAACF,mBAAD;;MAEvEG,oBAAoB,GAAGC,aAAAA,CAAQ;WAAML;AAAP,GAAPK,EAA+BL,eAA/BK;;;;;uBAK2BC,aAAa;MAA9DC,aAAP;MAAsBC,aAAtB;MAAqCC,eAArC;;;;;;oBAOkCC,gBAAAA,CAAWC,WAAXD,EAAwB;AACxDE,IAAAA,MAAM,EAAEpB,aADgD;AAExDqB,IAAAA,MAAM,EAAEpB,aAFgD;AAGxDqB,IAAAA,OAAO,EAAEpB,cAH+C;AAIxDqB,IAAAA,UAAU,EAAE,KAJ4C;AAKxDC,IAAAA,UAAU,EAAE;AAL4C,GAAxBN;MAA3BO,SAAP;MAAkBC,YAAlB;;;MASMC,YAAY,GAAGC,sBAAAA,CAAaH,SAAbG;;MAGfC,aAAa,GAAGC,iBAAAA,CAAY;WAAMC,MAAM,CAACC,IAAPD,CAAYJ,YAAY,CAACM,OAAbN,CAAqBP,MAAjCW;AAAP,GAAXD,EAA4D,CAACH,YAAD,CAA5DG;;MAGhBI,aAAa,GAAGJ,iBAAAA,CAAY,UAACK,SAAD;WAAuBR,YAAY,CAACM,OAAbN,CAAqBP,MAArBO,CAA4BQ,SAA5BR;AAAxB,GAAXG,EAA2E,CAC/FH,YAD+F,CAA3EG;MAIhBM,aAAa,GAAGN,iBAAAA,CAAY,UAACK,SAAD;WAAuBR,YAAY,CAACM,OAAbN,CAAqBN,MAArBM,CAA4BQ,SAA5BR;AAAxB,GAAXG,EAA2E,CAC/FH,YAD+F,CAA3EG;MAIhBO,aAAa,GAAGP,iBAAAA,CACpB,UAACQ,KAAD,EAAuBC,YAAvB;AACEb,IAAAA,YAAY,CAAC;AACXc,MAAAA,IAAI,EAAE,iBADK;;AAGXC,MAAAA,OAAO,EAAE;AAAEH,QAAAA,KAAK,EAALA,KAAF;AAASI,QAAAA,KAAK,EAAEH;AAAhB;AAHE,KAAD,CAAZb;AAF6B,GAAXI,EAQpB,EARoBA;MAWhBa,eAAe,GAAGb,iBAAAA,CAAY,UAACQ,KAAD,EAAuBhB,OAAvB;QAAuBA;AAAAA,MAAAA,UAAU,KAAVA;;;AACzDI,IAAAA,YAAY,CAAC;AACXc,MAAAA,IAAI,EAAE,mBADK;;AAGXC,MAAAA,OAAO,EAAE;AAAEH,QAAAA,KAAK,EAALA,KAAF;AAASI,QAAAA,KAAK,EAAEpB;AAAhB;AAHE,KAAD,CAAZI;AADiC,GAAXI,EAMrB,EANqBA;;;;;MAWlBc,aAAa,GAAGd,iBAAAA,CACpB,UAAOQ,KAAP,EAAsBI,KAAtB;;;;;;;AACQG,cAAAA,kBAAkB9B,aAAa,CAACuB,KAAD,CAA/BO;;kBACDA;;;;;;;;AAELnB,cAAAA,YAAY,CAAC;AAAEc,gBAAAA,IAAI,EAAE,gBAAR;AAA0BC,gBAAAA,OAAO,EAAE;AAAnC,eAAD,CAAZf;AAEMoB,cAAAA,uBAAuBD,eAAe,CAACE,QAAhBF,CAAyBH,KAAzBG,CAAvBC;AAENE,cAAAA,OAAO,CAACC,GAARD,CAAY,UAAZA,EAAwBF,oBAAxBE;AAEAF,cAAAA,oBAAoB,CACjBI,IADHJ,CACQ,UAACK,MAAD;AACJH,gBAAAA,OAAO,CAACC,GAARD,CAAY,QAAZA,EAAsBG,MAAtBH;AACAtB,gBAAAA,YAAY,CAAC;AAAEc,kBAAAA,IAAI,EAAE,gBAAR;AAA0BC,kBAAAA,OAAO,EAAE;AAAnC,iBAAD,CAAZf;AACAW,gBAAAA,aAAa,CAACC,KAAD,EAAQ,EAAR,CAAbD;AAJJ,eAAAS,WAMS,UAACM,QAAD;;AAELf,gBAAAA,aAAa,CAACC,KAAD,EAAQc,QAAQ,CAACC,MAATD,CAAgBd,KAAhBc,EAAuB,CAAvBA,EAA0BE,OAAlC,CAAbjB;AARJ,eAAAS,aAUW;AACPpB,gBAAAA,YAAY,CAAC;AAAEc,kBAAAA,IAAI,EAAE,gBAAR;AAA0BC,kBAAAA,OAAO,EAAE;AAAnC,iBAAD,CAAZf;AAXJ,eAAAoB;;;;;;;;;AAX6B,GAAXhB,EAyBpB,CAACf,aAAD,EAAgBsB,aAAhB,CAzBoBP;;;;;MA+BhByB,kBAAkB,GAAGzB,iBAAAA,CACzB,UAACQ,KAAD;QACQI,KAAK,GAAGR,aAAa,CAACI,KAAD;WACpBM,aAAa,CAACN,KAAD,EAAQI,KAAR;AAHc,GAAXZ,EAKzB,CAACc,aAAD,EAAgBV,aAAhB,CALyBJ;;;;;MAWrB0B,WAAW,GAAG1B,iBAAAA,CAAY;QACxB2B,UAAU,GAAG5B,aAAa;WACzB6B,OAAO,CAACC,GAARD,CAAYD,UAAU,CAACG,GAAXH,CAAe,UAACtB,SAAD;aAAeoB,kBAAkB,CAACpB,SAAD;AAAhD,KAAAsB,CAAZC;AAFsB,GAAX5B,EAGjB,CAACD,aAAD,EAAgB0B,kBAAhB,CAHiBzB;;;;;MAQd+B,aAAa,GAAG/B,iBAAAA,CACpB,UAACQ,KAAD,EAAgBI,KAAhB,EAAgCoB,cAAhC;;AAEEpC,IAAAA,YAAY,CAAC;AAAEc,MAAAA,IAAI,EAAE,iBAAR;AAA2BC,MAAAA,OAAO,EAAE;AAAEH,QAAAA,KAAK,EAALA,KAAF;AAASI,QAAAA,KAAK,EAALA;AAAT;AAApC,KAAD,CAAZhB;QAEMqC,mBAAmB,GACvBD,cAAc,SAAdA,IAAAA,cAAc,WAAdA,GAAAA,cAAAA,GAAmBvD,oBAAoB,GAAGkB,SAAS,CAACH,OAAVG,CAAkBa,KAAlBb,CAAH,GAA8B;;QAEnEsC,qBAAqB;AACvBnB,MAAAA,aAAa,CAACN,KAAD,EAAQI,KAAR,CAAbE;;AAT2B,GAAXd,EAYpB,CAACc,aAAD,EAAgBrC,oBAAhB,EAAsCkB,SAAtC,CAZoBK;MAehBkC,wBAAwB,GAAGlC,iBAAAA,CAAY,UAACmC,YAAD;;WAEpCA,YAAY,CAACC,MAAbD,CAAoBvB;AAFe,GAAXZ,EAG9B,EAH8BA;MAK3BqC,iBAAiB,GAAGrC,iBAAAA,CACxB,UAACK,SAAD,EAAoBiC,gBAApB,EAA2CN,cAA3C;WAAwE,UACtEO,GADsE;;;;UAIhEC,SAAS,GAAGC,wBAAAA,CAAWH,gBAAXG,IACdH,gBAAgB,CAACC,GAAD,CADFE,GAEdP,wBAAwB,CAACK,GAAD;AAE5BR,MAAAA,aAAa,CAAC1B,SAAD,EAAYmC,SAAZ,EAAuBR,cAAvB,CAAbD;;AAEA1D,MAAAA,cAAc,SAAdA,IAAAA,cAAc,WAAdA,SAAAA,GAAAA,cAAc,iCAAQsB,SAAS,CAACL,8CAASe,aAAYmC,2BAAvC,EAAoD7C,SAAS,CAACL,MAA9D,CAAdjB;AAVF;AADmC,GAAX2B,EAaxB,CAAC+B,aAAD,EAAgB1D,cAAhB,EAAgCsB,SAAS,CAACL,MAA1C,EAAkD4C,wBAAlD,CAbwBlC;;;;;MAmBpB0C,eAAe,GAAG1C,iBAAAA,CACtB,UAACK,SAAD,EAAoB2B,cAApB;WAAiD,UAACO,GAAD;UAC3CP,gBAAgB;AAClBP,QAAAA,kBAAkB,CAACpB,SAAD,CAAlBoB;;;AAEFZ,MAAAA,eAAe,CAACR,SAAD,EAAY,IAAZ,CAAfQ;AAJF;AADiC,GAAXb,EAOtB,CAACa,eAAD,EAAkBY,kBAAlB,CAPsBzB;MAUlB2C,kBAAkB,GAAG3C,iBAAAA,CACzB,UAACK,SAAD;WAAuB,UAACkC,GAAD;AACrBd,MAAAA,kBAAkB,CAACpB,SAAD,CAAlBoB;AADF;AADoC,GAAXzB,EAIzB,CAACyB,kBAAD,CAJyBzB;;;;;MAUrB4C,gBAAgB,GAAGC,YAAAA,CAAO3E,aAAP2E;MACnBC,gBAAgB,GAAGD,YAAAA,CAAO1E,aAAP0E;MACnBE,iBAAiB,GAAGF,YAAAA,CAAOzE,cAAPyE;MAEpBG,gBAAgB,GAAGlD,sBAAAA,CAAaxB,OAAbwB;MAEnBmD,SAAS,GAAGjD,iBAAAA,CAChB,UAAOkD,SAAP;;;;;;;AACQ5D,cAAAA,SAAS4D,SAAS,IAAIA,SAAS,CAAC5D,MAAvB4D,GAAgCA,SAAS,CAAC5D,MAA1C4D,GAAmDN,gBAAgB,CAACzC,OAA7Eb;AACAC,cAAAA,SAAS2D,SAAS,IAAIA,SAAS,CAAC3D,MAAvB2D,GAAgCA,SAAS,CAAC3D,MAA1C2D,GAAmDJ,gBAAgB,CAAC3C,OAA7EZ;AACAC,cAAAA,UAAU0D,SAAS,IAAIA,SAAS,CAAC1D,OAAvB0D,GAAiCA,SAAS,CAAC1D,OAA3C0D,GAAqDH,iBAAiB,CAAC5C,OAAjFX;AACNoD,cAAAA,gBAAgB,CAACzC,OAAjByC,GAA2BtD,MAA3BsD;;AAEAE,cAAAA,gBAAgB,CAAC3C,OAAjB2C,GAA2BvD,MAA3BuD;AACAC,cAAAA,iBAAiB,CAAC5C,OAAlB4C,GAA4BvD,OAA5BuD;AAEMrD,cAAAA,aAAa,CAAC,EAAEwD,SAAS,IAAIA,SAAS,CAACxD,UAAzB,CAAdA;AACAD,cAAAA,aAAa,CAAC,EAAEyD,SAAS,IAAIA,SAAS,CAACzD,UAAzB,CAAdA;;AAEA0D,cAAAA,aAAa,SAAbA,UAAa;AACjBvD,gBAAAA,YAAY,CAAC;AACXc,kBAAAA,IAAI,EAAE,UADK;AAEXC,kBAAAA,OAAO,EAAE;AACPjB,oBAAAA,UAAU,EAAVA,UADO;AAEPD,oBAAAA,UAAU,EAAVA,UAFO;AAGPF,oBAAAA,MAAM,EAANA,MAHO;AAIPC,oBAAAA,OAAO,EAAPA,OAJO;AAKPF,oBAAAA,MAAM,EAANA;AALO;AAFE,iBAAD,CAAZM;eADIuD;;mBAaFH,gBAAgB,CAAC7C;;;;;;qBAEb6C,gBAAgB,CAAC7C,OAAjB6C,CAAyBrD,SAAS,CAACL,MAAnC0D;;;AACNG,cAAAA,UAAU;;;;;AAEVA,cAAAA,UAAU;;;;;;;;;AA/Ba,GAAXnD,EAkChB,CAACgD,gBAAD,EAAmBrD,SAAS,CAACL,MAA7B,CAlCgBU;;;;;MAwCZoD,UAAU,GAAGpD,iBAAAA,CAAY;;;;;;AAC7BJ,cAAAA,YAAY,CAAC;AAAEc,gBAAAA,IAAI,EAAE;AAAR,eAAD,CAAZd;gDACO8B,WAAW,GAAGN,IAAdM,CAAmB,UAAC2B,cAAD;oBAClBC,iBAAiB,GAAGD,cAAc,YAAYE;oBAC9CC,eAAe,GAAG,CAACF,iBAAD,IAAsBrD,MAAM,CAACC,IAAPD,CAAYoD,cAAZpD,EAA4BwD,MAA5BxD,KAAuC;;oBAEjFuD,iBAAiB;sBACfE;;sBACA;;AAEFA,oBAAAA,kBAAkB,GAAGnF,QAAQ,SAARA,IAAAA,QAAQ,WAARA,SAAAA,GAAAA,QAAQ,CAAGoB,SAAS,CAACL,MAAb,CAA7BoE;AAFF,oBAGE,OAAOC,KAAP,EAAc;;;sBAIZD,kBAAkB,KAAKE,WAAW;yBAE/BhC,OAAO,CAACiC,OAARjC,CAAgB8B,kBAAhB9B,EACJR,IADIQ,CACC,UAACP,MAAD;AACJzB,oBAAAA,YAAY,CAAC;AAAEc,sBAAAA,IAAI,EAAE;AAAR,qBAAD,CAAZd;2BACOyB;AAHJ,mBAAAO,WAKE,UAACkC,OAAD;AACLlE,oBAAAA,YAAY,CAAC;AAAEc,sBAAAA,IAAI,EAAE;AAAR,qBAAD,CAAZd;0BACMkE;AAPH,mBAAAlC;AAXT,uBAoBO;AACLhC,kBAAAA,YAAY,CAAC;AAAEc,oBAAAA,IAAI,EAAE;AAAR,mBAAD,CAAZd;;sBAEI0D,mBAAmB;0BACfD;;;AA5BL,eAAA3B;;;;;;;;;AAFqB,GAAX1B,EAkChB,CAACL,SAAD,EAAYpB,QAAZ,EAAsBmD,WAAtB,CAlCgB1B;MAoCb+D,YAAY,GAAG/D,iBAAAA,CACnB,UAACuC,GAAD;AACEyB,IAAAA,kBAAAA,CAAUzB,GAAVyB;AACAZ,IAAAA,UAAU,WAAVA,CAAmBlC,OAAO,CAACyC,KAA3BP;AAH4B,GAAXpD,EAKnB,CAACoD,UAAD,CALmBpD;MAQfiE,WAAW,GAAGjE,iBAAAA,CAClB,UAACuC,GAAD;AACEyB,IAAAA,kBAAAA,CAAUzB,GAAVyB;AACAf,IAAAA,SAAS;AAHkB,GAAXjD,EAKlB,CAACiD,SAAD,CALkBjD;AAQKA,EAAAA,iBAAAA,CAAY,aAAD,CAAXA,EAAsB,EAAtBA;AAELA,EAAAA,iBAAAA,CAAY;AAC9BJ,IAAAA,YAAY,CAAC;;AAEXc,MAAAA,IAAI,EAAE,YAFK;AAGXC,MAAAA,OAAO,EAAE;AAHE,KAAD,CAAZf;AAD6B,GAAXI,EAMjB,EANiBA;MAQdkE,YAAY,GAAGC,yBAAAA,CAAMnE,WAANmE,CAAkB,UAACC,WAAD;;AAErCxE,IAAAA,YAAY,CAAC;AAAEc,MAAAA,IAAI,EAAE,WAAR;AAAqBC,MAAAA,OAAO,EAAEyD;AAA9B,KAAD,CAAZxE;AAFmB,GAAAuE,EAGlB,EAHkBA;MAKfE,YAAY,GAAGC,2BAAAA,CAAkB;2CAEhC1F;AACHL,MAAAA,QAAQ,EAAEwF;AACVzF,MAAAA,OAAO,EAAE2F;;AAJyB,GAAjBK;MAQfC,aAAa,GAAGvE,iBAAAA,CACpB,UAACwE,KAAD,EAAaC,GAAb;;;QAACD;AAAAA,MAAAA,QAAQ,EAARA;;;QAAYC;AAAAA,MAAAA,MAAM,IAANA;;;iBAQPD;QANFhE,KADF,UACEA;sCACAkE;QAAAA,aAFF,qCAEkB;uCAChBC;QAAAA,oBAHF,sCAGyB;QACvBrC,gBAJF,UAIEA;uCACA5D;QAAiBC,mBALnB,sCAKyCG;QACvC8F,MANF,UAMEA;QAGIlG,eAAe,GAAGG,qBAAAA,CAAQF,mBAARE,IACpBF,mBADoBE,GAEpB,CAACF,mBAAD;QAEEkG,iBAAiB,GAAGnG,eAAe,CAACoG,QAAhBpG,CAAyBiG,oBAAzBjG;QACpBqG,cAAc,GAAGrG,eAAe,CAACoG,QAAhBpG,CAAyB,UAAzBA;QAEjBsG,WAAW;AACfP,MAAAA,GAAG,EAAHA;oBACCC,iBAAgBO,mBAAAA,CAAUtF,SAAS,CAACL,MAApB2F,EAA4BzE,KAA5ByE,gBAEhBN,wBAAuBO,sBAAAA,CACtBV,KAAK,CAACG,oBAAD,CADiBO,EAEtB7C,iBAAiB,CAAC7B,KAAD,EAAQ8B,gBAAR,EAA0BuC,iBAA1B,CAFKK,gBAIxBN,SAAQM,sBAAAA,CAAaN,MAAbM,EAAqBxC,eAAe,CAAClC,KAAD,EAAQuE,cAAR,CAApCG,gBACRC,UAAS7E,aAAa,CAACE,KAAD,eATP;AAYjB9B,IAAAA,eAAe,CACZ0G,MADH1G,CACU,UAAC2G,WAAD;aAAiB,CAACV,oBAAD,EAAuB,QAAvB,EAAiCW,OAAjC,CAAyCD,WAAzC,MAA0D,CAAC;AADtF,KAAA3G;AAAAA,KAGG6G,OAHH7G,CAGW,UAAC2G,WAAD;;AAEPL,MAAAA,WAAW,CAACK,WAAD,CAAXL,GAA2BE,sBAAAA,CAAaV,KAAK,CAACa,WAAD,CAAlBH,EAAiCvC,kBAAkB,CAACnC,KAAD,CAAnD0E,CAA3BF;AALJ,KAAAtG;WAQOsG;AAtCsB,GAAXhF,EAwCpB,CACEL,SADF,EAEE0C,iBAFF,EAGEK,eAHF,EAIE5D,oBAJF,EAKE6D,kBALF,EAMErC,aANF,CAxCoBN;MAkDhBwF,aAAa,GAAGxF,iBAAAA,CACpB,UAACK,SAAD;WACS7B,KAAK,CAAC6B,SAAD;AAFiB,GAAXL,EAIpB,CAACxB,KAAD,CAJoBwB;yCAQjBL;AACHuE,IAAAA,YAAY,EAAZA;AACAnC,IAAAA,aAAa,EAAbA;AACAxB,IAAAA,aAAa,EAAbA;AACAM,IAAAA,eAAe,EAAfA;AACAP,IAAAA,aAAa,EAAbA;AACAkF,IAAAA,aAAa,EAAbA;AACAnB,IAAAA,YAAY,EAAZA;AACAE,IAAAA,aAAa,EAAbA;AACArF,IAAAA,aAAa,EAAbA;AACAC,IAAAA,eAAe,EAAfA;AACAiE,IAAAA,UAAU,EAAVA;AACAH,IAAAA,SAAS,EAATA;;;;;AA8DJ,SAAS5D,WAAT,CAAwBoG,KAAxB,EAA6CC,MAA7C;UACUA,MAAM,CAAChF;SACR;UACGwC,SAAS,GAAGT,wBAAAA,CAAWiD,MAAM,CAAC/E,OAAlB8B,IAA6BiD,MAAM,CAAC/E,OAAP+E,CAAeD,KAAfC,CAA7BjD,GAAqDiD,MAAM,CAAC/E;6CAClE8E,QAAUvC;;SACnB;6CACSuC;AAAOnG,QAAAA,MAAM,EAAEoG,MAAM,CAAC/E;;;SAC/B;6CACS8E;AAAOlG,QAAAA,MAAM,EAAEmG,MAAM,CAAC/E;;;SAC/B;6CACS8E;AAAOjG,QAAAA,OAAO,EAAEkG,MAAM,CAAC/E;;;SAChC;6CACS8E;AAAO/F,QAAAA,UAAU,EAAEgG,MAAM,CAAC/E;;;SACnC;6CACS8E;AAAOhG,QAAAA,UAAU,EAAEiG,MAAM,CAAC/E;;;SACnC;6CAEE8E;AACHnG,QAAAA,MAAM,EAAEqG,mBAAAA,CAAUF,KAAK,CAACnG,MAAhBqG,EAAwBD,MAAM,CAAC/E,OAAP+E,CAAelF,KAAvCmF,EAA8CD,MAAM,CAAC/E,OAAP+E,CAAe9E,KAA7D+E;;;SAEP;6CAEEF;AACHjG,QAAAA,OAAO,EAAEmG,mBAAAA,CAAUF,KAAK,CAACjG,OAAhBmG,EAAyBD,MAAM,CAAC/E,OAAP+E,CAAelF,KAAxCmF,EAA+CD,MAAM,CAAC/E,OAAP+E,CAAe9E,KAA9D+E;;;SAER;6CAEEF;AACHlG,QAAAA,MAAM,EAAEoG,mBAAAA,CAAUF,KAAK,CAAClG,MAAhBoG,EAAwBD,MAAM,CAAC/E,OAAP+E,CAAelF,KAAvCmF,EAA8CD,MAAM,CAAC/E,OAAP+E,CAAe9E,KAA7D+E;;;SAEP;6CACSF,QAAUC,MAAM,CAAC/E;;SAC1B;6CAEE8E;AACH/F,QAAAA,UAAU,EAAE;;;;aAGP+F;;;AAIb;;;;;AAGA,IAAMzG,aAAa,GAAG,SAAhBA,aAAgB;MACd4G,YAAY,GAAG7G,aAAAA,CAAQ;WAAM,IAAI8G,GAAJ;AAAP,GAAP9G,EAAyB,EAAzBA;MACf+G,aAAa,GAAGjD,YAAAA,CAAuB+C,YAAvB/C;MAEhBkD,QAAQ,GAAG/F,iBAAAA,CAAY,UAACgG,GAAD,EAAcpF,KAAd;AAC3BkF,IAAAA,aAAa,CAAC3F,OAAd2F,CAAsBG,GAAtBH,CAA0BE,GAA1BF,EAA+BlF,KAA/BkF;AAD0B,GAAX9F,EAEd,EAFcA;MAIXkG,UAAU,GAAGlG,iBAAAA,CAAY,UAACgG,GAAD;AAC7BF,IAAAA,aAAa,CAAC3F,OAAd2F,WAA6BE,GAA7BF;AAD4B,GAAX9F,EAEhB,EAFgBA;MAIbmG,aAAa,GAAGnG,iBAAAA,CAAY,UAACgG,GAAD;QAC5BF,aAAa,CAAC3F,OAAd2F,CAAsBM,GAAtBN,CAA0BE,GAA1BF,GAAgC;aAC3BA,aAAa,CAAC3F,OAAd2F,CAAsBO,GAAtBP,CAA0BE,GAA1BF;;;WAEF;AAJwB,GAAX9F,EAKnB,EALmBA;SAOf,CAACmG,aAAD,EAAgBJ,QAAhB,EAA0BG,UAA1B;AAnBT,CAAA;;"}
|
package/lib/esm/Form.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/** @LICENSE
|
|
2
|
+
* @hi-ui/form
|
|
3
|
+
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/form#readme
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) HIUI <mi-hiui@xiaomi.com>.
|
|
6
|
+
*
|
|
7
|
+
* This source code is licensed under the MIT license found in the
|
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
|
9
|
+
*/
|
|
10
|
+
import { __rest } from 'tslib';
|
|
11
|
+
import React, { forwardRef, useMemo } from 'react';
|
|
12
|
+
import { getPrefixCls, cx } from '@hi-ui/classname';
|
|
13
|
+
import { __DEV__ } from '@hi-ui/env';
|
|
14
|
+
import { FormProvider } from './context.js';
|
|
15
|
+
import { useForm } from './use-form.js';
|
|
16
|
+
var _role = 'form';
|
|
17
|
+
|
|
18
|
+
var _prefix = getPrefixCls(_role); // form 注册表
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
var FORM_REGISTER_TABLE = {};
|
|
22
|
+
/**
|
|
23
|
+
* TODO: What is Form
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
var Form = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
27
|
+
var _a$prefixCls = _a.prefixCls,
|
|
28
|
+
prefixCls = _a$prefixCls === void 0 ? _prefix : _a$prefixCls,
|
|
29
|
+
_a$role = _a.role,
|
|
30
|
+
role = _a$role === void 0 ? _role : _a$role,
|
|
31
|
+
className = _a.className,
|
|
32
|
+
children = _a.children,
|
|
33
|
+
labelWidth = _a.labelWidth,
|
|
34
|
+
_a$labelPlacement = _a.labelPlacement,
|
|
35
|
+
labelPlacement = _a$labelPlacement === void 0 ? 'right' : _a$labelPlacement,
|
|
36
|
+
colon = _a.colon,
|
|
37
|
+
rest = __rest(_a, ["prefixCls", "role", "className", "children", "innerRef", "labelWidth", "labelPlacement", "placement", "verticalAlign", "colon"]);
|
|
38
|
+
|
|
39
|
+
var formContext = useForm(rest);
|
|
40
|
+
var getRootProps = formContext.getRootProps; // useImperativeHandle(innerRef, () => formContext)
|
|
41
|
+
|
|
42
|
+
var providedValue = useMemo(function () {
|
|
43
|
+
return Object.assign({
|
|
44
|
+
labelWidth: labelWidth,
|
|
45
|
+
labelPlacement: labelPlacement,
|
|
46
|
+
colon: colon
|
|
47
|
+
}, formContext);
|
|
48
|
+
}, [labelWidth, formContext, labelPlacement, colon]);
|
|
49
|
+
var cls = cx(prefixCls, className);
|
|
50
|
+
return (
|
|
51
|
+
/*#__PURE__*/
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
React.createElement(FormProvider, {
|
|
54
|
+
value: providedValue
|
|
55
|
+
}, /*#__PURE__*/React.createElement("form", Object.assign({
|
|
56
|
+
ref: ref,
|
|
57
|
+
role: role,
|
|
58
|
+
className: cls
|
|
59
|
+
}, getRootProps()), children))
|
|
60
|
+
);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
if (__DEV__) {
|
|
64
|
+
Form.displayName = 'Form';
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
var formExtends = function formExtends(model) {
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
if (typeof model.name === 'string') {
|
|
70
|
+
// @ts-ignore
|
|
71
|
+
FORM_REGISTER_TABLE[model.name] = model;
|
|
72
|
+
} else {
|
|
73
|
+
if (__DEV__) {
|
|
74
|
+
console.log('WARNING: the name should be unique string and not empty.');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
Object.assign(Form, {
|
|
80
|
+
"extends": formExtends
|
|
81
|
+
});
|
|
82
|
+
export { FORM_REGISTER_TABLE, Form };
|
|
83
|
+
//# sourceMappingURL=Form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Form.js","sources":["../../src/Form.tsx"],"sourcesContent":[null],"names":["_role","_prefix","getPrefixCls","FORM_REGISTER_TABLE","Form","forwardRef","_a","ref","prefixCls","role","className","children","labelWidth","labelPlacement","colon","rest","formContext","useForm","getRootProps","providedValue","useMemo","cls","cx","React","FormProvider","value","__DEV__","displayName","formExtends","model","name","console","log","Object","assign","extends"],"mappings":";;;;;;;;;;;;;;;AAQA,IAAMA,KAAK,GAAG,MAAd;;AACA,IAAMC,OAAO,GAAGC,YAAY,CAACF,KAAD,CAA5B;;;IAGaG,mBAAmB,GAAkC;AAElE;;;;IAGaC,IAAI,gBAAGC,UAAU,CAC5B,UACEC,EADF,EAcEC,GAdF;wBAEIC;MAAAA,sCAAYP;mBACZQ;MAAAA,4BAAOT;MACPU,eAAAA;MACAC,cAAAA;MAEAC,gBAAAA;6BACAC;MAAAA,gDAAiB;MAGjBC,WAAAA;MACGC,kBAXL,YAAA,QAAA,aAAA,YAAA,YAAA,cAAA,kBAAA,aAAA,iBAAA,SAAA;;MAeMC,WAAW,GAAGC,OAAO,CAACF,IAAD;MAEnBG,YAAR,GAAyBF,WAAzB,CAAQE;;MAGFC,aAAa,GAAGC,OAAO,CAAC;;AAE1BR,MAAAA,UAAU,EAAVA;AACAC,MAAAA,cAAc,EAAdA;AACAC,MAAAA,KAAK,EAALA;OACGE;AALsB,GAAA,EAO1B,CAACJ,UAAD,EAAaI,WAAb,EAA0BH,cAA1B,EAA0CC,KAA1C,CAP0B;MASvBO,GAAG,GAAGC,EAAE,CAACd,SAAD,EAAYE,SAAZ;;;;AAIZa,IAAAA,mBAAAA,CAACC,YAADD;AAAcE,MAAAA,KAAK,EAAEN;KAArBI,eACEA,mBAAAA,OAAAA;AAAMhB,MAAAA,GAAG,EAAEA;AAAKE,MAAAA,IAAI,EAAEA;AAAMC,MAAAA,SAAS,EAAEW;OAASH,YAAY,GAA5DK,EACGZ,QADHY,CADFA;;AAnCwB,CAAA;;AAyE9B,IAAIG,OAAJ,EAAa;AACXtB,EAAAA,IAAI,CAACuB,WAALvB,GAAmB,MAAnBA;;;AAGF,IAAMwB,WAAW,GAAG,SAAdA,WAAc,CAACC,KAAD;;MAEd,OAAOA,KAAK,CAACC,IAAb,KAAsB,UAAU;;AAElC3B,IAAAA,mBAAmB,CAAC0B,KAAK,CAACC,IAAP,CAAnB3B,GAAkC0B,KAAlC1B;AAFF,SAGO;QACDuB,SAAS;AACXK,MAAAA,OAAO,CAACC,GAARD,CAAY,0DAAZA;;;AAPN,CAAA;;AAYAE,MAAM,CAACC,MAAPD,CAAc7B,IAAd6B,EAAoB;AAAEE,aAASP;AAAX,CAApBK;"}
|