From 3cdc6af40b98fb84549cc66c4ec20e1996d43080 Mon Sep 17 00:00:00 2001 From: PKulkoRaccoonGang Date: Mon, 27 Jan 2025 11:19:16 +0200 Subject: [PATCH] refactor: refactored event listeners --- cms/static/js/views/pages/container.js | 45 ++++++++++++++------------ 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/cms/static/js/views/pages/container.js b/cms/static/js/views/pages/container.js index f9160a335afb..a18045b8bd8b 100644 --- a/cms/static/js/views/pages/container.js +++ b/cms/static/js/views/pages/container.js @@ -962,15 +962,17 @@ function($, _, Backbone, gettext, BasePage, } catch (e) { console.error(e); } - return window.addEventListener( - 'message', - (event) => { - if (event.data && event.data.type === 'completeXBlockDuplicating') { - return self.onNewXBlock(placeholderElement, null, true, event.data.payload); - } - }, - { once: true } - ); + + const messageHandler = ({ data }) => { + if (data && data.type === 'completeXBlockDuplicating') { + self.onNewXBlock(placeholderElement, null, true, data.payload); + window.removeEventListener('message', messageHandler); + } + }; + + window.addEventListener('message', messageHandler); + + return; } XBlockUtils.duplicateXBlock(xblockElement, parentElement) @@ -989,18 +991,19 @@ function($, _, Backbone, gettext, BasePage, id: xblockElement.data('locator') }); - if (this.options.isIframeEmbed) { - return window.addEventListener( - 'message', - ({ data }) => { - if (data && data.type === 'completeXBlockDeleting') { - const targetXBlockElement = $(`[data-locator="${data.payload.locator}"]`); - return self.onDelete(targetXBlockElement); - } - }, - { once: true } - ); - } + if (this.options.isIframeEmbed) { + const messageHandler = ({ data }) => { + if (data && data.type === 'completeXBlockDeleting') { + const targetXBlockElement = $(`[data-locator="${data.payload.locator}"]`); + window.removeEventListener('message', messageHandler); + return self.onDelete(targetXBlockElement); + } + }; + + window.addEventListener('message', messageHandler); + + return; + } XBlockUtils.deleteXBlock(xblockInfo).done(function() { self.onDelete(xblockElement);