pull/4514/head
Conduitry 6 years ago
parent 4782ff9246
commit a699323b20

@ -15,7 +15,7 @@ import create_debugging_comment from './shared/create_debugging_comment';
export default class SlotWrapper extends Wrapper { export default class SlotWrapper extends Wrapper {
node: Slot; node: Slot;
fragment: FragmentWrapper; fragment: FragmentWrapper;
fallback: Block | null; fallback: Block | null = null;
var: Identifier = { type: 'Identifier', name: 'slot' }; var: Identifier = { type: 'Identifier', name: 'slot' };
dependencies: Set<string> = new Set(['$$scope']); dependencies: Set<string> = new Set(['$$scope']);
@ -32,7 +32,6 @@ export default class SlotWrapper extends Wrapper {
this.cannot_use_innerhtml(); this.cannot_use_innerhtml();
this.not_static_content(); this.not_static_content();
this.fallback = null;
if (this.node.children.length) { if (this.node.children.length) {
this.fallback = block.child({ this.fallback = block.child({
comment: create_debugging_comment(this.node.children[0], this.renderer.component), comment: create_debugging_comment(this.node.children[0], this.renderer.component),
@ -153,19 +152,18 @@ export default class SlotWrapper extends Wrapper {
b`@transition_out(${slot_or_fallback}, #local);` b`@transition_out(${slot_or_fallback}, #local);`
); );
const dynamic_dependencies = Array.from(this.dependencies).filter(name => { const is_dependency_dynamic = name => {
if (name === '$$scope') return true; if (name === '$$scope') return true;
if (this.node.scope.is_let(name)) return true; if (this.node.scope.is_let(name)) return true;
const variable = renderer.component.var_lookup.get(name); const variable = renderer.component.var_lookup.get(name);
return is_dynamic(variable); return is_dynamic(variable);
}); };
const fallback_dynamic_dependencies = this.fallback ? Array.from(this.fallback.dependencies).filter(name => { const dynamic_dependencies = Array.from(this.dependencies).filter(is_dependency_dynamic);
if (name === '$$scope') return true;
if (this.node.scope.is_let(name)) return true; const fallback_dynamic_dependencies = this.fallback
const variable = renderer.component.var_lookup.get(name); ? Array.from(this.fallback.dependencies).filter(is_dependency_dynamic)
return is_dynamic(variable); : [];
}) : [];
const slot_update = b` const slot_update = b`
if (${slot}.p && ${renderer.dirty(dynamic_dependencies)}) { if (${slot}.p && ${renderer.dirty(dynamic_dependencies)}) {

@ -1,5 +1,5 @@
<script> <script>
import {model} from "./store.svelte" import { model } from "./store.svelte";
export let value = ''; export let value = '';
</script> </script>

@ -1,5 +1,5 @@
<script> <script>
import Inner from "./Inner.svelte" import Inner from "./Inner.svelte";
export let defaultValue = ''; export let defaultValue = '';
export let slotProps = ''; export let slotProps = '';
</script> </script>

@ -1,16 +1,16 @@
<script context="module"> <script context="module">
let value = 'Blub'; let value = 'Blub';
let count = 0; let count = 0;
let subscribers = new Set(); const subscribers = new Set();
export const model = { export const model = {
subscribe(fn) { subscribe(fn) {
subscribers.add(fn); subscribers.add(fn);
count ++; count ++;
fn(value); fn(value);
return () => { return () => {
count --; count--;
subscribers.delete(fn); subscribers.delete(fn);
} };
}, },
set(v) { set(v) {
value = v; value = v;
@ -19,5 +19,5 @@
getCount() { getCount() {
return count; return count;
} }
} };
</script> </script>
Loading…
Cancel
Save