UNPKG

@xdp/button

Version:

button el-button vue3

197 lines (194 loc) 6.69 kB
import { defineComponent, ref, computed, createVNode, mergeProps, isVNode } from 'vue'; import { ElPopconfirm, ElPopover, ElButton } from 'element-plus'; import CipButtonText from '../cip-button-text'; import CipButton from '../cip-button'; import { useButtonPop } from './use-button-pop'; import PopConfirmContent from './pop-confirm-content'; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __objRest = (source, exclude) => { var target = {}; for (var prop in source) if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) target[prop] = source[prop]; if (source != null && __getOwnPropSymbols) for (var prop of __getOwnPropSymbols(source)) { if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) target[prop] = source[prop]; } return target; }; function _isSlot(s) { return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s); } var index = defineComponent({ name: "CipButtonPop", props: { needPop: { type: Boolean, default: true }, popTitle: String, popMessage: String, popPlacement: String, buttonComp: { type: String, default: "text" }, popProps: { type: Object, default: () => ({}) }, popLegacyCancel: { type: Boolean, default: true } }, inheritAttrs: false, setup(props, { attrs, slots }) { const popoverRef = ref(); const buttonPop = computed(() => useButtonPop(props, attrs, slots)); const ButtonComponent = computed(() => props.buttonComp === "button" ? CipButton : CipButtonText); const renderButton = (onClickHandler) => { const Comp = ButtonComponent.value; const { buttonProps } = buttonPop.value; return createVNode(Comp, mergeProps(buttonProps, { "onClick": onClickHandler }), { default: () => { var _a, _b, _c, _d, _e; return [(_e = (_c = (_a = slots.reference) == null ? void 0 : _a.call(slots)) != null ? _c : (_b = slots.button) == null ? void 0 : _b.call(slots)) != null ? _e : (_d = slots.default) == null ? void 0 : _d.call(slots)]; } }); }; const renderPopContent = (scope) => { var _a, _b, _c; const customContent = (_c = (_a = slots.pop) == null ? void 0 : _a.call(slots, scope)) != null ? _c : buttonPop.value.hasReferenceSlot ? (_b = slots.default) == null ? void 0 : _b.call(slots, scope) : void 0; if (customContent) return customContent; const { icon, iconColor, hideIcon } = buttonPop.value.popProps; return createVNode(PopConfirmContent, { "title": buttonPop.value.resolvedTitle, "message": buttonPop.value.resolvedMessage, "icon": icon, "iconColor": iconColor, "hideIcon": hideIcon }, { title: slots["pop-title"], message: slots["pop-message"] }); }; const hidePopover = () => { var _a, _b; (_b = (_a = popoverRef.value) == null ? void 0 : _a.hide) == null ? void 0 : _b.call(_a); }; const renderRichPopconfirm = (onClick, onCancelHandler) => { var _a, _b, _c, _d; const { popProps, popoverProps, popLegacyCancel } = buttonPop.value; const confirmButtonText = (_a = popProps.confirmButtonText) != null ? _a : "\u786E\u5B9A"; const cancelButtonText = (_b = popProps.cancelButtonText) != null ? _b : "\u53D6\u6D88"; const confirmButtonType = (_c = popProps.confirmButtonType) != null ? _c : "primary"; const cancelButtonType = (_d = popProps.cancelButtonType) != null ? _d : "default"; const _e = popoverProps, { popperClass, trigger, teleported } = _e, restPopoverProps = __objRest(_e, [ "popperClass", "trigger", "teleported" ]); const handleConfirm = (e) => { onClick == null ? void 0 : onClick(e, true); hidePopover(); }; const handleCancel = (e) => { onCancelHandler == null ? void 0 : onCancelHandler(e); if (!popLegacyCancel) { onClick == null ? void 0 : onClick(e, false); } hidePopover(); }; const scope = { title: buttonPop.value.resolvedTitle, message: buttonPop.value.resolvedMessage, confirm: handleConfirm, cancel: handleCancel }; return createVNode(ElPopover, mergeProps({ "ref": popoverRef }, restPopoverProps, { "trigger": trigger != null ? trigger : "click", "teleported": teleported != null ? teleported : true, "popper-class": ["cip-button-pop__popper", popperClass].filter(Boolean).join(" ") }), { reference: () => renderButton(() => { }), default: () => createVNode("div", { "class": "cip-button-pop__panel" }, [renderPopContent(scope), createVNode("div", { "class": "cip-button-pop__footer" }, [createVNode(ElButton, { "size": "small", "type": cancelButtonType === "text" ? "" : cancelButtonType, "text": cancelButtonType === "text", "onClick": handleCancel }, _isSlot(cancelButtonText) ? cancelButtonText : { default: () => [cancelButtonText] }), createVNode(ElButton, { "size": "small", "type": confirmButtonType === "text" ? "primary" : confirmButtonType, "text": confirmButtonType === "text", "onClick": handleConfirm }, _isSlot(confirmButtonText) ? confirmButtonText : { default: () => [confirmButtonText] })])]) }); }; return () => { const { needPop, buttonProps, popProps, hasRichPop, onClick, onCancel, popLegacyCancel } = buttonPop.value; if (!needPop || buttonProps.disabled) { return renderButton(onClick); } if (hasRichPop) { return renderRichPopconfirm(onClick, onCancel); } return createVNode(ElPopconfirm, mergeProps(popProps, { "title": buttonPop.value.resolvedTitle, "onConfirm": (e) => onClick == null ? void 0 : onClick(e, true), "onCancel": (e) => { onCancel == null ? void 0 : onCancel(e); if (!popLegacyCancel) { onClick == null ? void 0 : onClick(e, false); } } }), { reference: () => renderButton(() => { }) }); }; } }); export { index as default };