'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 '@/site/paths'; import Link from 'next/link'; import { AiOutlineEyeInvisible } from 'react-icons/ai'; 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'; export default function AdminPhotosTable({ photos, onLastPhotoVisible, revalidatePhoto, photoIdsSyncing = [], hasAiTextGeneration, showUpdatedAt, canEdit = true, canDelete = true, timezone, }: { photos: Photo[], onLastPhotoVisible?: () => void revalidatePhoto?: RevalidatePhoto photoIdsSyncing?: string[] hasAiTextGeneration: boolean showUpdatedAt?: boolean canEdit?: boolean canDelete?: boolean timezone?: Timezone }) { const { invalidateSwr } = useAppState(); const opacityForPhotoId = (photoId: string) => photoIdsSyncing.length > 0 && !photoIdsSyncing.includes(photoId) ? 'opacity-40' : undefined; return ( {photos.map((photo, index) =>
{titleForPhoto(photo)} {photo.hidden && {' '} } {photo.priorityOrder !== null && {photo.priorityOrder} }
{canEdit && } 0} className={opacityForPhotoId(photo.id)} shouldConfirm shouldToast /> {canDelete && revalidatePhoto?.(photo.id, true)} />}
)}
); }