diff --git a/src/ObjectStateMutations.ts b/src/ObjectStateMutations.ts index a22593d14..3292fb88e 100644 --- a/src/ObjectStateMutations.ts +++ b/src/ObjectStateMutations.ts @@ -191,7 +191,8 @@ export function commitServerChanges( typeof val === 'object' && !Array.isArray(val) && Object.keys(val).length > 0 && - Object.keys(val).some(k => !isNaN(parseInt(k))) + Object.keys(val).some(k => !isNaN(parseInt(k))) && + !['sentPerUTCOffset', 'failedPerUTCOffset'].includes(attr) ) { val = Object.values(val); } diff --git a/src/__tests__/ObjectStateMutations-test.js b/src/__tests__/ObjectStateMutations-test.js index 56fc7640d..b224ef326 100644 --- a/src/__tests__/ObjectStateMutations-test.js +++ b/src/__tests__/ObjectStateMutations-test.js @@ -323,6 +323,24 @@ describe('ObjectStateMutations', () => { expect(objectCache).toEqual({ items: '[{"count":20},{"count":5}]' }); }); + it('can commit json array with PushStatus offset fields', () => { + const serverData = {}; + const objectCache = {}; + ObjectStateMutations.commitServerChanges(serverData, objectCache, { + sentPerUTCOffset: { '1': { count: 20 } }, + failedPerUTCOffset: { '5': { count: 25 } }, + }); + // Should not transform to an array + expect(serverData).toEqual({ + sentPerUTCOffset: { '1': { count: 20 } }, + failedPerUTCOffset: { '5': { count: 25 } }, + }); + expect(objectCache).toEqual({ + sentPerUTCOffset: '{"1":{"count":20}}', + failedPerUTCOffset: '{"5":{"count":25}}', + }); + }); + it('can generate a default state for implementations', () => { expect(ObjectStateMutations.defaultState()).toEqual({ serverData: {},