From 69403aeb13a026fc3b9358cc74fa41e30d00119f Mon Sep 17 00:00:00 2001 From: Sjors Baltus Date: Thu, 25 Nov 2021 10:41:19 +0100 Subject: [PATCH] Allow request to not morph the children but instead emit an event to its children using a selector --- javascript/elements/updates_for_element.js | 31 +++++++++++++++------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/javascript/elements/updates_for_element.js b/javascript/elements/updates_for_element.js index dbec2214..08e32567 100644 --- a/javascript/elements/updates_for_element.js +++ b/javascript/elements/updates_for_element.js @@ -84,16 +84,27 @@ export default class UpdatesForElement extends SubscribingElement { html: fragments[i], permanentAttributeName: 'data-ignore-updates' } - dispatch(blocks[i], 'cable-ready:before-update', operation) - morphdom(blocks[i], fragments[i], { - childrenOnly: true, - onBeforeElUpdated: shouldMorph(operation), - onElUpdated: _ => { - blocks[i].removeAttribute('updating') - dispatch(blocks[i], 'cable-ready:after-update', operation) - assignFocus(operation.focusSelector) - } - }) + + if (!blocks[i].dataset.ignoreMorph) { + dispatch(blocks[i], 'cable-ready:before-update', operation) + morphdom(blocks[i], fragments[i], { + childrenOnly: true, + onBeforeElUpdated: shouldMorph(operation), + onElUpdated: _ => { + blocks[i].removeAttribute('updating') + console.warn('AFTER UPDATING', blocks[i]) + dispatch(blocks[i], 'cable-ready:after-update', operation) + assignFocus(operation.focusSelector) + } + }) + } + + if (blocks[i].dataset.afterUpdateEventSelector) { + const elements = blocks[i].querySelectorAll(blocks[i].dataset.afterUpdateEventSelector); + elements.forEach(element => { + dispatch(element, 'cable-ready:after-update', operation); + }); + } } }