Skip to content

Commit

Permalink
πŸ› Fix multiple custom-element rerenders causing the temporary width &…
Browse files Browse the repository at this point in the history
… height to stay
  • Loading branch information
skerit committed Feb 17, 2024
1 parent 2951364 commit ca8a222
Showing 1 changed file with 30 additions and 9 deletions.
39 changes: 30 additions & 9 deletions lib/element/custom_element.js
Expand Up @@ -975,14 +975,27 @@ function renderCustomTemplate(re_render) {

let slot_data = _extractSlotData.call(this, true, re_render);

// If there already is a render in progress, resolve it
if (this[CURRENT_RENDER]) {
this[CURRENT_RENDER].resolve(false);
}

let pledge = new Classes.Pledge.Swift();
this[CURRENT_RENDER] = pledge;

function doEarlyResolve(value) {
pledge.resolve(value);
}
const doEarlyResolve = value => pledge.resolve(value),
alreadyDone = () => this[CURRENT_RENDER] != pledge || pledge.is_done;

Hawkejs.series(next => {

Hawkejs.series(function getRenderVariables(next) {
// Force re-renders with non-compiled templates to be async
// This can help re-renders to be cancelled quicker
if (re_render && !this.constructor.compiled_template) {
Blast.setImmediate(next);
} else {
next();
}
}, function getRenderVariables(next) {

if (!has_prepare_logic) {
return next();
Expand Down Expand Up @@ -1011,7 +1024,7 @@ function renderCustomTemplate(re_render) {
next();
}, function renderTemplate(next) {

if (that[CURRENT_RENDER] != pledge) {
if (alreadyDone()) {
doEarlyResolve(false);
return;
}
Expand All @@ -1033,7 +1046,7 @@ function renderCustomTemplate(re_render) {
renderer.renderTemplate(template, render_vars, String(render_counter++)).done(next);
}, function assembleBlock(next, template) {

if (that[CURRENT_RENDER] != pledge) {
if (alreadyDone()) {
doEarlyResolve(false);
return;
}
Expand All @@ -1048,7 +1061,7 @@ function renderCustomTemplate(re_render) {

}, function assembledBlock(next, block) {

if (that[CURRENT_RENDER] != pledge) {
if (alreadyDone()) {
doEarlyResolve(false);
return;
}
Expand All @@ -1069,7 +1082,7 @@ function renderCustomTemplate(re_render) {
next();
}, function resolved(err) {

if (that[CURRENT_RENDER] != pledge) {
if (alreadyDone()) {
doEarlyResolve(false);
return;
}
Expand Down Expand Up @@ -2649,6 +2662,14 @@ Element.setMethod(function rerender() {
// Remove the rendered time
this.removeAttribute('he-rendered');

// If there already is a render in progress, resolve it now.
// (We can't cancel it, because other areas of the code might be waiting for it)
// We have to do this now so any rerendering attributes will be undone
if (this[CURRENT_RENDER]) {
this[CURRENT_RENDER].resolve(false);
this[CURRENT_RENDER] = null;
}

// Get the current dimensions
let client_rects = Blast.isBrowser ? this.getClientRects()?.[0] : null,
previous_width,
Expand All @@ -2668,7 +2689,7 @@ Element.setMethod(function rerender() {
this.delayAssemble(pledge);
}

Blast.Classes.Pledge.Swift.done(pledge, err => {
Classes.Pledge.Swift.done(pledge, err => {

// Remove the rerendering attribute
this.removeAttribute('data-he-rerendering');
Expand Down

0 comments on commit ca8a222

Please sign in to comment.