import { action, observable } from "mobx"; import { observer } from "mobx-react"; import { DocumentView } from "./DocumentView"; import { LinkBox } from "./LinkBox"; import { LinkEditor } from "./LinkEditor"; import './LinkMenu.scss'; import React = require("react"); import { Doc, DocListCast } from "../../../new_fields/Doc"; import { Cast, FieldValue, StrCast } from "../../../new_fields/Types"; import { Id } from "../../../new_fields/FieldSymbols"; import { LinkManager, LinkUtils } from "../../util/LinkManager"; import { number, string } from "prop-types"; import { listSpec } from "../../../new_fields/Schema"; import { Utils } from "../../../Utils"; interface Props { docView: DocumentView; changeFlyout: () => void; } @observer export class LinkMenu extends React.Component { @observable private _editingLink?: Doc; // renderLinkItems(links: Doc[], key: string, type: string) { // return links.map(link => { // let doc = FieldValue(Cast(link[key], Doc)); // if (doc) { // return this._editingLink = link)} type={type} />; // } // }); // } renderLinkGroupItems(links: Doc[]) { let source = this.props.docView.Document; return links.map(link => { let destination = LinkUtils.findOppositeAnchor(link, source); let doc = FieldValue(Cast(destination, Doc)); if (doc) { return this._editingLink = link)} type={""} />; } }); } renderLinkItems = (links: Map>): Array => { let linkItems: Array = []; links.forEach((links, group) => { linkItems.push(

{group}:

{this.renderLinkGroupItems(links)}
) }); if (linkItems.length === 0) { linkItems.push(

no links have been created yet

); } return linkItems; } render() { //get list of links from document // let linkFrom = DocListCast(this.props.docView.props.Document.linkedFromDocs); // let linkTo = DocListCast(this.props.docView.props.Document.linkedToDocs); let related = LinkManager.Instance.findRelatedGroupedLinks(this.props.docView.props.Document); if (this._editingLink === undefined) { return (
{/* */}
{/* {this.renderLinkItems(linkTo, "linkedTo", "Destination: ")} {this.renderLinkItems(linkFrom, "linkedFrom", "Source: ")} */} {this.renderLinkItems(related)}
); } else { // let groups = new Map(); // let metadata: Map> = new Map(); // let groupList = (Doc.AreProtosEqual(this.props.docView.props.Document, Cast(this._editingLink.anchor1, Doc, new Doc))) ? // Cast(this._editingLink.anchor1Groups, listSpec(Doc), []) : Cast(this._editingLink.anchor2Groups, listSpec(Doc), []); // groupList.forEach(groupDoc => { // if (groupDoc instanceof Doc) { // let id = Utils.GenerateGuid(); // groups.set(id, groupDoc); // let metadataMap = new Map(); // let metadataDocs = Cast(groupDoc.proto!.metadata, listSpec(Doc), []); // metadataDocs.forEach(mdDoc => { // if (mdDoc && mdDoc instanceof Doc) { // TODO: handle promise doc // metadataMap.set(Utils.GenerateGuid(), mdDoc); // } // }) // metadata.set(id, metadataMap); // } // }) return ( this._editingLink = undefined)}> ); } } }