From 3b1819952d9eea37634902d05a9055af8e13087f Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Sat, 17 Dec 2022 14:13:06 +0000 Subject: [PATCH] Builder data section routing refactor (#8996) * Improve theming with spectrum badges and dedupe spectrum label usage * Update data section nav to match designs and use panel component * Fix main content layout in data section * Update data section routing for tables * Improve data section routing for tables to account for edge cases * Update internal and sample datasource routing * Update external datasource routing * Update routing for queries and make a top level concept like everything else * Update routing for views * Fix undefined reference when deleting datasource * Reduce network calls and fix issues with stale datasourcenavigator state * Update routing for REST queries and unify routes for normal queries and REST queries * Lint * Fix links for queries from datasource details page * Remove redundant API calls and improve table deletion logic * Improve data entity deletion logic and redirection and fix query details keying * Improve determination of selected item in datasource tree * Lint * Fix BBUI import * Fix datasource navigator selected state not working for internal DB or sample data --- packages/bbui/src/Badge/Badge.svelte | 13 + .../src/Table/RelationshipRenderer.svelte | 11 +- .../components/backend/DataTable/Table.svelte | 1 - .../DataTable/modals/CreateViewModal.svelte | 4 +- .../DatasourceNavigator.svelte | 132 ++++++---- .../popovers/EditDatasourcePopover.svelte | 19 +- .../popovers/EditQueryPopover.svelte | 16 +- .../TableNavigator/TableNavigator.svelte | 33 +-- .../popovers/EditTablePopover.svelte | 9 +- .../popovers/EditViewPopover.svelte | 7 +- .../src/components/design/Panel.svelte | 2 + .../integration}/DynamicVariableModal.svelte | 0 .../components/integration/QueryViewer.svelte | 245 +++++++++--------- .../integration}/RestBodyInput.svelte | 0 .../integration/RestQueryViewer.svelte} | 37 ++- packages/builder/src/helpers/urlStateSync.js | 19 +- .../app/[application]/data/_layout.svelte | 69 ++--- .../datasource/[datasourceId]/_layout.svelte | 23 ++ .../index.svelte | 52 ++-- .../[query]/_layout.svelte | 23 -- .../[selectedDatasource]/[query]/index.svelte | 39 --- .../[selectedDatasource]/_layout.svelte | 17 -- .../rest/[query]/_layout.svelte | 13 - .../datasource/bb_internal/_layout.svelte | 7 - .../data/datasource/bb_internal/index.svelte | 10 +- .../_layout.svelte | 8 - .../index.svelte | 19 +- .../data/datasource/index.svelte | 10 +- .../data/query/[queryId]/_layout.svelte | 22 ++ .../data/query/[queryId]/index.svelte | 18 ++ .../app/[application]/data/query/index.svelte | 16 ++ .../query/new/[datasourceId]/index.svelte | 38 +++ .../[application]/data/query/new/index.svelte | 5 + .../data/table/[selectedTable]/_layout.svelte | 13 - .../data/table/[tableId]/_layout.svelte | 20 ++ .../index.svelte | 6 +- .../[rowId]/[field]}/index.svelte | 6 +- .../relationship/[rowId]}/index.svelte | 0 .../relationship/index.svelte | 0 .../[application]/data/table/_layout.svelte | 19 -- .../app/[application]/data/table/index.svelte | 11 +- .../data/view/[selectedView]/_layout.svelte | 22 -- .../data/view/[viewName]/_layout.svelte | 20 ++ .../index.svelte | 0 .../app/[application]/data/view/index.svelte | 16 ++ .../builder/src/stores/backend/datasources.js | 160 ++++++------ .../builder/src/stores/backend/queries.js | 226 ++++++++-------- packages/builder/src/stores/backend/tables.js | 196 +++++++------- packages/builder/src/stores/backend/views.js | 88 ++++--- 49 files changed, 894 insertions(+), 846 deletions(-) rename packages/builder/src/{pages/builder/app/[application]/data/datasource/[selectedDatasource]/_components => components/integration}/DynamicVariableModal.svelte (100%) rename packages/builder/src/{pages/builder/app/[application]/data/datasource/[selectedDatasource]/_components => components/integration}/RestBodyInput.svelte (100%) rename packages/builder/src/{pages/builder/app/[application]/data/datasource/[selectedDatasource]/rest/[query]/index.svelte => components/integration/RestQueryViewer.svelte} (98%) create mode 100644 packages/builder/src/pages/builder/app/[application]/data/datasource/[datasourceId]/_layout.svelte rename packages/builder/src/pages/builder/app/[application]/data/datasource/{[selectedDatasource] => [datasourceId]}/index.svelte (87%) delete mode 100644 packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/[query]/_layout.svelte delete mode 100644 packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/[query]/index.svelte delete mode 100644 packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/_layout.svelte delete mode 100644 packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/rest/[query]/_layout.svelte delete mode 100644 packages/builder/src/pages/builder/app/[application]/data/datasource/bb_internal/_layout.svelte delete mode 100644 packages/builder/src/pages/builder/app/[application]/data/datasource/datasource_internal_bb_default/_layout.svelte create mode 100644 packages/builder/src/pages/builder/app/[application]/data/query/[queryId]/_layout.svelte create mode 100644 packages/builder/src/pages/builder/app/[application]/data/query/[queryId]/index.svelte create mode 100644 packages/builder/src/pages/builder/app/[application]/data/query/index.svelte create mode 100644 packages/builder/src/pages/builder/app/[application]/data/query/new/[datasourceId]/index.svelte create mode 100644 packages/builder/src/pages/builder/app/[application]/data/query/new/index.svelte delete mode 100644 packages/builder/src/pages/builder/app/[application]/data/table/[selectedTable]/_layout.svelte create mode 100644 packages/builder/src/pages/builder/app/[application]/data/table/[tableId]/_layout.svelte rename packages/builder/src/pages/builder/app/[application]/data/table/{[selectedTable] => [tableId]}/index.svelte (71%) rename packages/builder/src/pages/builder/app/[application]/data/table/{[selectedTable]/relationship/[selectedRow]/[selectedField] => [tableId]/relationship/[rowId]/[field]}/index.svelte (62%) rename packages/builder/src/pages/builder/app/[application]/data/table/{[selectedTable]/relationship/[selectedRow] => [tableId]/relationship/[rowId]}/index.svelte (100%) rename packages/builder/src/pages/builder/app/[application]/data/table/{[selectedTable] => [tableId]}/relationship/index.svelte (100%) delete mode 100644 packages/builder/src/pages/builder/app/[application]/data/table/_layout.svelte delete mode 100644 packages/builder/src/pages/builder/app/[application]/data/view/[selectedView]/_layout.svelte create mode 100644 packages/builder/src/pages/builder/app/[application]/data/view/[viewName]/_layout.svelte rename packages/builder/src/pages/builder/app/[application]/data/view/{[selectedView] => [viewName]}/index.svelte (100%) create mode 100644 packages/builder/src/pages/builder/app/[application]/data/view/index.svelte diff --git a/packages/bbui/src/Badge/Badge.svelte b/packages/bbui/src/Badge/Badge.svelte index 4bc701d983..8b54045297 100644 --- a/packages/bbui/src/Badge/Badge.svelte +++ b/packages/bbui/src/Badge/Badge.svelte @@ -10,10 +10,13 @@ export let green = false export let active = false export let inactive = false + export let hoverable = false + + diff --git a/packages/bbui/src/Table/RelationshipRenderer.svelte b/packages/bbui/src/Table/RelationshipRenderer.svelte index 4db0c63d95..b70eaeb07d 100644 --- a/packages/bbui/src/Table/RelationshipRenderer.svelte +++ b/packages/bbui/src/Table/RelationshipRenderer.svelte @@ -1,6 +1,7 @@ {#if $database?._id} @@ -44,8 +23,9 @@ border={idx > 0} icon={table._id === TableNames.USERS ? "UserGroup" : "Table"} text={table.name} - selected={$tables.selected?._id === table._id} - on:click={() => selectTable(table)} + selected={$isActive("./table/:tableId") && + $tables.selected?._id === table._id} + on:click={() => $goto(`./table/${table._id}`)} > {#if table._id !== TableNames.USERS} @@ -56,8 +36,9 @@ indentLevel={2} icon="Remove" text={viewName} - selected={selectedView === viewName} - on:click={() => onClickView(table, viewName)} + selected={$isActive("./view/:viewName") && + $views.selected?.name === viewName} + on:click={() => $goto(`./view/${viewName}`)} > - import { goto } from "@roxi/routify" + import { goto, params } from "@roxi/routify" import { store } from "builderStore" import { cloneDeep } from "lodash/fp" import { tables, datasources } from "stores/backend" @@ -41,17 +41,16 @@ } async function deleteTable() { - const wasSelectedTable = $tables.selected + const isSelected = $params.tableId === table._id try { await tables.delete(table) await store.actions.screens.delete(templateScreens) - await tables.fetch() if (table.type === "external") { await datasources.fetch() } notifications.success("Table deleted") - if (wasSelectedTable && wasSelectedTable._id === table._id) { - $goto("./table") + if (isSelected) { + $goto(`./datasource/${table.datasourceId}`) } } catch (error) { notifications.error("Error deleting table") diff --git a/packages/builder/src/components/backend/TableNavigator/popovers/EditViewPopover.svelte b/packages/builder/src/components/backend/TableNavigator/popovers/EditViewPopover.svelte index f543b34ddc..44eb1e9b7b 100644 --- a/packages/builder/src/components/backend/TableNavigator/popovers/EditViewPopover.svelte +++ b/packages/builder/src/components/backend/TableNavigator/popovers/EditViewPopover.svelte @@ -1,5 +1,5 @@ - - Query {integrationInfo?.friendlyName} - - Config -
-
- - -
- {#if queryConfig} -
- -
- Add a JavaScript function to transform the query result. - (query.transformer = e.detail)} - /> - -
-
- Results - - - - -
- - Below, you can preview the results from your query and change the schema. - -
- {#if data} - - - - - - - - - - - + {#if queryConfig} +
+ +