Skip to content

Commit 6f08d5d

Browse files
Always update LocalStorage state (#1282)
1 parent 3279252 commit 6f08d5d

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

packages/firestore/src/local/shared_client_state.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ export interface SharedClientState {
190190
interface MutationMetadataSchema {
191191
state: MutationBatchState;
192192
error?: { code: string; message: string }; // Only set when state === 'rejected'
193+
updateTimeMs: number;
193194
}
194195

195196
/**
@@ -260,7 +261,8 @@ export class MutationMetadata {
260261

261262
toWebStorageJSON(): string {
262263
const batchMetadata: MutationMetadataSchema = {
263-
state: this.state
264+
state: this.state,
265+
updateTimeMs: Date.now() // Modify the existing value to trigger update.
264266
};
265267

266268
if (this.error) {
@@ -281,6 +283,7 @@ export class MutationMetadata {
281283
interface QueryTargetStateSchema {
282284
state: QueryTargetState;
283285
error?: { code: string; message: string }; // Only set when state === 'rejected'
286+
updateTimeMs: number;
284287
}
285288

286289
/**
@@ -348,7 +351,8 @@ export class QueryTargetMetadata {
348351

349352
toWebStorageJSON(): string {
350353
const targetState: QueryTargetStateSchema = {
351-
state: this.state
354+
state: this.state,
355+
updateTimeMs: Date.now() // Modify the existing value to trigger update.
352356
};
353357

354358
if (this.error) {
@@ -369,6 +373,7 @@ export class QueryTargetMetadata {
369373
*/
370374
interface ClientStateSchema {
371375
activeTargetIds: number[];
376+
updateTimeMs: number;
372377
}
373378

374379
/**
@@ -503,7 +508,8 @@ export class LocalClientState implements ClientState {
503508
*/
504509
toWebStorageJSON(): string {
505510
const data: ClientStateSchema = {
506-
activeTargetIds: this.activeTargetIds.toArray()
511+
activeTargetIds: this.activeTargetIds.toArray(),
512+
updateTimeMs: Date.now() // Modify the existing value to trigger update.
507513
};
508514
return JSON.stringify(data);
509515
}

packages/firestore/test/unit/local/web_storage_shared_client_state.test.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,10 @@ describe('WebStorageSharedClientState', () => {
232232
)!
233233
);
234234

235-
expect(Object.keys(actual)).to.have.members(['activeTargetIds']);
235+
expect(Object.keys(actual)).to.have.members([
236+
'activeTargetIds',
237+
'updateTimeMs'
238+
]);
236239
expect(actual.activeTargetIds)
237240
.to.be.an('array')
238241
.and.have.members(activeTargetIds);
@@ -250,7 +253,7 @@ describe('WebStorageSharedClientState', () => {
250253

251254
expect(actual.state).to.equal(mutationBatchState);
252255

253-
const expectedMembers = ['state'];
256+
const expectedMembers = ['state', 'updateTimeMs'];
254257

255258
if (mutationBatchState === 'rejected') {
256259
expectedMembers.push('error');
@@ -304,7 +307,7 @@ describe('WebStorageSharedClientState', () => {
304307
const actual = JSON.parse(webStorage.getItem(targetKey(targetId))!);
305308
expect(actual.state).to.equal(queryTargetState);
306309

307-
const expectedMembers = ['state'];
310+
const expectedMembers = ['state', 'updateTimeMs'];
308311
if (queryTargetState === 'rejected') {
309312
expectedMembers.push('error');
310313
expect(actual.error.code).to.equal(err!.code);

0 commit comments

Comments
 (0)