'use client'; import { Box, Button, Checkbox, CloseButton, Dialog, Flex, Menu, Portal, SimpleGrid, Stat, Text, } from '@chakra-ui/react'; import { useMemo, useState } from 'react'; import type { StrategyChartSnapshot } from '@tradejs/types'; import { OrdersDrawerPanel } from '#components/Shared/OrdersDrawer'; import { deleteStrategyCard } from '#actions/strategies'; import { toaster } from '#ui'; import { StrategySnapshotChart } from './StrategySnapshotChart'; import { StrategySnapshotCardDetailsDrawer } from './StrategySnapshotCardDetailsDrawer'; import { buildStrategySnapshotCardViewModel, getMetricColor, SNAPSHOT_ORDER_ROW_HEIGHT, } from './StrategySnapshotCard.presenter'; export const StrategySnapshotCard = ({ snapshot, emptyText, mode, onDeleted, selected = false, onToggleSelection, }: { snapshot: StrategyChartSnapshot; emptyText: string; mode: 'replay' | 'ai'; onDeleted?: (cardId: string) => void; selected?: boolean; onToggleSelection?: (cardId: string, checked: boolean) => void; }) => { const [detailsOpen, setDetailsOpen] = useState(false); const [ordersOpen, setOrdersOpen] = useState(false); const [deleteOpen, setDeleteOpen] = useState(false); const [isDeleting, setIsDeleting] = useState(false); const viewModel = useMemo( () => buildStrategySnapshotCardViewModel(snapshot, mode), [mode, snapshot], ); const { snapshotOrders, sourceLabel, sourceValue, generatedAtLabel, tagsLabel, displaySubtitle, metrics, hasOrdersDrawer, hasStatDrawer, } = viewModel; const handleDelete = async () => { if (isDeleting) { return; } setIsDeleting(true); try { const deleted = await deleteStrategyCard(mode, snapshot.cardId); if (!deleted) { toaster.error({ title: 'Delete failed', description: 'Strategy card was not deleted.', }); return; } onDeleted?.(snapshot.cardId); setDeleteOpen(false); toaster.success({ title: 'Strategy card deleted', description: snapshot.title, }); } catch { toaster.error({ title: 'Delete failed', description: 'Unexpected error while deleting strategy card.', }); } finally { setIsDeleting(false); } }; return ( {onToggleSelection ? ( onToggleSelection(snapshot.cardId, details.checked === true) } > ) : null} {snapshot.title} {sourceLabel} {sourceValue} {generatedAtLabel ? ( generated: {generatedAtLabel} ) : null} {tagsLabel ? ( {tagsLabel} ) : null} {displaySubtitle ? ( {displaySubtitle} ) : null} {hasOrdersDrawer ? ( setOrdersOpen(true)} > Orders ) : null} {hasStatDrawer ? ( setDetailsOpen(true)} > Stat ) : null} {hasStatDrawer ? : null} setDeleteOpen(true)} > Delete setDeleteOpen(e.open)} > Delete card Delete strategy card {snapshot.title}? This action cannot be undone. {metrics.map((metric) => ( {metric.label} {metric.value} ))} ); };