From 04d762d2f9503ac575eb9efaead91be8ab0d44ab Mon Sep 17 00:00:00 2001 From: Almaz Date: Fri, 23 Aug 2019 00:47:19 +0200 Subject: [PATCH] Fixed complex {#if} behaviour --- .../compile/render_dom/wrappers/IfBlock.ts | 2 +- test/js/samples/if-block-complex/expected.js | 93 +++++++++++++++++++ test/js/samples/if-block-complex/input.svelte | 9 ++ 3 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 test/js/samples/if-block-complex/expected.js create mode 100644 test/js/samples/if-block-complex/input.svelte diff --git a/src/compiler/compile/render_dom/wrappers/IfBlock.ts b/src/compiler/compile/render_dom/wrappers/IfBlock.ts index 58b6513311..fb364a5343 100644 --- a/src/compiler/compile/render_dom/wrappers/IfBlock.ts +++ b/src/compiler/compile/render_dom/wrappers/IfBlock.ts @@ -466,7 +466,7 @@ export default class IfBlockWrapper extends Wrapper { } `; - if (branch.snippet) { + if (branch.snippet && branch.dependencies.length) { block.builders.update.add_block(`if (${branch.dependencies.map(n => `changed.${n}`).join(' || ')}) ${branch.condition} = ${branch.snippet}`); } diff --git a/test/js/samples/if-block-complex/expected.js b/test/js/samples/if-block-complex/expected.js new file mode 100644 index 0000000000..8dffddef33 --- /dev/null +++ b/test/js/samples/if-block-complex/expected.js @@ -0,0 +1,93 @@ +/* generated by Svelte vX.Y.Z */ +import { + SvelteComponent, + attr, + detach, + element, + empty, + init, + insert, + noop, + safe_not_equal +} from "svelte/internal"; + +// (7:0) {#if (item.divider && item.divider.includes(1))} +function create_if_block(ctx) { + var div; + + return { + c() { + div = element("div"); + attr(div, "class", "divider"); + }, + + m(target, anchor) { + insert(target, div, anchor); + }, + + d(detaching) { + if (detaching) { + detach(div); + } + } + }; +} + +function create_fragment(ctx) { + var show_if = (ctx.item.divider && ctx.item.divider.includes(1)), if_block_anchor; + + var if_block = (show_if) && create_if_block(ctx); + + return { + c() { + if (if_block) if_block.c(); + if_block_anchor = empty(); + }, + + m(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + }, + + p(changed, ctx) { + if (show_if) { + if (!if_block) { + if_block = create_if_block(ctx); + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + + i: noop, + o: noop, + + d(detaching) { + if (if_block) if_block.d(detaching); + + if (detaching) { + detach(if_block_anchor); + } + } + }; +} + +function instance($$self) { + let item = { + divider: [1] + } + + return { item }; +} + +class Component extends SvelteComponent { + constructor(options) { + super(); + init(this, options, instance, create_fragment, safe_not_equal, []); + } +} + +export default Component; diff --git a/test/js/samples/if-block-complex/input.svelte b/test/js/samples/if-block-complex/input.svelte new file mode 100644 index 0000000000..8c1143596b --- /dev/null +++ b/test/js/samples/if-block-complex/input.svelte @@ -0,0 +1,9 @@ + + +{#if (item.divider && item.divider.includes(1))} +
+{/if}