Skip to content

Commit 3877508

Browse files
fixes
1 parent 21e1b78 commit 3877508

1 file changed

Lines changed: 46 additions & 21 deletions

File tree

src/app/upload/page.tsx

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ import toast from 'react-hot-toast';
66
import { Button } from '@/components/ui/button';
77
import axios, { AxiosError } from 'axios';
88
import { FiTrash, FiX } from 'react-icons/fi';
9+
import Image from 'next/image';
910
import {
1011
DndContext,
1112
closestCenter,
1213
PointerSensor,
1314
useSensor,
1415
useSensors,
16+
DragEndEvent,
1517
} from '@dnd-kit/core';
1618
import {
1719
arrayMove,
@@ -53,10 +55,9 @@ export default function Page() {
5355

5456
useEffect(() => {
5557
return () => {
56-
5758
previews.forEach((item) => URL.revokeObjectURL(item.preview));
5859
};
59-
}, []);
60+
}, [previews]);
6061

6162
const fileCheckAndSelect = useCallback((acceptedFiles: File[]) => {
6263
const maxFileSize = 5 * 1024 * 1024;
@@ -131,7 +132,7 @@ export default function Page() {
131132
const style = {
132133
transform: CSS.Transform.toString(transform),
133134
transition,
134-
zIndex: isDragging ? 50 : undefined,
135+
//zIndex: 50,
135136
};
136137
return (
137138
<div ref={setNodeRef} style={style} {...attributes} {...listeners}>
@@ -140,16 +141,25 @@ export default function Page() {
140141
);
141142
}
142143

143-
const handleDndKitDragEnd = (event: any) => {
144-
const { active, over } = event;
145-
if (active.id !== over?.id) {
146-
const oldIndex = previews.findIndex((item) => item.id === active.id);
147-
const newIndex = previews.findIndex((item) => item.id === over.id);
148-
const newPreviews = arrayMove(previews, oldIndex, newIndex);
149-
setPreviews(newPreviews);
150-
setFiles(newPreviews.map((p) => p.file));
151-
}
152-
};
144+
const handleDndKitDragEnd = (event: DragEndEvent) => {
145+
const { active, over } = event;
146+
if (over && active.id !== over.id) {
147+
const oldIndex = previews.findIndex((item) => item.id === active.id);
148+
const newIndex = previews.findIndex((item) => item.id === over.id);
149+
150+
const newFiles = arrayMove(previews.map((p) => p.file), oldIndex, newIndex);
151+
152+
previews.forEach((item) => URL.revokeObjectURL(item.preview));
153+
const newPreviews = newFiles.map((file, idx) => ({
154+
id: `${file.name}-${file.lastModified}-${idx}`,
155+
file,
156+
preview: URL.createObjectURL(file),
157+
}));
158+
159+
setFiles(newFiles);
160+
setPreviews(newPreviews);
161+
}
162+
};
153163

154164
const handleDelete = (index: number) => {
155165
const deletedPreview = previews[index];
@@ -199,8 +209,8 @@ export default function Page() {
199209

200210
setFiles([]);
201211
setPreviews([]);
202-
} catch (error) {
203-
// Optionally handle error
212+
} catch {
213+
// Handle error if needed
204214
} finally {
205215
setIsUploading(false);
206216
}
@@ -268,18 +278,26 @@ export default function Page() {
268278
<SortablePreview key={item.id} id={item.id}>
269279
<div className="relative w-48 h-60">
270280
<div className="w-full h-full rounded-2xl outline outline-2 outline-white/80 overflow-hidden">
271-
<div className="absolute left-0 top-0 w-10 h-10 bg-slate-600 rounded-tl-2xl rounded-br-2xl flex items-center justify-center">
281+
<div className="z-10 absolute left-0 top-0 w-10 h-10 bg-slate-600 rounded-tl-2xl rounded-br-2xl flex items-center justify-center">
272282
<span className="text-white text-xl">{index + 1}</span>
273283
</div>
274284
<button
275285
onClick={() => handleDelete(index)}
276-
className="absolute right-0 top-0 w-10 h-10 bg-pink-800 rounded-tr-2xl rounded-bl-2xl flex items-center justify-center"
286+
className="z-10 absolute right-0 top-0 w-10 h-10 bg-pink-800 rounded-tr-2xl rounded-bl-2xl flex items-center justify-center"
277287
title="Delete"
278288
>
279289
<FiTrash className="w-5 h-5 text-white" />
280290
</button>
281291
{item.file.type.startsWith('image/') ? (
282-
<img src={item.preview} alt={`Page ${index + 1}`} className="w-full h-full object-cover" />
292+
<div className="relative w-full h-full">
293+
<Image
294+
src={item.preview}
295+
alt={`Page ${index + 1}`}
296+
fill
297+
className="object-cover"
298+
unoptimized // Since we're using object URLs
299+
/>
300+
</div>
283301
) : (
284302
<iframe src={item.preview} title={`PDF preview ${index + 1}`} className="w-full h-full" />
285303
)}
@@ -322,11 +340,18 @@ export default function Page() {
322340
>
323341
<FiX size={24} />
324342
</button>
325-
{previews[zoomIndex] && previews[zoomIndex].file.type.startsWith('image/') ? (
326-
<img src={previews[zoomIndex]?.preview} alt="zoomed preview" className="max-w-[80vw] max-h-[80vh] rounded-md" />
343+
{previews[zoomIndex]?.file.type.startsWith('image/') ? (
344+
<Image
345+
src={previews[zoomIndex].preview}
346+
alt="zoomed preview"
347+
className="max-w-[80vw] max-h-[80vh] rounded-md"
348+
width={800}
349+
height={600}
350+
unoptimized
351+
/>
327352
) : previews[zoomIndex] ? (
328353
<iframe
329-
src={previews[zoomIndex]?.preview}
354+
src={previews[zoomIndex].preview}
330355
className="w-[80vw] h-[80vh] border rounded-md"
331356
title={`PDF zoom preview ${zoomIndex}`}
332357
/>

0 commit comments

Comments
 (0)