'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/paths'; import Link from 'next/link'; import PhotoDate from '@/photo/PhotoDate'; import EditButton from './EditButton'; import { useAppState } from '@/state/AppState'; import { RevalidatePhoto } from '@/photo/InfinitePhotoScroll'; import PhotoSyncButton from './PhotoSyncButton'; import DeletePhotoButton from './DeletePhotoButton'; import { Timezone } from '@/utility/timezone'; import IconHidden from '@/components/icons/IconHidden'; import Tooltip from '@/components/Tooltip'; import { photoNeedsToBeSynced, getPhotoSyncStatusText } from '@/photo/sync'; export default function AdminPhotosTable({ photos, onLastPhotoVisible, revalidatePhoto, photoIdsSyncing = [], hasAiTextGeneration, dateType = 'createdAt', canEdit = true, canDelete = true, timezone, shouldScrollIntoViewOnExternalSync, }: { photos: Photo[], onLastPhotoVisible?: () => void revalidatePhoto?: RevalidatePhoto photoIdsSyncing?: string[] hasAiTextGeneration: boolean dateType?: 'createdAt' | 'updatedAt' canEdit?: boolean canDelete?: boolean timezone?: Timezone shouldScrollIntoViewOnExternalSync?: 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)} {photo.hidden && {' '} } {photo.priorityOrder !== null && {photo.priorityOrder} }
{<> {photoNeedsToBeSynced(photo) && } }
{canEdit && } 0} className={opacityForPhotoId(photo.id)} shouldConfirm shouldToast shouldScrollIntoViewOnExternalSync={ shouldScrollIntoViewOnExternalSync} /> {canDelete && revalidatePhoto?.(photo.id, true)} />}
)}
); }