hoist commit logic

aa-coordination
Rich Harris 7 months ago
parent 952ea25ed1
commit 010108a38c

@ -38,6 +38,7 @@ import { queue_micro_task } from '../task.js';
import { active_effect, active_reaction, get } from '../../runtime.js';
import { DEV } from 'esm-env';
import { derived_safe_equal } from '../../reactivity/deriveds.js';
import { find_boundary } from './boundary.js';
/**
* The row of a keyed each block that is currently updating. We track this
@ -136,6 +137,8 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
var was_empty = false;
var boundary = find_boundary(active_effect);
// TODO: ideally we could use derived for runes mode but because of the ability
// to use a store which can be mutated, we can't do that here as mutating a store
// will still result in the collection array being the same from the store
@ -145,8 +148,29 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
return is_array(collection) ? collection : collection == null ? [] : array_from(collection);
});
/** @type {V[]} */
var array;
function commit() {
reconcile(array, state, anchor, render_fn, flags, get_key, get_collection);
if (fallback_fn !== null) {
if (array.length === 0) {
if (fallback) {
resume_effect(fallback);
} else {
fallback = branch(() => fallback_fn(anchor));
}
} else if (fallback !== null) {
pause_effect(fallback, () => {
fallback = null;
});
}
}
}
block(() => {
var array = get(each_array);
array = get(each_array);
var length = array.length;
if (was_empty && length === 0) {
@ -223,21 +247,7 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
fallback = branch(() => fallback_fn(anchor));
}
} else {
reconcile(array, state, anchor, render_fn, flags, get_key, get_collection);
if (fallback_fn !== null) {
if (length === 0) {
if (fallback) {
resume_effect(fallback);
} else {
fallback = branch(() => fallback_fn(anchor));
}
} else if (fallback !== null) {
pause_effect(fallback, () => {
fallback = null;
});
}
}
commit();
}
if (mismatch) {

Loading…
Cancel
Save