|
1 | 1 |
|
| 2 | +import { faBars } from '@fortawesome/free-solid-svg-icons'; |
| 3 | +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; |
2 | 4 | import { useCallback, useEffect, useRef, useState } from 'react'; |
3 | 5 | import { useNavigate } from 'react-router'; |
| 6 | +import { useIsMobile } from '~/hooks/useIsMobile'; |
| 7 | +import { Drawer } from '../Drawer/Drawer'; |
4 | 8 | import { HeaderLink } from '../HeaderLink/HeaderLink'; |
5 | 9 | import { LanguageButton } from '../LanguageButton/LanguageButton'; |
6 | | -import './header.css'; |
| 10 | +import styles from './header.module.css'; |
7 | 11 |
|
8 | 12 | const headers: Headers = [ |
9 | 13 | { |
@@ -33,6 +37,7 @@ type Headers = Record<'label' | 'to', string>[]; |
33 | 37 | export const Header = () => { |
34 | 38 | const [activeSection, setActiveSection] = useState<string>(''); |
35 | 39 | const [isHidden, setIsHidden] = useState<boolean>(false); |
| 40 | + const isMobile = useIsMobile(); |
36 | 41 | const lastScrollY = useRef<number>(0); |
37 | 42 | const ignoreScroll = useRef<boolean>(false); |
38 | 43 | const ignoreTimer = useRef<ReturnType<typeof setTimeout> | null>(null); |
@@ -104,17 +109,30 @@ export const Header = () => { |
104 | 109 |
|
105 | 110 |
|
106 | 111 | return ( |
107 | | - <header className={isHidden ? 'hidden' : ''}> |
| 112 | + <div> |
108 | 113 | { |
109 | | - headers.map(header => ( |
110 | | - <HeaderLink |
111 | | - key={header.to} |
112 | | - isActive={activeSection === header.to} |
113 | | - label={header.label} |
114 | | - onClick={() => handleClick(header.to)} to={header.to}/> |
115 | | - )) |
| 114 | + isMobile ?( |
| 115 | + <header className={styles.mobile}> |
| 116 | + <Drawer links={headers} onClick={(link) => handleClick(link)}> |
| 117 | + <FontAwesomeIcon icon={faBars} className={[`${styles.bars}`, isHidden && `${styles.hidden}`].join(" ")}/> |
| 118 | + </Drawer> |
| 119 | + </header> |
| 120 | + ) : ( |
| 121 | + <header className={isHidden ? styles.hidden : ''}> |
| 122 | + { |
| 123 | + headers.map(header => ( |
| 124 | + <HeaderLink |
| 125 | + key={header.to} |
| 126 | + isActive={activeSection === header.to} |
| 127 | + label={header.label} |
| 128 | + onClick={() => handleClick(header.to)} |
| 129 | + to={header.to}/> |
| 130 | + )) |
| 131 | + } |
| 132 | + <LanguageButton className={styles['language-button']}/> |
| 133 | + </header> |
| 134 | + ) |
116 | 135 | } |
117 | | - <LanguageButton label={'JP'} className={'language-button'}/> |
118 | | - </header> |
| 136 | + </div> |
119 | 137 | ); |
120 | 138 | } |
0 commit comments