'use client'; import { Photo, titleForPhoto } from '@/photo'; import AdminTable from './AdminTable'; import { Fragment } from 'react'; import PhotoSmall from '@/photo/PhotoSmall'; import { clsx } from 'clsx/lite'; import { pathForAdminPhotoEdit, pathForPhoto } from '@/app/path'; import Link from 'next/link'; import PhotoDate from '@/photo/PhotoDate'; import EditButton from './EditButton'; import { useAppState } from '@/app/AppState'; import { RevalidatePhoto } from '@/photo/InfinitePhotoScroll'; import PhotoSyncButton from './PhotoSyncButton'; import DeletePhotoButton from './DeletePhotoButton'; import { Timezone } from '@/utility/timezone'; import { photoNeedsToBeUpdated } from '@/photo/update'; import PhotoVisibilityIcon from '@/photo/visibility/PhotoVisibilityIcon'; import { doesPhotoHaveDefaultVisibility } from '@/photo/visibility'; import UpdateTooltip from '@/photo/update/UpdateTooltip'; import PhotoColors from '@/photo/color/PhotoColors'; import SyncColorButton from '@/photo/color/SyncColorButton'; export default function AdminPhotosTable({ photos, onLastPhotoVisible, revalidatePhoto, photoIdsSyncing = [], hasAiTextGeneration, dateType = 'createdAt', canEdit = true, canDelete = true, timezone, shouldScrollIntoViewOnExternalSync, updateMode, debugColorData, }: { photos: Photo[], onLastPhotoVisible?: () => void revalidatePhoto?: RevalidatePhoto photoIdsSyncing?: string[] hasAiTextGeneration: boolean dateType?: 'createdAt' | 'updatedAt' canEdit?: boolean canDelete?: boolean timezone?: Timezone shouldScrollIntoViewOnExternalSync?: boolean // Only sync color data where possible updateMode?: boolean debugColorData?: boolean }) { const { invalidateSwr } = useAppState(); const opacityForPhotoId = (photoId: string) => photoIdsSyncing.length > 0 && !photoIdsSyncing.includes(photoId) ? 'opacity-40' : undefined; return ( {photos.map((photo, index) =>
{titleForPhoto(photo, false)} {debugColorData && photo.colorData &&
}
{!doesPhotoHaveDefaultVisibility(photo) && } {photoNeedsToBeUpdated(photo) && } {photo.priorityOrder !== null && {photo.priorityOrder} }
{canEdit && } 0} className={opacityForPhotoId(photo.id)} shouldConfirm shouldToast shouldScrollIntoViewOnExternalSync={ shouldScrollIntoViewOnExternalSync} updateMode={updateMode} /> {debugColorData && } {canDelete && revalidatePhoto?.(photo.id, true)} />}
)}
); }