From 79f7236c75db318d5079418691d7c512b0089199 Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Mon, 17 Jun 2019 20:36:52 -0400 Subject: [PATCH] get tests passing --- .../compile/render-dom/wrappers/IfBlock.ts | 47 ++++++++++--------- .../transition-repeated-outro/expected.js | 1 + 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/compiler/compile/render-dom/wrappers/IfBlock.ts b/src/compiler/compile/render-dom/wrappers/IfBlock.ts index 9a090c8dc0..d106586564 100644 --- a/src/compiler/compile/render-dom/wrappers/IfBlock.ts +++ b/src/compiler/compile/render-dom/wrappers/IfBlock.ts @@ -441,30 +441,33 @@ export default class IfBlockWrapper extends Wrapper { // no `p()` here — we don't want to update outroing nodes, // as that will typically result in glitching - const exit = branch.block.has_outro_method - ? deindent` - @group_outros(); - @on_outro(() => { + if (branch.block.has_outro_method) { + block.builders.update.add_block(deindent` + if (${branch.condition}) { + ${outroing} = false; + ${enter} + } else if (${name} && !${outroing}) { + ${outroing} = true; + @group_outros(); + @on_outro(() => { + ${name}.d(1); + ${name} = null; + }); + + ${name}.o(1); + @check_outros(); + } + `); + } else { + block.builders.update.add_block(deindent` + if (${branch.condition}) { + ${enter} + } else if (${name}) { ${name}.d(1); ${name} = null; - }); - - ${name}.o(1); - @check_outros(); - ` - : deindent` - ${name}.d(1); - ${name} = null; - `; - - block.builders.update.add_block(deindent` - if (${branch.condition}) { - ${enter} - } else if (${name} && !${outroing}) { - ${outroing} = true; - ${exit} - } - `); + } + `); + } block.builders.destroy.add_line(`${if_name}${name}.d(${detaching});`); } diff --git a/test/js/samples/transition-repeated-outro/expected.js b/test/js/samples/transition-repeated-outro/expected.js index b1db972c67..9e1cba8f75 100644 --- a/test/js/samples/transition-repeated-outro/expected.js +++ b/test/js/samples/transition-repeated-outro/expected.js @@ -70,6 +70,7 @@ function create_fragment(ctx) { p(changed, ctx) { if (ctx.num < 5) { + outroing_if_block = false; if (!if_block) { if_block = create_if_block(ctx); if_block.c();