Skip to content

Commit 4f833e5

Browse files
committed
Fixed flickering on flow diagram initial render
Also added controls to zoom and fit.
1 parent 027fae2 commit 4f833e5

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

src/Frontend/package-lock.json

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Frontend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"@codemirror/lang-xml": "^6.1.0",
2222
"@codemirror/legacy-modes": "^6.5.0",
2323
"@tinyhttp/content-disposition": "^2.2.2",
24+
"@vue-flow/controls": "^1.1.2",
2425
"@vue-flow/core": "^1.41.5",
2526
"bootstrap": "^5.3.3",
2627
"bootstrap-icons": "^1.11.3",

src/Frontend/src/components/messages/FlowDiagram.vue

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
<script setup lang="ts">
22
import { onMounted, ref } from "vue";
33
import { useTypedFetchFromServiceControl } from "@/composables/serviceServiceControlUrls";
4-
import { type DefaultEdge, MarkerType, useVueFlow, VueFlow, type Styles, type Node } from "@vue-flow/core";
4+
import { type DefaultEdge, MarkerType, VueFlow, type Styles, type Node } from "@vue-flow/core";
55
import TimeSince from "../TimeSince.vue";
66
import routeLinks from "@/router/routeLinks";
77
import Message from "@/resources/Message";
88
import { NServiceBusHeaders } from "@/resources/Header";
99
import { useRoute } from "vue-router";
1010
import { ExtendedFailedMessage } from "@/resources/FailedMessage";
11+
import { Controls } from "@vue-flow/controls";
1112
1213
const props = defineProps<{
1314
message: ExtendedFailedMessage;
@@ -158,7 +159,6 @@ function constructEdges(mappedMessages: MappedMessage[]): DefaultEdge[] {
158159
}
159160
160161
const elements = ref<(Node | DefaultEdge)[]>([]);
161-
const { onPaneReady, fitView } = useVueFlow();
162162
163163
onMounted(async () => {
164164
if (!props.message.conversationId) return;
@@ -178,13 +178,6 @@ onMounted(async () => {
178178
for (const root of mappedMessages.filter((message) => !message.parentId)) assignDescendantLevelsAndWidth(root);
179179
180180
elements.value = [...constructNodes(mappedMessages), ...constructEdges(mappedMessages)];
181-
//TODO: if doing fitView on next Vue onUpdated() then it doesn't appear the elements
182-
// are actually drawn yet. See if we can determine a better event to use this on rather than relying on setTimeout
183-
setTimeout(() => fitView(), 50);
184-
});
185-
186-
onPaneReady(({ fitView }) => {
187-
fitView();
188181
});
189182
190183
function typeIcon(type: MessageType) {
@@ -201,7 +194,8 @@ function typeIcon(type: MessageType) {
201194

202195
<template>
203196
<div id="tree-container">
204-
<VueFlow v-model="elements" :min-zoom="0.1">
197+
<VueFlow v-model="elements" :min-zoom="0.1" :fit-view-on-init="true">
198+
<Controls />
205199
<template #node-message="nodeProps">
206200
<div class="node" :class="[nodeProps.data.isError && 'error', nodeProps.data.id === props.message.id && 'current-message']">
207201
<div class="node-text wordwrap">
@@ -230,6 +224,7 @@ function typeIcon(type: MessageType) {
230224
<style>
231225
@import "@vue-flow/core/dist/style.css";
232226
@import "@vue-flow/core/dist/theme-default.css";
227+
@import "@vue-flow/controls/dist/style.css";
233228
</style>
234229

235230
<style scoped>

0 commit comments

Comments
 (0)