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 DataProvider = "bb-data-provider" |
||||
|
|
||||
|
export const asd = () => getContext(DataProvider) |
||||
|
|||||
@ -1,24 +1,24 @@ |
|||||
import { writable } from "svelte/store" |
import { writable } from "svelte/store" |
||||
|
import { fetchTableDefinition } from "../api" |
||||
|
|
||||
export const createDataProviderContext = () => { |
export const createDataProviderStore = () => { |
||||
const store = writable({ |
const store = writable({ |
||||
rows: [], |
row: {}, |
||||
table: null, |
table: null, |
||||
}) |
}) |
||||
const setRows = rows => { |
const setRow = async row => { |
||||
store.update(state => { |
let table |
||||
state.rows = rows |
if (row && row.tableId) { |
||||
return state |
table = await fetchTableDefinition(row.tableId) |
||||
}) |
} |
||||
} |
|
||||
const setTable = table => { |
|
||||
store.update(state => { |
store.update(state => { |
||||
|
state.row = row |
||||
state.table = table |
state.table = table |
||||
return state |
return state |
||||
}) |
}) |
||||
} |
} |
||||
return { |
return { |
||||
subscribe: store.subscribe, |
subscribe: store.subscribe, |
||||
actions: { setRows, setTable }, |
actions: { setRow }, |
||||
} |
} |
||||
} |
} |
||||
|
|||||
@ -1,30 +1,28 @@ |
|||||
<script> |
<script> |
||||
import { onMount, setContext } from "svelte" |
import { onMount } from "svelte" |
||||
import { |
import { |
||||
fetchDatasource, |
fetchDatasource, |
||||
createDataProviderContext, |
styleable, |
||||
fetchTableDefinition, |
DataProvider, |
||||
ContextTypes, |
|
||||
} from "@budibase/component-sdk" |
} from "@budibase/component-sdk" |
||||
import { isEmpty } from "lodash/fp" |
import { isEmpty } from "lodash/fp" |
||||
|
|
||||
export let datasource = [] |
export let datasource = [] |
||||
|
export let styles |
||||
|
|
||||
let target |
let rows = [] |
||||
|
|
||||
const dataProviderContext = createDataProviderContext() |
|
||||
setContext(ContextTypes.DataProvider, dataProviderContext) |
|
||||
|
|
||||
onMount(async () => { |
onMount(async () => { |
||||
if (!isEmpty(datasource)) { |
if (!isEmpty(datasource)) { |
||||
const rows = await fetchDatasource(datasource) |
rows = await fetchDatasource(datasource) |
||||
dataProviderContext.actions.setRows(rows) |
|
||||
if (datasource.tableId) { |
|
||||
const tableDefinition = await fetchTableDefinition(datasource.tableId) |
|
||||
dataProviderContext.actions.setTable(tableDefinition) |
|
||||
} |
|
||||
} |
} |
||||
}) |
}) |
||||
</script> |
</script> |
||||
|
|
||||
<section bind:this={target} /> |
<div use:styleable={styles}> |
||||
|
{#each rows as row} |
||||
|
<DataProvider {row}> |
||||
|
<slot /> |
||||
|
</DataProvider> |
||||
|
{/each} |
||||
|
</div> |
||||
|
|||||
@ -1,32 +1,9 @@ |
|||||
<script> |
<script> |
||||
import { onMount } from "svelte" |
import { DataProvider } from "@budibase/component-sdk" |
||||
import { fetchTableDefinition } from "@budibase/component-sdk" |
|
||||
|
|
||||
export let _bb |
|
||||
export let table |
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> |
</script> |
||||
|
|
||||
<section bind:this={target} /> |
<DataProvider row={{ tableId: table }}> |
||||
|
<slot /> |
||||
|
</DataProvider> |
||||
|
|||||
Loading…
Reference in new issue