-
{{ item.key }}
-
=
-
{{ item.value }}
+
+
+
+
+ Message body cannot be displayed because content type "{{ messageData.body.data.content_type }}" is not supported.
@@ -30,6 +46,10 @@ const { messageDataLoading } = storeToRefs(sagaDiagramStore);
display: flex;
}
+.message-data-box-content {
+ display: block;
+}
+
.message-data-box-text {
display: inline-block;
margin-right: 0.25rem;
@@ -48,6 +68,24 @@ const { messageDataLoading } = storeToRefs(sagaDiagramStore);
display: inline-block;
width: 100%;
text-align: center;
+ color: #666;
+ font-style: italic;
+}
+
+.message-data-box-text--error {
+ display: inline-block;
+ width: 100%;
+ text-align: center;
+ color: #a94442;
+ font-style: italic;
+}
+
+.message-data-box-text--unsupported {
+ display: inline-block;
+ width: 100%;
+ text-align: center;
+ color: #8a6d3b;
+ font-style: italic;
}
.message-data-loading {
@@ -55,4 +93,28 @@ const { messageDataLoading } = storeToRefs(sagaDiagramStore);
justify-content: center;
align-items: center;
}
+
+.message-data-box-error {
+ padding: 1rem;
+ justify-content: center;
+}
+.message-data-box-content :deep(.wrapper.maximazable-code-editor--inline-instance) {
+ border: none;
+ border-radius: 0;
+ margin-top: 0;
+ font-size: 0.75rem;
+}
+
+.message-data-box-content :deep(.wrapper.maximazable-code-editor--inline-instance .toolbar) {
+ border: none;
+ border-radius: 0;
+ background-color: transparent;
+ padding: 0;
+ margin-bottom: 0;
+}
+
+.message-data-box-content :deep(.wrapper.maximazable-code-editor--inline-instance .cm-editor) {
+ /* Override any borders from the default theme */
+ border: none;
+}
diff --git a/src/Frontend/src/components/messages2/SagaDiagram/SagaDiagramParser.ts b/src/Frontend/src/components/messages2/SagaDiagram/SagaDiagramParser.ts
index 910f30e9d..437c4a8b3 100644
--- a/src/Frontend/src/components/messages2/SagaDiagram/SagaDiagramParser.ts
+++ b/src/Frontend/src/components/messages2/SagaDiagram/SagaDiagramParser.ts
@@ -1,22 +1,22 @@
import { SagaHistory } from "@/resources/SagaHistory";
import { typeToName } from "@/composables/typeHumanizer";
-import { SagaMessageData, SagaMessageDataItem } from "@/stores/SagaDiagramStore";
+import { SagaMessageData } from "@/stores/SagaDiagramStore";
import { getTimeoutFriendly } from "@/composables/deliveryDelayParser";
export interface SagaMessageViewModel {
MessageId: string;
- MessageFriendlyTypeName: string;
+ FriendlyTypeName: string;
FormattedTimeSent: string;
- Data: SagaMessageDataItem[];
+ Data: SagaMessageData;
IsEventMessage: boolean;
IsCommandMessage: boolean;
}
export interface InitiatingMessageViewModel {
- MessageType: string;
+ FriendlyTypeName: string;
IsSagaTimeoutMessage: boolean;
FormattedMessageTimestamp: string;
IsEventMessage: boolean;
- MessageData: SagaMessageDataItem[];
+ MessageData: SagaMessageData;
HasRelatedTimeoutRequest?: boolean;
MessageId: string;
}
@@ -78,7 +78,7 @@ export function parseSagaUpdates(sagaHistory: SagaHistory | null, messagesData:
const initiatingMessageTimestamp = new Date(update.initiating_message?.time_sent || Date.now());
// Find message data for initiating message
- const initiatingMessageData = update.initiating_message ? messagesData.find((m) => m.message_id === update.initiating_message.message_id)?.data || [] : [];
+ const initiatingMessageData = update.initiating_message ? findMessageData(messagesData, update.initiating_message.message_id) : createEmptyMessageData();
// Create common base message objects with shared properties
const outgoingMessages = update.outgoing_messages.map((msg) => {
@@ -89,7 +89,7 @@ export function parseSagaUpdates(sagaHistory: SagaHistory | null, messagesData:
const isEventMessage = msg.intent === "Publish";
// Find corresponding message data
- const messageData = messagesData.find((m) => m.message_id === msg.message_id)?.data || [];
+ const messageData = findMessageData(messagesData, msg.message_id);
return {
MessageType: msg.message_type || "",
MessageId: msg.message_id,
@@ -97,7 +97,7 @@ export function parseSagaUpdates(sagaHistory: SagaHistory | null, messagesData:
HasTimeout: hasTimeout,
TimeoutSeconds: timeoutSeconds,
TimeoutFriendly: getTimeoutFriendly(delivery_delay),
- MessageFriendlyTypeName: typeToName(msg.message_type || ""),
+ FriendlyTypeName: typeToName(msg.message_type || ""),
Data: messageData,
IsEventMessage: isEventMessage,
IsCommandMessage: !isEventMessage,
@@ -132,8 +132,8 @@ export function parseSagaUpdates(sagaHistory: SagaHistory | null, messagesData:
Status: update.status,
StatusDisplay: update.status === "new" ? "Saga Initiated" : "Saga Updated",
InitiatingMessage:
{
+ FriendlyTypeName: typeToName(update.initiating_message?.message_type || "Unknown Message") || "",
MessageId: update.initiating_message?.message_id || "",
- MessageType: typeToName(update.initiating_message?.message_type || "Unknown Message") || "",
FormattedMessageTimestamp: `${initiatingMessageTimestamp.toLocaleDateString()} ${initiatingMessageTimestamp.toLocaleTimeString()}`,
MessageData: initiatingMessageData,
IsEventMessage: update.initiating_message?.intent === "Publish",
@@ -160,3 +160,22 @@ export function parseSagaUpdates(sagaHistory: SagaHistory | null, messagesData:
return updates;
}
+
+// Helper function to find message data or create empty data if not found
+function findMessageData(messagesData: SagaMessageData[], messageId: string): SagaMessageData {
+ const messageData = messagesData.find((m) => m.message_id === messageId);
+ return messageData || createEmptyMessageData();
+}
+
+// Helper function to create an empty message data object
+function createEmptyMessageData(): SagaMessageData {
+ return {
+ message_id: "",
+ body: {
+ data: {},
+ loading: false,
+ failed_to_load: false,
+ not_found: false,
+ },
+ };
+}
diff --git a/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingMessage.vue b/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingMessage.vue
index ec4766a4c..65ba33c9f 100644
--- a/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingMessage.vue
+++ b/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingMessage.vue
@@ -27,11 +27,11 @@ const props = defineProps<{
}"
>
- {{ message.MessageFriendlyTypeName }}
+ {{ message.FriendlyTypeName }}
{{ message.FormattedTimeSent }}
diff --git a/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingTimeoutMessage.vue b/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingTimeoutMessage.vue
index 0f5658924..041287824 100644
--- a/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingTimeoutMessage.vue
+++ b/src/Frontend/src/components/messages2/SagaDiagram/SagaOutgoingTimeoutMessage.vue
@@ -46,7 +46,7 @@ watch(