import { useInfiniteQuery } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { generatePath, useNavigate } from 'react-router'; import { searchQueries } from '/@/renderer/features/search/api/search-api'; import { CollapsibleCommandGroup } from '/@/renderer/features/search/components/collapsible-command-group'; import { CommandItemSelectable } from '/@/renderer/features/search/components/command-item-selectable'; import { LibraryCommandItem } from '/@/renderer/features/search/components/library-command-item'; import { AppRoute } from '/@/renderer/router/routes'; import { useCurrentServer } from '/@/renderer/store'; import { Box } from '/@/shared/components/box/box'; import { Spinner } from '/@/shared/components/spinner/spinner'; import { Text } from '/@/shared/components/text/text'; import { LibraryItem } from '/@/shared/types/domain-types'; interface SearchAlbumsSectionProps { debouncedQuery: string; expanded: boolean; isHome: boolean; onSelectResult: () => void; onToggle: () => void; query: string; } export function SearchAlbumsSection({ debouncedQuery, expanded, isHome, onSelectResult, onToggle, query, }: SearchAlbumsSectionProps) { const navigate = useNavigate(); const server = useCurrentServer(); const { t } = useTranslation(); const { data, fetchNextPage, hasNextPage, isFetched, isFetchingNextPage, isLoading } = useInfiniteQuery( searchQueries.searchAlbumsInfinite({ enabled: isHome && debouncedQuery !== '' && query !== '', searchTerm: debouncedQuery, serverId: server?.id, }), ); const albums = data?.pages.flatMap((p) => p.albums) ?? []; const showSection = isHome; const numberOfResults = hasNextPage ? `${albums.length}+` : albums.length; if (!showSection) return null; return ( {isLoading ? ( ) : ( <> {albums.map((album) => ( { navigate( generatePath(AppRoute.LIBRARY_ALBUMS_DETAIL, { albumId: album.id, }), ); onSelectResult(); }} value={`search-album-${album.id}`} > {({ isHighlighted }) => ( artist.name) .join(', ')} title={album.name} /> )} ))} {hasNextPage && ( fetchNextPage()} value="search-albums-load-more" > {() => (
{isFetchingNextPage ? ( ) : ( {t('action.viewMore', { postProcess: 'titleCase' })} )}
)}
)} )}
); }