diff --git a/packages/builder/src/components/backend/DataTable/DataTable.svelte b/packages/builder/src/components/backend/DataTable/DataTable.svelte
index 1af703800..6bebf2ca0 100644
--- a/packages/builder/src/components/backend/DataTable/DataTable.svelte
+++ b/packages/builder/src/components/backend/DataTable/DataTable.svelte
@@ -4,6 +4,7 @@
import CreateRowButton from "./buttons/CreateRowButton.svelte"
import CreateColumnButton from "./buttons/CreateColumnButton.svelte"
import CreateViewButton from "./buttons/CreateViewButton.svelte"
+ import ExistingRelationshipButton from "./buttons/ExistingRelationshipButton.svelte"
import ExportButton from "./buttons/ExportButton.svelte"
import EditRolesButton from "./buttons/EditRolesButton.svelte"
import ManageAccessButton from "./buttons/ManageAccessButton.svelte"
@@ -114,6 +115,12 @@
{#if isUsersTable}
{/if}
+ {#if !isInternal}
+
+ {/if}
diff --git a/packages/builder/src/components/backend/DataTable/buttons/ExistingRelationshipButton.svelte b/packages/builder/src/components/backend/DataTable/buttons/ExistingRelationshipButton.svelte
new file mode 100644
index 000000000..4a7abf487
--- /dev/null
+++ b/packages/builder/src/components/backend/DataTable/buttons/ExistingRelationshipButton.svelte
@@ -0,0 +1,54 @@
+
+
+{#if table.sourceId}
+
+
+ Define existing relationship
+
+
+
+
+
+{/if}
diff --git a/packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/CreateEditRelationship/CreateEditRelationship.svelte b/packages/builder/src/components/backend/Datasources/CreateEditRelationship.svelte
similarity index 92%
rename from packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/CreateEditRelationship/CreateEditRelationship.svelte
rename to packages/builder/src/components/backend/Datasources/CreateEditRelationship.svelte
index 583ca5e88..81032da71 100644
--- a/packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/CreateEditRelationship/CreateEditRelationship.svelte
+++ b/packages/builder/src/components/backend/Datasources/CreateEditRelationship.svelte
@@ -18,10 +18,19 @@
export let fromRelationship = {}
export let toRelationship = {}
export let close
+ export let selectedFromTable
let originalFromName = fromRelationship.name,
originalToName = toRelationship.name
+ if (fromRelationship && !fromRelationship.relationshipType) {
+ fromRelationship.relationshipType = RelationshipTypes.MANY_TO_ONE
+ }
+
+ if (toRelationship && selectedFromTable) {
+ toRelationship.tableId = selectedFromTable._id
+ }
+
function inSchema(table, prop, ogName) {
if (!table || !prop || prop === ogName) {
return false
@@ -114,6 +123,7 @@
},
]
$: updateRelationshipType(fromRelationship?.relationshipType)
+ $: tableChanged(fromTable, toTable)
function updateRelationshipType(fromType) {
if (fromType === RelationshipTypes.MANY_TO_MANY) {
@@ -205,7 +215,6 @@
originalToName = toRelationship.name
originalFromName = fromRelationship.name
await save()
- await tables.fetch()
}
async function deleteRelationship() {
@@ -215,10 +224,26 @@
await tables.fetch()
close()
}
+
+ function tableChanged(fromTbl, toTbl) {
+ fromRelationship.name = toTbl?.name || ""
+ errors.fromCol = ""
+ toRelationship.name = fromTbl?.name || ""
+ errors.toCol = ""
+ if (toTbl || fromTbl) {
+ checkForErrors(
+ fromTable,
+ toTable,
+ through,
+ fromRelationship,
+ toRelationship
+ )
+ }
+ }
($touched.from = true)}
bind:error={errors.from}
bind:value={toRelationship.tableId}
diff --git a/packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/CreateEditRelationship/TableSelect.svelte b/packages/builder/src/components/backend/Datasources/TableSelect.svelte
similarity index 100%
rename from packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/CreateEditRelationship/TableSelect.svelte
rename to packages/builder/src/components/backend/Datasources/TableSelect.svelte
diff --git a/packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/index.svelte b/packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/index.svelte
index 7c56d502e..9bd2e10a0 100644
--- a/packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/index.svelte
+++ b/packages/builder/src/pages/builder/app/[application]/data/datasource/[selectedDatasource]/index.svelte
@@ -8,11 +8,12 @@
Layout,
Modal,
InlineAlert,
+ ActionButton,
} from "@budibase/bbui"
import { datasources, integrations, queries, tables } from "stores/backend"
import { notifications } from "@budibase/bbui"
import IntegrationConfigForm from "components/backend/DatasourceNavigator/TableIntegrationMenu/IntegrationConfigForm.svelte"
- import CreateEditRelationship from "./CreateEditRelationship/CreateEditRelationship.svelte"
+ import CreateEditRelationship from "components/backend/Datasources/CreateEditRelationship.svelte"
import CreateExternalTableModal from "./modals/CreateExternalTableModal.svelte"
import DisplayColumnModal from "./modals/EditDisplayColumnsModal.svelte"
import ICONS from "components/backend/DatasourceNavigator/icons"
@@ -174,14 +175,24 @@
Tables
@@ -214,9 +225,15 @@
Tell budibase how your tables are related to get even more smart
@@ -331,7 +348,6 @@
.table-buttons {
display: grid;
- grid-gap: var(--spacing-l);
grid-template-columns: 1fr 1fr;
}
diff --git a/packages/builder/src/stores/backend/tables.js b/packages/builder/src/stores/backend/tables.js
index 7f90a04a0..baa9e38ab 100644
--- a/packages/builder/src/stores/backend/tables.js
+++ b/packages/builder/src/stores/backend/tables.js
@@ -11,6 +11,7 @@ export function createTablesStore() {
const tablesResponse = await api.get(`/api/tables`)
const tables = await tablesResponse.json()
update(state => ({ ...state, list: tables }))
+ return tables
}
async function select(table) {