feat: revamp browser dimensions store

This commit is contained in:
Rohit
2025-03-18 04:00:56 +05:30
parent 266591a17d
commit aa5d9765fb

View File

@@ -1,39 +1,54 @@
import React, { createContext, useCallback, useContext, useState } from "react"; import React, { createContext, useCallback, useContext, useEffect, useState } from "react";
import { AppDimensions, getResponsiveDimensions } from "../helpers/dimensionUtils";
interface BrowserDimensions { interface BrowserDimensionsContext extends AppDimensions {
width: number;
height: number;
setWidth: (newWidth: number) => void; setWidth: (newWidth: number) => void;
}; updateDimensions: () => void;
}
class BrowserDimensionsStore implements Partial<BrowserDimensions> { const initialDimensions = getResponsiveDimensions();
width: number = window.innerWidth * 0.7;
height: number = window.innerHeight * 0.64;
};
const browserDimensionsStore = new BrowserDimensionsStore(); const browserDimensionsContext = createContext<BrowserDimensionsContext>({
const browserDimensionsContext = createContext<BrowserDimensions>(browserDimensionsStore as BrowserDimensions); ...initialDimensions,
setWidth: () => {},
updateDimensions: () => {}
});
export const useBrowserDimensionsStore = () => useContext(browserDimensionsContext); export const useBrowserDimensionsStore = () => useContext(browserDimensionsContext);
export const BrowserDimensionsProvider = ({ children }: { children: JSX.Element }) => { export const BrowserDimensionsProvider = ({ children }: { children: JSX.Element }) => {
const [width, setWidth] = useState<number>(browserDimensionsStore.width); const [dimensions, setDimensions] = useState<AppDimensions>(initialDimensions);
const [height, setHeight] = useState<number>(browserDimensionsStore.height);
const setNewWidth = useCallback((newWidth: number) => { const updateDimensions = useCallback(() => {
setWidth(newWidth); setDimensions(getResponsiveDimensions());
setHeight(Math.round(newWidth / 1.6)); }, []);
}, [setWidth, setHeight]);
const setWidth = useCallback((newWidth: number) => {
setDimensions((prevDimensions: any) => ({
...prevDimensions,
browserWidth: newWidth,
canvasWidth: newWidth,
browserHeight: Math.round(newWidth / 1.6),
canvasHeight: Math.round(newWidth / 1.6)
}));
}, []);
useEffect(() => {
window.addEventListener('resize', updateDimensions);
return () => {
window.removeEventListener('resize', updateDimensions);
};
}, [updateDimensions]);
return ( return (
<browserDimensionsContext.Provider <browserDimensionsContext.Provider
value={{ value={{
width, ...dimensions,
height, setWidth,
setWidth: setNewWidth, updateDimensions
}} }}
> >
{children} {children}
</browserDimensionsContext.Provider> </browserDimensionsContext.Provider>
); );
}; };