30 lines
634 B
TypeScript
30 lines
634 B
TypeScript
"use client";
|
|
|
|
import { useEffect } from "react";
|
|
|
|
type Options = {
|
|
className?: string;
|
|
};
|
|
|
|
export function useToggleBodyOverflow(locked: boolean, options: Options = {}) {
|
|
const { className = "has-menu-open" } = options;
|
|
|
|
useEffect(() => {
|
|
const root = document.documentElement;
|
|
const body = document.body;
|
|
|
|
if (locked) {
|
|
root.classList.add(className);
|
|
body.style.overflow = "hidden";
|
|
} else {
|
|
root.classList.remove(className);
|
|
body.style.overflow = "";
|
|
}
|
|
|
|
return () => {
|
|
root.classList.remove(className);
|
|
body.style.overflow = "";
|
|
};
|
|
}, [locked, className]);
|
|
}
|