aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFawn <fangrui_tong@brown.edu>2019-06-13 18:07:35 -0400
committerFawn <fangrui_tong@brown.edu>2019-06-13 18:07:35 -0400
commit8bcd3567df7c49523638f0b935ecd09b1acad45d (patch)
tree2ab4f174a1f19c1b79f9e3f0b634a2cb6a2463fb
parent0d0782362d4549b80c27c3ce5d8439c2f6fa4d7b (diff)
cannot create the same link twice
-rw-r--r--src/client/documents/Documents.ts1
-rw-r--r--src/client/util/LinkManager.ts10
2 files changed, 11 insertions, 0 deletions
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index 9517cbbda..9cb41aecc 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -86,6 +86,7 @@ const delegateKeys = ["x", "y", "width", "height", "panX", "panY"];
export namespace DocUtils {
export function MakeLink(source: Doc, target: Doc) {
+ if (LinkManager.Instance.doesLinkExist(source, target)) return;
// let protoSrc = source.proto ? source.proto : source;
// let protoTarg = target.proto ? target.proto : target;
UndoManager.RunInBatch(() => {
diff --git a/src/client/util/LinkManager.ts b/src/client/util/LinkManager.ts
index 2f40c77e7..929fcbf21 100644
--- a/src/client/util/LinkManager.ts
+++ b/src/client/util/LinkManager.ts
@@ -10,6 +10,7 @@ import { Doc } from "../../new_fields/Doc";
import { listSpec } from "../../new_fields/Schema";
import { List } from "../../new_fields/List";
import { string } from "prop-types";
+import { Docs } from "../documents/Documents";
export namespace LinkUtils {
export function findOppositeAnchor(link: Doc, anchor: Doc): Doc {
@@ -179,4 +180,13 @@ export class LinkManager {
}
}
+ public doesLinkExist(anchor1: Doc, anchor2: Doc) {
+ let allLinks = LinkManager.Instance.allLinks;
+ let index = allLinks.findIndex(linkDoc => {
+ return (Doc.AreProtosEqual(Cast(linkDoc.anchor1, Doc, new Doc), anchor1) && Doc.AreProtosEqual(Cast(linkDoc.anchor2, Doc, new Doc), anchor2)) ||
+ (Doc.AreProtosEqual(Cast(linkDoc.anchor1, Doc, new Doc), anchor2) && Doc.AreProtosEqual(Cast(linkDoc.anchor2, Doc, new Doc), anchor1));
+ });
+ return index !== -1;
+ }
+
} \ No newline at end of file