mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-16 03:40:06 +02:00
Refactor store context and improve responsiveness across the application
Refactored the `useStore` hook to be imported from a dedicated `StoreContext` to improve code organization and maintainability. Also, enhanced responsive design for better usability on various screen sizes, including tablet-specific adjustments for the sidebar and header. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 95e8aab4-f39f-4b48-aa57-a759ec15ba3d Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/95e8aab4-f39f-4b48-aa57-a759ec15ba3d/A90CXrX
This commit is contained in:
1 parent
d2f2a532a5
commit
d0cecf90f3
29 files changed
+957
-254
No files matched your search
@@ -0,0 +1,58 @@
|
||||
import { useState, useEffect } from 'react'
|
||||
|
||||
export type ScreenSize = 'mobile' | 'tablet' | 'desktop'
|
||||
|
||||
export interface ScreenBreakpoints {
|
||||
mobile: number
|
||||
tablet: number
|
||||
desktop: number
|
||||
}
|
||||
|
||||
const defaultBreakpoints: ScreenBreakpoints = {
|
||||
mobile: 768,
|
||||
tablet: 1024,
|
||||
desktop: 1280
|
||||
}
|
||||
|
||||
export function useScreenSize(breakpoints: ScreenBreakpoints = defaultBreakpoints) {
|
||||
const [screenSize, setScreenSize] = useState<ScreenSize>('desktop')
|
||||
const [dimensions, setDimensions] = useState({
|
||||
width: typeof window !== 'undefined' ? window.innerWidth : 1200,
|
||||
height: typeof window !== 'undefined' ? window.innerHeight : 800
|
||||
})
|
||||
|
||||
useEffect(() => {
|
||||
const getScreenSize = (width: number): ScreenSize => {
|
||||
if (width < breakpoints.mobile) return 'mobile'
|
||||
if (width <= breakpoints.tablet) return 'tablet' // Inclut 1024px comme tablette
|
||||
return 'desktop'
|
||||
}
|
||||
|
||||
const updateScreenSize = () => {
|
||||
const width = window.innerWidth
|
||||
const height = window.innerHeight
|
||||
|
||||
setDimensions({ width, height })
|
||||
setScreenSize(getScreenSize(width))
|
||||
}
|
||||
|
||||
// Set initial values
|
||||
updateScreenSize()
|
||||
|
||||
// Add event listener
|
||||
window.addEventListener('resize', updateScreenSize)
|
||||
|
||||
// Cleanup
|
||||
return () => window.removeEventListener('resize', updateScreenSize)
|
||||
}, [breakpoints])
|
||||
|
||||
return {
|
||||
screenSize,
|
||||
dimensions,
|
||||
isMobile: screenSize === 'mobile',
|
||||
isTablet: screenSize === 'tablet',
|
||||
isDesktop: screenSize === 'desktop',
|
||||
isMobileOrTablet: screenSize === 'mobile' || screenSize === 'tablet',
|
||||
isTabletOrDesktop: screenSize === 'tablet' || screenSize === 'desktop'
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user