mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 09:36:44 +00:00
* Improve code health Fix TS typos in local variables Fix CSS typos in local styles Fix typos in comments Fix typos in strings * Fix order of n8n setup sections in CONTRIBUTING.md
96 lines
2.9 KiB
TypeScript
96 lines
2.9 KiB
TypeScript
import mixins from 'vue-typed-mixins';
|
|
// @ts-ignore
|
|
import normalizeWheel from 'normalize-wheel';
|
|
import { deviceSupportHelpers } from '@/components/mixins/deviceSupportHelpers';
|
|
import { getMousePosition } from '@/views/canvasHelpers';
|
|
|
|
export const moveNodeWorkflow = mixins(
|
|
deviceSupportHelpers,
|
|
).extend({
|
|
data () {
|
|
return {
|
|
moveLastPosition: [0, 0],
|
|
};
|
|
},
|
|
|
|
methods: {
|
|
moveWorkflow (e: MouseEvent) {
|
|
const offsetPosition = this.$store.getters.getNodeViewOffsetPosition;
|
|
|
|
const [x, y] = getMousePosition(e);
|
|
|
|
const nodeViewOffsetPositionX = offsetPosition[0] + (x - this.moveLastPosition[0]);
|
|
const nodeViewOffsetPositionY = offsetPosition[1] + (y - this.moveLastPosition[1]);
|
|
this.$store.commit('setNodeViewOffsetPosition', {newOffset: [nodeViewOffsetPositionX, nodeViewOffsetPositionY]});
|
|
|
|
// Update the last position
|
|
this.moveLastPosition[0] = x;
|
|
this.moveLastPosition[1] = y;
|
|
},
|
|
mouseDownMoveWorkflow (e: MouseEvent) {
|
|
if (this.isCtrlKeyPressed(e) === false) {
|
|
// We only care about it when the ctrl key is pressed at the same time.
|
|
// So we exit when it is not pressed.
|
|
return;
|
|
}
|
|
|
|
if (this.$store.getters.isActionActive('dragActive')) {
|
|
// If a node does currently get dragged we do not activate the selection
|
|
return;
|
|
}
|
|
|
|
this.$store.commit('setNodeViewMoveInProgress', true);
|
|
|
|
const [x, y] = getMousePosition(e);
|
|
|
|
this.moveLastPosition[0] = x;
|
|
this.moveLastPosition[1] = y;
|
|
|
|
// @ts-ignore
|
|
this.$el.addEventListener('mousemove', this.mouseMoveNodeWorkflow);
|
|
},
|
|
mouseUpMoveWorkflow (e: MouseEvent) {
|
|
if (this.$store.getters.isNodeViewMoveInProgress === false) {
|
|
// If it is not active return directly.
|
|
// Else normal node dragging will not work.
|
|
return;
|
|
}
|
|
|
|
// @ts-ignore
|
|
this.$el.removeEventListener('mousemove', this.mouseMoveNodeWorkflow);
|
|
|
|
this.$store.commit('setNodeViewMoveInProgress', false);
|
|
|
|
// Nothing else to do. Simply leave the node view at the current offset
|
|
},
|
|
mouseMoveNodeWorkflow (e: MouseEvent) {
|
|
// @ts-ignore
|
|
if (e.target && !e.target.id.includes('node-view')) {
|
|
return;
|
|
}
|
|
|
|
if (this.$store.getters.isActionActive('dragActive')) {
|
|
return;
|
|
}
|
|
|
|
if (e.buttons === 0) {
|
|
// Mouse button is not pressed anymore so stop selection mode
|
|
// Happens normally when mouse leave the view pressed and then
|
|
// comes back unpressed.
|
|
// @ts-ignore
|
|
this.mouseUp(e);
|
|
return;
|
|
}
|
|
|
|
this.moveWorkflow(e);
|
|
},
|
|
wheelMoveWorkflow (e: WheelEvent) {
|
|
const normalized = normalizeWheel(e);
|
|
const offsetPosition = this.$store.getters.getNodeViewOffsetPosition;
|
|
const nodeViewOffsetPositionX = offsetPosition[0] - (e.shiftKey ? normalized.pixelY : normalized.pixelX);
|
|
const nodeViewOffsetPositionY = offsetPosition[1] - (e.shiftKey ? normalized.pixelX : normalized.pixelY);
|
|
this.$store.commit('setNodeViewOffsetPosition', {newOffset: [nodeViewOffsetPositionX, nodeViewOffsetPositionY]});
|
|
},
|
|
},
|
|
});
|