UNPKG

@antmjs/vantui

Version:

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

215 lines 8.79 kB
import _defineProperty from "@babel/runtime/helpers/defineProperty"; import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; var _excluded = ["title", "titleClass", "value", "popupStyle", "disabled", "setChildrenInstance", "parentInstance", "index", "onOpen", "onOpened", "onClose", "onClosed", "onChange", "options", "className", "style"]; 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) { _defineProperty(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; } import { View } from '@tarojs/components'; import { useState, useEffect, useCallback, useImperativeHandle, forwardRef, memo } from 'react'; import { nextTick, usePageScroll } from '@tarojs/taro'; import { getWindowInfo, requestAnimationFrame } from '../common/utils'; import * as utils from '../wxs/utils'; import VanIcon from '../icon/index'; import VanCell from '../cell'; import VanPopup from '../popup'; import { get } from '../default-props'; import { jsx as _jsx } from "react/jsx-runtime"; import { Fragment as _Fragment } from "react/jsx-runtime"; import { jsxs as _jsxs } from "react/jsx-runtime"; function Index(props, ref) { var _useState = useState(get().DropdownItem), _useState2 = _slicedToArray(_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 = _objectWithoutProperties(_d$props, _excluded); var _useState3 = useState({}), _useState4 = _slicedToArray(_useState3, 2), wrapperStyle = _useState4[0], setWrapperStyle = _useState4[1]; var _useState5 = useState(true), _useState6 = _slicedToArray(_useState5, 2), transition = _useState6[0], setTransition = _useState6[1]; var _useState7 = useState(false), _useState8 = _slicedToArray(_useState7, 2), showPopup = _useState8[0], setShowPopup = _useState8[1]; var _useState9 = useState(true), _useState10 = _slicedToArray(_useState9, 2), showWrapper = _useState10[0], setShowWrapper = _useState10[1]; var _useState11 = useState(''), _useState12 = _slicedToArray(_useState11, 2), displayTitle = _useState12[0], setDisplayTitle = _useState12[1]; var _useState13 = useState(''), _useState14 = _slicedToArray(_useState13, 2), value_ = _useState14[0], setValue = _useState14[1]; useEffect(function () { setValue(value); }, [value]); var rerender = useCallback(function () { nextTick(function () { if (parentInstance) { parentInstance.updateItemListData(); } }); }, [parentInstance]); var updateStyle = 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 = 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 = 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]); usePageScroll(function () { if (showPopup) { requestAnimationFrame(function () { updateStyle(); }); } }); 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_ = 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); } }; useImperativeHandle(ref, function () { return { toggle: toggle }; }); return showWrapper ? /*#__PURE__*/_jsx(View, { className: utils.bem('dropdown-item', parentInstance.direction) + ' ' + className, style: utils.style([wrapperStyle, style]), children: /*#__PURE__*/_jsx(VanPopup, { 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__*/_jsxs(View, { children: [(options || []).map(function (item, index) { return /*#__PURE__*/_jsx(VanCell, { "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__*/_jsx(_Fragment, { children: /*#__PURE__*/_jsx(View, { className: "van-dropdown-item__title", style: item.value === value_ ? 'color:' + parentInstance.activeColor : '', children: item.text }) }), children: item.value === value_ && /*#__PURE__*/_jsx(VanIcon, { name: "success", className: "van-dropdown-item__icon", color: parentInstance.activeColor }) }, "".concat(index, "VanCell")); }), others.children] }) }) }) : /*#__PURE__*/_jsx(_Fragment, {}); } var DropdownItem = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(Index)); export { DropdownItem }; export default DropdownItem;