Hide the player when queue is empty, instead of removing it from the DOM
This commit is contained in:
@@ -24,16 +24,25 @@ const useStyle = makeStyles((theme) => ({
|
|||||||
textDecoration: 'none',
|
textDecoration: 'none',
|
||||||
color: theme.palette.primary.light,
|
color: theme.palette.primary.light,
|
||||||
},
|
},
|
||||||
|
player: {
|
||||||
|
display: (props) => (props.visible ? 'block' : 'none'),
|
||||||
|
},
|
||||||
}))
|
}))
|
||||||
|
|
||||||
let audioInstance = null
|
let audioInstance = null
|
||||||
|
|
||||||
const Player = () => {
|
const Player = () => {
|
||||||
const classes = useStyle()
|
|
||||||
const translate = useTranslate()
|
const translate = useTranslate()
|
||||||
const currentTheme = useSelector((state) => state.theme)
|
const currentTheme = useSelector((state) => state.theme)
|
||||||
const theme = themes[currentTheme] || themes.DarkTheme
|
const theme = themes[currentTheme] || themes.DarkTheme
|
||||||
const playerTheme = (theme.player && theme.player.theme) || 'dark'
|
const playerTheme = (theme.player && theme.player.theme) || 'dark'
|
||||||
|
const dataProvider = useDataProvider()
|
||||||
|
const dispatch = useDispatch()
|
||||||
|
const queue = useSelector((state) => state.queue)
|
||||||
|
const { authenticated } = useAuthState()
|
||||||
|
|
||||||
|
const visible = authenticated && queue.queue.length > 0
|
||||||
|
const classes = useStyle({ visible })
|
||||||
|
|
||||||
const audioTitle = useCallback(
|
const audioTitle = useCallback(
|
||||||
(audioInfo) => (
|
(audioInfo) => (
|
||||||
@@ -95,12 +104,7 @@ const Player = () => {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
const dataProvider = useDataProvider()
|
|
||||||
const dispatch = useDispatch()
|
|
||||||
const queue = useSelector((state) => state.queue)
|
|
||||||
const { authenticated } = useAuthState()
|
|
||||||
const current = queue.current || {}
|
const current = queue.current || {}
|
||||||
|
|
||||||
const options = useMemo(() => {
|
const options = useMemo(() => {
|
||||||
return {
|
return {
|
||||||
...defaultOptions,
|
...defaultOptions,
|
||||||
@@ -111,7 +115,14 @@ const Player = () => {
|
|||||||
extendsContent: <PlayerToolbar id={current.trackId} />,
|
extendsContent: <PlayerToolbar id={current.trackId} />,
|
||||||
defaultVolume: queue.volume,
|
defaultVolume: queue.volume,
|
||||||
}
|
}
|
||||||
}, [queue.clear, queue.queue, queue.volume, queue.playIndex, current, defaultOptions])
|
}, [
|
||||||
|
queue.clear,
|
||||||
|
queue.queue,
|
||||||
|
queue.volume,
|
||||||
|
queue.playIndex,
|
||||||
|
current,
|
||||||
|
defaultOptions,
|
||||||
|
])
|
||||||
|
|
||||||
const OnAudioListsChange = useCallback(
|
const OnAudioListsChange = useCallback(
|
||||||
(currentPlayIndex, audioLists) => {
|
(currentPlayIndex, audioLists) => {
|
||||||
@@ -196,7 +207,10 @@ const Player = () => {
|
|||||||
}
|
}
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
if (authenticated && options.audioLists.length > 0) {
|
if (!visible) {
|
||||||
|
document.title = 'Navidrome'
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Hotkeys
|
<Hotkeys
|
||||||
keyName="space"
|
keyName="space"
|
||||||
@@ -207,6 +221,7 @@ const Player = () => {
|
|||||||
<ReactJkMusicPlayer
|
<ReactJkMusicPlayer
|
||||||
{...options}
|
{...options}
|
||||||
quietUpdate
|
quietUpdate
|
||||||
|
className={classes.player}
|
||||||
onAudioListsChange={OnAudioListsChange}
|
onAudioListsChange={OnAudioListsChange}
|
||||||
onAudioProgress={OnAudioProgress}
|
onAudioProgress={OnAudioProgress}
|
||||||
onAudioPlay={OnAudioPlay}
|
onAudioPlay={OnAudioPlay}
|
||||||
@@ -220,9 +235,6 @@ const Player = () => {
|
|||||||
/>
|
/>
|
||||||
</Hotkeys>
|
</Hotkeys>
|
||||||
)
|
)
|
||||||
}
|
|
||||||
document.title = 'Navidrome'
|
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Player
|
export default Player
|
||||||
|
|||||||
Reference in New Issue
Block a user