• 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/workspace/WorkspaceManageMembers.jsx
1
import React, { useCallback } from 'react'
×
2
import { useToasts } from '@geist-ui/core'
×
3
import useGraphQL, { useMutation } from '../../hooks/graphql.js'
×
4

5
import {
×
6
  getWorkspaceMembers,
7
  inviteMember,
8
  removeMember,
9
} from './Workspaces.graphql'
10
import ContactSearch from '../ContactSearch.jsx'
×
11

12
export default function WorkspaceManageMembers({ workspace }) {
×
13
  const workspaceId = workspace._id
×
14
  const mutation = useMutation()
×
15
  const { setToast } = useToasts()
×
16
  const { data, mutate } = useGraphQL(
×
17
    { query: getWorkspaceMembers, variables: { workspaceId } },
×
18
    {
×
19
      revalidateOnFocus: false,
×
20
      revalidateOnReconnect: false,
×
21
    }
×
22
  )
×
23
  const members =
×
24
    data?.workspace?.members?.map((member) => ({
×
25
      ...member,
×
26
      selected: true,
×
27
    })) || []
×
28

29
  const handleUserUpdated = useCallback(
×
30
    async ({ user, action }) => {
×
31
      const { _id: userId } = user
×
32
      if (action === 'select') {
×
33
        try {
×
34
          const response = await mutation({
×
35
            query: inviteMember,
×
36
            variables: { workspaceId, userId, role: '' },
×
37
          })
×
38
          await mutate(
×
39
            {
×
40
              workspace: {
×
41
                members: response.workspace.inviteMember.members.map(
×
42
                  (member) => ({
×
43
                    ...member,
×
44
                    selected: true,
×
45
                  })
×
46
                ),
×
47
              },
×
48
            },
×
49
            { revalidate: false }
×
50
          )
×
51
          setToast({
×
52
            text: `Utilisateur ${
×
53
              user.displayName || user.username
×
54
            } invité en tant que membre.`,
×
55
            type: 'default',
×
56
          })
×
57
        } catch (err) {
×
58
          setToast({
×
59
            text: String(err),
×
60
            type: 'error',
×
61
          })
×
62
        }
×
63
      } else if (action === 'unselect') {
×
64
        try {
×
65
          const response = await mutation({
×
66
            query: removeMember,
×
67
            variables: { workspaceId, userId },
×
68
          })
×
69
          await mutate(
×
70
            {
×
71
              workspace: {
×
72
                members: response.workspace.member.remove.members.map(
×
73
                  (member) => ({
×
74
                    ...member,
×
75
                    selected: true,
×
76
                  })
×
77
                ),
×
78
              },
×
79
            },
×
80
            { revalidate: false }
×
81
          )
×
82
          setToast({
×
83
            text: `Utilisateur ${
×
84
              user.displayName || user.username
×
85
            } supprimé des membres.`,
×
86
            type: 'warning',
×
87
          })
×
88
        } catch (err) {
×
89
          setToast({
×
90
            text: String(err),
×
91
            type: 'error',
×
92
          })
×
93
        }
×
94
      }
×
95
    },
×
96
    [workspaceId]
×
97
  )
×
98

99
  return (
×
100
    <section>
×
101
      <ContactSearch
×
102
        onUserUpdated={handleUserUpdated}
×
103
        members={members}
×
104
        showActiveUser
×
105
      />
×
106
    </section>
×
107
  )
108
}
×
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