import { PermissionAction } from '@supabase/shared-types/out/constants'
import { AlertCircle, ChevronDown, Copy, Download, LoaderCircle, Trash2, X } from 'lucide-react'
import SVG from 'react-inlinesvg'
import {
Button,
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from 'ui'
import { URL_EXPIRY_DURATION } from '../Storage.constants'
import { StorageItem } from '../Storage.types'
import { getPathAlongOpenedFolders } from './StorageExplorer.utils'
import { useCopyUrl } from './useCopyUrl'
import { useFetchFileUrlQuery } from './useFetchFileUrlQuery'
import { ButtonTooltip } from '@/components/ui/ButtonTooltip'
import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
import { BASE_PATH } from '@/lib/constants'
import { formatBytes } from '@/lib/helpers'
import { useStorageExplorerStateSnapshot } from '@/state/storage-explorer'
const PREVIEW_SIZE_LIMIT = 10 * 1024 * 1024 // 10MB
const PreviewFile = ({ item }: { item: StorageItem }) => {
const { projectRef, selectedBucket, openedFolders } = useStorageExplorerStateSnapshot()
const folderPath = getPathAlongOpenedFolders({ openedFolders, selectedBucket }, false)
const path = [folderPath, item.name].filter(Boolean).join('/')
const { data: previewUrl, isPending: isLoading } = useFetchFileUrlQuery({
path,
projectRef: projectRef,
bucket: selectedBucket,
})
// if the size is not available, we set it to be greater than the max size
const size = +(item.metadata?.size ?? PREVIEW_SIZE_LIMIT + 1)
const mimeType = item.metadata?.mimetype
const isSkipped = !!mimeType && !!size && size > PREVIEW_SIZE_LIMIT
if (isLoading) {
return (
)
}
if (isSkipped) {
return (
)
}
if (!mimeType || !previewUrl) {
return (