UNPKG

mobile-more

Version:

基于 antd-mobile v5 扩展移动端 UI 组件

223 lines (222 loc) 11.1 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _ut = require("ut2"); var _tinycolor = _interopRequireDefault(require("tinycolor2")); var _rcHooks = require("rc-hooks"); var _classnames = _interopRequireDefault(require("classnames")); var _dolyIcons = require("doly-icons"); var _antdMobile = require("antd-mobile"); var _StepForm = _interopRequireDefault(require("./StepForm")); var _Submitter = _interopRequireDefault(require("./Submitter")); var _StepsFormContext = _interopRequireDefault(require("./StepsFormContext")); var _config = require("../../../config"); require("./index.css"); var _StepFormContext = _interopRequireDefault(require("./StepFormContext")); var _utils = require("../../../utils/utils"); var Step = _antdMobile.Steps.Step; var prefixCls = "".concat(_config.prefixClass, "-steps-form"); var BizStepsForm = function BizStepsForm(props) { var _mergedCurrentItem$st, _mergedCurrentItem$st2, _mergedCurrentItem$su; var _props$defaultCurrent = props.defaultCurrent, defaultCurrent = _props$defaultCurrent === void 0 ? 0 : _props$defaultCurrent, _props$changedStepScr = props.changedStepScrollToTop, changedStepScrollToTop = _props$changedStepScr === void 0 ? true : _props$changedStepScr, _props$items = props.items, items = _props$items === void 0 ? [] : _props$items, _props$showFooter = props.showFooter, showFooter = _props$showFooter === void 0 ? true : _props$showFooter, stepsRender = props.stepsRender, formContentRender = props.formContentRender, submitterRender = props.submitterRender, actionRef = props.actionRef, stepsProps = props.stepsProps, stepProps = props.stepProps, submitterProps = props.submitterProps, formProps = props.formProps, onPrev = props.onPrev, onNext = props.onNext, onFinish = props.onFinish, className = props.className, style = props.style, styles = props.styles; var _useControllableValue = (0, _rcHooks.useControllableValue)(props, { defaultValue: defaultCurrent, defaultValuePropName: 'defaultCurrent', valuePropName: 'current', trigger: 'onCurrentChange' }), _useControllableValue2 = (0, _slicedToArray2.default)(_useControllableValue, 2), current = _useControllableValue2[0], setCurrent = _useControllableValue2[1]; var latestCurrent = (0, _rcHooks.useLatest)(current); var uid = (0, _react.useMemo)(function () { return (0, _utils.getTimestampString)('stepsForm'); }, []); var rootRef = (0, _react.useRef)(null); var contentRef = (0, _react.useRef)(null); var _useState = (0, _react.useState)(), _useState2 = (0, _slicedToArray2.default)(_useState, 2), colorLight = _useState2[0], setColorLight = _useState2[1]; var formArrayRef = (0, _react.useRef)([]); var formDataRef = (0, _react.useRef)({}); var mergedCurrentItem = (0, _objectSpread2.default)({ showFooter: showFooter, stepsRender: stepsRender, formContentRender: formContentRender, submitterRender: submitterRender }, items[current]); var handlePrev = function handlePrev() { var newCurrent = latestCurrent.current > 0 ? latestCurrent.current - 1 : 0; setCurrent(newCurrent); onPrev === null || onPrev === void 0 ? void 0 : onPrev(); }; var handleNext = function handleNext() { formArrayRef.current[latestCurrent.current].submit(); }; // 表单提交验证成功后修改步骤 var next = function next() { var newCurrent = latestCurrent.current < items.length - 1 ? latestCurrent.current + 1 : latestCurrent.current; setCurrent(newCurrent); onNext === null || onNext === void 0 ? void 0 : onNext(); }; var getFormValues = function getFormValues() { return Object.values(formDataRef.current).reduce(function (pre, cur) { return (0, _ut.mergeObject)(pre, cur); }, {}); }; // 最后一步表单验证成功后提交全部数据 var submit = /*#__PURE__*/function () { var _ref = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() { var values; return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: if (!(typeof onFinish === 'function')) { _context.next = 4; break; } values = getFormValues(); _context.next = 4; return (0, _ut.tryit)(onFinish)(values); case 4: case "end": return _context.stop(); } }, _callee); })); return function submit() { return _ref.apply(this, arguments); }; }(); var onFormFinish = function onFormFinish(name, values) { formDataRef.current[name] = values; }; (0, _react.useImperativeHandle)(actionRef, function () { return { get forms() { return formArrayRef.current; }, prev: function prev() { handlePrev(); }, next: function next() { handleNext(); }, reset: function reset() { setCurrent(defaultCurrent); formDataRef.current = {}; formArrayRef.current.forEach(function (item) { item.resetFields(); }); }, getFormValues: getFormValues }; }); (0, _react.useEffect)(function () { if (changedStepScrollToTop && contentRef.current) { contentRef.current.scrollTo({ top: 0 }); } }, [changedStepScrollToTop, current]); var stepsDom = /*#__PURE__*/_react.default.createElement(_antdMobile.Steps, (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, stepsProps), mergedCurrentItem.stepsProps), {}, { className: (0, _classnames.default)("".concat(prefixCls, "-steps"), stepsProps === null || stepsProps === void 0 ? void 0 : stepsProps.className, (_mergedCurrentItem$st = mergedCurrentItem.stepsProps) === null || _mergedCurrentItem$st === void 0 ? void 0 : _mergedCurrentItem$st.className), style: (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, styles === null || styles === void 0 ? void 0 : styles.steps), stepsProps === null || stepsProps === void 0 ? void 0 : stepsProps.style), (_mergedCurrentItem$st2 = mergedCurrentItem.stepsProps) === null || _mergedCurrentItem$st2 === void 0 ? void 0 : _mergedCurrentItem$st2.style), current: current }), items.map(function (item, index) { var _item$stepProps; return /*#__PURE__*/_react.default.createElement(Step, (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({ key: uid + index, title: item.title, icon: index < current ? /*#__PURE__*/_react.default.createElement(_dolyIcons.CheckCircle, null) : index + 1 }, stepProps), item.stepProps), {}, { style: (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, styles === null || styles === void 0 ? void 0 : styles.step), stepProps === null || stepProps === void 0 ? void 0 : stepProps.style), (_item$stepProps = item.stepProps) === null || _item$stepProps === void 0 ? void 0 : _item$stepProps.style) })); })); var formContentDom = /*#__PURE__*/_react.default.createElement("div", { className: "".concat(prefixCls, "-content-main"), style: styles === null || styles === void 0 ? void 0 : styles.contentMain }, items.map(function (item, index) { var name = uid + index; return /*#__PURE__*/_react.default.createElement("div", { key: name, className: (0, _classnames.default)("".concat(prefixCls, "-content-item"), (0, _defineProperty2.default)({}, "".concat(prefixCls, "-content-item-active"), current === index)) }, /*#__PURE__*/_react.default.createElement(_StepFormContext.default.Provider, { value: { name: name, step: index, total: items.length - 1 } }, item.children)); })); var submitterDom = mergedCurrentItem.showFooter ? (/*#__PURE__*/_react.default.createElement(_Submitter.default, (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, submitterProps), mergedCurrentItem.submitterProps), {}, { total: items.length, current: current + 1, onPrev: handlePrev, onNext: handleNext, onSubmit: handleNext, style: (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, styles === null || styles === void 0 ? void 0 : styles.submitter), submitterProps === null || submitterProps === void 0 ? void 0 : submitterProps.style), (_mergedCurrentItem$su = mergedCurrentItem.submitterProps) === null || _mergedCurrentItem$su === void 0 ? void 0 : _mergedCurrentItem$su.style) }))) : null; (0, _react.useLayoutEffect)(function () { if (_ut.isBrowser && rootRef.current) { var colorPrimary = getComputedStyle(rootRef.current).getPropertyValue('--color-primary'); setColorLight((0, _tinycolor.default)(colorPrimary).lighten(27.5).toString()); } }, []); return /*#__PURE__*/_react.default.createElement(_StepsFormContext.default.Provider, { value: { formArrayRef: formArrayRef, next: next, submit: submit, onFormFinish: onFormFinish, formProps: formProps } }, /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)(prefixCls, className), style: (0, _objectSpread2.default)({ '--color-primary-light': colorLight }, style), ref: rootRef }, /*#__PURE__*/_react.default.createElement("div", { className: "".concat(prefixCls, "-content"), style: styles === null || styles === void 0 ? void 0 : styles.content, ref: contentRef }, mergedCurrentItem.stepsRender ? mergedCurrentItem.stepsRender(stepsDom) : stepsDom, mergedCurrentItem.formContentRender ? mergedCurrentItem.formContentRender(formContentDom) : formContentDom), mergedCurrentItem.showFooter && (/*#__PURE__*/_react.default.createElement("div", { className: "".concat(prefixCls, "-footer"), style: styles === null || styles === void 0 ? void 0 : styles.footer }, mergedCurrentItem.submitterRender ? mergedCurrentItem.submitterRender(submitterDom) : submitterDom)))); }; BizStepsForm.StepForm = _StepForm.default; var _default = exports.default = BizStepsForm;