budibase/packages/builder/src/pages/index.svelte

157 lines
3.3 KiB
Svelte
Raw Normal View History

<script>
2020-05-26 10:38:43 +02:00
import { getContext } from "svelte"
2020-05-07 11:53:34 +02:00
import { store } from "builderStore"
2020-04-02 15:16:46 +02:00
import AppList from "components/start/AppList.svelte"
import { onMount } from "svelte"
import ActionButton from "components/common/ActionButton.svelte"
2020-04-02 15:16:46 +02:00
import IconButton from "components/common/IconButton.svelte"
import { get } from "builderStore/api"
2020-04-02 15:16:46 +02:00
import Spinner from "components/common/Spinner.svelte"
2020-05-26 16:25:37 +02:00
import CreateAppModal from "components/start/CreateAppModal.svelte"
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)
}
}
2020-05-26 10:38:43 +02:00
// Handle create app modal
const { open } = getContext("simple-modal")
2020-05-26 16:25:37 +02:00
2020-05-26 10:38:43 +02:00
const showCreateAppModal = () => {
open(
2020-05-26 16:25:37 +02:00
CreateAppModal,
2020-05-26 10:38:43 +02:00
{
message: "What is your name?",
hasForm: true,
},
{
closeButton: false,
closeOnEsc: false,
closeOnOuterClick: false,
2020-05-26 16:25:37 +02:00
styleContent: { padding: 0 },
2020-05-27 12:54:53 +02:00
closeOnOuterClick: true,
2020-05-26 10:38:43 +02:00
}
)
}
</script>
2020-05-26 10:38:43 +02:00
<div class="welcome">Welcome to Budibase</div>
2020-05-26 10:38:43 +02:00
<div class="banner">
<img src="/_builder/assets/rocket.jpg" alt="rocket">
<div class="banner-content">
2020-05-26 10:38:43 +02:00
Every accomplishment starts with a decision to try.
</div>
</div>
<div class="app-section-header">
<div class="app-section-title">Your Web Apps</div>
<button class="banner-button" type="button" on:click={showCreateAppModal}>
<i class="ri-add-circle-fill" />
Create New Web App
</button>
</div>
2020-05-26 10:38:43 +02:00
{#await promise}
<div class="spinner-container">
<Spinner />
</div>
{:then result}
<AppList apps={result} />
{:catch err}
<h1 style="color:red">{err}</h1>
{/await}
<style>
.welcome {
font-size: 42px;
color: var(--ink);
font-weight: 900;
margin: 40px 0px 0px 80px;
}
.banner {
display: flex;
align-items: center;
justify-content: center;
position: relative;
text-align: center;
color: white;
margin: 20px 80px 40px 80px;
border-radius: 10px;
}
.banner img {
height: 250px;
width: 100%;
border-radius: 5px;
}
.banner-content {
position: absolute;
font-size: 24px;
color: var(--white);
font-weight: 500;
}
.spinner-container {
height: 100%;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.banner-button {
background-color: var(--ink);
color: var(--white);
padding: 12px 24px;
border-radius: 5px;
border: var(--ink) 1px solid;
font-size: 16px;
font-weight: 400;
box-sizing: border-box;
align-items: center;
display: flex;
cursor: pointer;
transition: all 0.2s ease 0s;
overflow: hidden;
outline: none;
user-select: none;
white-space: nowrap;
}
.ri-add-circle-fill {
margin-right: 4px;
font-size: 24px;
}
.banner-button:hover {
background-color: var(--white);
color: var(--ink);
border: var(--grey-dark) 1px solid;
}
.app-section-header {
display: flex;
justify-content: space-between;
align-items: center;
margin: 40px 80px 0px 80px;
}
.app-section-title {
font-size: 20px;
color: var(--ink);
font-weight: 700;
margin-bottom: 20px;
}
</style>