From 0eef2cd0136984da49ef25234daeabf45ac9fc83 Mon Sep 17 00:00:00 2001 From: sasha-astiadi Date: Mon, 17 Nov 2025 12:27:24 +0100 Subject: [PATCH] feat: add scroll-to-top behavior and hash anchor navigation - Added ScrollToTop component to handle navigation scroll behavior - Implemented smooth scrolling to hash anchors when present in URL - Added automatic scroll to top on route changes - Imported useLocation and useEffect hooks for scroll management --- src/App.tsx | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index f3569b8..dc367e0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,6 @@ -import { HashRouter, Routes, Route } from 'react-router-dom'; +import { HashRouter, Routes, Route, useLocation } from 'react-router-dom'; import { Layout } from './components/Layout'; -import { lazy, Suspense } from 'react'; +import { lazy, Suspense, useEffect } from 'react'; const HomePage = lazy(() => import('./pages/home/HomePage')); const CloudPage = lazy(() => import('./pages/cloud/CloudPage')); @@ -13,9 +13,29 @@ const GpuPage = lazy(() => import('./pages/gpu/GpuPage')); const PodsPage = lazy(() => import('./pages/pods/PodsPage')); const NodesPage = lazy(() => import('./pages/nodes/NodesPage')); +function ScrollToTop() { + const { pathname, hash } = useLocation(); + + useEffect(() => { + if (hash) { + const id = hash.replace('#', ''); + const element = document.getElementById(id); + if (element) { + element.scrollIntoView({ behavior: 'smooth', block: 'start' }); + return; + } + } + + window.scrollTo({ top: 0, left: 0, behavior: 'auto' }); + }, [pathname, hash]); + + return null; +} + function App() { return ( + Loading...}> }>