@@ -63,16 +63,22 @@ export function MemberCard({
63
63
( state : OrganizationStateStore ) => state . currentOrganizationId
64
64
) ;
65
65
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 ) ;
68
71
69
72
console . log ( "is a coach" , isACoach ) ;
70
73
71
74
// Check if current user is a coach in any of this user's relationships
72
75
// 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 ;
76
82
77
83
const handleDelete = async ( ) => {
78
84
if ( ! confirm ( "Are you sure you want to delete this member?" ) ) {
@@ -129,31 +135,16 @@ export function MemberCard({
129
135
toast . error ( `Error assigning ${ assignMode } ` ) ;
130
136
return ;
131
137
}
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
+ ) ;
134
142
onRefresh ( ) ;
135
143
setAssignDialogOpen ( false ) ;
136
144
setSelectedMember ( null ) ;
137
145
setAssignedMember ( null ) ;
138
146
} ;
139
147
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
-
157
148
return (
158
149
< div className = "flex items-center p-4 hover:bg-accent/50 transition-colors" >
159
150
< div className = "flex-1" >
@@ -163,49 +154,61 @@ export function MemberCard({
163
154
{ email && < p className = "text-sm text-muted-foreground" > { email } </ p > }
164
155
</ div >
165
156
{ ( 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
+ ) }
209
212
210
213
{ /* Assign Coach/Coachee Modal */ }
211
214
< Dialog open = { assignDialogOpen } onOpenChange = { setAssignDialogOpen } >
@@ -215,7 +218,8 @@ export function MemberCard({
215
218
{ assignMode === "coach" ? "Assign Coach" : "Assign Coachee" }
216
219
</ DialogTitle >
217
220
< DialogDescription >
218
- Select a member to be their { assignMode === "coach" ? "coach" : "coachee" }
221
+ Select a member to be their{ " " }
222
+ { assignMode === "coach" ? "coach" : "coachee" }
219
223
</ DialogDescription >
220
224
</ DialogHeader >
221
225
< Select
@@ -229,12 +233,17 @@ export function MemberCard({
229
233
{ users
230
234
. filter ( ( m ) => m . id !== userId )
231
235
. 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 >
233
240
) ) }
234
241
</ SelectContent >
235
242
</ Select >
236
243
< 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 >
238
247
</ DialogFooter >
239
248
</ DialogContent >
240
249
</ Dialog >
0 commit comments