diff --git a/src/components/card-detail/AttachmentSection.tsx b/src/components/card-detail/AttachmentSection.tsx index fae56cd..38d744d 100644 --- a/src/components/card-detail/AttachmentSection.tsx +++ b/src/components/card-detail/AttachmentSection.tsx @@ -1,6 +1,8 @@ import { FileIcon, X, Plus } from "lucide-react"; +import { open } from "@tauri-apps/plugin-dialog"; import { Button } from "@/components/ui/button"; import { useBoardStore } from "@/stores/board-store"; +import { copyAttachment } from "@/lib/storage"; import type { Attachment } from "@/types/board"; interface AttachmentSectionProps { @@ -12,11 +14,29 @@ export function AttachmentSection({ cardId, attachments, }: AttachmentSectionProps) { + const addAttachment = useBoardStore((s) => s.addAttachment); const removeAttachment = useBoardStore((s) => s.removeAttachment); - function handleAdd() { - // Placeholder: Tauri file dialog will be wired in a later task - console.log("Add attachment (file dialog not yet wired)"); + async function handleAdd() { + const selected = await open({ + multiple: false, + title: "Select attachment", + }); + if (!selected) return; + + const fileName = selected.split(/[\\/]/).pop() ?? "attachment"; + + const board = useBoardStore.getState().board; + if (!board) return; + + const mode = board.settings.attachmentMode; + + if (mode === "copy") { + const destPath = await copyAttachment(board.id, selected, fileName); + addAttachment(cardId, { name: fileName, path: destPath, mode: "copy" }); + } else { + addAttachment(cardId, { name: fileName, path: selected, mode: "link" }); + } } return ( diff --git a/src/components/layout/TopBar.tsx b/src/components/layout/TopBar.tsx index 7e1ea67..43c6ff6 100644 --- a/src/components/layout/TopBar.tsx +++ b/src/components/layout/TopBar.tsx @@ -75,7 +75,10 @@ export function TopBar() {