UNPKG

@alifd/field

Version:

Fields can be used to manage data when it comes to form data manipulation and validation. After being associated with a component, the form data can be automatically written back, read, and verified.

206 lines (160 loc) 4.57 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.getIn = getIn; exports.setIn = setIn; exports.deleteIn = deleteIn; exports.getErrorStrs = getErrorStrs; exports.getParams = getParams; exports.getValueFromEvent = getValueFromEvent; exports.mapValidateRules = mapValidateRules; exports.warning = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); function getIn(state, name) { if (!state) { return state; } var path = typeof name === 'string' ? name.replace(/\[/, '.').replace(/\]/, '').split('.') : ''; var length = path.length; if (!length) { return undefined; } var result = state; for (var i = 0; i < length && !!result; ++i) { result = result[path[i]]; } return result; } var setInWithPath = function setInWithPath(state, value, path, pathIndex) { if (pathIndex >= path.length) { return value; } var first = path[pathIndex]; var next = setInWithPath(state && state[first], value, path, pathIndex + 1); if (!state) { var initialized = isNaN(first) ? {} : []; initialized[first] = next; return initialized; } if (Array.isArray(state)) { var copy = [].concat(state); copy[first] = next; return copy; } return (0, _extends3.default)({}, state, (0, _defineProperty2.default)({}, first, next)); }; function setIn(state, name, value) { return setInWithPath(state, value, typeof name === 'string' ? name.replace(/\[/, '.').replace(/\]/, '').split('.') : '', 0); } function deleteIn(state, name) { if (!state) { return; } var path = typeof name === 'string' ? name.replace(/\[/, '.').replace(/\]/, '').split('.') : ''; var length = path.length; if (!length) { return state; } var result = state; for (var i = 0; i < length && !!result; ++i) { if (i === length - 1) { delete result[path[i]]; } else { result = result[path[i]]; } } return state; } function getErrorStrs(errors, processErrorMessage) { if (errors) { return errors.map(function (e) { var message = typeof e.message !== 'undefined' ? e.message : e; if (typeof processErrorMessage === 'function') { return processErrorMessage(message); } return message; }); } return errors; } function getParams(ns, cb) { var names = typeof ns === 'string' ? [ns] : ns; var callback = cb; if (cb === undefined && typeof names === 'function') { callback = names; names = undefined; } return { names: names, callback: callback }; } /** * 从组件事件中获取数据 * @param e Event或者value * @returns value */ function getValueFromEvent(e) { // support custom element if (!e || !e.target) { return e; } var target = e.target; if (target.type === 'checkbox') { return target.checked; } else if (target.type === 'radio') { //兼容原生radioGroup if (target.value) { return target.value; } else { return target.checked; } } return target.value; } function validateMap(rulesMap, rule, defaultTrigger) { var nrule = (0, _extends3.default)({}, rule); if (!nrule.trigger) { nrule.trigger = [defaultTrigger]; } if (typeof nrule.trigger === 'string') { nrule.trigger = [nrule.trigger]; } for (var i = 0; i < nrule.trigger.length; i++) { var trigger = nrule.trigger[i]; if (trigger in rulesMap) { rulesMap[trigger].push(nrule); } else { rulesMap[trigger] = [nrule]; } } delete nrule.trigger; } /** * 提取rule里面的trigger并且做映射 * @param {Array} rules 规则 * @param {String} defaultTrigger 默认触发 * @return {Object} {onChange:rule1, onBlur: rule2} */ function mapValidateRules(rules, defaultTrigger) { var rulesMap = {}; rules.forEach(function (rule) { validateMap(rulesMap, rule, defaultTrigger); }); return rulesMap; } var warn = function warn() {}; if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') { warn = function warn() { /* eslint-disable no-console */ if (typeof console !== 'undefined' && console.error) { var _console; (_console = console).error.apply(_console, arguments); } }; } var warning = warn; exports.warning = warning;