From 4b549e04848d7b17e0c94dda5e552b967a29bba3 Mon Sep 17 00:00:00 2001 From: pengx17 Date: Mon, 27 Jan 2025 07:58:16 +0000 Subject: [PATCH] fix(electron): optimize find in page in electron (2) (#9901) 1. find in page should have higher z-index than other modals 2. fix focused texts are not automatically being used as the default input value for searching --- .../affine/use-register-find-in-page-commands.ts | 9 ++++----- .../root/find-in-page/find-in-page-popup.css.ts | 2 +- .../pages/root/find-in-page/find-in-page-popup.tsx | 13 +++++-------- .../modules/find-in-page/entities/find-in-page.ts | 6 ++++-- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/packages/frontend/core/src/components/hooks/affine/use-register-find-in-page-commands.ts b/packages/frontend/core/src/components/hooks/affine/use-register-find-in-page-commands.ts index f02a7ff206..073181e9ff 100644 --- a/packages/frontend/core/src/components/hooks/affine/use-register-find-in-page-commands.ts +++ b/packages/frontend/core/src/components/hooks/affine/use-register-find-in-page-commands.ts @@ -9,12 +9,12 @@ import { useCallback, useEffect } from 'react'; export function useRegisterFindInPageCommands() { const findInPage = useServiceOptional(FindInPageService)?.findInPage; - const toggleVisible = useCallback(() => { + const showFindInPage = useCallback(() => { // get the selected text in page const selection = window.getSelection(); const selectedText = selection?.toString(); - findInPage?.toggleVisible(selectedText); + findInPage?.findInPage(selectedText); }, [findInPage]); useEffect(() => { @@ -33,8 +33,7 @@ export function useRegisterFindInPageCommands() { label: '', run() { track.$.cmdk.general.findInPage(); - - toggleVisible(); + showFindInPage(); }, }) ); @@ -42,5 +41,5 @@ export function useRegisterFindInPageCommands() { return () => { unsubs.forEach(unsub => unsub()); }; - }, [toggleVisible]); + }, [findInPage, showFindInPage]); } diff --git a/packages/frontend/core/src/desktop/pages/root/find-in-page/find-in-page-popup.css.ts b/packages/frontend/core/src/desktop/pages/root/find-in-page/find-in-page-popup.css.ts index 6da30a5e15..634c4f68fe 100644 --- a/packages/frontend/core/src/desktop/pages/root/find-in-page/find-in-page-popup.css.ts +++ b/packages/frontend/core/src/desktop/pages/root/find-in-page/find-in-page-popup.css.ts @@ -46,7 +46,7 @@ export const contentContainer = style({ justifyContent: 'space-between', border: `0.5px solid ${cssVar('borderColor')}`, padding: '8px 12px 8px 8px', - zIndex: cssVar('zIndexModal'), + zIndex: `calc(${cssVar('zIndexModal')} + 1)`, willChange: 'transform, opacity', selectors: { '&[data-state=entered], &[data-state=entering]': { diff --git a/packages/frontend/core/src/desktop/pages/root/find-in-page/find-in-page-popup.tsx b/packages/frontend/core/src/desktop/pages/root/find-in-page/find-in-page-popup.tsx index 5d66dc4548..09020dd193 100644 --- a/packages/frontend/core/src/desktop/pages/root/find-in-page/find-in-page-popup.tsx +++ b/packages/frontend/core/src/desktop/pages/root/find-in-page/find-in-page-popup.tsx @@ -19,7 +19,7 @@ import { useRef, useState, } from 'react'; -import { useTransition } from 'react-transition-state'; +import { useTransitionState } from 'react-transition-state'; import * as styles from './find-in-page-popup.css'; @@ -93,13 +93,14 @@ export const FindInPagePopup = () => { const [scrollLeft, setScrollLeft] = useState(0); const [composing, setComposing] = useState(false); - const [{ status }, toggle] = useTransition({ + const [{ status }, toggle] = useTransitionState({ timeout: animationTimeout, }); useEffect(() => { toggle(visible); - }, [visible]); + setValue(findInPage.searchText$.value || ''); + }, [findInPage.searchText$.value, toggle, visible]); const handleValueChange = useCallback( (value: string) => { @@ -203,14 +204,10 @@ export const FindInPagePopup = () => { data-state={status} sideOffset={5} side="left" - onFocusOutside={e => { + onInteractOutside={e => { // do not close the popup when focus outside (like focus in the editor) e.preventDefault(); }} - onPointerDownOutside={e => { - // do not close the popup when clicking outside (like clicking at the sidebar) - e.preventDefault(); - }} >