aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/ImageBox.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/ImageBox.tsx')
-rw-r--r--src/client/views/nodes/ImageBox.tsx60
1 files changed, 25 insertions, 35 deletions
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index 76ba7765c..2e594d96a 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -30,6 +30,8 @@ import { FaceRectangles } from './FaceRectangles';
import { FieldView, FieldViewProps } from './FieldView';
import './ImageBox.scss';
import React = require('react');
+import { PresBox } from './trails';
+import { DocumentViewProps } from './DocumentView';
export const pageSchema = createSchema({
googlePhotosUrl: 'string',
@@ -49,23 +51,10 @@ export class ImageBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProp
return FieldView.LayoutString(ImageBox, fieldKey);
}
private _dropDisposer?: DragManager.DragDropDisposer;
- private _transitioning: any; // timer for setting view spec properties
private _disposers: { [name: string]: IReactionDisposer } = {};
private _getAnchor: (savedAnnotations?: ObservableMap<number, HTMLDivElement[]>) => Opt<Doc> = () => undefined;
@observable _curSuffix = '';
@observable _uploadIcon = uploadIcons.idle;
- @observable _focusViewScale: number | undefined = 1;
- @observable _focusPanX: number | undefined = 0;
- @observable _focusPanY: number | undefined = 0;
- get viewScale() {
- return this._focusViewScale || StrCast(this.layoutDoc._viewScale);
- }
- get panX() {
- return this._focusPanX || StrCast(this.layoutDoc._panX);
- }
- get panY() {
- return this._focusPanY || StrCast(this.layoutDoc._panY);
- }
protected createDropTarget = (ele: HTMLDivElement) => {
this._dropDisposer?.();
@@ -73,33 +62,30 @@ export class ImageBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProp
};
@action
- setViewSpec = (anchor: Doc, preview: boolean) => {
- if (preview && anchor._viewScale !== undefined) {
- this._focusViewScale = Cast(anchor._viewScale, 'number', null);
- this._focusPanX = Cast(anchor._panX, 'number', null);
- this._focusPanY = Cast(anchor._panX, 'number', null);
- } else if (anchor._viewScale !== undefined) {
- const smoothTime = NumCast(anchor.viewTransitionTime);
- this.layoutDoc.viewTransition = `all ${smoothTime}ms`;
- this.layoutDoc._panX = NumCast(anchor._panX, NumCast(this.layoutDoc._panY));
- this.layoutDoc._panY = NumCast(anchor._panY, NumCast(this.layoutDoc._panX));
- this.layoutDoc._viewScale = NumCast(anchor._viewScale, NumCast(this.layoutDoc._viewScale));
- this.layoutDoc[this.fieldKey + '-useAlt'] = Cast(anchor._useAlt, 'boolean', null);
- if (anchor.type === DocumentType.MARKER) {
- this.dataDoc[this.annotationKey] = new List<Doc>(DocListCast(anchor._annotations));
- }
- clearTimeout(this._transitioning);
- this._transitioning = setTimeout(() => (this.layoutDoc.viewTransition = undefined), smoothTime);
- }
+ scrollFocus = (anchor: Doc, smooth: boolean) => {
+ let focusSpeed: Opt<number>;
+ PresBox.restoreTargetDocView(
+ this.rootDoc, //
+ { pinDocLayout: BoolCast(anchor.presPinDocLayout) },
+ anchor,
+ (focusSpeed = !smooth ? 0 : NumCast(anchor.presTransition)),
+ !anchor.presPinData
+ ? {}
+ : {
+ pannable: true,
+ dataannos: anchor.presAnnotations !== undefined,
+ dataview: true,
+ }
+ );
+ return focusSpeed;
}; // sets viewing information for a componentview, typically when following a link. 'preview' tells the view to use the values without writing to the document
getAnchor = () => {
const anchor =
this._getAnchor?.(this._savedAnnotations) ?? // use marquee anchor, otherwise, save zoom/pan as anchor
- Docs.Create.ImageanchorDocument({ viewTransitionTime: 1000, unrendered: true, annotationOn: this.rootDoc, _viewScale: NumCast(this.layoutDoc._viewScale, 1), _panX: NumCast(this.layoutDoc._panX), _panY: NumCast(this.layoutDoc._panY) });
+ Docs.Create.ImageanchorDocument({ presTransition: 1000, unrendered: true, annotationOn: this.rootDoc });
if (anchor) {
- anchor._useAlt = Cast(this.layoutDoc[this.fieldKey + '-useAlt'], 'boolean', null);
- anchor._annotations = new List<Doc>(DocListCast(this.dataDoc[this.annotationKey]));
+ PresBox.pinDocView(anchor, { pinData: { pannable: true, dataview: true, dataannos: true } }, this.rootDoc);
this.addDocument(anchor);
return anchor;
}
@@ -130,7 +116,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProp
}
componentWillUnmount() {
- clearTimeout(this._transitioning);
Object.values(this._disposers).forEach(disposer => disposer?.());
}
@@ -425,6 +410,10 @@ export class ImageBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProp
this.props.select(false);
};
savedAnnotations = () => this._savedAnnotations;
+ styleProvider = (doc: Opt<Doc>, props: Opt<DocumentViewProps>, property: string): any => {
+ if (property === StyleProp.BoxShadow) return undefined;
+ return this.props.styleProvider?.(doc, props, property);
+ };
render() {
TraceMobx();
@@ -445,6 +434,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProp
{...OmitKeys(this.props, ['NativeWidth', 'NativeHeight', 'setContentView']).omit}
renderDepth={this.props.renderDepth + 1}
fieldKey={this.annotationKey}
+ styleProvider={this.styleProvider}
CollectionView={undefined}
isAnnotationOverlay={true}
annotationLayerHostsContent={true}