Skip to content

Commit

Permalink
fix test after merge, move create_root_component_slots from utils.ts …
Browse files Browse the repository at this point in the history
…to Component.ts
  • Loading branch information
Anton Samoylov authored and tanhauhau committed Feb 12, 2020
1 parent 00859e7 commit 188edd2
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 78 deletions.
36 changes: 35 additions & 1 deletion src/runtime/internal/Component.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { add_render_callback, flush, schedule_update, dirty_components } from './scheduler';
import { current_component, set_current_component } from './lifecycle';
import { blank_object, is_function, run, run_all, noop } from './utils';
import { children } from './dom';
import { children, insert, detach } from './dom';
import { transition_in } from './transitions';

interface Fragment {
Expand Down Expand Up @@ -226,3 +226,37 @@ export class SvelteComponent {
// overridden by instance, if it has props
}
}

function create_root_component_slot_fn(elements) {
return function create_root_component_slot() {
return {
c: noop,

m: function mount(target, anchor) {
elements.forEach(element => {
insert(target, element, anchor);
});
},

d: function destroy(detaching) {
if (detaching) {
elements.forEach(element => detach(element));
}
},

l: noop,
};
};
}

export function create_root_component_slots(slots) {
const root_component_slots = {};
for (const slot_name in slots) {
let elements = slots[slot_name];
if (!Array.isArray(elements)) {
elements = [elements];
}
root_component_slots[slot_name] = [create_root_component_slot_fn(elements)];
}
return root_component_slots;
}
36 changes: 0 additions & 36 deletions src/runtime/internal/utils.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { insert, detach } from './dom';

export function noop() {}

export const identity = x => x;
Expand Down Expand Up @@ -130,37 +128,3 @@ export const has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj,
export function action_destroyer(action_result) {
return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;
}

function create_root_component_slot_fn(elements) {
return function create_root_component_slot() {
return {
c: noop,

m: function mount(target, anchor) {
elements.forEach(element => {
insert(target, element, anchor);
});
},

d: function destroy(detaching) {
if (detaching) {
elements.forEach(element => detach(element));
}
},

l: noop,
};
};
}

export function create_root_component_slots(slots) {
const root_component_slots = {};
for (const slot_name in slots) {
let elements = slots[slot_name];
if (!Array.isArray(elements)) {
elements = [elements];
}
root_component_slots[slot_name] = [create_root_component_slot_fn(elements)];
}
return root_component_slots;
}
69 changes: 28 additions & 41 deletions test/js/samples/root-component-slot/expected.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,37 +11,30 @@ import {
init,
insert,
safe_not_equal,
space
space,
transition_in,
transition_out
} from "svelte/internal";

const get_slot1_slot_changes = ({}) => ({});
const get_slot1_slot_context = ({}) => ({});
const get_slot1_slot_changes = dirty => ({});
const get_slot1_slot_context = ctx => ({});

function create_fragment(ctx) {
var div, t, current;

const default_slot_1 = ctx.$$slots.default;
const default_slot = create_slot(default_slot_1, ctx, null);

const slot1_slot_1 = ctx.$$slots.slot1;
const slot1_slot = create_slot(slot1_slot_1, ctx, get_slot1_slot_context);
let div;
let t;
let current;
const default_slot_template = /*$$slots*/ ctx[1].default;
const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[0], null);
const slot1_slot_template = /*$$slots*/ ctx[1].slot1;
const slot1_slot = create_slot(slot1_slot_template, ctx, /*$$scope*/ ctx[0], get_slot1_slot_context);

return {
c() {
div = element("div");

if (default_slot) default_slot.c();
t = space();

if (slot1_slot) slot1_slot.c();
},

l(nodes) {
if (default_slot) default_slot.l(div_nodes);

if (slot1_slot) slot1_slot.l(div_nodes);
},

m(target, anchor) {
insert(target, div, anchor);

Expand All @@ -57,37 +50,29 @@ function create_fragment(ctx) {

current = true;
},

p(changed, ctx) {
if (default_slot && default_slot.p && changed.$$scope) {
default_slot.p(get_slot_changes(default_slot_1, ctx, changed,), get_slot_context(default_slot_1, ctx, null));
p(ctx, [dirty]) {
if (default_slot && default_slot.p && dirty & /*$$scope*/ 1) {
default_slot.p(get_slot_context(default_slot_template, ctx, /*$$scope*/ ctx[0], null), get_slot_changes(default_slot_template, /*$$scope*/ ctx[0], dirty, null));
}

if (slot1_slot && slot1_slot.p && changed.$$scope) {
slot1_slot.p(get_slot_changes(slot1_slot_1, ctx, changed, get_slot1_slot_changes), get_slot_context(slot1_slot_1, ctx, get_slot1_slot_context));
if (slot1_slot && slot1_slot.p && dirty & /*$$scope*/ 1) {
slot1_slot.p(get_slot_context(slot1_slot_template, ctx, /*$$scope*/ ctx[0], get_slot1_slot_context), get_slot_changes(slot1_slot_template, /*$$scope*/ ctx[0], dirty, get_slot1_slot_changes));
}
},

i(local) {
if (current) return;
if (default_slot && default_slot.i) default_slot.i(local);
if (slot1_slot && slot1_slot.i) slot1_slot.i(local);
transition_in(default_slot, local);
transition_in(slot1_slot, local);
current = true;
},

o(local) {
if (default_slot && default_slot.o) default_slot.o(local);
if (slot1_slot && slot1_slot.o) slot1_slot.o(local);
transition_out(default_slot, local);
transition_out(slot1_slot, local);
current = false;
},

d(detaching) {
if (detaching) {
detach(div);
}

if (detaching) detach(div);
if (default_slot) default_slot.d(detaching);

if (slot1_slot) slot1_slot.d(detaching);
}
};
Expand All @@ -97,22 +82,24 @@ function instance($$self, $$props, $$invalidate) {
let { $$slots = {}, $$scope } = $$props;

$$self.$set = $$props => {
if ('$$scope' in $$props) $$invalidate('$$scope', $$scope = $$props.$$scope);
if ("$$scope" in $$props) $$invalidate(0, $$scope = $$props.$$scope);
};

return { $$slots, $$scope };
return [$$scope, $$slots];
}

class Component extends SvelteComponent {
constructor(options) {
super();

if (options.slots) {
options.props = options.props || {};
options.props.$$scope = {};
options.props.$$slots = create_root_component_slots(options.slots);
}
init(this, options, instance, create_fragment, safe_not_equal, []);

init(this, options, instance, create_fragment, safe_not_equal, {});
}
}

export default Component;
export default Component;

0 comments on commit 188edd2

Please sign in to comment.