2020-09-25 15:47:42 +02:00
|
|
|
<script>
|
2020-10-05 13:20:59 +02:00
|
|
|
import { Button, Heading, Body, Spacer } from "@budibase/bbui"
|
2020-09-25 15:47:42 +02:00
|
|
|
import AppCard from "./AppCard.svelte"
|
|
|
|
import Spinner from "components/common/Spinner.svelte"
|
2020-09-28 18:04:08 +02:00
|
|
|
import api from "builderStore/api"
|
2020-09-25 15:47:42 +02:00
|
|
|
|
|
|
|
export let onSelect
|
|
|
|
|
2020-09-28 18:04:08 +02:00
|
|
|
async function fetchTemplates() {
|
|
|
|
const response = await api.get("/api/templates?type=app")
|
|
|
|
return await response.json()
|
2020-09-25 15:47:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
let templatesPromise = fetchTemplates()
|
|
|
|
</script>
|
|
|
|
|
2020-09-29 11:19:04 +02:00
|
|
|
<div class="root">
|
2020-10-05 13:20:59 +02:00
|
|
|
<Heading lh medium black>Start With a Template</Heading>
|
2020-09-29 11:19:04 +02:00
|
|
|
{#await templatesPromise}
|
|
|
|
<div class="spinner-container">
|
|
|
|
<Spinner size="30" />
|
|
|
|
</div>
|
2020-10-13 17:17:07 +02:00
|
|
|
{:then [object Object]}
|
2020-09-25 15:47:42 +02:00
|
|
|
<div class="templates">
|
|
|
|
{#each templates as template}
|
|
|
|
<div class="templates-card">
|
2020-10-05 13:20:59 +02:00
|
|
|
<Heading black small>{template.name}</Heading>
|
|
|
|
<Spacer small />
|
2020-09-29 11:19:04 +02:00
|
|
|
<Body medium grey>{template.category}</Body>
|
2020-10-05 13:20:59 +02:00
|
|
|
<Body lh small black>{template.description}</Body>
|
2020-09-29 11:19:04 +02:00
|
|
|
<div>
|
2020-10-05 13:20:59 +02:00
|
|
|
<img src={template.image} width="100%" />
|
2020-09-29 11:19:04 +02:00
|
|
|
</div>
|
2020-09-25 15:47:42 +02:00
|
|
|
<div class="card-footer">
|
|
|
|
<Button secondary on:click={() => onSelect(template)}>
|
|
|
|
Create {template.name}
|
|
|
|
</Button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
{/each}
|
|
|
|
</div>
|
2020-10-13 17:17:07 +02:00
|
|
|
{:catch [object Object]}
|
2020-09-29 11:19:04 +02:00
|
|
|
<h1 style="color:red">{err}</h1>
|
|
|
|
{/await}
|
|
|
|
</div>
|
2020-09-25 15:47:42 +02:00
|
|
|
|
|
|
|
<style>
|
|
|
|
.templates {
|
|
|
|
display: grid;
|
|
|
|
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
|
|
|
grid-gap: var(--layout-m);
|
|
|
|
justify-content: start;
|
|
|
|
}
|
|
|
|
|
|
|
|
.templates-card {
|
|
|
|
background-color: var(--white);
|
|
|
|
padding: var(--spacing-xl);
|
|
|
|
border-radius: var(--border-radius-m);
|
|
|
|
border: var(--border-dark);
|
|
|
|
}
|
|
|
|
|
2020-09-29 11:19:04 +02:00
|
|
|
.card-footer {
|
|
|
|
margin-top: var(--spacing-m);
|
|
|
|
}
|
|
|
|
|
2020-09-25 15:47:42 +02:00
|
|
|
h3 {
|
|
|
|
font-size: var(--font-size-l);
|
|
|
|
font-weight: 600;
|
|
|
|
color: var(--ink);
|
|
|
|
text-transform: capitalize;
|
|
|
|
}
|
|
|
|
</style>
|