Skip to content

Commit d14e878

Browse files
committed
Ensure field data is preserved on write
Because we're continuing to store field data that isn't unloaded back into the DOM we must make sure that we preserve the existing data on new writes.
1 parent 676d7b5 commit d14e878

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

src/index.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,18 @@ export function persistResumableFields(id: string, options?: PersistOptions): vo
2424

2525
if (fields.length) {
2626
try {
27-
sessionStorage.setItem(key, JSON.stringify(fields))
27+
const previouslyStoredFieldsJson = sessionStorage.getItem(key)
28+
let allFields: string[][] = fields
29+
30+
if (previouslyStoredFieldsJson !== null) {
31+
const previouslyStoredFields: string[][] = JSON.parse(previouslyStoredFieldsJson)
32+
const fieldsNotReplaced: string[][] = previouslyStoredFields.filter(function (oldField) {
33+
return !allFields.some(field => field[0] === oldField[0])
34+
})
35+
allFields = allFields.concat(fieldsNotReplaced)
36+
}
37+
38+
sessionStorage.setItem(key, JSON.stringify(allFields))
2839
} catch {
2940
// Ignore browser private mode error.
3041
}

test/test.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,22 @@ describe('session-resume', function () {
6767

6868
describe('persistResumableFields', function () {
6969
it('persist fields values to session storage', function () {
70+
sessionStorage.setItem(
71+
'session-resume:test-persist',
72+
JSON.stringify([
73+
['my-first-field', 'old data'],
74+
['non-existant-field', 'test3']
75+
])
76+
)
7077
document.querySelector('#my-first-field').value = 'test1'
7178
document.querySelector('#my-second-field').value = 'test2'
79+
7280
persistResumableFields('test-persist')
7381

7482
assert.deepEqual(JSON.parse(sessionStorage.getItem('session-resume:test-persist')), [
7583
['my-first-field', 'test1'],
76-
['my-second-field', 'test2']
84+
['my-second-field', 'test2'],
85+
['non-existant-field', 'test3']
7786
])
7887
})
7988
})

0 commit comments

Comments
 (0)