File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11// Last submitted HTMLFormElement that will cause a browser navigation.
22let 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+
814type 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.
1522export 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 {
You can’t perform that action at this time.
0 commit comments