1
0
mirror of https://github.com/bitwarden/jslib synced 2025-12-28 06:03:14 +00:00

[feature] Allow for top level groupings to be collapsed (#712)

This commit is contained in:
Addison Beck
2022-03-09 09:14:12 -05:00
committed by GitHub
parent 601e0a4956
commit 284cd196ab

View File

@@ -4,10 +4,15 @@ import { CollectionService } from "jslib-common/abstractions/collection.service"
import { FolderService } from "jslib-common/abstractions/folder.service";
import { StateService } from "jslib-common/abstractions/state.service";
import { CipherType } from "jslib-common/enums/cipherType";
import { TreeNode } from "jslib-common/models/domain/treeNode";
import { ITreeNodeObject, TreeNode } from "jslib-common/models/domain/treeNode";
import { CollectionView } from "jslib-common/models/view/collectionView";
import { FolderView } from "jslib-common/models/view/folderView";
export type TopLevelGroupingId = "vaults" | "types" | "collections" | "folders";
export class TopLevelGroupingView implements ITreeNodeObject {
id: TopLevelGroupingId;
name: string; // localizationString
}
@Directive()
export class GroupingsComponent {
@Input() showFolders = true;
@@ -38,6 +43,26 @@ export class GroupingsComponent {
selectedFolderId: string = null;
selectedCollectionId: string = null;
readonly vaultsGrouping: TopLevelGroupingView = {
id: "vaults",
name: "allVaults",
};
readonly typesGrouping: TopLevelGroupingView = {
id: "types",
name: "types",
};
readonly collectionsGrouping: TopLevelGroupingView = {
id: "collections",
name: "collections",
};
readonly foldersGrouping: TopLevelGroupingView = {
id: "folders",
name: "folders",
};
private collapsedGroupings: Set<string>;
constructor(
@@ -138,12 +163,12 @@ export class GroupingsComponent {
this.selectedCollectionId = null;
}
async collapse(grouping: FolderView | CollectionView, idPrefix = "") {
if (grouping.id == null) {
async collapse(node: ITreeNodeObject, idPrefix = "") {
if (node.id == null) {
return;
}
const id = idPrefix + grouping.id;
if (this.isCollapsed(grouping, idPrefix)) {
const id = idPrefix + node.id;
if (this.isCollapsed(node, idPrefix)) {
this.collapsedGroupings.delete(id);
} else {
this.collapsedGroupings.add(id);
@@ -151,7 +176,7 @@ export class GroupingsComponent {
await this.stateService.setCollapsedGroupings(Array.from(this.collapsedGroupings));
}
isCollapsed(grouping: FolderView | CollectionView, idPrefix = "") {
return this.collapsedGroupings.has(idPrefix + grouping.id);
isCollapsed(node: ITreeNodeObject, idPrefix = "") {
return this.collapsedGroupings.has(idPrefix + node.id);
}
}