From 3a61000c128436311b436d75cf37780576cd4054 Mon Sep 17 00:00:00 2001 From: null Date: Wed, 27 May 2026 23:40:09 -0500 Subject: [PATCH] fix scroll --- src/components/ScrollToTop.jsx | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/components/ScrollToTop.jsx b/src/components/ScrollToTop.jsx index 6d3ead6..0f8ce0a 100644 --- a/src/components/ScrollToTop.jsx +++ b/src/components/ScrollToTop.jsx @@ -3,6 +3,8 @@ import { useLocation } from 'react-router-dom' export default function ScrollToTop() { const { pathname, hash } = useLocation() + + // Cross-page navigation: scroll to hash or top on route change useEffect(() => { if (hash) { const el = document.querySelector(hash) @@ -13,5 +15,24 @@ export default function ScrollToTop() { } window.scrollTo(0, 0) }, [pathname, hash]) + + // Same-page: React Router won't re-navigate if URL is already identical, + // so intercept clicks on any link pointing to #contact-form directly. + useEffect(() => { + const handleClick = (e) => { + const anchor = e.target.closest('a') + if (!anchor) return + const href = anchor.getAttribute('href') || '' + if (!href.includes('#contact-form')) return + const el = document.querySelector('#contact-form') + if (!el) return + e.preventDefault() + el.scrollIntoView({ behavior: 'smooth' }) + window.history.pushState(null, '', '#contact-form') + } + document.addEventListener('click', handleClick) + return () => document.removeEventListener('click', handleClick) + }, []) + return null }