mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
191 lines
5.2 KiB
TypeScript
191 lines
5.2 KiB
TypeScript
![]() |
import globalize from 'scripts/globalize';
|
||
|
import * as userSettings from 'scripts/settings/userSettings';
|
||
|
import { LibraryTab } from 'types/libraryTab';
|
||
|
|
||
|
interface TabDefinition {
|
||
|
index: number
|
||
|
label: string
|
||
|
value: LibraryTab
|
||
|
isDefault?: boolean
|
||
|
}
|
||
|
|
||
|
interface TabRoute {
|
||
|
path: string,
|
||
|
tabs: TabDefinition[]
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Utility function to check if a path has tabs.
|
||
|
*/
|
||
|
export const isTabPath = (path: string) => (
|
||
|
TabRoutes.some(route => route.path === path)
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
* Utility function to get the default tab index for a specified URL path and library.
|
||
|
*/
|
||
|
export const getDefaultTabIndex = (path: string, libraryId?: string | null) => {
|
||
|
if (!libraryId) return 0;
|
||
|
|
||
|
const tabs = TabRoutes.find(route => route.path === path)?.tabs ?? [];
|
||
|
const defaultTab = userSettings.get('landing-' + libraryId, false);
|
||
|
|
||
|
return tabs.find(tab => tab.value === defaultTab)?.index
|
||
|
?? tabs.find(tab => tab.isDefault)?.index
|
||
|
?? 0;
|
||
|
};
|
||
|
|
||
|
const TabRoutes: TabRoute[] = [
|
||
|
{
|
||
|
path: '/livetv.html',
|
||
|
tabs: [
|
||
|
{
|
||
|
index: 0,
|
||
|
label: globalize.translate('Programs'),
|
||
|
value: LibraryTab.Programs,
|
||
|
isDefault: true
|
||
|
},
|
||
|
{
|
||
|
index: 1,
|
||
|
label: globalize.translate('Guide'),
|
||
|
value: LibraryTab.Guide
|
||
|
},
|
||
|
{
|
||
|
index: 2,
|
||
|
label: globalize.translate('Channels'),
|
||
|
value: LibraryTab.Channels
|
||
|
},
|
||
|
{
|
||
|
index: 3,
|
||
|
label: globalize.translate('Recordings'),
|
||
|
value: LibraryTab.Recordings
|
||
|
},
|
||
|
{
|
||
|
index: 4,
|
||
|
label: globalize.translate('Schedule'),
|
||
|
value: LibraryTab.Schedule
|
||
|
},
|
||
|
{
|
||
|
index: 5,
|
||
|
label: globalize.translate('Series'),
|
||
|
value: LibraryTab.Series
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
path: '/movies.html',
|
||
|
tabs: [
|
||
|
{
|
||
|
index: 0,
|
||
|
label: globalize.translate('Movies'),
|
||
|
value: LibraryTab.Movies,
|
||
|
isDefault: true
|
||
|
},
|
||
|
{
|
||
|
index: 1,
|
||
|
label: globalize.translate('Suggestions'),
|
||
|
value: LibraryTab.Suggestions
|
||
|
},
|
||
|
{
|
||
|
index: 2,
|
||
|
label: globalize.translate('Trailers'),
|
||
|
value: LibraryTab.Trailers
|
||
|
},
|
||
|
{
|
||
|
index: 3,
|
||
|
label: globalize.translate('Favorites'),
|
||
|
value: LibraryTab.Favorites
|
||
|
},
|
||
|
{
|
||
|
index: 4,
|
||
|
label: globalize.translate('Collections'),
|
||
|
value: LibraryTab.Collections
|
||
|
},
|
||
|
{
|
||
|
index: 5,
|
||
|
label: globalize.translate('Genres'),
|
||
|
value: LibraryTab.Genres
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
path: '/music.html',
|
||
|
tabs: [
|
||
|
{
|
||
|
index: 0,
|
||
|
label: globalize.translate('Albums'),
|
||
|
value: LibraryTab.Albums,
|
||
|
isDefault: true
|
||
|
},
|
||
|
{
|
||
|
index: 1,
|
||
|
label: globalize.translate('Suggestions'),
|
||
|
value: LibraryTab.Suggestions
|
||
|
},
|
||
|
{
|
||
|
index: 2,
|
||
|
label: globalize.translate('HeaderAlbumArtists'),
|
||
|
value: LibraryTab.AlbumArtists
|
||
|
},
|
||
|
{
|
||
|
index: 3,
|
||
|
label: globalize.translate('Artists'),
|
||
|
value: LibraryTab.Artists
|
||
|
},
|
||
|
{
|
||
|
index: 4,
|
||
|
label: globalize.translate('Playlists'),
|
||
|
value: LibraryTab.Playlists
|
||
|
},
|
||
|
{
|
||
|
index: 5,
|
||
|
label: globalize.translate('Songs'),
|
||
|
value: LibraryTab.Songs
|
||
|
},
|
||
|
{
|
||
|
index: 6,
|
||
|
label: globalize.translate('Genres'),
|
||
|
value: LibraryTab.Genres
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
path: '/tv.html',
|
||
|
tabs: [
|
||
|
{
|
||
|
index: 0,
|
||
|
label: globalize.translate('Shows'),
|
||
|
value: LibraryTab.Shows,
|
||
|
isDefault: true
|
||
|
},
|
||
|
{
|
||
|
index: 1,
|
||
|
label: globalize.translate('Suggestions'),
|
||
|
value: LibraryTab.Suggestions
|
||
|
},
|
||
|
{
|
||
|
index: 2,
|
||
|
label: globalize.translate('TabUpcoming'),
|
||
|
value: LibraryTab.Upcoming
|
||
|
},
|
||
|
{
|
||
|
index: 3,
|
||
|
label: globalize.translate('Genres'),
|
||
|
value: LibraryTab.Genres
|
||
|
},
|
||
|
{
|
||
|
index: 4,
|
||
|
label: globalize.translate('TabNetworks'),
|
||
|
value: LibraryTab.Networks
|
||
|
},
|
||
|
{
|
||
|
index: 5,
|
||
|
label: globalize.translate('Episodes'),
|
||
|
value: LibraryTab.Episodes
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
];
|
||
|
|
||
|
export default TabRoutes;
|