UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

88 lines (87 loc) 5.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); /** * @file Picker * @description 移动端列滚动选择器 */ var react_1 = tslib_1.__importStar(require("react")); var uncontrollable_1 = require("uncontrollable"); var theme_1 = require("../theme"); var locale_1 = require("../locale"); var Button_1 = (0, tslib_1.__importDefault)(require("./Button")); var PickerColumn_1 = (0, tslib_1.__importDefault)(require("./PickerColumn")); var helper_1 = require("../utils/helper"); function fixToArray(data) { if (!Array.isArray(data)) { return [data]; } return data; } var Picker = (0, react_1.memo)(function (props) { var title = props.title, labelField = props.labelField, valueField = props.valueField, _a = props.visibleItemCount, visibleItemCount = _a === void 0 ? 5 : _a, _b = props.value, value = _b === void 0 ? [] : _b, _c = props.swipeDuration, swipeDuration = _c === void 0 ? 1000 : _c, _d = props.columns, columns = _d === void 0 ? [] : _d, _e = props.itemHeight, itemHeight = _e === void 0 ? 48 : _e, _f = props.showToolbar, showToolbar = _f === void 0 ? true : _f, _g = props.className, className = _g === void 0 ? '' : _g, cx = props.classnames, ns = props.classPrefix, footer = props.footer, __ = props.translate, type = props.type; var _columns = fixToArray(columns); var _h = (0, react_1.useState)(fixToArray(props.value === undefined ? props.defaultValue || [] : value)), innerValue = _h[0], setInnerValue = _h[1]; //为了在移动端时间范围中实时更新值 var _j = (0, react_1.useState)(), uniqueTag = _j[0], setUniqueTag = _j[1]; (0, react_1.useEffect)(function () { if (value === innerValue) return; setInnerValue(fixToArray(value)); }, [value]); (0, react_1.useEffect)(function () { if ((0, helper_1.isMobile)() && uniqueTag && (type === null || type === void 0 ? void 0 : type.includes('range'))) { //移动端时间范围组件,滑动后将值写入 confirm(true); } }, [uniqueTag]); var close = function () { if (props.onClose) { props.onClose(innerValue); } }; //标记滑动改变 var confirm = function (isHandleChange) { if (props.onConfirm) { props.onConfirm(innerValue, isHandleChange); } }; var onChange = function (itemValue, columnIndex, isconfirm) { var nextInnerValue = (0, tslib_1.__spreadArray)([], innerValue, true); nextInnerValue[columnIndex] = itemValue; setInnerValue(nextInnerValue); setUniqueTag(nextInnerValue); if (props.onChange) { props.onChange(nextInnerValue, columnIndex, isconfirm); } }; var renderColumnItem = function (item, index) { return (react_1.default.createElement(PickerColumn_1.default, (0, tslib_1.__assign)({}, item, { classnames: cx, classPrefix: ns, labelField: labelField || item.labelField, valueField: valueField || item.valueField, itemHeight: itemHeight, swipeDuration: swipeDuration, visibleItemCount: visibleItemCount, value: innerValue[index], onChange: function (val, i, confirm) { onChange(val, index, confirm); }, key: "column" + index }))); }; var wrapHeight = itemHeight * +visibleItemCount; var frameStyle = { height: itemHeight + "px" }; var columnsStyle = { height: wrapHeight + "px" }; var maskStyle = { backgroundSize: "100% " + (wrapHeight - itemHeight) / 2 + "px" }; var hasHeader = showToolbar || title; return (react_1.default.createElement("div", { className: cx(className, 'PickerColumns', 'PickerColumns-popOver') }, !footer && hasHeader && (react_1.default.createElement("div", { className: cx('PickerColumns-header') }, showToolbar && (react_1.default.createElement(Button_1.default, { className: "PickerColumns-cancel", level: "default", onClick: close }, __('cancel'))), title && (react_1.default.createElement("div", { className: cx('PickerColumns-title') }, title)), showToolbar && (react_1.default.createElement(Button_1.default, { className: "PickerColumns-confirm", level: "primary", onClick: confirm }, __('confirm'))))), react_1.default.createElement("div", { className: cx('PickerColumns-columns'), style: columnsStyle }, _columns.map(function (column, index) { return renderColumnItem(column, index); }), react_1.default.createElement("div", { className: cx('PickerColumns-mask'), style: maskStyle }), react_1.default.createElement("div", { className: cx('PickerColumns-frame'), style: frameStyle })), footer && react_1.default.createElement("div", { className: cx('PickerColumns-footer') }, react_1.default.createElement(Button_1.default, { className: "PickerColumns-confirm", level: "primary", onClick: function () { return confirm(); } }, __('confirm'))))); }); exports.default = (0, theme_1.themeable)((0, locale_1.localeable)((0, uncontrollable_1.uncontrollable)(Picker, { value: 'onChange' }))); //# sourceMappingURL=./components/Picker.js.map