aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/linking/LinkMenuGroup.tsx
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2022-11-29 12:05:29 -0500
committerbobzel <zzzman@gmail.com>2022-11-29 12:05:29 -0500
commitc6d1059e24f362a167b9ac24e6f13d1e45361da9 (patch)
treea0136cee04608c73f54ac3ecd63bed0307a37fd4 /src/client/views/linking/LinkMenuGroup.tsx
parent1f5db9cfc594dbf337d752ec94dab5fca7d8b6f7 (diff)
changes to streamline link editing UI (got rid of LinkEditor). cleaned up link (un)highlighting.
Diffstat (limited to 'src/client/views/linking/LinkMenuGroup.tsx')
-rw-r--r--src/client/views/linking/LinkMenuGroup.tsx50
1 files changed, 29 insertions, 21 deletions
diff --git a/src/client/views/linking/LinkMenuGroup.tsx b/src/client/views/linking/LinkMenuGroup.tsx
index 9d2082e21..d02a1c4eb 100644
--- a/src/client/views/linking/LinkMenuGroup.tsx
+++ b/src/client/views/linking/LinkMenuGroup.tsx
@@ -2,19 +2,19 @@ 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 { 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 { DocumentType } from '../../documents/DocumentTypes';
interface LinkMenuGroupProps {
sourceDoc: Doc;
group: Doc[];
groupType: string;
clearLinkEditor?: () => void;
- showEditor: (linkDoc: Doc) => void;
docView: DocumentView;
itemHandler?: (doc: Doc) => void;
}
@@ -44,25 +44,33 @@ export class LinkMenuGroup extends React.Component<LinkMenuGroupProps> {
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]}
- itemHandler={this.props.itemHandler}
- groupType={this.props.groupType}
- docView={this.props.docView}
- linkDoc={linkDoc}
- sourceDoc={this.props.sourceDoc}
- destinationDoc={destination}
- clearLinkEditor={this.props.clearLinkEditor}
- showEditor={this.props.showEditor}
- menuRef={this._menuRef}
- />
- );
- }
+ 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={sourceDoc}
+ destinationDoc={destDoc}
+ clearLinkEditor={this.props.clearLinkEditor}
+ menuRef={this._menuRef}
+ />
+ );
});
return (