Add keyboard shortcuts for toggle scroll mode and open font layout config

This commit is contained in:
chrox
2024-11-30 00:44:51 +01:00
parent 962dcf76dd
commit 6013959799
4 changed files with 35 additions and 3 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@readest/readest-app",
"version": "0.7.6",
"version": "0.7.9",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useEffect, useState } from 'react';
import { BookConfig } from '@/types/book';
import { useSettingsStore } from '@/store/settingsStore';
import { RiFontSize } from 'react-icons/ri';
@@ -19,6 +19,20 @@ const SettingsDialog: React.FC<{ bookKey: string; config: BookConfig }> = ({ boo
const [activePanel, setActivePanel] = useState('Font');
const { setFontLayoutSettingsDialogOpen } = useSettingsStore();
const handleKeyDown = (event: KeyboardEvent) => {
if (event.key === 'Escape') {
setFontLayoutSettingsDialogOpen(false);
}
};
useEffect(() => {
window.addEventListener('keydown', handleKeyDown);
return () => {
window.removeEventListener('keydown', handleKeyDown);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<dialog className='modal modal-open min-w-90 w-full'>
<div className='modal-box settings-content flex h-[60%] w-1/2 min-w-[480px] max-w-full flex-col p-0'>
@@ -3,6 +3,7 @@ import { useNotebookStore } from '@/store/notebookStore';
import useShortcuts from '@/hooks/useShortcuts';
import useBooksManager from './useBooksManager';
import { useSidebarStore } from '@/store/sidebarStore';
import { useSettingsStore } from '@/store/settingsStore';
interface UseBookShortcutsProps {
sideBarBookKey: string | null;
@@ -10,8 +11,9 @@ interface UseBookShortcutsProps {
}
const useBookShortcuts = ({ sideBarBookKey, bookKeys }: UseBookShortcutsProps) => {
const { getView, getViewSettings } = useReaderStore();
const { getView, getViewSettings, setViewSettings } = useReaderStore();
const { toggleSideBar, setSideBarBookKey } = useSidebarStore();
const { setFontLayoutSettingsDialogOpen } = useSettingsStore();
const { toggleNotebook } = useNotebookStore();
const { getNextBookKey } = useBooksManager();
const viewSettings = getViewSettings(sideBarBookKey ?? '');
@@ -19,6 +21,16 @@ const useBookShortcuts = ({ sideBarBookKey, bookKeys }: UseBookShortcutsProps) =
const lineHeight = viewSettings?.lineHeight ?? 1.6;
const distance = fontSize * lineHeight * 3;
const toggleScrollMode = () => {
const viewSettings = getViewSettings(sideBarBookKey ?? '');
if (viewSettings && sideBarBookKey) {
viewSettings.scrolled = !viewSettings.scrolled;
setViewSettings(sideBarBookKey, viewSettings!);
const flowMode = viewSettings.scrolled ? 'scrolled' : 'paginated';
getView(sideBarBookKey)?.renderer.setAttribute('flow', flowMode);
}
};
const switchSideBar = () => {
if (sideBarBookKey) setSideBarBookKey(getNextBookKey(sideBarBookKey));
};
@@ -48,6 +60,8 @@ const useBookShortcuts = ({ sideBarBookKey, bookKeys }: UseBookShortcutsProps) =
onSwitchSideBar: switchSideBar,
onToggleSideBar: toggleSideBar,
onToggleNotebook: toggleNotebook,
onToggleScrollMode: toggleScrollMode,
onOpenFontLayoutSettings: () => setFontLayoutSettingsDialogOpen(true),
onReloadPage: reloadPage,
onGoLeft: goLeft,
onGoRight: goRight,
@@ -3,6 +3,8 @@ export interface ShortcutConfig {
onToggleSideBar: string[];
onToggleNotebook: string[];
onToggleSearchBar: string[];
onToggleScrollMode: string[];
onOpenFontLayoutSettings: string[];
onReloadPage: string[];
onGoLeft: string[];
onGoRight: string[];
@@ -15,6 +17,8 @@ const DEFAULT_SHORTCUTS: ShortcutConfig = {
onToggleSideBar: ['s'],
onToggleNotebook: ['n'],
onToggleSearchBar: ['ctrl+f', 'cmd+f'],
onToggleScrollMode: ['shift+j'],
onOpenFontLayoutSettings: ['shift+f'],
onReloadPage: ['shift+r'],
onGoLeft: ['ArrowLeft', 'PageUp', 'h'],
onGoRight: ['ArrowRight', 'PageDown', 'l'],