From 9876d7045fa13f5ba0d0f05846693a0313eff13d Mon Sep 17 00:00:00 2001 From: Sebastien Castiel Date: Sun, 28 Jan 2024 23:28:21 -0500 Subject: Use carousel to display images --- src/components/expense-documents-input.tsx | 101 +++++++++++++++++++++-------- 1 file changed, 73 insertions(+), 28 deletions(-) (limited to 'src/components/expense-documents-input.tsx') diff --git a/src/components/expense-documents-input.tsx b/src/components/expense-documents-input.tsx index 11e5708..80b78f7 100644 --- a/src/components/expense-documents-input.tsx +++ b/src/components/expense-documents-input.tsx @@ -1,4 +1,12 @@ import { Button } from '@/components/ui/button' +import { + Carousel, + CarouselApi, + CarouselContent, + CarouselItem, + CarouselNext, + CarouselPrevious, +} from '@/components/ui/carousel' import { Dialog, DialogClose, @@ -12,7 +20,7 @@ import { ExpenseFormValues } from '@/lib/schemas' import { Loader2, Plus, Trash, X } from 'lucide-react' import { getImageData, useS3Upload } from 'next-s3-upload' import Image from 'next/image' -import { useState } from 'react' +import { useEffect, useState } from 'react' type Props = { documents: ExpenseFormValues['documents'] @@ -61,8 +69,9 @@ export function ExpenseDocumentsInput({ documents, updateDocuments }: Props) { { - updateDocuments(documents.filter((d) => d.id !== doc.id)) + documents={documents} + deleteDocument={(document) => { + updateDocuments(documents.filter((d) => d.id !== document.id)) }} /> ))} @@ -89,12 +98,27 @@ export function ExpenseDocumentsInput({ documents, updateDocuments }: Props) { export function DocumentThumbnail({ document, + documents, deleteDocument, }: { document: ExpenseFormValues['documents'][number] - deleteDocument: () => void + documents: ExpenseFormValues['documents'] + deleteDocument: (document: ExpenseFormValues['documents'][number]) => void }) { const [open, setOpen] = useState(false) + const [api, setApi] = useState() + const [currentDocument, setCurrentDocument] = useState(null) + + useEffect(() => { + if (!api) return + + api.on('slidesInView', () => { + const index = api.slidesInView()[0] + if (index !== undefined) { + setCurrentDocument(index) + } + }) + }, [api]) return ( @@ -112,33 +136,54 @@ export function DocumentThumbnail({ /> - -
- + + + +
+ + - - Delete document - - - - + + {documents.map((document, index) => ( + + + + ))} + + + + - {/* eslint-disable-next-line @next/next/no-img-element */} -
) -- cgit v1.3