diff options
-rw-r--r-- | src/client/views/collections/CollectionFreeFormView.tsx | 14 | ||||
-rw-r--r-- | src/client/views/nodes/LinkBox.tsx | 5 | ||||
-rw-r--r-- | src/client/views/nodes/LinkMenu.scss | 6 | ||||
-rw-r--r-- | src/client/views/nodes/LinkMenu.tsx | 58 |
4 files changed, 37 insertions, 46 deletions
diff --git a/src/client/views/collections/CollectionFreeFormView.tsx b/src/client/views/collections/CollectionFreeFormView.tsx index ab6b9d533..cd5f92623 100644 --- a/src/client/views/collections/CollectionFreeFormView.tsx +++ b/src/client/views/collections/CollectionFreeFormView.tsx @@ -62,12 +62,14 @@ export class CollectionFreeFormView extends CollectionViewBase { super.drop(e, de); const docView: DocumentView = de.data["documentView"]; let doc: Document = docView ? docView.props.Document : de.data["document"]; - let screenX = de.x - (de.data["xOffset"] as number || 0); - let screenY = de.y - (de.data["yOffset"] as number || 0); - const [x, y] = this.getTransform().transformPoint(screenX, screenY); - doc.SetNumber(KeyStore.X, x); - doc.SetNumber(KeyStore.Y, y); - this.bringToFront(doc); + if (doc) { + let screenX = de.x - (de.data["xOffset"] as number || 0); + let screenY = de.y - (de.data["yOffset"] as number || 0); + const [x, y] = this.getTransform().transformPoint(screenX, screenY); + doc.SetNumber(KeyStore.X, x); + doc.SetNumber(KeyStore.Y, y); + this.bringToFront(doc); + } } @observable diff --git a/src/client/views/nodes/LinkBox.tsx b/src/client/views/nodes/LinkBox.tsx index c7911f554..69df676ff 100644 --- a/src/client/views/nodes/LinkBox.tsx +++ b/src/client/views/nodes/LinkBox.tsx @@ -10,6 +10,7 @@ import { Document } from "../../../fields/Document"; import { ListField } from "../../../fields/ListField"; import { DocumentManager } from "../../util/DocumentManager"; import { LinkEditor } from "./LinkEditor"; +import { CollectionDockingView } from "../collections/CollectionDockingView"; interface Props { linkDoc: Document; @@ -28,6 +29,8 @@ export class LinkBox extends React.Component<Props> { let docView = DocumentManager.Instance.getDocumentView(this.props.pairedDoc); if (docView) { docView.props.focus(this.props.pairedDoc); + } else { + CollectionDockingView.Instance.AddRightSplit(this.props.pairedDoc) } } @@ -66,7 +69,7 @@ export class LinkBox extends React.Component<Props> { return ( //<LinkEditor linkBox={this} linkDoc={this.props.linkDoc} /> <div className="link-container"> - <div className="info-container"> + <div className="info-container" onPointerDown={this.onViewButtonPressed}> <div className="link-name"> <p>{this.props.linkName}</p> </div> diff --git a/src/client/views/nodes/LinkMenu.scss b/src/client/views/nodes/LinkMenu.scss index af5b84ec6..a120ab2a7 100644 --- a/src/client/views/nodes/LinkMenu.scss +++ b/src/client/views/nodes/LinkMenu.scss @@ -1,18 +1,18 @@ -#menu-container { +#linkMenu-container { width: 100%; height: auto; display: flex; flex-direction: column; } -#search-bar { +#linkMenu-searchBar { width: 100%; padding: 5px; margin-bottom: 10px; font-size: 12px; } -#link-list { +#linkMenu-list { margin-top: 5px; width: 100%; height: 100px; diff --git a/src/client/views/nodes/LinkMenu.tsx b/src/client/views/nodes/LinkMenu.tsx index 9a95a4f09..5c6b06d00 100644 --- a/src/client/views/nodes/LinkMenu.tsx +++ b/src/client/views/nodes/LinkMenu.tsx @@ -1,17 +1,15 @@ -import { observable, computed, action } from "mobx"; -import React = require("react"); -import { SelectionManager } from "../../util/SelectionManager"; +import { action, observable } from "mobx"; import { observer } from "mobx-react"; -import './LinkMenu.scss' -import { KeyStore } from '../../../fields/KeyStore' -import { props } from "bluebird"; -import { DocumentView } from "./DocumentView"; -import { LinkBox } from "./LinkBox" import { Document } from "../../../fields/Document"; -import { ListField } from "../../../fields/ListField"; -import { TextField } from "../../../fields/TextField"; import { FieldWaiting } from "../../../fields/Field"; +import { Key } from "../../../fields/Key"; +import { KeyStore } from '../../../fields/KeyStore'; +import { ListField } from "../../../fields/ListField"; +import { DocumentView } from "./DocumentView"; +import { LinkBox } from "./LinkBox"; import { LinkEditor } from "./LinkEditor"; +import './LinkMenu.scss'; +import React = require("react"); interface Props { docView: DocumentView; @@ -23,39 +21,27 @@ export class LinkMenu extends React.Component<Props> { @observable private _editingLink?: Document; + renderLinkItems(links: Document[], key: Key, type: string) { + return links.map(link => { + let doc = link.GetT(key, Document); + if (doc && doc != FieldWaiting) { + return <LinkBox key={doc.Id} linkDoc={link} linkName={link.Title} pairedDoc={doc} showEditor={action(() => this._editingLink = link)} type={type} /> + } + }) + } + render() { //get list of links from document let linkFrom: Document[] = this.props.docView.props.Document.GetData(KeyStore.LinkedFromDocs, ListField, []); let linkTo: Document[] = this.props.docView.props.Document.GetData(KeyStore.LinkedToDocs, ListField, []); if (this._editingLink === undefined) { return ( - - <div id="menu-container"> - <input id="search-bar" type="text" placeholder="Search..."></input> - <div id="link-list"> - - {linkTo.map(link => { - let name = link.GetData(KeyStore.Title, TextField, new String); - let doc = link.GetT(KeyStore.LinkedToDocs, Document); - if (doc && doc != FieldWaiting) { - return <LinkBox linkDoc={link} linkName={name} pairedDoc={doc} showEditor={action(() => this._editingLink = link)} type={"Destination: "} /> - } else { - return <div></div> - } - - })} - - {linkFrom.map(link => { - let name = link.GetData(KeyStore.Title, TextField, new String); - let doc = link.GetT(KeyStore.LinkedFromDocs, Document); - if (doc && doc != FieldWaiting) { - return <LinkBox linkDoc={link} linkName={name} pairedDoc={doc} showEditor={action(() => this._editingLink = link)} type={"Source: "} /> - } else { - return <div></div> - } - })} + <div id="linkMenu-container"> + <input id="linkMenu-searchBar" type="text" placeholder="Search..."></input> + <div id="linkMenu-list"> + {this.renderLinkItems(linkTo, KeyStore.LinkedToDocs, "Source: ")} + {this.renderLinkItems(linkFrom, KeyStore.LinkedFromDocs, "Destination: ")} </div> - </div> ) } else { |