move some logic into ComponentSelector

pull/2179/head
Richard Harris 7 years ago
parent 9e5c5a9f89
commit 79bbeb7ec7

@ -4,7 +4,6 @@
import { enter } from '../../../utils/events.js'; import { enter } from '../../../utils/events.js';
const { components, selected } = getContext('REPL'); const { components, selected } = getContext('REPL');
const dispatch = createEventDispatcher();
let editing = null; let editing = null;
@ -33,7 +32,18 @@
function remove(component) { function remove(component) {
let result = confirm(`Are you sure you want to delete ${component.name}.${component.type}?`); let result = confirm(`Are you sure you want to delete ${component.name}.${component.type}?`);
if (result) dispatch('remove');
if (result) {
const index = $components.indexOf(component);
if (~index) {
components.set($components.slice(0, index).concat($components.slice(index + 1)));
} else {
console.error(`Could not find component! That's... odd`);
}
selected.set($components[index] || $components[$components.length - 1]);
}
} }
function selectInput(event) { function selectInput(event) {
@ -183,11 +193,11 @@
</div> </div>
{:else} {:else}
{#if component === editing} {#if component === editing}
<span class="input-sizer">{component.name + (/\./.test(component.name) ? '' : `.${component.type}`)}</span> <span class="input-sizer">{editing.name + (/\./.test(editing.name) ? '' : `.${editing.type}`)}</span>
<input <input
autofocus autofocus
bind:value={component.name} bind:value={editing.name}
on:focus={selectInput} on:focus={selectInput}
on:blur="{() => closeEdit()}" on:blur="{() => closeEdit()}"
use:enter="{e => e.target.blur()}" use:enter="{e => e.target.blur()}"
@ -211,7 +221,7 @@
{/each} {/each}
</div> </div>
<button class="add-new" on:click="{addNew}" title="add new component"> <button class="add-new" on:click={addNew} title="add new component">
<Icon name="plus" /> <Icon name="plus" />
</button> </button>
</div> </div>

@ -7,12 +7,7 @@
export let warningCount; export let warningCount;
</script> </script>
<!-- TODO would be nice if events bubbled --> <ComponentSelector/>
<ComponentSelector
on:create
on:remove
on:select
/>
<ModuleEditor <ModuleEditor
{error} {error}

@ -18,7 +18,7 @@
export let sourceError; export let sourceError;
export let sourceErrorLoc; export let sourceErrorLoc;
export let runtimeError; export let runtimeError;
export let compileOptions; export let compile_options;
export let embedded; export let embedded;
export let show_props; export let show_props;
@ -194,7 +194,7 @@
<section slot="b"> <section slot="b">
<h3>Compiler options</h3> <h3>Compiler options</h3>
<CompilerOptions bind:options={compileOptions}/> <CompilerOptions bind:options={compile_options}/>
</section> </section>
</SplitPane> </SplitPane>
{/if} {/if}

@ -59,7 +59,7 @@
let sourceErrorLoc; let sourceErrorLoc;
let runtimeErrorLoc; let runtimeErrorLoc;
let compileOptions = { let compile_options = {
generate: 'dom', generate: 'dom',
dev: false, dev: false,
css: false, css: false,
@ -98,23 +98,6 @@
}; };
}); });
function removeComponent() {
if ($selected.name === 'App') {
// App.svelte can't be removed
$selected.source = '';
} else {
const index = $components.indexOf($selected);
if (~index) {
components.set($components.slice(0, index).concat($components.slice(index + 1)));
} else {
console.error(`Could not find component! That's... odd`);
}
selected.set($components[index] || $components[$components.length - 1]);
}
}
function compile(component, options) { function compile(component, options) {
if (component.type === 'svelte') { if (component.type === 'svelte') {
workers.compiler.postMessage({ workers.compiler.postMessage({
@ -145,7 +128,7 @@
components.update(c => c); components.update(c => c);
// recompile selected component // recompile selected component
compile($selected, compileOptions); compile($selected, compile_options);
// regenerate bundle (TODO do this in a separate worker?) // regenerate bundle (TODO do this in a separate worker?)
workers.bundler.postMessage({ type: 'bundle', components: $components }); workers.bundler.postMessage({ type: 'bundle', components: $components });
@ -177,7 +160,7 @@
} }
$: if (workers && $selected) { $: if (workers && $selected) {
compile($selected, compileOptions); compile($selected, compile_options);
} }
</script> </script>
@ -292,14 +275,13 @@
error={sourceError} error={sourceError}
errorLoc="{sourceErrorLoc || runtimeErrorLoc}" errorLoc="{sourceErrorLoc || runtimeErrorLoc}"
{warningCount} {warningCount}
on:remove={removeComponent}
on:change="{handleChange}" on:change="{handleChange}"
/> />
</section> </section>
<section slot=b style='height: 100%;'> <section slot=b style='height: 100%;'>
<Output <Output
bind:compileOptions bind:compile_options
{version} {version}
{js} {js}
{css} {css}

Loading…
Cancel
Save