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

EcrituresNumeriques / stylo / 13906025440

17 Mar 2025 05:32PM UTC coverage: 31.197% (+0.5%) from 30.662%
13906025440

push

github

web-flow
chore: supprime useMutation et clarifie les fonctions (#1304)

* chore: supprime useMutation et clarifie les fonctions

- Renomme useGraphQL en useFetchData
- Introduit une fonction useMutateData pour mettre à jour les données pour un scope (query + variables)

* fix: articleId destructuring

* chore: ajout de tests sur le hook article

* fix: mise à jour des tags associés à l'article sur la liste des articles

* chore: adapt TagEditForm tests

462 of 677 branches covered (68.24%)

Branch coverage included in aggregate %.

165 of 341 new or added lines in 29 files covered. (48.39%)

9 existing lines in 8 files now uncovered.

4367 of 14802 relevant lines covered (29.5%)

2.21 hits per line

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

0.0
/front/src/components/collaborative/CollaborativeSessionAction.jsx
1
import React, { useCallback, useEffect, useMemo } from 'react'
×
2
import PropTypes from 'prop-types'
×
3
import { Badge, Modal as GeistModal, useModal } from '@geist-ui/core'
×
4
import { Users } from 'react-feather'
×
5
import { useTranslation } from 'react-i18next'
×
6
import { useHistory } from 'react-router-dom'
×
7

8
import { startCollaborativeSession } from '../Article.graphql'
×
UNCOV
9
import Button from '../Button.jsx'
×
NEW
10
import { useGraphQLClient } from '../../helpers/graphQL.js'
×
11

12
export default function CollaborativeSessionAction({
×
13
  collaborativeSession,
×
14
  articleId,
×
15
}) {
×
16
  const { t } = useTranslation()
×
17
  const history = useHistory()
×
NEW
18
  const { query } = useGraphQLClient()
×
19
  const {
×
20
    visible: collaborativeEditingVisible,
×
21
    setVisible: setCollaborativeEditingVisible,
×
22
    bindings: collaborativeEditingBinding,
×
23
  } = useModal()
×
24

25
  const handleStartCollaborativeEditing = useCallback(async () => {
×
26
    // try to start a collaborative editing
27
    if (collaborativeSession && collaborativeSession.id) {
×
28
      // join existing collaborative session
29
      history.push(`/article/${articleId}/session/${collaborativeSession.id}`)
×
30
    } else {
×
31
      // start a new collaborative session
NEW
32
      const data = await query({
×
33
        query: startCollaborativeSession,
×
34
        variables: { articleId },
×
35
      })
×
36
      history.push(
×
37
        `/article/${articleId}/session/${data.article.startCollaborativeSession.id}`
×
38
      )
×
39
    }
×
40
  }, [collaborativeSession])
×
41

42
  const collaborativeSessionDialogTitle = useMemo(
×
43
    () =>
×
44
      collaborativeSession
×
45
        ? t('article.collaborativeEditingJoin.title')
×
46
        : t('article.collaborativeEditingStart.title'),
×
47
    [collaborativeSession]
×
48
  )
×
49

50
  const collaborativeSessionDialogMessage = useMemo(
×
51
    () =>
×
52
      collaborativeSession
×
53
        ? t('article.collaborativeEditingJoin.confirmMessage')
×
54
        : t('article.collaborativeEditingStart.confirmMessage'),
×
55
    [collaborativeSession]
×
56
  )
×
57

58
  useEffect(() => {
×
59
    return () => {
×
60
      setCollaborativeEditingVisible(false)
×
61
    }
×
62
  }, [])
×
63

64
  return (
×
65
    <>
×
66
      <Button
×
67
        title={t(
×
68
          'collaborativeSessionAction.launchCollaborativeSessionButton.title'
×
69
        )}
×
70
        icon={true}
×
71
        onClick={() => setCollaborativeEditingVisible(true)}
×
72
      >
73
        <Users />
×
74
        {collaborativeSession && collaborativeSession.id && (
×
75
          <Badge type="error">Live</Badge>
×
76
        )}
77
      </Button>
×
78
      <GeistModal
×
79
        width="35rem"
×
80
        visible={collaborativeEditingVisible}
×
81
        {...collaborativeEditingBinding}
×
82
      >
83
        <h2>{collaborativeSessionDialogTitle}</h2>
×
84
        <GeistModal.Content>
×
85
          {collaborativeSessionDialogMessage}
×
86
        </GeistModal.Content>
×
87
        <GeistModal.Action
×
88
          passive
×
89
          onClick={() => setCollaborativeEditingVisible(false)}
×
90
        >
91
          {t('modal.cancelButton.text')}
×
92
        </GeistModal.Action>
×
93
        <GeistModal.Action onClick={handleStartCollaborativeEditing}>
×
94
          {t('modal.confirmButton.text')}
×
95
        </GeistModal.Action>
×
96
      </GeistModal>
×
97
    </>
×
98
  )
99
}
×
100

101
CollaborativeSessionAction.propTypes = {
×
102
  articleId: PropTypes.string.isRequired,
×
103
  collaborativeSession: PropTypes.shape({
×
104
    id: PropTypes.string,
×
105
  }),
×
106
}
×
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