@@ -63,16 +63,22 @@ export function MemberCard({
6363 ( state : OrganizationStateStore ) => state . currentOrganizationId
6464 ) ;
6565 const { isACoach, userSession } = useAuthStore ( ( state : AuthStore ) => state ) ;
66- const { error : deleteError , deleteNested : deleteUser } = useUserMutation ( currentOrganizationId ) ;
67- const { error : createError , createNested : createRelationship } = useCoachingRelationshipMutation ( currentOrganizationId ) ;
66+ const { error : deleteError , deleteNested : deleteUser } = useUserMutation (
67+ currentOrganizationId
68+ ) ;
69+ const { error : createError , createNested : createRelationship } =
70+ useCoachingRelationshipMutation ( currentOrganizationId ) ;
6871
6972 console . log ( "is a coach" , isACoach ) ;
7073
7174 // Check if current user is a coach in any of this user's relationships
7275 // and make sure we can't delete ourselves. Admins can delete any user.
73- const canDeleteUser = ( userRelationships ?. some (
74- ( rel ) => rel . coach_id === userSession . id && userId !== userSession . id
75- ) || ( userSession . role === Role . Admin ) ) && userSession . id !== userId ;
76+ const canDeleteUser =
77+ ( userRelationships ?. some (
78+ ( rel ) => rel . coach_id === userSession . id && userId !== userSession . id
79+ ) ||
80+ userSession . role === Role . Admin ) &&
81+ userSession . id !== userId ;
7682
7783 const handleDelete = async ( ) => {
7884 if ( ! confirm ( "Are you sure you want to delete this member?" ) ) {
@@ -129,31 +135,16 @@ export function MemberCard({
129135 toast . error ( `Error assigning ${ assignMode } ` ) ;
130136 return ;
131137 }
132-
133- toast . success ( `Successfully assigned ${ assignedMember . first_name } ${ assignedMember . last_name } as ${ assignMode } for ${ selectedMember . first_name } ${ selectedMember . last_name } ` ) ;
138+
139+ toast . success (
140+ `Successfully assigned ${ assignedMember . first_name } ${ assignedMember . last_name } as ${ assignMode } for ${ selectedMember . first_name } ${ selectedMember . last_name } `
141+ ) ;
134142 onRefresh ( ) ;
135143 setAssignDialogOpen ( false ) ;
136144 setSelectedMember ( null ) ;
137145 setAssignedMember ( null ) ;
138146 } ;
139147
140- // Placeholder – actual UI flows will be implemented later
141- const [ assignDialogOpen , setAssignDialogOpen ] = useState ( false ) ;
142- const [ assignMode , setAssignMode ] = useState < "coach" | "coachee" > ( "coach" ) ;
143- const [ selectedMemberId , setSelectedMemberId ] = useState < Id | null > ( null ) ;
144-
145- const handleCreateCoachingRelationship = ( ) => {
146- if ( ! selectedMemberId ) return ;
147- if ( assignMode === "coach" ) {
148- console . log ( "Assign" , selectedMemberId , "as coach for" , userId ) ;
149- } else {
150- console . log ( "Assign" , selectedMemberId , "as coachee for" , userId ) ;
151- }
152- // TODO: call mutation
153- setAssignDialogOpen ( false ) ;
154- setSelectedMemberId ( null ) ;
155- } ;
156-
157148 return (
158149 < div className = "flex items-center p-4 hover:bg-accent/50 transition-colors" >
159150 < div className = "flex-1" >
@@ -163,49 +154,61 @@ export function MemberCard({
163154 { email && < p className = "text-sm text-muted-foreground" > { email } </ p > }
164155 </ div >
165156 { ( isACoach || userSession . role === Role . Admin ) && (
166- < DropdownMenu >
167- < DropdownMenuTrigger asChild >
168- < Button variant = "ghost" size = "icon" className = "text-muted-foreground" >
169- < MoreHorizontal className = "h-4 w-4" />
170- </ Button >
171- </ DropdownMenuTrigger >
172- < DropdownMenuContent align = "end" >
173- { userSession . role === Role . Admin && (
174- < >
175- < DropdownMenuItem
176- onClick = { ( ) => {
177- setAssignMode ( "coach" ) ;
178- setAssignDialogOpen ( true ) ;
179- setSelectedMember ( { id : userId , first_name : firstName , last_name : lastName } ) ;
180- } }
181- >
182- Assign Coach
183- </ DropdownMenuItem >
184- < DropdownMenuItem
185- onClick = { ( ) => {
186- setAssignMode ( "coachee" ) ;
187- setAssignDialogOpen ( true ) ;
188- setSelectedMember ( { id : userId , first_name : firstName , last_name : lastName } ) ;
189- } }
190- >
191- Assign Coachee
192- </ DropdownMenuItem >
193- </ >
194- ) }
195- { canDeleteUser && (
196- < >
197- < DropdownMenuSeparator />
198- < DropdownMenuItem
199- onClick = { handleDelete }
200- className = "text-destructive focus:text-destructive"
201- >
202- < Trash2 className = "mr-2 h-4 w-4" /> Delete
203- </ DropdownMenuItem >
204- </ >
205- ) }
206- </ DropdownMenuContent >
207- </ DropdownMenu >
208- ) }
157+ < DropdownMenu >
158+ < DropdownMenuTrigger asChild >
159+ < Button
160+ variant = "ghost"
161+ size = "icon"
162+ className = "text-muted-foreground"
163+ >
164+ < MoreHorizontal className = "h-4 w-4" />
165+ </ Button >
166+ </ DropdownMenuTrigger >
167+ < DropdownMenuContent align = "end" >
168+ { userSession . role === Role . Admin && (
169+ < >
170+ < DropdownMenuItem
171+ onClick = { ( ) => {
172+ setAssignMode ( "coach" ) ;
173+ setAssignDialogOpen ( true ) ;
174+ setSelectedMember ( {
175+ id : userId ,
176+ first_name : firstName ,
177+ last_name : lastName ,
178+ } ) ;
179+ } }
180+ >
181+ Assign Coach
182+ </ DropdownMenuItem >
183+ < DropdownMenuItem
184+ onClick = { ( ) => {
185+ setAssignMode ( "coachee" ) ;
186+ setAssignDialogOpen ( true ) ;
187+ setSelectedMember ( {
188+ id : userId ,
189+ first_name : firstName ,
190+ last_name : lastName ,
191+ } ) ;
192+ } }
193+ >
194+ Assign Coachee
195+ </ DropdownMenuItem >
196+ </ >
197+ ) }
198+ { canDeleteUser && (
199+ < >
200+ < DropdownMenuSeparator />
201+ < DropdownMenuItem
202+ onClick = { handleDelete }
203+ className = "text-destructive focus:text-destructive"
204+ >
205+ < Trash2 className = "mr-2 h-4 w-4" /> Delete
206+ </ DropdownMenuItem >
207+ </ >
208+ ) }
209+ </ DropdownMenuContent >
210+ </ DropdownMenu >
211+ ) }
209212
210213 { /* Assign Coach/Coachee Modal */ }
211214 < Dialog open = { assignDialogOpen } onOpenChange = { setAssignDialogOpen } >
@@ -215,7 +218,8 @@ export function MemberCard({
215218 { assignMode === "coach" ? "Assign Coach" : "Assign Coachee" }
216219 </ DialogTitle >
217220 < DialogDescription >
218- Select a member to be their { assignMode === "coach" ? "coach" : "coachee" }
221+ Select a member to be their{ " " }
222+ { assignMode === "coach" ? "coach" : "coachee" }
219223 </ DialogDescription >
220224 </ DialogHeader >
221225 < Select
@@ -229,12 +233,17 @@ export function MemberCard({
229233 { users
230234 . filter ( ( m ) => m . id !== userId )
231235 . map ( ( m ) => (
232- < SelectItem key = { m . id } value = { m . id . toString ( ) } > { `${ m . first_name } ${ m . last_name } ` } </ SelectItem >
236+ < SelectItem
237+ key = { m . id }
238+ value = { m . id . toString ( ) }
239+ > { `${ m . first_name } ${ m . last_name } ` } </ SelectItem >
233240 ) ) }
234241 </ SelectContent >
235242 </ Select >
236243 < DialogFooter >
237- < Button onClick = { handleCreateCoachingRelationship } > { assignMode === "coach" ? "Assign as Coach" : "Assign as Coachee" } </ Button >
244+ < Button onClick = { handleCreateCoachingRelationship } >
245+ { assignMode === "coach" ? "Assign as Coach" : "Assign as Coachee" }
246+ </ Button >
238247 </ DialogFooter >
239248 </ DialogContent >
240249 </ Dialog >
0 commit comments