aboutsummaryrefslogtreecommitdiffstats
path: root/components/Header.js
blob: 9ff3d75908253e8adc8e0ddf6800c712474f5c62 (plain) (blame)
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
import styles from 'styles/Main.module.scss'
import React, {useState} from 'react'
import {useRouter} from 'next/router'
import Link from 'next/link'
import useUser from 'hooks/useUser'
import fetchJson from 'helpers/fetchJson'
import {focus, toggleMin} from 'helpers/windowActions'
import {open} from 'helpers/windowActions'
import appList from 'configs/appList'
import useSettings from 'hooks/useSettings'

const Header = ({apps, setApps}) => {
  const [userMenu, setUserMenu] = useState(false);
  const {user, mutateUser} = useUser()
  const {t} = useSettings()
  const router = useRouter()

  const handleLogout = async (e) => {
    e.preventDefault()
    mutateUser(
      await fetchJson('/api/logout', {method: 'POST'}),
      false
    )
    router.push('/login')
  }


  const handleClick = (app, setApps) => {
    if (app.min) {
      toggleMin(app.name, setApps)
    }
    focus(app.name, setApps)
  }

  return (
    <header className={styles.header}>
      <nav>
        <ul>
          {
            apps && [...apps].sort((a,b) => a.name > b.name).map(app => (
              <li
                key={app.name}
                onClick={() => handleClick(app, setApps)}
              >
                <span
                  style={{
                    ...apps.findIndex(a => a.name === app.name) === apps.length - 1 ? {fontWeight: 600} : {},
                    ...app.min ? {color: '#888'} : {}
                  }}
                >
                  {t(app.name)}
                </span>
              </li>
            ))
          }
        </ul>
        <ul>
          {!user?.isLoggedIn && (
            <li>
              <Link href="/register">
                <a>{t('register')}</a>
              </Link>
            </li>
          )}
          {!user?.isLoggedIn && (
            <li>
              <Link href="/login">
                <a>{t('login')}</a>
              </Link>
            </li>
          )}
          {user?.isLoggedIn && (
            <li>
              <p
                className={styles.user}
                onClick={() => setUserMenu(!userMenu)}
              >{user?.email}</p>
              {
                userMenu && (

                <>
                  <div className={styles.headerOverlay} onClick={() => setUserMenu(false)} />
                  <ul className={styles.submenu}>
                    {user.isVerified && (
                      <li>
                        <span onClick={() => {
                          open({appName: 'Settings', ...appList.Settings}, setApps)
                          setUserMenu()
                        }}>
                          {t('Settings')}
                        </span>
                      </li>
                    )}
                    <li>
                      <a href="/api/logout" onClick={handleLogout}>
                        {t('logout')}
                      </a>
                    </li>
                  </ul>
                </>
                )
              }
            </li>
          )}
        </ul>
      </nav>
    </header>
  )
}

export default Header