Skip to content

Commit ad89bfd

Browse files
committed
Merge branch 'dev' into main
2 parents 8ebfb01 + 245e2fa commit ad89bfd

File tree

5 files changed

+70
-15
lines changed

5 files changed

+70
-15
lines changed

apps/client/src/code/pages/page/arrows/arrow-creation.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,24 @@ export class PageArrowCreation {
148148

149149
return arrow;
150150
}
151+
152+
create(input: {
153+
sourceNote: PageNote;
154+
targetNote: PageNote;
155+
event: PointerEvent;
156+
baseArrow?: PageArrow;
157+
anchor: IVec2 | null;
158+
}) {
159+
this.start({
160+
anchorNote: input.sourceNote,
161+
looseEndpoint: 'target',
162+
baseArrow: input.baseArrow,
163+
event: input.event,
164+
});
165+
166+
this.finish({
167+
note: input.targetNote,
168+
anchor: null,
169+
});
170+
}
151171
}

apps/client/src/code/pages/page/arrows/arrow.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -363,15 +363,15 @@ export const PageArrow = once(
363363
}),
364364
targetHeadPos: computed(() => {
365365
if (this.react.collab.bodyType === 'line') {
366-
return (
367-
getLineRectIntersection(
368-
new Line(this.react.sourcePos, this.react.targetPos),
369-
(this.react.interregional
370-
? this.react.targetNote.react.islandRect
371-
: this.react.targetNote.react.relativeRect
372-
).grow(new Vec2(ARROW_OFFSET)),
373-
) ?? this.react.targetPos
374-
);
366+
return this.react.targetNote != null
367+
? getLineRectIntersection(
368+
new Line(this.react.sourcePos, this.react.targetPos),
369+
(this.react.interregional
370+
? this.react.targetNote.react.islandRect
371+
: this.react.targetNote.react.relativeRect
372+
).grow(new Vec2(ARROW_OFFSET)),
373+
) ?? this.react.targetPos
374+
: this.react.targetPos;
375375
} else {
376376
return this.react.targetPos.add(
377377
this.react.halfSizes.target

apps/client/src/code/pages/page/notes/dropping.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,15 @@ export class NoteDropping {
3030

3131
selectedNote.react.collab.pos.x = newPos.x;
3232
selectedNote.react.collab.pos.y = newPos.y;
33+
}
3334

34-
if (date !== this.page.collab.store.notes[selectedNote.id]?.movedAt) {
35-
this.page.collab.store.notes[selectedNote.id].movedAt = date;
35+
if (
36+
this.page.dragging.finalRegionId !== this.page.dragging.initialRegionId
37+
) {
38+
for (const selectedNote of this.page.selection.react.notes) {
39+
if (date !== this.page.collab.store.notes[selectedNote.id]?.movedAt) {
40+
this.page.collab.store.notes[selectedNote.id].movedAt = date;
41+
}
3642
}
3743
}
3844
});

apps/client/src/layouts/PagesLayout/MainContent/DisplayPage/DisplayScreens/DisplayWorld/DisplayArrow/ArrowLabel.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
left: `${arrow.react.centerPos.x}px`,
66
top: `${arrow.react.centerPos.y}px`,
77
cursor: arrow.react.editing || page.react.readOnly ? 'auto' : 'grab',
8+
display: page.dragging.react.active ? 'none' : undefined,
89
}"
910
>
1011
<div

apps/client/src/layouts/PagesLayout/MainContent/DisplayPage/DisplayScreens/DisplayWorld/DisplayArrow/DisplayArrow.vue

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,10 @@
99
<component
1010
:is="arrow.react.collab.bodyType === 'curve' ? CurveArrow : LineArrow"
1111
:style="{
12-
'pointer-events':
13-
page.arrowCreation.react.active || page.dragging.react.active
14-
? 'none'
15-
: undefined,
12+
'pointer-events': page.arrowCreation.react.active ? 'none' : undefined,
1613
}"
1714
@pointerdown.left.stop="onLeftPointerDown"
15+
@pointerup.left="onLeftPointerUp"
1816
@click.left="onLeftClick"
1917
></component>
2018

@@ -36,6 +34,7 @@
3634

3735
<script setup lang="ts">
3836
import type { PageArrow } from 'src/code/pages/page/arrows/arrow';
37+
import { PageNote } from 'src/code/pages/page/notes/note';
3938
import type { Page } from 'src/code/pages/page/page';
4039
import { createDoubleClickChecker } from 'src/code/utils/misc';
4140
@@ -72,6 +71,35 @@ function onLeftPointerDown(event: PointerEvent) {
7271
props.arrow.grab(event);
7372
}
7473
74+
async function onLeftPointerUp(event: PointerEvent) {
75+
if (
76+
page.dragging.react.active &&
77+
page.selection.react.elems.length === 1 &&
78+
page.selection.react.elems[0].type === 'note'
79+
) {
80+
if (props.arrow.react.region instanceof PageNote) {
81+
await page.dropping.perform(props.arrow.react.region);
82+
} else {
83+
page.dragging.cancel();
84+
}
85+
86+
const targetNote = props.arrow.react.targetNote;
87+
88+
const middleNote = page.selection.react.elems[0];
89+
90+
// eslint-disable-next-line vue/no-mutating-props
91+
props.arrow.react.collab.target = middleNote.id;
92+
93+
page.arrowCreation.create({
94+
sourceNote: middleNote,
95+
targetNote: targetNote,
96+
anchor: null,
97+
baseArrow: props.arrow,
98+
event,
99+
});
100+
}
101+
}
102+
75103
const checkDoubleClick = createDoubleClickChecker();
76104
77105
async function onLeftClick(event: MouseEvent) {

0 commit comments

Comments
 (0)