diff options
author | Filipa Lacerda <filipa@gitlab.com> | 2017-10-13 12:15:37 +0000 |
---|---|---|
committer | Filipa Lacerda <filipa@gitlab.com> | 2017-10-13 12:15:37 +0000 |
commit | 6cf3049f486e81d40d62cc611cb757793a2dd60f (patch) | |
tree | 4af0190b4ea42beae942d86f66267e71860ed669 | |
parent | c08fea6fd3b69c5efad14cf39783ef71a7006fad (diff) | |
parent | fc828b401c7783fb8fd61494082993ca01b20bfa (diff) | |
download | gitlab-ce-6cf3049f486e81d40d62cc611cb757793a2dd60f.tar.gz |
Merge branch 'server-flash-click-remove' into 'master'
Fixed server rendered flash not being removed on click
See merge request gitlab-org/gitlab-ce!14864
-rw-r--r-- | app/assets/javascripts/flash.js | 7 | ||||
-rw-r--r-- | app/assets/javascripts/main.js | 8 | ||||
-rw-r--r-- | spec/javascripts/flash_spec.js | 21 |
3 files changed, 34 insertions, 2 deletions
diff --git a/app/assets/javascripts/flash.js b/app/assets/javascripts/flash.js index bc5cd818e1c..67261c1c9b4 100644 --- a/app/assets/javascripts/flash.js +++ b/app/assets/javascripts/flash.js @@ -40,6 +40,10 @@ const createFlashEl = (message, type, isInContentWrapper = false) => ` </div> `; +const removeFlashClickListener = (flashEl, fadeTransition) => { + flashEl.parentNode.addEventListener('click', () => hideFlash(flashEl, fadeTransition)); +}; + /* * Flash banner supports different types of Flash configurations * along with ability to provide actionConfig which can be used to show @@ -70,7 +74,7 @@ const createFlash = function createFlash( flashContainer.innerHTML = createFlashEl(message, type, isInContentWrapper); const flashEl = flashContainer.querySelector(`.flash-${type}`); - flashEl.addEventListener('click', () => hideFlash(flashEl, fadeTransition)); + removeFlashClickListener(flashEl, fadeTransition); if (actionConfig) { flashEl.innerHTML += createAction(actionConfig); @@ -90,5 +94,6 @@ export { createFlashEl, createAction, hideFlash, + removeFlashClickListener, }; window.Flash = createFlash; diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js index c05141b515e..1ac8f83a0c7 100644 --- a/app/assets/javascripts/main.js +++ b/app/assets/javascripts/main.js @@ -63,7 +63,7 @@ import './diff'; import './dropzone_input'; import './due_date_select'; import './files_comment_button'; -import Flash from './flash'; +import Flash, { removeFlashClickListener } from './flash'; import './gl_dropdown'; import './gl_field_error'; import './gl_field_errors'; @@ -336,4 +336,10 @@ $(function () { event.preventDefault(); gl.utils.visitUrl(`${action}${$(this).serialize()}`); }); + + const flashContainer = document.querySelector('.flash-container'); + + if (flashContainer && flashContainer.children.length) { + removeFlashClickListener(flashContainer.children[0]); + } }); diff --git a/spec/javascripts/flash_spec.js b/spec/javascripts/flash_spec.js index 060ffaa339b..b669aabcee4 100644 --- a/spec/javascripts/flash_spec.js +++ b/spec/javascripts/flash_spec.js @@ -2,6 +2,7 @@ import flash, { createFlashEl, createAction, hideFlash, + removeFlashClickListener, } from '~/flash'; describe('Flash', () => { @@ -266,4 +267,24 @@ describe('Flash', () => { }); }); }); + + describe('removeFlashClickListener', () => { + beforeEach(() => { + document.body.innerHTML += '<div class="flash-container"><div class="flash"></div></div>'; + }); + + it('removes global flash on click', (done) => { + const flashEl = document.querySelector('.flash'); + + removeFlashClickListener(flashEl, false); + + flashEl.parentNode.click(); + + setTimeout(() => { + expect(document.querySelector('.flash')).toBeNull(); + + done(); + }); + }); + }); }); |