UNPKG

@antmjs/vantui

Version:

一套适用于Taro3及React的vantui组件库

224 lines (223 loc) 10.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.DropdownItem = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _components = require("@tarojs/components"); var _react = require("react"); var _taro = require("@tarojs/taro"); var _utils = require("../common/utils"); var utils = _interopRequireWildcard(require("../wxs/utils")); var _index = _interopRequireDefault(require("../icon/index")); var _cell = _interopRequireDefault(require("../cell")); var _popup = _interopRequireDefault(require("../popup")); var _defaultProps = require("../default-props"); var _jsxRuntime = require("react/jsx-runtime"); var _excluded = ["title", "titleClass", "value", "popupStyle", "disabled", "setChildrenInstance", "parentInstance", "index", "onOpen", "onOpened", "onClose", "onClosed", "onChange", "options", "className", "style"]; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function Index(props, ref) { var _useState = (0, _react.useState)((0, _defaultProps.get)().DropdownItem), _useState2 = (0, _slicedToArray2.default)(_useState, 1), d = _useState2[0]; var _d$props = _objectSpread(_objectSpread({}, d), props), title = _d$props.title, titleClass = _d$props.titleClass, value = _d$props.value, popupStyle = _d$props.popupStyle, _d$props$disabled = _d$props.disabled, disabled = _d$props$disabled === void 0 ? false : _d$props$disabled, setChildrenInstance = _d$props.setChildrenInstance, parentInstance = _d$props.parentInstance, index = _d$props.index, onOpen = _d$props.onOpen, onOpened = _d$props.onOpened, onClose = _d$props.onClose, onClosed = _d$props.onClosed, _d$props$onChange = _d$props.onChange, onChange = _d$props$onChange === void 0 ? function () {} : _d$props$onChange, _d$props$options = _d$props.options, options = _d$props$options === void 0 ? [] : _d$props$options, _d$props$className = _d$props.className, className = _d$props$className === void 0 ? '' : _d$props$className, style = _d$props.style, others = (0, _objectWithoutProperties2.default)(_d$props, _excluded); var _useState3 = (0, _react.useState)({}), _useState4 = (0, _slicedToArray2.default)(_useState3, 2), wrapperStyle = _useState4[0], setWrapperStyle = _useState4[1]; var _useState5 = (0, _react.useState)(true), _useState6 = (0, _slicedToArray2.default)(_useState5, 2), transition = _useState6[0], setTransition = _useState6[1]; var _useState7 = (0, _react.useState)(false), _useState8 = (0, _slicedToArray2.default)(_useState7, 2), showPopup = _useState8[0], setShowPopup = _useState8[1]; var _useState9 = (0, _react.useState)(true), _useState10 = (0, _slicedToArray2.default)(_useState9, 2), showWrapper = _useState10[0], setShowWrapper = _useState10[1]; var _useState11 = (0, _react.useState)(''), _useState12 = (0, _slicedToArray2.default)(_useState11, 2), displayTitle = _useState12[0], setDisplayTitle = _useState12[1]; var _useState13 = (0, _react.useState)(''), _useState14 = (0, _slicedToArray2.default)(_useState13, 2), value_ = _useState14[0], setValue = _useState14[1]; (0, _react.useEffect)(function () { setValue(value); }, [value]); var rerender = (0, _react.useCallback)(function () { (0, _taro.nextTick)(function () { if (parentInstance) { parentInstance.updateItemListData(); } }); }, [parentInstance]); var updateStyle = (0, _react.useCallback)(function () { parentInstance === null || parentInstance === void 0 ? void 0 : parentInstance.getChildWrapperStyle().then(function (wrapperStyle) { var rect = wrapperStyle.rect; delete wrapperStyle.rect; if (wrapperStyle) { wrapperStyle.width = '100vw'; wrapperStyle.position = 'fixed'; } if (parentInstance.direction === 'down') { var winHeight = (0, _utils.getWindowInfo)().windowHeight; var bottom = winHeight - rect.top; wrapperStyle.bottom = -rect.height + 'PX'; wrapperStyle.height = bottom + 'PX'; setWrapperStyle(wrapperStyle); setShowWrapper(true); rerender(); } if (parentInstance.direction === 'up') { wrapperStyle.height = rect.top + 'PX'; setWrapperStyle(wrapperStyle); setShowWrapper(true); rerender(); } }); }, [parentInstance, rerender]); var toggle = (0, _react.useCallback)(function (show) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (typeof show !== 'boolean') { show = !showPopup; } if (show === showPopup) { return; } setTransition(!options.immediate); setShowPopup(show); if (show) { updateStyle(); } else { rerender(); } }, [showPopup, updateStyle, rerender]); (0, _taro.usePageScroll)(function () { if (showPopup) { (0, _utils.requestAnimationFrame)(function () { updateStyle(); }); } }); (0, _react.useEffect)(function () { setChildrenInstance(index, { title: title, titleClass: titleClass, disabled: disabled, transition: transition, showPopup: showPopup, index: index, setDisplayTitle: setDisplayTitle, displayTitle: displayTitle, options: options, value: value_, toggle: toggle }); }, [title, titleClass, index, setChildrenInstance, disabled, transition, showPopup, setDisplayTitle, displayTitle, options, value_, toggle]); var onClosed_ = (0, _react.useCallback)(function () { if (onClosed) onClosed(); setTimeout(function () { setShowWrapper(false); }, 10); }, [onClosed]); var onOptionTap = function onOptionTap(_event, option) { var shouldEmitChange = value_ !== option.value; setShowPopup(false); setValue(option.value); if (onClose) onClose(); rerender(); if (shouldEmitChange) { onChange(option.value); } }; (0, _react.useImperativeHandle)(ref, function () { return { toggle: toggle }; }); return showWrapper ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.View, { className: utils.bem('dropdown-item', parentInstance.direction) + ' ' + className, style: utils.style([wrapperStyle, style]), children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_popup.default, { show: showPopup, style: utils.style([{ position: 'absolute' }, popupStyle]), overlayStyle: "position: absolute;", overlay: !!parentInstance.overlay, position: parentInstance.direction === 'down' ? 'top' : 'bottom', duration: transition ? parentInstance.duration : 0, closeOnClickOverlay: parentInstance.closeOnClickOverlay, onEnter: onOpen, onLeave: onClose, onClose: function onClose() { return toggle(false); }, onAfterEnter: onOpened, onAfterLeave: onClosed_, children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.View, { children: [(options || []).map(function (item, index) { return /*#__PURE__*/(0, _jsxRuntime.jsx)(_cell.default, { "data-option": item, className: utils.bem('dropdown-item__option', { active: item.value === value_ }), clickable: true, icon: item.icon, onClick: function onClick(e) { return onOptionTap(e, item); }, renderTitle: /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, { children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.View, { className: "van-dropdown-item__title", style: item.value === value_ ? 'color:' + parentInstance.activeColor : '', children: item.text }) }), children: item.value === value_ && /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.default, { name: "success", className: "van-dropdown-item__icon", color: parentInstance.activeColor }) }, "".concat(index, "VanCell")); }), others.children] }) }) }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {}); } var DropdownItem = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _react.forwardRef)(Index)); exports.DropdownItem = DropdownItem; var _default = DropdownItem; exports.default = _default;