From 2031f5204f7b2e1933d3e018a13449428a0588f2 Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Fri, 20 Sep 2019 23:17:19 -0400 Subject: [PATCH] slot fallbacks --- .../compile/render_dom/wrappers/Slot.ts | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/compiler/compile/render_dom/wrappers/Slot.ts b/src/compiler/compile/render_dom/wrappers/Slot.ts index a2e2d62fdf..1934ea14cd 100644 --- a/src/compiler/compile/render_dom/wrappers/Slot.ts +++ b/src/compiler/compile/render_dom/wrappers/Slot.ts @@ -121,12 +121,15 @@ export default class SlotWrapper extends Wrapper { const ${slot} = @create_slot(${slot_definition}, #ctx, ${get_slot_context}); `); - // block.builders.create.push_condition(`!${slot}`); - // block.builders.claim.push_condition(`!${slot}`); - // block.builders.hydrate.push_condition(`!${slot}`); - // block.builders.mount.push_condition(`!${slot}`); - // block.builders.update.push_condition(`!${slot}`); - // block.builders.destroy.push_condition(`!${slot}`); + // TODO this is a dreadful hack! Should probably make this nicer + const { create, claim, hydrate, mount, update, destroy } = block.chunks; + + block.chunks.create = []; + block.chunks.claim = []; + block.chunks.hydrate = []; + block.chunks.mount = []; + block.chunks.update = []; + block.chunks.destroy = []; const listeners = block.event_listeners; block.event_listeners = []; @@ -134,12 +137,19 @@ export default class SlotWrapper extends Wrapper { block.render_listeners(`_${slot.name}`); block.event_listeners = listeners; - // block.builders.create.pop_condition(); - // block.builders.claim.pop_condition(); - // block.builders.hydrate.pop_condition(); - // block.builders.mount.pop_condition(); - // block.builders.update.pop_condition(); - // block.builders.destroy.pop_condition(); + if (block.chunks.create) create.push(b`if (!${slot}) { ${block.chunks.create} }`); + if (block.chunks.claim) claim.push(b`if (!${slot}) { ${block.chunks.claim} }`); + if (block.chunks.hydrate) hydrate.push(b`if (!${slot}) { ${block.chunks.hydrate} }`); + if (block.chunks.mount) mount.push(b`if (!${slot}) { ${block.chunks.mount} }`); + if (block.chunks.update) update.push(b`if (!${slot}) { ${block.chunks.update} }`); + if (block.chunks.destroy) destroy.push(b`if (!${slot}) { ${block.chunks.destroy} }`); + + block.chunks.create = create; + block.chunks.claim = claim; + block.chunks.hydrate = hydrate; + block.chunks.mount = mount; + block.chunks.update = update; + block.chunks.destroy = destroy; block.chunks.create.push( b`if (${slot}) ${slot}.c();`