@@ -43,34 +43,55 @@ export function prepareProcessVisualization<TEvent extends ActivityEvent>(
4343 // determine the heat over time for each transition
4444 graph . edges . forEach ( transition => {
4545 const transitionData = getTransitionData ( transition )
46- const sourceEvents = eventsByActivities [ transitionData . sourceLabel ]
47- const targetEvents = eventsByActivities [ transitionData . targetLabel ]
46+ let allEvents
47+ if ( transition . isSelfloop ) {
48+ allEvents = eventsByActivities [ transitionData . sourceLabel ]
49+ allEvents . sort ( ( event1 , event2 ) => event1 . timestamp - event2 . timestamp )
50+ allEvents = allEvents . map ( ( event , index ) => ( {
51+ source : index % 2 === 0 ,
52+ event
53+ } ) )
54+ } else {
55+ const sourceEvents = eventsByActivities [ transitionData . sourceLabel ] . map ( event => ( {
56+ source : true ,
57+ event
58+ } ) )
59+ const targetEvents = eventsByActivities [ transitionData . targetLabel ] . map ( event => ( {
60+ source : false ,
61+ event
62+ } ) )
63+ allEvents = sourceEvents ! . concat ( targetEvents )
64+ }
4865
49- const allEvents = sourceEvents ! . concat ( targetEvents )
5066 allEvents
5167 . groupBy (
52- event => event . caseId ,
68+ event => event . event . caseId ,
5369 ( caseId , events ) => events ?. toArray ( ) ?? [ ]
5470 )
5571 . filter ( events => events . length > 1 )
56- . map ( events => events . sort ( ( event1 , event2 ) => event1 . timestamp - event2 . timestamp ) )
72+ . map ( events =>
73+ events . sort ( ( event1 , event2 ) => event1 . event . timestamp - event2 . event . timestamp )
74+ )
5775 . forEach ( events => {
58- // skip the last event if there is an odd number of events
59- const count = events . length % 2 === 0 ? events . length - 1 : events . length - 2
60- for ( let i = 0 ; i < count ; i += 2 ) {
61- // add the transition's heat value for its duration
62- transitionData . heat ! . addValues ( events [ i ] . timestamp , events [ i + 1 ] . timestamp , 1 )
76+ for ( let i = 0 ; i < events . length - 1 ; i ++ ) {
77+ if ( events [ i ] . source && ! events [ i + 1 ] . source ) {
78+ const event = events [ i ] . event
79+ const nextEvent = events [ i + 1 ] . event
80+
81+ // add the transition's heat value for its duration
82+ transitionData . heat ! . addValues ( event . timestamp , nextEvent . timestamp , 1 )
6383
64- // add an item to the transition representing the event
65- const { hue, size } = transitionEventStyling ( events [ 0 ] , events [ 1 ] )
66- transitionEventVisualSupport . addItem (
67- transition ,
68- false ,
69- events [ 0 ] . timestamp ,
70- events [ 1 ] . timestamp ,
71- size ,
72- hue / 360
73- )
84+ // add an item to the transition representing the event
85+ const { hue, size } = transitionEventStyling ( event , nextEvent )
86+ transitionEventVisualSupport . addItem (
87+ transition ,
88+ false ,
89+ event . timestamp ,
90+ nextEvent . timestamp ,
91+ size ,
92+ hue / 360
93+ )
94+ }
7495 }
7596 } )
7697
0 commit comments