diff --git a/apps/web/src/app/admin-console/organizations/collections/vault.component.ts b/apps/web/src/app/admin-console/organizations/collections/vault.component.ts index 69bcd22dde1..9035402151f 100644 --- a/apps/web/src/app/admin-console/organizations/collections/vault.component.ts +++ b/apps/web/src/app/admin-console/organizations/collections/vault.component.ts @@ -125,6 +125,7 @@ import { VaultFilter } from "../../../vault/individual-vault/vault-filter/shared import { AdminConsoleCipherFormConfigService } from "../../../vault/org-vault/services/admin-console-cipher-form-config.service"; import { GroupApiService, GroupView } from "../core"; import { openEntityEventsDialog } from "../manage/entity-events.component"; +import { CollectionPermission } from "../shared/components/access-selector"; import { CollectionDialogAction, CollectionDialogTabType, @@ -879,6 +880,7 @@ export class vNextVaultComponent implements OnInit, OnDestroy { event.item as CollectionAdminView, CollectionDialogTabType.Access, event.readonly, + event.initialPermission, ); break; case "bulkEditCollectionAccess": @@ -1372,6 +1374,7 @@ export class vNextVaultComponent implements OnInit, OnDestroy { c: CollectionAdminView, tab: CollectionDialogTabType, readonly: boolean, + initialPermission?: CollectionPermission, ): Promise { const organization = await firstValueFrom(this.organization$); const dialog = openCollectionDialog(this.dialogService, { @@ -1383,6 +1386,7 @@ export class vNextVaultComponent implements OnInit, OnDestroy { isAddAccessCollection: c.unmanaged, limitNestedCollections: !organization.canEditAnyCollection, isAdminConsoleActive: true, + initialPermission, }, }); diff --git a/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.component.ts b/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.component.ts index 366df34b2b8..43843314ce5 100644 --- a/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.component.ts +++ b/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.component.ts @@ -126,7 +126,6 @@ export class AccessSelectorComponent implements ControlValueAccessor, OnInit, On protected itemType = AccessItemType; protected permissionList: Permission[]; - protected initialPermission = CollectionPermission.View; /** * When disabled, the access selector will make the assumption that a readonly state is desired. @@ -208,6 +207,12 @@ export class AccessSelectorComponent implements ControlValueAccessor, OnInit, On */ @Input() hideMultiSelect = false; + /** + * The initial permission that will be selected in the dialog, defaults to View. + */ + @Input() + protected initialPermission: CollectionPermission = CollectionPermission.View; + constructor( private readonly formBuilder: FormBuilder, private readonly i18nService: I18nService, diff --git a/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.html b/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.html index dec257b3741..e509692aba7 100644 --- a/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.html +++ b/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.html @@ -103,6 +103,7 @@ [selectorLabelText]="'selectGroupsAndMembers' | i18n" [selectorHelpText]="'userPermissionOverrideHelperDesc' | i18n" [emptySelectionText]="'noMembersOrGroupsAdded' | i18n" + [initialPermission]="initialPermission" > - +
+ + @if (showAddAccess) { + + } +
{ protected RowHeightClass = RowHeightClass; protected Unassigned = "unassigned"; + protected CollectionPermission = CollectionPermission; @Input() disabled: boolean; @Input() collection: CollectionView; @@ -102,6 +104,15 @@ export class VaultCollectionRowComponent { this.onEvent.next({ type: "viewCollectionAccess", item: this.collection, readonly: readonly }); } + protected addAccess(initialPermission: CollectionPermission) { + this.onEvent.next({ + type: "viewCollectionAccess", + item: this.collection, + readonly: false, + initialPermission, + }); + } + protected deleteCollection() { this.onEvent.next({ type: "delete", items: [{ collection: this.collection }] }); } diff --git a/apps/web/src/app/vault/components/vault-items/vault-item-event.ts b/apps/web/src/app/vault/components/vault-items/vault-item-event.ts index 130f86697c7..6d84ed5cde1 100644 --- a/apps/web/src/app/vault/components/vault-items/vault-item-event.ts +++ b/apps/web/src/app/vault/components/vault-items/vault-item-event.ts @@ -1,12 +1,18 @@ import { CollectionView } from "@bitwarden/admin-console/common"; import { CipherViewLike } from "@bitwarden/common/vault/utils/cipher-view-like-utils"; +import { CollectionPermission } from "@bitwarden/web-vault/app/admin-console/organizations/shared/components/access-selector"; import { VaultItem } from "./vault-item"; export type VaultItemEvent = | { type: "viewAttachments"; item: C } | { type: "bulkEditCollectionAccess"; items: CollectionView[] } - | { type: "viewCollectionAccess"; item: CollectionView; readonly: boolean } + | { + type: "viewCollectionAccess"; + item: CollectionView; + readonly: boolean; + initialPermission?: CollectionPermission; + } | { type: "viewEvents"; item: C } | { type: "editCollection"; item: CollectionView; readonly: boolean } | { type: "clone"; item: C }