From e0451a1d67a17f4c6c5879dc1a777b96e75e7a8a Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Thu, 12 Jun 2025 15:08:15 +0200 Subject: [PATCH 1/6] move onRouterClose --- src/components/Search/SearchRouter/SearchRouter.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/Search/SearchRouter/SearchRouter.tsx b/src/components/Search/SearchRouter/SearchRouter.tsx index debf59b676ff..ee4914522a5f 100644 --- a/src/components/Search/SearchRouter/SearchRouter.tsx +++ b/src/components/Search/SearchRouter/SearchRouter.tsx @@ -287,13 +287,15 @@ function SearchRouter({onRouterClose, shouldHideInputCaret, isSearchRouterDispla } } else { backHistory(() => { - onRouterClose(); if (item?.reportID) { Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(item.reportID)); } else if ('login' in item) { navigateToAndOpenReport(item.login ? [item.login] : [], false); } }); + InteractionManager.runAfterInteractions(() => { + onRouterClose(); + }); } }, [autocompleteSubstitutions, onRouterClose, onSearchQueryChange, submitSearch, textInputValue], From 2c795fb4fad10f57fd1b7fe00389e64142952187 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Thu, 12 Jun 2025 16:31:55 +0200 Subject: [PATCH 2/6] refactor SearchRouterContext --- .../SearchRouter/SearchRouterContext.tsx | 88 ++++++++++--------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/src/components/Search/SearchRouter/SearchRouterContext.tsx b/src/components/Search/SearchRouter/SearchRouterContext.tsx index fa60646ec3ee..c83207de0d15 100644 --- a/src/components/Search/SearchRouter/SearchRouterContext.tsx +++ b/src/components/Search/SearchRouter/SearchRouterContext.tsx @@ -1,4 +1,4 @@ -import React, {useContext, useMemo, useRef, useState} from 'react'; +import React, {useCallback, useContext, useMemo, useRef, useState} from 'react'; import type {AnimatedTextInputRef} from '@components/RNTextInput'; import isSearchTopmostFullScreenRoute from '@libs/Navigation/helpers/isSearchTopmostFullScreenRoute'; import {navigationRef} from '@libs/Navigation/Navigation'; @@ -32,62 +32,64 @@ function SearchRouterContextProvider({children}: ChildrenProps) { const searchRouterDisplayedRef = useRef(false); const searchPageInputRef = useRef(undefined); - const routerContext = useMemo(() => { - const openSearchRouter = () => { - close( - () => { - setIsSearchRouterDisplayed(true); - searchRouterDisplayedRef.current = true; - }, - false, - true, - ); - }; - const closeSearchRouter = () => { - setIsSearchRouterDisplayed(false); - searchRouterDisplayedRef.current = false; - }; + const openSearchRouter = useCallback(() => { + close( + () => { + setIsSearchRouterDisplayed(true); + searchRouterDisplayedRef.current = true; + }, + false, + true, + ); + }, []); - // There are callbacks that live outside of React render-loop and interact with SearchRouter - // So we need a function that is based on ref to correctly open/close it - // When user is on `/search` page we focus the Input instead of showing router - const toggleSearch = () => { - const searchFullScreenRoutes = navigationRef.getRootState()?.routes.findLast((route) => route.name === NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR); - const lastRoute = searchFullScreenRoutes?.state?.routes?.at(-1); - const isUserOnSearchPage = isSearchTopmostFullScreenRoute() && lastRoute?.name === SCREENS.SEARCH.ROOT; + const closeSearchRouter = useCallback(() => { + setIsSearchRouterDisplayed(false); + searchRouterDisplayedRef.current = false; + }, []); - if (isUserOnSearchPage && searchPageInputRef.current) { - if (searchPageInputRef.current.isFocused()) { - searchPageInputRef.current.blur(); - } else { - searchPageInputRef.current.focus(); - } - } else if (searchRouterDisplayedRef.current) { - closeSearchRouter(); + // There are callbacks that live outside of React render-loop and interact with SearchRouter + // So we need a function that is based on ref to correctly open/close it + // When user is on `/search` page we focus the Input instead of showing router + const toggleSearch = useCallback(() => { + const searchFullScreenRoutes = navigationRef.getRootState()?.routes.findLast((route) => route.name === NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR); + const lastRoute = searchFullScreenRoutes?.state?.routes?.at(-1); + const isUserOnSearchPage = isSearchTopmostFullScreenRoute() && lastRoute?.name === SCREENS.SEARCH.ROOT; + + if (isUserOnSearchPage && searchPageInputRef.current) { + if (searchPageInputRef.current.isFocused()) { + searchPageInputRef.current.blur(); } else { - openSearchRouter(); + searchPageInputRef.current.focus(); } - }; + } else if (searchRouterDisplayedRef.current) { + closeSearchRouter(); + } else { + openSearchRouter(); + } + }, [closeSearchRouter, openSearchRouter]); - const registerSearchPageInput = (ref: AnimatedTextInputRef) => { - searchPageInputRef.current = ref; - }; + const registerSearchPageInput = useCallback((ref: AnimatedTextInputRef) => { + searchPageInputRef.current = ref; + }, []); - const unregisterSearchPageInput = () => { - searchPageInputRef.current = undefined; - }; + const unregisterSearchPageInput = useCallback(() => { + searchPageInputRef.current = undefined; + }, []); - return { + const contextValue = useMemo( + () => ({ isSearchRouterDisplayed, openSearchRouter, closeSearchRouter, toggleSearch, registerSearchPageInput, unregisterSearchPageInput, - }; - }, [isSearchRouterDisplayed, setIsSearchRouterDisplayed]); + }), + [isSearchRouterDisplayed, openSearchRouter, closeSearchRouter, toggleSearch, registerSearchPageInput, unregisterSearchPageInput], + ); - return {children}; + return {children}; } function useSearchRouterContext() { From 4ab9cef81014306b953b2c687556620ae19895ac Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Mon, 16 Jun 2025 14:52:15 +0200 Subject: [PATCH 3/6] Revert "refactor SearchRouterContext" This reverts commit 2c795fb4fad10f57fd1b7fe00389e64142952187. --- .../SearchRouter/SearchRouterContext.tsx | 88 +++++++++---------- 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/src/components/Search/SearchRouter/SearchRouterContext.tsx b/src/components/Search/SearchRouter/SearchRouterContext.tsx index c83207de0d15..fa60646ec3ee 100644 --- a/src/components/Search/SearchRouter/SearchRouterContext.tsx +++ b/src/components/Search/SearchRouter/SearchRouterContext.tsx @@ -1,4 +1,4 @@ -import React, {useCallback, useContext, useMemo, useRef, useState} from 'react'; +import React, {useContext, useMemo, useRef, useState} from 'react'; import type {AnimatedTextInputRef} from '@components/RNTextInput'; import isSearchTopmostFullScreenRoute from '@libs/Navigation/helpers/isSearchTopmostFullScreenRoute'; import {navigationRef} from '@libs/Navigation/Navigation'; @@ -32,64 +32,62 @@ function SearchRouterContextProvider({children}: ChildrenProps) { const searchRouterDisplayedRef = useRef(false); const searchPageInputRef = useRef(undefined); - const openSearchRouter = useCallback(() => { - close( - () => { - setIsSearchRouterDisplayed(true); - searchRouterDisplayedRef.current = true; - }, - false, - true, - ); - }, []); + const routerContext = useMemo(() => { + const openSearchRouter = () => { + close( + () => { + setIsSearchRouterDisplayed(true); + searchRouterDisplayedRef.current = true; + }, + false, + true, + ); + }; + const closeSearchRouter = () => { + setIsSearchRouterDisplayed(false); + searchRouterDisplayedRef.current = false; + }; - const closeSearchRouter = useCallback(() => { - setIsSearchRouterDisplayed(false); - searchRouterDisplayedRef.current = false; - }, []); + // There are callbacks that live outside of React render-loop and interact with SearchRouter + // So we need a function that is based on ref to correctly open/close it + // When user is on `/search` page we focus the Input instead of showing router + const toggleSearch = () => { + const searchFullScreenRoutes = navigationRef.getRootState()?.routes.findLast((route) => route.name === NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR); + const lastRoute = searchFullScreenRoutes?.state?.routes?.at(-1); + const isUserOnSearchPage = isSearchTopmostFullScreenRoute() && lastRoute?.name === SCREENS.SEARCH.ROOT; - // There are callbacks that live outside of React render-loop and interact with SearchRouter - // So we need a function that is based on ref to correctly open/close it - // When user is on `/search` page we focus the Input instead of showing router - const toggleSearch = useCallback(() => { - const searchFullScreenRoutes = navigationRef.getRootState()?.routes.findLast((route) => route.name === NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR); - const lastRoute = searchFullScreenRoutes?.state?.routes?.at(-1); - const isUserOnSearchPage = isSearchTopmostFullScreenRoute() && lastRoute?.name === SCREENS.SEARCH.ROOT; - - if (isUserOnSearchPage && searchPageInputRef.current) { - if (searchPageInputRef.current.isFocused()) { - searchPageInputRef.current.blur(); + if (isUserOnSearchPage && searchPageInputRef.current) { + if (searchPageInputRef.current.isFocused()) { + searchPageInputRef.current.blur(); + } else { + searchPageInputRef.current.focus(); + } + } else if (searchRouterDisplayedRef.current) { + closeSearchRouter(); } else { - searchPageInputRef.current.focus(); + openSearchRouter(); } - } else if (searchRouterDisplayedRef.current) { - closeSearchRouter(); - } else { - openSearchRouter(); - } - }, [closeSearchRouter, openSearchRouter]); + }; - const registerSearchPageInput = useCallback((ref: AnimatedTextInputRef) => { - searchPageInputRef.current = ref; - }, []); + const registerSearchPageInput = (ref: AnimatedTextInputRef) => { + searchPageInputRef.current = ref; + }; - const unregisterSearchPageInput = useCallback(() => { - searchPageInputRef.current = undefined; - }, []); + const unregisterSearchPageInput = () => { + searchPageInputRef.current = undefined; + }; - const contextValue = useMemo( - () => ({ + return { isSearchRouterDisplayed, openSearchRouter, closeSearchRouter, toggleSearch, registerSearchPageInput, unregisterSearchPageInput, - }), - [isSearchRouterDisplayed, openSearchRouter, closeSearchRouter, toggleSearch, registerSearchPageInput, unregisterSearchPageInput], - ); + }; + }, [isSearchRouterDisplayed, setIsSearchRouterDisplayed]); - return {children}; + return {children}; } function useSearchRouterContext() { From db711c0904753d8eb36d333b6b1a701e91a36ce2 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Mon, 16 Jun 2025 15:22:18 +0200 Subject: [PATCH 4/6] add useCallback to decrease render counts for searchRouterContext --- .../SearchRouter/SearchRouterContext.tsx | 144 +++++++++--------- 1 file changed, 73 insertions(+), 71 deletions(-) diff --git a/src/components/Search/SearchRouter/SearchRouterContext.tsx b/src/components/Search/SearchRouter/SearchRouterContext.tsx index 8aeea9eeb23b..de6969f72b41 100644 --- a/src/components/Search/SearchRouter/SearchRouterContext.tsx +++ b/src/components/Search/SearchRouter/SearchRouterContext.tsx @@ -1,4 +1,4 @@ -import React, {useContext, useEffect, useMemo, useRef, useState} from 'react'; +import React, {useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react'; import type {AnimatedTextInputRef} from '@components/RNTextInput'; import isSearchTopmostFullScreenRoute from '@libs/Navigation/helpers/isSearchTopmostFullScreenRoute'; import {navigationRef} from '@libs/Navigation/Navigation'; @@ -39,97 +39,99 @@ function SearchRouterContextProvider({children}: ChildrenProps) { const searchRouterDisplayedRef = useRef(false); const searchPageInputRef = useRef(undefined); + /** + * Handle browser back/forward navigation + * When user clicks back/forward, we check the history state: + * - If state has isSearchModalOpen=true, we show the modal + * - If state has isSearchModalOpen=false or no state, we hide the modal + * This creates a proper browser history integration where modal state + * is part of the navigation history + */ + const handlePopState = useCallback((event: PopStateEvent) => { + const state = event.state as HistoryState | null; + if (state?.isSearchModalOpen) { + setIsSearchRouterDisplayed(true); + searchRouterDisplayedRef.current = true; + } else { + setIsSearchRouterDisplayed(false); + searchRouterDisplayedRef.current = false; + } + }, []); + useEffect(() => { if (!canListenPopState) { return; } - /** - * Handle browser back/forward navigation - * When user clicks back/forward, we check the history state: - * - If state has isSearchModalOpen=true, we show the modal - * - If state has isSearchModalOpen=false or no state, we hide the modal - * This creates a proper browser history integration where modal state - * is part of the navigation history - */ - const handlePopState = (event: PopStateEvent) => { - const state = event.state as HistoryState | null; - if (state?.isSearchModalOpen) { - setIsSearchRouterDisplayed(true); - searchRouterDisplayedRef.current = true; - } else { - setIsSearchRouterDisplayed(false); - searchRouterDisplayedRef.current = false; - } - }; - window.addEventListener('popstate', handlePopState); return () => window.removeEventListener('popstate', handlePopState); + }, [handlePopState]); + + const openSearchRouter = useCallback(() => { + if (isBrowserWithHistory) { + window.history.pushState({isSearchModalOpen: true} satisfies HistoryState, ''); + } + close( + () => { + setIsSearchRouterDisplayed(true); + searchRouterDisplayedRef.current = true; + }, + false, + true, + ); }, []); - const routerContext = useMemo(() => { - const openSearchRouter = () => { - if (isBrowserWithHistory) { - window.history.pushState({isSearchModalOpen: true} satisfies HistoryState, ''); - } - close( - () => { - setIsSearchRouterDisplayed(true); - searchRouterDisplayedRef.current = true; - }, - false, - true, - ); - }; - const closeSearchRouter = () => { - setIsSearchRouterDisplayed(false); - searchRouterDisplayedRef.current = false; - if (isBrowserWithHistory) { - const state = window.history.state as HistoryState | null; - if (state?.isSearchModalOpen) { - window.history.replaceState({isSearchModalOpen: false} satisfies HistoryState, ''); - } + const closeSearchRouter = useCallback(() => { + setIsSearchRouterDisplayed(false); + searchRouterDisplayedRef.current = false; + if (isBrowserWithHistory) { + const state = window.history.state as HistoryState | null; + if (state?.isSearchModalOpen) { + window.history.replaceState({isSearchModalOpen: false} satisfies HistoryState, ''); } - }; - - // There are callbacks that live outside of React render-loop and interact with SearchRouter - // So we need a function that is based on ref to correctly open/close it - // When user is on `/search` page we focus the Input instead of showing router - const toggleSearch = () => { - const searchFullScreenRoutes = navigationRef.getRootState()?.routes.findLast((route) => route.name === NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR); - const lastRoute = searchFullScreenRoutes?.state?.routes?.at(-1); - const isUserOnSearchPage = isSearchTopmostFullScreenRoute() && lastRoute?.name === SCREENS.SEARCH.ROOT; - - if (isUserOnSearchPage && searchPageInputRef.current) { - if (searchPageInputRef.current.isFocused()) { - searchPageInputRef.current.blur(); - } else { - searchPageInputRef.current.focus(); - } - } else if (searchRouterDisplayedRef.current) { - closeSearchRouter(); + } + }, []); + + // There are callbacks that live outside of React render-loop and interact with SearchRouter + // So we need a function that is based on ref to correctly open/close it + // When user is on `/search` page we focus the Input instead of showing router + const toggleSearch = useCallback(() => { + const searchFullScreenRoutes = navigationRef.getRootState()?.routes.findLast((route) => route.name === NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR); + const lastRoute = searchFullScreenRoutes?.state?.routes?.at(-1); + const isUserOnSearchPage = isSearchTopmostFullScreenRoute() && lastRoute?.name === SCREENS.SEARCH.ROOT; + + if (isUserOnSearchPage && searchPageInputRef.current) { + if (searchPageInputRef.current.isFocused()) { + searchPageInputRef.current.blur(); } else { - openSearchRouter(); + searchPageInputRef.current.focus(); } - }; + } else if (searchRouterDisplayedRef.current) { + closeSearchRouter(); + } else { + openSearchRouter(); + } + }, [closeSearchRouter, openSearchRouter]); - const registerSearchPageInput = (ref: AnimatedTextInputRef) => { - searchPageInputRef.current = ref; - }; + const registerSearchPageInput = useCallback((ref: AnimatedTextInputRef) => { + searchPageInputRef.current = ref; + }, []); - const unregisterSearchPageInput = () => { - searchPageInputRef.current = undefined; - }; + const unregisterSearchPageInput = useCallback(() => { + searchPageInputRef.current = undefined; + }, []); - return { + const routerContext = useMemo( + () => ({ isSearchRouterDisplayed, openSearchRouter, closeSearchRouter, toggleSearch, registerSearchPageInput, unregisterSearchPageInput, - }; - }, [isSearchRouterDisplayed, setIsSearchRouterDisplayed]); + }), + [isSearchRouterDisplayed, openSearchRouter, closeSearchRouter, toggleSearch, registerSearchPageInput, unregisterSearchPageInput], + ); return {children}; } From 36c4050e949adce95e8d32907009d6220b3c42e0 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Mon, 30 Jun 2025 13:30:26 +0200 Subject: [PATCH 5/6] adjust SearchRouterContext logic --- .../SearchRouter/SearchRouterContext.tsx | 144 +++++++++--------- 1 file changed, 71 insertions(+), 73 deletions(-) diff --git a/src/components/Search/SearchRouter/SearchRouterContext.tsx b/src/components/Search/SearchRouter/SearchRouterContext.tsx index de6969f72b41..8aeea9eeb23b 100644 --- a/src/components/Search/SearchRouter/SearchRouterContext.tsx +++ b/src/components/Search/SearchRouter/SearchRouterContext.tsx @@ -1,4 +1,4 @@ -import React, {useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react'; +import React, {useContext, useEffect, useMemo, useRef, useState} from 'react'; import type {AnimatedTextInputRef} from '@components/RNTextInput'; import isSearchTopmostFullScreenRoute from '@libs/Navigation/helpers/isSearchTopmostFullScreenRoute'; import {navigationRef} from '@libs/Navigation/Navigation'; @@ -39,99 +39,97 @@ function SearchRouterContextProvider({children}: ChildrenProps) { const searchRouterDisplayedRef = useRef(false); const searchPageInputRef = useRef(undefined); - /** - * Handle browser back/forward navigation - * When user clicks back/forward, we check the history state: - * - If state has isSearchModalOpen=true, we show the modal - * - If state has isSearchModalOpen=false or no state, we hide the modal - * This creates a proper browser history integration where modal state - * is part of the navigation history - */ - const handlePopState = useCallback((event: PopStateEvent) => { - const state = event.state as HistoryState | null; - if (state?.isSearchModalOpen) { - setIsSearchRouterDisplayed(true); - searchRouterDisplayedRef.current = true; - } else { - setIsSearchRouterDisplayed(false); - searchRouterDisplayedRef.current = false; - } - }, []); - useEffect(() => { if (!canListenPopState) { return; } - window.addEventListener('popstate', handlePopState); - return () => window.removeEventListener('popstate', handlePopState); - }, [handlePopState]); - - const openSearchRouter = useCallback(() => { - if (isBrowserWithHistory) { - window.history.pushState({isSearchModalOpen: true} satisfies HistoryState, ''); - } - close( - () => { + /** + * Handle browser back/forward navigation + * When user clicks back/forward, we check the history state: + * - If state has isSearchModalOpen=true, we show the modal + * - If state has isSearchModalOpen=false or no state, we hide the modal + * This creates a proper browser history integration where modal state + * is part of the navigation history + */ + const handlePopState = (event: PopStateEvent) => { + const state = event.state as HistoryState | null; + if (state?.isSearchModalOpen) { setIsSearchRouterDisplayed(true); searchRouterDisplayedRef.current = true; - }, - false, - true, - ); - }, []); - - const closeSearchRouter = useCallback(() => { - setIsSearchRouterDisplayed(false); - searchRouterDisplayedRef.current = false; - if (isBrowserWithHistory) { - const state = window.history.state as HistoryState | null; - if (state?.isSearchModalOpen) { - window.history.replaceState({isSearchModalOpen: false} satisfies HistoryState, ''); + } else { + setIsSearchRouterDisplayed(false); + searchRouterDisplayedRef.current = false; } - } + }; + + window.addEventListener('popstate', handlePopState); + return () => window.removeEventListener('popstate', handlePopState); }, []); - // There are callbacks that live outside of React render-loop and interact with SearchRouter - // So we need a function that is based on ref to correctly open/close it - // When user is on `/search` page we focus the Input instead of showing router - const toggleSearch = useCallback(() => { - const searchFullScreenRoutes = navigationRef.getRootState()?.routes.findLast((route) => route.name === NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR); - const lastRoute = searchFullScreenRoutes?.state?.routes?.at(-1); - const isUserOnSearchPage = isSearchTopmostFullScreenRoute() && lastRoute?.name === SCREENS.SEARCH.ROOT; - - if (isUserOnSearchPage && searchPageInputRef.current) { - if (searchPageInputRef.current.isFocused()) { - searchPageInputRef.current.blur(); + const routerContext = useMemo(() => { + const openSearchRouter = () => { + if (isBrowserWithHistory) { + window.history.pushState({isSearchModalOpen: true} satisfies HistoryState, ''); + } + close( + () => { + setIsSearchRouterDisplayed(true); + searchRouterDisplayedRef.current = true; + }, + false, + true, + ); + }; + const closeSearchRouter = () => { + setIsSearchRouterDisplayed(false); + searchRouterDisplayedRef.current = false; + if (isBrowserWithHistory) { + const state = window.history.state as HistoryState | null; + if (state?.isSearchModalOpen) { + window.history.replaceState({isSearchModalOpen: false} satisfies HistoryState, ''); + } + } + }; + + // There are callbacks that live outside of React render-loop and interact with SearchRouter + // So we need a function that is based on ref to correctly open/close it + // When user is on `/search` page we focus the Input instead of showing router + const toggleSearch = () => { + const searchFullScreenRoutes = navigationRef.getRootState()?.routes.findLast((route) => route.name === NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR); + const lastRoute = searchFullScreenRoutes?.state?.routes?.at(-1); + const isUserOnSearchPage = isSearchTopmostFullScreenRoute() && lastRoute?.name === SCREENS.SEARCH.ROOT; + + if (isUserOnSearchPage && searchPageInputRef.current) { + if (searchPageInputRef.current.isFocused()) { + searchPageInputRef.current.blur(); + } else { + searchPageInputRef.current.focus(); + } + } else if (searchRouterDisplayedRef.current) { + closeSearchRouter(); } else { - searchPageInputRef.current.focus(); + openSearchRouter(); } - } else if (searchRouterDisplayedRef.current) { - closeSearchRouter(); - } else { - openSearchRouter(); - } - }, [closeSearchRouter, openSearchRouter]); + }; - const registerSearchPageInput = useCallback((ref: AnimatedTextInputRef) => { - searchPageInputRef.current = ref; - }, []); + const registerSearchPageInput = (ref: AnimatedTextInputRef) => { + searchPageInputRef.current = ref; + }; - const unregisterSearchPageInput = useCallback(() => { - searchPageInputRef.current = undefined; - }, []); + const unregisterSearchPageInput = () => { + searchPageInputRef.current = undefined; + }; - const routerContext = useMemo( - () => ({ + return { isSearchRouterDisplayed, openSearchRouter, closeSearchRouter, toggleSearch, registerSearchPageInput, unregisterSearchPageInput, - }), - [isSearchRouterDisplayed, openSearchRouter, closeSearchRouter, toggleSearch, registerSearchPageInput, unregisterSearchPageInput], - ); + }; + }, [isSearchRouterDisplayed, setIsSearchRouterDisplayed]); return {children}; } From 20b973764ae53e79fc0dbae9d033eab9ae32a1bd Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Mon, 30 Jun 2025 13:35:11 +0200 Subject: [PATCH 6/6] remove runAfterInteraction --- src/components/Search/SearchRouter/SearchRouter.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/Search/SearchRouter/SearchRouter.tsx b/src/components/Search/SearchRouter/SearchRouter.tsx index 1ea5a124ce29..78cfb3434be5 100644 --- a/src/components/Search/SearchRouter/SearchRouter.tsx +++ b/src/components/Search/SearchRouter/SearchRouter.tsx @@ -293,9 +293,7 @@ function SearchRouter({onRouterClose, shouldHideInputCaret, isSearchRouterDispla navigateToAndOpenReport(item.login ? [item.login] : [], false); } }); - InteractionManager.runAfterInteractions(() => { - onRouterClose(); - }); + onRouterClose(); } }, [autocompleteSubstitutions, onRouterClose, onSearchQueryChange, submitSearch, textInputValue],