diff --git a/ui/src/App.js b/ui/src/App.js index 02e33505..25cdd294 100644 --- a/ui/src/App.js +++ b/ui/src/App.js @@ -28,6 +28,8 @@ import createAdminStore from './store/createAdminStore' import { i18nProvider } from './i18n' import config from './config' import { setDispatch, startEventStream } from './eventStream' +import { HotKeys } from 'react-hotkeys' +import { keyMap } from './hotkeys' const history = createHashHistory() @@ -119,4 +121,10 @@ const Admin = (props) => { ) } -export default App +const AppWithHotkeys = () => ( + + + +) + +export default AppWithHotkeys diff --git a/ui/src/audioplayer/Player.js b/ui/src/audioplayer/Player.js index afaff69a..76ef3f80 100644 --- a/ui/src/audioplayer/Player.js +++ b/ui/src/audioplayer/Player.js @@ -19,6 +19,7 @@ import themes from '../themes' import config from '../config' import PlayerToolbar from './PlayerToolbar' import { sendNotification, baseUrl } from '../utils' +import { keyMap } from '../hotkeys' const useStyle = makeStyles((theme) => ({ audioTitle: { @@ -86,32 +87,18 @@ const Player = () => { return idx !== null ? queue.queue[idx - 1] : null }, [queue]) - const keyMap = { - TOGGLE_PLAY: 'p', - PREV_SONG: 'left', - NEXT_SONG: 'right', - VOL_UP: '=', - VOL_DOWN: '-', - } - const keyHandlers = { - TOGGLE_PLAY: useCallback(() => { - audioInstance && audioInstance.togglePlay() - }, []), + TOGGLE_PLAY: () => audioInstance && audioInstance.togglePlay(), + VOL_UP: () => + (audioInstance.volume = Math.min(1, audioInstance.volume + 0.1)), + VOL_DOWN: () => + (audioInstance.volume = Math.max(0, audioInstance.volume - 0.1)), PREV_SONG: useCallback(() => { if (prevSong()) audioInstance && audioInstance.playPrev() }, [prevSong]), NEXT_SONG: useCallback(() => { if (nextSong()) audioInstance && audioInstance.playNext() }, [nextSong]), - VOL_UP: useCallback( - () => (audioInstance.volume = Math.min(1, audioInstance.volume + 0.1)), - [] - ), - VOL_DOWN: useCallback( - () => (audioInstance.volume = Math.max(0, audioInstance.volume - 0.1)), - [] - ), } const defaultOptions = { diff --git a/ui/src/audioplayer/PlayerToolbar.js b/ui/src/audioplayer/PlayerToolbar.js index 15be63bb..e329952f 100644 --- a/ui/src/audioplayer/PlayerToolbar.js +++ b/ui/src/audioplayer/PlayerToolbar.js @@ -3,6 +3,7 @@ import { useLocation } from 'react-router-dom' import { useGetOne } from 'react-admin' import { GlobalHotKeys } from 'react-hotkeys' import { StarButton, useToggleStar } from '../common' +import { keyMap } from '../hotkeys' const Placeholder = () => @@ -12,7 +13,6 @@ const Toolbar = ({ id }) => { const { data, loading } = useGetOne(resource, id) const [toggleStar, toggling] = useToggleStar(resource, data) - const keyMap = { TOGGLE_STAR: 's' } const handlers = { TOGGLE_STAR: useCallback(() => toggleStar(), [toggleStar]), } diff --git a/ui/src/hotkeys.js b/ui/src/hotkeys.js new file mode 100644 index 00000000..5086afa5 --- /dev/null +++ b/ui/src/hotkeys.js @@ -0,0 +1,12 @@ +const keyMap = { + TOGGLE_MENU: { name: 'Toggle Menu Side Bar', sequence: 'm', group: 'Global' }, + + TOGGLE_PLAY: { name: 'Play / Pause', sequence: 'p', group: 'Player' }, + PREV_SONG: { name: 'Previous Songs', sequence: 'left', group: 'Player' }, + NEXT_SONG: { name: 'Next Song', sequence: 'right', group: 'Player' }, + VOL_UP: { name: 'Volume Up', sequence: '=', group: 'Player' }, + VOL_DOWN: { name: 'Volume Down', sequence: '-', group: 'Player' }, + TOGGLE_STAR: { name: 'Toggle Star', sequence: 's', group: 'Player' }, +} + +export { keyMap } diff --git a/ui/src/layout/Layout.js b/ui/src/layout/Layout.js index 546c6d83..b6c53ab9 100644 --- a/ui/src/layout/Layout.js +++ b/ui/src/layout/Layout.js @@ -18,13 +18,12 @@ export default (props) => { const classes = useStyles({ addPadding: queue.queue.length > 0 }) const dispatch = useDispatch() - const keyMap = { TOGGLE_MENU: 'm' } const keyHandlers = { TOGGLE_MENU: useCallback(() => dispatch(toggleSidebar()), [dispatch]), } return ( - +