mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 17:35:10 +03:00
Extract isOwnerAndCanLeaveOrg into utils file instead of store and refactor
This commit is contained in:
1 parent
d82019b901
commit
4e67e90526
3 files changed
+13
-34
No files matched your search
@@ -8,7 +8,7 @@ import { post } from 'lib/common/fetch'
|
||||
import { API_URL } from 'lib/constants'
|
||||
import InviteMemberButton from './InviteMemberButton'
|
||||
import MembersView from './MembersView'
|
||||
import { getRolesManagementPermissions } from './TeamSettings.utils'
|
||||
import { getRolesManagementPermissions, hasMultipleOwners } from './TeamSettings.utils'
|
||||
import { confirmAlert } from 'components/to-be-cleaned/ModalsDeprecated/ConfirmModal'
|
||||
|
||||
import { PageContext } from 'pages/org/[slug]/settings'
|
||||
@@ -25,7 +25,7 @@ const TeamSettings = observer(() => {
|
||||
const [isLeaving, setIsLeaving] = useState(false)
|
||||
const canAddMembers = rolesAddable.length > 0
|
||||
|
||||
const canLeave = !isOwner || ui.isOwnerAndCanLeaveOrg(members)
|
||||
const canLeave = !isOwner || (isOwner && hasMultipleOwners(members, roles))
|
||||
|
||||
function onFilterMemberChange(e: any) {
|
||||
PageState.membersFilterString = e.target.value
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Role } from 'types'
|
||||
import { Member, Role } from 'types'
|
||||
import { checkPermissions } from 'hooks'
|
||||
import { PermissionAction } from '@supabase/shared-types/out/constants'
|
||||
|
||||
@@ -23,3 +23,12 @@ export const getRolesManagementPermissions = (
|
||||
|
||||
return { rolesAddable, rolesRemovable }
|
||||
}
|
||||
|
||||
export const hasMultipleOwners = (members: Member[], roles: Role[]) => {
|
||||
const membersWhoAreOwners = members.filter((member) => {
|
||||
const [memberRoleId] = member.role_ids ?? []
|
||||
const role = roles.find((role: Role) => role.id === memberRoleId)
|
||||
return role?.name === 'Owner' && !member.invited_at
|
||||
})
|
||||
return membersWhoAreOwners.length > 1
|
||||
}
|
||||
@@ -1,18 +1,8 @@
|
||||
import { uuidv4 } from 'lib/helpers'
|
||||
import { action, makeAutoObservable } from 'mobx'
|
||||
import {
|
||||
Project,
|
||||
Notification,
|
||||
User,
|
||||
Organization,
|
||||
ProjectBase,
|
||||
Permission,
|
||||
Member,
|
||||
Role,
|
||||
} from 'types'
|
||||
import { Project, Notification, User, Organization, ProjectBase, Permission } from 'types'
|
||||
import { IRootStore } from './RootStore'
|
||||
import Telemetry from 'lib/telemetry'
|
||||
import { useOrganizationRoles } from 'hooks'
|
||||
|
||||
export interface IUiStore {
|
||||
language: 'en_US'
|
||||
@@ -36,7 +26,6 @@ export interface IUiStore {
|
||||
setNotification: (notification: Notification) => string
|
||||
setProfile: (value?: User) => void
|
||||
setPermissions: (permissions?: Permission[]) => void
|
||||
isOwnerAndCanLeaveOrg: (members: Member[]) => boolean
|
||||
}
|
||||
export default class UiStore implements IUiStore {
|
||||
rootStore: IRootStore
|
||||
@@ -168,23 +157,4 @@ export default class UiStore implements IUiStore {
|
||||
setPermissions(permissions?: any) {
|
||||
this.permissions = permissions
|
||||
}
|
||||
|
||||
/*
|
||||
* 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)
|
||||
return role?.name === 'Owner' && !member.invited_at
|
||||
})
|
||||
|
||||
return membersWhoAreOwners.length > 1
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user