budibase/packages/standard-components/src/DataList.svelte

83 lines
1.5 KiB
Svelte
Raw Normal View History

2020-05-07 23:15:09 +02:00
<script>
import { onMount } from "svelte"
export let _bb
export let model
export let layout = "list"
let headers = []
let store = _bb.store
async function fetchData() {
if (!model || !model.length) return
2020-06-18 17:59:31 +02:00
const FETCH_RECORDS_URL = `/api/views/all_${model}`
2020-05-07 23:15:09 +02:00
const response = await _bb.api.get(FETCH_RECORDS_URL)
if (response.status === 200) {
const json = await response.json()
store.update(state => {
state[model] = json
2020-05-07 23:15:09 +02:00
return state
2020-05-18 12:01:09 +02:00
})
2020-05-07 23:15:09 +02:00
} else {
throw new Error("Failed to fetch records.", response)
}
}
$: data = $store[model] || []
$: if (model) fetchData()
2020-05-07 23:15:09 +02:00
onMount(async () => {
await fetchData()
})
</script>
2020-05-18 12:01:09 +02:00
<section class:grid={layout === 'grid'} class:list={layout === 'list'}>
2020-05-07 23:15:09 +02:00
{#each data as data}
<div class="data-card">
<ul>
{#each Object.keys(data) as key}
<li>
2020-05-18 12:01:09 +02:00
<span class="data-key">{key}:</span>
<span class="data-value">{data[key]}</span>
2020-05-07 23:15:09 +02:00
</li>
{/each}
</ul>
</div>
{/each}
</section>
<style>
.list {
display: flex;
flex-direction: column;
font-family: Inter;
2020-05-07 23:15:09 +02:00
}
.grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
ul {
list-style-type: none;
}
li {
margin: 5px 0 5px 0;
}
.data-card {
border: 1px solid #ccc;
border-radius: 5px;
padding: 10px;
}
.data-key {
font-weight: bold;
font-size: 20px;
text-transform: capitalize;
}
</style>