import type { ExtractPropTypes, PropType } from 'vue'; import { defineComponent } from 'vue'; import PropTypes from '../_util/vue-types'; import { getPropsSlot } from '../_util/props-util'; import DropDown from '../dropdown/dropdown'; import DownOutlined from '@ant-design/icons-vue/DownOutlined'; import useConfigInject from '../_util/hooks/useConfigInject'; import type { MouseEventHandler } from '../_util/EventInterface'; export const breadcrumbItemProps = () => ({ prefixCls: String, href: String, separator: PropTypes.any, overlay: PropTypes.any, onClick: Function as PropType, }); export type BreadcrumbItemProps = Partial>>; export default defineComponent({ name: 'ABreadcrumbItem', inheritAttrs: false, __ANT_BREADCRUMB_ITEM: true, props: breadcrumbItemProps(), // emits: ['click'], slots: ['separator', 'overlay'], setup(props, { slots, attrs }) { const { prefixCls } = useConfigInject('breadcrumb', props); /** * if overlay is have * Wrap a DropDown */ const renderBreadcrumbNode = (breadcrumbItem: JSX.Element, prefixCls: string) => { const overlay = getPropsSlot(slots, props, 'overlay'); if (overlay) { return ( {breadcrumbItem} ); } return breadcrumbItem; }; return () => { const separator = getPropsSlot(slots, props, 'separator') ?? '/'; const children = getPropsSlot(slots, props); const { class: cls, style, ...restAttrs } = attrs; let link: JSX.Element; if (props.href !== undefined) { link = ( {children} ); } else { link = ( {children} ); } // wrap to dropDown link = renderBreadcrumbNode(link, prefixCls.value); if (children) { return ( {link} {separator && {separator}} ); } return null; }; }, });