From dc1d71d0bd1324ca9b2adfa6143e2fbb007718eb Mon Sep 17 00:00:00 2001 From: Braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Fri, 22 Apr 2022 14:28:41 +0200 Subject: [PATCH] refactor: Destructure props with reactivity transform --- .eslintrc.js | 1 + package/.eslintrc.js | 1 + .../Background/Background.vue | 46 ++++---- .../Controls/Controls.vue | 15 +-- .../additional-components/MiniMap/MiniMap.vue | 33 +++--- .../ConnectionLine/ConnectionLine.vue | 16 +-- package/src/components/Edges/EdgeWrapper.vue | 111 +++++++++--------- package/src/components/Handle/Handle.vue | 45 ++++--- package/src/components/Nodes/NodeWrapper.vue | 32 +++-- .../UserSelection/SelectionRect.vue | 8 +- package/src/container/EdgeRenderer/Marker.vue | 42 +++---- .../EdgeRenderer/MarkerDefinitions.vue | 8 +- 12 files changed, 182 insertions(+), 176 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 3531dfeb..fabfc6ec 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,4 +1,5 @@ const baseRules = { + 'vue/no-setup-props-destructure': 0, 'no-console': 0, 'chai-friendly/no-unused-expressions': ['error', { allowShortCircuit: true, allowTernary: true }], 'prettier/prettier': ['error', {}, { usePrettierrc: true }], diff --git a/package/.eslintrc.js b/package/.eslintrc.js index 47130cd9..390d1f21 100644 --- a/package/.eslintrc.js +++ b/package/.eslintrc.js @@ -1,6 +1,7 @@ module.exports = { rules: { 'no-use-before-define': 0, + 'vue/no-setup-props-destructure': 0, }, extends: ['../.eslintrc.js'], } diff --git a/package/src/additional-components/Background/Background.vue b/package/src/additional-components/Background/Background.vue index 8d909bc5..745efe01 100644 --- a/package/src/additional-components/Background/Background.vue +++ b/package/src/additional-components/Background/Background.vue @@ -3,15 +3,17 @@ import { BackgroundVariant } from '../../types' import { useVueFlow } from '../../composables' import type { BackgroundProps } from '../../types/components' -const props = withDefaults(defineProps(), { - variant: 'dots' as BackgroundVariant, - gap: 10, - size: 0.4, - height: 100, - width: 100, - x: 0, - y: 0, -}) +const { + variant = 'dots' as BackgroundVariant, + gap = 10, + size = 0.4, + height = 100, + width = 100, + x = 0, + y = 0, + bgColor, + patternColor: initialPatternColor, +} = defineProps() const defaultColors: Record = { [BackgroundVariant.Dots]: '#81818a', @@ -21,25 +23,23 @@ const defaultColors: Record = { const { viewport } = $(useVueFlow()) const background = $computed(() => { - const scaledGap = props.gap && props.gap * viewport.zoom + const scaledGap = gap && gap * viewport.zoom const xOffset = scaledGap && viewport.x % scaledGap const yOffset = scaledGap && viewport.y % scaledGap - const size = props.size || 0.4 * viewport.zoom + const bgSize = size || 0.4 * viewport.zoom return { scaledGap, xOffset, yOffset, - size, + size: bgSize, } }) // when there are multiple flows on a page we need to make sure that every background gets its own pattern. const patternId = `pattern-${Math.floor(Math.random() * 100000)}` -const patternColor = computed(() => - props.patternColor ? props.patternColor : defaultColors[props.variant || BackgroundVariant.Dots], -) +const patternColor = computed(() => initialPatternColor || defaultColors[variant || BackgroundVariant.Dots]) const d = computed( () => `M${background.scaledGap / 2} 0 V${background.scaledGap} M0 ${background.scaledGap / 2} H${background.scaledGap}`, @@ -54,8 +54,8 @@ export default { - - + diff --git a/package/src/additional-components/Controls/Controls.vue b/package/src/additional-components/Controls/Controls.vue index f248a925..ee379bbc 100644 --- a/package/src/additional-components/Controls/Controls.vue +++ b/package/src/additional-components/Controls/Controls.vue @@ -8,11 +8,8 @@ import Fitview from '~/assets/icons/fitview.svg' import Lock from '~/assets/icons/lock.svg' import Unlock from '~/assets/icons/unlock.svg' -const props = withDefaults(defineProps(), { - showZoom: true, - showFitView: true, - showInteractive: true, -}) +const { showZoom = true, showFitView = true, showInteractive = true, fitViewParams } = defineProps() + const emit = defineEmits<{ (event: 'zoom-in'): void (event: 'zoom-out'): void @@ -35,7 +32,7 @@ const onZoomOutHandler = () => { } const onFitViewHandler = () => { - instance?.fitView(props.fitViewParams) + instance?.fitView(fitViewParams) emit('fit-view') } @@ -51,7 +48,7 @@ export default { diff --git a/package/src/components/Nodes/NodeWrapper.vue b/package/src/components/Nodes/NodeWrapper.vue index 098965b7..9fa35b7e 100644 --- a/package/src/components/Nodes/NodeWrapper.vue +++ b/package/src/components/Nodes/NodeWrapper.vue @@ -15,9 +15,9 @@ interface NodeWrapperProps { snapGrid?: SnapGrid } -const props = defineProps() +const { id, node, draggable, selectable, connectable, snapGrid } = defineProps() -provide(NodeId, props.id) +provide(NodeId, id) const slots = inject(Slots) @@ -35,8 +35,6 @@ const { addSelectedNodes, } = $(useVueFlow()) -const node = $(useVModel(props, 'node')) - let name = $ref(node.type ?? 'default') watch( () => node.type, @@ -47,8 +45,8 @@ const nodeElement = ref() const { scale, onDrag, onDragStart, onDragStop } = useDraggableCore(nodeElement, { handle: node.dragHandle, - disabled: !props.draggable, - grid: props.snapGrid, + disabled: !draggable, + grid: snapGrid, cancel: `.${noDragClassName}`, enableUserSelectHack: false, scale: viewport.zoom, @@ -100,12 +98,12 @@ watch( } if (parent) { - node.computedPosition = getXYZPos(parent, xyzPos) + getNode(id)!.computedPosition = getXYZPos(parent, xyzPos) } else { - node.computedPosition = xyzPos + getNode(id)!.computedPosition = xyzPos } - node.handleBounds = getHandleBounds(nodeElement.value, scale.value) + getNode(id)!.handleBounds = getHandleBounds(nodeElement.value, scale.value) }, { deep: true, flush: 'post' }, ) @@ -142,8 +140,8 @@ const onContextMenu = (event: MouseEvent) => { const onDoubleClick = (event: MouseEvent) => hooks.nodeDoubleClick.trigger({ event, node }) const onSelectNode = (event: MouseEvent) => { - if (!props.draggable) { - if (props.selectable) { + if (!draggable) { + if (selectable) { setState({ nodesSelectionActive: false, }) @@ -182,13 +180,13 @@ onDragStart(({ event }) => { addSelectedNodes([]) hooks.nodeDragStart.trigger({ event, node }) - if (selectNodesOnDrag && props.selectable) { + if (selectNodesOnDrag && selectable) { setState({ nodesSelectionActive: false, }) if (!node.selected) addSelectedNodes([node]) - } else if (!selectNodesOnDrag && !node.selected && props.selectable) { + } else if (!selectNodesOnDrag && !node.selected && selectable) { setState({ nodesSelectionActive: false, }) @@ -206,7 +204,7 @@ onDragStop(({ event, data: { deltaX, deltaY } }) => { // onDragStop also gets called when user just clicks on a node. // Because of that we set dragging to true inside the onDrag handler and handle the click here if (!node.dragging) { - if (props.selectable && !selectNodesOnDrag && !node.selected) { + if (selectable && !selectNodesOnDrag && !node.selected) { addSelectedNodes([node]) } hooks.nodeClick.trigger({ event, node }) @@ -225,7 +223,7 @@ const getClass = computed(() => { { dragging: node.dragging, selected: node.selected, - selectable: props.selectable, + selectable, }, extraClass, ] @@ -241,7 +239,7 @@ const getStyle = computed(() => { return { zIndex: node.computedPosition.z, transform: `translate(${node.computedPosition.x}px,${node.computedPosition.y}px)`, - pointerEvents: props.selectable || props.draggable ? 'all' : 'none', + pointerEvents: selectable || draggable ? 'all' : 'none', ...styles, } as CSSProperties }) @@ -271,7 +269,7 @@ export default { :type="node.type" :data="node.data" :selected="!!node.selected" - :connectable="props.connectable" + :connectable="connectable" :position="node.position" :computed-position="node.computedPosition" :dimensions="node.dimensions" diff --git a/package/src/components/UserSelection/SelectionRect.vue b/package/src/components/UserSelection/SelectionRect.vue index 3e682ece..275a3ebb 100644 --- a/package/src/components/UserSelection/SelectionRect.vue +++ b/package/src/components/UserSelection/SelectionRect.vue @@ -6,7 +6,7 @@ interface SelectionRectProps { y: number } -const props = defineProps() +const { width, height, x, y } = defineProps()