import type { GrpcConnection, HttpResponse } from '@yaakapp-internal/models'; import classNames from 'classnames'; import React, { Fragment, memo } from 'react'; import { fallbackRequestName } from '../lib/fallbackRequestName'; import { VStack } from './core/Stacks'; import { DropMarker } from './DropMarker'; import type { SidebarTreeNode } from './Sidebar'; import { SidebarItem } from './SidebarItem'; export interface SidebarItemsProps { tree: SidebarTreeNode; draggingId: string | null; selectedTree: SidebarTreeNode | null; treeParentMap: Record; hoveredTree: SidebarTreeNode | null; hoveredIndex: number | null; handleMove: (id: string, side: 'above' | 'below') => void; handleEnd: (id: string) => void; handleDragStart: (id: string) => void; onSelect: (requestId: string) => void; httpResponses: HttpResponse[]; grpcConnections: GrpcConnection[]; } export const SidebarItems = memo(function SidebarItems({ tree, selectedTree, draggingId, onSelect, treeParentMap, hoveredTree, hoveredIndex, handleEnd, handleMove, handleDragStart, httpResponses, grpcConnections, }: SidebarItemsProps) { return ( 0 && 'border-l border-border-subtle', tree.depth === 0 && 'ml-0', tree.depth >= 1 && 'ml-[1.2rem]', )} > {tree.children.map((child, i) => { return ( {hoveredIndex === i && hoveredTree?.item.id === tree.item.id && } r.requestId === child.item.id) ?? null} latestGrpcConnection={ grpcConnections.find((c) => c.requestId === child.item.id) ?? null } onMove={handleMove} onEnd={handleEnd} onSelect={onSelect} onDragStart={handleDragStart} child={child} > {child.item.model === 'folder' && draggingId !== child.item.id && ( )} ); })} {hoveredIndex === tree.children.length && hoveredTree?.item.id === tree.item.id && ( )} ); })