mirror of
https://github.com/hcengineering/platform.git
synced 2026-09-08 18:57:42 +02:00
EZQMS-729: Restrict spaces operations (#5500)
This commit is contained in:
@@ -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} />
|
||||
|
||||
Reference in New Issue
Block a user