Archived
feat: uv config other feats
- add uv configuration for the backend - update frontend to make auth work - add new auth endpoints - add bookmars feat - add reader feat
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
# 012 — Library book context menu
|
||||
|
||||
**Status:** Implemented
|
||||
**Created:** 2026-06-03
|
||||
|
||||
## Objective
|
||||
|
||||
Add a custom right-click context menu on each book card in the library with **Sync metadata** (Open Library refresh) and **Remove** (delete from library). Show toast notifications for success, warning, and error outcomes.
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
Library book card (contextmenu)
|
||||
→ BookContextMenu
|
||||
→ Sync metadata: POST /api/books/ebooks/{id}/enrich-metadata/
|
||||
→ Remove: confirm dialog → DELETE /api/books/ebooks/{id}/
|
||||
→ ToastProvider (app-wide) → success | warning | error toasts
|
||||
```
|
||||
|
||||
Backend endpoints already exist; no API changes required.
|
||||
|
||||
## Frontend changes
|
||||
|
||||
| File | Change |
|
||||
|------|--------|
|
||||
| `api/books.ts` | `enrichEBookMetadata(id)` → `POST .../enrich-metadata/` |
|
||||
| `types/book.ts` | `OpenLibraryMetadata` with `match_status` |
|
||||
| `hooks/useToast.tsx` | `ToastProvider`, `showToast({ message, variant })`, auto-dismiss ~4s |
|
||||
| `components/ToastContainer.tsx` | Fixed bottom-right toast stack |
|
||||
| `components/BookContextMenu.tsx` | Positioned menu; sync + remove actions |
|
||||
| `pages/Library.tsx` | `onContextMenu` on cards; local state updates |
|
||||
| `App.tsx` | Wrap routes with `ToastProvider` |
|
||||
|
||||
## Context menu behavior
|
||||
|
||||
- Opens on right-click (`contextmenu`); browser default menu suppressed
|
||||
- Position clamped to viewport; closes on outside click, Escape, or scroll
|
||||
- **Sync metadata:** updates card title/author/cover from response; toast by `metadata.match_status`:
|
||||
- `matched` → success
|
||||
- `not_found` → warning
|
||||
- other → neutral success
|
||||
- **Remove:** `window.confirm` before delete; removes card from list on success
|
||||
- Menu clicks do not trigger card navigation to reader
|
||||
|
||||
## Dependencies
|
||||
|
||||
None (no new npm packages).
|
||||
|
||||
## Verification
|
||||
|
||||
1. Right-click a book → menu appears at cursor
|
||||
2. Sync metadata on a matched book → cover/title may update, success toast
|
||||
3. Sync on unmatched book → warning toast, no crash
|
||||
4. Remove → confirm → book disappears, success toast
|
||||
5. Cancel remove → book stays, menu closes
|
||||
6. Left-click still opens reader (EPUB) or PDF notice
|
||||
Reference in New Issue
Block a user