Skip to content

[feat/MAT-358] undo/redo command 패턴 HistoryManager#300

Open
b0nsu wants to merge 1 commit intorefactor/mat-355-renderingfrom
refactor/mat-358-undo-redo
Open

[feat/MAT-358] undo/redo command 패턴 HistoryManager#300
b0nsu wants to merge 1 commit intorefactor/mat-355-renderingfrom
refactor/mat-358-undo-redo

Conversation

@b0nsu
Copy link
Copy Markdown
Collaborator

@b0nsu b0nsu commented Apr 30, 2026

Summary

배열 기반 히스토리를 command pattern HistoryManager로 교체합니다.
DocumentSnapshot + StrokeBounds로 undo 시 O(1) 복원, 이후 eraser 최적화 기반을 마련합니다.

Stacked PR 3/10 — base: refactor/mat-355-rendering

Linear

Changes

  • engine/HistoryManager.ts 생성 — command pattern (AppendStroke, EraseStrokes, ReplaceDocument)
  • DrawingCanvas에서 기존 배열 히스토리 제거 → HistoryManager 사용
  • DocumentSnapshot, DrawingCanvasProps 타입을 drawingTypes.ts에 추가

Testing

  • pnpm typecheck 통과
  • pnpm lint 통과

Risk / Impact

  • 영향 범위: undo/redo 동작 로직 전면 교체
  • 확인이 필요한 부분: undo/redo 동작 동일성, 히스토리 상한(50)
  • 배포 시 유의사항: 없음

- engine/HistoryManager.ts: command 패턴 (AppendStroke, EraseStrokes, ReplaceDocument)
  - append-stroke undo O(1): slice로 마지막 stroke 제거 (deepCopy + path rebuild 제거)
  - erase transaction: beginTransaction/commitTransaction
  - lock/unlock: 텍스트 편집 중 canvas undo 차단
  - cachedPathsBefore 구조 준비 (renderer 연동 후 적용)
- model/drawingTypes.ts: DocumentSnapshot 타입 추가
- DrawingCanvas.tsx: 기존 historyRef/historyIndexRef/saveToHistory/restoreFromHistory 제거
  → HistoryManager + createSnapshot/applySnapshot으로 교체 (-225줄, +129줄)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@linear
Copy link
Copy Markdown

linear Bot commented Apr 30, 2026

MAT-358 undo/redo

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 30, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
pointer-admin Ready Ready Preview, Comment Apr 30, 2026 11:51am

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant