diff options
Diffstat (limited to 'src/client/util/DragManager.ts')
| -rw-r--r-- | src/client/util/DragManager.ts | 19 | 
1 files changed, 10 insertions, 9 deletions
diff --git a/src/client/util/DragManager.ts b/src/client/util/DragManager.ts index 7259f66e3..2c316ccdf 100644 --- a/src/client/util/DragManager.ts +++ b/src/client/util/DragManager.ts @@ -1,6 +1,6 @@  import { action, runInAction } from "mobx";  import { Doc, Field } from "../../new_fields/Doc"; -import { Cast, StrCast } from "../../new_fields/Types"; +import { Cast, StrCast, ScriptCast } from "../../new_fields/Types";  import { URLField } from "../../new_fields/URLField";  import { emptyFunction } from "../../Utils";  import { CollectionDockingView } from "../views/collections/CollectionDockingView"; @@ -13,6 +13,7 @@ import { Docs } from "../documents/Documents";  import { ScriptField } from "../../new_fields/ScriptField";  import { List } from "../../new_fields/List";  import { PrefetchProxy } from "../../new_fields/Proxy"; +import { listSpec } from "../../new_fields/Schema";  export type dropActionType = "alias" | "copy" | undefined;  export function SetupDrag( @@ -207,7 +208,6 @@ export namespace DragManager {          }          draggedDocuments: Doc[];          droppedDocuments: Doc[]; -        removeDropProperties: string[] = [];          offset: number[];          dropAction: dropActionType;          userDropAction: dropActionType; @@ -234,17 +234,18 @@ export namespace DragManager {      export let StartDragFunctions: (() => void)[] = []; -    export function StartDocumentDrag(eles: HTMLElement[], dragData: DocumentDragData, downX: number, downY: number, options?: DragOptions) { +    export async function StartDocumentDrag(eles: HTMLElement[], dragData: DocumentDragData, downX: number, downY: number, options?: DragOptions) {          runInAction(() => StartDragFunctions.map(func => func())); +        await dragData.draggedDocuments.map(d => d.dragFactory);          StartDrag(eles, dragData, downX, downY, options, options && options.finishDrag ? options.finishDrag :              (dropData: { [id: string]: any }) => { -                (dropData.droppedDocuments = dragData.userDropAction === "alias" || (!dragData.userDropAction && dragData.dropAction === "alias") ? -                    dragData.draggedDocuments.map(d => Doc.MakeAlias(d)) : -                    dragData.userDropAction === "copy" || (!dragData.userDropAction && dragData.dropAction === "copy") ? -                        dragData.draggedDocuments.map(d => Doc.MakeCopy(d, true)) : -                        dragData.draggedDocuments +                (dropData.droppedDocuments = +                    dragData.draggedDocuments.map(d => ScriptCast(d.onDragStart) ? ScriptCast(d.onDragStart).script.run({ this: d }).result : +                        dragData.userDropAction === "alias" || (!dragData.userDropAction && dragData.dropAction === "alias") ? Doc.MakeAlias(d) : +                            dragData.userDropAction === "copy" || (!dragData.userDropAction && dragData.dropAction === "copy") ? Doc.MakeCopy(d, true) : d)                  ); -                dragData.removeDropProperties.map(prop => dropData.droppedDocuments.map((d: Doc) => d[prop] = undefined)); +                dropData.droppedDocuments.forEach((drop: Doc, i: number) => +                    Cast(dragData.draggedDocuments[i].removeDropProperties, listSpec("string"), []).map(prop => drop[prop] = undefined));              });      }  | 
