1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-20 11:24:07 +00:00

Merge branch 'main' into innovation/opaque

This commit is contained in:
Jared Snider
2025-03-18 14:37:20 -04:00
committed by GitHub
6 changed files with 88 additions and 37 deletions

View File

@@ -1,7 +1,16 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { filter, firstValueFrom, merge, Observable, ReplaySubject, scan, startWith } from "rxjs";
import { pairwise } from "rxjs/operators";
import {
filter,
firstValueFrom,
merge,
Observable,
ReplaySubject,
scan,
startWith,
timer,
} from "rxjs";
import { map, pairwise, share, takeUntil } from "rxjs/operators";
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
import { AccountInfo, AccountService } from "@bitwarden/common/auth/abstractions/account.service";
@@ -146,7 +155,19 @@ export default class AutofillService implements AutofillServiceInterface {
pageDetailsFallback$.next([]);
}
return merge(pageDetailsFromTab$, pageDetailsFallback$);
// Share the pageDetailsFromTab$ observable so that multiple subscribers don't trigger multiple executions.
const sharedPageDetailsFromTab$ = pageDetailsFromTab$.pipe(share());
// Create a timeout observable that emits an empty array if pageDetailsFromTab$ hasn't emitted within 1 second.
const pageDetailsTimeout$ = timer(1000).pipe(
map(() => []),
takeUntil(sharedPageDetailsFromTab$),
);
// Merge the responses so that if pageDetailsFromTab$ emits, that value is used.
// Otherwise, if it doesn't emit in time, the timeout observable emits an empty array.
// Also, pageDetailsFallback$ will emit in error cases.
return merge(sharedPageDetailsFromTab$, pageDetailsFallback$, pageDetailsTimeout$);
}
/**

View File

@@ -68,7 +68,7 @@
"chalk": "4.1.2",
"commander": "11.1.0",
"form-data": "4.0.1",
"https-proxy-agent": "7.0.5",
"https-proxy-agent": "7.0.6",
"inquirer": "8.2.6",
"jsdom": "26.0.0",
"jszip": "3.10.1",

View File

@@ -493,12 +493,14 @@ export class VaultComponent implements OnInit, OnDestroy {
}
async savedCipher(cipher: CipherView) {
this.cipherId = cipher.id;
this.cipherId = null;
this.action = "view";
await this.vaultItemsComponent.refresh();
this.cipherId = cipher.id;
await this.cipherService.clearCache(this.activeUserId);
await this.viewComponent.load();
await this.vaultItemsComponent.load(this.activeFilter.buildFilter());
this.go();
await this.vaultItemsComponent.refresh();
}
async deletedCipher(cipher: CipherView) {
@@ -572,6 +574,8 @@ export class VaultComponent implements OnInit, OnDestroy {
// eslint-disable-next-line @typescript-eslint/no-floating-promises
this.viewCipher(cipher);
await this.vaultItemsComponent.refresh();
await this.cipherService.clearCache(this.activeUserId);
await this.vaultItemsComponent.load(this.activeFilter.buildFilter());
});
// eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe
this.modal.onClosed.subscribe(async () => {

View File

@@ -1,6 +1,6 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core";
import { Directive, EventEmitter, Input, Output } from "@angular/core";
import { CollectionView } from "@bitwarden/admin-console/common";
import { ITreeNodeObject } from "@bitwarden/common/vault/models/domain/tree-node";
@@ -10,7 +10,7 @@ import { TopLevelTreeNode } from "../models/top-level-tree-node.model";
import { VaultFilter } from "../models/vault-filter.model";
@Directive()
export class CollectionFilterComponent implements OnInit {
export class CollectionFilterComponent {
@Input() hide = false;
@Input() collapsedFilterNodes: Set<string>;
@Input() collectionNodes: DynamicTreeNode<CollectionView>;
@@ -51,13 +51,4 @@ export class CollectionFilterComponent implements OnInit {
async toggleCollapse(node: ITreeNodeObject) {
this.onNodeCollapseStateChange.emit(node);
}
ngOnInit() {
// Populate the set with all node IDs so all nodes are collapsed initially.
if (this.collectionNodes?.fullList) {
this.collectionNodes.fullList.forEach((node) => {
this.collapsedFilterNodes.add(node.id);
});
}
}
}

73
package-lock.json generated
View File

@@ -43,7 +43,7 @@
"commander": "11.1.0",
"core-js": "3.40.0",
"form-data": "4.0.1",
"https-proxy-agent": "7.0.5",
"https-proxy-agent": "7.0.6",
"inquirer": "8.2.6",
"jquery": "3.7.1",
"jsdom": "26.0.0",
@@ -204,7 +204,7 @@
"chalk": "4.1.2",
"commander": "11.1.0",
"form-data": "4.0.1",
"https-proxy-agent": "7.0.5",
"https-proxy-agent": "7.0.6",
"inquirer": "8.2.6",
"jsdom": "26.0.0",
"jszip": "3.10.1",
@@ -759,6 +759,16 @@
"@types/send": "*"
}
},
"node_modules/@angular-devkit/build-angular/node_modules/agent-base": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
"integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 14"
}
},
"node_modules/@angular-devkit/build-angular/node_modules/babel-loader": {
"version": "9.1.3",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
@@ -880,6 +890,20 @@
"node": ">= 6"
}
},
"node_modules/@angular-devkit/build-angular/node_modules/https-proxy-agent": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
"integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"dev": true,
"license": "MIT",
"dependencies": {
"agent-base": "^7.0.2",
"debug": "4"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/@angular-devkit/build-angular/node_modules/immutable": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
@@ -2090,6 +2114,16 @@
"semver": "bin/semver.js"
}
},
"node_modules/@angular/build/node_modules/agent-base": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
"integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 14"
}
},
"node_modules/@angular/build/node_modules/chokidar": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -2135,6 +2169,20 @@
"node": ">= 6"
}
},
"node_modules/@angular/build/node_modules/https-proxy-agent": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
"integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"dev": true,
"license": "MIT",
"dependencies": {
"agent-base": "^7.0.2",
"debug": "4"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/@angular/build/node_modules/immutable": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
@@ -21272,12 +21320,12 @@
}
},
"node_modules/https-proxy-agent": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
"integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
"integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"license": "MIT",
"dependencies": {
"agent-base": "^7.0.2",
"agent-base": "^7.1.2",
"debug": "4"
},
"engines": {
@@ -24154,19 +24202,6 @@
"node": ">= 14"
}
},
"node_modules/jsdom/node_modules/https-proxy-agent": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
"integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"license": "MIT",
"dependencies": {
"agent-base": "^7.1.2",
"debug": "4"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/jsdom/node_modules/tough-cookie": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.1.tgz",

View File

@@ -173,7 +173,7 @@
"commander": "11.1.0",
"core-js": "3.40.0",
"form-data": "4.0.1",
"https-proxy-agent": "7.0.5",
"https-proxy-agent": "7.0.6",
"inquirer": "8.2.6",
"jquery": "3.7.1",
"jsdom": "26.0.0",