|
|
|
@ -1,8 +1,9 @@ |
|
|
|
<script> |
|
|
|
import { onMount } from "svelte" |
|
|
|
import { get } from "svelte/store" |
|
|
|
import { goto } from "@roxi/routify" |
|
|
|
import { BUDIBASE_INTERNAL_DB } from "constants" |
|
|
|
import { database, datasources, queries } from "stores/backend" |
|
|
|
import { database, datasources, queries, tables } from "stores/backend" |
|
|
|
import EditDatasourcePopover from "./popovers/EditDatasourcePopover.svelte" |
|
|
|
import EditQueryPopover from "./popovers/EditQueryPopover.svelte" |
|
|
|
import NavItem from "components/common/NavItem.svelte" |
|
|
|
@ -10,6 +11,13 @@ |
|
|
|
import ICONS from "./icons" |
|
|
|
|
|
|
|
let openDataSources = [] |
|
|
|
$: enrichedDataSources = $datasources.list.map(datasource => ({ |
|
|
|
...datasource, |
|
|
|
open: |
|
|
|
openDataSources.includes(datasource._id) || |
|
|
|
containsActiveTable(datasource), |
|
|
|
selected: $datasources.selected === datasource._id, |
|
|
|
})) |
|
|
|
|
|
|
|
function selectDatasource(datasource) { |
|
|
|
toggleNode(datasource) |
|
|
|
@ -35,16 +43,28 @@ |
|
|
|
datasources.fetch() |
|
|
|
queries.fetch() |
|
|
|
}) |
|
|
|
|
|
|
|
const containsActiveTable = datasource => { |
|
|
|
const activeTableId = get(tables).selected?._id |
|
|
|
if (!datasource.entities) { |
|
|
|
return false |
|
|
|
} |
|
|
|
let tableOptions = datasource.entities |
|
|
|
if (!Array.isArray(tableOptions)) { |
|
|
|
tableOptions = Object.values(tableOptions) |
|
|
|
} |
|
|
|
return tableOptions.find(x => x._id === activeTableId) != null |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
{#if $database?._id} |
|
|
|
<div class="hierarchy-items-container"> |
|
|
|
{#each $datasources.list as datasource, idx} |
|
|
|
{#each enrichedDataSources as datasource, idx} |
|
|
|
<NavItem |
|
|
|
border={idx > 0} |
|
|
|
text={datasource.name} |
|
|
|
opened={openDataSources.includes(datasource._id)} |
|
|
|
selected={$datasources.selected === datasource._id} |
|
|
|
opened={datasource.open} |
|
|
|
selected={datasource.selected} |
|
|
|
withArrow={true} |
|
|
|
on:click={() => selectDatasource(datasource)} |
|
|
|
on:iconClick={() => toggleNode(datasource)} |
|
|
|
@ -61,7 +81,7 @@ |
|
|
|
{/if} |
|
|
|
</NavItem> |
|
|
|
|
|
|
|
{#if openDataSources.includes(datasource._id)} |
|
|
|
{#if datasource.open} |
|
|
|
<TableNavigator sourceId={datasource._id} /> |
|
|
|
{/if} |
|
|
|
|
|
|
|
|