@flatbiz/antd
Version:
227 lines (222 loc) • 8.51 kB
JavaScript
/*! @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