Skip to content

Commit ed2144d

Browse files
add page state store
1 parent e39f187 commit ed2144d

3 files changed

Lines changed: 45 additions & 6 deletions

File tree

editor-packages/editor-canvas/canvas/canvas.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { get_hovering_target } from "../math";
1212
import { utils } from "@design-sdk/core";
1313
import { LazyFrame } from "@code-editor/canvas/lazy-frame";
1414
import { HudCustomRenderers, HudSurface } from "./hud-surface";
15-
import type { XY, XYWH } from "../types";
15+
import type { XY, XYWH, CanvasTransform } from "../types";
1616
import type { FrameOptimizationFactors } from "../frame";
1717
const designq = utils.query;
1818

@@ -21,11 +21,6 @@ const INITIAL_XY: XY = [0, 0];
2121
const LAYER_HOVER_HIT_MARGIN = 3.5;
2222
const MIN_ZOOM = 0.02;
2323

24-
type CanvasTransform = {
25-
scale: number;
26-
xy: XY;
27-
};
28-
2924
interface CanvasState {
3025
filekey: string;
3126
nodes: ReflectSceneNode[];
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import type { CanvasTransform } from "../types";
2+
3+
/**
4+
* page state store
5+
* - last selected node on this page
6+
* - last transform of canvas for this page
7+
*
8+
* (uses session storage)
9+
*/
10+
export class PageStateStore {
11+
constructor(readonly filekey: string, readonly pageid: string) {}
12+
13+
saveLastSelection(nodeid: string) {
14+
sessionStorage.setItem(
15+
`canvas-page-state-store/${this.filekey}/${this.pageid}/last-selection`,
16+
nodeid
17+
);
18+
}
19+
20+
getLastSelection(): string | null {
21+
return sessionStorage.getItem(
22+
`canvas-page-state-store/${this.filekey}/${this.pageid}/last-selection`
23+
);
24+
}
25+
26+
saveLastTransform(transform: CanvasTransform) {
27+
sessionStorage.setItem(
28+
`canvas-page-state-store/${this.filekey}/${this.pageid}/last-transform`,
29+
JSON.stringify(transform)
30+
);
31+
}
32+
33+
getLastTransform(): CanvasTransform | null {
34+
const str = sessionStorage.getItem(
35+
`canvas-page-state-store/${this.filekey}/${this.pageid}/last-transform`
36+
);
37+
if (!str) return null;
38+
return JSON.parse(str);
39+
}
40+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
11
export type XY = [number, number];
22
export type XYWH = [number, number, number, number];
3+
export type CanvasTransform = {
4+
scale: number;
5+
xy: XY;
6+
};

0 commit comments

Comments
 (0)