Skip to content

Commit e7aef7f

Browse files
kemaldotearthkemaljoshenlim
authored
fix(studio): empty team drop downs (supabase#37537)
* fix: empty team drop downs This fixes dropdowns returning empty on team invites when a user is signed in as a developer. For now it adds conditionals to show the option is not available for that role, but perhaps we can handle a little more gracefully. * fix: change from inline to tooltips on dropdowns This updates the members table dropdown to use the tooltip as opposed to inline message for disabled items. * Tiny clean up * Biiiit more nit --------- Co-authored-by: kemal <[email protected]> Co-authored-by: Joshen Lim <[email protected]>
1 parent b3c6992 commit e7aef7f

File tree

1 file changed

+42
-35
lines changed

1 file changed

+42
-35
lines changed

apps/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx

Lines changed: 42 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { toast } from 'sonner'
55

66
import { useParams } from 'common'
77
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
8+
import { DropdownMenuItemTooltip } from 'components/ui/DropdownMenuItemTooltip'
89
import { useOrganizationCreateInvitationMutation } from 'data/organization-members/organization-invitation-create-mutation'
910
import { useOrganizationDeleteInvitationMutation } from 'data/organization-members/organization-invitation-delete-mutation'
1011
import { useOrganizationRolesV2Query } from 'data/organization-members/organization-roles-query'
@@ -17,13 +18,12 @@ import { usePermissionsQuery } from 'data/permissions/permissions-query'
1718
import { useProjectsQuery } from 'data/projects/projects-query'
1819
import { useCheckPermissions } from 'hooks/misc/useCheckPermissions'
1920
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
20-
import { useSelectedOrganization } from 'hooks/misc/useSelectedOrganization'
21+
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
2122
import { useProfile } from 'lib/profile'
2223
import {
2324
Button,
2425
DropdownMenu,
2526
DropdownMenuContent,
26-
DropdownMenuItem,
2727
DropdownMenuSeparator,
2828
DropdownMenuTrigger,
2929
} from 'ui'
@@ -43,7 +43,7 @@ export const MemberActions = ({ member }: MemberActionsProps) => {
4343
const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false)
4444
const organizationMembersDeletionEnabled = useIsFeatureEnabled('organization_members:delete')
4545

46-
const selectedOrganization = useSelectedOrganization()
46+
const { data: selectedOrganization } = useSelectedOrganizationQuery()
4747
const { data: permissions } = usePermissionsQuery()
4848
const { data: allProjects } = useProjectsQuery()
4949
const { data: members } = useOrganizationMembersQuery({ slug })
@@ -186,47 +186,54 @@ export const MemberActions = ({ member }: MemberActionsProps) => {
186186
icon={<MoreVertical />}
187187
/>
188188
</DropdownMenuTrigger>
189-
<DropdownMenuContent side="bottom" align="end" className="w-52">
189+
<DropdownMenuContent side="bottom" align="end" className="w-40">
190190
<>
191191
{isPendingInviteAcceptance ? (
192192
<>
193-
{canRevokeInvite && (
194-
<DropdownMenuItem onClick={() => handleRevokeInvitation(member)}>
195-
<div className="flex flex-col">
196-
<p>Cancel invitation</p>
197-
<p className="text-foreground-lighter">Revoke this invitation.</p>
198-
</div>
199-
</DropdownMenuItem>
200-
)}
201-
{canResendInvite && (
202-
<>
203-
<DropdownMenuSeparator />
204-
<DropdownMenuItem onClick={() => handleResendInvite(member)}>
205-
<div className="flex flex-col">
206-
<p>Resend invitation</p>
207-
<p className="text-foreground-lighter">Invites expire after 24hrs.</p>
208-
</div>
209-
</DropdownMenuItem>
210-
</>
211-
)}
193+
<DropdownMenuItemTooltip
194+
className="gap-x-2"
195+
disabled={!canRevokeInvite}
196+
onClick={() => handleRevokeInvitation(member)}
197+
tooltip={{
198+
content: {
199+
side: 'left',
200+
text: 'Additional permissions required to cancel invitation',
201+
},
202+
}}
203+
>
204+
<p>Cancel invitation</p>
205+
</DropdownMenuItemTooltip>
206+
<DropdownMenuSeparator />
207+
<DropdownMenuItemTooltip
208+
className="gap-x-2"
209+
disabled={!canResendInvite}
210+
onClick={() => handleResendInvite(member)}
211+
tooltip={{
212+
content: {
213+
side: 'left',
214+
text: 'Additional permissions required to resend invitation',
215+
},
216+
}}
217+
>
218+
<p>Resend invitation</p>
219+
</DropdownMenuItemTooltip>
212220
</>
213221
) : (
214222
organizationMembersDeletionEnabled && (
215-
<DropdownMenuItem
216-
className="space-x-2 items-start"
223+
<DropdownMenuItemTooltip
224+
className="gap-x-2"
217225
disabled={!canRemoveMember}
218-
onClick={() => {
219-
setIsDeleteModalOpen(true)
226+
onClick={() => setIsDeleteModalOpen(true)}
227+
tooltip={{
228+
content: {
229+
side: 'left',
230+
text: 'Additional permissions required to remove member',
231+
},
220232
}}
221233
>
222-
<Trash size={16} />
223-
<div className="flex flex-col">
224-
<p>Remove member</p>
225-
{!canRemoveMember && (
226-
<p className="text-foreground-lighter">Additional permissions required</p>
227-
)}
228-
</div>
229-
</DropdownMenuItem>
234+
<Trash size={12} />
235+
<p>Remove member</p>
236+
</DropdownMenuItemTooltip>
230237
)
231238
)}
232239
</>

0 commit comments

Comments
 (0)