From a6ec0e52ecb33915cc4c4b22df1d2512ab9b0111 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 7 Nov 2025 19:44:50 +0100 Subject: PWA: use standalone display mode and disable scroll on modal sheets (#82) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: arielcostas <94913521+arielcostas@users.noreply.github.com> --- src/frontend/app/routes/timetable-$id.tsx | 35 +++++++++++++++++++------------ 1 file changed, 22 insertions(+), 13 deletions(-) (limited to 'src/frontend/app/routes/timetable-$id.tsx') diff --git a/src/frontend/app/routes/timetable-$id.tsx b/src/frontend/app/routes/timetable-$id.tsx index df77372..da7a2e7 100644 --- a/src/frontend/app/routes/timetable-$id.tsx +++ b/src/frontend/app/routes/timetable-$id.tsx @@ -450,7 +450,7 @@ const ScrollFabManager: React.FC<{ const style = getComputedStyle(el); const hasScroll = el.scrollHeight > el.clientHeight + 8; const overflowY = style.overflowY; - if (hasScroll && (overflowY === 'auto' || overflowY === 'scroll')) { + if (hasScroll && (overflowY === "auto" || overflowY === "scroll")) { return el; } el = el.parentElement; @@ -465,12 +465,14 @@ const ScrollFabManager: React.FC<{ const handleScroll = () => { const scrollTop = useWindowScroll - ? (window.scrollY || document.documentElement.scrollTop || 0) + ? window.scrollY || document.documentElement.scrollTop || 0 : scrollEl!.scrollTop; const scrollHeight = useWindowScroll ? document.documentElement.scrollHeight : scrollEl!.scrollHeight; - const clientHeight = useWindowScroll ? window.innerHeight : scrollEl!.clientHeight; + const clientHeight = useWindowScroll + ? window.innerHeight + : scrollEl!.clientHeight; const scrollBottom = scrollHeight - scrollTop - clientHeight; const threshold = 80; // slightly smaller threshold for responsiveness @@ -479,39 +481,46 @@ const ScrollFabManager: React.FC<{ if (nextEntryRef.current) { const rect = nextEntryRef.current.getBoundingClientRect(); - const isNextVisible = rect.top >= 0 && rect.bottom <= window.innerHeight; + const isNextVisible = + rect.top >= 0 && rect.bottom <= window.innerHeight; setShowGoToNow(!isNextVisible); } }; const target: any = useWindowScroll ? window : scrollEl!; - target.addEventListener('scroll', handleScroll, { passive: true }); - window.addEventListener('resize', handleScroll); + target.addEventListener("scroll", handleScroll, { passive: true }); + window.addEventListener("resize", handleScroll); handleScroll(); return () => { - target.removeEventListener('scroll', handleScroll); - window.removeEventListener('resize', handleScroll); + target.removeEventListener("scroll", handleScroll); + window.removeEventListener("resize", handleScroll); }; }, [containerRef, nextEntryRef, disabled, data, currentTime]); const scrollToTop = () => { const scrollEl = getScrollContainer(); if (!scrollEl) { - window.scrollTo({ top: 0, behavior: 'smooth' }); + window.scrollTo({ top: 0, behavior: "smooth" }); } else { - scrollEl.scrollTo({ top: 0, behavior: 'smooth' }); + scrollEl.scrollTo({ top: 0, behavior: "smooth" }); } }; const scrollToBottom = () => { const scrollEl = getScrollContainer(); if (!scrollEl) { - window.scrollTo({ top: document.documentElement.scrollHeight, behavior: 'smooth' }); + window.scrollTo({ + top: document.documentElement.scrollHeight, + behavior: "smooth", + }); } else { - scrollEl.scrollTo({ top: scrollEl.scrollHeight, behavior: 'smooth' }); + scrollEl.scrollTo({ top: scrollEl.scrollHeight, behavior: "smooth" }); } }; const scrollToNow = () => { - nextEntryRef.current?.scrollIntoView({ behavior: "smooth", block: "center" }); + nextEntryRef.current?.scrollIntoView({ + behavior: "smooth", + block: "center", + }); }; if (disabled) return null; -- cgit v1.3