shineout 3.9.16-beta.7 → 3.9.16-beta.8
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/cjs/index.js +1 -1
- package/dist/shineout.js +95 -2
- package/dist/shineout.js.map +1 -1
- package/dist/shineout.min.js +1 -1
- package/dist/shineout.min.js.map +1 -1
- package/esm/index.js +1 -1
- package/package.json +5 -5
package/cjs/index.js
CHANGED
|
@@ -522,5 +522,5 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
522
522
|
// 此文件由脚本自动生成,请勿直接修改。
|
|
523
523
|
// This file was generated automatically by a script. Please do not modify it directly.
|
|
524
524
|
var _default = exports.default = {
|
|
525
|
-
version: '3.9.16-beta.
|
|
525
|
+
version: '3.9.16-beta.8'
|
|
526
526
|
};
|
package/dist/shineout.js
CHANGED
|
@@ -12326,7 +12326,7 @@ var handleStyle = function handleStyle(style) {
|
|
|
12326
12326
|
};
|
|
12327
12327
|
/* harmony default export */ var jss_style_handleStyle = (handleStyle);
|
|
12328
12328
|
;// CONCATENATED MODULE: ../shineout-style/src/version.ts
|
|
12329
|
-
/* harmony default export */ var version = ('3.9.16-beta.
|
|
12329
|
+
/* harmony default export */ var version = ('3.9.16-beta.8');
|
|
12330
12330
|
;// CONCATENATED MODULE: ../shineout-style/src/jss-style/index.tsx
|
|
12331
12331
|
|
|
12332
12332
|
|
|
@@ -37266,6 +37266,55 @@ var clearValue = function clearValue(obj) {
|
|
|
37266
37266
|
}
|
|
37267
37267
|
return undefined;
|
|
37268
37268
|
};
|
|
37269
|
+
|
|
37270
|
+
/**
|
|
37271
|
+
* 遍历 `<Form rules={...}>` 的嵌套 / 路径式声明,收集所有叶子路径(即每个字段对应的 rule 数组)。
|
|
37272
|
+
*
|
|
37273
|
+
* 用于让 submit 时把"在 props.rules 中声明、但 Form.Item 当前未挂载"的字段也纳入校验,
|
|
37274
|
+
* 解决虚拟列表 / 大数据场景未渲染行被漏校验的问题。
|
|
37275
|
+
*
|
|
37276
|
+
* 叶子判定:value 是数组(即 FormItemRule 数组)。
|
|
37277
|
+
* 路径生成规则:
|
|
37278
|
+
* - 字符串 key 直接拼接:`{ user: { name: [...] } }` → `user.name`
|
|
37279
|
+
* - 数字 key 转成 bracket:`{ rows: { 0: { name: [...] } } }` → `rows[0].name`
|
|
37280
|
+
* - 顶层用字符串路径声明:`{ 'rows[0].name': [...] }` → 原样保留为 `rows[0].name`
|
|
37281
|
+
*
|
|
37282
|
+
* @example
|
|
37283
|
+
* collectFormRulePaths({ rows: { 0: { name: [requiredRule] }, 1: { name: [requiredRule] } } })
|
|
37284
|
+
* // → [
|
|
37285
|
+
* // { name: 'rows[0].name', rules: [requiredRule] },
|
|
37286
|
+
* // { name: 'rows[1].name', rules: [requiredRule] },
|
|
37287
|
+
* // ]
|
|
37288
|
+
*/
|
|
37289
|
+
var collectFormRulePaths = function collectFormRulePaths(rulesObj) {
|
|
37290
|
+
var parentKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
37291
|
+
if (!is_isObject(rulesObj)) return [];
|
|
37292
|
+
var out = [];
|
|
37293
|
+
for (var _i = 0, _Object$keys = Object.keys(rulesObj); _i < _Object$keys.length; _i++) {
|
|
37294
|
+
var key = _Object$keys[_i];
|
|
37295
|
+
var val = rulesObj[key];
|
|
37296
|
+
var currentKey = void 0;
|
|
37297
|
+
if (!parentKey) {
|
|
37298
|
+
currentKey = key;
|
|
37299
|
+
} else if (/^\d+$/.test(key)) {
|
|
37300
|
+
// 数字 key 视为数组索引
|
|
37301
|
+
currentKey = "".concat(parentKey, "[").concat(key, "]");
|
|
37302
|
+
} else {
|
|
37303
|
+
currentKey = "".concat(parentKey, ".").concat(key);
|
|
37304
|
+
}
|
|
37305
|
+
if (Array.isArray(val)) {
|
|
37306
|
+
// 叶子:FormItemRule 数组
|
|
37307
|
+
out.push({
|
|
37308
|
+
name: currentKey,
|
|
37309
|
+
rules: val
|
|
37310
|
+
});
|
|
37311
|
+
} else if (is_isObject(val)) {
|
|
37312
|
+
// 继续往下钻
|
|
37313
|
+
out.push.apply(out, toConsumableArray_default()(collectFormRulePaths(val, currentKey)));
|
|
37314
|
+
}
|
|
37315
|
+
}
|
|
37316
|
+
return out;
|
|
37317
|
+
};
|
|
37269
37318
|
;// CONCATENATED MODULE: ../hooks/src/components/use-check/use-check.ts
|
|
37270
37319
|
|
|
37271
37320
|
|
|
@@ -53229,11 +53278,13 @@ var SchemaBuilder = /*#__PURE__*/function () {
|
|
|
53229
53278
|
|
|
53230
53279
|
|
|
53231
53280
|
|
|
53281
|
+
|
|
53232
53282
|
var globalKey = '__global__&&@@';
|
|
53233
53283
|
var SUBMIT_TIMEOUT = 10;
|
|
53234
53284
|
var RESET_TIMEOUT = 500;
|
|
53235
53285
|
|
|
53236
53286
|
|
|
53287
|
+
|
|
53237
53288
|
var emptyObj = {};
|
|
53238
53289
|
var useForm = function useForm(props) {
|
|
53239
53290
|
var _props$defaultValue = props.defaultValue,
|
|
@@ -53320,6 +53371,48 @@ var useForm = function useForm(props) {
|
|
|
53320
53371
|
return validate(key, deepGet(context.value, key), context.value, config);
|
|
53321
53372
|
});
|
|
53322
53373
|
});
|
|
53374
|
+
|
|
53375
|
+
// ============ 新增:从 props.rules 推导未挂载字段并独立校验 ============
|
|
53376
|
+
// 用于虚拟列表 / 大数据场景:业务方在 <Form rules={{...}}> 里声明的字段,
|
|
53377
|
+
// 即便对应的 Form.Item 当前未挂载(虚拟滚动滚出视口),submit 也应校验。
|
|
53378
|
+
// 仅在"全量校验"(fields 为空,或 ignoreBind 走 submit 路径)时启用。
|
|
53379
|
+
var isFullValidate = !fields || config.ignoreBind;
|
|
53380
|
+
if (isFullValidate && is_isObject(rules)) {
|
|
53381
|
+
var declared = collectFormRulePaths(rules);
|
|
53382
|
+
var _iterator = createForOfIteratorHelper_default()(declared),
|
|
53383
|
+
_step;
|
|
53384
|
+
try {
|
|
53385
|
+
var _loop = function _loop() {
|
|
53386
|
+
var item = _step.value;
|
|
53387
|
+
// 注意:validateMap[name] 是 Set,unbind 后 Set 可能为空但 key 仍在
|
|
53388
|
+
// 必须判断 Set 真有 validate 函数才算"已挂载并已校验",否则要补独立校验
|
|
53389
|
+
var mountedSet = context.validateMap[item.name];
|
|
53390
|
+
if (mountedSet && mountedSet.size > 0) return 0; // continue
|
|
53391
|
+
if (context.ignoreValidateFields.includes(item.name)) return 0; // continue
|
|
53392
|
+
var itemValue = deepGet(context.value, item.name);
|
|
53393
|
+
// 关键:validate 工具函数 *校验失败时是 reject(FormError)*,不是 resolve(error)。
|
|
53394
|
+
// 必须用 .catch 把 reject 转成 resolve(err),否则会变成 unhandled rejection
|
|
53395
|
+
// 串到外层 Promise.all 把整条提交链炸断(".then() never fires" 问题)
|
|
53396
|
+
var p = validate(itemValue, context.value, item.rules, {}).then(function () {
|
|
53397
|
+
return true;
|
|
53398
|
+
}).catch(function (err) {
|
|
53399
|
+
var fe = wrapFormError(err);
|
|
53400
|
+
context.errors[item.name] = fe;
|
|
53401
|
+
return fe;
|
|
53402
|
+
});
|
|
53403
|
+
validates.push([p]);
|
|
53404
|
+
},
|
|
53405
|
+
_ret;
|
|
53406
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
53407
|
+
_ret = _loop();
|
|
53408
|
+
if (_ret === 0) continue;
|
|
53409
|
+
}
|
|
53410
|
+
} catch (err) {
|
|
53411
|
+
_iterator.e(err);
|
|
53412
|
+
} finally {
|
|
53413
|
+
_iterator.f();
|
|
53414
|
+
}
|
|
53415
|
+
}
|
|
53323
53416
|
if (config.type === 'withValue') {
|
|
53324
53417
|
var validatorValue = context.value;
|
|
53325
53418
|
if (fields) {
|
|
@@ -76050,7 +76143,7 @@ var upload_interface = __webpack_require__(8821);
|
|
|
76050
76143
|
|
|
76051
76144
|
|
|
76052
76145
|
/* harmony default export */ var src_0 = ({
|
|
76053
|
-
version: '3.9.16-beta.
|
|
76146
|
+
version: '3.9.16-beta.8'
|
|
76054
76147
|
});
|
|
76055
76148
|
}();
|
|
76056
76149
|
/******/ return __webpack_exports__;
|