budibase/packages/builder/src/components/backend/DataTable/DataTable.svelte

111 lines
3.0 KiB
Svelte
Raw Normal View History

2020-03-10 14:53:23 +01:00
<script>
import { tables } from "stores/backend"
import CreateRowButton from "./buttons/CreateRowButton.svelte"
import CreateColumnButton from "./buttons/CreateColumnButton.svelte"
import CreateViewButton from "./buttons/CreateViewButton.svelte"
import ExportButton from "./buttons/ExportButton.svelte"
2020-12-04 09:27:42 +01:00
import EditRolesButton from "./buttons/EditRolesButton.svelte"
2021-02-10 19:18:31 +01:00
import ManageAccessButton from "./buttons/ManageAccessButton.svelte"
2021-02-16 14:56:40 +01:00
import HideAutocolumnButton from "./buttons/HideAutocolumnButton.svelte"
import TableFilterButton from "./buttons/TableFilterButton.svelte"
import Table from "./Table.svelte"
2020-12-04 09:27:42 +01:00
import { TableNames } from "constants"
import CreateEditRow from "./modals/CreateEditRow.svelte"
import { fetchTableData } from "helpers/fetchTableData"
import { Pagination } from "@budibase/bbui"
2020-03-10 17:06:30 +01:00
let hideAutocolumns = true
$: isUsersTable = $tables.selected?._id === TableNames.USERS
$: schema = $tables.selected?.schema
$: type = $tables.selected?.type
$: isInternal = type !== "external"
$: id = $tables.selected?._id
$: search = searchTable(id)
$: columnOptions = Object.keys($search.schema || {})
// Fetches new data whenever the table changes
const searchTable = tableId => {
return fetchTableData({
tableId,
schema,
limit: 10,
paginate: true,
})
}
// Fetch data whenever sorting option changes
const onSort = e => {
2021-09-27 16:36:18 +02:00
search.update({
sortColumn: e.detail.column,
sortOrder: e.detail.order,
})
}
// Fetch data whenever filters change
const onFilter = e => {
search.update({
filters: e.detail,
})
}
2020-03-10 14:53:23 +01:00
</script>
<div>
<Table
title={$tables.selected?.name}
{schema}
{type}
tableId={id}
2021-09-27 16:36:18 +02:00
data={$search.rows}
bind:hideAutocolumns
2021-09-27 16:36:18 +02:00
loading={$search.loading}
on:sort={onSort}
allowEditing
disableSorting
>
{#if isInternal}
<CreateColumnButton />
{/if}
{#if schema && Object.keys(schema).length > 0}
{#if !isUsersTable}
<CreateRowButton
title={"Create row"}
modalContentComponent={CreateEditRow}
/>
{/if}
{#if isInternal}
<CreateViewButton />
{/if}
<ManageAccessButton resourceId={$tables.selected?._id} />
{#if isUsersTable}
<EditRolesButton />
{/if}
<HideAutocolumnButton bind:hideAutocolumns />
<!-- always have the export last -->
<ExportButton view={$tables.selected?._id} />
{#key id}
<TableFilterButton {schema} on:change={onFilter} />
{/key}
{/if}
</Table>
<div class="pagination">
<Pagination
2021-09-27 16:36:18 +02:00
page={$search.pageNumber + 1}
hasPrevPage={$search.hasPrevPage}
hasNextPage={$search.hasNextPage}
goToPrevPage={$search.loading ? null : search.prevPage}
goToNextPage={$search.loading ? null : search.nextPage}
/>
</div>
</div>
<style>
.pagination {
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: center;
margin-top: var(--spacing-xl);
}
</style>