|
|
@ -6,29 +6,30 @@ |
|
|
const { API, styleable, DataProvider, builderStore } = getContext("sdk") |
|
|
const { API, styleable, DataProvider, builderStore } = getContext("sdk") |
|
|
const component = getContext("component") |
|
|
const component = getContext("component") |
|
|
|
|
|
|
|
|
export let datasource = [] |
|
|
export let table = [] |
|
|
|
|
|
export let columns = [] |
|
|
|
|
|
export let pageSize = 50 |
|
|
|
|
|
export let noRowsMessage = "Feed me some data" |
|
|
|
|
|
|
|
|
let rows = [] |
|
|
let rows = [] |
|
|
let loaded = false |
|
|
let loaded = false |
|
|
let table |
|
|
// let searchableFields = [] |
|
|
let searchableFields = [] |
|
|
|
|
|
let search = {} |
|
|
let search = {} |
|
|
|
|
|
let tableDefinition |
|
|
|
|
|
let schema = {} |
|
|
|
|
|
|
|
|
$: schema = table?.schema || {} |
|
|
$: columns = Object.keys(schema).filter(key => schema[key].searchable) |
|
|
$: searchableFields = Object.keys(schema).filter( |
|
|
|
|
|
key => schema[key].searchable |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
$: console.log(search) |
|
|
$: fetchData(table) |
|
|
|
|
|
|
|
|
$: fetchData(datasource) |
|
|
async function fetchData(table) { |
|
|
|
|
|
if (!isEmpty(table)) { |
|
|
async function fetchData(datasource) { |
|
|
const tableDef = await API.fetchTableDefinition(table) |
|
|
if (!isEmpty(datasource)) { |
|
|
schema = tableDef.schema |
|
|
table = await API.fetchTableDefinition(datasource.tableId) |
|
|
rows = await API.searchTable({ |
|
|
rows = await API.fetchDatasource({ |
|
|
tableId: table, |
|
|
...datasource, |
|
|
search, |
|
|
search |
|
|
pageSize, |
|
|
}) |
|
|
}) |
|
|
} |
|
|
} |
|
|
loaded = true |
|
|
loaded = true |
|
|
@ -37,7 +38,7 @@ |
|
|
|
|
|
|
|
|
<div use:styleable={$component.styles}> |
|
|
<div use:styleable={$component.styles}> |
|
|
<div class="query-builder"> |
|
|
<div class="query-builder"> |
|
|
{#each searchableFields as field} |
|
|
{#each columns as field} |
|
|
<div class="form-field"> |
|
|
<div class="form-field"> |
|
|
<Label extraSmall grey>{schema[field].name}</Label> |
|
|
<Label extraSmall grey>{schema[field].name}</Label> |
|
|
{#if schema[field].type === 'options'} |
|
|
{#if schema[field].type === 'options'} |
|
|
@ -50,9 +51,7 @@ |
|
|
<!-- {:else if schema[field].type === 'datetime'} |
|
|
<!-- {:else if schema[field].type === 'datetime'} |
|
|
<DatePicker bind:value={search[field]} /> ---> |
|
|
<DatePicker bind:value={search[field]} /> ---> |
|
|
{:else if schema[field].type === 'boolean'} |
|
|
{:else if schema[field].type === 'boolean'} |
|
|
<Toggle |
|
|
<Toggle text={schema[field].name} bind:checked={search[field]} /> |
|
|
text={schema[field].name} |
|
|
|
|
|
bind:checked={search[field]} /> |
|
|
|
|
|
{:else if schema[field].type === 'number'} |
|
|
{:else if schema[field].type === 'number'} |
|
|
<Input type="number" bind:value={search[field]} /> |
|
|
<Input type="number" bind:value={search[field]} /> |
|
|
{:else if schema[field].type === 'string'} |
|
|
{:else if schema[field].type === 'string'} |
|
|
@ -60,11 +59,15 @@ |
|
|
{/if} |
|
|
{/if} |
|
|
</div> |
|
|
</div> |
|
|
{/each} |
|
|
{/each} |
|
|
<Button blue on:click={() => fetchData(datasource)}>Search</Button> |
|
|
<Button blue on:click={() => fetchData(table)}>Search</Button> |
|
|
<Button red on:click={() => { |
|
|
<Button |
|
|
search = {} |
|
|
red |
|
|
fetchData(datasource) |
|
|
on:click={() => { |
|
|
}}>Reset</Button> |
|
|
search = {} |
|
|
|
|
|
fetchData(table) |
|
|
|
|
|
}}> |
|
|
|
|
|
Reset |
|
|
|
|
|
</Button> |
|
|
</div> |
|
|
</div> |
|
|
{#if rows.length > 0} |
|
|
{#if rows.length > 0} |
|
|
{#if $component.children === 0 && $builderStore.inBuilder} |
|
|
{#if $component.children === 0 && $builderStore.inBuilder} |
|
|
@ -77,7 +80,7 @@ |
|
|
{/each} |
|
|
{/each} |
|
|
{/if} |
|
|
{/if} |
|
|
{:else if loaded && $builderStore.inBuilder} |
|
|
{:else if loaded && $builderStore.inBuilder} |
|
|
<p>Feed me some data</p> |
|
|
<p>{noRowsMessage}</p> |
|
|
{/if} |
|
|
{/if} |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
|