diff --git a/packages/builder/cypress/integration/createTable.spec.js b/packages/builder/cypress/integration/createTable.spec.js index 0f57d56f3e..16ee67cc5b 100644 --- a/packages/builder/cypress/integration/createTable.spec.js +++ b/packages/builder/cypress/integration/createTable.spec.js @@ -27,6 +27,8 @@ context("Create a Table", () => { cy.get(".actions input") .first() .type("updated") + // Unset table display column + cy.contains("display column").click() cy.contains("Save Column").click() cy.contains("nameupdated").should("have.text", "nameupdated") }) diff --git a/packages/builder/cypress/support/commands.js b/packages/builder/cypress/support/commands.js index cf47051d38..e61f1b38e9 100644 --- a/packages/builder/cypress/support/commands.js +++ b/packages/builder/cypress/support/commands.js @@ -87,6 +87,8 @@ Cypress.Commands.add("addColumn", (tableName, columnName, type) => { cy.get("input") .first() .type(columnName) + // Unset table display column + cy.contains("display column").click() cy.get("select").select(type) cy.contains("Save").click() }) diff --git a/packages/builder/src/builderStore/store/backend.js b/packages/builder/src/builderStore/store/backend.js index d89796f9cc..f48b561ef0 100644 --- a/packages/builder/src/builderStore/store/backend.js +++ b/packages/builder/src/builderStore/store/backend.js @@ -91,10 +91,11 @@ export const getBackendUiStore = () => { return state }) }, - saveField: ({ originalName, field }) => { + saveField: ({ originalName, field, primaryDisplay = false }) => { store.update(state => { // delete the original if renaming - if (originalName) { + // need to handle if the column had no name, empty string + if (originalName || originalName === "") { delete state.draftTable.schema[originalName] state.draftTable._rename = { old: originalName, @@ -102,8 +103,12 @@ export const getBackendUiStore = () => { } } - state.draftTable.schema[field.name] = cloneDeep(field) + // Optionally set display column + if (primaryDisplay) { + state.draftTable.primaryDisplay = field.name + } + state.draftTable.schema[field.name] = cloneDeep(field) store.actions.tables.save(state.draftTable) return state }) diff --git a/packages/builder/src/components/backend/DataTable/popovers/ColumnPopover.svelte b/packages/builder/src/components/backend/DataTable/popovers/ColumnPopover.svelte index e4db32d900..2857b651c3 100644 --- a/packages/builder/src/components/backend/DataTable/popovers/ColumnPopover.svelte +++ b/packages/builder/src/components/backend/DataTable/popovers/ColumnPopover.svelte @@ -33,7 +33,7 @@ function deleteColumn() { if (field.name === $backendUiStore.selectedTable.primaryDisplay) { - notifier.danger("You cannot delete the primary display column") + notifier.danger("You cannot delete the display column") } else { backendUiStore.actions.tables.deleteField(field) notifier.success("Column deleted") @@ -43,7 +43,11 @@ function sort(direction, column) { backendUiStore.update(state => { - state.sort = { direction, column } + if (direction !== "none") { + state.sort = { direction, column } + } else { + state.sort = undefined + } return state }) hideEditor() @@ -70,6 +74,12 @@ Delete + {#if sortDirection === 'desc' || sortDirection === 'asc'} +
  • sort('none', field.name)}> + + Remove sort +
  • + {/if} {#if sortDirection === 'desc' || sortColumn !== field.name}
  • sort('asc', field.name)}> diff --git a/packages/builder/src/components/backend/DataTable/popovers/CreateEditColumnPopover.svelte b/packages/builder/src/components/backend/DataTable/popovers/CreateEditColumnPopover.svelte index 8fb843ee77..e803ca21cf 100644 --- a/packages/builder/src/components/backend/DataTable/popovers/CreateEditColumnPopover.svelte +++ b/packages/builder/src/components/backend/DataTable/popovers/CreateEditColumnPopover.svelte @@ -28,9 +28,15 @@ export let field = { type: "string", constraints: fieldDefinitions.STRING.constraints, + + // Initial value for column name in other table for linked records + fieldName: $backendUiStore.selectedTable.name, } let originalName = field.name + let primaryDisplay = + $backendUiStore.selectedTable.primaryDisplay == null || + $backendUiStore.selectedTable.primaryDisplay === field.name $: tableOptions = $backendUiStore.tables.filter( table => table._id !== $backendUiStore.draftTable._id ) @@ -41,6 +47,7 @@ backendUiStore.actions.tables.saveField({ originalName, field, + primaryDisplay, }) return state }) @@ -85,6 +92,13 @@ text="Required" /> {/if} + {#if field.type !== 'link'} + + {/if} + {#if field.type === 'string'} -