EZQMS-729: Restrict spaces operations (#5500)

This commit is contained in:
Alexey Zinoviev
2024-05-04 20:49:24 +07:00
committed by GitHub
parent ad59463057
commit 4bc1534ee0
57 changed files with 873 additions and 114 deletions
@@ -64,6 +64,8 @@
let isColorSelected = false
let members: Ref<Account>[] =
teamspace?.members !== undefined ? hierarchy.clone(teamspace.members) : [getCurrentAccount()._id]
let owners: Ref<Account>[] =
teamspace?.owners !== undefined ? hierarchy.clone(teamspace.owners) : [getCurrentAccount()._id]
let rolesAssignment: RolesAssignment = {}
$: isNew = teamspace === undefined
@@ -115,6 +117,7 @@
description,
private: isPrivate,
members,
owners,
archived: false,
icon,
color
@@ -153,6 +156,16 @@
}
}
}
if (teamspaceData.owners?.length !== teamspace?.owners?.length) {
update.owners = teamspaceData.owners
} else {
for (const owner of teamspaceData.owners ?? []) {
if (teamspace.owners?.findIndex((p) => p === owner) === -1) {
update.owners = teamspaceData.owners
break
}
}
}
if (Object.keys(update).length > 0) {
await client.update(teamspace, update)
@@ -215,6 +228,13 @@
$: roles = (spaceType?.$lookup?.roles ?? []) as Role[]
function handleOwnersChanged (newOwners: Ref<Account>[]): void {
owners = newOwners
const newMembersSet = new Set([...members, ...newOwners])
members = Array.from(newMembersSet)
}
function handleMembersChanged (newMembers: Ref<Account>[]): void {
// If a member was removed we need to remove it from any roles assignments as well
const newMembersSet = new Set(newMembers)
@@ -237,16 +257,21 @@
rolesAssignment[roleId] = newMembers
}
$: canSave =
name.trim().length > 0 &&
!(members.length === 0 && isPrivate) &&
typeId !== undefined &&
spaceType?.targetClass !== undefined &&
owners.length > 0 &&
(!isPrivate || owners.some((o) => members.includes(o)))
</script>
<Card
label={isNew ? documentRes.string.NewTeamspace : documentRes.string.EditTeamspace}
okLabel={isNew ? presentation.string.Create : presentation.string.Save}
okAction={handleSave}
canSave={name.trim().length > 0 &&
!(members.length === 0 && isPrivate) &&
typeId !== undefined &&
spaceType?.targetClass !== undefined}
{canSave}
accentHeader
width={'medium'}
gap={'gapV-6'}
@@ -324,6 +349,19 @@
/>
</div>
<div class="antiGrid-row">
<div class="antiGrid-row__header">
<Label label={core.string.Owners} />
</div>
<AccountArrayEditor
value={owners}
label={core.string.Owners}
onChange={handleOwnersChanged}
kind={'regular'}
size={'large'}
/>
</div>
<div class="antiGrid-row">
<div class="antiGrid-row__header withDesciption">
<Label label={presentation.string.MakePrivate} />