• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

EcrituresNumeriques / stylo / 12925854411

23 Jan 2025 09:11AM UTC coverage: 25.831% (-4.7%) from 30.523%
12925854411

push

github

web-flow
Merge pull request #1192 from EcrituresNumeriques/feat/vite6

322 of 518 branches covered (62.16%)

Branch coverage included in aggregate %.

3448 of 14077 relevant lines covered (24.49%)

1.66 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/front/src/components/header/UserMenu.jsx
1
import React, { useEffect } from 'react'
×
2
import { useTranslation } from 'react-i18next'
×
3
import { useDispatch, useSelector } from 'react-redux'
×
4
import { Link } from 'react-router-dom'
×
5
import { Layers, LogOut, User } from 'react-feather'
×
6

7
import useComponentVisible from '../../hooks/componentVisible'
×
8
import styles from './UserMenu.module.scss'
×
9
import Button from '../Button.jsx'
×
10
import WorkspaceMenuItem from '../workspace/WorkspaceMenuItem.jsx'
×
11
import UserMenuLink from './UserMenuLink.jsx'
×
12

13
export default function UserMenu() {
×
14
  const { t } = useTranslation()
×
15
  const dispatch = useDispatch()
×
16
  const logout = () => {
×
17
    setIsComponentVisible(false)
×
18
    dispatch({ type: 'LOGOUT' })
×
19
  }
×
20
  const { ref, isComponentVisible, setIsComponentVisible } =
×
21
    useComponentVisible(false)
×
22
  const activeUser = useSelector((state) => state.activeUser)
×
23
  const activeWorkspace = activeUser.workspaces.find(
×
24
    (workspace) => workspace._id === activeUser.activeWorkspaceId
×
25
  )
×
26

27
  useEffect(() => {
×
28
    setIsComponentVisible(false)
×
29
  }, [activeUser.activeWorkspaceId])
×
30

31
  return (
×
32
    <div ref={ref} className={styles.container}>
×
33
      <div
×
34
        className={styles.userMenuLink}
×
35
        onClick={() => setIsComponentVisible(!isComponentVisible)}
×
36
      >
37
        <UserMenuLink
×
38
          username={activeUser.displayName}
×
39
          activeWorkspace={activeWorkspace}
×
40
        />
×
41
      </div>
×
42
      {isComponentVisible && (
×
43
        <div className={styles.menu}>
×
44
          <div className={styles.workspaces}>
×
45
            <h4>{t('workspace.menu.title')}</h4>
×
46
            <ul>
×
47
              <WorkspaceMenuItem
×
48
                color="#D9D9D9"
×
49
                name={t('workspace.myspace')}
×
50
              />
×
51
              {activeUser.workspaces.map((workspace) => (
×
52
                <WorkspaceMenuItem
×
53
                  id={workspace._id}
×
54
                  key={workspace._id}
×
55
                  color={workspace.color}
×
56
                  name={workspace.name}
×
57
                />
×
58
              ))}
×
59
              <li className={styles.workspacesLink}>
×
60
                <Link
×
61
                  to="/workspaces"
×
62
                  onClick={() => setIsComponentVisible(false)}
×
63
                >
64
                  <Layers />
×
65
                  {t('workspace.all')}
×
66
                </Link>
×
67
              </li>
×
68
            </ul>
×
69
          </div>
×
70
          <div className={styles.footer}>
×
71
            <div className={styles.userBlock}>
×
72
              <Link
×
73
                to="/credentials"
×
74
                onClick={() => setIsComponentVisible(false)}
×
75
                className={styles.userCard}
×
76
              >
77
                <div className={styles.persona}>
×
78
                  <User />
×
79
                </div>
×
80
                <div className={styles.userInfo}>
×
81
                  <div className={styles.username}>
×
82
                    {activeUser.displayName}
×
83
                  </div>
×
84
                  <div className={styles.email}>{activeUser.email}</div>
×
85
                </div>
×
86
              </Link>
×
87
              <Button className={styles.logoutButton} onClick={logout} link>
×
88
                <LogOut size={22} />
×
89
              </Button>
×
90
            </div>
×
91
          </div>
×
92
        </div>
×
93
      )}
94
    </div>
×
95
  )
96
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc