From b94322f8032acd16bea49fc4e41981f7588f8885 Mon Sep 17 00:00:00 2001 From: saimuren <156625599+saimuren@users.noreply.github.com> Date: Tue, 17 Feb 2026 15:11:58 +0900 Subject: [PATCH 1/2] feat: add 'Upload Figure' button to paper page Adds a menu item to upload figures to papers, implementing #466. Uses existing ImageUploadModal component. --- components/work/WorkLineItems.tsx | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/components/work/WorkLineItems.tsx b/components/work/WorkLineItems.tsx index 90372efbc..840cdc831 100644 --- a/components/work/WorkLineItems.tsx +++ b/components/work/WorkLineItems.tsx @@ -42,6 +42,8 @@ import { useIsInList } from '@/components/UserList/lib/hooks/useIsInList'; import { useAddToList } from '@/components/UserList/lib/UserListsContext'; import { Button } from '@/components/ui/Button'; import { cn } from '@/utils/styles'; +import { ImageUploadModal } from '@/components/modals/ImageUploadModal'; +import { Image as ImageIcon } from 'lucide-react'; import { handleDownload } from '@/utils/download'; interface WorkLineItemsProps { @@ -77,6 +79,7 @@ export const WorkLineItems = ({ work.metrics?.adjustedScore ?? work.metrics?.votes ?? 0 ); const [isFlagModalOpen, setIsFlagModalOpen] = useState(false); + const [isFigureUploadModalOpen, setIsFigureUploadModalOpen] = useState(false); const router = useRouter(); const { selectedOrg } = useOrganizationContext(); const { user } = useUser(); @@ -89,6 +92,28 @@ export const WorkLineItems = ({ onOpenModal: () => setIsAddToListModalOpen(true), }); + + const handleFigureUpload = async (imageBlob: Blob) => { + try { + const formData = new FormData(); + formData.append('figure', imageBlob); + formData.append('paper_id', work.id.toString()); + + const response = await fetch(`/api/paper/${work.id}/figure`, { + method: 'POST', + body: formData, + }); + + if (!response.ok) throw new Error('Upload failed'); + + toast.success('Figure uploaded successfully'); + router.refresh(); + } catch (error) { + console.error('Error uploading figure:', error); + toast.error('Failed to upload figure'); + } + }; + // Extract PDF format for download const pdfFormat = work.formats?.find((format) => format.type === 'PDF'); @@ -598,6 +623,14 @@ export const WorkLineItems = ({ workType={work.contentType} /> + {/* Figure Upload Modal */} + setIsFigureUploadModalOpen(false)} + onSave={handleFigureUpload} + title="Upload Figure" + /> + {/* Tip Modal */} Date: Tue, 17 Feb 2026 15:12:21 +0900 Subject: [PATCH 2/2] feat: add 'Upload Figure' button to paper page Adds a menu item to upload figures to papers, implementing #466. Uses existing ImageUploadModal component.