1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-20 11:24:07 +00:00
Files
browser/apps/browser/src/vault/popup/settings/folders.component.ts

67 lines
2.3 KiB
TypeScript

import { CommonModule } from "@angular/common";
import { Component } from "@angular/core";
import { filter, map, Observable, switchMap } from "rxjs";
import { JslibModule } from "@bitwarden/angular/jslib.module";
import { NoFolders } from "@bitwarden/assets/svg";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { UserId } from "@bitwarden/common/types/guid";
import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction";
import { FolderView } from "@bitwarden/common/vault/models/view/folder.view";
import {
AsyncActionsModule,
ButtonModule,
DialogService,
IconButtonModule,
ItemModule,
NoItemsModule,
} from "@bitwarden/components";
import { AddEditFolderDialogComponent } from "@bitwarden/vault";
import { PopOutComponent } from "../../../platform/popup/components/pop-out.component";
import { PopupHeaderComponent } from "../../../platform/popup/layout/popup-header.component";
import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.component";
// FIXME(https://bitwarden.atlassian.net/browse/CL-764): Migrate to OnPush
// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
@Component({
templateUrl: "./folders.component.html",
imports: [
CommonModule,
JslibModule,
PopOutComponent,
PopupPageComponent,
PopupHeaderComponent,
ItemModule,
NoItemsModule,
IconButtonModule,
ButtonModule,
AsyncActionsModule,
],
})
export class FoldersComponent {
folders$: Observable<FolderView[]>;
NoFoldersIcon = NoFolders;
private activeUserId$ = this.accountService.activeAccount$.pipe(map((a) => a?.id));
constructor(
private folderService: FolderService,
private dialogService: DialogService,
private accountService: AccountService,
) {
this.folders$ = this.activeUserId$.pipe(
filter((userId): userId is UserId => userId !== null),
switchMap((userId) => this.folderService.folderViews$(userId)),
);
}
/** Open the Add/Edit folder dialog */
openAddEditFolderDialog(folder?: FolderView) {
// If a folder is provided, the edit variant should be shown
const editFolderConfig = folder ? { folder } : undefined;
AddEditFolderDialogComponent.open(this.dialogService, { editFolderConfig });
}
}