pull/10948/head
Rich Harris 2 years ago
parent 7b1ce706ce
commit 139ed1620d

@ -1,5 +1,4 @@
import { UNINITIALIZED } from '../../constants.js';
import { remove } from '../reconciler.js';
import { block, branch, pause_effect } from '../../reactivity/effects.js';
import { safe_not_equal } from '../../reactivity/equality.js';
@ -17,39 +16,13 @@ export function key_block(anchor, get_key, render_fn) {
/** @type {import('#client').Effect} */
let effect;
/**
* Every time `key` changes, we create a new effect. Old effects are
* removed from this set when they have fully transitioned out
* @type {Set<import('#client').Effect>}
*/
let effects = new Set();
const key_effect = block(() => {
block(() => {
if (safe_not_equal(key, (key = get_key()))) {
if (effect) {
var e = effect;
pause_effect(e, () => {
effects.delete(e);
});
}
effect = branch(() => {
const dom = render_fn(anchor);
return () => {
if (dom !== undefined) {
remove(dom);
pause_effect(effect);
}
};
});
effects.add(effect);
effect = branch(() => render_fn(anchor));
}
});
key_effect.ondestroy = () => {
for (const e of effects) {
if (e.dom) remove(e.dom);
}
};
}

Loading…
Cancel
Save