Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions components/work/WorkLineItems.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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();
Expand All @@ -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');

Expand Down Expand Up @@ -598,6 +623,14 @@ export const WorkLineItems = ({
workType={work.contentType}
/>

{/* Figure Upload Modal */}
<ImageUploadModal
isOpen={isFigureUploadModalOpen}
onClose={() => setIsFigureUploadModalOpen(false)}
onSave={handleFigureUpload}
title="Upload Figure"
/>

{/* Tip Modal */}
<TipContentModal
isOpen={isTipModalOpen}
Expand Down