fix(editor): dnd lag (#9378)
This commit is contained in:
@@ -56,7 +56,7 @@ export class FileDropExtension extends LifeCycleWatcher {
|
|||||||
FileDropExtension.indicator.rect = null;
|
FileDropExtension.indicator.rect = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
onDragOver = (event: DragEvent) => {
|
onDragMove = (event: DragEvent) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
const dataTransfer = event.dataTransfer;
|
const dataTransfer = event.dataTransfer;
|
||||||
@@ -149,9 +149,22 @@ export class FileDropExtension extends LifeCycleWatcher {
|
|||||||
const droppedFiles = dataTransfer.files;
|
const droppedFiles = dataTransfer.files;
|
||||||
if (!droppedFiles || !droppedFiles.length) return;
|
if (!droppedFiles || !droppedFiles.length) return;
|
||||||
|
|
||||||
const { targetModel, type: place } = this;
|
const { clientX, clientY } = event;
|
||||||
const { x, y } = event;
|
const point = new Point(clientX, clientY);
|
||||||
|
const element = getClosestBlockComponentByPoint(point.clone());
|
||||||
|
|
||||||
|
let result: DropResult | null = null;
|
||||||
|
if (element) {
|
||||||
|
const model = element.model;
|
||||||
|
const parent = this.std.doc.getParent(model);
|
||||||
|
if (!matchFlavours(parent, ['affine:surface' as BlockSuite.Flavour])) {
|
||||||
|
result = calcDropTarget(point, model, element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FileDropExtension.dropResult = result;
|
||||||
|
|
||||||
|
const { x, y } = event;
|
||||||
|
const { targetModel, type: place } = this;
|
||||||
const drop = onDrop({
|
const drop = onDrop({
|
||||||
std: this.std,
|
std: this.std,
|
||||||
files: [...droppedFiles],
|
files: [...droppedFiles],
|
||||||
@@ -170,21 +183,34 @@ export class FileDropExtension extends LifeCycleWatcher {
|
|||||||
super.mounted();
|
super.mounted();
|
||||||
const std = this.std;
|
const std = this.std;
|
||||||
|
|
||||||
std.event.add('nativeDragOver', context => {
|
std.event.disposables.add(
|
||||||
|
std.event.add('nativeDragMove', context => {
|
||||||
const event = context.get('dndState');
|
const event = context.get('dndState');
|
||||||
this.onDragOver(event.raw);
|
this.onDragMove(event.raw);
|
||||||
});
|
})
|
||||||
|
);
|
||||||
|
std.event.disposables.add(
|
||||||
std.event.add('nativeDragLeave', () => {
|
std.event.add('nativeDragLeave', () => {
|
||||||
this.onDragLeave();
|
this.onDragLeave();
|
||||||
});
|
})
|
||||||
std.provider.getAll(FileDropConfigExtensionIdentifier).forEach(options => {
|
);
|
||||||
if (options.onDrop) {
|
std.event.disposables.add(
|
||||||
std.event.add('nativeDrop', context => {
|
std.event.add('nativeDrop', context => {
|
||||||
|
const values = std.provider
|
||||||
|
.getAll(FileDropConfigExtensionIdentifier)
|
||||||
|
.values();
|
||||||
|
|
||||||
|
for (const value of values) {
|
||||||
|
if (value.onDrop) {
|
||||||
const event = context.get('dndState');
|
const event = context.get('dndState');
|
||||||
return this._onDrop(event.raw, options);
|
const drop = this._onDrop(event.raw, value);
|
||||||
});
|
if (drop) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -273,6 +273,8 @@ class DragController extends PointerControllerBase {
|
|||||||
};
|
};
|
||||||
|
|
||||||
private readonly _nativeDragOver = (event: DragEvent) => {
|
private readonly _nativeDragOver = (event: DragEvent) => {
|
||||||
|
// prevent default to allow drop in editor
|
||||||
|
event.preventDefault();
|
||||||
const dndEventState = new DndEventState({ event });
|
const dndEventState = new DndEventState({ event });
|
||||||
this._dispatcher.run(
|
this._dispatcher.run(
|
||||||
'nativeDragOver',
|
'nativeDragOver',
|
||||||
|
|||||||
Reference in New Issue
Block a user