import { h, type VNode } from 'vue' import IvyLink from '@/views/_components/link/IvyLink.vue' import type { CellRenderProps } from '@/views/_components/table/IvyCellRendererProps' export interface LinkCellOptions { text: (row: Row) => string | number href?: string | ((row: Row) => string) onClick?: (row: Row, e: Event) => void | Promise class?: string | ((row: Row) => string | undefined) } export function linkCellRenderer>( options: LinkCellOptions, ) { return (props: CellRenderProps): VNode | null => { const row = props.rowData as unknown as Row if (!row) return null const href = typeof options.href === 'function' ? options.href(row) : (options.href ?? 'javascript:void(0)') const className = typeof options.class === 'function' ? options.class(row) : options.class return h( IvyLink, { size: 's', href, class: className, onClick: options.onClick ? (e: Event) => { if (href === '#' || href === 'javascript:void(0)') e.preventDefault() return options.onClick!(row, e) } : undefined, }, () => [String(options.text(row) ?? '')], ) } }