From 7fcf4c54c42b7eaa427ea88c0b8586a78d7f1859 Mon Sep 17 00:00:00 2001 From: bobzel Date: Sun, 12 Nov 2023 14:34:09 -0500 Subject: cleaning up freeformview code. --- .../CollectionFreeFormPannableContents.tsx | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/client/views/collections/collectionFreeForm/CollectionFreeFormPannableContents.tsx (limited to 'src/client/views/collections/collectionFreeForm/CollectionFreeFormPannableContents.tsx') diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormPannableContents.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormPannableContents.tsx new file mode 100644 index 000000000..856e195a3 --- /dev/null +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormPannableContents.tsx @@ -0,0 +1,60 @@ +import { computed } from 'mobx'; +import { observer } from 'mobx-react'; +import { Doc } from '../../../../fields/Doc'; +import { ScriptField } from '../../../../fields/ScriptField'; +import { PresBox } from '../../nodes/trails/PresBox'; +import './CollectionFreeFormView.scss'; +import React = require('react'); +import { CollectionFreeFormView } from './CollectionFreeFormView'; + +export interface CollectionFreeFormPannableContentsProps { + rootDoc: Doc; + viewDefDivClick?: ScriptField; + children?: React.ReactNode | undefined; + transition?: string; + isAnnotationOverlay: boolean | undefined; + transform: () => string; + brushedView: () => { panX: number; panY: number; width: number; height: number } | undefined; +} + +@observer +export class CollectionFreeFormPannableContents extends React.Component { + @computed get presPaths() { + return CollectionFreeFormView.ShowPresPaths ? PresBox.Instance.pathLines(this.props.rootDoc) : null; + } + // rectangle highlight used when following trail/link to a region of a collection that isn't a document + showViewport = (viewport: { panX: number; panY: number; width: number; height: number } | undefined) => + !viewport ? null : ( +
+ ); + + render() { + return ( +
{ + const target = e.target as any; + if (getComputedStyle(target)?.overflow === 'visible') { + target.scrollTop = target.scrollLeft = 0; // if collection is visible, scrolling messes things up since there are no scroll bars + } + }} + style={{ + transform: this.props.transform(), + transition: this.props.transition, + width: this.props.isAnnotationOverlay ? undefined : 0, // if not an overlay, then this will be the size of the collection, but panning and zooming will move it outside the visible border of the collection and make it selectable. This problem shows up after zooming/panning on a background collection -- you can drag the collection by clicking on apparently empty space outside the collection + }}> + {this.props.children} + {this.presPaths} + {this.showViewport(this.props.brushedView())} +
+ ); + } +} -- cgit v1.2.3-70-g09d2