| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import { Data } from "types"
- import * as vec from "utils/vec"
- import BaseSession from "./base-session"
- import commands from "state/commands"
- import { current } from "immer"
-
- export default class TranslateSession extends BaseSession {
- delta = [0, 0]
- origin: number[]
- snapshot: TranslateSnapshot
-
- constructor(data: Data, point: number[]) {
- super(data)
- this.origin = point
- this.snapshot = getTranslateSnapshot(data)
- }
-
- update(data: Data, point: number[]) {
- const { currentPageId, shapes } = this.snapshot
- const { document } = data
-
- const delta = vec.vec(this.origin, point)
-
- for (let shape of shapes) {
- document.pages[currentPageId].shapes[shape.id].point = vec.add(
- shape.point,
- delta
- )
- }
- }
-
- cancel(data: Data) {
- const { document } = data
-
- for (let shape of this.snapshot.shapes) {
- document.pages[this.snapshot.currentPageId].shapes[shape.id].point =
- shape.point
- }
- }
-
- complete(data: Data) {
- commands.translate(data, this.snapshot, getTranslateSnapshot(data))
- }
- }
-
- export function getTranslateSnapshot(data: Data) {
- const {
- document: { pages },
- currentPageId,
- } = current(data)
-
- const { shapes } = pages[currentPageId]
-
- return {
- currentPageId,
- shapes: Array.from(data.selectedIds.values())
- .map((id) => shapes[id])
- .map(({ id, point }) => ({ id, point })),
- }
- }
-
- export type TranslateSnapshot = ReturnType<typeof getTranslateSnapshot>
|