'use client'; import { clsx } from 'clsx/lite'; import AppGrid from '@/components/AppGrid'; import AdminPhotosTable from '@/admin/AdminPhotosTable'; import AdminPhotosTableInfinite from '@/admin/AdminPhotosTableInfinite'; import PathLoaderButton from '@/components/primitives/PathLoaderButton'; import { PATH_ADMIN_PHOTOS_UPDATES } from '@/app/path'; import { Photo } from '@/photo'; import { StorageListResponse } from '@/platforms/storage'; import AdminUploadsTable from './AdminUploadsTable'; import { Timezone } from '@/utility/timezone'; import { useAppState } from '@/app/AppState'; import PhotoUploadWithStatus from '@/photo/PhotoUploadWithStatus'; import { pluralize } from '@/utility/string'; import IconBroom from '@/components/icons/IconBroom'; import ResponsiveText from '@/components/primitives/ResponsiveText'; import { useAppText } from '@/i18n/state/client'; import SyncColorButton from '@/photo/color/SyncColorButton'; export default function AdminPhotosClient({ photos, photosCount, photosCountNeedsSync, blobPhotoUrls, shouldResize, hasAiTextGeneration, onLastUpload, infiniteScrollInitial, infiniteScrollMultiple, timezone, debugColorData, }: { photos: Photo[] photosCount: number photosCountNeedsSync: number blobPhotoUrls: StorageListResponse shouldResize: boolean hasAiTextGeneration: boolean onLastUpload: () => Promise infiniteScrollInitial: number infiniteScrollMultiple: number timezone: Timezone debugColorData?: boolean }) { const { uploadState: { isUploading } } = useAppState(); const appText = useAppText(); return (
{debugColorData && } {photosCountNeedsSync > 0 && } tooltip={( pluralize( photosCountNeedsSync, appText.photo.photo, appText.photo.photoPlural.toLocaleLowerCase(), ) + ' missing data or AI-generated text' )} className={clsx( 'text-blue-600 dark:text-blue-400', 'border border-blue-200 dark:border-blue-800/60', 'active:bg-blue-50 dark:active:bg-blue-950/50', 'disabled:bg-blue-50 dark:disabled:bg-blue-950/50', isUploading && 'hidden md:inline-flex', )} spinnerColor="text" spinnerClassName="text-blue-200 dark:text-blue-600/40" hideText="never" > {pluralize( photosCountNeedsSync, appText.admin.update, appText.admin.updatePlural, )} }
{blobPhotoUrls.length > 0 &&
Photo Blobs ({blobPhotoUrls.length})
} {/* Use custom spacing to address gap/space-y compatibility quirks */}
{photosCount > photos.length && }
} /> ); }