1
0
Fork 0
mirror of synced 2024-07-08 07:46:10 +12:00

Data fetching for datatable component

This commit is contained in:
cmack 2020-08-25 11:12:37 +01:00
parent cc8df3fad6
commit f8171b6018
2 changed files with 14 additions and 27 deletions

File diff suppressed because one or more lines are too long

View file

@ -4,15 +4,17 @@
import ArrowUp from "./icons/ArrowUp.svelte" import ArrowUp from "./icons/ArrowUp.svelte"
import ArrowDown from "./icons/ArrowDown.svelte" import ArrowDown from "./icons/ArrowDown.svelte"
import fsort from "fast-sort" import fsort from "fast-sort"
import fetchData from "./fetchData.js"
export let _bb export let _bb
export let onLoad
export let model
export let backgroundColor export let backgroundColor
export let color export let color
export let stripeColor export let stripeColor
export let borderColor export let borderColor
export let datasource = {}
let data = []
let headers = [] let headers = []
let store = _bb.store let store = _bb.store
let sort = {} let sort = {}
@ -25,9 +27,16 @@
borderColor, borderColor,
} }
$: data = $store[model] || []
$: sorted = sort.direction ? fsort(data)[sort.direction](sort.column) : data $: sorted = sort.direction ? fsort(data)[sort.direction](sort.column) : data
$: if (model) fetchData()
onMount(async () => {
if (datasource) {
data = await fetchData(datasource)
if (data) {
headers = Object.keys(data[0]).filter(shouldDisplayField)
}
}
})
const shouldDisplayField = name => { const shouldDisplayField = name => {
if (name.startsWith("_")) return false if (name.startsWith("_")) return false
@ -39,24 +48,6 @@
return true return true
} }
async function fetchData() {
const FETCH_RECORDS_URL = `/api/views/all_${model}`
const response = await _bb.api.get(FETCH_RECORDS_URL)
if (response.status === 200) {
const json = await response.json()
store.update(state => {
state[model] = json
return state
})
headers = Object.keys(json[0]).filter(shouldDisplayField)
} else {
throw new Error("Failed to fetch records.", response)
}
}
function sortColumn(column) { function sortColumn(column) {
if (column === sort.column) { if (column === sort.column) {
sort = { sort = {
@ -71,10 +62,6 @@
direction: "asc", direction: "asc",
} }
} }
onMount(async () => {
await fetchData()
})
</script> </script>
<table use:cssVars={cssVariables}> <table use:cssVars={cssVariables}>