tdesign-mobile-vue
Version:
tdesign-mobile-vue
485 lines (477 loc) • 22.7 kB
JavaScript
/**
* tdesign v1.7.0
* (c) 2024 TDesign Group
* @license MIT
*/
;
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