- backend: deleting an album moves its photos to the trash without losing files (photos.album_id nullable, FK ON DELETE SET NULL, migration 000006; dropped S3 prefix delete); restore accepts an album target (album_required when the album is gone); user-scoped tags (000007) with GET /tags, POST/DELETE /photos/:id/tags, tags included in photo responses; GET /trash/count - frontend: right-click context menus for photos (grid + viewer) and albums (rail + overview); single shared PhotoPanel reused in viewer and gallery selection (not a copy); viewer download/delete moved to the panel 'Действия'; transparent compact viewer top bar; trash entry as last rail item with per-album photo counts and trash count; album rename/delete dialogs - openspec: sync lightroom-workspace-ui artifacts (specs photos/ui-workspace, design #24-30, tasks 9.17-9.24)
25 lines
370 B
TypeScript
25 lines
370 B
TypeScript
import { photosApi } from '$lib/api';
|
|
import { auth } from './auth.svelte';
|
|
|
|
class TrashStore {
|
|
count = $state(0);
|
|
|
|
async load() {
|
|
if (!auth.isAuthenticated) {
|
|
this.count = 0;
|
|
return;
|
|
}
|
|
try {
|
|
this.count = (await photosApi.trashCount()).count;
|
|
} catch {
|
|
/* ignore */
|
|
}
|
|
}
|
|
|
|
reset() {
|
|
this.count = 0;
|
|
}
|
|
}
|
|
|
|
export const trash = new TrashStore();
|