navidrome/ui/src/layout/Layout.jsx
ranokay 46e21ac066
feat(ui): add the responsive lyrics sidebar
- Integrate accessible desktop and mobile lyrics controls with responsive layout behavior.
- Render localized lyric layers with stable wrapping, dimmed translations, and resilient portals.

Signed-off-by: ranokay <github@ranokay.com>
2026-08-26 13:03:16 +03:00

44 lines
1.3 KiB
JavaScript

import React, { useCallback } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { Layout as RALayout, toggleSidebar } from 'react-admin'
import { makeStyles } from '@material-ui/core/styles'
import { HotKeys } from 'react-hotkeys'
import Menu from './Menu'
import AppBar from './AppBar'
import Notification from './Notification'
import useCurrentTheme from '../themes/useCurrentTheme'
import { useSearchRefocus } from '../common'
import LyricsLayoutFrame from './LyricsLayoutFrame'
const useStyles = makeStyles({
root: { paddingBottom: (props) => (props.addPadding ? '80px' : 0) },
})
const Layout = (props) => {
const theme = useCurrentTheme()
const queue = useSelector((state) => state.player?.queue)
const classes = useStyles({ addPadding: queue.length > 0 })
const dispatch = useDispatch()
useSearchRefocus()
const keyHandlers = {
TOGGLE_MENU: useCallback(() => dispatch(toggleSidebar()), [dispatch]),
}
return (
<HotKeys handlers={keyHandlers}>
<RALayout
{...props}
className={classes.root}
menu={Menu}
appBar={AppBar}
theme={theme}
notification={Notification}
>
<LyricsLayoutFrame>{props.children}</LyricsLayoutFrame>
</RALayout>
</HotKeys>
)
}
export default Layout