aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/util/LinkManager.ts27
-rw-r--r--src/client/views/nodes/LinkEditor.tsx20
2 files changed, 42 insertions, 5 deletions
diff --git a/src/client/util/LinkManager.ts b/src/client/util/LinkManager.ts
index cc8617052..02ecec88a 100644
--- a/src/client/util/LinkManager.ts
+++ b/src/client/util/LinkManager.ts
@@ -134,6 +134,33 @@ export class LinkManager {
return anchorGroups;
}
+ public findMetadataInGroup(groupType: string) {
+ let md: Doc[] = [];
+ let allLinks = LinkManager.Instance.allLinks;
+ // for every link find its groups
+ // allLinks.forEach(linkDoc => {
+ // let anchor1groups = LinkManager.Instance.findRelatedGroupedLinks(Cast(linkDoc["anchor1"], Doc, new Doc));
+ // if (anchor1groups.get(groupType)) {
+ // md.push(linkDoc["anchor1"]["group"])
+ // }
+ // })
+ allLinks.forEach(linkDoc => {
+ let anchor1Groups = Cast(linkDoc["anchor1Groups"], listSpec(Doc), []);
+ let anchor2Groups = Cast(linkDoc["anchor2Groups"], listSpec(Doc), []);
+ [...anchor1Groups, ...anchor2Groups].forEach(groupDoc => {
+ if (groupDoc instanceof Doc) {
+ if (StrCast(groupDoc["type"]) === groupType) {
+ md.push(Cast(groupDoc["metadata"], Doc, new Doc));
+ }
+ } else {
+ // TODO: promise
+ }
+ })
+
+ })
+ return md;
+ }
+
public deleteGroup(groupType: string) {
let deleted = LinkManager.Instance.allGroups.delete(groupType);
if (deleted) {
diff --git a/src/client/views/nodes/LinkEditor.tsx b/src/client/views/nodes/LinkEditor.tsx
index 3886687f1..8860ac582 100644
--- a/src/client/views/nodes/LinkEditor.tsx
+++ b/src/client/views/nodes/LinkEditor.tsx
@@ -175,9 +175,14 @@ export class LinkEditor extends React.Component<LinkEditorProps> {
})
if (index === -1) {
// create new document for group
+ let mdDoc = Docs.TextDocument();
+ mdDoc.proto!.anchor1 = this.props.sourceDoc["title"];
+ mdDoc.proto!.anchor2 = LinkUtils.findOppositeAnchor(this.props.linkDoc, this.props.sourceDoc)["title"];
+
let groupDoc = Docs.TextDocument();
groupDoc.proto!.type = "New Group";
- // groupDoc.proto!.metadata = Docs.TextDocument();
+ groupDoc.proto!.metadata = mdDoc;
+
this._groups.set(Utils.GenerateGuid(), groupDoc);
@@ -277,19 +282,23 @@ export class LinkEditor extends React.Component<LinkEditorProps> {
// // LinkUtils.setAnchorGroups(this.props.linkDoc, oppAnchor, [oppGroupDoc]);
// } else {
let thisGroupDoc = this._groups.get(groupId);
+ let thisMdDoc = Cast(thisGroupDoc!["metadata"], Doc, new Doc);
let newGroupDoc = Docs.TextDocument();
- newGroupDoc.proto!.type = groupType;
+ let newMdDoc = Docs.TextDocument();
let keys = LinkManager.Instance.allGroups.get(groupType);
if (keys) {
keys.forEach(key => {
if (thisGroupDoc) { // TODO: clean
- let val = thisGroupDoc[key] === undefined ? "" : StrCast(thisGroupDoc[key]);
- newGroupDoc[key] = val;
+ let val = thisMdDoc[key] === undefined ? "" : StrCast(thisMdDoc[key]);
+ newMdDoc[key] = val;
}
// mdDoc[key] === undefined) ? "" : StrCast(mdDoc[key])
// oppGroupDoc[key] = thisGroupDoc[key];
})
}
+ newGroupDoc.proto!.type = groupType;
+ newGroupDoc.proto!.metadata = newMdDoc;
+
LinkUtils.setAnchorGroups(this.props.linkDoc, oppAnchor, [newGroupDoc]); // TODO: fix to append to list
// }
@@ -326,7 +335,8 @@ export class LinkEditor extends React.Component<LinkEditorProps> {
let groupDoc = this._groups.get(groupId);
if (keys && groupDoc) {
console.log("keys:", ...keys);
- let createTable = action(() => Docs.SchemaDocument(keys!, [Cast(groupDoc!["metadata"], Doc, new Doc)], { width: 200, height: 200, title: groupType + " table" }));
+ let docs: Doc[] = LinkManager.Instance.findMetadataInGroup(groupType);
+ let createTable = action(() => Docs.SchemaDocument(["anchor1", "anchor2", ...keys!], docs, { width: 200, height: 200, title: groupType + " table" }));
let ref = React.createRef<HTMLDivElement>();
return <div ref={ref}><button onPointerDown={SetupDrag(ref, createTable)}>:)</button></div>
} else {