-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDefaultHeader.tsx
129 lines (117 loc) · 3.32 KB
/
DefaultHeader.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import { AppShell, Burger, Button, Group, Image } from '@mantine/core';
import {
IconLogout,
IconMapPins,
IconSquareRoundedPlus,
IconUserFilled,
} from '@tabler/icons-react';
import { useCallback } from 'react';
import { NavigateFunction, useNavigate } from 'react-router-dom';
import { AuthStore, useAuthStore } from '../../store/useAuthStore';
import { OfflineComponent } from '../offline/OfflineComponent';
import ProfileMenu from '../profileMenu/ProfileMenu';
import SwitchThemeIcon from '../switchThemeIcon/SwitchThemeIcon';
interface DefaultHeaderProps {
burgerOpened: boolean;
toggleBurgerState: () => void;
}
const DefaultHeader = (props: DefaultHeaderProps) => {
const isLogged: () => boolean = useAuthStore((s: AuthStore) => s.isLogged);
const logOut: () => void = useAuthStore((s: AuthStore) => s.logOut);
const navigate: NavigateFunction = useNavigate();
const logOutUser = useCallback(async () => {
await logOut();
}, []);
const handleClickLogo = () => {
navigate('/');
};
const handleCloseNavbar = () => {
props.toggleBurgerState();
};
const handleCreateTrip = () => {
handleCloseNavbar();
//TODO: Redirect to create trip page
throw new Error('CreateTrip Not implemented');
};
const handleAccount = () => {
handleCloseNavbar();
//TODO: Redirect to account page
throw new Error('handleAccount Not implemented');
};
const handleTrips = () => {
handleCloseNavbar();
navigate('/trips');
};
const handleLogout = () => {
logOutUser();
navigate('/');
};
return (
<>
<Group py={10} mx={10} justify="space-between">
<Burger
opened={props.burgerOpened}
onClick={props.toggleBurgerState}
hiddenFrom="sm"
size="sm"
/>
<Image
src="/logo.svg"
alt="Logo du site"
onClick={handleClickLogo}
className="cursor-pointer"
height={50}
width={50}
/>
<Group>
<OfflineComponent />
<Group visibleFrom="sm">
{isLogged() && (
<>
<Button
leftSection={<IconSquareRoundedPlus size={20} />}
variant="light"
onClick={handleCreateTrip}>
Créer mon voyage
</Button>
</>
)}
<SwitchThemeIcon />
<ProfileMenu />
</Group>
</Group>
</Group>
<AppShell.Navbar py="md" px={4}>
<Button
leftSection={<IconSquareRoundedPlus size={14} />}
variant="subtle"
onClick={handleCreateTrip}>
Créer mon voyage
</Button>
<Button
mt="xs"
leftSection={<IconUserFilled size={14} />}
variant="subtle"
onClick={handleAccount}>
Mon compte
</Button>
<Button
mt="xs"
leftSection={<IconMapPins size={14} />}
variant="subtle"
onClick={handleTrips}>
Mes voyages
</Button>
<Button
mt="xs"
leftSection={<IconLogout size={14} />}
variant="subtle"
onClick={handleLogout}>
Se déconnecter
</Button>
<SwitchThemeIcon asButton />
</AppShell.Navbar>
</>
);
};
export default DefaultHeader;