aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx
diff options
context:
space:
mode:
authorFawn <fangrui_tong@brown.edu>2019-06-21 16:27:03 -0400
committerFawn <fangrui_tong@brown.edu>2019-06-21 16:27:03 -0400
commita4b34adcb34184728be0b69b33a561f6d10f0a98 (patch)
tree8989f1245740fa0bac8a1542e619eaff08fe56f2 /src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx
parent60f9122ea31d660d60d5429890c4eb0ef6d8613b (diff)
can drag just a group of links on a doc
Diffstat (limited to 'src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx')
-rw-r--r--src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx148
1 files changed, 18 insertions, 130 deletions
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx
index 9d2f8946b..854122592 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinksView.tsx
@@ -1,4 +1,4 @@
-import { computed, IReactionDisposer, reaction, action } from "mobx";
+import { computed, IReactionDisposer, reaction } from "mobx";
import { observer } from "mobx-react";
import { Doc, DocListCast } from "../../../../new_fields/Doc";
import { Id } from "../../../../new_fields/FieldSymbols";
@@ -11,10 +11,6 @@ import { CollectionViewProps } from "../CollectionSubView";
import "./CollectionFreeFormLinksView.scss";
import { CollectionFreeFormLinkView } from "./CollectionFreeFormLinkView";
import React = require("react");
-import { CollectionFreeFormLinkWithProxyView } from "./CollectionFreeFormLinkWithProxyView";
-import { Docs } from "../../../documents/Documents";
-import { LinkButtonField } from "../../../../new_fields/LinkButtonField";
-import { LinkManager } from "../../../util/LinkManager";
@observer
export class CollectionFreeFormLinksView extends React.Component<CollectionViewProps> {
@@ -98,150 +94,42 @@ export class CollectionFreeFormLinksView extends React.Component<CollectionViewP
@computed
get uniqueConnections() {
- // console.log("\n");
- let connections = DocumentManager.Instance.LinkedDocumentViews.reduce((drawnPairs, connection) => {
- // console.log("CONNECTION BETWEEN", StrCast(connection.anchor1View.props.Document.title), StrCast(connection.anchor2View.props.Document.title));
- let srcViews = this.documentAnchors(connection.anchor1View);
- // srcViews.forEach(sv => {
- // console.log("DOCANCHORS SRC", StrCast(connection.anchor1View.Document.title), StrCast(sv.Document.title));
- // });
-
- let targetViews = this.documentAnchors(connection.anchor2View);
- // targetViews.forEach(sv => {
- // console.log("DOCANCHORS TARG", StrCast(connection.anchor2View.Document.title), StrCast(sv.Document.title));
- // });
-
- // console.log("lengths", srcViews.length, targetViews.length);
+ // DocumentManager.Instance.LinkedDocumentViews.forEach(d => {
+ // console.log("CONNECTION", StrCast(d.a.props.Document.title), StrCast(d.b.props.Document.title));
+ // });
- // srcViews.forEach(v => {
- // console.log("SOURCE VIEW", StrCast(v.props.Document.title));
- // });
- // targetViews.forEach(v => {
- // console.log("TARGET VIEW", StrCast(v.Document.title));
- // });
-
- let possiblePairs: { anchor1: Doc, anchor2: Doc }[] = [];
- // srcViews.map(sv => {
- // console.log("SOURCE VIEW", StrCast(sv.props.Document.title));
- // targetViews.map(tv => {
- // console.log("TARGET VIEW", StrCast(tv.props.Document.title));
- // // console.log("PUSHING PAIR", StrCast(sv.props.Document.title), StrCast(tv.props.Document.title));
- // possiblePairs.push({ anchor1: sv.props.Document, anchor2: tv.props.Document });
- // });
- // console.log("END\n");
- // });
- srcViews.forEach(sv => {
- // console.log("SOURCE VIEW", StrCast(sv.props.Document.title));
- targetViews.forEach(tv => {
- // console.log("TARGET VIEW", StrCast(tv.props.Document.title));
- // console.log("PUSHING PAIR", StrCast(sv.props.Document.title), StrCast(tv.props.Document.title));
- possiblePairs.push({ anchor1: sv.props.Document, anchor2: tv.props.Document });
- });
- // console.log("END\n");
- });
- // console.log("POSSIBLE PAIRS LENGTH", possiblePairs.length);
+ let connections = DocumentManager.Instance.LinkedDocumentViews.reduce((drawnPairs, connection) => {
+ let srcViews = this.documentAnchors(connection.a);
+ let targetViews = this.documentAnchors(connection.b);
+ let possiblePairs: { a: Doc, b: Doc, }[] = [];
+ srcViews.map(sv => targetViews.map(tv => possiblePairs.push({ a: sv.props.Document, b: tv.props.Document })));
possiblePairs.map(possiblePair => {
- // console.log("POSSIBLEPAIR", StrCast(possiblePair.anchor1.title), StrCast(possiblePair.anchor2.title));
if (!drawnPairs.reduce((found, drawnPair) => {
- let match1 = (Doc.AreProtosEqual(possiblePair.anchor1, drawnPair.anchor1) && Doc.AreProtosEqual(possiblePair.anchor2, drawnPair.anchor2));
- let match2 = (Doc.AreProtosEqual(possiblePair.anchor1, drawnPair.anchor2) && Doc.AreProtosEqual(possiblePair.anchor2, drawnPair.anchor1));
+ let match1 = (Doc.AreProtosEqual(possiblePair.a, drawnPair.a) && Doc.AreProtosEqual(possiblePair.b, drawnPair.b));
+ let match2 = (Doc.AreProtosEqual(possiblePair.a, drawnPair.b) && Doc.AreProtosEqual(possiblePair.b, drawnPair.a));
let match = match1 || match2;
- if (match && !drawnPair.linkDocs.reduce((found, link) => found || link[Id] === connection.linkDoc[Id], false)) {
- drawnPair.linkDocs.push(connection.linkDoc);
+ if (match && !drawnPair.l.reduce((found, link) => found || link[Id] === connection.l[Id], false)) {
+ drawnPair.l.push(connection.l);
}
return match || found;
}, false)) {
- drawnPairs.push({ anchor1: possiblePair.anchor1, anchor2: possiblePair.anchor2, linkDocs: [connection.linkDoc] });
+ drawnPairs.push({ a: possiblePair.a, b: possiblePair.b, l: [connection.l] });
}
});
return drawnPairs;
- }, [] as { anchor1: Doc, anchor2: Doc, linkDocs: Doc[] }[]);
+ }, [] as { a: Doc, b: Doc, l: Doc[] }[]);
return connections.map(c => {
- let x = c.linkDocs.reduce((p, l) => p + l[Id], "");
- return <CollectionFreeFormLinkView key={x} sourceView={c.anchor1} targetView={c.anchor2} />;
+ let x = c.l.reduce((p, l) => p + l[Id], "");
+ return <CollectionFreeFormLinkView key={x} A={c.a} B={c.b} LinkDocs={c.l}
+ removeDocument={this.props.removeDocument} addDocument={this.props.addDocument} />;
});
}
- // findUniquePairs = (): JSX.Element[] => {
- // let connections = DocumentManager.Instance.LinkedDocumentViews;
-
- // // console.log("CONNECTIONS");
- // // connections.forEach(c => console.log(StrCast(c.anchor1View.Document.title), StrCast(c.anchor2View.Document.title)));
-
- // let unique: Set<{ sourceView: DocumentView, targetView: DocumentView, linkDoc: Doc }> = new Set();
- // connections.forEach(c => {
-
- // // let match1Index = unique.findIndex(u => (c.anchor1View === u.sourceView) && (c.anchor2View === u.targetView));
- // // let match2Index = unique.findIndex(u => (c.anchor1View === u.targetView) && (c.anchor2View === u.sourceView));
- // let match1 = unique.has({ sourceView: c.anchor1View, targetView: c.anchor2View, linkDoc: c.linkDoc });
- // let match2 = unique.has({ sourceView: c.anchor2View, targetView: c.anchor1View, linkDoc: c.linkDoc });
- // let sameContext = c.anchor1View.props.ContainingCollectionView === c.anchor2View.props.ContainingCollectionView;
-
- // // console.log("CONNECTION", StrCast(c.anchor1View.props.Document.title), StrCast(c.anchor2View.props.Document.title), match1, match2);
-
-
- // // if in same context, push if docview pair does not already exist
- // // else push both directions of pair
- // if (sameContext) {
- // if (!(match1 || match2)) unique.add({ sourceView: c.anchor1View, targetView: c.anchor2View, linkDoc: c.linkDoc });
- // } else {
- // unique.add({ sourceView: c.anchor1View, targetView: c.anchor2View, linkDoc: c.linkDoc });
- // unique.add({ sourceView: c.anchor2View, targetView: c.anchor1View, linkDoc: c.linkDoc });
- // }
- // });
-
- // let uniqueList: JSX.Element[] = [];
- // unique.forEach(u => {
- // // TODO: make better key
- // let key = StrCast(u.sourceView.Document[Id]) + "-link-" + StrCast(u.targetView.Document[Id]) + "-" + Date.now() + Math.random();
- // let sourceIn = u.sourceView.props.ContainingCollectionView ? u.sourceView.props.ContainingCollectionView.props.Document === this.props.Document : false;
- // let targetIn = u.targetView.props.ContainingCollectionView ? u.targetView.props.ContainingCollectionView.props.Document === this.props.Document : false;
- // let sameContext = u.sourceView.props.ContainingCollectionView === u.targetView.props.ContainingCollectionView;
- // let inContainer = sameContext ? sourceIn || targetIn : sourceIn;
-
- // if (inContainer) {
- // // let alias = Doc.MakeAlias(proxy);
- // if (sameContext) {
- // uniqueList.push(<CollectionFreeFormLinkView key={key} sourceView={u.sourceView} targetView={u.targetView} />);
- // } else {
- // let proxy = LinkManager.Instance.findLinkProxy(StrCast(u.sourceView.props.Document[Id]), StrCast(u.targetView.props.Document[Id]));
- // if (!proxy) {
- // proxy = Docs.LinkButtonDocument(
- // { sourceViewId: StrCast(u.sourceView.props.Document[Id]), targetViewId: StrCast(u.targetView.props.Document[Id]) },
- // { width: 200, height: 100, borderRounding: 0 });
- // let proxy1Proto = Doc.GetProto(proxy);
- // proxy1Proto.sourceViewId = StrCast(u.sourceView.props.Document[Id]);
- // proxy1Proto.targetViewId = StrCast(u.targetView.props.Document[Id]);
- // proxy1Proto.isLinkButton = true;
-
- // // LinkManager.Instance.linkProxies.push(proxy);
- // LinkManager.Instance.addLinkProxy(proxy);
- // }
- // uniqueList.push(<CollectionFreeFormLinkWithProxyView key={key} sourceView={u.sourceView} targetView={u.targetView} proxyDoc={proxy} />);
-
- // // let proxy = LinkManager.Instance.findLinkProxy(StrCast(u.sourceView.props.Document[Id]), StrCast(u.targetView.props.Document[Id]));
- // // if (proxy) {
- // // this.props.addDocument(proxy, false);
- // // uniqueList.push(<CollectionFreeFormLinkWithProxyView key={key} sourceView={u.sourceView} targetView={u.targetView} />);
- // // }
- // // let proxyKey = Doc.AreProtosEqual(u.sourceView.Document, Cast(u.linkDoc.anchor1, Doc, new Doc)) ? "proxy1" : "proxy2";
- // // let proxy = Cast(u.linkDoc[proxyKey], Doc, new Doc);
- // // this.props.addDocument(proxy, false);
-
- // // uniqueList.push(<CollectionFreeFormLinkWithProxyView key={key} sourceView={u.sourceView} targetView={u.targetView}
- // // proxyDoc={proxy} addDocTab={this.props.addDocTab} />);
- // }
- // }
- // });
- // return uniqueList;
- // }
-
render() {
return (
<div className="collectionfreeformlinksview-container">
<svg className="collectionfreeformlinksview-svgCanvas">
{this.uniqueConnections}
- {/* {this.findUniquePairs()} */}
</svg>
{this.props.children}
</div>