import { useQuery } from '@tanstack/react-query'; import { useRef } from 'react'; import { useLocation, useParams } from 'react-router'; import { useItemImageUrl } from '/@/renderer/components/item-image/item-image'; import { NativeScrollArea } from '/@/renderer/components/native-scroll-area/native-scroll-area'; import { albumQueries } from '/@/renderer/features/albums/api/album-api'; import { AlbumDetailContent } from '/@/renderer/features/albums/components/album-detail-content'; import { AlbumDetailHeader } from '/@/renderer/features/albums/components/album-detail-header'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { LibraryBackgroundImage, LibraryBackgroundOverlay, } from '/@/renderer/features/shared/components/library-background-overlay'; import { LibraryContainer } from '/@/renderer/features/shared/components/library-container'; import { LibraryHeaderBar } from '/@/renderer/features/shared/components/library-header-bar'; import { PageErrorBoundary } from '/@/renderer/features/shared/components/page-error-boundary'; import { useFastAverageColor, useWaitForColorCalculation } from '/@/renderer/hooks'; import { useCurrentServer, useGeneralSettings } from '/@/renderer/store'; import { LibraryItem } from '/@/shared/types/domain-types'; const AlbumDetailRoute = () => { const scrollAreaRef = useRef(null); const headerRef = useRef(null); const { albumBackground, albumBackgroundBlur } = useGeneralSettings(); const { albumId } = useParams() as { albumId: string }; const server = useCurrentServer(); const location = useLocation(); const detailQuery = useQuery({ ...albumQueries.detail({ query: { id: albumId }, serverId: server?.id }), initialData: location.state?.item, staleTime: 0, }); const imageUrl = useItemImageUrl({ id: detailQuery?.data?.imageId || undefined, itemType: LibraryItem.ALBUM, type: 'itemCard', }) || ''; const { background: backgroundColor, isLoading: isColorLoading } = useFastAverageColor({ id: albumId, src: imageUrl, srcLoaded: !detailQuery.isLoading, }); const background = backgroundColor; const showBlurredImage = albumBackground; const { isReady } = useWaitForColorCalculation({ hasImage: !!imageUrl, isLoading: isColorLoading, routeId: albumId, showBlurredImage, }); if (!isReady) { return null; } return ( {detailQuery?.data?.name} ), offset: 200, target: headerRef, }} ref={scrollAreaRef} > {showBlurredImage ? ( ) : ( )} } /> ); }; const AlbumDetailRouteWithBoundary = () => { return ( ); }; export default AlbumDetailRouteWithBoundary;