wrap all page routes in LibraryContainer

This commit is contained in:
jeffvli
2025-11-22 14:38:48 -08:00
parent a5fa5727d3
commit c5c3c596a0
14 changed files with 218 additions and 185 deletions
@@ -5,6 +5,7 @@ import { ListContext } from '/@/renderer/context/list-context';
import { AlbumListContent } from '/@/renderer/features/albums/components/album-list-content'; import { AlbumListContent } from '/@/renderer/features/albums/components/album-list-content';
import { AlbumListHeader } from '/@/renderer/features/albums/components/album-list-header'; import { AlbumListHeader } from '/@/renderer/features/albums/components/album-list-header';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
const AlbumListRoute = () => { const AlbumListRoute = () => {
const { albumArtistId, genreId } = useParams(); const { albumArtistId, genreId } = useParams();
@@ -24,8 +25,10 @@ const AlbumListRoute = () => {
return ( return (
<AnimatedPage> <AnimatedPage>
<ListContext.Provider value={providerValue}> <ListContext.Provider value={providerValue}>
<LibraryContainer>
<AlbumListHeader /> <AlbumListHeader />
<AlbumListContent /> <AlbumListContent />
</LibraryContainer>
</ListContext.Provider> </ListContext.Provider>
</AnimatedPage> </AnimatedPage>
); );
@@ -1,8 +1,7 @@
import { useQuery } from '@tanstack/react-query'; import { useQuery } from '@tanstack/react-query';
import { Fragment } from 'react'; import { Fragment } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { generatePath, useParams } from 'react-router'; import { generatePath, Link, useParams } from 'react-router';
import { Link } from 'react-router';
import styles from './dummy-album-detail-route.module.css'; import styles from './dummy-album-detail-route.module.css';
@@ -10,6 +9,7 @@ import { api } from '/@/renderer/api';
import { queryKeys } from '/@/renderer/api/query-keys'; import { queryKeys } from '/@/renderer/api/query-keys';
import { usePlayer } from '/@/renderer/features/player/context/player-context'; import { usePlayer } from '/@/renderer/features/player/context/player-context';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
import { LibraryHeader } from '/@/renderer/features/shared/components/library-header'; import { LibraryHeader } from '/@/renderer/features/shared/components/library-header';
import { PlayButton } from '/@/renderer/features/shared/components/play-button'; import { PlayButton } from '/@/renderer/features/shared/components/play-button';
import { useCreateFavorite } from '/@/renderer/features/shared/mutations/create-favorite-mutation'; import { useCreateFavorite } from '/@/renderer/features/shared/mutations/create-favorite-mutation';
@@ -115,9 +115,9 @@ const DummyAlbumDetailRoute = () => {
return ( return (
<AnimatedPage key={`dummy-album-detail-${albumId}`}> <AnimatedPage key={`dummy-album-detail-${albumId}`}>
<LibraryContainer>
<Stack ref={ref}> <Stack ref={ref}>
<LibraryHeader <LibraryHeader
background={background}
imageUrl={detailQuery?.data?.imageUrl} imageUrl={detailQuery?.data?.imageUrl}
item={{ route: AppRoute.LIBRARY_SONGS, type: LibraryItem.SONG }} item={{ route: AppRoute.LIBRARY_SONGS, type: LibraryItem.SONG }}
loading={!background || colorId !== albumId} loading={!background || colorId !== albumId}
@@ -168,7 +168,9 @@ const DummyAlbumDetailRoute = () => {
<ActionIcon <ActionIcon
icon="favorite" icon="favorite"
iconProps={{ iconProps={{
fill: detailQuery?.data?.userFavorite ? 'primary' : undefined, fill: detailQuery?.data?.userFavorite
? 'primary'
: undefined,
}} }}
loading={ loading={
createFavoriteMutation.isPending || createFavoriteMutation.isPending ||
@@ -221,6 +223,7 @@ const DummyAlbumDetailRoute = () => {
</Center> </Center>
</section> </section>
</div> </div>
</LibraryContainer>
</AnimatedPage> </AnimatedPage>
); );
}; };
@@ -7,6 +7,7 @@ import { ListContext } from '/@/renderer/context/list-context';
import { artistsQueries } from '/@/renderer/features/artists/api/artists-api'; import { artistsQueries } from '/@/renderer/features/artists/api/artists-api';
import { AlbumArtistDetailTopSongsListHeader } from '/@/renderer/features/artists/components/album-artist-detail-top-songs-list-header'; import { AlbumArtistDetailTopSongsListHeader } from '/@/renderer/features/artists/components/album-artist-detail-top-songs-list-header';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
import { useCurrentServer } from '/@/renderer/store/auth.store'; import { useCurrentServer } from '/@/renderer/store/auth.store';
import { LibraryItem } from '/@/shared/types/domain-types'; import { LibraryItem } from '/@/shared/types/domain-types';
@@ -47,6 +48,7 @@ const AlbumArtistDetailTopSongsListRoute = () => {
return ( return (
<AnimatedPage> <AnimatedPage>
<ListContext.Provider value={providerValue}> <ListContext.Provider value={providerValue}>
<LibraryContainer>
<AlbumArtistDetailTopSongsListHeader <AlbumArtistDetailTopSongsListHeader
data={topSongsQuery?.data?.items || []} data={topSongsQuery?.data?.items || []}
itemCount={itemCount} itemCount={itemCount}
@@ -56,6 +58,7 @@ const AlbumArtistDetailTopSongsListRoute = () => {
data={topSongsQuery?.data?.items || []} data={topSongsQuery?.data?.items || []}
tableRef={tableRef} tableRef={tableRef}
/> */} /> */}
</LibraryContainer>
</ListContext.Provider> </ListContext.Provider>
</AnimatedPage> </AnimatedPage>
); );
@@ -4,6 +4,7 @@ import { ListContext } from '/@/renderer/context/list-context';
import { AlbumArtistListContent } from '/@/renderer/features/artists/components/album-artist-list-content'; import { AlbumArtistListContent } from '/@/renderer/features/artists/components/album-artist-list-content';
import { AlbumArtistListHeader } from '/@/renderer/features/artists/components/album-artist-list-header'; import { AlbumArtistListHeader } from '/@/renderer/features/artists/components/album-artist-list-header';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
import { ItemListKey } from '/@/shared/types/types'; import { ItemListKey } from '/@/shared/types/types';
const AlbumArtistListRoute = () => { const AlbumArtistListRoute = () => {
@@ -23,8 +24,10 @@ const AlbumArtistListRoute = () => {
return ( return (
<AnimatedPage> <AnimatedPage>
<ListContext.Provider value={providerValue}> <ListContext.Provider value={providerValue}>
<LibraryContainer>
<AlbumArtistListHeader /> <AlbumArtistListHeader />
<AlbumArtistListContent /> <AlbumArtistListContent />
</LibraryContainer>
</ListContext.Provider> </ListContext.Provider>
</AnimatedPage> </AnimatedPage>
); );
@@ -4,6 +4,7 @@ import { ListContext } from '/@/renderer/context/list-context';
import { ArtistListContent } from '/@/renderer/features/artists/components/artist-list-content'; import { ArtistListContent } from '/@/renderer/features/artists/components/artist-list-content';
import { ArtistListHeader } from '/@/renderer/features/artists/components/artist-list-header'; import { ArtistListHeader } from '/@/renderer/features/artists/components/artist-list-header';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
import { ItemListKey } from '/@/shared/types/types'; import { ItemListKey } from '/@/shared/types/types';
const ArtistListRoute = () => { const ArtistListRoute = () => {
@@ -23,8 +24,10 @@ const ArtistListRoute = () => {
return ( return (
<AnimatedPage> <AnimatedPage>
<ListContext.Provider value={providerValue}> <ListContext.Provider value={providerValue}>
<LibraryContainer>
<ArtistListHeader /> <ArtistListHeader />
<ArtistListContent /> <ArtistListContent />
</LibraryContainer>
</ListContext.Provider> </ListContext.Provider>
</AnimatedPage> </AnimatedPage>
); );
@@ -4,6 +4,7 @@ import { ListContext } from '/@/renderer/context/list-context';
import { GenreListContent } from '/@/renderer/features/genres/components/genre-list-content'; import { GenreListContent } from '/@/renderer/features/genres/components/genre-list-content';
import { GenreListHeader } from '/@/renderer/features/genres/components/genre-list-header'; import { GenreListHeader } from '/@/renderer/features/genres/components/genre-list-header';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
import { ItemListKey } from '/@/shared/types/types'; import { ItemListKey } from '/@/shared/types/types';
const GenreListRoute = () => { const GenreListRoute = () => {
@@ -23,8 +24,10 @@ const GenreListRoute = () => {
return ( return (
<AnimatedPage> <AnimatedPage>
<ListContext.Provider value={providerValue}> <ListContext.Provider value={providerValue}>
<LibraryContainer>
<GenreListHeader /> <GenreListHeader />
<GenreListContent /> <GenreListContent />
</LibraryContainer>
</ListContext.Provider> </ListContext.Provider>
</AnimatedPage> </AnimatedPage>
); );
@@ -5,6 +5,7 @@ import { NowPlayingHeader } from '/@/renderer/features/now-playing/components/no
import { PlayQueue } from '/@/renderer/features/now-playing/components/play-queue'; import { PlayQueue } from '/@/renderer/features/now-playing/components/play-queue';
import { PlayQueueListControls } from '/@/renderer/features/now-playing/components/play-queue-list-controls'; import { PlayQueueListControls } from '/@/renderer/features/now-playing/components/play-queue-list-controls';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
import { ItemListKey } from '/@/shared/types/types'; import { ItemListKey } from '/@/shared/types/types';
const NowPlayingRoute = () => { const NowPlayingRoute = () => {
@@ -13,6 +14,7 @@ const NowPlayingRoute = () => {
return ( return (
<AnimatedPage> <AnimatedPage>
<LibraryContainer>
<NowPlayingHeader /> <NowPlayingHeader />
<PlayQueueListControls <PlayQueueListControls
handleSearch={setSearch} handleSearch={setSearch}
@@ -21,6 +23,7 @@ const NowPlayingRoute = () => {
type={ItemListKey.QUEUE_SONG} type={ItemListKey.QUEUE_SONG}
/> />
<PlayQueue listKey={ItemListKey.QUEUE_SONG} searchTerm={search} /> <PlayQueue listKey={ItemListKey.QUEUE_SONG} searchTerm={search} />
</LibraryContainer>
</AnimatedPage> </AnimatedPage>
); );
}; };
@@ -13,6 +13,7 @@ import { SaveAsPlaylistForm } from '/@/renderer/features/playlists/components/sa
import { useCreatePlaylist } from '/@/renderer/features/playlists/mutations/create-playlist-mutation'; import { useCreatePlaylist } from '/@/renderer/features/playlists/mutations/create-playlist-mutation';
import { useDeletePlaylist } from '/@/renderer/features/playlists/mutations/delete-playlist-mutation'; import { useDeletePlaylist } from '/@/renderer/features/playlists/mutations/delete-playlist-mutation';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
import { AppRoute } from '/@/renderer/router/routes'; import { AppRoute } from '/@/renderer/router/routes';
import { useCurrentServer, usePlaylistDetailStore } from '/@/renderer/store'; import { useCurrentServer, usePlaylistDetailStore } from '/@/renderer/store';
import { ActionIcon } from '/@/shared/components/action-icon/action-icon'; import { ActionIcon } from '/@/shared/components/action-icon/action-icon';
@@ -186,6 +187,7 @@ const PlaylistDetailSongListRoute = () => {
return ( return (
<AnimatedPage key={`playlist-detail-songList-${playlistId}`}> <AnimatedPage key={`playlist-detail-songList-${playlistId}`}>
<LibraryContainer>
<PlaylistDetailSongListHeader <PlaylistDetailSongListHeader
handlePlay={handlePlay} handlePlay={handlePlay}
handleToggleShowQueryBuilder={handleToggleShowQueryBuilder} handleToggleShowQueryBuilder={handleToggleShowQueryBuilder}
@@ -205,7 +207,9 @@ const PlaylistDetailSongListRoute = () => {
onClick={handleToggleExpand} onClick={handleToggleExpand}
size="xs" size="xs"
/> />
<Text>{t('form.queryEditor.title', { postProcess: 'titleCase' })}</Text> <Text>
{t('form.queryEditor.title', { postProcess: 'titleCase' })}
</Text>
</Group> </Group>
{isQueryBuilderExpanded && ( {isQueryBuilderExpanded && (
<PlaylistQueryBuilder <PlaylistQueryBuilder
@@ -224,6 +228,7 @@ const PlaylistDetailSongListRoute = () => {
</motion.div> </motion.div>
)} )}
{/* <PlaylistDetailSongListContent songs={filterSortedSongs} tableRef={tableRef} /> */} {/* <PlaylistDetailSongListContent songs={filterSortedSongs} tableRef={tableRef} /> */}
</LibraryContainer>
</AnimatedPage> </AnimatedPage>
); );
}; };
@@ -5,6 +5,7 @@ import { ListContext } from '/@/renderer/context/list-context';
import { PlaylistListContent } from '/@/renderer/features/playlists/components/playlist-list-content'; import { PlaylistListContent } from '/@/renderer/features/playlists/components/playlist-list-content';
import { PlaylistListHeader } from '/@/renderer/features/playlists/components/playlist-list-header'; import { PlaylistListHeader } from '/@/renderer/features/playlists/components/playlist-list-header';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
import { ItemListKey } from '/@/shared/types/types'; import { ItemListKey } from '/@/shared/types/types';
const PlaylistListRoute = () => { const PlaylistListRoute = () => {
@@ -25,8 +26,10 @@ const PlaylistListRoute = () => {
return ( return (
<AnimatedPage> <AnimatedPage>
<ListContext.Provider value={providerValue}> <ListContext.Provider value={providerValue}>
<LibraryContainer>
<PlaylistListHeader /> <PlaylistListHeader />
<PlaylistListContent /> <PlaylistListContent />
</LibraryContainer>
</ListContext.Provider> </ListContext.Provider>
</AnimatedPage> </AnimatedPage>
); );
@@ -4,6 +4,7 @@ import { useLocation, useParams } from 'react-router';
import { SearchContent } from '/@/renderer/features/search/components/search-content'; import { SearchContent } from '/@/renderer/features/search/components/search-content';
import { SearchHeader } from '/@/renderer/features/search/components/search-header'; import { SearchHeader } from '/@/renderer/features/search/components/search-header';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
const SearchRoute = () => { const SearchRoute = () => {
const { state: locationState } = useLocation(); const { state: locationState } = useLocation();
@@ -13,8 +14,10 @@ const SearchRoute = () => {
return ( return (
<AnimatedPage key={`search-${navigationId}`}> <AnimatedPage key={`search-${navigationId}`}>
<LibraryContainer>
<SearchHeader navigationId={navigationId} /> <SearchHeader navigationId={navigationId} />
<SearchContent key={`page-${itemType}`} /> <SearchContent key={`page-${itemType}`} />
</LibraryContainer>
</AnimatedPage> </AnimatedPage>
); );
}; };
@@ -4,6 +4,7 @@ import { SettingsContent } from '/@/renderer/features/settings/components/settin
import { SettingsHeader } from '/@/renderer/features/settings/components/settings-header'; import { SettingsHeader } from '/@/renderer/features/settings/components/settings-header';
import { SettingSearchContext } from '/@/renderer/features/settings/context/search-context'; import { SettingSearchContext } from '/@/renderer/features/settings/context/search-context';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
import { Flex } from '/@/shared/components/flex/flex'; import { Flex } from '/@/shared/components/flex/flex';
const SettingsRoute = () => { const SettingsRoute = () => {
@@ -12,10 +13,12 @@ const SettingsRoute = () => {
return ( return (
<AnimatedPage> <AnimatedPage>
<SettingSearchContext.Provider value={search}> <SettingSearchContext.Provider value={search}>
<LibraryContainer>
<Flex direction="column" h="100%" w="100%"> <Flex direction="column" h="100%" w="100%">
<SettingsHeader setSearch={setSearch} /> <SettingsHeader setSearch={setSearch} />
<SettingsContent /> <SettingsContent />
</Flex> </Flex>
</LibraryContainer>
</SettingSearchContext.Provider> </SettingSearchContext.Provider>
</AnimatedPage> </AnimatedPage>
); );
@@ -1,11 +1,10 @@
.container { .container {
position: relative; position: relative;
display: flex;
flex-direction: column;
width: 100%; width: 100%;
max-width: var(--theme-content-max-width); max-width: var(--theme-content-max-width);
height: 100%;
min-height: 0;
margin: 0 auto; margin: 0 auto;
} }
.content {
position: relative;
z-index: 0;
}
@@ -7,9 +7,5 @@ interface LibraryContainerProps {
} }
export const LibraryContainer = ({ children }: LibraryContainerProps) => { export const LibraryContainer = ({ children }: LibraryContainerProps) => {
return ( return <div className={styles.container}>{children}</div>;
<div className={styles.container}>
<div className={styles.content}>{children}</div>
</div>
);
}; };
@@ -5,6 +5,7 @@ import { useParams, useSearchParams } from 'react-router';
import { ListContext } from '/@/renderer/context/list-context'; import { ListContext } from '/@/renderer/context/list-context';
import { genresQueries } from '/@/renderer/features/genres/api/genres-api'; import { genresQueries } from '/@/renderer/features/genres/api/genres-api';
import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page'; import { AnimatedPage } from '/@/renderer/features/shared/components/animated-page';
import { LibraryContainer } from '/@/renderer/features/shared/components/library-container';
import { SongListContent } from '/@/renderer/features/songs/components/song-list-content'; import { SongListContent } from '/@/renderer/features/songs/components/song-list-content';
import { SongListHeader } from '/@/renderer/features/songs/components/song-list-header'; import { SongListHeader } from '/@/renderer/features/songs/components/song-list-header';
import { useCurrentServer } from '/@/renderer/store'; import { useCurrentServer } from '/@/renderer/store';
@@ -73,8 +74,10 @@ const TrackListRoute = () => {
return ( return (
<AnimatedPage> <AnimatedPage>
<ListContext.Provider value={providerValue}> <ListContext.Provider value={providerValue}>
<LibraryContainer>
<SongListHeader title={title} /> <SongListHeader title={title} />
<SongListContent /> <SongListContent />
</LibraryContainer>
</ListContext.Provider> </ListContext.Provider>
</AnimatedPage> </AnimatedPage>
); );