1
0
mirror of https://github.com/kamranahmedse/developer-roadmap.git synced 2025-08-12 20:24:21 +02:00

Ensure when TopicDetail is open document.body stops scrolling (#6285)

* fix: ensure TopicDetail locks the body when open

* chore: ensure 'overflow-hidden' is always available via safelist

* revert: prettier changes
This commit is contained in:
Neil
2024-07-30 22:05:20 +01:00
committed by GitHub
parent a1037d1db2
commit d7ff5b9abc
3 changed files with 16 additions and 1 deletions

View File

@@ -30,6 +30,7 @@ import { GitHubIcon } from '../ReactIcons/GitHubIcon.tsx';
import { GoogleIcon } from '../ReactIcons/GoogleIcon.tsx'; import { GoogleIcon } from '../ReactIcons/GoogleIcon.tsx';
import { YouTubeIcon } from '../ReactIcons/YouTubeIcon.tsx'; import { YouTubeIcon } from '../ReactIcons/YouTubeIcon.tsx';
import { resourceTitleFromId } from '../../lib/roadmap.ts'; import { resourceTitleFromId } from '../../lib/roadmap.ts';
import { lockBodyScroll } from '../../lib/dom.ts';
type TopicDetailProps = { type TopicDetailProps = {
resourceTitle?: string; resourceTitle?: string;
@@ -262,6 +263,8 @@ export function TopicDetail(props: TopicDetailProps) {
useEffect(() => { useEffect(() => {
if (isActive) topicRef?.current?.focus(); if (isActive) topicRef?.current?.focus();
lockBodyScroll(isActive);
}, [isActive]); }, [isActive]);
if (!isActive) { if (!isActive) {
@@ -525,4 +528,4 @@ export function TopicDetail(props: TopicDetailProps) {
<div className="fixed inset-0 z-30 bg-gray-900 bg-opacity-50 dark:bg-opacity-80"></div> <div className="fixed inset-0 z-30 bg-gray-900 bg-opacity-50 dark:bg-opacity-80"></div>
</div> </div>
); );
} }

View File

@@ -6,3 +6,14 @@ export function replaceChildren(parentNode: Element, newChild: Element) {
parentNode.innerHTML = ''; parentNode.innerHTML = '';
parentNode.append(newChild); parentNode.append(newChild);
} }
export function lockBodyScroll(shouldLock: boolean) {
const isClient = document && 'body' in document;
if (!isClient) return;
if (shouldLock) {
document.body.classList.add('overflow-hidden');
} else {
document.body.classList.remove('overflow-hidden');
}
}

View File

@@ -7,6 +7,7 @@ module.exports = {
future: { future: {
hoverOnlyWhenSupported: true, hoverOnlyWhenSupported: true,
}, },
safelist: ['overflow-hidden'],
theme: { theme: {
extend: { extend: {
typography: { typography: {