From d82019b901288ca289c705bcd0cb1e7fdd645df2 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 19 Dec 2022 15:30:54 +0700 Subject: [PATCH] Fixes based on comments --- .../Organization/TeamSettings/MembersView.tsx | 11 ++--- .../TeamSettings/TeamSettings.tsx | 42 ++++++++++++++----- studio/stores/UiStore.ts | 16 +++---- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx b/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx index 57dfe7b9e20..42fab599ac0 100644 --- a/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx +++ b/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx @@ -95,6 +95,7 @@ const MembersView = () => { const memberIsPendingInvite = !!x.invited_id const canRemoveRole = rolesRemovable.includes(memberRoleId) const disableRoleEdit = !canRemoveRole || memberIsUser || memberIsPendingInvite + const isEmailUser = x.username === x.primary_email const validateSelectedRoleToChange = (roleId: any) => { if (!role || role.id === roleId) return @@ -126,17 +127,17 @@ const MembersView = () => { - ) : !x?.username?.includes('@') ? ( + ) : isEmailUser ? ( +
+ +
+ ) : ( - ) : ( -
- -
)}
diff --git a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx index bf3d5ed1392..67e07afe918 100644 --- a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx +++ b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx @@ -1,6 +1,7 @@ import { useState, useContext } from 'react' import { observer } from 'mobx-react-lite' import { Button, Input, IconSearch } from 'ui' +import * as Tooltip from '@radix-ui/react-tooltip' import { useStore } from 'hooks' import { post } from 'lib/common/fetch' @@ -24,10 +25,7 @@ const TeamSettings = observer(() => { const [isLeaving, setIsLeaving] = useState(false) const canAddMembers = rolesAddable.length > 0 - const canLeave = (isOwner && ui.isOwnerAndCanLeaveOrg(members)) || !isOwner - - console.log(rolesAddable) - console.log(PageState) + const canLeave = !isOwner || ui.isOwnerAndCanLeaveOrg(members) function onFilterMemberChange(e: any) { PageState.membersFilterString = e.target.value @@ -82,13 +80,35 @@ const TeamSettings = observer(() => { />
)} - {canLeave && ( -
- -
- )} +
+ + + + + {!canLeave && ( + + +
+ + An organization requires at least 1 owner + +
+
+ )} +
+
diff --git a/studio/stores/UiStore.ts b/studio/stores/UiStore.ts index bddde29b6b6..b5191207285 100644 --- a/studio/stores/UiStore.ts +++ b/studio/stores/UiStore.ts @@ -36,7 +36,7 @@ export interface IUiStore { setNotification: (notification: Notification) => string setProfile: (value?: User) => void setPermissions: (permissions?: Permission[]) => void - isOwnerAndCanLeaveOrg: (members: Member[]) => void + isOwnerAndCanLeaveOrg: (members: Member[]) => boolean } export default class UiStore implements IUiStore { rootStore: IRootStore @@ -170,27 +170,21 @@ export default class UiStore implements IUiStore { } /* - * Check wether the owner is allowed to leave a project + * Check whether the owner is allowed to leave a project * the conditions for this is that they are an owner, and there is also 1 other owner in the org. */ isOwnerAndCanLeaveOrg(members: Member[]) { const selectedOrg = this.selectedOrganization + if (!selectedOrg?.is_owner) return false const roles: { roles: Role[] } = useOrganizationRoles(this.selectedOrganization?.slug) const membersWhoAreOwners = members.filter((member) => { const [memberRoleId] = member.role_ids ?? [] const role = (roles.roles || []).find((role: Role) => role.id === memberRoleId) - // dangerous use of string here - // to do, refactor so that changing the role name does not fail this check - // if role name does change, then user will simply not be able to leave project as a 'owner' regardless - return role && role.name === 'Owner' && !member.invited_at + return role?.name === 'Owner' && !member.invited_at }) - console.log('membersWhoAreOwners', membersWhoAreOwners) - - return selectedOrg?.is_owner && membersWhoAreOwners && membersWhoAreOwners.length > 1 - ? true - : false + return membersWhoAreOwners.length > 1 } }