fix-each-block-duplications
Dominic Gannaway 3 months ago
parent 3f0eac1a3d
commit 41442dc0e0

@ -49,23 +49,30 @@ export function set_current_each_item(item) {
* @param {null | Node} controlled_anchor
*/
function pause_effects(items, paused, controlled_anchor) {
/** @type {import('#client').TransitionManager[]} */
var transitions = [];
var length = items.length;
var transitions_count;
var has_transitions = false;
var to_destoy = [];
for (var i = 0; i < length; i++) {
var item = items[i];
transitions_count = transitions.length;
const item = items[i];
/** @type {import('#client').TransitionManager[]} */
const transitions = [];
pause_children(item.e, transitions, true);
if (transitions_count !== transitions.length) {
paused.set(item.k, item);
if (transitions.length > 0) {
has_transitions = true;
run_out_transitions(transitions, () => {
paused.delete(item.k);
destroy_effect(item.e);
});
} else {
to_destoy.push(item);
}
}
// If we have a controlled anchor, it means that the each block is inside a single
// DOM element, so we can apply a fast-path for clearing the contents of the element.
if (items.length > 0 && transitions.length === 0) {
if (items.length > 0 && !has_transitions) {
if (controlled_anchor !== null) {
var parent_node = /** @type {Element} */ (controlled_anchor.parentNode);
parent_node.textContent = '';
@ -73,13 +80,11 @@ function pause_effects(items, paused, controlled_anchor) {
}
}
run_out_transitions(transitions, () => {
for (var i = 0; i < length; i++) {
var item = items[i];
paused.delete(item.k);
destroy_effect(item.e);
}
});
for (i = 0; i < to_destoy.length; i++) {
var item = to_destoy[i];
paused.delete(item.k);
destroy_effect(item.e);
}
}
/**

Loading…
Cancel
Save