api+admin: let the curator take a photo off the landing, not just move it

Uploads still land in the community strip with consent on, by the uploader's own
tick — that default stays. What was missing is the curator's removal: the slot
select only offered the other three live placements, so "off the strip" meant
publishing the photo somewhere else or deleting the uploader's row.

`off` is a fifth slot value. The reel draws slot === 'strip' and each live slot
draws its own, so an `off` photo renders nowhere on the landing, while its owner
still has it in MY PHOTOS.
This commit is contained in:
2026-09-18 15:07:04 +07:00
parent dcea6b926f
commit 97836fde8a
6 changed files with 26 additions and 8 deletions
+4 -2
View File
@@ -19,13 +19,15 @@ import type { MsgKey } from './i18n/vi';
type State = 'loading' | 'guest' | 'forbidden' | 'ready';
type Tab = 'profile' | 'users' | 'pictures' | 'stats';
// The four places a photo can be drawn from. `strip` feeds the community reel;
// each live slot shows one photo of its set, picked at random per page load.
// Where a photo is drawn from. `strip` feeds the community reel and each live
// slot shows one photo of its set, picked at random per page load. `off` is the
// way off the landing without deleting the uploader's row.
const SLOTS: { id: PhotoSlot; key: MsgKey }[] = [
{ id: 'strip', key: 'adm.slotStrip' },
{ id: 'tester', key: 'adm.slotTester' },
{ id: 'creator', key: 'adm.slotCreator' },
{ id: 'qr', key: 'adm.slotQr' },
{ id: 'off', key: 'adm.slotOff' },
];
// The left column, in the order it reads.