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

EcrituresNumeriques / stylo / 13673346615

05 Mar 2025 10:02AM UTC coverage: 28.524% (+0.03%) from 28.496%
13673346615

push

github

web-flow
fix(write): évite le re-rendering dû à la biblio (#1313)

Co-authored-by: Thomas Parisot <thom4parisot@users.noreply.github.com>

402 of 602 branches covered (66.78%)

Branch coverage included in aggregate %.

0 of 32 new or added lines in 2 files covered. (0.0%)

56 existing lines in 5 files now uncovered.

3914 of 14529 relevant lines covered (26.94%)

1.92 hits per line

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

0.0
/front/src/components/workspace/Workspaces.jsx
1
import { Button, useModal } from '@geist-ui/core'
×
2
import React, { useEffect, useState } from 'react'
×
3
import { Search } from 'react-feather'
×
4
import { useTranslation } from 'react-i18next'
×
5
import { shallowEqual, useSelector } from 'react-redux'
×
6
import { Helmet } from 'react-helmet'
×
7

8
import Field from '../../components/Field.jsx'
×
9

10
import WorkspaceItem from '../../components/workspace/WorkspaceItem.jsx'
×
11

12
import { useGraphQLClient } from '../../helpers/graphQL.js'
×
13
import { useWorkspaces } from '../../hooks/workspace.js'
×
14
import Loading from '../Loading.jsx'
×
15
import CreateWorkspaceModal from './CreateWorkspaceModal.jsx'
×
16
import { getUserStats } from './Workspaces.graphql'
×
17

UNCOV
18
import styles from './workspaces.module.scss'
×
19

UNCOV
20
export default function Workspaces() {
×
21
  const { t } = useTranslation()
×
22
  const activeUser = useSelector((state) => state.activeUser, shallowEqual)
×
23
  const [filter, setFilter] = useState('')
×
24
  const { workspaces, error, isLoading } = useWorkspaces()
×
25
  const workspaceCreateModal = useModal()
×
26

UNCOV
27
  const [personalWorkspace, setPersonalWorkspace] = useState({
×
28
    _id: activeUser._id,
×
29
    personal: true,
×
30
    members: [],
×
31
  })
×
32
  const { query } = useGraphQLClient()
×
33

UNCOV
34
  useEffect(() => {
×
35
    ;(async () => {
×
36
      try {
×
37
        const getUserStatsResponse = await query({ query: getUserStats })
×
38
        const userStats = getUserStatsResponse.user.stats
×
39
        setPersonalWorkspace({
×
40
          _id: activeUser._id,
×
41
          personal: true,
×
42
          name: t('workspace.myspace'),
×
43
          description: '',
×
44
          color: '#D9D9D9',
×
45
          createdAt: activeUser.createdAt,
×
46
          updatedAt: activeUser.updatedAt,
×
47
          members: [],
×
48
          articlesCount:
×
49
            userStats.myArticlesCount + userStats.contributedArticlesCount,
×
50
        })
×
51
      } catch (err) {
×
52
        alert(err)
×
53
      }
×
54
    })()
×
55
  }, [activeUser._id, t])
×
56

UNCOV
57
  if (error) {
×
58
    return <div>Unable to load the workspaces</div>
×
59
  }
×
60
  if (isLoading) {
×
61
    return <Loading />
×
62
  }
×
63

UNCOV
64
  return (
×
65
    <section className={styles.section}>
×
66
      <Helmet>
×
67
        <title>{t('workspace.title')}</title>
×
68
      </Helmet>
×
69

70
      <h1>{t('workspace.title')}</h1>
×
71
      <div>
×
72
        <Field
×
73
          className={styles.searchField}
×
74
          type="text"
×
75
          icon={Search}
×
76
          value={filter}
×
77
          placeholder={t('search.placeholder')}
×
78
          onChange={(e) => setFilter(e.target.value)}
×
79
        />
×
80
      </div>
×
81
      <Button
×
82
        type="secondary"
×
83
        className={styles.button}
×
84
        onClick={() => workspaceCreateModal.setVisible(true)}
×
85
      >
UNCOV
86
        {t('workspace.createNew.button')}
×
87
      </Button>
×
88

UNCOV
89
      <CreateWorkspaceModal {...workspaceCreateModal} />
×
90

UNCOV
91
      <ul className={styles.workspacesList}>
×
92
        {[personalWorkspace, ...workspaces].map((workspace) => (
×
93
          <li key={`workspace-${workspace._id}`}>
×
94
            <WorkspaceItem workspace={workspace} />
×
95
          </li>
×
96
        ))}
×
97
      </ul>
×
98
    </section>
×
99
  )
100
}
×
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