UNPKG

tdesign-mobile-vue

Version:
485 lines (477 loc) 22.7 kB
/** * tdesign v1.7.0 * (c) 2024 TDesign Group * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray'); var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator'); var _defineProperty = require('@babel/runtime/helpers/defineProperty'); var vue = require('vue'); var _regeneratorRuntime = require('@babel/runtime/regenerator'); var isArray = require('lodash/isArray'); var isNumber = require('lodash/isNumber'); var isString = require('lodash/isString'); var isBoolean = require('lodash/isBoolean'); var cloneDeep = require('lodash/cloneDeep'); var get = require('lodash/get'); var lodashSet = require('lodash/set'); var isNil = require('lodash/isNil'); var lodashTemplate = require('lodash/template'); var tdesignIconsVueNext = require('tdesign-icons-vue-next'); var form_formModel = require('./form-model.js'); var form_formItemProps = require('./form-item-props.js'); var form_const = require('./const.js'); var config = require('../config.js'); var hooks_tnode = require('../hooks/tnode.js'); var hooks_useClass = require('../hooks/useClass.js'); require('lodash/isObject'); require('../_chunks/dep-a20a5149.js'); require('lodash/isEmpty'); require('lodash/isFunction'); require('lodash/camelCase'); require('lodash/kebabCase'); require('../hooks/render-tnode.js'); require('../config-provider/useConfig.js'); require('../config-provider/context.js'); require('lodash/mergeWith'); require('lodash/merge'); require('../_common/js/global-config/mobile/default-config.js'); require('../_common/js/global-config/mobile/locale/zh_CN.js'); require('../_chunks/dep-8d930798.js'); require('@babel/runtime/helpers/typeof'); require('dayjs'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray); var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator); var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime); var isArray__default = /*#__PURE__*/_interopDefaultLegacy(isArray); var isNumber__default = /*#__PURE__*/_interopDefaultLegacy(isNumber); var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString); var isBoolean__default = /*#__PURE__*/_interopDefaultLegacy(isBoolean); var cloneDeep__default = /*#__PURE__*/_interopDefaultLegacy(cloneDeep); var get__default = /*#__PURE__*/_interopDefaultLegacy(get); var lodashSet__default = /*#__PURE__*/_interopDefaultLegacy(lodashSet); var isNil__default = /*#__PURE__*/_interopDefaultLegacy(isNil); var lodashTemplate__default = /*#__PURE__*/_interopDefaultLegacy(lodashTemplate); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var prefix = config["default"].prefix; var _FormItem = vue.defineComponent({ name: "".concat(prefix, "-form-item"), props: form_formItemProps["default"], setup: function setup(props2, _ref) { var slots = _ref.slots; var renderTNodeJSX = hooks_tnode.useTNodeJSX(); var formClass = hooks_useClass.usePrefixClass("form"); var formItemClass = hooks_useClass.usePrefixClass("form__item"); var _toRefs = vue.toRefs(props2), name = _toRefs.name; var form = vue.inject(form_const.FormInjectionKey, void 0); var extraNode = vue.computed(function () { var _list$; var list = errorList.value; if (showErrorMessage.value && (_list$ = list[0]) !== null && _list$ !== void 0 && _list$.message) { var _list$2; return (_list$2 = list[0]) === null || _list$2 === void 0 ? void 0 : _list$2.message; } if (successList.value.length) { return successList.value[0].message; } return null; }); var formItemClasses = vue.computed(function () { return [formItemClass.value, "".concat(formItemClass.value, "--bordered"), "".concat(formClass.value, "--").concat(labelAlign.value), "".concat(formClass.value, "-item__").concat(props2.name)]; }); var needRequiredMark = vue.computed(function () { var _props2$requiredMark; var requiredMark = (_props2$requiredMark = props2.requiredMark) !== null && _props2$requiredMark !== void 0 ? _props2$requiredMark : form === null || form === void 0 ? void 0 : form.requiredMark; var isRequired = innerRules.value.filter(function (rule) { return rule.required; }).length > 0; return requiredMark !== null && requiredMark !== void 0 ? requiredMark : isRequired; }); var hasLabel = vue.computed(function () { return slots.label || props2.label; }); var hasColon = vue.computed(function () { return !!(form !== null && form !== void 0 && form.colon && hasLabel.value); }); var labelClass = "".concat(formClass.value, "__label"); var labelAlign = vue.computed(function () { return isNil__default["default"](props2.labelAlign) ? form === null || form === void 0 ? void 0 : form.labelAlign : props2.labelAlign; }); var labelWidth = vue.computed(function () { return isNil__default["default"](props2.labelWidth) ? form === null || form === void 0 ? void 0 : form.labelWidth : props2.labelWidth; }); var contentAlign = vue.computed(function () { return isNil__default["default"](props2.contentAlign) ? form === null || form === void 0 ? void 0 : form.contentAlign : props2.contentAlign; }); var labelClasses = vue.computed(function () { return [labelClass, _defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"]({}, "".concat(labelClass, "--required"), needRequiredMark.value), "".concat(labelClass, "--colon"), hasColon.value), "".concat(labelClass, "--top"), hasLabel.value && (labelAlign.value === "top" || !labelWidth.value)), "".concat(labelClass, "--left"), labelAlign.value === "left" && labelWidth.value), "".concat(labelClass, "--right"), labelAlign.value === "right" && labelWidth.value)]; }); var labelStyle = vue.computed(function () { if (labelWidth.value && labelAlign.value !== "top") { return isNumber__default["default"](labelWidth.value) ? { width: "".concat(labelWidth.value, "px") } : { width: labelWidth.value }; } return {}; }); var freeShowErrorMessage = vue.ref(false); var showErrorMessage = vue.computed(function () { if (isBoolean__default["default"](freeShowErrorMessage.value)) return freeShowErrorMessage.value; if (isBoolean__default["default"](props2.showErrorMessage)) return props2.showErrorMessage; return form === null || form === void 0 ? void 0 : form.showErrorMessage; }); var errorClasses = vue.computed(function () { if (!showErrorMessage.value) return ""; if (!errorList.value.length) return ""; var type = errorList.value[0].type || "error"; return type === "error" ? "".concat(formItemClass.value, "--error") : "".concat(formItemClass.value, "--warning"); }); var contentClasses = vue.computed(function () { return ["".concat(formClass.value, "__controls"), errorClasses.value]; }); var contentSlotClasses = vue.computed(function () { return ["".concat(formClass.value, "__controls-content"), "".concat(formClass.value, "__controls--").concat(contentAlign.value)]; }); var contentStyle = vue.computed(function () { var contentStyle2 = {}; if (labelWidth.value && labelAlign.value !== "top") { if (isNumber__default["default"](labelWidth.value)) { contentStyle2 = { marginLeft: "".concat(labelWidth.value, "px") }; } else { contentStyle2 = { marginLeft: labelWidth.value }; } } return contentStyle2; }); var errorList = vue.ref([]); var successList = vue.ref([]); var verifyStatus = vue.ref(form_const.ValidateStatus.TO_BE_VALIDATED); var resetValidating = vue.ref(false); var needResetField = vue.ref(false); var resetHandler = function resetHandler() { needResetField.value = false; errorList.value = []; successList.value = []; verifyStatus.value = form_const.ValidateStatus.TO_BE_VALIDATED; }; var getEmptyValue = function getEmptyValue() { var type = Object.prototype.toString.call(get__default["default"](form === null || form === void 0 ? void 0 : form.data, "".concat(props2.name))); var emptyValue; if (type === "[object String]") { emptyValue = ""; } if (type === "[object Array]") { emptyValue = []; } if (type === "[object Object]") { emptyValue = {}; } return emptyValue; }; var resetField = /*#__PURE__*/function () { var _ref3 = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee() { var resetType, _args = arguments; return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: resetType = _args.length > 0 && _args[0] !== undefined ? _args[0] : form === null || form === void 0 ? void 0 : form.resetType; if (props2.name) { _context.next = 3; break; } return _context.abrupt("return", null); case 3: if (resetType === "empty") { lodashSet__default["default"](form === null || form === void 0 ? void 0 : form.data, props2.name, getEmptyValue()); } else if (resetType === "initial") { lodashSet__default["default"](form === null || form === void 0 ? void 0 : form.data, props2.name, initialValue.value); } _context.next = 6; return vue.nextTick(); case 6: if (resetValidating.value) { needResetField.value = true; } else { resetHandler(); } case 7: case "end": return _context.stop(); } }, _callee); })); return function resetField() { return _ref3.apply(this, arguments); }; }(); var errorMessages = vue.computed(function () { return (form === null || form === void 0 ? void 0 : form.errorMessage) || {}; }); var innerRules = vue.computed(function () { var _props2$rules; if ((_props2$rules = props2.rules) !== null && _props2$rules !== void 0 && _props2$rules.length) return props2.rules; if (!props2.name) return []; var index = "".concat(props2.name).lastIndexOf(".") || -1; var pRuleName = "".concat(props2.name).slice(index + 1); return get__default["default"](form === null || form === void 0 ? void 0 : form.rules, props2.name) || get__default["default"](form === null || form === void 0 ? void 0 : form.rules, pRuleName) || []; }); var analysisValidateResult = /*#__PURE__*/function () { var _ref4 = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(trigger) { var _result$rules; var result; return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: result = { successList: [], errorList: [], rules: [], resultList: [], allowSetValue: false }; result.rules = trigger === "all" ? innerRules.value : innerRules.value.filter(function (item) { return (item.trigger || "change") === trigger; }); if (!(innerRules.value.length && !((_result$rules = result.rules) !== null && _result$rules !== void 0 && _result$rules.length))) { _context2.next = 4; break; } return _context2.abrupt("return", result); case 4: result.allowSetValue = true; _context2.next = 7; return form_formModel.validate(value.value, result.rules); case 7: result.resultList = _context2.sent; result.errorList = result.resultList.filter(function (item) { return item.result !== true; }).map(function (item) { Object.keys(item).forEach(function (key) { if (!item.message && errorMessages.value[key]) { var compiled = lodashTemplate__default["default"](errorMessages.value[key]); var name2 = isString__default["default"](props2.label) ? props2.label : props2.name; item.message = compiled({ name: name2, validate: item[key] }); } }); return item; }); result.successList = result.resultList.filter(function (item) { return item.result === true && item.message && item.type === "success"; }); return _context2.abrupt("return", result); case 11: case "end": return _context2.stop(); } }, _callee2); })); return function analysisValidateResult(_x) { return _ref4.apply(this, arguments); }; }(); var validateHandler = /*#__PURE__*/function () { var _ref5 = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3(trigger, showErrorMessage2) { var _yield$analysisValida, innerSuccessList, innerErrorList, rules, resultList, allowSetValue; return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: resetValidating.value = true; freeShowErrorMessage.value = showErrorMessage2; _context3.next = 4; return analysisValidateResult(trigger); case 4: _yield$analysisValida = _context3.sent; innerSuccessList = _yield$analysisValida.successList; innerErrorList = _yield$analysisValida.errorList; rules = _yield$analysisValida.rules; resultList = _yield$analysisValida.resultList; allowSetValue = _yield$analysisValida.allowSetValue; if (allowSetValue) { successList.value = innerSuccessList || []; errorList.value = innerErrorList || []; } if (rules.length) { verifyStatus.value = innerErrorList !== null && innerErrorList !== void 0 && innerErrorList.length ? form_const.ValidateStatus.FAIL : form_const.ValidateStatus.SUCCESS; } if (needResetField.value) { resetHandler(); } resetValidating.value = false; return _context3.abrupt("return", _defineProperty__default["default"]({}, "".concat(name.value), (innerErrorList === null || innerErrorList === void 0 ? void 0 : innerErrorList.length) === 0 ? true : resultList)); case 15: case "end": return _context3.stop(); } }, _callee3); })); return function validateHandler(_x2, _x3) { return _ref5.apply(this, arguments); }; }(); var validateOnly = /*#__PURE__*/function () { var _ref7 = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee4(trigger) { var _yield$analysisValida2, innerErrorList, resultList; return _regeneratorRuntime__default["default"].wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return analysisValidateResult(trigger); case 2: _yield$analysisValida2 = _context4.sent; innerErrorList = _yield$analysisValida2.errorList; resultList = _yield$analysisValida2.resultList; return _context4.abrupt("return", _defineProperty__default["default"]({}, props2.name, innerErrorList.length === 0 ? true : resultList)); case 6: case "end": return _context4.stop(); } }, _callee4); })); return function validateOnly(_x4) { return _ref7.apply(this, arguments); }; }(); var setValidateMessage = function setValidateMessage(validateMessage) { if (!validateMessage && !isArray__default["default"](validateMessage)) return; if (validateMessage.length === 0) { errorList.value = []; verifyStatus.value = form_const.ValidateStatus.SUCCESS; } errorList.value = validateMessage.map(function (item) { return _objectSpread(_objectSpread({}, item), {}, { result: false }); }); verifyStatus.value = form_const.ValidateStatus.FAIL; }; var value = vue.computed(function () { return (form === null || form === void 0 ? void 0 : form.data) && get__default["default"](form === null || form === void 0 ? void 0 : form.data, "".concat(name.value)); }); var initialValue = vue.ref(void 0); var context = vue.reactive({ name: name, resetHandler: resetHandler, resetField: resetField, validate: validateHandler, validateOnly: validateOnly, setValidateMessage: setValidateMessage }); vue.onMounted(function () { initialValue.value = cloneDeep__default["default"](value.value); form === null || form === void 0 || form.children.push(context); }); vue.onBeforeUnmount(function () { if (form) form.children = form === null || form === void 0 ? void 0 : form.children.filter(function (ctx) { return ctx !== context; }); }); vue.watch(value, /*#__PURE__*/_asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee5() { return _regeneratorRuntime__default["default"].wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: _context5.next = 2; return validateHandler("change"); case 2: case "end": return _context5.stop(); } }, _callee5); })), { deep: true }); vue.watch(function () { return [props2.name, JSON.stringify(props2.rules)].join(","); }, function () { validateHandler("change"); }); var handleBlur = /*#__PURE__*/function () { var _ref10 = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee6() { return _regeneratorRuntime__default["default"].wrap(function _callee6$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: _context6.next = 2; return validateHandler("blur"); case 2: case "end": return _context6.stop(); } }, _callee6); })); return function handleBlur() { return _ref10.apply(this, arguments); }; }(); vue.provide(form_const.FormItemInjectionKey, { handleBlur: handleBlur }); return function () { var renderRightIconContent = function renderRightIconContent() { if (!props2.arrow) { return null; } return vue.createVNode(tdesignIconsVueNext.ChevronRightIcon, { "size": "24px", "style": { color: "rgba(0, 0, 0, .4)" } }, null); }; var renderLabelContent = function renderLabelContent() { if (Number(labelWidth.value) === 0) { return null; } return renderTNodeJSX("label"); }; var renderHelpNode = function renderHelpNode() { var helpNode = renderTNodeJSX("help"); if (!helpNode) { return null; } return vue.createVNode("div", { "class": ["".concat(formItemClass.value, "-help"), "".concat(formClass.value, "__controls--").concat(contentAlign.value)] }, [helpNode]); }; var renderExtraNode = function renderExtraNode() { if (!extraNode.value) { return null; } return vue.createVNode("div", { "class": ["".concat(formItemClass.value, "-extra"), "".concat(formClass.value, "__controls--").concat(contentAlign.value)] }, [extraNode.value]); }; return vue.createVNode("div", { "class": [].concat(_toConsumableArray__default["default"](formItemClasses.value), [renderHelpNode() ? "".concat(formClass.value, "__item-with-help") : ""]) }, [vue.createVNode("div", { "class": ["".concat(formItemClass.value, "-wrap"), "".concat(formItemClass.value, "--").concat(labelAlign.value)] }, [vue.createVNode("div", { "class": labelClasses.value, "style": labelStyle.value }, [vue.createVNode("label", { "for": props2.for }, [renderLabelContent()])]), vue.createVNode("div", { "class": contentClasses.value, "style": contentStyle.value }, [vue.createVNode("div", { "class": contentSlotClasses.value }, [renderTNodeJSX("default")]), renderHelpNode(), renderExtraNode()])]), renderRightIconContent()]); }; } }); exports["default"] = _FormItem; //# sourceMappingURL=form-item.js.map