26 lines
598 B
TypeScript
26 lines
598 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;
|
|
|
|
root.classList.toggle(className, locked);
|
|
|
|
const prevOverflow = document.body.style.overflow;
|
|
document.body.style.overflow = locked ? "hidden" : "";
|
|
|
|
return () => {
|
|
root.classList.remove(className);
|
|
document.body.style.overflow = prevOverflow;
|
|
};
|
|
}, [locked, className]);
|
|
}
|