diff --git a/client/src/components/Files/FileManagerAssignModal.tsx b/client/src/components/Files/FileManagerAssignModal.tsx index a515288c8..0f4c1f353 100644 --- a/client/src/components/Files/FileManagerAssignModal.tsx +++ b/client/src/components/Files/FileManagerAssignModal.tsx @@ -1,10 +1,10 @@ import { useId } from 'react' import { MapPin, Ticket, Check, Paperclip } from 'lucide-react' -import { filesApi } from '../../api/client' -import type { Place, Reservation, Day } from '../../types' +import type { Place, Reservation, Day, TripFile } from '../../types' import type { FileManagerState } from './useFileManager' import { TRANSPORT_TYPES } from './FileManager.constants' import { transportIcon } from './FileManager.helpers' +import { planFileLinkToggle, runFileLinkRecordStep, type FileLinkField } from './fileActions' import { DialogHeader, DialogShell, DialogTile, NEUTRAL_TINT } from '../shared/DialogShell' import { EditorField, INPUT } from '../shared/dialogParts' @@ -12,6 +12,20 @@ export function AssignModal(S: FileManagerState) { const { files, assignFileId, setAssignFileId, t, days, assignments, places, reservations, tripId, handleAssign, refreshFiles } = S const labelId = useId() const close = () => setAssignFileId(null) + // The file's own column goes through handleAssign, which toasts a failure. + const toggleLink = async (file: TripFile, field: FileLinkField, targetId: number) => { + const step = planFileLinkToggle(file, field, targetId) + if (step.kind === 'update') { + await handleAssign(file.id, step.data) + return + } + try { + await runFileLinkRecordStep(tripId, file.id, field, targetId, step.kind) + refreshFiles() + } catch { + // A failed link record change stays quiet. + } + } return ( { const isLinked = file.place_id === p.id || (file.linked_place_ids || []).includes(p.id) return ( -