import { useTheme } from '@mui/material'; import type { HierarchyPointLink } from '@visx/hierarchy/lib/types'; import { LinkHorizontal, LinkHorizontalLine, LinkHorizontalStep } from '@visx/shape'; import { always, cond, equals, T } from 'ramda'; import type { BaseProp, Node, TreeProps } from './models'; interface Props extends Pick, 'treeLink'> { links: Array>>; } const getLinkComponent = cond([ [equals('line'), always(LinkHorizontalLine)], [equals('step'), always(LinkHorizontalStep)], [T, always(LinkHorizontal)] ]); const Links = ({ links, treeLink }: Props): Array => { const theme = useTheme(); return links.map((link, idx) => { const ancestorIds = link.target .ancestors() .map((ancestor) => ancestor.data.data.id); const descendantIds = link.target .descendants() .map((ancestor) => ancestor.data.data.id); // @ts-expect-error - suppressing pre-existing type mismatch const LinkComponent = getLinkComponent(treeLink?.type); const key = `${link.source.data.data.id}-${link.source.data.data.name}-${ancestorIds}_${link.target.data.data.id}-${link.target.data.data.name}-${descendantIds}-${idx}`; return ( ); }); }; export default Links;