UNPKG

@flatbiz/antd

Version:
227 lines (222 loc) 8.51 kB
/*! @flatjs/forge MIT @flatbiz/antd */ import _MoreOutlined from '@ant-design/icons/es/icons/MoreOutlined.js'; import { a as _slicedToArray, b as _objectSpread2, _ as _objectWithoutProperties } from './_rollupPluginBabelHelpers-BYm17lo8.js'; import { isUndefined } from '@dimjs/lang/is-undefined'; import { classNames } from '@dimjs/utils/class-names/class-names'; import { isPlainObject } from '@dimjs/lang/is-plain-object'; import { isString } from '@dimjs/lang/is-string'; import { isPromise } from '@dimjs/lang/is-promise'; import { hooks } from '@wove/react/hooks'; import { isValidElement, Fragment, useState, useMemo, createElement } from 'react'; import { Popover, Tooltip, Space, Popconfirm, Button, Divider } from 'antd'; import { B as ButtonWrapper } from './button-wrapper-l9FUsrWl.js'; import { D as DropdownMenuWrapper } from './dropdown-menu-wrapper-ChbwSdIf.js'; import { f as fbaUtils } from './fba-utils-Dfbczn1S.js'; import { jsx, jsxs } from 'react/jsx-runtime'; var _excluded = ["text", "onClick", "needConfirm", "confirmMessage", "popconfirmProps", "hoverTips", "color", "tipsType", "type", "isFold"]; var ButtonOperateItemContent = function ButtonOperateItemContent(props) { if (props.hoverTips) { if (props.tipsType === 'popover') { return /*#__PURE__*/jsx(Popover, { content: props.hoverTips, zIndex: 1000, children: /*#__PURE__*/jsx("span", { children: props.content }) }); } return /*#__PURE__*/jsx(Tooltip, { title: props.hoverTips, zIndex: 1000, children: /*#__PURE__*/jsx("span", { children: props.content }) }); } if (/*#__PURE__*/isValidElement(props.content)) { return /*#__PURE__*/jsx(Fragment, { children: props.content }); } // ButtonOperate item 内部 span 包文案会有动态效果 return /*#__PURE__*/jsx("span", { children: props.content }); }; /** * 按钮组合处理组件 * ``` * 1. operateList中存在ReactElement类型的元素,可通过配置 v-permission 属性来设置权限,例如 v-permission="add" * 2. operateList中存在ReactElement类型的元素,如果有hidden、v-hidden属性,值为true会隐藏 * * * flatbiz/antd@4.2.49 * 1. 替换 Fold 中 needConfirm交互,有 Popconfirm 改为 dialogConfirm组件实现二次弹框确认功能 * 2. 修改原因:升级 antd 5.5.1 后,Dropdown 中 Popconfirm弹框组合使用存在问题 * ``` */ var ButtonOperate = function ButtonOperate(props) { var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), loading = _useState2[0], setLoading = _useState2[1]; var onConfirm = hooks.useCallbackRef(function (item, event) { var _item$onClick; var result = (_item$onClick = item.onClick) === null || _item$onClick === void 0 ? void 0 : _item$onClick.call(item, event); if (result && isPromise(result)) { setLoading(true); return result.finally(function () { setLoading(false); }); } return; }); var operateList = props.operateList.filter(function (item) { if (!item) return false; if (/*#__PURE__*/isValidElement(item)) { var _item$props, _item$props2, _item$props3; if (((_item$props = item.props) === null || _item$props === void 0 ? void 0 : _item$props['hidden']) === true) return false; if (((_item$props2 = item.props) === null || _item$props2 === void 0 ? void 0 : _item$props2['v-hidden']) === true) return false; var permission = (_item$props3 = item.props) === null || _item$props3 === void 0 ? void 0 : _item$props3['v-permission']; if (isString(permission)) { return fbaUtils.hasPermission(permission); } return true; } if (isPlainObject(item)) { if (!fbaUtils.hasPermission(item['permission'])) { return false; } return !item['hidden']; } return false; }); var viewList = useMemo(function () { return operateList.filter(function (item) { if (/*#__PURE__*/isValidElement(item)) { return true; } return !item['isFold']; }); }, [operateList]); var foldList = useMemo(function () { var filterList = operateList.filter(function (item) { if (/*#__PURE__*/isValidElement(item)) { return false; } return item['isFold']; }); var result = []; filterList.forEach(function (item) { var target = _objectSpread2({}, item); // 多余字段渲染到react dom上,出现警告 delete target.isFold; result.push(target); }); return result; }, [operateList]); var gap = props.gap === undefined ? 10 : props.gap; var size = !props.split ? gap : 0; return /*#__PURE__*/jsx("div", { className: classNames('table-operate', props.className), style: props.style, children: /*#__PURE__*/jsxs(Space, _objectSpread2(_objectSpread2({ split: props.split ? /*#__PURE__*/jsx(Divider, { type: "vertical" }) : null, size: size, wrap: isUndefined(props.wrap) ? true : props.wrap }, props.spaceProps), {}, { children: [viewList.map(function (item, index) { if (item && /*#__PURE__*/isValidElement(item)) { return /*#__PURE__*/jsx(ButtonOperateItemContent, { content: item, hoverTips: item.hoverTips, tipsType: item.tipsType }, index); } var text = item.text, _onClick = item.onClick, needConfirm = item.needConfirm, confirmMessage = item.confirmMessage, popconfirmProps = item.popconfirmProps, hoverTips = item.hoverTips, color = item.color, tipsType = item.tipsType, type = item.type; item.isFold; var otherProps = _objectWithoutProperties(item, _excluded); var typeFt = type || 'link'; if (needConfirm && !otherProps.disabled) { var danger = color ? false : true; return /*#__PURE__*/createElement(Popconfirm, _objectSpread2(_objectSpread2({ okText: "\u786E\u5B9A", cancelText: "\u53D6\u6D88", trigger: ['click'], placement: "topRight", arrow: true, destroyTooltipOnHide: true }, popconfirmProps), {}, { title: confirmMessage, onConfirm: onConfirm.bind(null, item), key: index, okButtonProps: { loading: loading }, onOpenChange: function onOpenChange(_open) { if (!_open) { setLoading(false); } }, onCancel: function onCancel(event) { event === null || event === void 0 || event.stopPropagation(); } }), /*#__PURE__*/jsx(ButtonWrapper, _objectSpread2(_objectSpread2({ danger: danger }, otherProps), {}, { onClick: function onClick(event) { event.stopPropagation(); }, type: typeFt, children: /*#__PURE__*/jsx(ButtonOperateItemContent, { content: text, hoverTips: hoverTips, tipsType: tipsType }, index) }))); } return /*#__PURE__*/createElement(ButtonWrapper, _objectSpread2(_objectSpread2({ loadingPosition: "center" }, otherProps), {}, { type: typeFt, onClick: function onClick(event) { event.stopPropagation(); return _onClick === null || _onClick === void 0 ? void 0 : _onClick(event); }, key: index }), /*#__PURE__*/jsx(ButtonOperateItemContent, { content: text, hoverTips: hoverTips, tipsType: item.tipsType })); }), foldList.length > 0 ? /*#__PURE__*/jsx(DropdownMenuWrapper, _objectSpread2(_objectSpread2({ menuList: foldList, placement: "bottom" }, props.dropdownMenuProps), {}, { children: /*#__PURE__*/jsx(Button, { type: "link", className: "fold-more-button", onClick: function onClick(event) { event.stopPropagation(); }, children: props.foldIcon ? props.foldIcon : /*#__PURE__*/jsx(_MoreOutlined, {}) }) })) : null] })) }); }; ButtonOperate.defaultProps = { split: true }; export { ButtonOperateItemContent as B, ButtonOperate as a }; //# sourceMappingURL=button-operate-C6dir05R.js.map