Skip to content

Commit e0984cd

Browse files
authored
Merge pull request #40 from seanpdoyle/field-storage-filter
Make element filtering configurable
2 parents 9a3eaec + 2709528 commit e0984cd

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

src/index.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
11
// Last submitted HTMLFormElement that will cause a browser navigation.
22
let submittedForm: HTMLFormElement | null = null
33

4-
function shouldResumeField(field: HTMLInputElement | HTMLTextAreaElement): boolean {
5-
return !!field.id && field.value !== field.defaultValue && field.form !== submittedForm
4+
function shouldResumeField(field: HTMLInputElement | HTMLTextAreaElement, filter: StorageFilter): boolean {
5+
return !!field.id && filter(field) && field.form !== submittedForm
66
}
77

8+
function valueIsUnchanged(field: HTMLInputElement | HTMLTextAreaElement): boolean {
9+
return field.value !== field.defaultValue
10+
}
11+
12+
type StorageFilter = (field: HTMLInputElement | HTMLTextAreaElement) => boolean
13+
814
type PersistOptions = {
915
selector?: string
1016
keyPrefix?: string
1117
storage?: Pick<Storage, 'getItem' | 'setItem'>
18+
storageFilter?: StorageFilter
1219
}
1320

1421
// Write all ids and values of the selected fields on the page into sessionStorage.
1522
export function persistResumableFields(id: string, options?: PersistOptions): void {
1623
const selector = options?.selector ?? '.js-session-resumable'
1724
const keyPrefix = options?.keyPrefix ?? 'session-resume:'
25+
const storageFilter = options?.storageFilter ?? valueIsUnchanged
1826

1927
let storage
2028
try {
@@ -33,7 +41,7 @@ export function persistResumableFields(id: string, options?: PersistOptions): vo
3341
}
3442
}
3543

36-
let fields = resumables.filter(field => shouldResumeField(field)).map(field => [field.id, field.value])
44+
let fields = resumables.filter(field => shouldResumeField(field, storageFilter)).map(field => [field.id, field.value])
3745

3846
if (fields.length) {
3947
try {

0 commit comments

Comments
 (0)