mirror of https://github.com/sveltejs/svelte
[fix] Local transitions from #key blocks (#7286)
* fix: Local transitions from #key blocks When adding `|local` to a transition inside a {#key} block, only the outro was triggered not the intro. This PR fixes #5950 * add test case Co-authored-by: tanhauhau <lhtan93@gmail.com>pull/7467/head
parent
09b5afc8fe
commit
0b0221de99
@ -0,0 +1,37 @@
|
|||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
x: false,
|
||||||
|
y: 1
|
||||||
|
},
|
||||||
|
|
||||||
|
test({ assert, component, target, raf }) {
|
||||||
|
component.x = true;
|
||||||
|
|
||||||
|
let div = target.querySelector('div');
|
||||||
|
assert.equal(div.foo, undefined);
|
||||||
|
|
||||||
|
// play both in and out transition when changed with `{#key}`
|
||||||
|
component.y = 2;
|
||||||
|
assert.htmlEqual(target.innerHTML, '<div></div><div></div>');
|
||||||
|
const [leaving, incoming] = target.querySelectorAll('div');
|
||||||
|
|
||||||
|
raf.tick(50);
|
||||||
|
assert.equal(leaving.foo, 0.5);
|
||||||
|
assert.equal(incoming.foo, 0.5);
|
||||||
|
|
||||||
|
raf.tick(100);
|
||||||
|
assert.htmlEqual(target.innerHTML, '<div></div>');
|
||||||
|
assert.equal(leaving.foo, 0);
|
||||||
|
assert.equal(incoming.foo, 1);
|
||||||
|
|
||||||
|
// do not play out transition when removed by `{#if}`
|
||||||
|
component.x = false;
|
||||||
|
assert.htmlEqual(target.innerHTML, '');
|
||||||
|
|
||||||
|
// do not play in transition when added back with `{#if}`
|
||||||
|
component.x = true;
|
||||||
|
assert.htmlEqual(target.innerHTML, '<div></div>');
|
||||||
|
div = target.querySelector('div');
|
||||||
|
assert.equal(div.foo, undefined);
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,19 @@
|
|||||||
|
<script>
|
||||||
|
export let x;
|
||||||
|
export let y;
|
||||||
|
|
||||||
|
function foo(node, _params) {
|
||||||
|
return {
|
||||||
|
duration: 100,
|
||||||
|
tick: t => {
|
||||||
|
node.foo = t;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if x}
|
||||||
|
{#key y}
|
||||||
|
<div transition:foo|local></div>
|
||||||
|
{/key}
|
||||||
|
{/if}
|
Loading…
Reference in new issue