diff --git a/packages/builder/src/components/backend/DataTable/Table.svelte b/packages/builder/src/components/backend/DataTable/Table.svelte index 512324254c..1ffac83b1a 100644 --- a/packages/builder/src/components/backend/DataTable/Table.svelte +++ b/packages/builder/src/components/backend/DataTable/Table.svelte @@ -8,7 +8,11 @@ import CreateEditRow from "./modals/CreateEditRow.svelte" import CreateEditUser from "./modals/CreateEditUser.svelte" import CreateEditColumn from "./modals/CreateEditColumn.svelte" - import { TableNames, UNEDITABLE_USER_FIELDS } from "constants" + import { + TableNames, + UNEDITABLE_USER_FIELDS, + UNSORTABLE_TYPES, + } from "constants" import RoleCell from "./cells/RoleCell.svelte" export let schema = {} @@ -33,6 +37,15 @@ $: isUsersTable = tableId === TableNames.USERS $: data && resetSelectedRows() $: editRowComponent = isUsersTable ? CreateEditUser : CreateEditRow + $: { + UNSORTABLE_TYPES.forEach(type => { + Object.values(schema).forEach(col => { + if (col.type === type) { + col.sortable = false + } + }) + }) + } $: { if (isUsersTable) { customRenderers = [ diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte index ebfea9cee6..aa21799ca2 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte @@ -59,9 +59,6 @@ let deletion $: checkConstraints(field) - $: tableOptions = $tables.list.filter( - opt => opt._id !== $tables.draft._id && opt.type === table.type - ) $: required = !!field?.constraints?.presence || primaryDisplay $: uneditable = $tables.selected?._id === TableNames.USERS && @@ -88,6 +85,13 @@ field.type !== LINK_TYPE && !uneditable && field.type !== AUTO_TYPE $: relationshipOptions = getRelationshipOptions(field) $: external = table.type === "external" + // in the case of internal tables the sourceId will just be undefined + $: tableOptions = $tables.list.filter( + opt => + opt._id !== $tables.draft._id && + opt.type === table.type && + table.sourceId === opt.sourceId + ) async function saveColumn() { if (field.type === AUTO_TYPE) { @@ -174,7 +178,7 @@ if (!field || !field.tableId) { return null } - const linkTable = tableOptions.find(table => table._id === field.tableId) + const linkTable = tableOptions?.find(table => table._id === field.tableId) if (!linkTable) { return null } diff --git a/packages/builder/src/constants/index.js b/packages/builder/src/constants/index.js index c0d283b0ea..0470e03356 100644 --- a/packages/builder/src/constants/index.js +++ b/packages/builder/src/constants/index.js @@ -39,6 +39,8 @@ export const UNEDITABLE_USER_FIELDS = [ "lastName", ] +export const UNSORTABLE_TYPES = ["formula", "attachment", "array", "link"] + export const LAYOUT_NAMES = { MASTER: { PRIVATE: "layout_private_master", 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 b1867db248..6cbe0c8359 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 @@ -79,6 +79,10 @@ try { // Create datasource await datasources.save(datasource) + if (datasource?.plus) { + await tables.fetch() + } + await datasources.fetch() notifications.success(`Datasource ${name} updated successfully.`) } catch (err) { notifications.error(`Error saving datasource: ${err}`) diff --git a/packages/client/src/api/datasources.js b/packages/client/src/api/datasources.js index 467f9d8683..d2b05899cb 100644 --- a/packages/client/src/api/datasources.js +++ b/packages/client/src/api/datasources.js @@ -2,6 +2,7 @@ import { cloneDeep } from "lodash/fp" import { fetchTableData, fetchTableDefinition } from "./tables" import { fetchViewData } from "./views" import { fetchRelationshipData } from "./relationships" +import { FieldTypes } from "../constants" import { executeQuery, fetchQueryDefinition } from "./queries" /** @@ -28,7 +29,7 @@ export const fetchDatasource = async dataSource => { } } rows = await executeQuery({ queryId: dataSource._id, parameters }) - } else if (type === "link") { + } else if (type === FieldTypes.LINK) { rows = await fetchRelationshipData({ rowId: dataSource.rowId, tableId: dataSource.rowTableId, diff --git a/packages/client/src/api/rows.js b/packages/client/src/api/rows.js index acd083454d..7deec349e6 100644 --- a/packages/client/src/api/rows.js +++ b/packages/client/src/api/rows.js @@ -1,6 +1,7 @@ import { notificationStore, dataSourceStore } from "stores" import API from "./api" import { fetchTableDefinition } from "./tables" +import { FieldTypes } from "../constants" /** * Fetches data about a certain row in a table. @@ -129,7 +130,7 @@ export const enrichRows = async (rows, tableId) => { const keys = Object.keys(schema) for (let key of keys) { const type = schema[key].type - if (type === "link" && Array.isArray(row[key])) { + if (type === FieldTypes.LINK && Array.isArray(row[key])) { // Enrich row a string join of relationship fields row[`${key}_text`] = row[key] diff --git a/packages/client/src/components/app/Layout.svelte b/packages/client/src/components/app/Layout.svelte index 0ffbbf7ab1..87e5ac3b5b 100644 --- a/packages/client/src/components/app/Layout.svelte +++ b/packages/client/src/components/app/Layout.svelte @@ -1,6 +1,7 @@