@antdv/pro-utils
Version:
@antdv/pro-utils
71 lines (70 loc) • 2.17 kB
JavaScript
import { createVNode as _createVNode, mergeProps as _mergeProps } from "vue";
import { ConfigProvider, Popover } from "ant-design-vue";
import { useConfigContextInject } from "ant-design-vue/lib/config-provider/context";
import { computed, defineComponent, ref } from "vue";
import { classNames } from "../../classNames/index.mjs";
import { DropdownFooter } from "../DropdownFooter/index.mjs";
import { useStyle } from "./style.mjs";
const FilterDropdown = defineComponent((props, {
slots
}) => {
const {
getPrefixCls
} = useConfigContextInject();
const prefixCls = computed(() => getPrefixCls("pro-core-field-dropdown"));
const {
wrapSSR,
hashId
} = useStyle(prefixCls);
const htmlRef = ref(null);
return () => {
const {
label,
footer,
open,
onOpenChange,
disabled,
footerRender,
placement
} = props;
return wrapSSR(_createVNode(Popover, {
"placement": placement,
"trigger": ["click"],
"open": open || false,
"onOpenChange": onOpenChange,
"overlayInnerStyle": {
padding: 0
},
"content": _createVNode("div", {
"ref": htmlRef,
"class": classNames(`${prefixCls.value}-overlay`, {
[`${prefixCls.value}-overlay-${placement}`]: placement,
hashId: hashId.value
})
}, [_createVNode(ConfigProvider, {
"getPopupContainer": () => {
return htmlRef.value || document.body;
}
}, {
default: () => {
var _a;
return [_createVNode("div", {
"class": `${prefixCls.value}-content ${hashId.value}`.trim()
}, [(_a = slots.default) == null ? void 0 : _a.call(slots)])];
}
}), footer && _createVNode(DropdownFooter, _mergeProps({
"disabled": disabled,
"footerRender": footerRender
}, footer), null)])
}, {
default: () => [_createVNode("span", {
"class": `${prefixCls.value}-label ${hashId.value}`.trim()
}, [label])]
}));
};
}, {
props: ["label", "footer", "footerRender", "padding", "disabled", "onOpenChange", "open", "placement"]
});
export {
FilterDropdown
};