mirror of
https://github.com/hcengineering/platform.git
synced 2026-09-10 11:47:42 +02:00
EZQMS-729: Restrict spaces operations (#5500)
This commit is contained in:
@@ -69,6 +69,8 @@
|
||||
let defaultAssignee: Ref<Employee> | null | undefined = project?.defaultAssignee ?? null
|
||||
let members: Ref<Account>[] =
|
||||
project?.members !== undefined ? hierarchy.clone(project.members) : [getCurrentAccount()._id]
|
||||
let owners: Ref<Account>[] =
|
||||
project?.owners !== undefined ? hierarchy.clone(project.owners) : [getCurrentAccount()._id]
|
||||
let projectsIdentifiers = new Set<string>()
|
||||
let isSaving = false
|
||||
let defaultStatus: Ref<IssueStatus> | undefined = project?.defaultIssueStatus
|
||||
@@ -96,6 +98,7 @@
|
||||
description,
|
||||
private: isPrivate,
|
||||
members,
|
||||
owners,
|
||||
archived: false,
|
||||
identifier: identifier.toUpperCase(),
|
||||
sequence: 0,
|
||||
@@ -162,6 +165,16 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
if (projectData.owners?.length !== project?.owners?.length) {
|
||||
update.owners = projectData.owners
|
||||
} else {
|
||||
for (const owner of projectData.owners || []) {
|
||||
if (project.owners?.findIndex((p) => p === owner) === -1) {
|
||||
update.owners = projectData.owners
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(update).length > 0) {
|
||||
isSaving = true
|
||||
@@ -275,6 +288,13 @@
|
||||
rolesQuery.unsubscribe()
|
||||
}
|
||||
|
||||
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)
|
||||
@@ -297,16 +317,21 @@
|
||||
|
||||
rolesAssignment[roleId] = newMembers
|
||||
}
|
||||
|
||||
$: canSave =
|
||||
name.trim().length > 0 &&
|
||||
identifier.trim().length > 0 &&
|
||||
!projectsIdentifiers.has(identifier.toUpperCase()) &&
|
||||
!(members.length === 0 && isPrivate) &&
|
||||
owners.length > 0 &&
|
||||
(!isPrivate || owners.some((o) => members.includes(o)))
|
||||
</script>
|
||||
|
||||
<Card
|
||||
label={isNew ? tracker.string.NewProject : tracker.string.EditProject}
|
||||
okLabel={isNew ? presentation.string.Create : presentation.string.Save}
|
||||
okAction={handleSave}
|
||||
canSave={name.trim().length > 0 &&
|
||||
identifier.trim().length > 0 &&
|
||||
!projectsIdentifiers.has(identifier.toUpperCase()) &&
|
||||
!(members.length === 0 && isPrivate)}
|
||||
{canSave}
|
||||
accentHeader
|
||||
width={'medium'}
|
||||
gap={'gapV-6'}
|
||||
@@ -409,14 +434,6 @@
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="antiGrid-row">
|
||||
<div class="antiGrid-row__header withDesciption">
|
||||
<Label label={presentation.string.MakePrivate} />
|
||||
<span><Label label={presentation.string.MakePrivateDescription} /></span>
|
||||
</div>
|
||||
<Toggle bind:on={isPrivate} disabled={!isPrivate && members.length === 0} />
|
||||
</div>
|
||||
|
||||
<div class="antiGrid-row">
|
||||
<div class="antiGrid-row__header">
|
||||
<Label label={tracker.string.DefaultAssignee} />
|
||||
@@ -448,6 +465,27 @@
|
||||
{/if}
|
||||
</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} />
|
||||
<span><Label label={presentation.string.MakePrivateDescription} /></span>
|
||||
</div>
|
||||
<Toggle bind:on={isPrivate} disabled={!isPrivate && members.length === 0} />
|
||||
</div>
|
||||
|
||||
<div class="antiGrid-row">
|
||||
<div class="antiGrid-row__header">
|
||||
<Label label={tracker.string.Members} />
|
||||
|
||||
Reference in New Issue
Block a user