import { getRunningWorkflowDefinition, getRunningWorkflowState } from "../data/running-workflows"; import type { ScheduledConditionRecord, WorkbenchRuntimeDataSource } from "../types"; export type ConditionStepTickerItem = { id: string; title: string; detail: string; }; export type ConditionStepTickerView = { title: string; progressValue?: number; currentStep: ConditionStepTickerItem | null; }; export type TickerStackCard = { condition: ScheduledConditionRecord; view: ConditionStepTickerView; stackIndex: number; }; const TICKER_STACK_DEPTH = 3; export function selectTickerCondition( runningConditions: ScheduledConditionRecord[], rotationIndex: number ): ScheduledConditionRecord | null { if (runningConditions.length === 0) { return null; } return runningConditions[rotationIndex % runningConditions.length] ?? runningConditions[0] ?? null; } export function createVisibleTickerCards( runningConditions: ScheduledConditionRecord[], rotationIndex: number, nowMs: number, dataSource: WorkbenchRuntimeDataSource = "mock" ): TickerStackCard[] { if (runningConditions.length === 0) { return []; } const visibleCount = Math.min(runningConditions.length, TICKER_STACK_DEPTH); return Array.from({ length: visibleCount }, (_, stackIndex) => { const conditionIndex = (rotationIndex + stackIndex) % runningConditions.length; const condition = runningConditions[conditionIndex] ?? runningConditions[0]; return { condition, view: createConditionStepView(condition, nowMs, runningConditions.length, dataSource), stackIndex }; }); } function createConditionStepView( condition: ScheduledConditionRecord, nowMs: number, runningConditionCount: number, dataSource: WorkbenchRuntimeDataSource ): ConditionStepTickerView { const effectiveDataSource = condition.dataSource ?? dataSource; if (effectiveDataSource !== "mock") { return { title: runningConditionCount > 1 ? `${condition.title} · 后端执行中 · ${runningConditionCount} 个执行中` : `${condition.title} · 后端执行中`, currentStep: { id: "backend-status", title: "后端状态", detail: condition.detail ?? condition.summary } }; } const workflow = getRunningWorkflowDefinition(condition); const workflowState = getRunningWorkflowState(condition, workflow, nowMs); const currentStep = workflow.steps[workflowState.currentStepIndex]; const currentStepItem: ConditionStepTickerItem | null = currentStep ? { id: currentStep.id, title: `步骤 ${workflowState.currentStepIndex + 1}/${workflow.steps.length} ${currentStep.title}`, detail: currentStep.detail } : null; return { title: runningConditionCount > 1 ? `演示 · ${workflow.title} · ${condition.title} · ${runningConditionCount} 个执行中` : `演示 · ${workflow.title} · ${condition.title}`, progressValue: workflowState.progress, currentStep: currentStepItem }; }