diff --git a/src/compiler/compile/render_dom/wrappers/IfBlock.ts b/src/compiler/compile/render_dom/wrappers/IfBlock.ts index 207e1e349e..9b3e56635d 100644 --- a/src/compiler/compile/render_dom/wrappers/IfBlock.ts +++ b/src/compiler/compile/render_dom/wrappers/IfBlock.ts @@ -520,28 +520,22 @@ export default class IfBlockWrapper extends Wrapper { if (branch.dependencies.length > 0) { const update_mount_node = this.get_update_mount_node(anchor); - const enter = dynamic - ? b` - if (${name}) { - ${name}.p(#ctx, #dirty); - ${has_transitions && b`@transition_in(${name}, 1);`} - } else { - ${name} = ${branch.block.name}(#ctx); - ${name}.c(); - ${has_transitions && b`@transition_in(${name}, 1);`} - ${name}.m(${update_mount_node}, ${anchor}); - } - ` - : b` - if (!${name}) { - ${name} = ${branch.block.name}(#ctx); - ${name}.c(); - ${has_transitions && b`@transition_in(${name}, 1);`} - ${name}.m(${update_mount_node}, ${anchor}); - } else { - ${has_transitions && b`@transition_in(${name}, 1);`} + const enter = b` + if (${name}) { + ${dynamic && b`${name}.p(#ctx, #dirty);`} + ${ + has_transitions && + b`if (${block.renderer.dirty(branch.dependencies)}) { + @transition_in(${name}, 1); + }` } - `; + } else { + ${name} = ${branch.block.name}(#ctx); + ${name}.c(); + ${has_transitions && b`@transition_in(${name}, 1);`} + ${name}.m(${update_mount_node}, ${anchor}); + } + `; if (branch.snippet) { block.chunks.update.push(b`if (${block.renderer.dirty(branch.dependencies)}) ${branch.condition} = ${branch.snippet}`); diff --git a/test/js/samples/if-block-simple/expected.js b/test/js/samples/if-block-simple/expected.js index b9fad863e2..eb6c8e8949 100644 --- a/test/js/samples/if-block-simple/expected.js +++ b/test/js/samples/if-block-simple/expected.js @@ -42,12 +42,12 @@ function create_fragment(ctx) { }, p(ctx, [dirty]) { if (/*foo*/ ctx[0]) { - if (!if_block) { + if (if_block) { + + } else { if_block = create_if_block(ctx); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); - } else { - } } else if (if_block) { if_block.d(1); diff --git a/test/js/samples/transition-local/expected.js b/test/js/samples/transition-local/expected.js index a5d3b6318f..25a03f026f 100644 --- a/test/js/samples/transition-local/expected.js +++ b/test/js/samples/transition-local/expected.js @@ -28,13 +28,15 @@ function create_if_block(ctx) { }, p(ctx, dirty) { if (/*y*/ ctx[1]) { - if (!if_block) { + if (if_block) { + if (dirty & /*y*/ 2) { + transition_in(if_block, 1); + } + } else { if_block = create_if_block_1(ctx); if_block.c(); transition_in(if_block, 1); if_block.m(if_block_anchor.parentNode, if_block_anchor); - } else { - transition_in(if_block, 1); } } else if (if_block) { if_block.d(1); diff --git a/test/js/samples/transition-repeated-outro/expected.js b/test/js/samples/transition-repeated-outro/expected.js index 6f071328a4..1f76a93666 100644 --- a/test/js/samples/transition-repeated-outro/expected.js +++ b/test/js/samples/transition-repeated-outro/expected.js @@ -63,13 +63,15 @@ function create_fragment(ctx) { }, p(ctx, [dirty]) { if (/*num*/ ctx[0] < 5) { - if (!if_block) { + if (if_block) { + if (dirty & /*num*/ 1) { + transition_in(if_block, 1); + } + } else { if_block = create_if_block(ctx); if_block.c(); transition_in(if_block, 1); if_block.m(if_block_anchor.parentNode, if_block_anchor); - } else { - transition_in(if_block, 1); } } else if (if_block) { group_outros(); diff --git a/test/js/samples/use-elements-as-anchors/expected.js b/test/js/samples/use-elements-as-anchors/expected.js index 52635e9b78..5be8808edb 100644 --- a/test/js/samples/use-elements-as-anchors/expected.js +++ b/test/js/samples/use-elements-as-anchors/expected.js @@ -157,12 +157,12 @@ function create_fragment(ctx) { }, p(ctx, [dirty]) { if (/*a*/ ctx[0]) { - if (!if_block0) { + if (if_block0) { + + } else { if_block0 = create_if_block_4(ctx); if_block0.c(); if_block0.m(div, t0); - } else { - } } else if (if_block0) { if_block0.d(1); @@ -170,12 +170,12 @@ function create_fragment(ctx) { } if (/*b*/ ctx[1]) { - if (!if_block1) { + if (if_block1) { + + } else { if_block1 = create_if_block_3(ctx); if_block1.c(); if_block1.m(div, t3); - } else { - } } else if (if_block1) { if_block1.d(1); @@ -183,12 +183,12 @@ function create_fragment(ctx) { } if (/*c*/ ctx[2]) { - if (!if_block2) { + if (if_block2) { + + } else { if_block2 = create_if_block_2(ctx); if_block2.c(); if_block2.m(div, t4); - } else { - } } else if (if_block2) { if_block2.d(1); @@ -196,12 +196,12 @@ function create_fragment(ctx) { } if (/*d*/ ctx[3]) { - if (!if_block3) { + if (if_block3) { + + } else { if_block3 = create_if_block_1(ctx); if_block3.c(); if_block3.m(div, null); - } else { - } } else if (if_block3) { if_block3.d(1); @@ -209,12 +209,12 @@ function create_fragment(ctx) { } if (/*e*/ ctx[4]) { - if (!if_block4) { + if (if_block4) { + + } else { if_block4 = create_if_block(ctx); if_block4.c(); if_block4.m(if_block4_anchor.parentNode, if_block4_anchor); - } else { - } } else if (if_block4) { if_block4.d(1); diff --git a/test/runtime/samples/transition-js-if-outro-unrelated-component-binding-update/Component.svelte b/test/runtime/samples/transition-js-if-outro-unrelated-component-binding-update/Component.svelte new file mode 100644 index 0000000000..adb9aaea0e --- /dev/null +++ b/test/runtime/samples/transition-js-if-outro-unrelated-component-binding-update/Component.svelte @@ -0,0 +1,18 @@ + + +