forked from tsai/budibase
10 changed files with 41 additions and 191 deletions
@ -1,138 +0,0 @@ |
|||
<script> |
|||
import { isRootComponent } from "./pagesParsing/searchComponents" |
|||
import { splitName } from "./pagesParsing/splitRootComponentName.js" |
|||
import { store } from "../builderStore" |
|||
import { find, sortBy } from "lodash/fp" |
|||
|
|||
export let onComponentChosen |
|||
export let onGeneratorChosen |
|||
export let allowGenerators |
|||
|
|||
let screens = [] |
|||
let componentLibraries = [] |
|||
|
|||
const addRootComponent = (c, all, isGenerator) => { |
|||
const { libName } = splitName(c.name) |
|||
let group = find(r => r.libName === libName)(all) |
|||
|
|||
if (!group) { |
|||
group = { |
|||
libName, |
|||
components: [], |
|||
generators: [], |
|||
} |
|||
|
|||
all.push(group) |
|||
} |
|||
|
|||
if (isGenerator) { |
|||
group.generators.push(c) |
|||
} else { |
|||
group.components.push(c) |
|||
} |
|||
} |
|||
|
|||
$: { |
|||
const newComponentLibraries = [] |
|||
const newscreens = [] |
|||
|
|||
for (let comp of sortBy(["name"])($store.components)) { |
|||
if (isRootComponent(comp)) { |
|||
addRootComponent(comp, newComponentLibraries, false) |
|||
} else { |
|||
newscreens.push(comp) |
|||
} |
|||
} |
|||
|
|||
for (let generator of $store.generators) { |
|||
addRootComponent(generator, newComponentLibraries, true) |
|||
} |
|||
|
|||
screens = sortBy(["name"])(newscreens) |
|||
componentLibraries = newComponentLibraries |
|||
} |
|||
</script> |
|||
|
|||
{#each componentLibraries as lib} |
|||
<div class="library-header">{lib.libName}</div> |
|||
|
|||
<div class="library-container"> |
|||
|
|||
{#if allowGenerators} |
|||
<div class="inner-header">Generators</div> |
|||
|
|||
{#each lib.generators as generator} |
|||
<div class="component" on:click={() => onGeneratorChosen(generator)}> |
|||
<div class="name">{splitName(generator.name).componentName}</div> |
|||
<div class="description">{generator.description}</div> |
|||
</div> |
|||
{/each} |
|||
{/if} |
|||
|
|||
<div class="inner-header">Components</div> |
|||
|
|||
{#each lib.components as component} |
|||
<div class="component" on:click={() => onComponentChosen(component)}> |
|||
<div class="name">{splitName(component.name).componentName}</div> |
|||
<div class="description">{component.description}</div> |
|||
</div> |
|||
{/each} |
|||
|
|||
</div> |
|||
{/each} |
|||
|
|||
<div class="library-header">My Components</div> |
|||
|
|||
<div class="library-container"> |
|||
|
|||
{#each screens as component} |
|||
<div class="component" on:click={() => onComponentChosen(component)}> |
|||
<div class="name">{component.name}</div> |
|||
<div class="description">{component.description}</div> |
|||
</div> |
|||
{/each} |
|||
|
|||
</div> |
|||
|
|||
<style> |
|||
.library-header { |
|||
font-size: 1.1em; |
|||
border-color: var(--primary25); |
|||
border-width: 1px 0px; |
|||
border-style: solid; |
|||
background-color: var(--primary10); |
|||
padding: 5px 0; |
|||
} |
|||
|
|||
.library-container { |
|||
padding: 0 0 10px 10px; |
|||
} |
|||
|
|||
.inner-header { |
|||
font-size: 0.9em; |
|||
font-weight: bold; |
|||
margin-top: 7px; |
|||
margin-bottom: 3px; |
|||
} |
|||
|
|||
.component { |
|||
padding: 2px 0px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.component:hover { |
|||
background-color: var(--lightslate); |
|||
} |
|||
|
|||
.component > .name { |
|||
color: var(--secondary100); |
|||
display: inline-block; |
|||
} |
|||
|
|||
.component > .description { |
|||
font-size: 0.8em; |
|||
color: var(--secondary75); |
|||
display: inline-block; |
|||
margin-left: 10px; |
|||
} |
|||
</style> |
|||
Loading…
Reference in new issue