import ImageMedium from '@/components/image/ImageMedium'; import { UrlAddStatus } from './AdminUploadsClient'; import { getExtensionFromStorageUrl, getIdFromStorageUrl, } from '@/platforms/storage'; import clsx from 'clsx/lite'; import ResponsiveDate from '@/components/ResponsiveDate'; import Spinner from '@/components/Spinner'; import { FaRegCircleCheck } from 'react-icons/fa6'; import AddButton from './AddButton'; import { pathForAdminUploadUrl } from '@/app/paths'; import DeleteBlobButton from './DeleteUploadButton'; import { useEffect, useRef } from 'react'; import { isElementEntirelyInViewport } from '@/utility/dom'; export default function AdminUploadsTableRow({ url, status, statusMessage, uploadedAt, size, isAdding, isDeleting, isComplete, setIsDeleting, urlAddStatuses, setUrlAddStatuses, }: UrlAddStatus & { isAdding?: boolean isDeleting?: boolean isComplete?: boolean setIsDeleting?: (isDeleting: boolean) => void urlAddStatuses: UrlAddStatus[] setUrlAddStatuses?: (urlAddStatuses: UrlAddStatus[]) => void }) { const ref = useRef(null); useEffect(() => { if ( status === 'adding' && !isElementEntirelyInViewport(ref.current) ) { window.scrollTo({ top: (ref.current?.offsetTop ?? 0) - 16, behavior: 'smooth', }); } }, [status]); return (
{uploadedAt ? : '—'}
{isAdding || isComplete ? status === 'added' ? 'Added' : status === 'adding' ? statusMessage ?? 'Adding ...' : 'Waiting' : size ? `${size} ${getExtensionFromStorageUrl(url)?.toUpperCase()}` : getExtensionFromStorageUrl(url)?.toUpperCase()}
{isAdding || isComplete ? <> {status === 'added' ? : status === 'adding' && } : <> setIsDeleting?.(true)} onDelete={() => { setIsDeleting?.(false); setUrlAddStatuses?.(urlAddStatuses .filter(({ url: urlToRemove }) => urlToRemove !== url)); }} isLoading={isDeleting} /> }
); }