feat: full shortcut parity + perf fixes across memories and duplicates

Memories view now supports the same keyboard shortcuts, heap membership,
and optimistic cache updates as the Timeline. Arrow/Ctrl+A/Escape nav is
extracted into a shared useGridKeyNav hook so both views stay in lockstep.
Duplicates view is virtualised with @tanstack/react-virtual and has
stabilised PhotoThumbnail props so React.memo actually elides work when
scrolling or toggling selection.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
root
2026-04-15 11:51:13 +02:00
parent 744a7fa0c3
commit d72a218b46
8 changed files with 527 additions and 228 deletions

View File

@@ -422,6 +422,8 @@ async def get_memories(
Photo.width,
Photo.height,
Photo.rating,
Photo.color_label,
Photo.is_discarded,
)
.where(
Photo.user_id == current_user.id,
@@ -454,6 +456,8 @@ async def get_memories(
"width": row.width,
"height": row.height,
"rating": row.rating,
"color_label": row.color_label,
"is_discarded": row.is_discarded,
})
memories = [