in packages/graph-explorer/src/modules/SearchSidebar/EdgeSearchResult.tsx [24:71]
export function EdgeSearchResult({ edge }: { edge: Edge }) {
const [expanded, setExpanded] = useState(false);
const displayEdge = useDisplayEdgeFromEdge(edge);
const source = useDisplayVertexFromFragment(
displayEdge.source.id,
displayEdge.source.types
);
const target = useDisplayVertexFromFragment(
displayEdge.target.id,
displayEdge.target.types
);
return (
<div
className={cn(
"bg-background-default group w-full overflow-hidden transition-all"
)}
data-expanded={expanded}
>
<div
onClick={() => setExpanded(e => !e)}
className="group-data-[expanded=true]:border-background-secondary group flex w-full flex-row items-center gap-2 p-3 text-left ring-0 hover:cursor-pointer"
>
<div>
<ChevronRightIcon className="text-primary-dark/50 size-5 transition-transform duration-200 ease-in-out group-data-[expanded=true]:rotate-90" />
</div>
<EdgeRow
edge={displayEdge}
source={source}
target={target}
className="grow"
/>
<AddOrRemoveButton edge={edge} />
</div>
<div className="border-background-secondary px-8 transition-all group-data-[expanded=false]:h-0 group-data-[expanded=true]:h-auto group-data-[expanded=true]:border-t">
<ul>
{displayEdge.attributes.map(attr => (
<EntityAttribute
key={attr.name}
attribute={attr}
className="border-b border-gray-200 px-3 py-2 last:border-0"
/>
))}
</ul>
</div>
</div>
);
}