@@ -3,7 +3,7 @@ import { ref, watch } from "vue";
3
3
import { SagaHistory , SagaMessage } from "@/resources/SagaHistory" ;
4
4
import { useFetchFromServiceControl } from "@/composables/serviceServiceControlUrls" ;
5
5
import Message from "@/resources/Message" ;
6
- import { useMessageStore } from "@/stores/MessageStore" ;
6
+
7
7
const StandardKeys = [ "$type" , "Id" , "Originator" , "OriginalMessageId" ] ;
8
8
export interface SagaMessageDataItem {
9
9
key : string ;
@@ -13,7 +13,7 @@ export interface SagaMessageData {
13
13
message_id : string ;
14
14
data : SagaMessageDataItem [ ] ;
15
15
}
16
- export const useSagaDiagramStore = defineStore ( "sagaHistory " , ( ) => {
16
+ export const useSagaDiagramStore = defineStore ( "SagaDiagramStore " , ( ) => {
17
17
const sagaHistory = ref < SagaHistory | null > ( null ) ;
18
18
const sagaId = ref < string | null > ( null ) ;
19
19
const loading = ref ( false ) ;
@@ -23,63 +23,17 @@ export const useSagaDiagramStore = defineStore("sagaHistory", () => {
23
23
const messagesData = ref < SagaMessageData [ ] > ( [ ] ) ;
24
24
const MessageBodyEndpoint = "messages/{0}/body" ;
25
25
26
- const messageStore = useMessageStore ( ) ;
26
+ // Watch the sagaId and trigger fetches when it changes
27
+ watch ( sagaId , async ( newSagaId ) => {
28
+ if ( newSagaId ) {
29
+ await fetchSagaHistory ( newSagaId ) ;
27
30
28
- //Watch for changes to messageStore.state.data.invoked_saga.has_saga
29
- watch (
30
- ( ) => messageStore . state . data . invoked_saga . has_saga ,
31
- async ( newValue ) => {
32
- if ( newValue ) {
33
- sagaId . value = messageStore . state . data . invoked_saga . saga_id || "" ;
34
- await fetchSagaHistory ( sagaId . value ) ;
35
- } else {
36
- clearSagaHistory ( ) ;
31
+ // If saga history was successfully fetched, fetch message data
32
+ if ( sagaHistory . value ) {
33
+ await fetchMessagesData ( sagaHistory . value ) ;
37
34
}
38
- } ,
39
- { immediate : true }
40
- ) ;
41
-
42
- // Watch for changes to showMessageData
43
- watch ( [ showMessageData , sagaHistory ] , async ( [ show , history ] ) => {
44
- if ( show && history ) {
45
- // Get all messages from changes array - both initiating and outgoing
46
- const messagesToFetch = history . changes . flatMap ( ( change ) => {
47
- const messages : SagaMessage [ ] = [ ] ;
48
-
49
- // Add initiating message if it exists and hasn't been fetched
50
- if ( change . initiating_message && ! fetchedMessages . value . has ( change . initiating_message . message_id ) ) {
51
- messages . push ( change . initiating_message ) ;
52
- }
53
-
54
- // Add all unfetched outgoing messages
55
- if ( change . outgoing_messages ) {
56
- messages . push ( ...change . outgoing_messages . filter ( ( msg ) => ! fetchedMessages . value . has ( msg . message_id ) ) ) ;
57
- }
58
- return messages ;
59
- } ) ;
60
-
61
- // Check if any messages need body_url
62
- const needsBodyUrl = messagesToFetch . every ( ( msg ) => ! msg . body_url ) ;
63
- if ( needsBodyUrl && messagesToFetch . length > 0 ) {
64
- const auditMessages = await getAuditMessages ( sagaId . value ! ) ;
65
- messagesToFetch . forEach ( ( message ) => {
66
- const auditMessage = auditMessages . find ( ( x : Message ) => x . message_id === message . message_id ) ;
67
- if ( auditMessage ) {
68
- message . body_url = auditMessage . body_url ;
69
- }
70
- } ) ;
71
- }
72
-
73
- // Fetch data for each unfetched message in parallel and store results
74
- const fetchPromises = messagesToFetch . map ( async ( message ) => {
75
- const data = await fetchSagaMessageData ( message ) ;
76
- fetchedMessages . value . add ( message . message_id ) ;
77
- return data ;
78
- } ) ;
79
-
80
- const newMessageData = await Promise . all ( fetchPromises ) ;
81
- // Add new message data to the existing array
82
- messagesData . value = [ ...messagesData . value , ...newMessageData ] ;
35
+ } else {
36
+ clearSagaHistory ( ) ;
83
37
}
84
38
} ) ;
85
39
@@ -114,12 +68,14 @@ export const useSagaDiagramStore = defineStore("sagaHistory", () => {
114
68
loading . value = false ;
115
69
}
116
70
}
71
+
117
72
function createEmptyMessageData ( message_id : string ) : SagaMessageData {
118
73
return {
119
74
message_id,
120
75
data : [ ] ,
121
76
} ;
122
77
}
78
+
123
79
async function fetchSagaMessageData ( message : SagaMessage ) : Promise < SagaMessageData > {
124
80
const bodyUrl = ( message . body_url ?? formatUrl ( MessageBodyEndpoint , message . message_id ) ) . replace ( / ^ \/ / , "" ) ;
125
81
loading . value = true ;
@@ -244,6 +200,47 @@ export const useSagaDiagramStore = defineStore("sagaHistory", () => {
244
200
showMessageData . value = ! showMessageData . value ;
245
201
}
246
202
203
+ async function fetchMessagesData ( history : SagaHistory ) {
204
+ // Get all messages from changes array - both initiating and outgoing
205
+ const messagesToFetch = history . changes . flatMap ( ( change ) => {
206
+ const messages : SagaMessage [ ] = [ ] ;
207
+
208
+ // Add initiating message if it exists and hasn't been fetched
209
+ if ( change . initiating_message && ! fetchedMessages . value . has ( change . initiating_message . message_id ) ) {
210
+ messages . push ( change . initiating_message ) ;
211
+ }
212
+
213
+ // Add all unfetched outgoing messages
214
+ if ( change . outgoing_messages ) {
215
+ messages . push ( ...change . outgoing_messages . filter ( ( msg ) => ! fetchedMessages . value . has ( msg . message_id ) ) ) ;
216
+ }
217
+ return messages ;
218
+ } ) ;
219
+
220
+ // Check if any messages need body_url
221
+ const needsBodyUrl = messagesToFetch . every ( ( msg ) => ! msg . body_url ) ;
222
+ if ( needsBodyUrl && messagesToFetch . length > 0 ) {
223
+ const auditMessages = await getAuditMessages ( sagaId . value ! ) ;
224
+ messagesToFetch . forEach ( ( message ) => {
225
+ const auditMessage = auditMessages . find ( ( x : Message ) => x . message_id === message . message_id ) ;
226
+ if ( auditMessage ) {
227
+ message . body_url = auditMessage . body_url ;
228
+ }
229
+ } ) ;
230
+ }
231
+
232
+ // Fetch data for each unfetched message in parallel and store results
233
+ const fetchPromises = messagesToFetch . map ( async ( message ) => {
234
+ const data = await fetchSagaMessageData ( message ) ;
235
+ fetchedMessages . value . add ( message . message_id ) ;
236
+ return data ;
237
+ } ) ;
238
+
239
+ const newMessageData = await Promise . all ( fetchPromises ) ;
240
+ // Add new message data to the existing array
241
+ messagesData . value = [ ...messagesData . value , ...newMessageData ] ;
242
+ }
243
+
247
244
return {
248
245
sagaHistory,
249
246
sagaId,
0 commit comments