diff --git a/src/Frontend/src/components/messages2/SagaDiagram/SagaDiagramParser.ts b/src/Frontend/src/components/messages2/SagaDiagram/SagaDiagramParser.ts index 33270100a..d08d0917f 100644 --- a/src/Frontend/src/components/messages2/SagaDiagram/SagaDiagramParser.ts +++ b/src/Frontend/src/components/messages2/SagaDiagram/SagaDiagramParser.ts @@ -19,6 +19,7 @@ export interface InitiatingMessageViewModel { } export interface SagaTimeoutMessageViewModel extends SagaMessageViewModel { TimeoutFriendly: string; + HasBeenProcessed: boolean; } export interface SagaUpdateViewModel { @@ -88,19 +89,22 @@ export function parseSagaUpdates(sagaHistory: SagaHistory | null, messagesData: const outgoingTimeoutMessages = outgoingMessages .filter((msg) => msg.HasTimeout) - .map( - (msg) => - ({ - ...msg, - TimeoutFriendly: `${msg.TimeoutFriendly}`, - }) as SagaTimeoutMessageViewModel - ); + .map((msg) => { + // Check if this timeout message has been processed by checking if there's an initiating message with matching ID + const hasBeenProcessed = sagaHistory.changes.some((update) => update.initiating_message?.message_id === msg.MessageId); + + return { + ...msg, + TimeoutFriendly: `${msg.TimeoutFriendly}`, + HasBeenProcessed: hasBeenProcessed, + } as SagaTimeoutMessageViewModel; + }); const regularMessages = outgoingMessages.filter((msg) => !msg.HasTimeout) as SagaMessageViewModel[]; const hasTimeout = outgoingTimeoutMessages.length > 0; - return { + return { MessageId: update.initiating_message?.message_id || "", StartTime: startTime, FinishTime: finishTime, diff --git a/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingTimeoutMessage.vue b/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingTimeoutMessage.vue index 76e255ebe..eced9b366 100644 --- a/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingTimeoutMessage.vue +++ b/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingTimeoutMessage.vue @@ -3,12 +3,20 @@ import { SagaTimeoutMessageViewModel } from "./SagaDiagramParser"; import MessageDataBox from "./MessageDataBox.vue"; import TimeoutIcon from "@/assets/TimeoutIcon.svg"; import SagaTimeoutIcon from "@/assets/SagaTimeoutIcon.svg"; +import { useSagaDiagramStore } from "@/stores/SagaDiagramStore"; -defineProps<{ +const props = defineProps<{ message: SagaTimeoutMessageViewModel; isLastMessage: boolean; showMessageData?: boolean; }>(); + +const store = useSagaDiagramStore(); + +const navigateToTimeout = () => { + // Set the selected message ID in the store + store.setSelectedMessageId(props.message.MessageId); +};