11'use client'
22
33import { useState } from 'react'
4- import { Chip , ChipConfirmModal , ChipModalTabs , ChipTag , toast } from '@sim/emcn'
4+ import { Chip , ChipConfirmModal , ChipModalTabs , toast } from '@sim/emcn'
55import { ArrowLeft , Plus , User } from '@sim/emcn/icons'
66import { getErrorMessage } from '@sim/utils/errors'
77import { useQueryState } from 'nuqs'
88import { saveDiscardActions } from '@/components/settings/save-discard-actions'
99import type {
1010 CredentialGroupEnrollment ,
1111 CredentialGroupEnrollmentConnection ,
12- CredentialGroupEnrollmentDetail ,
1312} from '@/lib/api/contracts/credential-groups'
1413import type { CredentialGroupProvider } from '@/lib/credential-groups/providers'
1514import { getCredentialGroupProviderService } from '@/lib/credential-groups/providers'
@@ -53,35 +52,6 @@ const CREDENTIAL_GROUP_TABS = [
5352 { value : 'people' , label : 'People' } ,
5453] as const
5554
56- export function getEnrollmentStatus (
57- enrollment : CredentialGroupEnrollmentDetail ,
58- activeProviders : CredentialGroupProvider [ ]
59- ) {
60- if ( enrollment . status === 'revoked' ) return { label : 'Revoked' , invalid : false }
61- if ( enrollment . status === 'delivery_failed' ) return { label : 'Delivery failed' , invalid : true }
62- if ( enrollment . status !== 'completed' && enrollment . expired ) {
63- return { label : 'Expired' , invalid : true }
64- }
65- const needsReauthorization = enrollment . connections . some (
66- ( connection ) => connection . status === 'needs_reauth'
67- )
68- if ( needsReauthorization ) return { label : 'Reconnect needed' , invalid : false }
69- const connectedProviders = new Set (
70- enrollment . connections
71- . filter ( ( connection ) => connection . status === 'active' )
72- . map ( ( connection ) => connection . provider )
73- )
74- const allProvidersConnected =
75- activeProviders . length > 0 &&
76- activeProviders . every ( ( provider ) => connectedProviders . has ( provider ) )
77- if ( enrollment . status === 'completed' && allProvidersConnected ) {
78- return { label : 'Connected' , invalid : false }
79- }
80- if ( enrollment . status === 'completed' ) return { label : 'In progress' , invalid : false }
81- if ( enrollment . status === 'in_progress' ) return { label : 'In progress' , invalid : false }
82- return { label : 'Invited' , invalid : false }
83- }
84-
8555interface EnrollmentConnectionsProps {
8656 connections : CredentialGroupEnrollmentConnection [ ]
8757}
@@ -124,7 +94,7 @@ export function CredentialGroupDetail({
12494 providerId : SLACK_CUSTOM_BOT_PROVIDER_ID ,
12595 } )
12696 const resend = useResendCredentialGroupEnrollment ( )
127- const revoke = useRevokeCredentialGroupEnrollment ( )
97+ const deleteEnrollment = useRevokeCredentialGroupEnrollment ( )
12898 const updateGroup = useUpdateCredentialGroup ( )
12999 const deleteGroup = useDeleteCredentialGroup ( )
130100 const [ activeTab , setActiveTab ] = useQueryState ( credentialGroupTabParam . key , {
@@ -133,18 +103,14 @@ export function CredentialGroupDetail({
133103 } )
134104 const [ showInvite , setShowInvite ] = useState ( false )
135105 const [ showDelete , setShowDelete ] = useState ( false )
136- const [ revokingEnrollmentId , setRevokingEnrollmentId ] = useState < string | null > ( null )
106+ const [ deletingEnrollmentId , setDeletingEnrollmentId ] = useState < string | null > ( null )
137107 const [ draftName , setDraftName ] = useState < string | null > ( null )
138108 const [ draftDescription , setDraftDescription ] = useState < string | null > ( null )
139109 const credentialGroup = detail . data ?. pages [ 0 ] ?. credentialGroup
140110 const enrollments = detail . data ?. pages . flatMap ( ( page ) => page . enrollments ) ?? [ ]
141- const revokingEnrollment = revokingEnrollmentId
142- ? ( enrollments . find ( ( enrollment ) => enrollment . id === revokingEnrollmentId ) ?? null )
111+ const deletingEnrollment = deletingEnrollmentId
112+ ? ( enrollments . find ( ( enrollment ) => enrollment . id === deletingEnrollmentId ) ?? null )
143113 : null
144- const activeProviders =
145- credentialGroup ?. options
146- . filter ( ( option ) => option . status === 'active' )
147- . map ( ( option ) => option . provider ) ?? [ ]
148114 const configurationReady =
149115 Boolean ( credentialGroup ?. options . length ) &&
150116 credentialGroup ?. options . every (
@@ -226,18 +192,18 @@ export function CredentialGroupDetail({
226192 }
227193 }
228194
229- const handleRevoke = async ( ) => {
230- if ( ! revokingEnrollment ) return
195+ const handleDeleteEnrollment = async ( ) => {
196+ if ( ! deletingEnrollment ) return
231197 try {
232- await revoke . mutateAsync ( {
198+ await deleteEnrollment . mutateAsync ( {
233199 workspaceId,
234200 groupId,
235- enrollmentId : revokingEnrollment . id ,
201+ enrollmentId : deletingEnrollment . id ,
236202 } )
237- toast . success ( `Access revoked for ${ revokingEnrollment . email } ` )
238- setRevokingEnrollmentId ( null )
203+ toast . success ( `${ deletingEnrollment . email } deleted ` )
204+ setDeletingEnrollmentId ( null )
239205 } catch ( error ) {
240- toast . error ( getErrorMessage ( error , 'Failed to revoke access ' ) )
206+ toast . error ( getErrorMessage ( error , 'Failed to delete person ' ) )
241207 }
242208 }
243209
@@ -307,7 +273,6 @@ export function CredentialGroupDetail({
307273 ) : (
308274 < div className = { RESOURCE_LIST_STACK } >
309275 { enrollments . map ( ( enrollment ) => {
310- const status = getEnrollmentStatus ( enrollment , activeProviders )
311276 return (
312277 < SettingsResourceRow
313278 key = { enrollment . id }
@@ -317,32 +282,22 @@ export function CredentialGroupDetail({
317282 description = {
318283 < EnrollmentConnections connections = { enrollment . connections } />
319284 }
320- badge = {
321- < ChipTag
322- variant = { status . invalid ? 'invite' : 'gray' }
323- invalid = { status . invalid }
324- >
325- { status . label }
326- </ ChipTag >
327- }
328285 trailing = {
329- enrollment . status === 'revoked' ? undefined : (
330- < RowActionsMenu
331- label = { `${ enrollment . email } actions` }
332- actions = { [
333- {
334- label : 'Resend' ,
335- onSelect : ( ) => void handleResend ( enrollment ) ,
336- disabled : resend . isPending ,
337- } ,
338- {
339- label : 'Revoke' ,
340- destructive : true ,
341- onSelect : ( ) => setRevokingEnrollmentId ( enrollment . id ) ,
342- } ,
343- ] }
344- />
345- )
286+ < RowActionsMenu
287+ label = { `${ enrollment . email } actions` }
288+ actions = { [
289+ {
290+ label : 'Resend' ,
291+ onSelect : ( ) => void handleResend ( enrollment ) ,
292+ disabled : resend . isPending ,
293+ } ,
294+ {
295+ label : 'Delete' ,
296+ destructive : true ,
297+ onSelect : ( ) => setDeletingEnrollmentId ( enrollment . id ) ,
298+ } ,
299+ ] }
300+ />
346301 }
347302 />
348303 )
@@ -363,16 +318,24 @@ export function CredentialGroupDetail({
363318 />
364319 ) }
365320 < ChipConfirmModal
366- open = { Boolean ( revokingEnrollment ) }
367- onOpenChange = { ( open ) => ! open && ! revoke . isPending && setRevokingEnrollmentId ( null ) }
368- srTitle = 'Revoke access'
369- title = 'Revoke access?'
370- text = { `Revoke access for ${ revokingEnrollment ?. email ?? 'this user' } ? Their private link will stop working and all accounts they connected to this Credential Group will be removed.` }
321+ open = { Boolean ( deletingEnrollment ) }
322+ onOpenChange = { ( open ) =>
323+ ! open && ! deleteEnrollment . isPending && setDeletingEnrollmentId ( null )
324+ }
325+ srTitle = 'Delete person'
326+ title = 'Delete person'
327+ text = { [
328+ `Delete ${ deletingEnrollment ?. email ?? 'this person' } ?` ,
329+ {
330+ text : ' Their private link will stop working and all accounts they connected to this Credential Group will be removed.' ,
331+ error : true ,
332+ } ,
333+ ] }
371334 dismissLabel = 'Cancel'
372335 confirm = { {
373- label : revoke . isPending ? 'Revoking ...' : 'Revoke ' ,
374- onClick : handleRevoke ,
375- disabled : revoke . isPending ,
336+ label : deleteEnrollment . isPending ? 'Deleting ...' : 'Delete ' ,
337+ onClick : handleDeleteEnrollment ,
338+ disabled : deleteEnrollment . isPending ,
376339 } }
377340 />
378341 < ChipConfirmModal
0 commit comments