forked from tsai/budibase
14 changed files with 73 additions and 203 deletions
@ -0,0 +1,17 @@ |
|||
<script> |
|||
import { setContext, onMount } from "svelte" |
|||
import { ContextTypes, createDataProviderStore } from "../context" |
|||
|
|||
export let row |
|||
|
|||
setContext("foo", "bar2") |
|||
|
|||
const dataProviderStore = createDataProviderStore() |
|||
setContext(ContextTypes.DataProvider, dataProviderStore) |
|||
|
|||
onMount(async () => { |
|||
await dataProviderStore.actions.setRow(row) |
|||
}) |
|||
</script> |
|||
|
|||
<slot /> |
|||
@ -0,0 +1 @@ |
|||
export { default as DataProvider } from "./DataProvider.svelte" |
|||
@ -1 +1,5 @@ |
|||
import { getContext } from "svelte" |
|||
|
|||
export const DataProvider = "bb-data-provider" |
|||
|
|||
export const asd = () => getContext(DataProvider) |
|||
|
|||
@ -1,24 +1,24 @@ |
|||
import { writable } from "svelte/store" |
|||
import { fetchTableDefinition } from "../api" |
|||
|
|||
export const createDataProviderContext = () => { |
|||
export const createDataProviderStore = () => { |
|||
const store = writable({ |
|||
rows: [], |
|||
row: {}, |
|||
table: null, |
|||
}) |
|||
const setRows = rows => { |
|||
store.update(state => { |
|||
state.rows = rows |
|||
return state |
|||
}) |
|||
} |
|||
const setTable = table => { |
|||
const setRow = async row => { |
|||
let table |
|||
if (row && row.tableId) { |
|||
table = await fetchTableDefinition(row.tableId) |
|||
} |
|||
store.update(state => { |
|||
state.row = row |
|||
state.table = table |
|||
return state |
|||
}) |
|||
} |
|||
return { |
|||
subscribe: store.subscribe, |
|||
actions: { setRows, setTable }, |
|||
actions: { setRow }, |
|||
} |
|||
} |
|||
|
|||
@ -1,30 +1,28 @@ |
|||
<script> |
|||
import { onMount, setContext } from "svelte" |
|||
import { onMount } from "svelte" |
|||
import { |
|||
fetchDatasource, |
|||
createDataProviderContext, |
|||
fetchTableDefinition, |
|||
ContextTypes, |
|||
styleable, |
|||
DataProvider, |
|||
} from "@budibase/component-sdk" |
|||
import { isEmpty } from "lodash/fp" |
|||
|
|||
export let datasource = [] |
|||
export let styles |
|||
|
|||
let target |
|||
|
|||
const dataProviderContext = createDataProviderContext() |
|||
setContext(ContextTypes.DataProvider, dataProviderContext) |
|||
let rows = [] |
|||
|
|||
onMount(async () => { |
|||
if (!isEmpty(datasource)) { |
|||
const rows = await fetchDatasource(datasource) |
|||
dataProviderContext.actions.setRows(rows) |
|||
if (datasource.tableId) { |
|||
const tableDefinition = await fetchTableDefinition(datasource.tableId) |
|||
dataProviderContext.actions.setTable(tableDefinition) |
|||
} |
|||
rows = await fetchDatasource(datasource) |
|||
} |
|||
}) |
|||
</script> |
|||
|
|||
<section bind:this={target} /> |
|||
<div use:styleable={styles}> |
|||
{#each rows as row} |
|||
<DataProvider {row}> |
|||
<slot /> |
|||
</DataProvider> |
|||
{/each} |
|||
</div> |
|||
|
|||
@ -1,32 +1,9 @@ |
|||
<script> |
|||
import { onMount } from "svelte" |
|||
import { fetchTableDefinition } from "@budibase/component-sdk" |
|||
import { DataProvider } from "@budibase/component-sdk" |
|||
|
|||
export let _bb |
|||
export let table |
|||
|
|||
let row = {} |
|||
|
|||
$: { |
|||
row.tableId = table |
|||
} |
|||
|
|||
let target |
|||
|
|||
onMount(async () => { |
|||
if (table && typeof table === "string") { |
|||
const tableObj = await fetchTableDefinition(table) |
|||
row.tableId = table |
|||
row._table = tableObj |
|||
_bb.attachChildren(target, { |
|||
context: row, |
|||
}) |
|||
} else { |
|||
_bb.attachChildren(target, { |
|||
context: {}, |
|||
}) |
|||
} |
|||
}) |
|||
</script> |
|||
|
|||
<section bind:this={target} /> |
|||
<DataProvider row={{ tableId: table }}> |
|||
<slot /> |
|||
</DataProvider> |
|||
|
|||
Loading…
Reference in new issue