aboutsummaryrefslogtreecommitdiff
path: root/src/client/util/LinkManager.ts
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2023-11-08 12:55:59 -0500
committerbobzel <zzzman@gmail.com>2023-11-08 12:55:59 -0500
commit216385c7e84febce8988ef1390845b0c661fb04f (patch)
tree0719376e773f2fc46db688015b474de7089b5a1e /src/client/util/LinkManager.ts
parenta6cc25e5d03ffed16bfaa32e48e9cc2eaff7deaf (diff)
fixed bug where tableBox's didn't render all of the rows they receive. lots of code cleanup -- moving things from Doc.ts to better locations. Changed overlays and published docs to be local to their dashboard. changed treeview icons.
Diffstat (limited to 'src/client/util/LinkManager.ts')
-rw-r--r--src/client/util/LinkManager.ts32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/client/util/LinkManager.ts b/src/client/util/LinkManager.ts
index ba53a760f..608184596 100644
--- a/src/client/util/LinkManager.ts
+++ b/src/client/util/LinkManager.ts
@@ -197,14 +197,32 @@ export class LinkManager {
}
// finds the opposite anchor of a given anchor in a link
- //TODO This should probably return undefined if there isn't an opposite anchor
- //TODO This should also await the return value of the anchor so we don't filter out promises
public static getOppositeAnchor(linkDoc: Doc, anchor: Doc): Doc | undefined {
- const a1 = Cast(linkDoc.link_anchor_1, Doc, null);
- const a2 = Cast(linkDoc.link_anchor_2, Doc, null);
- if (Doc.AreProtosEqual(DocCast(anchor.annotationOn, anchor), DocCast(a1?.annotationOn, a1))) return a2;
- if (Doc.AreProtosEqual(DocCast(anchor.annotationOn, anchor), DocCast(a2?.annotationOn, a2))) return a1;
- if (Doc.AreProtosEqual(anchor, linkDoc)) return linkDoc;
+ const id = LinkManager.anchorIndex(linkDoc, anchor);
+ const a1 = DocCast(linkDoc.link_anchor_1);
+ const a2 = DocCast(linkDoc.link_anchor_2);
+ return id === '1' ? a2 : id === '2' ? a1 : id === '0' ? linkDoc : undefined;
+ // if (Doc.AreProtosEqual(DocCast(anchor.annotationOn, anchor), DocCast(a1?.annotationOn, a1))) return a2;
+ // if (Doc.AreProtosEqual(DocCast(anchor.annotationOn, anchor), DocCast(a2?.annotationOn, a2))) return a1;
+ // if (Doc.AreProtosEqual(anchor, linkDoc)) return linkDoc;
+ }
+ public static anchorIndex(linkDoc: Doc, anchor: Doc) {
+ const a1 = DocCast(linkDoc.link_anchor_1);
+ const a2 = DocCast(linkDoc.link_anchor_2);
+ if (linkDoc.link_matchEmbeddings) {
+ return [a2, a2.annotationOn].includes(anchor) ? '2' : '1';
+ }
+ if (Doc.AreProtosEqual(DocCast(anchor.annotationOn, anchor), DocCast(a1?.annotationOn, a1))) return '1';
+ if (Doc.AreProtosEqual(DocCast(anchor.annotationOn, anchor), DocCast(a2?.annotationOn, a2))) return '2';
+ if (Doc.AreProtosEqual(anchor, linkDoc)) return '0';
+
+ // const a1 = DocCast(linkDoc.link_anchor_1);
+ // const a2 = DocCast(linkDoc.link_anchor_2);
+ // if (linkDoc.link_matchEmbeddings) {
+ // return [a2, a2.annotationOn].includes(anchor) ? '2' : '1';
+ // }
+ // if (Doc.AreProtosEqual(a2, anchor) || Doc.AreProtosEqual(a2.annotationOn as Doc, anchor)) return '2';
+ // return Doc.AreProtosEqual(a1, anchor) || Doc.AreProtosEqual(a1.annotationOn as Doc, anchor) ? '1' : '2';
}
}