'use client'; import { useMemo } from 'react'; import { Badge, Box, Button, CloseButton, Drawer, Flex, Portal, Text, } from '@chakra-ui/react'; import type { RuntimeStrategyRevisionChange, RuntimeStrategyView, } from '@tradejs/types'; import { formatDateTime } from '#components/Shared/OrdersDrawer'; interface RuntimeStrategyRevisionItem { strategyRevision: string; changedAt: number | null; current: boolean; } export const buildRuntimeStrategyRevisionItems = ({ strategyRevision, revisionChanges, }: { strategyRevision: string; revisionChanges: RuntimeStrategyRevisionChange[]; }): RuntimeStrategyRevisionItem[] => { const changedAtByRevision = new Map(); for (const change of revisionChanges) { const previousTimestamp = changedAtByRevision.get(change.strategyRevision); if ( Number.isFinite(change.timestamp) && (previousTimestamp == null || change.timestamp > previousTimestamp) ) { changedAtByRevision.set(change.strategyRevision, change.timestamp); } } const revisions = new Set([strategyRevision, ...changedAtByRevision.keys()]); return [...revisions] .map((revision) => ({ strategyRevision: revision, changedAt: changedAtByRevision.get(revision) ?? null, current: revision === strategyRevision, })) .sort((left, right) => { if (left.current !== right.current) return left.current ? -1 : 1; return (right.changedAt ?? 0) - (left.changedAt ?? 0); }); }; export const RuntimeStrategyRevisionsDrawer = ({ open, strategy, onOpenChange, }: { open: boolean; strategy: RuntimeStrategyView; onOpenChange: (open: boolean) => void; }) => { const revisions = useMemo( () => buildRuntimeStrategyRevisionItems({ strategyRevision: strategy.strategyRevision, revisionChanges: strategy.revisionChanges, }), [strategy.revisionChanges, strategy.strategyRevision], ); return ( onOpenChange(event.open)} > {strategy.strategyName}, {strategy.deploymentLabel} revisions Current revision and all revision activations observed by the runtime in the selected window. {revisions.map((revision) => ( Strategy revision {revision.current ? ( Current ) : null} {revision.strategyRevision} {revision.changedAt == null ? 'No revision activation observed in this window' : `Activated at ${formatDateTime(revision.changedAt)}`} ))} ); };