fix some each block stuff

pull/1864/head
Rich Harris 7 years ago
parent 681c1acd1f
commit ed83c00f88

@ -213,7 +213,7 @@ export default class EachBlockWrapper extends Wrapper {
// TODO neaten this up... will end up with an empty line in the block // TODO neaten this up... will end up with an empty line in the block
block.builders.init.addBlock(deindent` block.builders.init.addBlock(deindent`
if (!${this.vars.each_block_value}.${length}) { if (!${this.vars.each_block_value}.${length}) {
${each_block_else} = ${this.else.block.name}(ctx); ${each_block_else} = ${this.else.block.name}(#component, ctx);
${each_block_else}.c(); ${each_block_else}.c();
} }
`); `);
@ -231,7 +231,7 @@ export default class EachBlockWrapper extends Wrapper {
if (!${this.vars.each_block_value}.${length} && ${each_block_else}) { if (!${this.vars.each_block_value}.${length} && ${each_block_else}) {
${each_block_else}.p(changed, ctx); ${each_block_else}.p(changed, ctx);
} else if (!${this.vars.each_block_value}.${length}) { } else if (!${this.vars.each_block_value}.${length}) {
${each_block_else} = ${this.else.block.name}(ctx); ${each_block_else} = ${this.else.block.name}(#component, ctx);
${each_block_else}.c(); ${each_block_else}.c();
${each_block_else}.${mountOrIntro}(${initialMountNode}, ${this.vars.anchor}); ${each_block_else}.${mountOrIntro}(${initialMountNode}, ${this.vars.anchor});
} else if (${each_block_else}) { } else if (${each_block_else}) {
@ -247,7 +247,7 @@ export default class EachBlockWrapper extends Wrapper {
${each_block_else} = null; ${each_block_else} = null;
} }
} else if (!${each_block_else}) { } else if (!${each_block_else}) {
${each_block_else} = ${this.else.block.name}(ctx); ${each_block_else} = ${this.else.block.name}(#component, ctx);
${each_block_else}.c(); ${each_block_else}.c();
${each_block_else}.${mountOrIntro}(${initialMountNode}, ${this.vars.anchor}); ${each_block_else}.${mountOrIntro}(${initialMountNode}, ${this.vars.anchor});
} }
@ -340,7 +340,7 @@ export default class EachBlockWrapper extends Wrapper {
${this.block.hasOutros && `@groupOutros();`} ${this.block.hasOutros && `@groupOutros();`}
${this.node.hasAnimation && `for (let #i = 0; #i < ${blocks}.length; #i += 1) ${blocks}[#i].r();`} ${this.node.hasAnimation && `for (let #i = 0; #i < ${blocks}.length; #i += 1) ${blocks}[#i].r();`}
${blocks} = @updateKeyedEach(${blocks}, changed, ${get_key}, ${dynamic ? '1' : '0'}, ctx, ${this.vars.each_block_value}, ${lookup}, ${updateMountNode}, ${destroy}, ${create_each_block}, "${mountOrIntro}", ${anchor}, ${this.vars.get_each_context}); ${blocks} = @updateKeyedEach(${blocks}, #component, changed, ${get_key}, ${dynamic ? '1' : '0'}, ctx, ${this.vars.each_block_value}, ${lookup}, ${updateMountNode}, ${destroy}, ${create_each_block}, "${mountOrIntro}", ${anchor}, ${this.vars.get_each_context});
${this.node.hasAnimation && `for (let #i = 0; #i < ${blocks}.length; #i += 1) ${blocks}[#i].a();`} ${this.node.hasAnimation && `for (let #i = 0; #i < ${blocks}.length; #i += 1) ${blocks}[#i].a();`}
`); `);

@ -14,7 +14,7 @@ export function fixAndOutroAndDestroyBlock(block, lookup) {
outroAndDestroyBlock(block, lookup); outroAndDestroyBlock(block, lookup);
} }
export function updateKeyedEach(old_blocks, changed, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, intro_method, next, get_context) { export function updateKeyedEach(old_blocks, component, changed, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, intro_method, next, get_context) {
var o = old_blocks.length; var o = old_blocks.length;
var n = list.length; var n = list.length;
@ -33,7 +33,7 @@ export function updateKeyedEach(old_blocks, changed, get_key, dynamic, ctx, list
var block = lookup[key]; var block = lookup[key];
if (!block) { if (!block) {
block = create_each_block(key, child_ctx); block = create_each_block(component, key, child_ctx);
block.c(); block.c();
} else if (dynamic) { } else if (dynamic) {
block.p(changed, child_ctx); block.p(changed, child_ctx);

@ -23,10 +23,8 @@ export default {
inputs[1].value = 'w'; inputs[1].value = 'w';
inputs[1].dispatchEvent(new window.MouseEvent('input')); inputs[1].dispatchEvent(new window.MouseEvent('input'));
assert.deepEqual(component, { assert.deepEqual(component.foo, {
foo: { bar: ['x', 'w', 'z']
bar: ['x', 'w', 'z']
}
}); });
} }
}; };

@ -15,11 +15,11 @@ export default {
<p>Doctor Who</p> <p>Doctor Who</p>
`, `,
test(assert, component, target, window) { async test(assert, component, target, window) {
const inputs = target.querySelectorAll('input'); const inputs = target.querySelectorAll('input');
inputs[1].value = 'Oz'; inputs[1].value = 'Oz';
inputs[1].dispatchEvent(new window.Event('input')); await inputs[1].dispatchEvent(new window.Event('input'));
const { people } = component; const { people } = component;

@ -1,6 +1,6 @@
export default { export default {
props: { props: {
animals: [ 'alpaca', 'baboon', 'capybara' ], animals: ['alpaca', 'baboon', 'capybara'],
foo: 'something else' foo: 'something else'
}, },
@ -12,26 +12,26 @@ export default {
after after
`, `,
test ( assert, component, target ) { test(assert, component, target) {
component.animals = []; component.animals = [];
assert.htmlEqual( target.innerHTML, ` assert.htmlEqual(target.innerHTML, `
before before
<p>no animals, but rather something else</p> <p>no animals, but rather something else</p>
after after
` ); `);
component.foo = 'something other'; component.foo = 'something other';
assert.htmlEqual( target.innerHTML, ` assert.htmlEqual(target.innerHTML, `
before before
<p>no animals, but rather something other</p> <p>no animals, but rather something other</p>
after after
` ); `);
component.animals = ['wombat']; component.animals = ['wombat'];
assert.htmlEqual( target.innerHTML, ` assert.htmlEqual(target.innerHTML, `
before before
<p>wombat</p> <p>wombat</p>
after after
` ); `);
} }
}; };

Loading…
Cancel
Save