(true)
+
+ const isLargeScreen = useMediaQuery('(min-width: 1280px)')
+
+ useEffect(() => {
+ setIsOpen(isLargeScreen)
+ }, [isLargeScreen])
+
+ return {children}
+}
+
+export const useDrawer = () => useContext(DrawerContext)
\ No newline at end of file
diff --git a/src/features/drawer/ui/index.tsx b/src/features/drawer/ui/index.tsx
index a5f6b28..15f6e47 100644
--- a/src/features/drawer/ui/index.tsx
+++ b/src/features/drawer/ui/index.tsx
@@ -1,29 +1,9 @@
import { FaAngleLeft } from 'react-icons/fa6'
-import { useEffect, useState } from 'react'
-
-const useMediaQuery = (query: string) => {
- const [matches, setMatches] = useState(false)
- useEffect(() => {
- const media = window.matchMedia(query)
- if (media.matches !== matches) {
- setMatches(media.matches)
- }
- const listener = () => {
- setMatches(media.matches)
- }
- media.addEventListener('change', listener)
- return () => media.removeEventListener('change', listener)
- }, [matches, query])
- return matches
-}
+import { useEffect } from 'react'
+import { useDrawer } from '../lib/drawerContext'
export default function Drawer(props: { children: React.ReactNode }) {
- const [isOpen, setIsOpen] = useState(false)
- const isLargeScreen = useMediaQuery('(min-width: 1280px)')
-
- useEffect(() => {
- setIsOpen(isLargeScreen)
- }, [isLargeScreen])
+ const { isOpen, setIsOpen } = useDrawer()
useEffect(() => {
const handleKeyDown = (event: KeyboardEvent) => {
@@ -48,7 +28,7 @@ export default function Drawer(props: { children: React.ReactNode }) {
window.addEventListener('keydown', handleKeyDown)
return () => window.removeEventListener('keydown', handleKeyDown)
- }, [])
+ }, [setIsOpen])
return (
diff --git a/src/shared/lib/useMediaQuery.tsx b/src/shared/lib/useMediaQuery.tsx
new file mode 100644
index 0000000..a51c528
--- /dev/null
+++ b/src/shared/lib/useMediaQuery.tsx
@@ -0,0 +1,17 @@
+import { useEffect, useState } from 'react'
+
+export const useMediaQuery = (query: string) => {
+ const [matches, setMatches] = useState(true)
+ useEffect(() => {
+ const media = window.matchMedia(query)
+ if (media.matches !== matches) {
+ setMatches(media.matches)
+ }
+ const listener = () => {
+ setMatches(media.matches)
+ }
+ media.addEventListener('change', listener)
+ return () => media.removeEventListener('change', listener)
+ }, [matches, query])
+ return matches
+}
\ No newline at end of file