1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-15 15:53:27 +00:00

Ps/run-foreground-derived-state-in-zone (#7861)

* Sync derived state through memory storage

* Run foreground derived state in NgZone

* fix tests
This commit is contained in:
Matt Gibson
2024-02-08 14:04:38 -05:00
committed by GitHub
parent 304c492f24
commit b0edcb81af
8 changed files with 153 additions and 91 deletions

View File

@@ -73,12 +73,12 @@ describe("DefaultDerivedState", () => {
await awaitAsync();
expect(memoryStorage.internalStore[deriveDefinition.buildCacheKey()]).toEqual(
new Date(dateString),
derivedValue(new Date(dateString)),
);
const calls = memoryStorage.mock.save.mock.calls;
expect(calls.length).toBe(1);
expect(calls[0][0]).toBe(deriveDefinition.buildCacheKey());
expect(calls[0][1]).toEqual(new Date(dateString));
expect(calls[0][1]).toEqual(derivedValue(new Date(dateString)));
});
describe("forceValue", () => {
@@ -94,7 +94,9 @@ describe("DefaultDerivedState", () => {
it("should store the forced value", async () => {
await sut.forceValue(forced);
expect(memoryStorage.internalStore[deriveDefinition.buildCacheKey()]).toEqual(forced);
expect(memoryStorage.internalStore[deriveDefinition.buildCacheKey()]).toEqual(
derivedValue(forced),
);
});
});
@@ -107,7 +109,9 @@ describe("DefaultDerivedState", () => {
it("should store the forced value", async () => {
await sut.forceValue(forced);
expect(memoryStorage.internalStore[deriveDefinition.buildCacheKey()]).toEqual(forced);
expect(memoryStorage.internalStore[deriveDefinition.buildCacheKey()]).toEqual(
derivedValue(forced),
);
});
it("should force the value", async () => {
@@ -150,7 +154,7 @@ describe("DefaultDerivedState", () => {
await awaitAsync();
expect(memoryStorage.internalStore[deriveDefinition.buildCacheKey()]).toEqual(
new Date(newDate),
derivedValue(new Date(newDate)),
);
subscription.unsubscribe();
@@ -168,7 +172,7 @@ describe("DefaultDerivedState", () => {
await awaitAsync();
expect(memoryStorage.internalStore[deriveDefinition.buildCacheKey()]).toEqual(
new Date(newDate),
derivedValue(new Date(newDate)),
);
subscription.unsubscribe();
@@ -176,7 +180,7 @@ describe("DefaultDerivedState", () => {
await awaitAsync(cleanupDelayMs * 2);
expect(memoryStorage.internalStore[deriveDefinition.buildCacheKey()]).toEqual(
new Date(newDate),
derivedValue(new Date(newDate)),
);
});
@@ -256,3 +260,7 @@ describe("DefaultDerivedState", () => {
});
});
});
function derivedValue<T>(value: T) {
return { derived: true, value };
}

View File

@@ -34,7 +34,7 @@ export class DefaultDerivedState<TFrom, TTo, TDeps extends DerivedStateDependenc
derivedStateOrPromise = await derivedStateOrPromise;
}
const derivedState = derivedStateOrPromise;
await this.memoryStorage.save(this.storageKey, derivedState);
await this.storeValue(derivedState);
return derivedState;
}),
);
@@ -58,8 +58,12 @@ export class DefaultDerivedState<TFrom, TTo, TDeps extends DerivedStateDependenc
}
async forceValue(value: TTo) {
await this.memoryStorage.save(this.storageKey, value);
await this.storeValue(value);
this.forcedValueSubject.next(value);
return value;
}
private storeValue(value: TTo) {
return this.memoryStorage.save(this.storageKey, { derived: true, value });
}
}