From ccc04825b72669cc89dbab11b7c9f481dda03fc2 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Mon, 24 Feb 2025 01:05:13 +0100 Subject: [PATCH] feat(ux): improve pull-down interaction for mobile modal (#440) * Adjusts overlay background opacity dynamically based on drag position * Ensures smooth transition as the modal is pulled down * Enhances UX for mobile users by making dismissal more intuitive --- .../app/library/components/LibraryHeader.tsx | 6 +- apps/readest-app/src/app/library/page.tsx | 7 +- .../app/reader/components/SidebarToggler.tsx | 3 + .../reader/components/notebook/Notebook.tsx | 18 ++-- .../reader/components/sidebar/BookMenu.tsx | 1 + .../app/reader/components/sidebar/SideBar.tsx | 75 +++++++++++++++-- .../src/app/reader/hooks/useDragBar.ts | 28 ------- apps/readest-app/src/components/Dialog.tsx | 64 ++++++++++++-- apps/readest-app/src/hooks/useDrag.ts | 83 +++++++++++++++++++ .../readest-app/src/hooks/usePullToRefresh.ts | 2 +- .../src/hooks/useScreenWakeLock.ts | 2 +- apps/readest-app/src/services/appService.ts | 1 + .../src/services/nativeAppService.ts | 1 + .../readest-app/src/services/webAppService.ts | 1 + apps/readest-app/src/styles/globals.css | 1 + apps/readest-app/src/types/system.ts | 1 + 16 files changed, 236 insertions(+), 58 deletions(-) delete mode 100644 apps/readest-app/src/app/reader/hooks/useDragBar.ts create mode 100644 apps/readest-app/src/hooks/useDrag.ts diff --git a/apps/readest-app/src/app/library/components/LibraryHeader.tsx b/apps/readest-app/src/app/library/components/LibraryHeader.tsx index d91da5c1..c8f5d220 100644 --- a/apps/readest-app/src/app/library/components/LibraryHeader.tsx +++ b/apps/readest-app/src/app/library/components/LibraryHeader.tsx @@ -49,7 +49,7 @@ const LibraryHeader: React.FC = ({
= ({
)} -
+
@@ -77,7 +77,7 @@ const LibraryHeader: React.FC = ({ placeholder={_('Search Books...')} spellCheck='false' className={clsx( - 'input rounded-badge bg-base-300/50 h-7 w-full pl-10 pr-10', + 'input rounded-badge bg-base-300/50 h-9 w-full pl-10 pr-10 sm:h-7', 'font-sans text-sm font-light', 'border-none focus:outline-none focus:ring-0', )} diff --git a/apps/readest-app/src/app/library/page.tsx b/apps/readest-app/src/app/library/page.tsx index 9bbb3a06..e2916270 100644 --- a/apps/readest-app/src/app/library/page.tsx +++ b/apps/readest-app/src/app/library/page.tsx @@ -346,14 +346,14 @@ const LibraryPage = () => { }; const handleToggleSelectMode = () => { - if (!isSelectMode && appService?.isMobile) { + if (!isSelectMode && appService?.hasHaptics) { impactFeedback('medium'); } setIsSelectMode((pre) => !pre); }; const handleSetSelectMode = (selectMode: boolean) => { - if (selectMode && appService?.isMobile) { + if (selectMode && appService?.hasHaptics) { impactFeedback('medium'); } setIsSelectMode(selectMode); @@ -402,8 +402,9 @@ const LibraryPage = () => {
= ({ bookKey }) => { const _ = useTranslation(); const { sideBarBookKey, isSideBarVisible, setSideBarBookKey, toggleSideBar } = useSidebarStore(); + const { setHoveredBookKey } = useReaderStore(); const handleToggleSidebar = () => { if (sideBarBookKey === bookKey) { toggleSideBar(); @@ -19,6 +21,7 @@ const SidebarToggler: React.FC = ({ bookKey }) => { setSideBarBookKey(bookKey); if (!isSideBarVisible) toggleSideBar(); } + setHoveredBookKey(''); }; return (