Fixing issues with table columns allowing weirdness to happen around casing, now only one column with a particular name can be specified, no matter what the case, but the case will be respected.
This commit is contained in:
parent
edb8cc2f52
commit
ca5f5f44ac
|
@ -1,4 +1,4 @@
|
||||||
import { writable } from "svelte/store"
|
import { writable, get } from "svelte/store"
|
||||||
import { cloneDeep } from "lodash/fp"
|
import { cloneDeep } from "lodash/fp"
|
||||||
import api from "../api"
|
import api from "../api"
|
||||||
|
|
||||||
|
@ -62,16 +62,30 @@ export const getBackendUiStore = () => {
|
||||||
}),
|
}),
|
||||||
save: async table => {
|
save: async table => {
|
||||||
const updatedTable = cloneDeep(table)
|
const updatedTable = cloneDeep(table)
|
||||||
|
const oldTable = get(store).tables.filter(t => t._id === table._id)[0]
|
||||||
|
|
||||||
|
const fieldNames = []
|
||||||
// update any renamed schema keys to reflect their names
|
// update any renamed schema keys to reflect their names
|
||||||
for (let key in updatedTable.schema) {
|
for (let key of Object.keys(updatedTable.schema)) {
|
||||||
|
// if field name has been seen before remove it
|
||||||
|
if (fieldNames.indexOf(key.toLowerCase()) !== -1) {
|
||||||
|
delete updatedTable.schema[key]
|
||||||
|
continue
|
||||||
|
}
|
||||||
const field = updatedTable.schema[key]
|
const field = updatedTable.schema[key]
|
||||||
|
const oldField = oldTable?.schema[key]
|
||||||
|
// if the type has changed then revert back to the old field
|
||||||
|
if (oldField != null && oldField.type !== field.type) {
|
||||||
|
updatedTable.schema[key] = oldField
|
||||||
|
}
|
||||||
// field has been renamed
|
// field has been renamed
|
||||||
if (field.name && field.name !== key) {
|
if (field.name && field.name !== key) {
|
||||||
updatedTable.schema[field.name] = field
|
updatedTable.schema[field.name] = field
|
||||||
updatedTable._rename = { old: key, updated: field.name }
|
updatedTable._rename = { old: key, updated: field.name }
|
||||||
delete updatedTable.schema[key]
|
delete updatedTable.schema[key]
|
||||||
}
|
}
|
||||||
|
// finally record this field has been used
|
||||||
|
fieldNames.push(key.toLowerCase())
|
||||||
}
|
}
|
||||||
|
|
||||||
const SAVE_TABLE_URL = `/api/tables`
|
const SAVE_TABLE_URL = `/api/tables`
|
||||||
|
|
|
@ -132,7 +132,6 @@
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
text-rendering: optimizeLegibility;
|
text-rendering: optimizeLegibility;
|
||||||
text-transform: capitalize;
|
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
|
|
|
@ -110,9 +110,6 @@
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: var(--spacing-xs);
|
gap: var(--spacing-xs);
|
||||||
}
|
}
|
||||||
.container span {
|
|
||||||
text-transform: capitalize;
|
|
||||||
}
|
|
||||||
|
|
||||||
h5 {
|
h5 {
|
||||||
padding: var(--spacing-xl) 0 0 var(--spacing-xl);
|
padding: var(--spacing-xl) 0 0 var(--spacing-xl);
|
||||||
|
|
|
@ -41,6 +41,18 @@ exports.save = async function(ctx) {
|
||||||
oldTable = await db.get(ctx.request.body._id)
|
oldTable = await db.get(ctx.request.body._id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make sure that types don't change of a column, have to remove
|
||||||
|
// the column if you want to change the type
|
||||||
|
if (oldTable && oldTable.schema) {
|
||||||
|
for (let propKey of Object.keys(tableToSave.schema)) {
|
||||||
|
let column = tableToSave.schema[propKey]
|
||||||
|
let oldColumn = oldTable.schema[propKey]
|
||||||
|
if (oldColumn && oldColumn.type !== column.type) {
|
||||||
|
ctx.throw(400, "Cannot change the type of a column")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Don't rename if the name is the same
|
// Don't rename if the name is the same
|
||||||
let { _rename } = tableToSave
|
let { _rename } = tableToSave
|
||||||
if (_rename && _rename.old === _rename.updated) {
|
if (_rename && _rename.old === _rename.updated) {
|
||||||
|
@ -50,9 +62,9 @@ exports.save = async function(ctx) {
|
||||||
|
|
||||||
// rename row fields when table column is renamed
|
// rename row fields when table column is renamed
|
||||||
if (_rename && tableToSave.schema[_rename.updated].type === "link") {
|
if (_rename && tableToSave.schema[_rename.updated].type === "link") {
|
||||||
throw "Cannot rename a linked field."
|
ctx.throw(400, "Cannot rename a linked column.")
|
||||||
} else if (_rename && tableToSave.primaryDisplay === _rename.old) {
|
} else if (_rename && tableToSave.primaryDisplay === _rename.old) {
|
||||||
throw "Cannot rename the display column."
|
ctx.throw(400, "Cannot rename the display column.")
|
||||||
} else if (_rename) {
|
} else if (_rename) {
|
||||||
const rows = await db.allDocs(
|
const rows = await db.allDocs(
|
||||||
getRowParams(tableToSave._id, null, {
|
getRowParams(tableToSave._id, null, {
|
||||||
|
|
Loading…
Reference in New Issue