UNPKG

test-nut-ui

Version:

<p align="center"> <img alt="logo" src="https://img11.360buyimg.com/imagetools/jfs/t1/211965/25/7152/22022/61b16785E433119bb/aa41d7a9f7e823f3.png" width="150" style="margin-bottom: 10px;"> </p>

282 lines (281 loc) 10.5 kB
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; 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), true).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 React__default, { forwardRef, useState, useEffect, useImperativeHandle, useRef } from "react"; import classNames from "classnames"; import { CSSTransition } from "react-transition-group"; import { O as Overlay } from "./overlay2.js"; import { u as useClickAway } from "./use-click-away.js"; import { C as ComponentDefaults } from "./typings.js"; import Checkbox from "./Checkbox.js"; import Button from "./Button.js"; import "./index2.js"; var defaultProps = _objectSpread(_objectSpread({}, ComponentDefaults), {}, { columns: 1, direction: "down", limitNumber: 1, icon: null, activeIcon: null, indeterminateIcon: null, activeTitleClass: "", justifyContent: "center", inactiveTitleClass: "", onChange: function onChange(value) { return void 0; } }); var MenuItem = forwardRef(function(props, ref) { var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props), className = _defaultProps$props.className, style = _defaultProps$props.style, options = _defaultProps$props.options, value = _defaultProps$props.value, columns = _defaultProps$props.columns, title = _defaultProps$props.title, icon = _defaultProps$props.icon, activeIcon = _defaultProps$props.activeIcon, indeterminateIcon = _defaultProps$props.indeterminateIcon, direction = _defaultProps$props.direction, onChange2 = _defaultProps$props.onChange, activeTitleClass = _defaultProps$props.activeTitleClass, inactiveTitleClass = _defaultProps$props.inactiveTitleClass, closeOnClickAway = _defaultProps$props.closeOnClickAway, children = _defaultProps$props.children, activeColor = _defaultProps$props.activeColor, show = _defaultProps$props.show, parent = _defaultProps$props.parent, index = _defaultProps$props.index, limitNumber = _defaultProps$props.limitNumber, width = _defaultProps$props.width, flex = _defaultProps$props.flex; var _useState = useState(show), _useState2 = _slicedToArray(_useState, 2), _showPopup = _useState2[0], setShowPopup = _useState2[1]; var _useState3 = useState([]), _useState4 = _slicedToArray(_useState3, 2), _value = _useState4[0], setValue = _useState4[1]; var init = function init2() { var valueC = value; if (value === void 0) return; if (limitNumber === 1) { valueC = [value]; } parent.updateInnerValue(valueC, index); if (JSON.stringify(_value) !== JSON.stringify(valueC)) { setValue(valueC); } }; useEffect(function() { init(); }, [value]); useEffect(function() { setShowPopup(show); }, [show]); useImperativeHandle(ref, function() { return { toggle: parent.toggleMenuItem }; }); var getIconCName = function getIconCName2(optionVal, value2) { var _classNames; var valueC = value2; if (limitNumber === 1) { valueC = [value2]; } return classNames((_classNames = {}, _defineProperty(_classNames, activeTitleClass, valueC.includes(optionVal)), _defineProperty(_classNames, inactiveTitleClass, !valueC.includes(optionVal)), _classNames)); }; var handleClick = function handleClick2(item) { if (item.disabled) return; if (limitNumber === 1) { parent.updateInnerValue([item.value], index); parent.toggleMenuItem(index); setValue([item.value]); onChange2 && onChange2(item); } else { var valueC = JSON.parse(JSON.stringify(_value)); var existIndex = valueC.findIndex(function(v) { return item.value == v; }); if (existIndex !== -1) { valueC.splice(existIndex, 1); } else { valueC.push(item.value); } setValue(valueC); } }; var isShow = function isShow2() { if (_showPopup) return {}; return { display: "none" }; }; var getPosition = function getPosition2() { return direction === "down" ? { position: "absolute", height: "".concat(window.innerHeight, "px") } : { position: "absolute", bottom: "100%", top: "auto", height: "".concat(window.innerHeight, "px") }; }; var micRef = useRef(null); var targetSet = [micRef.current]; useClickAway( function() { parent.hideMenuItem(index); }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore targetSet, "click", false, _showPopup, closeOnClickAway ); var _useState5 = useState(false), _useState6 = _slicedToArray(_useState5, 2), indeterminate = _useState6[0], setIndeterminate = _useState6[1]; var _useState7 = useState(false), _useState8 = _slicedToArray(_useState7, 2), selectAll = _useState8[0], setSelectAll = _useState8[1]; useEffect(function() { if (limitNumber > 1) { setSelectAll(_value.length > 0); setIndeterminate(_value.length > 0 && _value.length !== options.filter(function(item) { return !item.disabled || _value.includes(item.value); }).length); } }, [_value]); var onSelectAll = function onSelectAll2() { if (selectAll && !indeterminate) { setValue(_value.filter(function(item) { return options.find(function(item2) { return item2.value == item; }).disabled; })); } else { var valueC = JSON.parse(JSON.stringify(_value)); options.forEach(function(item) { if (!valueC.includes(item.value) && !item.disabled) { valueC.push(item.value); } }); setValue(valueC); } }; var onConfirm = function onConfirm2() { parent.updateInnerValue(_value, index); parent.toggleMenuItem(index); onChange2 && onChange2(_value); }; var onReset = function onReset2() { init(); }; return React__default.createElement("div", { className: "nut-menu-item-container", ref: micRef, style: { position: "absolute", left: 0, right: 0 } }, React__default.createElement(Overlay, { className: "nut-menu__overlay", style: getPosition(), lockScroll: parent.lockScroll, visible: _showPopup, closeOnOverlayClick: parent.closeOnOverlayClick, onClick: function onClick() { parent.closeOnOverlayClick && parent.toggleMenuItem(index); } }), React__default.createElement("div", { className: classNames(className, { "nut-menu-item__wrap": direction === "down", "nut-menu-item__wrap-up": direction !== "down" }), style: _objectSpread(_objectSpread({}, style), isShow()) }, React__default.createElement(CSSTransition, { "in": _showPopup, timeout: 100, classNames: direction === "down" ? "menu-item" : "menu-item-up" }, React__default.createElement("div", { className: "nut-menu-item__content ".concat(direction === "down" ? "content-down" : "content-up") }, options === null || options === void 0 ? void 0 : options.map(function(item) { return React__default.createElement("div", { className: "nut-menu-item__option ".concat(classNames({ active: _value.includes(item.value), disabled: item.disabled })), key: item.text, style: { flexBasis: "".concat(100 / columns, "%") }, onClick: function onClick() { handleClick(item); } }, React__default.createElement("div", { className: getIconCName(item.value, value), style: { color: "".concat(_value.includes(item.value) && !item.disabled ? activeColor : "") } }, React__default.createElement("div", null, item.text), item.description ? React__default.createElement("div", { className: "nut-menu-item__option--description" }, item.description) : React__default.createElement(React__default.Fragment, null)), limitNumber === 1 ? _value.includes(item.value) ? ( // <i> // {icon || ( React__default.createElement(Checkbox, { activeIcon, icon, style: { "--nutui-brand-color": activeColor }, checked: true }) ) : null : React__default.createElement(Checkbox, { activeIcon, icon, style: { "--nutui-brand-color": activeColor }, disabled: item.disabled, checked: _value.includes(item.value) })); }), children, limitNumber > 1 ? React__default.createElement("div", { className: "nut-menu-item__content--multi" }, React__default.createElement("div", { onClick: onSelectAll, className: "nut-menu-item__content--multi-all" }, React__default.createElement(Checkbox, { indeterminateIcon, activeIcon, icon, style: { "--nutui-brand-color": activeColor, flexDirection: "column", justifyContent: "center" }, indeterminate, checked: selectAll }), React__default.createElement("div", { className: "nut-menu-item__content--multi-allt-text" }, "全选")), React__default.createElement("div", { style: { display: "flex" } }, React__default.createElement(Button, { onClick: onReset, style: { "--nutui-brand-color": activeColor, "--nutui-button-width": "140px", marginRight: "10px" } }, "重置"), React__default.createElement(Button, { onClick: onConfirm, style: { "--nutui-brand-color": activeColor, "--nutui-button-width": "140px" }, type: "primary" }, "确定(", _value.length, "项)"))) : React__default.createElement(React__default.Fragment, null))))); }); MenuItem.defaultProps = defaultProps; MenuItem.displayName = "NutMenuItem"; export { MenuItem as default };