aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/linking/LinkMenu.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/linking/LinkMenu.tsx')
-rw-r--r--src/client/views/linking/LinkMenu.tsx31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/client/views/linking/LinkMenu.tsx b/src/client/views/linking/LinkMenu.tsx
index 0096a58bd..0c46a6d96 100644
--- a/src/client/views/linking/LinkMenu.tsx
+++ b/src/client/views/linking/LinkMenu.tsx
@@ -8,12 +8,13 @@ import { LinkEditor } from './LinkEditor';
import './LinkMenu.scss';
import { LinkMenuGroup } from './LinkMenuGroup';
import React = require('react');
+import { emptyFunction } from '../../../Utils';
interface Props {
docView: DocumentView;
- position?: { x?: number; y?: number };
+ style?: { left: number; top: number };
itemHandler?: (doc: Doc) => void;
- clearLinkEditor: () => void;
+ clearLinkEditor?: () => void;
}
/**
@@ -25,26 +26,24 @@ export class LinkMenu extends React.Component<Props> {
@observable _editingLink?: Doc;
@observable _linkMenuRef = React.createRef<HTMLDivElement>();
- @computed get position() {
- return this.props.position ?? (dv => ({ x: dv?.left || 0, y: (dv?.bottom || 0) + 15 }))(this.props.docView.getBounds());
- }
-
- clear = action(() => {
- this.props.clearLinkEditor();
- this._editingLink = undefined;
- });
+ clear = !this.props.clearLinkEditor
+ ? undefined
+ : action(() => {
+ this.props.clearLinkEditor?.();
+ this._editingLink = undefined;
+ });
componentDidMount() {
- document.addEventListener('pointerdown', this.onPointerDown, true);
+ this.props.clearLinkEditor && document.addEventListener('pointerdown', this.onPointerDown, true);
}
componentWillUnmount() {
- document.removeEventListener('pointerdown', this.onPointerDown, true);
+ this.props.clearLinkEditor && document.removeEventListener('pointerdown', this.onPointerDown, true);
}
onPointerDown = action((e: PointerEvent) => {
LinkDocPreview.Clear();
if (!this._linkMenuRef.current?.contains(e.target as any) && !this._editorRef.current?.contains(e.target as any)) {
- this.clear();
+ this.clear?.();
}
});
@@ -67,13 +66,15 @@ export class LinkMenu extends React.Component<Props> {
/>
));
- return linkItems.length ? linkItems : this.props.position ? [<></>] : [<p key="">No links have been created yet. Drag the linking button onto another document to create a link.</p>];
+ return linkItems.length ? linkItems : this.props.style ? [<></>] : [<p key="">No links have been created yet. Drag the linking button onto another document to create a link.</p>];
};
render() {
const sourceDoc = this.props.docView.props.Document;
+ const style = this.props.style ?? (dv => ({ left: dv?.left || 0, top: this.props.docView.topMost ? undefined : (dv?.bottom || 0) + 15, bottom: this.props.docView.topMost ? 20 : undefined, maxWidth: 200 }))(this.props.docView.getBounds());
+
return (
- <div className="linkMenu" ref={this._linkMenuRef} style={{ left: this.position.x, top: this.props.docView.topMost ? undefined : this.position.y, bottom: this.props.docView.topMost ? 20 : undefined }}>
+ <div className="linkMenu" ref={this._linkMenuRef} style={{ ...style }}>
{this._editingLink ? (
<div className="linkMenu-listEditor">
<LinkEditor sourceDoc={sourceDoc} linkDoc={this._editingLink} showLinks={action(() => (this._editingLink = undefined))} />