@@ -3,6 +3,7 @@ import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collec
33import ArrowDropDown from '@mui/icons-material/ArrowDropDown' ;
44import Favorite from '@mui/icons-material/Favorite' ;
55import Button from '@mui/material/Button/Button' ;
6+ import Icon from '@mui/material/Icon' ;
67import { Theme } from '@mui/material/styles' ;
78import useMediaQuery from '@mui/material/useMediaQuery' ;
89import React , { useCallback , useMemo , useState } from 'react' ;
@@ -15,6 +16,7 @@ import { appRouter } from 'components/router/appRouter';
1516import { useApi } from 'hooks/useApi' ;
1617import useCurrentTab from 'hooks/useCurrentTab' ;
1718import { useUserViews } from 'hooks/useUserViews' ;
19+ import { useWebConfig } from 'hooks/useWebConfig' ;
1820import globalize from 'lib/globalize' ;
1921
2022import UserViewsMenu from './UserViewsMenu' ;
@@ -56,14 +58,19 @@ const UserViewNav = () => {
5658 const libraryId = searchParams . get ( 'topParentId' ) || searchParams . get ( 'parentId' ) ;
5759 const collectionType = searchParams . get ( 'collectionType' ) ;
5860 const { activeTab } = useCurrentTab ( ) ;
61+ const webConfig = useWebConfig ( ) ;
5962
6063 const isExtraLargeScreen = useMediaQuery ( ( t : Theme ) => t . breakpoints . up ( 'xl' ) ) ;
6164 const isLargeScreen = useMediaQuery ( ( t : Theme ) => t . breakpoints . up ( 'lg' ) ) ;
6265 const maxViews = useMemo ( ( ) => {
63- if ( isExtraLargeScreen ) return MAX_USER_VIEWS_XL ;
64- if ( isLargeScreen ) return MAX_USER_VIEWS_LG ;
65- return MAX_USER_VIEWS_MD ;
66- } , [ isExtraLargeScreen , isLargeScreen ] ) ;
66+ let _maxViews = MAX_USER_VIEWS_MD ;
67+ if ( isExtraLargeScreen ) _maxViews = MAX_USER_VIEWS_XL ;
68+ else if ( isLargeScreen ) _maxViews = MAX_USER_VIEWS_LG ;
69+
70+ const customLinks = ( webConfig . menuLinks || [ ] ) . length ;
71+
72+ return _maxViews - customLinks ;
73+ } , [ isExtraLargeScreen , isLargeScreen , webConfig . menuLinks ] ) ;
6774
6875 const { user } = useApi ( ) ;
6976 const {
@@ -108,6 +115,21 @@ const UserViewNav = () => {
108115 { globalize . translate ( MetaView . Favorites . Name ) }
109116 </ Button >
110117
118+ { webConfig . menuLinks ?. map ( link => (
119+ < Button
120+ key = { link . name }
121+ variant = 'text'
122+ color = 'inherit'
123+ startIcon = { < Icon > { link . icon || 'link' } </ Icon > }
124+ component = 'a'
125+ href = { link . url }
126+ target = '_blank'
127+ rel = 'noopener noreferrer'
128+ >
129+ { link . name }
130+ </ Button >
131+ ) ) }
132+
111133 { primaryViews ?. map ( view => (
112134 < Button
113135 key = { view . Id }
0 commit comments