diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte index 1c64dfe5ec..c67ce67d57 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte @@ -277,10 +277,7 @@ dispatch("updatecolumns") gridDispatch("close-edit-column") - if ( - saveColumn.type === LINK_TYPE && - saveColumn.relationshipType === RelationshipType.MANY_TO_MANY - ) { + if (saveColumn.type === LINK_TYPE) { // Fetching the new tables tables.fetch() // Fetching the new relationships @@ -312,6 +309,11 @@ confirmDeleteDialog.hide() dispatch("updatecolumns") gridDispatch("close-edit-column") + + if (editableColumn.type === LINK_TYPE) { + // Updating the relationships + datasources.fetch() + } } } catch (error) { notifications.error(`Error deleting column: ${error.message}`) diff --git a/packages/builder/src/components/backend/Datasources/CreateEditRelationship.svelte b/packages/builder/src/components/backend/Datasources/CreateEditRelationship.svelte index 9c98bdc2e5..9e42dfecd9 100644 --- a/packages/builder/src/components/backend/Datasources/CreateEditRelationship.svelte +++ b/packages/builder/src/components/backend/Datasources/CreateEditRelationship.svelte @@ -57,7 +57,8 @@ label: table.name, value: table._id, })) - $: valid = getErrorCount(errors) === 0 && allRequiredAttributesSet() + $: valid = + getErrorCount(errors) === 0 && allRequiredAttributesSet(relationshipType) $: isManyToMany = relationshipType === RelationshipType.MANY_TO_MANY $: isManyToOne = relationshipType === RelationshipType.MANY_TO_ONE @@ -114,7 +115,7 @@ return Object.entries(errors).filter(entry => !!entry[1]).length } - function allRequiredAttributesSet() { + function allRequiredAttributesSet(relationshipType) { const base = getTable(fromId) && getTable(toId) && fromColumn && toColumn if (relationshipType === RelationshipType.MANY_TO_ONE) { return base && fromPrimary && fromForeign @@ -124,9 +125,10 @@ } function validate() { - if (!allRequiredAttributesSet() && !hasValidated) { + if (!allRequiredAttributesSet(relationshipType) && !hasValidated) { return } + hasValidated = true errorChecker.setType(relationshipType) const fromTable = getTable(fromId), diff --git a/packages/builder/src/pages/builder/app/[application]/data/datasource/[datasourceId]/_components/panels/Relationships.svelte b/packages/builder/src/pages/builder/app/[application]/data/datasource/[datasourceId]/_components/panels/Relationships.svelte index 384b87e11d..1a46ecb540 100644 --- a/packages/builder/src/pages/builder/app/[application]/data/datasource/[datasourceId]/_components/panels/Relationships.svelte +++ b/packages/builder/src/pages/builder/app/[application]/data/datasource/[datasourceId]/_components/panels/Relationships.svelte @@ -21,15 +21,22 @@ function getRelationships(tables) { const relatedColumns = {} - tables.forEach(({ name: tableName, schema }) => { + tables.forEach(({ name: tableName, schema, _id: tableId }) => { Object.values(schema).forEach(column => { if (column.type !== "link") return - relatedColumns[column._id] ??= {} - relatedColumns[column._id].through = - relatedColumns[column._id].through || column.through + const columnId = + column.through || + column._id || + (column.main + ? `${tableId}_${column.fieldName}__${column.tableId}_${column.foreignKey}` + : `${column.tableId}_${column.foreignKey}__${tableId}_${column.fieldName}`) - relatedColumns[column._id][column.main ? "from" : "to"] = { + relatedColumns[columnId] ??= {} + relatedColumns[columnId].through = + relatedColumns[columnId].through || column.through + + relatedColumns[columnId][column.main ? "from" : "to"] = { ...column, tableName, }