| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import { useCallback, useEffect } from 'react'
- import { useDetachCompileContext as useCompileContext } from '../../../shared/context/detach-compile-context'
- import useEventListener from '../../../shared/hooks/use-event-listener'
- import useDetachAction from '../../../shared/hooks/use-detach-action'
- export default function useCompileTriggers() {
- const { startCompile, setChangedAt } = useCompileContext()
- const handleKeyDown = useCallback(
- event => {
- if (event.metaKey) {
- switch (event.key) {
- case 's':
- case 'Enter':
- event.preventDefault()
- startCompile()
- break
- }
- } else if (event.ctrlKey) {
- switch (event.key) {
- case '.':
- event.preventDefault()
- startCompile()
- break
- }
- }
- },
- [startCompile]
- )
- const handleStartCompile = useCallback(() => {
- startCompile()
- }, [startCompile])
- useEventListener('pdf:recompile', handleStartCompile)
- useEffect(() => {
- document.body.addEventListener('keydown', handleKeyDown)
- return () => {
- document.body.removeEventListener('keydown', handleKeyDown)
- }
- }, [handleKeyDown])
- // record doc changes when notified by the editor
- const setOrTriggerChangedAt = useDetachAction(
- 'set-changed-at',
- setChangedAt,
- 'detacher',
- 'detached'
- )
- const setChangedAtHandler = useCallback(() => {
- setOrTriggerChangedAt(Date.now())
- }, [setOrTriggerChangedAt])
- useEventListener('doc:changed', setChangedAtHandler)
- useEventListener('doc:saved', setChangedAtHandler) // TODO: store this separately?
- }
|