forked from tsai/budibase
7 changed files with 139 additions and 96 deletions
@ -1,50 +1,25 @@ |
|||
<script> |
|||
import { onMount } from "svelte" |
|||
import AppCard from "./AppCard.svelte" |
|||
import { Heading, Divider } from "@budibase/bbui" |
|||
import Spinner from "components/common/Spinner.svelte" |
|||
import { get } from "builderStore/api" |
|||
import { apps } from "stores/portal" |
|||
|
|||
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) |
|||
} |
|||
} |
|||
onMount(apps.load) |
|||
</script> |
|||
|
|||
<div class="root"> |
|||
<Heading size="M">Your Apps</Heading> |
|||
<Divider size="M" /> |
|||
{#await promise} |
|||
<div class="spinner-container"> |
|||
<Spinner size="30" /> |
|||
</div> |
|||
{:then apps} |
|||
<div class="apps"> |
|||
{#each apps as app} |
|||
<AppCard {...app} /> |
|||
{/each} |
|||
</div> |
|||
{:catch err} |
|||
<h1 style="color:red">{err}</h1> |
|||
{/await} |
|||
</div> |
|||
{#if $apps.length} |
|||
<div class="appList"> |
|||
{#each $apps as app} |
|||
<AppCard {...app} /> |
|||
{/each} |
|||
</div> |
|||
{:else} |
|||
<div>No apps</div> |
|||
{/if} |
|||
|
|||
<style> |
|||
.root { |
|||
margin-top: 10px; |
|||
} |
|||
.apps { |
|||
margin-top: var(--layout-m); |
|||
.appList { |
|||
display: grid; |
|||
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); |
|||
grid-gap: var(--layout-s); |
|||
justify-content: start; |
|||
grid-gap: 50px; |
|||
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); |
|||
} |
|||
</style> |
|||
|
|||
@ -1,27 +1,58 @@ |
|||
<script> |
|||
import { Heading, Layout } from "@budibase/bbui" |
|||
import { |
|||
Heading, |
|||
Layout, |
|||
Button, |
|||
ActionButton, |
|||
ActionGroup, |
|||
Select, |
|||
} from "@budibase/bbui" |
|||
import AppList from "components/start/AppList.svelte" |
|||
|
|||
let layout = "grid" |
|||
</script> |
|||
|
|||
<Layout noPadding> |
|||
<div> |
|||
<div class="title"> |
|||
<Heading>Apps</Heading> |
|||
<Button primary>Create new app</Button> |
|||
</div> |
|||
<div class="appList"> |
|||
{#each new Array(10) as _} |
|||
<div class="app" /> |
|||
{/each} |
|||
<div class="filter"> |
|||
<div class="select"> |
|||
<Select quiet placeholder="Filter by groups" /> |
|||
</div> |
|||
<ActionGroup> |
|||
<ActionButton |
|||
on:click={() => (layout = "grid")} |
|||
selected={layout === "grid"} |
|||
quiet |
|||
icon="ClassicGridView" |
|||
/> |
|||
<ActionButton |
|||
on:click={() => (layout = "table")} |
|||
selected={layout === "table"} |
|||
quiet |
|||
icon="ViewRow" |
|||
/> |
|||
</ActionGroup> |
|||
</div> |
|||
{#if layout === "grid"} |
|||
<AppList /> |
|||
{:else} |
|||
Table |
|||
{/if} |
|||
</Layout> |
|||
|
|||
<style> |
|||
.appList { |
|||
display: grid; |
|||
grid-gap: 50px; |
|||
grid-template-columns: repeat(auto-fill, 300px); |
|||
.title, |
|||
.filter { |
|||
display: flex; |
|||
flex-direction: row; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
} |
|||
.app { |
|||
height: 130px; |
|||
border-radius: 4px; |
|||
background-color: var(--spectrum-global-color-gray-200); |
|||
|
|||
.select { |
|||
width: 110px; |
|||
} |
|||
</style> |
|||
|
|||
@ -0,0 +1,27 @@ |
|||
import { writable } from "svelte/store" |
|||
import { get } from "builderStore/api" |
|||
|
|||
export function createAppStore() { |
|||
const store = writable([]) |
|||
|
|||
async function load() { |
|||
try { |
|||
const res = await get("/api/applications") |
|||
const json = await res.json() |
|||
if (res.ok && Array.isArray(json)) { |
|||
store.set(json) |
|||
} else { |
|||
store.set([]) |
|||
} |
|||
} catch (error) { |
|||
store.set([]) |
|||
} |
|||
} |
|||
|
|||
return { |
|||
subscribe: store.subscribe, |
|||
load, |
|||
} |
|||
} |
|||
|
|||
export const apps = createAppStore() |
|||
@ -1,2 +1,3 @@ |
|||
export { organisation } from "./organisation" |
|||
export { admin } from "./admin" |
|||
export { apps } from "./apps" |
|||
|
|||
Loading…
Reference in new issue