tdesign-mobile-vue
Version:
tdesign-mobile-vue
285 lines (281 loc) • 11.2 kB
JavaScript
/**
* tdesign v1.7.0
* (c) 2024 TDesign Group
* @license MIT
*/
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
import { defineComponent, toRefs, ref, provide, reactive, createVNode } from 'vue';
import _regeneratorRuntime from '@babel/runtime/regenerator';
import isEmpty from 'lodash/isEmpty';
import isArray from 'lodash/isArray';
import isBoolean from 'lodash/isBoolean';
import isFunction from 'lodash/isFunction';
import props from './props.js';
import { FormInjectionKey } from './const.js';
import config from '../config.js';
import { preventDefault } from '../shared/dom.js';
import { useTNodeJSX } from '../hooks/tnode.js';
import { usePrefixClass } from '../hooks/useClass.js';
import { renderContent } from '../shared/render.js';
import 'lodash/isString';
import 'lodash/camelCase';
import 'lodash/kebabCase';
import '../hooks/render-tnode.js';
import 'lodash/isObject';
import '../config-provider/useConfig.js';
import '@babel/runtime/helpers/defineProperty';
import 'lodash/cloneDeep';
import '../config-provider/context.js';
import 'lodash/mergeWith';
import 'lodash/merge';
import '../_common/js/global-config/mobile/default-config.js';
import '../_common/js/global-config/mobile/locale/zh_CN.js';
import '../_chunks/dep-d5364bc4.js';
import '@babel/runtime/helpers/typeof';
import '../_chunks/dep-eb734424.js';
import 'dayjs';
var prefix = config.prefix;
var requestSubmit = function requestSubmit(target) {
if (!(target instanceof HTMLFormElement)) {
throw new Error("target must be HTMLFormElement");
}
var submitter = document.createElement("input");
submitter.type = "submit";
submitter.hidden = true;
target.appendChild(submitter);
submitter.click();
target.removeChild(submitter);
};
var _Form = defineComponent({
name: "".concat(prefix, "-form"),
props: props,
setup: function setup(props2, _ref) {
var expose = _ref.expose;
var renderTNodeJSX = useTNodeJSX();
var _toRefs = toRefs(props2),
disabled = _toRefs.disabled,
showErrorMessage = _toRefs.showErrorMessage,
labelWidth = _toRefs.labelWidth,
labelAlign = _toRefs.labelAlign,
contentAlign = _toRefs.contentAlign,
data = _toRefs.data,
colon = _toRefs.colon,
requiredMark = _toRefs.requiredMark,
rules = _toRefs.rules,
errorMessage = _toRefs.errorMessage,
resetType = _toRefs.resetType;
var formRef = ref();
var children = ref([]);
provide("formDisabled", {
disabled: disabled
});
provide(FormInjectionKey, reactive({
showErrorMessage: showErrorMessage,
labelWidth: labelWidth,
labelAlign: labelAlign,
contentAlign: contentAlign,
data: data,
colon: colon,
requiredMark: requiredMark,
rules: rules,
errorMessage: errorMessage,
resetType: resetType,
children: children,
renderContent: renderContent
}));
var formClass = usePrefixClass("form");
var needValidate = function needValidate(name, fields) {
if (!fields || !isArray(fields)) return true;
return fields.indexOf("".concat(name)) !== -1;
};
var formatValidateResult = function formatValidateResult(validateResultList) {
var result = validateResultList.reduce(function (r, err) {
return Object.assign(r || {}, err);
}, {});
Object.keys(result).forEach(function (key) {
if (result[key] === true) {
delete result[key];
}
});
return isEmpty(result) ? true : result;
};
var validate = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(param) {
var _props2$onValidate;
var _ref3, fields, _ref3$trigger, trigger, showErrorMessage2, list, arr, result;
return _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_ref3 = param || {}, fields = _ref3.fields, _ref3$trigger = _ref3.trigger, trigger = _ref3$trigger === void 0 ? "all" : _ref3$trigger, showErrorMessage2 = _ref3.showErrorMessage;
list = children.value.filter(function (child) {
return isFunction(child.validate) && needValidate(String(child.name), fields);
}).map(function (child) {
return child.validate(trigger, showErrorMessage2);
});
_context.next = 4;
return Promise.all(list);
case 4:
arr = _context.sent;
result = formatValidateResult(arr);
(_props2$onValidate = props2.onValidate) === null || _props2$onValidate === void 0 || _props2$onValidate.call(props2, {
validateResult: result
});
return _context.abrupt("return", result);
case 8:
case "end":
return _context.stop();
}
}, _callee);
}));
return function validate(_x) {
return _ref2.apply(this, arguments);
};
}();
var getFirstError = function getFirstError(result) {
var _result$Object$keys$, _Object$keys3;
if (isBoolean(result)) return "";
var _Object$keys = Object.keys(result),
_Object$keys2 = _slicedToArray(_Object$keys, 1),
firstKey = _Object$keys2[0];
if (props2.scrollToFirstError) {
var tmpClassName = "".concat(formClass.value, "-item__").concat(firstKey);
scrollTo(tmpClassName);
}
var resArr = result[firstKey];
if (!isArray(resArr)) return "";
return (result === null || result === void 0 || (_result$Object$keys$ = result[(_Object$keys3 = Object.keys(result)) === null || _Object$keys3 === void 0 ? void 0 : _Object$keys3[0]]) === null || _result$Object$keys$ === void 0 || (_result$Object$keys$ = _result$Object$keys$[0]) === null || _result$Object$keys$ === void 0 ? void 0 : _result$Object$keys$.message) || "";
};
var scrollTo = function scrollTo(selector) {
var _formRef$value$getEle = formRef.value.getElementsByClassName(selector),
_formRef$value$getEle2 = _slicedToArray(_formRef$value$getEle, 1),
dom = _formRef$value$getEle2[0];
var behavior = props2.scrollToFirstError;
if (behavior) {
dom && dom.scrollIntoView({
behavior: behavior
});
}
};
var validateOnly = /*#__PURE__*/function () {
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(params) {
var _ref5, fields, _ref5$trigger, trigger, list, arr;
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
_ref5 = params || {}, fields = _ref5.fields, _ref5$trigger = _ref5.trigger, trigger = _ref5$trigger === void 0 ? "all" : _ref5$trigger;
list = children.value.filter(function (child) {
return isFunction(child.validateOnly) && needValidate(String(child.name), fields);
}).map(function (child) {
return child.validateOnly(trigger);
});
_context2.next = 4;
return Promise.all(list);
case 4:
arr = _context2.sent;
return _context2.abrupt("return", formatValidateResult(arr));
case 6:
case "end":
return _context2.stop();
}
}, _callee2);
}));
return function validateOnly(_x2) {
return _ref4.apply(this, arguments);
};
}();
var submitParams = ref();
var _onSubmit = function onSubmit(e) {
if (props2.preventSubmitDefault && e) {
preventDefault(e, true);
}
validate(submitParams.value).then(function (r) {
var _props2$onSubmit;
var firstError = getFirstError(r);
(_props2$onSubmit = props2.onSubmit) === null || _props2$onSubmit === void 0 || _props2$onSubmit.call(props2, {
validateResult: r,
firstError: firstError
});
});
submitParams.value = void 0;
};
var submit = /*#__PURE__*/function () {
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(params) {
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
submitParams.value = params;
requestSubmit(formRef.value);
case 2:
case "end":
return _context3.stop();
}
}, _callee3);
}));
return function submit(_x3) {
return _ref6.apply(this, arguments);
};
}();
var resetParams = ref();
var _onReset = function onReset(e) {
var _props2$onReset;
if (props2.preventSubmitDefault && e) {
preventDefault(e, true);
}
children.value.filter(function (child) {
var _resetParams$value;
return isFunction(child.resetField) && needValidate(String(child.name), (_resetParams$value = resetParams.value) === null || _resetParams$value === void 0 ? void 0 : _resetParams$value.fields);
}).forEach(function (child) {
var _resetParams$value2;
return child.resetField((_resetParams$value2 = resetParams.value) === null || _resetParams$value2 === void 0 ? void 0 : _resetParams$value2.type);
});
resetParams.value = void 0;
(_props2$onReset = props2.onReset) === null || _props2$onReset === void 0 || _props2$onReset.call(props2, {
e: e
});
};
var reset = function reset(params) {
resetParams.value = params;
formRef.value.reset();
};
var clearValidate = function clearValidate(fields) {
children.value.forEach(function (child) {
if (isFunction(child.resetHandler) && needValidate(String(child.name), fields)) {
child.resetHandler();
}
});
};
var setValidateMessage = function setValidateMessage(validateMessage) {
var keys = Object.keys(validateMessage);
if (!keys.length) return;
var list = children.value.filter(function (child) {
return isFunction(child.setValidateMessage) && keys.includes("".concat(child.name));
}).map(function (child) {
return child.setValidateMessage(validateMessage["".concat(child.name)]);
});
Promise.all(list);
};
expose({
validate: validate,
submit: submit,
reset: reset,
clearValidate: clearValidate,
setValidateMessage: setValidateMessage,
validateOnly: validateOnly
});
return function () {
return createVNode("form", {
"ref": formRef,
"class": formClass.value,
"onSubmit": function onSubmit(e) {
return _onSubmit(e);
},
"onReset": function onReset(e) {
return _onReset(e);
}
}, [renderTNodeJSX("default")]);
};
}
});
export { _Form as default, requestSubmit };
//# sourceMappingURL=form.js.map