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

EcrituresNumeriques / stylo / 14909466455

08 May 2025 02:53PM UTC coverage: 37.665% (+0.4%) from 37.293%
14909466455

push

github

web-flow
fix(bibliography): correctifs d'imports Zotero (#1453)

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

548 of 776 branches covered (70.62%)

Branch coverage included in aggregate %.

134 of 489 new or added lines in 15 files covered. (27.4%)

10 existing lines in 5 files now uncovered.

5327 of 14822 relevant lines covered (35.94%)

2.54 hits per line

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

0.0
/front/src/components/collaborative/CollaborativeEditorMenu.jsx
NEW
1
import React, { useCallback } from 'react'
×
2
import clsx from 'clsx'
×
3
import { ArrowLeft, ChevronRight } from 'lucide-react'
×
4
import { useTranslation } from 'react-i18next'
×
5

NEW
6
import { usePreferenceItem } from '../../hooks/user.js'
×
7
import { useArticleWorkingCopy } from '../../hooks/article.js'
×
8
import useFetchData from '../../hooks/graphql.js'
×
9

10
import Export from '../Export.jsx'
×
11
import Loading from '../molecules/Loading.jsx'
×
12
import Sidebar from '../Sidebar.jsx'
×
13
import ArticleBibliography from '../bibliography/ArticleBibliography.jsx'
×
14
import ArticleMetadata from '../Write/ArticleMetadata.jsx'
×
15
import ArticleTableOfContents from './ArticleTableOfContents.jsx'
×
16
import CollaborativeVersions from './CollaborativeVersions.jsx'
×
17

18
import { getArticleInfo } from '../Article.graphql'
×
19

20
import styles from './CollaborativeEditorMenu.module.scss'
×
21

22
export default function CollaborativeEditorMenu({ articleId, versionId }) {
×
23
  const { t } = useTranslation()
×
NEW
24
  const { value: opened, toggleValue: setOpened } = usePreferenceItem(
×
NEW
25
    'expandSidebarRight',
×
NEW
26
    'article'
×
NEW
27
  )
×
NEW
28
  const { value: activeMenu, setValue: setActiveMenu } = usePreferenceItem(
×
NEW
29
    'activePanel',
×
NEW
30
    'article'
×
NEW
31
  )
×
32

NEW
33
  const onBack = useCallback(() => setActiveMenu(null), [])
×
34

35
  const { article, updateMetadata } = useArticleWorkingCopy({ articleId })
×
36
  const { data, isLoading } = useFetchData(
×
37
    { query: getArticleInfo, variables: { articleId } },
×
38
    {
×
39
      revalidateIfStale: false,
×
40
      revalidateOnFocus: false,
×
41
      revalidateOnReconnect: false,
×
42
    }
×
43
  )
×
44

45
  if (isLoading) {
×
46
    return <Loading />
×
47
  }
×
48

49
  const metadata = article?.workingVersion?.metadata
×
50

51
  return (
×
NEW
52
    <Sidebar
×
NEW
53
      className={clsx(styles.container, opened && styles.opened)}
×
NEW
54
      opened={opened}
×
NEW
55
      setOpened={setOpened}
×
NEW
56
      labelOpened={t('editorMenu.open.label')}
×
NEW
57
      labelClosed={t('editorMenu.close.label')}
×
58
    >
NEW
59
      {!activeMenu && (
×
NEW
60
        <ul
×
NEW
61
          className={styles.entries}
×
NEW
62
          role="menubar"
×
NEW
63
          aria-orientation="vertical"
×
64
        >
NEW
65
          <li role="menuitem">
×
NEW
66
            <button onClick={() => setActiveMenu('toc')}>
×
NEW
67
              {t('toc.title')}
×
NEW
68
              <ChevronRight
×
NEW
69
                style={{ strokeWidth: 3 }}
×
NEW
70
                height={32}
×
NEW
71
                width={32}
×
NEW
72
                aria-hidden
×
NEW
73
              />
×
NEW
74
            </button>
×
NEW
75
          </li>
×
76

NEW
77
          <li role="menuitem">
×
NEW
78
            <button onClick={() => setActiveMenu('metadata')}>
×
NEW
79
              {t('metadata.title')}
×
NEW
80
              <ChevronRight
×
NEW
81
                style={{ strokeWidth: 3 }}
×
NEW
82
                height={32}
×
NEW
83
                width={32}
×
NEW
84
                aria-hidden
×
UNCOV
85
              />
×
NEW
86
            </button>
×
NEW
87
          </li>
×
88

NEW
89
          <li role="menuitem">
×
NEW
90
            <button onClick={() => setActiveMenu('bibliography')}>
×
NEW
91
              {t('bibliography.title')}
×
NEW
92
              <ChevronRight
×
NEW
93
                style={{ strokeWidth: 3 }}
×
NEW
94
                height={32}
×
NEW
95
                width={32}
×
NEW
96
                aria-hidden
×
NEW
97
              />
×
NEW
98
            </button>
×
NEW
99
          </li>
×
100

NEW
101
          <li role="menuitem">
×
NEW
102
            <button onClick={() => setActiveMenu('versions')}>
×
NEW
103
              {t('versions.title')}
×
NEW
104
              <ChevronRight
×
NEW
105
                style={{ strokeWidth: 3 }}
×
NEW
106
                height={32}
×
NEW
107
                width={32}
×
NEW
108
                aria-hidden
×
UNCOV
109
              />
×
NEW
110
            </button>
×
NEW
111
          </li>
×
NEW
112
          <li role="menuitem">
×
NEW
113
            <button
×
NEW
114
              onClick={() => setActiveMenu('export')}
×
NEW
115
              title="Download a printable version"
×
116
            >
NEW
117
              {t('export.title')}
×
NEW
118
              <ChevronRight
×
NEW
119
                style={{ strokeWidth: 3 }}
×
NEW
120
                height={32}
×
NEW
121
                width={32}
×
NEW
122
                aria-hidden
×
UNCOV
123
              />
×
NEW
124
            </button>
×
NEW
125
          </li>
×
NEW
126
          <li role="menuitem">
×
NEW
127
            <a
×
NEW
128
              href={`/article/${articleId}/annotate`}
×
NEW
129
              title="Preview (open a new window)"
×
NEW
130
              target="_blank"
×
NEW
131
              rel="noopener noreferrer"
×
NEW
132
              className={styles.external}
×
133
            >
NEW
134
              {t('annotate.title')}
×
NEW
135
            </a>
×
NEW
136
          </li>
×
NEW
137
        </ul>
×
138
      )}
139

NEW
140
      <div className={styles.content}>
×
NEW
141
        {activeMenu === 'metadata' && (
×
NEW
142
          <ArticleMetadata
×
NEW
143
            onBack={onBack}
×
NEW
144
            metadata={metadata}
×
NEW
145
            onChange={(metadata) => updateMetadata(metadata)}
×
NEW
146
          />
×
147
        )}
NEW
148
        {activeMenu === 'toc' && <ArticleTableOfContents onBack={onBack} />}
×
NEW
149
        {activeMenu === 'bibliography' && (
×
NEW
150
          <ArticleBibliography articleId={articleId} onBack={onBack} />
×
151
        )}
NEW
152
        {activeMenu === 'export' && (
×
NEW
153
          <>
×
NEW
154
            <h2
×
NEW
155
              className={styles.title}
×
NEW
156
              onClick={onBack}
×
NEW
157
              style={{ cursor: 'pointer', userSelect: 'none' }}
×
158
            >
NEW
159
              <span style={{ display: 'flex' }}>
×
NEW
160
                <ArrowLeft style={{ strokeWidth: 3 }} />
×
NEW
161
              </span>
×
NEW
162
              <span>{t('export.title')}</span>
×
NEW
163
            </h2>
×
NEW
164
            <Export
×
NEW
165
              articleId={articleId}
×
NEW
166
              name={data?.article?.title}
×
NEW
167
              bib={data?.article?.workingVersion?.bibPreview}
×
NEW
168
            />
×
NEW
169
          </>
×
170
        )}
NEW
171
        {activeMenu === 'versions' && (
×
NEW
172
          <CollaborativeVersions
×
NEW
173
            articleId={articleId}
×
NEW
174
            selectedVersion={versionId}
×
NEW
175
            showTitle={true}
×
NEW
176
            onBack={onBack}
×
NEW
177
          />
×
178
        )}
NEW
179
      </div>
×
NEW
180
    </Sidebar>
×
181
  )
182
}
×
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