feat: hide drawer when user clicks outside

This commit is contained in:
GivFNZ 2025-02-28 17:55:42 -03:00
parent 97a0e6bf90
commit cb79da4b18
No known key found for this signature in database
GPG Key ID: 63DD92181B575322
3 changed files with 26 additions and 5 deletions

View File

@ -37,7 +37,7 @@ function App() {
</HashRouter> </HashRouter>
<footer> <footer>
<p>© 2025 GivFNZ</p> <p>© 2025 GivFNZ</p>
<p>Version: 1.1.9</p> <p>Version: 1.1.10</p>
</footer> </footer>
</ThemeProvider> </ThemeProvider>
); );

View File

@ -4,18 +4,19 @@ import { AvatarHeader } from "../Avatar/avatar";
import i18n from "../../utils/i18n"; import i18n from "../../utils/i18n";
import { t } from "i18next"; import { t } from "i18next";
import { Drawer, DrawerContainer, DrawerItem } from "../Drawer/styles"; import { Drawer, DrawerContainer, DrawerItem } from "../Drawer/styles";
import { useState } from "react"; import useDrawerVisible from "../../hooks/useDrawerVisible";
export default function Header() { export default function Header() {
const changeLanguage = (event: React.ChangeEvent<HTMLSelectElement>) => { const changeLanguage = (event: React.ChangeEvent<HTMLSelectElement>) => {
i18n.changeLanguage(event.target.value); i18n.changeLanguage(event.target.value);
localStorage.setItem("language", event.target.value); localStorage.setItem("language", event.target.value);
}; };
const [openDrawer, setOpenDrawer] = useState(false); const { ref, openDrawer, setOpenDrawer } = useDrawerVisible();
return ( return (
<> <>
<HashRouter> <HashRouter>
<HeaderContainer> <HeaderContainer ref={ref}>
<Drawer onClick={() => setOpenDrawer(!openDrawer)} />
<HomeLink href="/"> <HomeLink href="/">
<AvatarHeader src="https://avatars.githubusercontent.com/u/53719063?v=4" alt="Giv's Gh picture" /> <AvatarHeader src="https://avatars.githubusercontent.com/u/53719063?v=4" alt="Giv's Gh picture" />
<span>Giv's Website</span> <span>Giv's Website</span>
@ -24,7 +25,6 @@ export default function Header() {
<NavLink href="#about">{t("about")}</NavLink> <NavLink href="#about">{t("about")}</NavLink>
<NavLink href="#contact">{t("contact")}</NavLink> <NavLink href="#contact">{t("contact")}</NavLink>
<NavLink href="#projects">{t("projects")}</NavLink> <NavLink href="#projects">{t("projects")}</NavLink>
<Drawer onClick={() => setOpenDrawer(!openDrawer)} />
<LanguageSelector onChange={changeLanguage}> <LanguageSelector onChange={changeLanguage}>
<option value="pt-br"> <option value="pt-br">
Português Português

View File

@ -0,0 +1,21 @@
import { useState, useEffect, useRef } from 'react';
export default function useDrawerVisible() {
const [openDrawer, setOpenDrawer] = useState(false);
const ref = useRef<HTMLDivElement>(null);
const handleClickOutside = (event: MouseEvent) => {
if (ref.current && !ref.current.contains(event.target as Node)) {
setOpenDrawer(false);
}
};
useEffect(() => {
document.addEventListener('click', handleClickOutside, true);
return () => {
document.removeEventListener('click', handleClickOutside, true);
};
}, []);
return { ref, openDrawer, setOpenDrawer };
}