aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/linking/LinkMenuGroup.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/linking/LinkMenuGroup.tsx')
-rw-r--r--src/client/views/linking/LinkMenuGroup.tsx71
1 files changed, 41 insertions, 30 deletions
diff --git a/src/client/views/linking/LinkMenuGroup.tsx b/src/client/views/linking/LinkMenuGroup.tsx
index fa6a2f506..d02a1c4eb 100644
--- a/src/client/views/linking/LinkMenuGroup.tsx
+++ b/src/client/views/linking/LinkMenuGroup.tsx
@@ -1,20 +1,20 @@
-import { observer } from "mobx-react";
-import { observable, action } from "mobx";
-import { Doc, StrListCast } from "../../../fields/Doc";
-import { Id } from "../../../fields/FieldSymbols";
-import { Cast } from "../../../fields/Types";
-import { LinkManager } from "../../util/LinkManager";
-import { DocumentView } from "../nodes/DocumentView";
+import { observer } from 'mobx-react';
+import { observable, action } from 'mobx';
+import { Doc, StrListCast } from '../../../fields/Doc';
+import { Id } from '../../../fields/FieldSymbols';
+import { Cast, DocCast } from '../../../fields/Types';
+import { LinkManager } from '../../util/LinkManager';
+import { DocumentView } from '../nodes/DocumentView';
import './LinkMenu.scss';
-import { LinkMenuItem } from "./LinkMenuItem";
-import React = require("react");
+import { LinkMenuItem } from './LinkMenuItem';
+import React = require('react');
+import { DocumentType } from '../../documents/DocumentTypes';
interface LinkMenuGroupProps {
sourceDoc: Doc;
group: Doc[];
groupType: string;
- clearLinkEditor: () => void;
- showEditor: (linkDoc: Doc) => void;
+ clearLinkEditor?: () => void;
docView: DocumentView;
itemHandler?: (doc: Doc) => void;
}
@@ -26,49 +26,60 @@ export class LinkMenuGroup extends React.Component<LinkMenuGroupProps> {
getBackgroundColor = (): string => {
const linkRelationshipList = StrListCast(Doc.UserDoc().linkRelationshipList);
const linkColorList = StrListCast(Doc.UserDoc().linkColorList);
- let color = "white";
+ let color = 'white';
// if this link's relationship property is not default "link", set its color
if (linkRelationshipList) {
const relationshipIndex = linkRelationshipList.indexOf(this.props.groupType);
const RGBcolor: string = linkColorList[relationshipIndex];
if (RGBcolor) {
//set opacity to 0.25 by modifiying the rgb string
- color = RGBcolor.slice(0, RGBcolor.length - 1) + ", 0.25)";
+ color = RGBcolor.slice(0, RGBcolor.length - 1) + ', 0.25)';
}
}
return color;
- }
+ };
@observable _collapsed = false;
render() {
const set = new Set<Doc>(this.props.group);
const groupItems = Array.from(set.keys()).map(linkDoc => {
- const destination = LinkManager.getOppositeAnchor(linkDoc, this.props.sourceDoc) ||
- LinkManager.getOppositeAnchor(linkDoc, Cast(linkDoc.anchor2, Doc, null).annotationOn === this.props.sourceDoc ? Cast(linkDoc.anchor2, Doc, null) : Cast(linkDoc.anchor1, Doc, null));
- if (destination && this.props.sourceDoc) {
- return <LinkMenuItem key={linkDoc[Id]}
+ const sourceDoc =
+ this.props.docView.anchorViewDoc ??
+ (this.props.docView.rootDoc.type === DocumentType.LINK //
+ ? this.props.docView.props.LayoutTemplateString?.includes('anchor1')
+ ? DocCast(linkDoc.anchor1)
+ : DocCast(linkDoc.anchor2)
+ : this.props.sourceDoc);
+ const destDoc = !sourceDoc
+ ? undefined
+ : this.props.docView.rootDoc.type === DocumentType.LINK
+ ? this.props.docView.props.LayoutTemplateString?.includes('anchor1')
+ ? DocCast(linkDoc.anchor2)
+ : DocCast(linkDoc.anchor1)
+ : LinkManager.getOppositeAnchor(linkDoc, sourceDoc) || LinkManager.getOppositeAnchor(linkDoc, Cast(linkDoc.anchor2, Doc, null).annotationOn === sourceDoc ? Cast(linkDoc.anchor2, Doc, null) : Cast(linkDoc.anchor1, Doc, null));
+ return !destDoc || !sourceDoc ? null : (
+ <LinkMenuItem
+ key={linkDoc[Id]}
itemHandler={this.props.itemHandler}
groupType={this.props.groupType}
docView={this.props.docView}
linkDoc={linkDoc}
- sourceDoc={this.props.sourceDoc}
- destinationDoc={destination}
+ sourceDoc={sourceDoc}
+ destinationDoc={destDoc}
clearLinkEditor={this.props.clearLinkEditor}
- showEditor={this.props.showEditor}
- menuRef={this._menuRef} />;
- }
+ menuRef={this._menuRef}
+ />
+ );
});
return (
<div className="linkMenu-group" ref={this._menuRef}>
- <div className="linkMenu-group-name" onClick={action(() => this._collapsed = !this._collapsed)} style={{ background: this.getBackgroundColor() }}>
- <p className={this.props.groupType === "*" || this.props.groupType === "" ? "" : "expand-one"}> {this.props.groupType}:</p>
+ <div className="linkMenu-group-name" onClick={action(() => (this._collapsed = !this._collapsed))} style={{ background: this.getBackgroundColor() }}>
+ <p className={this.props.groupType === '*' || this.props.groupType === '' ? '' : 'expand-one'}> {this.props.groupType}:</p>
</div>
- {this._collapsed ? (null) : <div className="linkMenu-group-wrapper">
- {groupItems}
- </div>}
- </div >
+ {this._collapsed ? null : <div className="linkMenu-group-wrapper">{groupItems}</div>}
+ </div>
);
}
-} \ No newline at end of file
+}