feat: editable title, notes, and color label in RightSidebar
Adds the missing editable fields from spec §6.6 metadata sidebar. The mutation path already existed (used by the keyboard culling shortcuts) — this just surfaces the controls. - Title: text input. Save on Enter or blur. Esc reverts. - Notes: textarea, 3 rows. Save on blur. - Color label: 6-dot picker (red/orange/yellow/green/blue/purple) with a clear button. Click an active dot to clear, or use the X. - Local "draft" state for the text fields so typing stays responsive and stale refetches don't clobber in-progress edits. Drafts re-sync on photo.id change. - Sends null for empty string so the backend stores NULL instead of an empty string (cleaner for FTS5 / future filtering). api.ts: widens photos.update() signature to match the backend PhotoUpdate schema — accepts user_title/user_notes/color_label (nullable) plus is_picked/is_discarded/taken_at, which were missing despite already being used by other call sites. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -57,9 +57,12 @@ export const photos = {
|
||||
|
||||
update: async (photoId: string, data: {
|
||||
rating?: number
|
||||
flag?: string
|
||||
user_title?: string
|
||||
user_notes?: string
|
||||
user_title?: string | null
|
||||
user_notes?: string | null
|
||||
color_label?: string | null
|
||||
is_picked?: boolean
|
||||
is_discarded?: boolean
|
||||
taken_at?: string
|
||||
}) => {
|
||||
const response = await api.patch(`/photos/${photoId}`, data)
|
||||
return response.data
|
||||
|
||||
Reference in New Issue
Block a user