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 { active_effect, active_reaction, get } from '../../runtime.js';
import { DEV } from 'esm-env'; import { DEV } from 'esm-env';
import { derived_safe_equal } from '../../reactivity/deriveds.js'; 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 * 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 was_empty = false;
var boundary = find_boundary(active_effect);
// TODO: ideally we could use derived for runes mode but because of the ability // 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 // 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 // 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); 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(() => { block(() => {
var array = get(each_array); array = get(each_array);
var length = array.length; var length = array.length;
if (was_empty && length === 0) { 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)); fallback = branch(() => fallback_fn(anchor));
} }
} else { } else {
reconcile(array, state, anchor, render_fn, flags, get_key, get_collection); commit();
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;
});
}
}
} }
if (mismatch) { if (mismatch) {

Loading…
Cancel
Save