# Story 2.2: Undo/Redo des Modifications

Status: review

## Story

As a Julien (Analyst),
I want to undo my last data edits,
so that I can explore changes without fear of losing the original data.

## Acceptance Criteria

1. **Undo History:** The system tracks changes to cell values.
2. **Undo Action:** Users can press `Ctrl+Z` or click an "Undo" button to revert the last edit.
3. **Redo Action:** Users can press `Ctrl+Y` (or `Ctrl+Shift+Z`) to re-apply an undone edit.
4. **Visual Indicator:** The Undo/Redo buttons in the toolbar are disabled if no history is available.
5. **Session Scope:** History is maintained during the current session (stateless).

## Tasks / Subtasks

- [x] **State Management (Zustand)** (AC: 1, 2, 3)
  - [x] Implement `zundo` or a custom middleware for state history in `useGridStore`.
  - [x] Add `undo` and `redo` actions.
- [x] **Keyboard Shortcuts** (AC: 2, 3)
  - [x] Add global event listeners for `Ctrl+Z` and `Ctrl+Y`.
- [x] **UI Controls** (AC: 4)
  - [x] Add Undo/Redo buttons to the `FileUploader` or a new `Toolbar` component.

## Dev Notes

- **Optimization:** Using `zundo` middleware to partialize state history (tracking only `data`, `columns`, and `modifiedCells`).
- **Shortcuts:** Implemented global keyboard event listeners in the main layout.
- **UX:** Added responsive toolbar buttons with disabled states when no history is present.

### Project Structure Notes

- Modified `frontend/src/store/use-grid-store.ts` to include `temporal` middleware.
- Updated `frontend/src/app/page.tsx` with UI buttons and shortcut logic.

### References

- [Source: functional-requirements.md#FR8]
- [Source: project-context.md#Data & State Architecture]

## Dev Agent Record

### Agent Model Used

{{agent_model_name_version}}

### Completion Notes List
- Integrated `zundo` for comprehensive history tracking.
- Added Undo/Redo logic to the global Zustand store.
- Implemented `Ctrl+Z`, `Ctrl+Shift+Z`, and `Ctrl+Y` keyboard shortcuts.
- Added visual buttons in the application header with state-dependent enabling/disabling.

### File List
- /frontend/src/store/use-grid-store.ts
- /frontend/src/app/page.tsx