import type { FunctionalComponent, defineComponent } from 'vue'; import type { ComponentType } from '../../types/componentType'; import { componentMap } from '@/components/Table/src/componentMap'; import { h } from 'vue'; import { Popover } from 'ant-design-vue'; export interface ComponentProps { component: ComponentType; rule: boolean; popoverVisible: boolean; ruleMessage: string; } export const CellComponent: FunctionalComponent = ( { component = 'Input', rule = true, ruleMessage, popoverVisible }: ComponentProps, { attrs }, ) => { const Comp = componentMap.get(component) as typeof defineComponent; const DefaultComp = h(Comp, attrs); if (!rule) { return DefaultComp; } return h( Popover, { overlayClassName: 'edit-cell-rule-popover', visible: !!popoverVisible, }, { default: () => DefaultComp, content: () => ruleMessage, }, ); };