Skip to content

Commit c1791e7

Browse files
authored
Merge pull request #3 from yWorks/dev
Dev
2 parents b656697 + cb0fae0 commit c1791e7

File tree

4 files changed

+45
-21
lines changed

4 files changed

+45
-21
lines changed

docs/introduction/GettingStarted.mdx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ section: 1
44
tags: []
55
---
66
import TypeLink from '../../components/TypeLink.astro'
7+
import Video from '../../components/Video.astro'
8+
import videoImage from './yt-react-components_process-mining.png'
79

810
# Getting Started
11+
<Video image={videoImage} url="https://youtu.be/rGNDMd9SoTs"/>
912

1013
## Prerequisites
1114

407 KB
Loading

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@yworks/react-yfiles-process-mining",
3-
"version": "1.0.1",
3+
"version": "1.0.2",
44
"author": {
55
"name": "yFiles for HTML team @ yWorks GmbH",
66
"email": "[email protected]"

src/core/process-visualization.ts

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)