From 9c3eeef5eb09eb680b16b086b37e453171bca55b Mon Sep 17 00:00:00 2001 From: Braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Mon, 15 Nov 2021 12:44:09 +0100 Subject: [PATCH] fix: warnings when NaN values are passed to svg transformations Signed-off-by: Braks <78412429+bcakmakoglu@users.noreply.github.com> --- src/additional-components/MiniMap/MiniMap.vue | 45 ++++++++++--------- src/components/Edges/BezierEdge.vue | 12 ++--- src/components/Edges/EdgeAnchor.vue | 15 ++++++- src/components/Edges/EdgeText.vue | 2 +- src/components/Edges/SmoothStepEdge.vue | 13 +++--- src/components/Edges/StraightEdge.vue | 20 ++++----- 6 files changed, 62 insertions(+), 45 deletions(-) diff --git a/src/additional-components/MiniMap/MiniMap.vue b/src/additional-components/MiniMap/MiniMap.vue index 0cfb617b..2ae9cc18 100644 --- a/src/additional-components/MiniMap/MiniMap.vue +++ b/src/additional-components/MiniMap/MiniMap.vue @@ -44,15 +44,16 @@ const nodeClassNameFunc = props.nodeClassName instanceof Function ? props.nodeCl const shapeRendering: ShapeRendering = typeof window === 'undefined' || !!window.chrome ? 'crispEdges' : 'geometricPrecision' +const nodes = computed(() => store.nodes.filter((node) => !node.isHidden)) +const bb = computed(() => getRectOfNodes(nodes.value)) +const viewBB = computed(() => ({ + x: -store.transform[0] / store.transform[2], + y: -store.transform[1] / store.transform[2], + width: store.dimensions.width / store.transform[2], + height: store.dimensions.height / store.transform[2], +})) const viewBox = computed(() => { - const bb = getRectOfNodes(store.nodes) - const viewBB = { - x: -store.transform[0] / store.transform[2], - y: -store.transform[1] / store.transform[2], - width: store.dimensions.width / store.transform[2], - height: store.dimensions.height / store.transform[2], - } - const boundingRect = store.nodes && store.nodes.length ? getBoundsofRects(bb, viewBB) : viewBB + const boundingRect = store.nodes && store.nodes.length ? getBoundsofRects(bb.value, viewBB.value) : viewBB.value const scaledWidth = boundingRect.width / elementWidth const scaledHeight = boundingRect.height / elementHeight const viewScale = Math.max(scaledWidth, scaledHeight) @@ -60,7 +61,6 @@ const viewBox = computed(() => { const viewHeight = viewScale * elementHeight const offset = 5 * viewScale return { - viewBB, offset, x: boundingRect.x - (viewWidth - boundingRect.width) / 2 - offset, y: boundingRect.y - (viewHeight - boundingRect.height) / 2 - offset, @@ -69,13 +69,25 @@ const viewBox = computed(() => { } }) -const nodes = computed(() => store.nodes.filter((node) => !node.isHidden)) +const d = computed(() => { + if (viewBox.value.x && viewBox.value.y) + return ` + M${viewBox.value.x - viewBox.value.offset},${viewBox.value.y - viewBox.value.offset} + h${viewBox.value.width + viewBox.value.offset * 2} + v${viewBox.value.height + viewBox.value.offset * 2} + h${-viewBox.value.width - viewBox.value.offset * 2}z + M${viewBB.value.x},${viewBB.value.y} + h${viewBB.value.width} + v${viewBB.value.height} + h${-viewBB.value.width}z` + else return '' +}) - + diff --git a/src/components/Edges/BezierEdge.vue b/src/components/Edges/BezierEdge.vue index 25393b17..181e4932 100644 --- a/src/components/Edges/BezierEdge.vue +++ b/src/components/Edges/BezierEdge.vue @@ -48,11 +48,13 @@ const centered = computed(() => ...props, }), ) -const path = computed(() => - getBezierPath({ - ...props, - }), -) +const path = computed(() => { + if (props.sourceX && props.sourceY) + return getBezierPath({ + ...props, + }) + else return '' +}) const markerEnd = computed(() => getMarkerEnd(props.arrowHeadType, props.markerEndId)) diff --git a/src/components/Edges/EdgeAnchor.vue b/src/components/Edges/EdgeAnchor.vue index 38850c91..e27bee8a 100644 --- a/src/components/Edges/EdgeAnchor.vue +++ b/src/components/Edges/EdgeAnchor.vue @@ -23,10 +23,21 @@ interface EdgeAnchorProps extends HTMLAttributes { const props = withDefaults(defineProps(), { radius: 10, + centerX: 0, + centerY: 0, + position: Position.Top, }) -const cx = computed(() => shiftX(props.centerX, props.radius, props.position)) -const cy = computed(() => shiftY(props.centerY, props.radius, props.position)) +const cx = computed(() => { + const val = shiftX(props.centerX, props.radius, props.position) + if (isNaN(val)) return 0 + else return val +}) +const cy = computed(() => { + const val = shiftY(props.centerY, props.radius, props.position) + if (isNaN(val)) return 0 + else return val +})