Merge pull request #1193 from Budibase/bug/0.8.1-bugs

Bug/0.8.1 bugs
This commit is contained in:
Martin McKeaveney 2021-02-25 16:34:58 +00:00 committed by GitHub
commit e9c9a89d4d
5 changed files with 49 additions and 18 deletions

View File

@ -28,10 +28,8 @@
.flat() .flat()
// Prevent modal closing if there were errors // Prevent modal closing if there were errors
return false return false
} } else if (rowResponse.status === 400 || rowResponse.status === 500) {
errors = [{ message: rowResponse.message }]
if (rowResponse.status === 500) {
notifier.danger(rowResponse.message)
return false return false
} }

View File

@ -60,7 +60,7 @@
.flat() .flat()
} }
return false return false
} else if (rowResponse.status === 400 && rowResponse.message) { } else if (rowResponse.status === 400 || rowResponse.status === 500) {
errors = [{ message: rowResponse.message }] errors = [{ message: rowResponse.message }]
return false return false
} }

View File

@ -43,16 +43,6 @@
</Label> </Label>
{:else} {:else}
{#if schema.relationshipType === 'one-to-many'} {#if schema.relationshipType === 'one-to-many'}
<Multiselect
secondary
bind:value={linkedIds}
{label}
placeholder="Choose some options">
{#each rows as row}
<option value={row._id}>{getPrettyName(row)}</option>
{/each}
</Multiselect>
{:else}
<Select <Select
thin thin
secondary secondary
@ -66,5 +56,15 @@
</option> </option>
{/each} {/each}
</Select> </Select>
{:else}
<Multiselect
secondary
bind:value={linkedIds}
{label}
placeholder="Choose some options">
{#each rows as row}
<option value={row._id}>{getPrettyName(row)}</option>
{/each}
</Multiselect>
{/if} {/if}
{/if} {/if}

View File

@ -7,6 +7,7 @@ const {
DocumentTypes, DocumentTypes,
SEPARATOR, SEPARATOR,
ViewNames, ViewNames,
generateUserID,
} = require("../../db/utils") } = require("../../db/utils")
const usersController = require("./user") const usersController = require("./user")
const { const {
@ -140,7 +141,11 @@ exports.save = async function(ctx) {
} }
if (!inputs._rev && !inputs._id) { if (!inputs._rev && !inputs._id) {
inputs._id = generateRowID(inputs.tableId) if (inputs.tableId === ViewNames.USERS) {
inputs._id = generateUserID(inputs.email)
} else {
inputs._id = generateRowID(inputs.tableId)
}
} }
// this returns the table and row incase they have been updated // this returns the table and row incase they have been updated

View File

@ -3,7 +3,6 @@ const { IncludeDocs, getLinkDocuments } = require("./linkUtils")
const { generateLinkID } = require("../utils") const { generateLinkID } = require("../utils")
const Sentry = require("@sentry/node") const Sentry = require("@sentry/node")
const { FieldTypes, RelationshipTypes } = require("../../constants") const { FieldTypes, RelationshipTypes } = require("../../constants")
const { isEqual } = require("lodash")
/** /**
* Creates a new link document structure which can be put to the database. It is important to * Creates a new link document structure which can be put to the database. It is important to
@ -133,6 +132,19 @@ class LinkController {
} }
} }
/**
* Returns whether the two schemas are equal (in the important parts, not a pure equality check)
*/
areSchemasEqual(schema1, schema2) {
const compareFields = ["name", "type", "tableId", "fieldName", "autocolumn"]
for (let field of compareFields) {
if (schema1[field] !== schema2[field]) {
return false
}
}
return true
}
// all operations here will assume that the table // all operations here will assume that the table
// this operation is related to has linked rows // this operation is related to has linked rows
/** /**
@ -310,12 +322,28 @@ class LinkController {
tableId: table._id, tableId: table._id,
fieldName: fieldName, fieldName: fieldName,
} }
if (field.autocolumn) { if (field.autocolumn) {
linkConfig.autocolumn = field.autocolumn linkConfig.autocolumn = field.autocolumn
} }
if (field.relationshipType) {
// Ensure that the other side of the relationship is locked to one record
linkConfig.relationshipType = field.relationshipType
// Update this table to be the many
table.schema[field.name].relationshipType =
RelationshipTypes.MANY_TO_MANY
const response = await this._db.put(table)
table._rev = response.rev
}
// check the linked table to make sure we aren't overwriting an existing column // check the linked table to make sure we aren't overwriting an existing column
const existingSchema = linkedTable.schema[field.fieldName] const existingSchema = linkedTable.schema[field.fieldName]
if (existingSchema != null && !isEqual(existingSchema, linkConfig)) { if (
existingSchema != null &&
!this.areSchemasEqual(existingSchema, linkConfig)
) {
throw new Error("Cannot overwrite existing column.") throw new Error("Cannot overwrite existing column.")
} }
// create the link field in the other table // create the link field in the other table