import { Component } from 'react' import Router from 'next/router' import getUrl from '../util/getUrl' import { getKey } from '../util/keys' import { doLogout } from '../redux/actions/userAct' /* - keyboard shortcuts g then h -> navigate home g then n -> navigate to new doc g then s -> navigate to settings g then l -> logout e (when on doc page) -> edit doc / (when on home page) -> focus search ctrl/cmd + enter -> submit new doc (handled in CodeMirror component) */ const keyToUrl = { 72: '/', 78: '/new', 83: '/settings', } const keyToEl = { 69: { sel: '#edit', func: 'click' }, 191: { sel: '.search', func: 'focus' }, } class KeyShortcuts extends Component { handleDown = e => { const tag = e.target.tagName if (tag === 'INPUT' || tag === 'TEXTAREA') return const key = getKey(e) if (this.prevKey === 71) { // prev key was g switch (key) { case 72: case 78: case 83: { const url = keyToUrl[key] Router.push(url, getUrl(url)) break } case 76: { setTimeout(doLogout, 1) break } default: break } } switch (key) { case 69: case 191: { const { sel, func } = keyToEl[key] const el = document.querySelector(sel) if (el) setTimeout(() => el[func](), 1) break } default: break } this.prevKey = key } componentDidMount() { window.addEventListener('keydown', this.handleDown) } componentWillUnmount() { window.removeEventListener('keydown', this.handleDown) } render = () => null } export default KeyShortcuts