global settings context, provider, hook

This commit is contained in:
Viktor Rådberg
2023-09-22 10:56:46 +02:00
parent 35e21a62fe
commit d7d9d26540
7 changed files with 166 additions and 121 deletions

View File

@@ -0,0 +1,51 @@
import { ReactNode, useEffect, useMemo, useState } from 'react';
import {
GlobalSettingsContext,
GlobalSettingsContextType,
} from '../Contexts/GlobalSettingsContext';
export const GlobalSettingsProvider = ({
children,
}: {
children: ReactNode;
}) => {
const [isFullscreen, setIsFullscreen] = useState(false);
const enableFullscreen = () => {
if (document?.documentElement.requestFullscreen) {
document.documentElement.requestFullscreen().then(() => {
setIsFullscreen(true);
});
}
};
const disableFullscreen = () => {
if (document.exitFullscreen) {
document.exitFullscreen().then(() => {
setIsFullscreen(false);
});
}
};
useEffect(() => {
const fullscreenChangeHandler = () => {
setIsFullscreen(!!document.fullscreenElement);
};
document.addEventListener('fullscreenchange', fullscreenChangeHandler);
return () => {
document.removeEventListener('fullscreenchange', fullscreenChangeHandler);
};
}, []);
const ctxValue = useMemo((): GlobalSettingsContextType => {
return { isFullscreen, enableFullscreen, disableFullscreen };
}, [isFullscreen]);
return (
<GlobalSettingsContext.Provider value={ctxValue}>
{children}
</GlobalSettingsContext.Provider>
);
};