Gitako/src/utils/hooks/useToggleSideBarWithKeyboard.ts
2021-05-24 22:16:17 +08:00

27 lines
892 B
TypeScript

import { ConfigsContextShape } from 'containers/ConfigsContext'
import * as React from 'react'
import * as keyHelper from 'utils/keyHelper'
import { SideBarState } from '../../containers/SideBarState'
export function useToggleSideBarWithKeyboard(
state: SideBarState,
configContext: ConfigsContextShape,
toggleShowSideBar: () => void,
) {
const isDisabled = state === 'disabled'
React.useEffect(
function attachKeyDown() {
if (isDisabled || !configContext.value.shortcut) return
function onKeyDown(e: KeyboardEvent) {
const keys = keyHelper.parseEvent(e)
if (keys === configContext.value.shortcut) {
toggleShowSideBar()
}
}
window.addEventListener('keydown', onKeyDown)
return () => window.removeEventListener('keydown', onKeyDown)
},
[toggleShowSideBar, isDisabled, configContext.value.shortcut],
)
}