import { AddMediaToAlbumDialog } from "@/components/albums/add-media-to-album-dialog"; import { AuthenticatedImage } from "@/components/media/authenticated-image"; import { MediaViewer } from "@/components/media/media-viewer"; import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger, } from "@/components/ui/context-menu"; import type { Media } from "@/domain/types"; import { useGetAlbum, useGetAlbumMedia, useRemoveMediaFromAlbum, } from "@/features/albums/use-albums"; import { createFileRoute } from "@tanstack/react-router"; import { Eye, Trash2 } from "lucide-react"; import { useState } from "react"; export const Route = createFileRoute("/albums/$albumId")({ component: AlbumDetailPage, }); function AlbumDetailPage() { const { albumId } = Route.useParams(); const { data: album, isLoading: isLoadingAlbum, error: albumError, } = useGetAlbum(albumId); const { data: media, isLoading: isLoadingMedia, error: mediaError, } = useGetAlbumMedia(albumId); const [selectedMedia, setSelectedMedia] = useState(null); const { mutate: removeMedia, isPending: isRemoving } = useRemoveMediaFromAlbum(albumId); const isLoading = isLoadingAlbum || isLoadingMedia; const error = albumError || mediaError; const handleRemoveMedia = (mediaId: string) => { removeMedia({ media_ids: [mediaId], }); }; return (

{album?.name ?? "Loading album..."}

{isLoading &&

Loading photos...

} {error &&

Error loading photos: {error.message}

} {media && media.length > 0 && (
{media.map((m) => (
setSelectedMedia(m)} >
setSelectedMedia(m)}> View handleRemoveMedia(m.id)} disabled={isRemoving} > Remove from Album
))}
)} {media && media.length === 0 &&

This album is empty.

} { if (!open) { setSelectedMedia(null); } }} />
); }