index.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { useBreakpoint } from 'common'
  2. import {
  3. Button,
  4. Dialog,
  5. DialogContent,
  6. DialogHeader,
  7. DialogTitle,
  8. Sheet,
  9. SheetContent,
  10. SheetHeader,
  11. SheetTitle,
  12. } from 'ui'
  13. import { BucketsPicker } from './BucketsPicker'
  14. import type { AllowedBucketType } from './types'
  15. import type { Bucket } from '@/data/storage/buckets-query'
  16. export type BucketsPickerDialogProps = {
  17. open: boolean
  18. onOpenChange: (open: boolean) => void
  19. acceptedFileExtensions?: string[]
  20. hideUnsupportedFiles?: boolean
  21. onSelect: (bucket: Bucket) => void
  22. allowedBucketType: AllowedBucketType
  23. }
  24. export function BucketsPickerDialog({
  25. open,
  26. onOpenChange,
  27. onSelect,
  28. allowedBucketType,
  29. }: BucketsPickerDialogProps) {
  30. const isMobileLayout = useBreakpoint('lg')
  31. return (
  32. <>
  33. {isMobileLayout ? (
  34. <Sheet open={open} onOpenChange={onOpenChange}>
  35. <SheetContent side="bottom" className="flex h-[85vh] flex-col gap-0 p-0">
  36. <SheetHeader className="flex flex-row items-center gap-2 border-b border-overlay px-4 py-3 text-left">
  37. <Button type="text" size="tiny" className="shrink-0">
  38. Buckets
  39. </Button>
  40. <SheetTitle className="min-w-0 flex-1 text-left">Select a bucket</SheetTitle>
  41. </SheetHeader>
  42. <div className="flex h-full min-h-0 min-w-0 flex-1 flex-col px-2 pb-3 pt-2">
  43. <BucketsPicker onSelectBucket={onSelect} allowedBucketType={allowedBucketType} />
  44. </div>
  45. </SheetContent>
  46. </Sheet>
  47. ) : (
  48. <Dialog open={open} onOpenChange={onOpenChange}>
  49. <DialogContent
  50. size="xxlarge"
  51. className="flex h-[85vh] max-h-[500px] max-w-5xl flex-col gap-0 overflow-hidden p-0"
  52. >
  53. <DialogHeader className="flex flex-row items-center gap-2 border-b border-overlay px-6 py-4">
  54. <Button type="text" size="tiny" className="shrink-0">
  55. Buckets
  56. </Button>
  57. <DialogTitle className="min-w-0 flex-1">Select a bucket</DialogTitle>
  58. </DialogHeader>
  59. <div className="flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden p-3">
  60. <BucketsPicker onSelectBucket={onSelect} allowedBucketType={allowedBucketType} />
  61. </div>
  62. </DialogContent>
  63. </Dialog>
  64. )}
  65. </>
  66. )
  67. }