Files
initiative/packages/application/src/undo-use-case.ts
Lukas 17cc6ed72c Add undo/redo for all encounter actions
Memento-based undo/redo with full encounter snapshots. Undo stack
capped at 50 entries, persisted to localStorage. Triggered via
buttons in the top bar (inboard of turn navigation) and keyboard
shortcuts (Ctrl+Z / Ctrl+Shift+Z, Cmd on Mac, case-insensitive key
matching). Clear encounter resets both stacks.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 23:30:33 +01:00

25 lines
553 B
TypeScript

import {
type DomainError,
type Encounter,
isDomainError,
undo,
} from "@initiative/domain";
import type { EncounterStore, UndoRedoStore } from "./ports.js";
export function undoUseCase(
encounterStore: EncounterStore,
undoRedoStore: UndoRedoStore,
): Encounter | DomainError {
const current = encounterStore.get();
const state = undoRedoStore.get();
const result = undo(state, current);
if (isDomainError(result)) {
return result;
}
encounterStore.save(result.encounter);
undoRedoStore.save(result.state);
return result.encounter;
}