feat(timeline): focus follows archive, snaps to first on view load
- New selection.focusAfter(excluded) walks selection.order forward past the archived/restored set so X-ing through the timeline keeps the cursor on the next live photo instead of falling back to photo[0] via the auto-anchor effect. Wired into gridKeyNav.toggleArchive (X key) and BulkActionBar.onArchive. - Auto-focus effect on the timeline always re-anchors to photos[0] on view load (pageCount → 1), instead of preserving a stale uid from the previous filter. - PhotoGrid re-anchors focus when the previously focused uid isn't in the new photo set, so drilling into a /tags category drops the cursor on its first tile instead of carrying a stale selection from whatever view the user came from. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -500,8 +500,19 @@ export async function deleteHeap(uid: string): Promise<void> {
|
||||
await http.delete(`/albums/${uid}`);
|
||||
}
|
||||
|
||||
export async function addToHeap(uid: string, photos: string[]): Promise<void> {
|
||||
await http.post(`/albums/${uid}/photos`, { photos });
|
||||
/**
|
||||
* PhotoPrism returns `{ code, message, album, photos: [uids in album], added: [delta] }`.
|
||||
* Surface `added` so callers can detect "200-but-nothing-happened" — PhotoPrism
|
||||
* silently skips UIDs that are missing from the index or already in the album,
|
||||
* which used to look like a successful add to the user.
|
||||
*/
|
||||
export interface AddToHeapResult {
|
||||
added: string[];
|
||||
}
|
||||
|
||||
export async function addToHeap(uid: string, photos: string[]): Promise<AddToHeapResult> {
|
||||
const { data } = await http.post<{ added?: string[] }>(`/albums/${uid}/photos`, { photos });
|
||||
return { added: data.added ?? [] };
|
||||
}
|
||||
|
||||
export async function removeFromHeap(uid: string, photos: string[]): Promise<void> {
|
||||
|
||||
Reference in New Issue
Block a user