1
0
Fork 0
mirror of synced 2024-06-03 02:55:14 +12:00
budibase/packages/builder/src/components/backend/DatasourceNavigator/DatasourceNavigator.svelte

90 lines
2.6 KiB
Svelte
Raw Normal View History

2020-12-19 07:19:43 +13:00
<script>
import { onMount } from "svelte"
2021-03-18 00:40:24 +13:00
import { goto } from "@roxi/routify"
import { BUDIBASE_INTERNAL_DB } from "constants"
2021-06-19 00:33:44 +12:00
import { database, datasources, queries } from "stores/backend"
2020-12-19 07:19:43 +13:00
import EditDatasourcePopover from "./popovers/EditDatasourcePopover.svelte"
2021-01-07 01:28:51 +13:00
import EditQueryPopover from "./popovers/EditQueryPopover.svelte"
2020-12-19 07:19:43 +13:00
import NavItem from "components/common/NavItem.svelte"
import TableNavigator from "components/backend/TableNavigator/TableNavigator.svelte"
2021-01-13 05:49:11 +13:00
import ICONS from "./icons"
2020-12-19 07:19:43 +13:00
let openDataSources = []
2020-12-19 07:19:43 +13:00
function selectDatasource(datasource) {
toggleNode(datasource)
datasources.select(datasource._id)
2020-12-19 07:19:43 +13:00
$goto(`./datasource/${datasource._id}`)
}
2021-01-19 04:37:32 +13:00
function onClickQuery(query) {
queries.select(query)
2021-01-19 04:37:32 +13:00
$goto(`./datasource/${query.datasourceId}/${query._id}`)
2020-12-19 07:19:43 +13:00
}
function toggleNode(datasource) {
const isOpen = openDataSources.includes(datasource._id)
if (isOpen) {
openDataSources = openDataSources.filter(id => datasource._id !== id)
} else {
openDataSources = [...openDataSources, datasource._id]
}
}
2020-12-19 07:19:43 +13:00
onMount(() => {
datasources.fetch()
queries.fetch()
2020-12-19 07:19:43 +13:00
})
</script>
{#if $database?._id}
2020-12-19 07:19:43 +13:00
<div class="hierarchy-items-container">
{#each $datasources.list as datasource, idx}
2020-12-19 07:19:43 +13:00
<NavItem
border={idx > 0}
text={datasource.name}
opened={openDataSources.includes(datasource._id)}
selected={$datasources.selected === datasource._id}
withArrow={true}
on:click={() => selectDatasource(datasource)}
on:iconClick={() => toggleNode(datasource)}
>
2021-01-13 05:49:11 +13:00
<div class="datasource-icon" slot="icon">
<svelte:component
this={ICONS[datasource.source]}
height="18"
width="18"
/>
2021-01-13 05:49:11 +13:00
</div>
{#if datasource._id !== BUDIBASE_INTERNAL_DB}
<EditDatasourcePopover {datasource} />
{/if}
2020-12-19 07:19:43 +13:00
</NavItem>
{#if openDataSources.includes(datasource._id)}
<TableNavigator sourceId={datasource._id} />
{/if}
2021-05-04 22:32:22 +12:00
{#each $queries.list.filter(query => query.datasourceId === datasource._id) as query}
2020-12-19 07:19:43 +13:00
<NavItem
indentLevel={1}
icon="SQLQuery"
2021-01-07 01:28:51 +13:00
text={query.name}
opened={$queries.selected === query._id}
selected={$queries.selected === query._id}
on:click={() => onClickQuery(query)}
>
2021-01-07 01:28:51 +13:00
<EditQueryPopover {query} />
2020-12-19 07:19:43 +13:00
</NavItem>
{/each}
{/each}
</div>
{/if}
<style>
.datasource-icon {
margin-right: 3px;
padding-top: 3px;
}
</style>