@@ -24,6 +24,7 @@ import IconButton from "@/components/IconButton";
24
24
import ImageCanvas from "@/components/ImageCanvas" ;
25
25
import UploadArea from "@/components/UploadArea" ;
26
26
import AboutDropDownMenu from "@/components/AboutDropDownMenu" ;
27
+ import useClickOutside from "@/hooks/ClickOutsideHook" ;
27
28
28
29
29
30
const aboutMenuItemsConst = [
@@ -52,13 +53,13 @@ export default function Home() {
52
53
53
54
const [ darkMode , setDarkMode ] = useState ( true ) ;
54
55
55
- const [ aboutMenuOpen , setAboutMenuOpen ] = useState ( false ) ;
56
+ const [ aboutMenuRef , aboutMenuOpen , setAboutMenuOpen ] = useClickOutside ( ) ;
56
57
57
58
const [ gridMode , setGridMode ] = useState ( 0 ) ;
58
59
const [ imageFilters , setImageFilters ] = useState ( [ true , false , false , false ] ) ;
59
60
60
- const [ gridModeMenuOpen , setGridModeMenuOpen ] = useState ( false ) ;
61
- const [ imageFiltersMenuOpen , setImageFiltersMenuOpen ] = useState ( false ) ;
61
+ const [ gridModeMenuRef , gridModeMenuOpen , setGridModeMenuOpen ] = useClickOutside ( ) ;
62
+ const [ imageFiltersMenuRef , imageFiltersMenuOpen , setImageFiltersMenuOpen ] = useClickOutside ( ) ;
62
63
63
64
const [ file , setFile ] = useState ( null ) ;
64
65
const [ fileIsValid , setFileIsValid ] = useState ( null ) ;
@@ -117,7 +118,7 @@ export default function Home() {
117
118
< div ref = { fullscreenRef } className = { `flex flex-col overflow-hidden ${ darkMode == true ? "dark bg-background" : "bg-foreground/10" } ` } >
118
119
< nav className = { `flex z-50 flex-row justify-between items-center px-5 py-3 ${ isFullscreen ? "absolute top-1 left-1 w-full rounded-lg opacity-0 transition-opacity duration-300 bg-foreground/40 hover:opacity-100" : "bg-foreground" } ` } >
119
120
< div className = "flex relative justify-center items-center" >
120
- < div onClick = { ( ) => setAboutMenuOpen ( ! aboutMenuOpen ) } className = "inline-flex items-center space-x-2 group hover:cursor-pointer" >
121
+ < div ref = { aboutMenuRef } tabIndex = { 0 } className = "inline-flex items-center space-x-2 group hover:cursor-pointer" >
121
122
< Image
122
123
className = { `h-min ${ isFullscreen ? "opacity-70" : "" } ` }
123
124
src = "/logo-icon.png"
@@ -132,13 +133,13 @@ export default function Home() {
132
133
</ div >
133
134
134
135
< div className = "flex flex-row space-x-4" >
135
- < div className = "flex relative" >
136
- < IconDropDownButton Icon = { ShadowInnerIcon } active = { imageFiltersMenuOpen } onClick = { ( ) => setImageFiltersMenuOpen ( ! imageFiltersMenuOpen ) } >
136
+ < div className = "flex relative" ref = { imageFiltersMenuRef } tabIndex = { 0 } >
137
+ < IconDropDownButton Icon = { ShadowInnerIcon } active = { imageFiltersMenuOpen } >
137
138
</ IconDropDownButton >
138
139
{ imageFiltersMenuOpen && < ImageFiltersDropDownMenu items = { imageFiltersConst } selected = { imageFilters } onClick = { handleSetImageFilters } > </ ImageFiltersDropDownMenu > }
139
140
</ div >
140
- < div className = "flex relative" >
141
- < IconDropDownButton Icon = { gridModesConst [ gridMode ] . icon } active = { gridModeMenuOpen } onClick = { ( ) => setGridModeMenuOpen ( ! gridModeMenuOpen ) } >
141
+ < div className = "flex relative" ref = { gridModeMenuRef } tabIndex = { 0 } >
142
+ < IconDropDownButton Icon = { gridModesConst [ gridMode ] . icon } active = { gridModeMenuOpen } >
142
143
</ IconDropDownButton >
143
144
{ gridModeMenuOpen && < DropDownMenu items = { gridModesConst } selected = { gridMode } onClick = { handleSetGridMode } > </ DropDownMenu > }
144
145
</ div >
0 commit comments