organise async logic on homepage, style template cards and add images
This commit is contained in:
parent
c2321797f1
commit
c83b1d4c35
|
@ -1,20 +1,44 @@
|
||||||
<script>
|
<script>
|
||||||
import AppCard from "./AppCard.svelte"
|
import AppCard from "./AppCard.svelte"
|
||||||
export let apps
|
import { Heading } from "@budibase/bbui"
|
||||||
|
import Spinner from "components/common/Spinner.svelte"
|
||||||
|
import { get } from "builderStore/api"
|
||||||
|
|
||||||
|
let promise = getApps()
|
||||||
|
|
||||||
|
async function getApps() {
|
||||||
|
const res = await get("/api/applications")
|
||||||
|
const json = await res.json()
|
||||||
|
|
||||||
|
if (res.ok) {
|
||||||
|
return json
|
||||||
|
} else {
|
||||||
|
throw new Error(json)
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="root">
|
<div class="root">
|
||||||
<div class="inner">
|
<Heading medium black>Your Apps</Heading>
|
||||||
<div>
|
{#await promise}
|
||||||
|
<div class="spinner-container">
|
||||||
|
<Spinner size="30" />
|
||||||
|
</div>
|
||||||
|
{:then apps}
|
||||||
|
<div class="inner">
|
||||||
<div>
|
<div>
|
||||||
<div class="apps">
|
<div>
|
||||||
{#each apps as app}
|
<div class="apps">
|
||||||
<AppCard {...app} />
|
{#each apps as app}
|
||||||
{/each}
|
<AppCard {...app} />
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{:catch err}
|
||||||
|
<h1 style="color:red">{err}</h1>
|
||||||
|
{/await}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<script>
|
<script>
|
||||||
import { Input } from "@budibase/bbui"
|
import { Input, Heading, Body } from "@budibase/bbui"
|
||||||
export let validationErrors
|
export let validationErrors
|
||||||
export let template
|
export let template
|
||||||
|
|
||||||
|
@ -7,10 +7,9 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if template}
|
{#if template}
|
||||||
<h2>Selected Template</h2>
|
<Heading small black>Selected Template</Heading>
|
||||||
<h4>{template.name}</h4>
|
<Body>{template.name}</Body>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<h2>Create your web app</h2>
|
<h2>Create your web app</h2>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<Input
|
<Input
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<script>
|
<script>
|
||||||
import { Button, Heading } from "@budibase/bbui"
|
import { Button, Heading, Body } from "@budibase/bbui"
|
||||||
import AppCard from "./AppCard.svelte"
|
import AppCard from "./AppCard.svelte"
|
||||||
import Spinner from "components/common/Spinner.svelte"
|
import Spinner from "components/common/Spinner.svelte"
|
||||||
import api from "builderStore/api"
|
import api from "builderStore/api"
|
||||||
|
@ -14,18 +14,22 @@
|
||||||
let templatesPromise = fetchTemplates()
|
let templatesPromise = fetchTemplates()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#await templatesPromise}
|
<div class="root">
|
||||||
<div class="spinner-container">
|
<Heading medium black>Start With a Template</Heading>
|
||||||
<Spinner />
|
{#await templatesPromise}
|
||||||
</div>
|
<div class="spinner-container">
|
||||||
{:then templates}
|
<Spinner size="30" />
|
||||||
<div class="root">
|
</div>
|
||||||
<Heading small black>Budibase Templates</Heading>
|
{:then templates}
|
||||||
<div class="templates">
|
<div class="templates">
|
||||||
{#each templates as template}
|
{#each templates as template}
|
||||||
<div class="templates-card">
|
<div class="templates-card">
|
||||||
<h3 class="template-title">{template.name}</h3>
|
<Heading black medium>{template.name}</Heading>
|
||||||
<Heading extraSmall black>{template.description}</Heading>
|
<Body medium grey>{template.category}</Body>
|
||||||
|
<Body small black>{template.description}</Body>
|
||||||
|
<div>
|
||||||
|
<img src={template.image} width="300" />
|
||||||
|
</div>
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
<Button secondary on:click={() => onSelect(template)}>
|
<Button secondary on:click={() => onSelect(template)}>
|
||||||
Create {template.name}
|
Create {template.name}
|
||||||
|
@ -34,10 +38,10 @@
|
||||||
</div>
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{:catch err}
|
||||||
{:catch err}
|
<h1 style="color:red">{err}</h1>
|
||||||
<h1 style="color:red">{err}</h1>
|
{/await}
|
||||||
{/await}
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.templates {
|
.templates {
|
||||||
|
@ -50,12 +54,14 @@
|
||||||
.templates-card {
|
.templates-card {
|
||||||
background-color: var(--white);
|
background-color: var(--white);
|
||||||
padding: var(--spacing-xl);
|
padding: var(--spacing-xl);
|
||||||
max-width: 300px;
|
|
||||||
max-height: 150px;
|
|
||||||
border-radius: var(--border-radius-m);
|
border-radius: var(--border-radius-m);
|
||||||
border: var(--border-dark);
|
border: var(--border-dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.card-footer {
|
||||||
|
margin-top: var(--spacing-m);
|
||||||
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-size: var(--font-size-l);
|
font-size: var(--font-size-l);
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
|
|
@ -5,25 +5,11 @@
|
||||||
import AppList from "components/start/AppList.svelte"
|
import AppList from "components/start/AppList.svelte"
|
||||||
import { onMount } from "svelte"
|
import { onMount } from "svelte"
|
||||||
import ActionButton from "components/common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import { get } from "builderStore/api"
|
|
||||||
import Spinner from "components/common/Spinner.svelte"
|
import Spinner from "components/common/Spinner.svelte"
|
||||||
import CreateAppModal from "components/start/CreateAppModal.svelte"
|
import CreateAppModal from "components/start/CreateAppModal.svelte"
|
||||||
import TemplateList from "components/start/TemplateList.svelte"
|
import TemplateList from "components/start/TemplateList.svelte"
|
||||||
import { Button } from "@budibase/bbui"
|
import { Button } from "@budibase/bbui"
|
||||||
|
|
||||||
let promise = getApps()
|
|
||||||
|
|
||||||
async function getApps() {
|
|
||||||
const res = await get("/api/applications")
|
|
||||||
const json = await res.json()
|
|
||||||
|
|
||||||
if (res.ok) {
|
|
||||||
return json
|
|
||||||
} else {
|
|
||||||
throw new Error(json)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let hasKey
|
let hasKey
|
||||||
|
|
||||||
async function fetchKeys() {
|
async function fetchKeys() {
|
||||||
|
@ -34,7 +20,6 @@
|
||||||
|
|
||||||
async function checkIfKeysAndApps() {
|
async function checkIfKeysAndApps() {
|
||||||
const key = await fetchKeys()
|
const key = await fetchKeys()
|
||||||
const apps = await getApps()
|
|
||||||
if (key) {
|
if (key) {
|
||||||
hasKey = true
|
hasKey = true
|
||||||
} else {
|
} else {
|
||||||
|
@ -79,17 +64,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#await promise}
|
<TemplateList onSelect={showCreateAppModal} />
|
||||||
<div class="spinner-container">
|
<AppList />
|
||||||
<Spinner />
|
|
||||||
</div>
|
|
||||||
{:then result}
|
|
||||||
<!-- TODO: organise async for template list - make sure the template list is loaded when the app list is being loaded -->
|
|
||||||
<TemplateList onSelect={showCreateAppModal} />
|
|
||||||
<AppList apps={result} />
|
|
||||||
{:catch err}
|
|
||||||
<h1 style="color:red">{err}</h1>
|
|
||||||
{/await}
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.header {
|
.header {
|
||||||
|
@ -128,12 +104,4 @@
|
||||||
color: var(--white);
|
color: var(--white);
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
.spinner-container {
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -28,7 +28,7 @@ exports.downloadTemplate = async function(ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.exportTemplateFromApp = async function(ctx) {
|
exports.exportTemplateFromApp = async function(ctx) {
|
||||||
const { appId, instanceId } = ctx.user.appId
|
const { appId, instanceId } = ctx.user
|
||||||
const { templateName } = ctx.request.body
|
const { templateName } = ctx.request.body
|
||||||
|
|
||||||
await exportTemplateFromApp({
|
await exportTemplateFromApp({
|
||||||
|
|
Loading…
Reference in New Issue