mirror of
https://github.com/bitwarden/browser
synced 2025-12-10 21:33:27 +00:00
[PM-12030] - add "Edit" and "Delete" options to browser more items menu (#16764)
* add "Edit" and "Delete" options to browser more items menu * remove redundant check
This commit is contained in:
@@ -26,6 +26,11 @@
|
|||||||
<button type="button" bitMenuItem (click)="toggleFavorite()">
|
<button type="button" bitMenuItem (click)="toggleFavorite()">
|
||||||
{{ favoriteText | i18n }}
|
{{ favoriteText | i18n }}
|
||||||
</button>
|
</button>
|
||||||
|
@if (canEdit) {
|
||||||
|
<button type="button" bitMenuItem (click)="edit()">
|
||||||
|
{{ "edit" | i18n }}
|
||||||
|
</button>
|
||||||
|
}
|
||||||
<ng-container *ngIf="canEdit && canViewPassword">
|
<ng-container *ngIf="canEdit && canViewPassword">
|
||||||
<a bitMenuItem (click)="clone()" *ngIf="canClone$ | async">
|
<a bitMenuItem (click)="clone()" *ngIf="canClone$ | async">
|
||||||
{{ "clone" | i18n }}
|
{{ "clone" | i18n }}
|
||||||
@@ -43,5 +48,12 @@
|
|||||||
{{ "archiveVerb" | i18n }}
|
{{ "archiveVerb" | i18n }}
|
||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
|
@if (canDelete$ | async) {
|
||||||
|
<button type="button" bitMenuItem (click)="delete()">
|
||||||
|
<span class="tw-text-danger">
|
||||||
|
{{ "delete" | i18n }}
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
}
|
||||||
</bit-menu>
|
</bit-menu>
|
||||||
</bit-item-action>
|
</bit-item-action>
|
||||||
|
|||||||
@@ -120,6 +120,10 @@ export class ItemMoreOptionsComponent {
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
protected canDelete$ = this._cipher$.pipe(
|
||||||
|
switchMap((cipher) => this.cipherAuthorizationService.canDeleteCipher$(cipher)),
|
||||||
|
);
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private cipherService: CipherService,
|
private cipherService: CipherService,
|
||||||
private passwordRepromptService: PasswordRepromptService,
|
private passwordRepromptService: PasswordRepromptService,
|
||||||
@@ -252,6 +256,37 @@ export class ItemMoreOptionsComponent {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected async edit() {
|
||||||
|
if (this.cipher.reprompt && !(await this.passwordRepromptService.showPasswordPrompt())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.router.navigate(["/edit-cipher"], {
|
||||||
|
queryParams: { cipherId: this.cipher.id, type: CipherViewLikeUtils.getType(this.cipher) },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async delete() {
|
||||||
|
const confirmed = await this.dialogService.openSimpleDialog({
|
||||||
|
title: { key: "deleteItem" },
|
||||||
|
content: { key: "deleteItemConfirmation" },
|
||||||
|
type: "warning",
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!confirmed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
|
||||||
|
|
||||||
|
await this.cipherService.softDeleteWithServer(this.cipher.id as CipherId, activeUserId);
|
||||||
|
|
||||||
|
this.toastService.showToast({
|
||||||
|
variant: "success",
|
||||||
|
message: this.i18nService.t("deletedItem"),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async archive() {
|
async archive() {
|
||||||
const confirmed = await this.dialogService.openSimpleDialog({
|
const confirmed = await this.dialogService.openSimpleDialog({
|
||||||
title: { key: "archiveItem" },
|
title: { key: "archiveItem" },
|
||||||
|
|||||||
Reference in New Issue
Block a user