Files
ds-galo/openspec/changes/fix-trash-counter-sync/proposal.md
T
iu 713c1ca6d3 fix(ui): keep trash counter in sync with trash changes
Reload the rail trash count after every operation that changes the
trash contents, not just navigation and empty-trash: moving photos to
trash (grid, panel, viewer), restoring, permanent delete and deleting
an album. Previously the counter stayed stale until the next route
change.
2026-10-12 12:58:18 +03:00

2.7 KiB

Proposal

Why

Счётчик корзины в рейле альбомов (trash.count) перезагружается только при смене маршрута и после «Очистить корзину». Любая другая операция, меняющая содержимое корзины, не обновляет его: после удаления фото счётчик остаётся прежним, пока пользователь не перейдёт в другой раздел. Это и есть сообщённый дефект — «при удалении фото на корзине не меняется счётчик».

What Changes

  • Рейл SHALL обновлять число элементов корзины сразу после каждого действия, меняющего её содержимое, без перезагрузки страницы: помещение фото в корзину (одиночное и пакетное), восстановление, окончательное удаление, очистка корзины и удаление альбома (его фото уходят в корзину).
  • Изменения только во фронтенде: серверный GET /api/trash/count и семантика мягкого удаления корректны и не меняются.

Capabilities

New Capabilities

Нет.

Modified Capabilities

  • ui-workspace: добавляется требование синхронизации счётчика корзины в рейле с операциями, меняющими содержимое корзины, без перезагрузки страницы.

Impact

  • Frontend: frontend/src/lib/stores/trash.svelte.ts (способ обновления счётчика), frontend/src/routes/(app)/albums/[id]/+page.svelte (пакетное удаление), frontend/src/lib/components/PhotoPanel.svelte (удаление из панели/просмотра), frontend/src/routes/(app)/albums/[id]/photos/[photoId]/+page.svelte (удаление в просмотре), frontend/src/routes/(app)/trash/+page.svelte (восстановление и окончательное удаление), frontend/src/lib/components/AlbumActionsDialogs.svelte и frontend/src/routes/(app)/albums/[id]/settings/+page.svelte (удаление альбома).
  • Backend: не затрагивается.
  • Вне объёма: синхронизация счётчика между сессиями/устройствами через SSE (событий корзины сервер не публикует) и Android-клиент (корзины в нём нет).