Save draft on window's beforeunload event

tusooa/save-draft
tusooa 4 weeks ago
parent edf5e36bf8
commit 71622e2932
No known key found for this signature in database
GPG Key ID: 42AEC43D48433C51

@ -354,10 +354,20 @@ const PostStatusForm = {
handler () { handler () {
this.statusChanged() this.statusChanged()
} }
},
savable (val) {
// https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event#usage_notes
// MDN says we'd better add the beforeunload event listener only when needed, and remove it when it's no longer needed
if (val) {
this.addBeforeUnloadListener()
} else {
this.removeBeforeUnloadListener()
}
} }
}, },
beforeUnmount () { beforeUnmount () {
this.maybeAutoSaveDraft() this.maybeAutoSaveDraft()
this.removeBeforeUnloadListener()
}, },
methods: { methods: {
statusChanged () { statusChanged () {
@ -785,6 +795,17 @@ const PostStatusForm = {
this.abandonDraft().then(() => { this.abandonDraft().then(() => {
this.$emit('can-close') this.$emit('can-close')
}) })
},
addBeforeUnloadListener () {
this._beforeUnloadListener ||= () => {
this.saveDraft()
}
window.addEventListener('beforeunload', this._beforeUnloadListener)
},
removeBeforeUnloadListener () {
if (this._beforeUnloadListener) {
window.removeEventListener('beforeunload', this._beforeUnloadListener)
}
} }
} }
} }

Loading…
Cancel
Save