@xdp/button
Version:
button el-button vue3
197 lines (194 loc) • 6.69 kB
JavaScript
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 };