aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/LightboxView.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/LightboxView.tsx')
-rw-r--r--src/client/views/LightboxView.tsx36
1 files changed, 28 insertions, 8 deletions
diff --git a/src/client/views/LightboxView.tsx b/src/client/views/LightboxView.tsx
index 4c6592e58..0957fc94d 100644
--- a/src/client/views/LightboxView.tsx
+++ b/src/client/views/LightboxView.tsx
@@ -13,6 +13,7 @@ import { DocUtils } from '../documents/Documents';
import { DocumentManager } from '../util/DocumentManager';
import { SelectionManager } from '../util/SelectionManager';
import { TabDocView } from './collections/TabDocView';
+import { Cast } from '../../fields/Types';
interface LightboxViewProps {
PanelWidth: number;
@@ -22,14 +23,31 @@ interface LightboxViewProps {
@observer
export class LightboxView extends React.Component<LightboxViewProps> {
+ public static SavedState: Opt<{ panX: Opt<number>, panY: Opt<number>, scale: Opt<number>, transition: Opt<string> }>;
@observable static LightboxDoc: Opt<Doc>;
+ @observable static LightboxDocTarget: Opt<Doc>;
@action public static SetLightboxDoc(doc: Opt<Doc>, future?: Doc[]) {
- LightboxView.LightboxDoc = doc;
if (!doc) {
+ if (this.LightboxDoc) {
+ this.LightboxDoc._panX = this.SavedState?.panX;
+ this.LightboxDoc._panY = this.SavedState?.panY;
+ this.LightboxDoc._viewScale = this.SavedState?.scale;
+ this.LightboxDoc._viewTransition = this.SavedState?.transition;
+ }
LightboxView.LightboxFuture = LightboxView.LightboxHistory = [];
- } else if (future) {
+ } else {
+ LightboxView.SavedState = {
+ panX: Cast(doc._panX, "number", null),
+ panY: Cast(doc._panY, "number", null),
+ scale: Cast(doc._viewScale, "number", null),
+ transition: Cast(doc._viewTransition, "string", null)
+ };
+ }
+ if (future) {
LightboxView.LightboxFuture = future.slice();
}
+ LightboxView.LightboxDoc = LightboxView.LightboxDocTarget = doc;
+
return true;
}
public static IsLightboxDocView(path: DocumentView[]) { return path.includes(LightboxView.LightboxDocView.current!); }
@@ -58,6 +76,7 @@ export class LightboxView extends React.Component<LightboxViewProps> {
return LightboxView.SetLightboxDoc(doc);
}
+ fitToBox = () => LightboxView.LightboxDocTarget === LightboxView.LightboxDoc;
render() {
if (LightboxView.LightboxHistory.lastElement() !== LightboxView.LightboxDoc) LightboxView.LightboxHistory.push(LightboxView.LightboxDoc);
let downx = 0, downy = 0;
@@ -79,6 +98,7 @@ export class LightboxView extends React.Component<LightboxViewProps> {
Document={LightboxView.LightboxDoc}
DataDoc={undefined}
addDocument={undefined}
+ fitContentsToDoc={this.fitToBox}
addDocTab={this.addDocTab}
pinToPres={TabDocView.PinDoc}
rootSelected={returnTrue}
@@ -102,10 +122,10 @@ export class LightboxView extends React.Component<LightboxViewProps> {
</div>
{this.navBtn(undefined, "chevron-left",
() => LightboxView.LightboxDoc && LightboxView.LightboxHistory.length ? "" : "none",
- e => {
+ action(e => {
e.stopPropagation();
const previous = LightboxView.LightboxHistory.pop();
- const target = LightboxView.LightboxHistory.lastElement();
+ const target = LightboxView.LightboxDocTarget = LightboxView.LightboxHistory.lastElement();
const docView = target && DocumentManager.Instance.getLightboxDocumentView(target);
if (docView && target) {
if (LightboxView.LightboxFuture.lastElement() !== previous) LightboxView.LightboxFuture.push(previous);
@@ -113,12 +133,12 @@ export class LightboxView extends React.Component<LightboxViewProps> {
} else {
LightboxView.SetLightboxDoc(target);
}
- })}
+ }))}
{this.navBtn(this.props.PanelWidth - Math.min(this.props.PanelWidth / 4, this.props.maxBorder[0]), "chevron-right",
() => LightboxView.LightboxDoc && LightboxView.LightboxFuture.length ? "" : "none",
- e => {
+ action(e => {
e.stopPropagation();
- const target = LightboxView.LightboxFuture.pop();
+ const target = LightboxView.LightboxDocTarget = LightboxView.LightboxFuture.pop();
const docView = target && DocumentManager.Instance.getLightboxDocumentView(target);
if (docView && target) {
docView.focus(target, true, 0.9);
@@ -126,7 +146,7 @@ export class LightboxView extends React.Component<LightboxViewProps> {
} else {
LightboxView.SetLightboxDoc(target);
}
- })}
+ }))}
</div>;
}