From 353f62bf690b0ed1292f3010a53106604092501e Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Wed, 3 Oct 2018 14:10:00 -0700 Subject: [PATCH 1/2] Always update LocalStorage state --- packages/firestore/src/local/shared_client_state.ts | 12 +++++++++--- .../local/web_storage_shared_client_state.test.ts | 9 ++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/firestore/src/local/shared_client_state.ts b/packages/firestore/src/local/shared_client_state.ts index b794d83e520..6d536762439 100644 --- a/packages/firestore/src/local/shared_client_state.ts +++ b/packages/firestore/src/local/shared_client_state.ts @@ -190,6 +190,7 @@ export interface SharedClientState { interface MutationMetadataSchema { state: MutationBatchState; error?: { code: string; message: string }; // Only set when state === 'rejected' + updateTimeMs: number; } /** @@ -260,7 +261,8 @@ export class MutationMetadata { toWebStorageJSON(): string { const batchMetadata: MutationMetadataSchema = { - state: this.state + state: this.state, + updateTimeMs: Date.now() }; if (this.error) { @@ -281,6 +283,7 @@ export class MutationMetadata { interface QueryTargetStateSchema { state: QueryTargetState; error?: { code: string; message: string }; // Only set when state === 'rejected' + updateTimeMs: number; } /** @@ -348,7 +351,8 @@ export class QueryTargetMetadata { toWebStorageJSON(): string { const targetState: QueryTargetStateSchema = { - state: this.state + state: this.state, + updateTimeMs: Date.now() }; if (this.error) { @@ -369,6 +373,7 @@ export class QueryTargetMetadata { */ interface ClientStateSchema { activeTargetIds: number[]; + updateTimeMs: number; } /** @@ -503,7 +508,8 @@ export class LocalClientState implements ClientState { */ toWebStorageJSON(): string { const data: ClientStateSchema = { - activeTargetIds: this.activeTargetIds.toArray() + activeTargetIds: this.activeTargetIds.toArray(), + updateTimeMs: Date.now() }; return JSON.stringify(data); } diff --git a/packages/firestore/test/unit/local/web_storage_shared_client_state.test.ts b/packages/firestore/test/unit/local/web_storage_shared_client_state.test.ts index dde9ebbfdea..2e15b358c71 100644 --- a/packages/firestore/test/unit/local/web_storage_shared_client_state.test.ts +++ b/packages/firestore/test/unit/local/web_storage_shared_client_state.test.ts @@ -232,7 +232,10 @@ describe('WebStorageSharedClientState', () => { )! ); - expect(Object.keys(actual)).to.have.members(['activeTargetIds']); + expect(Object.keys(actual)).to.have.members([ + 'activeTargetIds', + 'updateTimeMs' + ]); expect(actual.activeTargetIds) .to.be.an('array') .and.have.members(activeTargetIds); @@ -250,7 +253,7 @@ describe('WebStorageSharedClientState', () => { expect(actual.state).to.equal(mutationBatchState); - const expectedMembers = ['state']; + const expectedMembers = ['state', 'updateTimeMs']; if (mutationBatchState === 'rejected') { expectedMembers.push('error'); @@ -304,7 +307,7 @@ describe('WebStorageSharedClientState', () => { const actual = JSON.parse(webStorage.getItem(targetKey(targetId))!); expect(actual.state).to.equal(queryTargetState); - const expectedMembers = ['state']; + const expectedMembers = ['state', 'updateTimeMs']; if (queryTargetState === 'rejected') { expectedMembers.push('error'); expect(actual.error.code).to.equal(err!.code); From 6f52cfb4c59fc266b1767c10ec1304fec60d46ba Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Wed, 3 Oct 2018 14:40:16 -0700 Subject: [PATCH 2/2] Add comment --- packages/firestore/src/local/shared_client_state.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/firestore/src/local/shared_client_state.ts b/packages/firestore/src/local/shared_client_state.ts index 6d536762439..dc5b93d1883 100644 --- a/packages/firestore/src/local/shared_client_state.ts +++ b/packages/firestore/src/local/shared_client_state.ts @@ -262,7 +262,7 @@ export class MutationMetadata { toWebStorageJSON(): string { const batchMetadata: MutationMetadataSchema = { state: this.state, - updateTimeMs: Date.now() + updateTimeMs: Date.now() // Modify the existing value to trigger update. }; if (this.error) { @@ -352,7 +352,7 @@ export class QueryTargetMetadata { toWebStorageJSON(): string { const targetState: QueryTargetStateSchema = { state: this.state, - updateTimeMs: Date.now() + updateTimeMs: Date.now() // Modify the existing value to trigger update. }; if (this.error) { @@ -509,7 +509,7 @@ export class LocalClientState implements ClientState { toWebStorageJSON(): string { const data: ClientStateSchema = { activeTargetIds: this.activeTargetIds.toArray(), - updateTimeMs: Date.now() + updateTimeMs: Date.now() // Modify the existing value to trigger update. }; return JSON.stringify(data); }