aboutsummaryrefslogtreecommitdiff
path: root/src/new_fields/Doc.ts
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-04-27 16:07:40 -0400
committerTyler Schicke <tyler_schicke@brown.edu>2019-04-27 16:07:40 -0400
commit430c14fe9d059ea3f7905d30500ba53f4fc288b9 (patch)
tree50ab3d02c3003c675409c2d8f3044b149da13627 /src/new_fields/Doc.ts
parent513e9042ea815e964462e824d85fbd229381250f (diff)
Drag manager
Diffstat (limited to 'src/new_fields/Doc.ts')
-rw-r--r--src/new_fields/Doc.ts28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/new_fields/Doc.ts b/src/new_fields/Doc.ts
index a1515fe49..fb7b6e360 100644
--- a/src/new_fields/Doc.ts
+++ b/src/new_fields/Doc.ts
@@ -34,6 +34,13 @@ export class ObjectField {
readonly [Id] = "";
}
+export namespace ObjectField {
+ export function MakeCopy(field: ObjectField) {
+ //TODO Types
+ return field;
+ }
+}
+
export function IsField(field: any): field is Field {
return (typeof field === "string")
|| (typeof field === "number")
@@ -137,6 +144,27 @@ export namespace Doc {
return alias;
}
+ export function MakeCopy(doc: Doc, copyProto: boolean = false): Doc {
+ const copy = new Doc;
+ Object.keys(doc).forEach(async key => {
+ const field = await doc[key];
+ if (key === "proto" && copyProto) {
+ if (field instanceof Doc) {
+ copy[key] = Doc.MakeCopy(field);
+ }
+ } else {
+ if (field instanceof RefField) {
+ copy[key] = field;
+ } else if (field instanceof ObjectField) {
+ copy[key] = ObjectField.MakeCopy(field);
+ } else {
+ copy[key] = field;
+ }
+ }
+ })
+ return copy;
+ }
+
export function MakeLink(source: Doc, target: Doc): Doc {
let linkDoc = new Doc;
UndoManager.RunInBatch(() => {