FilesViewer.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { useState } from 'react'
  2. import { cn, Dialog, DialogContent } from 'ui'
  3. export const FilesViewer = ({ files }: { files: string[] }) => {
  4. const [selected, setSelected] = useState(files[0])
  5. const [showDialog, setShowDialog] = useState(false)
  6. return (
  7. <>
  8. <div className="flex flex-col gap-y-4">
  9. <button onClick={() => setShowDialog(true)}>
  10. <img
  11. alt={selected}
  12. src={selected}
  13. className="rounded-md border object-cover aspect-video"
  14. />
  15. </button>
  16. {files.length > 1 && (
  17. <div className="grid grid-cols-10 gap-x-2">
  18. {files.map((x) => (
  19. <button key={x} onClick={() => setSelected(x)}>
  20. <img
  21. alt={x}
  22. src={x}
  23. className={cn(
  24. 'col-span-1 bg-surface-100 rounded-md object-cover aspect-square border transition',
  25. selected === x ? 'border-button-hover' : 'border-secondary'
  26. )}
  27. />
  28. </button>
  29. ))}
  30. </div>
  31. )}
  32. </div>
  33. <Dialog open={showDialog} onOpenChange={setShowDialog}>
  34. <DialogContent size="xxlarge">
  35. <img alt={selected} src={selected} className="rounded-md border" />
  36. </DialogContent>
  37. </Dialog>
  38. </>
  39. )
  40. }