Hide the player when queue is empty, instead of removing it from the DOM

This commit is contained in:
Deluan
2020-08-26 13:29:57 -04:00
committed by Deluan Quintão
parent b18e3289fb
commit deef8e162d
+45 -33
View File
@@ -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,33 +207,34 @@ const Player = () => {
} }
}, []) }, [])
if (authenticated && options.audioLists.length > 0) { if (!visible) {
return ( document.title = 'Navidrome'
<Hotkeys
keyName="space"
onKeyDown={onKeyDown}
onKeyUp={onKeyUp}
allowRepeat={false}
>
<ReactJkMusicPlayer
{...options}
quietUpdate
onAudioListsChange={OnAudioListsChange}
onAudioProgress={OnAudioProgress}
onAudioPlay={OnAudioPlay}
onAudioPause={onAudioPause}
onAudioEnded={onAudioEnded}
onAudioVolumeChange={onAudioVolumeChange}
onBeforeDestroy={onBeforeDestroy}
getAudioInstance={(instance) => {
audioInstance = instance
}}
/>
</Hotkeys>
)
} }
document.title = 'Navidrome'
return null return (
<Hotkeys
keyName="space"
onKeyDown={onKeyDown}
onKeyUp={onKeyUp}
allowRepeat={false}
>
<ReactJkMusicPlayer
{...options}
quietUpdate
className={classes.player}
onAudioListsChange={OnAudioListsChange}
onAudioProgress={OnAudioProgress}
onAudioPlay={OnAudioPlay}
onAudioPause={onAudioPause}
onAudioEnded={onAudioEnded}
onAudioVolumeChange={onAudioVolumeChange}
onBeforeDestroy={onBeforeDestroy}
getAudioInstance={(instance) => {
audioInstance = instance
}}
/>
</Hotkeys>
)
} }
export default Player export default Player