Rework the structure to handle suppression (using ID instead of index). Add create history and removing.

This commit is contained in:
2025-01-13 00:27:14 +01:00
parent 9439dd2d95
commit 4433cf0e00
3 changed files with 95 additions and 74 deletions

View File

@@ -38,17 +38,16 @@ import type { Direction } from '~/shared/canvas.util';
import FakeA from '../prose/FakeA.vue';
import type { CanvasNode } from '~/types/canvas';
const { node, index, zoom } = defineProps<{
const { node, zoom } = defineProps<{
node: CanvasNode
index: number
zoom: number
}>();
const emit = defineEmits<{
(e: 'select', index: number): void,
(e: 'edit', index: number): void,
(e: 'move', index: number, x: number, y: number): void,
(e: 'resize', index: number, x: number, y: number, w: number, h: number): void,
(e: 'select', id: string): void,
(e: 'edit', id: string): void,
(e: 'move', id: string, x: number, y: number): void,
(e: 'resize', id: string, x: number, y: number, w: number, h: number): void,
}>();
const dom = useTemplateRef('dom');
@@ -59,7 +58,7 @@ function selectNode(e: Event) {
return;
focusing.value = true;
emit('select', index);
emit('select', node.id);
dom.value?.addEventListener('mousedown', dragstart, { passive: true });
}
@@ -70,7 +69,7 @@ function editNode(e: Event) {
e.stopImmediatePropagation();
dom.value?.removeEventListener('mousedown', dragstart);
emit('edit', index);
emit('edit', node.id);
}
function resizeNode(e: MouseEvent, x: number, y: number, w: number, h: number) {
e.stopImmediatePropagation();
@@ -88,7 +87,7 @@ function resizeNode(e: MouseEvent, x: number, y: number, w: number, h: number) {
const resizeend = (e: MouseEvent) => {
if(e.button !== 0)
return;
emit('resize', index, node.x - startx, node.y - starty, node.width - startw, node.height - starth);
emit('resize', node.id, node.x - startx, node.y - starty, node.width - startw, node.height - starth);
window.removeEventListener('mousemove', resizemove);
window.removeEventListener('mouseup', resizeend);
@@ -123,7 +122,7 @@ const dragend = (e: MouseEvent) => {
window.removeEventListener('mouseup', dragend);
if(node.x - lastx !== 0 && node.y - lasty !== 0)
emit('move', index, node.x - lastx, node.y - lasty);
emit('move', node.id, node.x - lastx, node.y - lasty);
};
const dragstart = (e: MouseEvent) => {
if(e.button !== 0)
@@ -135,7 +134,7 @@ const dragstart = (e: MouseEvent) => {
window.addEventListener('mouseup', dragend, { passive: true });
};
defineExpose({ unselect, dom });
defineExpose({ unselect, dom, ...node });
const style = computed(() => {
return node.color ? node.color?.class ?