From 07ecdb184968522f54b71cff5c4c9b045c343978 Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Sun, 14 Apr 2019 15:10:46 -0400 Subject: [PATCH] propagate scope changes across chained slots - fixes #2359 --- src/compile/render-dom/wrappers/InlineComponent/index.ts | 2 +- test/runtime/samples/component-slot-chained/Inner.svelte | 1 + test/runtime/samples/component-slot-chained/Outer.svelte | 7 +++++++ test/runtime/samples/component-slot-chained/_config.js | 8 ++++++++ test/runtime/samples/component-slot-chained/main.svelte | 9 +++++++++ 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 test/runtime/samples/component-slot-chained/Inner.svelte create mode 100644 test/runtime/samples/component-slot-chained/Outer.svelte create mode 100644 test/runtime/samples/component-slot-chained/_config.js create mode 100644 test/runtime/samples/component-slot-chained/main.svelte diff --git a/src/compile/render-dom/wrappers/InlineComponent/index.ts b/src/compile/render-dom/wrappers/InlineComponent/index.ts index 1fae0aedcc..df81b13a54 100644 --- a/src/compile/render-dom/wrappers/InlineComponent/index.ts +++ b/src/compile/render-dom/wrappers/InlineComponent/index.ts @@ -156,7 +156,7 @@ export default class InlineComponentWrapper extends Wrapper { component_opts.push(`$$inline: true`); } - const fragment_dependencies = new Set(); + const fragment_dependencies = new Set(this.fragment ? ['$$scope'] : []); this.slots.forEach(slot => { slot.block.dependencies.forEach(name => { const is_let = slot.scope.is_let(name); diff --git a/test/runtime/samples/component-slot-chained/Inner.svelte b/test/runtime/samples/component-slot-chained/Inner.svelte new file mode 100644 index 0000000000..8b6c0a40e9 --- /dev/null +++ b/test/runtime/samples/component-slot-chained/Inner.svelte @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/runtime/samples/component-slot-chained/Outer.svelte b/test/runtime/samples/component-slot-chained/Outer.svelte new file mode 100644 index 0000000000..c09cc83395 --- /dev/null +++ b/test/runtime/samples/component-slot-chained/Outer.svelte @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/test/runtime/samples/component-slot-chained/_config.js b/test/runtime/samples/component-slot-chained/_config.js new file mode 100644 index 0000000000..6c028f8c31 --- /dev/null +++ b/test/runtime/samples/component-slot-chained/_config.js @@ -0,0 +1,8 @@ +export default { + html: 'one', + + test({ assert, component, target }) { + component.text = 'two'; + assert.htmlEqual(target.innerHTML, `two`); + } +}; diff --git a/test/runtime/samples/component-slot-chained/main.svelte b/test/runtime/samples/component-slot-chained/main.svelte new file mode 100644 index 0000000000..8a3eb67f8e --- /dev/null +++ b/test/runtime/samples/component-slot-chained/main.svelte @@ -0,0 +1,9 @@ + + + + {text} + \ No newline at end of file