feat: add dimension util helper
This commit is contained in:
80
src/helpers/dimensionUtils.ts
Normal file
80
src/helpers/dimensionUtils.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
export const WIDTH_BREAKPOINTS = {
|
||||
xs: 0,
|
||||
sm: 600,
|
||||
md: 960,
|
||||
lg: 1280,
|
||||
xl: 1920
|
||||
};
|
||||
|
||||
export const HEIGHT_BREAKPOINTS = {
|
||||
xs: 0,
|
||||
sm: 700,
|
||||
md: 800,
|
||||
lg: 900,
|
||||
xl: 1080,
|
||||
xxl: 1440
|
||||
};
|
||||
|
||||
export interface AppDimensions {
|
||||
browserWidth: number;
|
||||
browserHeight: number;
|
||||
panelHeight: number;
|
||||
outputPreviewHeight: number;
|
||||
outputPreviewWidth: number;
|
||||
canvasWidth: number;
|
||||
canvasHeight: number;
|
||||
}
|
||||
|
||||
export const getResponsiveDimensions = (): AppDimensions => {
|
||||
const windowWidth = window.innerWidth;
|
||||
const windowHeight = window.innerHeight;
|
||||
|
||||
const browserWidth = windowWidth * 0.7;
|
||||
const outputPreviewWidth = windowWidth * 0.716;
|
||||
|
||||
let heightFraction = 0.64;
|
||||
|
||||
if (windowHeight >= HEIGHT_BREAKPOINTS.xxl) {
|
||||
heightFraction = 0.82;
|
||||
} else if (windowHeight >= HEIGHT_BREAKPOINTS.xl) {
|
||||
heightFraction = 0.76;
|
||||
} else if (windowHeight >= HEIGHT_BREAKPOINTS.lg) {
|
||||
heightFraction = 0.71;
|
||||
} else if (windowHeight >= HEIGHT_BREAKPOINTS.md) {
|
||||
heightFraction = 0.64;
|
||||
} else if (windowHeight >= HEIGHT_BREAKPOINTS.sm) {
|
||||
heightFraction = 0.62;
|
||||
}
|
||||
|
||||
const browserHeight = windowHeight * heightFraction;
|
||||
|
||||
return {
|
||||
browserWidth,
|
||||
browserHeight,
|
||||
panelHeight: browserHeight + 137,
|
||||
outputPreviewHeight: windowHeight * 0.7,
|
||||
outputPreviewWidth,
|
||||
canvasWidth: browserWidth,
|
||||
canvasHeight: browserHeight
|
||||
};
|
||||
};
|
||||
|
||||
// React hook to get and update dimensions on window resize
|
||||
export const useDimensions = () => {
|
||||
const [dimensions, setDimensions] = useState<AppDimensions>(getResponsiveDimensions());
|
||||
|
||||
useEffect(() => {
|
||||
const handleResize = () => {
|
||||
setDimensions(getResponsiveDimensions());
|
||||
};
|
||||
|
||||
window.addEventListener('resize', handleResize);
|
||||
return () => {
|
||||
window.removeEventListener('resize', handleResize);
|
||||
};
|
||||
}, []);
|
||||
|
||||
return dimensions;
|
||||
};
|
||||
Reference in New Issue
Block a user