37 lines
917 B
Plaintext
37 lines
917 B
Plaintext
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,
|
|
},
|
|
);
|
|
};
|