From b09798c3fad38ed9489c5efe0c48feb63d91df6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Jamr=C3=B3z?= Date: Thu, 11 Jul 2024 12:37:47 +0200 Subject: [PATCH] Explore: Fix new-old-new query history bug (#90214) * Remove cancelActiveListeners() and delay() * Wait for handle history to resolve * Do not sync from URL when state changes --------- Co-authored-by: harisrozajac --- public/app/features/explore/hooks/useStateSync/index.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/public/app/features/explore/hooks/useStateSync/index.ts b/public/app/features/explore/hooks/useStateSync/index.ts index 1056addadbf..348a12b0ac4 100644 --- a/public/app/features/explore/hooks/useStateSync/index.ts +++ b/public/app/features/explore/hooks/useStateSync/index.ts @@ -20,6 +20,7 @@ export function useStateSync(params: ExploreQueryParams) { const { location } = useGrafana(); const dispatch = useDispatch(); const panesState = useSelector(selectPanes); + const panesStateRef = useRef(panesState); const orgId = useSelector((state) => state.user.orgId); const prevParams = useRef(params); const initState = useRef<'notstarted' | 'pending' | 'done'>('notstarted'); @@ -53,6 +54,10 @@ export function useStateSync(params: ExploreQueryParams) { return () => unsubscribe(); }, [dispatch, location]); + useEffect(() => { + panesStateRef.current = panesState; + }, [panesState]); + useEffect(() => { const isURLOutOfSync = prevParams.current?.panes !== params.panes; @@ -74,7 +79,7 @@ export function useStateSync(params: ExploreQueryParams) { prevParams.current = params; if (isURLOutOfSync && initState.current === 'done') { - syncFromURL(urlState, panesState, dispatch); + syncFromURL(urlState, panesStateRef.current, dispatch); } - }, [dispatch, panesState, orgId, location, params, warning]); + }, [dispatch, orgId, location, params, warning]); }