linkmore-design
Version:
🌈 🚀lm组件库。🚀
338 lines (327 loc) • 10.5 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classnames = _interopRequireDefault(require("classnames"));
var _lodash = require("lodash");
var _react = _interopRequireWildcard(require("react"));
var _button = _interopRequireDefault(require("../../../button"));
var _dropdown = _interopRequireDefault(require("../../../dropdown"));
var _iconFont = _interopRequireDefault(require("../../../icon-font"));
var _menu = _interopRequireDefault(require("../../../menu"));
var _modal = _interopRequireDefault(require("../../../modal"));
var _PopDropDown = _interopRequireDefault(require("../../controls/PopDropDown"));
var _widgets = require("../../widgets");
var _SaveModal = _interopRequireDefault(require("./SaveModal"));
// 自定义筛选下拉框每一项的Render
const ItemBody = ({
item,
instance,
menuClick
}) => {
const {
locale
} = instance;
const menuItems = [{
label: locale.rename,
key: 'rename'
}, {
label: item.default ? locale.cancelDefault : locale.customDefault,
key: 'default'
}, {
label: locale.delete,
key: 'delete'
}];
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
className: "filter_item_content"
}, item.label, item.default && `「${locale.default}」`), /*#__PURE__*/_react.default.createElement("div", {
className: "filter_item_operate",
onClick: e => e.stopPropagation()
}, item.value && /*#__PURE__*/_react.default.createElement("div", {
className: "icon_hover"
}, /*#__PURE__*/_react.default.createElement(_dropdown.default, {
placement: "bottomLeft",
trigger: ['click'],
overlay: /*#__PURE__*/_react.default.createElement(_menu.default, {
items: menuItems,
onClick: menuClick
})
}, /*#__PURE__*/_react.default.createElement(_iconFont.default, {
type: "icon-a-tongyonga2gengduo"
})))));
};
// 自定义筛选下拉框Render
const OverlayRender = /*#__PURE__*/_react.default.memo(props => {
const {
instance,
setVisible
} = props;
const {
state,
dispatch,
customOptions,
onQuery,
onSave,
locale
} = instance;
const {
customSelectValue
} = state;
const handleChange = (e, item) => {
onQuery({
type: 'custom',
customFilter: item
});
setVisible(false);
};
const menuClick = ({
key
}, item) => {
if (key === 'delete') {
_modal.default.confirm({
title: locale.deleteScheme,
content: /*#__PURE__*/_react.default.createElement("span", {
style: {
color: '#7E84A3',
fontSize: 12
}
}, locale.deleteSchemeTip),
okText: locale.delete,
onOk: async close => {
const resultList = customOptions.filter(v => v?.value !== item?.value);
await onSave(item, resultList, 'delete');
close();
}
});
}
if (key === 'default') {
const resultList = customOptions.map(v => ({
...v,
default: v?.value === item?.value ? !v.default : false
}));
const checked = resultList.find(v => v?.value === item?.value);
onSave({
...item,
default: checked ? checked?.default : true
}, resultList, 'default');
setVisible(false);
}
if (key === 'rename') {
setVisible(false);
dispatch({
type: 'changeCustomSaveModal',
customSaveModal: {
...item,
visible: true
}
});
}
};
const ItemRender = ({
item,
...resetProps
}) => {
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, resetProps, {
className: (0, _classnames.default)('filter_item', {
checked: item.value === customSelectValue
}),
onClick: e => handleChange(e, item)
}), /*#__PURE__*/_react.default.createElement(ItemBody, (0, _extends2.default)({
item: item
}, props, {
menuClick: menuProps => menuClick(menuProps, item)
})));
};
return /*#__PURE__*/_react.default.createElement(_widgets.SelectRender, {
value: customSelectValue,
options: customOptions,
itemRender: ItemRender
});
});
// 覆盖当前筛选方案提示
const SaveConfirm = ({
instance,
open,
onCancel
}) => {
const {
state,
dispatch,
onSave,
getFilterFormat,
customOptions,
locale
} = instance;
const handleClose = () => onCancel(false);
const handleSave = () => {
onCancel(false);
const item = {
...state.customFilter,
data: getFilterFormat()?.data || []
};
const resultList = customOptions.map(v => v?.value === item?.value ? item : v);
dispatch({
type: 'changeCustomFilter',
customFilter: item
});
onSave(item, resultList, 'cover');
};
const handleSaveNew = () => {
dispatch({
type: 'changeCustomSaveModal',
customSaveModal: {
value: Date.now(),
label: '',
visible: true
}
});
onCancel(false);
};
const modalConfig = {
open,
closable: false,
size: 'small',
wrapClassName: 'custom_save_confirm',
footer: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
className: "footer_link_text",
onClick: handleSaveNew
}, locale.saveScheme), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_button.default, {
onClick: handleClose
}, locale.cancel), /*#__PURE__*/_react.default.createElement(_button.default, {
type: "primary",
onClick: handleSave
}, locale.saveText)))
};
return /*#__PURE__*/_react.default.createElement(_modal.default, modalConfig, /*#__PURE__*/_react.default.createElement("div", {
className: "custom_save_modal_title"
}, locale.saveModalTitle), /*#__PURE__*/_react.default.createElement("div", {
className: "custom_save_modal_content"
}, locale.saveModalContent));
};
// 自定义筛选保存按钮
const CustomAddon = ({
instance
}) => {
const {
state: {
customFilter = {},
customSelectValue
},
dispatch,
getHasFilter,
getFilterFormat
} = instance;
const [confirmOpen, setConfirmOpen] = (0, _react.useState)(false);
// 自定义筛选是否触发变动
const isChange = !!(0, _react.useMemo)(() => {
const currentFilterData = getFilterFormat()?.data || [];
return customFilter?.value && !(0, _lodash.isEqual)(customFilter.data, currentFilterData);
}, [customFilter.value, getFilterFormat()]);
// 打开提示Confirm
const handleClick = () => {
if (!getHasFilter()) return;
if (!customSelectValue) {
dispatch({
type: 'changeCustomSaveModal',
customSaveModal: {
label: '',
value: Date.now(),
visible: true
}
});
return;
}
setConfirmOpen(true);
// if (isChange) {
// setConfirmOpen(true)
// } else {
// dispatch({ type: 'changeCustomSaveModal', customSaveModal: { label: '', value: Date.now(), visible: true } })
// }
};
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_button.default, {
icon: /*#__PURE__*/_react.default.createElement(_iconFont.default, {
type: "icon-chucun"
}),
className: (0, _classnames.default)('lm_filter_custom_addon', isChange && 'addon_highlight'),
onClick: handleClick
}), /*#__PURE__*/_react.default.createElement(SaveConfirm, {
instance: instance,
open: confirmOpen,
onCancel: () => setConfirmOpen(false)
}));
};
// 自定义筛选界面展示内容
const CustomSelect = ({
instance
}) => {
const {
state,
size,
customOptions,
enableUnLimitedPlaceholder,
locale
} = instance;
const {
customSelectValue
} = state;
const [visible, setVisible] = (0, _react.useState)(false);
// 下拉数据
const filterOptions = (0, _react.useMemo)(() => {
const hasPlaceholderObj = enableUnLimitedPlaceholder && !customOptions.some(v => v.field === 'all');
return hasPlaceholderObj ? [{
field: 'all',
label: locale.unlimited,
value: '',
data: []
}, ...customOptions] : customOptions;
}, [enableUnLimitedPlaceholder, customOptions]);
// 默认展示
const defaultValue = _react.default.useMemo(() => {
const fatalObj = enableUnLimitedPlaceholder ? {
field: 'all',
label: locale.unlimited,
value: '',
data: []
} : {};
return filterOptions.find(v => v.value === customSelectValue) || fatalObj;
}, [filterOptions, customSelectValue]);
return /*#__PURE__*/_react.default.createElement("div", {
className: "lm_filter_custom_select_wrapper"
}, /*#__PURE__*/_react.default.createElement(_PopDropDown.default, {
overlayClassName: "filter_dropdown_container_custom",
dropdownRender: () => /*#__PURE__*/_react.default.createElement(OverlayRender, {
instance: {
...instance,
customOptions: filterOptions
},
setVisible: setVisible
}),
open: visible,
onOpenChange: v => setVisible(v)
}, /*#__PURE__*/_react.default.createElement("div", {
className: (0, _classnames.default)('lm_filter_custom_select', {
expand: visible,
small: size === 'small'
})
}, /*#__PURE__*/_react.default.createElement("div", {
className: "lm_filter_custom_select_label"
}, /*#__PURE__*/_react.default.createElement("span", {
className: (0, _classnames.default)({
placeholder: !defaultValue.value
})
}, defaultValue.label)), /*#__PURE__*/_react.default.createElement("div", {
className: "lm_filter_custom_select_icon addon_after"
}, /*#__PURE__*/_react.default.createElement(_iconFont.default, {
type: "icon-a-jiantoua2xialaxia"
})))), /*#__PURE__*/_react.default.createElement(CustomAddon, {
instance: instance
}), /*#__PURE__*/_react.default.createElement(_SaveModal.default, {
instance: instance
}));
};
var _default = CustomSelect;
exports.default = _default;