2020-01-24 12:32:13 +01:00
|
|
|
<script>
|
2020-02-03 10:50:30 +01:00
|
|
|
import { last } from "lodash/fp"
|
|
|
|
import { pipe } from "../common/core"
|
2020-02-10 16:51:09 +01:00
|
|
|
|
2020-02-03 10:50:30 +01:00
|
|
|
export let components = []
|
|
|
|
export let currentComponent
|
|
|
|
export let onSelect = () => {}
|
|
|
|
export let level = 0
|
2020-02-10 16:51:09 +01:00
|
|
|
|
2020-02-03 10:50:30 +01:00
|
|
|
const capitalise = s => s.substring(0, 1).toUpperCase() + s.substring(1)
|
|
|
|
const get_name = s => last(s.split("/"))
|
2020-02-10 16:51:09 +01:00
|
|
|
|
|
|
|
const get_capitalised_name = name =>
|
|
|
|
pipe(
|
|
|
|
name,
|
|
|
|
[get_name, capitalise]
|
|
|
|
)
|
2020-01-24 12:32:13 +01:00
|
|
|
</script>
|
|
|
|
|
2020-01-28 22:17:04 +01:00
|
|
|
<ul>
|
|
|
|
{#each components as component}
|
2020-02-03 10:50:30 +01:00
|
|
|
<li on:click|stopPropagation={() => onSelect(component)}>
|
|
|
|
<span
|
|
|
|
class="item"
|
|
|
|
class:selected={currentComponent === component}
|
|
|
|
style="padding-left: {level * 20 + 67}px">
|
2020-01-28 22:17:04 +01:00
|
|
|
{get_capitalised_name(component._component)}
|
|
|
|
</span>
|
2020-01-24 12:32:13 +01:00
|
|
|
|
|
|
|
{#if component._children}
|
2020-02-03 10:50:30 +01:00
|
|
|
<svelte:self
|
|
|
|
components={component._children}
|
|
|
|
{currentComponent}
|
|
|
|
{onSelect}
|
|
|
|
level={level + 1} />
|
2020-01-24 12:32:13 +01:00
|
|
|
{/if}
|
|
|
|
</li>
|
2020-01-28 22:17:04 +01:00
|
|
|
{/each}
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<style>
|
|
|
|
ul {
|
|
|
|
list-style: none;
|
|
|
|
padding-left: 0;
|
|
|
|
margin: 0;
|
|
|
|
}
|
|
|
|
.item {
|
|
|
|
display: block;
|
|
|
|
padding: 11px 67px;
|
|
|
|
border-radius: 3px;
|
|
|
|
}
|
|
|
|
.item:hover {
|
|
|
|
background: #fafafa;
|
|
|
|
cursor: pointer;
|
|
|
|
}
|
|
|
|
.selected {
|
|
|
|
color: var(--button-text);
|
2020-02-03 10:50:30 +01:00
|
|
|
background: var(--background-button) !important;
|
2020-01-28 22:17:04 +01:00
|
|
|
}
|
|
|
|
</style>
|