in packages/graph-explorer/src/modules/SearchSidebar/NodeSearchResult.tsx [23:58]
export function NodeSearchResult({ node }: { node: Vertex }) {
const [expanded, setExpanded] = useState(false);
const { data: detailsResponse } = useVertexDetailsQuery(node.id);
const preferredNode = detailsResponse?.vertex ?? node;
const displayNode = useDisplayVertexFromVertex(preferredNode);
return (
<div
className="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>
<VertexRow vertex={displayNode} className="grow" />
<AddOrRemoveButton vertex={preferredNode} />
</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>
{displayNode.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>
);
}