diff options
Diffstat (limited to 'app/assets/javascripts/pages/projects/merge_requests/edit/check_form_state.js')
-rw-r--r-- | app/assets/javascripts/pages/projects/merge_requests/edit/check_form_state.js | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/app/assets/javascripts/pages/projects/merge_requests/edit/check_form_state.js b/app/assets/javascripts/pages/projects/merge_requests/edit/check_form_state.js new file mode 100644 index 00000000000..74178ab96e3 --- /dev/null +++ b/app/assets/javascripts/pages/projects/merge_requests/edit/check_form_state.js @@ -0,0 +1,24 @@ +import { serializeForm } from '~/lib/utils/forms'; + +const findForm = () => document.querySelector('.merge-request-form'); +const serializeFormData = () => JSON.stringify(serializeForm(findForm())); + +export default () => { + const oldFormData = serializeFormData(); + + const compareFormData = (e) => { + const newFormData = serializeFormData(); + + if (oldFormData !== newFormData) { + e.preventDefault(); + // eslint-disable-next-line no-param-reassign + e.returnValue = ''; // Chrome requires returnValue to be set + } + }; + + window.addEventListener('beforeunload', compareFormData); + + findForm().addEventListener('submit', () => + window.removeEventListener('beforeunload', compareFormData), + ); +}; |