@@ -31,6 +31,7 @@ export default function() {
31
31
const [ showInviteModal , setShowInviteModal ] = useState < boolean > ( false ) ;
32
32
const [ searchText , setSearchText ] = useState < string > ( '' ) ;
33
33
const [ roleFilter , setRoleFilter ] = useState < TeamMemberRole | undefined > ( ) ;
34
+ const [ leaveTeamEnabled , setLeaveTeamEnabled ] = useState < boolean > ( false ) ;
34
35
35
36
useEffect ( ( ) => {
36
37
if ( ! team ) {
@@ -46,6 +47,12 @@ export default function() {
46
47
} ) ( ) ;
47
48
} , [ team ] ) ;
48
49
50
+ useEffect ( ( ) => {
51
+ const owners = members . filter ( m => m . role === "owner" ) ;
52
+ const isOwner = owners . some ( o => o . userId === user ?. id ) ;
53
+ setLeaveTeamEnabled ( ! isOwner || owners . length > 1 ) ;
54
+ } , [ members ] ) ;
55
+
49
56
const ownMemberInfo = members . find ( m => m . userId === user ?. id ) ;
50
57
51
58
const getInviteURL = ( inviteId : string ) => {
@@ -179,9 +186,9 @@ export default function() {
179
186
< span className = "flex-grow" />
180
187
< ItemFieldContextMenu menuEntries = { m . userId === user ?. id
181
188
? [ {
182
- title : 'Leave Team' ,
183
- customFontStyle : 'text-red-600 dark:text-red-400 hover:text-red-800 dark:hover:text-red-300' ,
184
- onClick : ( ) => removeTeamMember ( m . userId )
189
+ title : leaveTeamEnabled ? 'Leave Team' : 'Remaining owner ',
190
+ customFontStyle : leaveTeamEnabled ? 'text-red-600 dark:text-red-400 hover:text-red-800 dark:hover:text-red-300' : 'text-gray-400 dark:text-gray-200 ',
191
+ onClick : ( ) => leaveTeamEnabled && removeTeamMember ( m . userId )
185
192
} ]
186
193
: ( ownMemberInfo ?. role === 'owner'
187
194
? [ {
0 commit comments