Disallow googlesheets from using attachments and fix order of types.
This commit is contained in:
parent
cd7bec16c7
commit
f203711a56
|
@ -99,6 +99,31 @@
|
||||||
const autoColumnInfo = getAutoColumnInformation()
|
const autoColumnInfo = getAutoColumnInformation()
|
||||||
let optionsValid = true
|
let optionsValid = true
|
||||||
|
|
||||||
|
// a fixed order for the types to stop them moving around
|
||||||
|
// we've never really guaranteed an order to these, which means that
|
||||||
|
// they can move around very easily
|
||||||
|
const fixedTypeOrder = [
|
||||||
|
FIELDS.STRING,
|
||||||
|
FIELDS.NUMBER,
|
||||||
|
FIELDS.OPTIONS,
|
||||||
|
FIELDS.ARRAY,
|
||||||
|
FIELDS.BOOLEAN,
|
||||||
|
FIELDS.DATETIME,
|
||||||
|
FIELDS.LINK,
|
||||||
|
FIELDS.AI,
|
||||||
|
FIELDS.LONGFORM,
|
||||||
|
FIELDS.USER,
|
||||||
|
FIELDS.USERS,
|
||||||
|
FIELDS.ATTACHMENT_SINGLE,
|
||||||
|
FIELDS.ATTACHMENTS,
|
||||||
|
FIELDS.FORMULA,
|
||||||
|
FIELDS.JSON,
|
||||||
|
FIELDS.BARCODEQR,
|
||||||
|
FIELDS.SIGNATURE_SINGLE,
|
||||||
|
FIELDS.BIGINT,
|
||||||
|
FIELDS.AUTO,
|
||||||
|
]
|
||||||
|
|
||||||
$: rowGoldenSample = RowUtils.generateGoldenSample($rows)
|
$: rowGoldenSample = RowUtils.generateGoldenSample($rows)
|
||||||
$: aiEnabled =
|
$: aiEnabled =
|
||||||
$licensing.customAIConfigsEnabled || $licensing.budibaseAiEnabled
|
$licensing.customAIConfigsEnabled || $licensing.budibaseAiEnabled
|
||||||
|
@ -176,7 +201,7 @@
|
||||||
!editableColumn.autocolumn
|
!editableColumn.autocolumn
|
||||||
$: hasDefault =
|
$: hasDefault =
|
||||||
editableColumn?.default != null && editableColumn?.default !== ""
|
editableColumn?.default != null && editableColumn?.default !== ""
|
||||||
$: externalTable = table.sourceType === DB_TYPE_EXTERNAL
|
$: isExternalTable = table.sourceType === DB_TYPE_EXTERNAL
|
||||||
// in the case of internal tables the sourceId will just be undefined
|
// in the case of internal tables the sourceId will just be undefined
|
||||||
$: tableOptions = $tables.list.filter(
|
$: tableOptions = $tables.list.filter(
|
||||||
opt =>
|
opt =>
|
||||||
|
@ -187,10 +212,13 @@
|
||||||
(originalName &&
|
(originalName &&
|
||||||
SWITCHABLE_TYPES[field.type] &&
|
SWITCHABLE_TYPES[field.type] &&
|
||||||
!editableColumn?.autocolumn)
|
!editableColumn?.autocolumn)
|
||||||
$: allowedTypes = getAllowedTypes(datasource).map(t => ({
|
$: allowedTypes = getAllowedTypes(datasource, table).map(t => ({
|
||||||
fieldId: makeFieldId(t.type, t.subtype),
|
fieldId: makeFieldId(t.type, t.subtype),
|
||||||
...t,
|
...t,
|
||||||
}))
|
}))
|
||||||
|
$: orderedAllowedTypes = fixedTypeOrder.filter(ordered =>
|
||||||
|
allowedTypes.find(allowed => allowed.type === ordered.type)
|
||||||
|
)
|
||||||
$: defaultValueBindings = [
|
$: defaultValueBindings = [
|
||||||
{
|
{
|
||||||
type: "context",
|
type: "context",
|
||||||
|
@ -210,6 +238,20 @@
|
||||||
editableColumn.default
|
editableColumn.default
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const allTableFields = [
|
||||||
|
FIELDS.STRING,
|
||||||
|
FIELDS.NUMBER,
|
||||||
|
FIELDS.OPTIONS,
|
||||||
|
FIELDS.ARRAY,
|
||||||
|
FIELDS.BOOLEAN,
|
||||||
|
FIELDS.DATETIME,
|
||||||
|
FIELDS.LINK,
|
||||||
|
FIELDS.LONGFORM,
|
||||||
|
FIELDS.FORMULA,
|
||||||
|
FIELDS.BARCODEQR,
|
||||||
|
FIELDS.BIGINT,
|
||||||
|
]
|
||||||
|
|
||||||
const fieldDefinitions = Object.values(FIELDS).reduce(
|
const fieldDefinitions = Object.values(FIELDS).reduce(
|
||||||
// Storing the fields by complex field id
|
// Storing the fields by complex field id
|
||||||
(acc, field) => ({
|
(acc, field) => ({
|
||||||
|
@ -412,7 +454,11 @@
|
||||||
deleteColName = ""
|
deleteColName = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAllowedTypes(datasource) {
|
function getAllowedTypes(datasource, table) {
|
||||||
|
const isSqlTable = table.sql
|
||||||
|
const isGoogleSheet =
|
||||||
|
table.sourceType === DB_TYPE_EXTERNAL &&
|
||||||
|
datasource?.source === SourceName.GOOGLE_SHEETS
|
||||||
if (originalName) {
|
if (originalName) {
|
||||||
let possibleTypes = SWITCHABLE_TYPES[field.type] || [editableColumn.type]
|
let possibleTypes = SWITCHABLE_TYPES[field.type] || [editableColumn.type]
|
||||||
if (helpers.schema.isDeprecatedSingleUserColumn(editableColumn)) {
|
if (helpers.schema.isDeprecatedSingleUserColumn(editableColumn)) {
|
||||||
|
@ -442,59 +488,37 @@
|
||||||
.map(([_, fieldDefinition]) => fieldDefinition)
|
.map(([_, fieldDefinition]) => fieldDefinition)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!externalTable) {
|
if (!isExternalTable) {
|
||||||
return [
|
const fields = [
|
||||||
FIELDS.STRING,
|
...allTableFields,
|
||||||
FIELDS.NUMBER,
|
|
||||||
FIELDS.OPTIONS,
|
|
||||||
FIELDS.ARRAY,
|
|
||||||
FIELDS.BOOLEAN,
|
|
||||||
FIELDS.DATETIME,
|
|
||||||
FIELDS.LINK,
|
|
||||||
...(aiEnabled ? [FIELDS.AI] : []),
|
|
||||||
FIELDS.LONGFORM,
|
|
||||||
FIELDS.USER,
|
FIELDS.USER,
|
||||||
FIELDS.USERS,
|
FIELDS.USERS,
|
||||||
FIELDS.ATTACHMENT_SINGLE,
|
FIELDS.ATTACHMENT_SINGLE,
|
||||||
FIELDS.ATTACHMENTS,
|
FIELDS.ATTACHMENTS,
|
||||||
FIELDS.FORMULA,
|
|
||||||
FIELDS.JSON,
|
|
||||||
FIELDS.BARCODEQR,
|
|
||||||
FIELDS.SIGNATURE_SINGLE,
|
FIELDS.SIGNATURE_SINGLE,
|
||||||
FIELDS.BIGINT,
|
FIELDS.JSON,
|
||||||
FIELDS.AUTO,
|
FIELDS.AUTO,
|
||||||
]
|
]
|
||||||
} else {
|
if (aiEnabled) {
|
||||||
let fields = [
|
fields.push(FIELDS.AI)
|
||||||
FIELDS.STRING,
|
}
|
||||||
FIELDS.NUMBER,
|
return fields
|
||||||
FIELDS.OPTIONS,
|
}
|
||||||
FIELDS.ARRAY,
|
if (isExternalTable && isSqlTable) {
|
||||||
FIELDS.BOOLEAN,
|
return [
|
||||||
FIELDS.DATETIME,
|
...allTableFields,
|
||||||
FIELDS.LINK,
|
|
||||||
FIELDS.LONGFORM,
|
|
||||||
FIELDS.USER,
|
FIELDS.USER,
|
||||||
FIELDS.USERS,
|
FIELDS.USERS,
|
||||||
FIELDS.FORMULA,
|
|
||||||
FIELDS.BARCODEQR,
|
|
||||||
FIELDS.BIGINT,
|
|
||||||
FIELDS.ATTACHMENT_SINGLE,
|
FIELDS.ATTACHMENT_SINGLE,
|
||||||
FIELDS.ATTACHMENTS,
|
FIELDS.ATTACHMENTS,
|
||||||
FIELDS.SIGNATURE_SINGLE,
|
FIELDS.SIGNATURE_SINGLE,
|
||||||
]
|
]
|
||||||
|
} else if (isExternalTable && isGoogleSheet) {
|
||||||
// Filter out multiple users for google sheets
|
// google-sheets supports minimum set (no attachments or user references)
|
||||||
if (datasource?.source === SourceName.GOOGLE_SHEETS) {
|
return allTableFields
|
||||||
fields = fields.filter(x => x !== FIELDS.USERS)
|
} else if (isExternalTable && !isSqlTable) {
|
||||||
}
|
// filter out SQL-specific types for non-SQL datasources
|
||||||
|
return allTableFields.filter(x => x !== FIELDS.LINK && x !== FIELDS.ARRAY)
|
||||||
// Filter out SQL-specific types for non-SQL datasources
|
|
||||||
if (!table.sql) {
|
|
||||||
fields = fields.filter(x => x !== FIELDS.LINK && x !== FIELDS.ARRAY)
|
|
||||||
}
|
|
||||||
|
|
||||||
return fields
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -542,10 +566,10 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const newError = {}
|
const newError = {}
|
||||||
const prohibited = externalTable
|
const prohibited = isExternalTable
|
||||||
? PROTECTED_EXTERNAL_COLUMNS
|
? PROTECTED_EXTERNAL_COLUMNS
|
||||||
: PROTECTED_INTERNAL_COLUMNS
|
: PROTECTED_INTERNAL_COLUMNS
|
||||||
if (!externalTable && fieldInfo.name?.startsWith("_")) {
|
if (!isExternalTable && fieldInfo.name?.startsWith("_")) {
|
||||||
newError.name = `Column name cannot start with an underscore.`
|
newError.name = `Column name cannot start with an underscore.`
|
||||||
} else if (fieldInfo.name && !fieldInfo.name.match(ValidColumnNameRegex)) {
|
} else if (fieldInfo.name && !fieldInfo.name.match(ValidColumnNameRegex)) {
|
||||||
newError.name = `Illegal character; must be alpha-numeric.`
|
newError.name = `Illegal character; must be alpha-numeric.`
|
||||||
|
@ -614,7 +638,7 @@
|
||||||
disabled={!typeEnabled}
|
disabled={!typeEnabled}
|
||||||
bind:value={editableColumn.fieldId}
|
bind:value={editableColumn.fieldId}
|
||||||
on:change={onHandleTypeChange}
|
on:change={onHandleTypeChange}
|
||||||
options={allowedTypes}
|
options={orderedAllowedTypes}
|
||||||
getOptionLabel={field => field.name}
|
getOptionLabel={field => field.name}
|
||||||
getOptionValue={field => field.fieldId}
|
getOptionValue={field => field.fieldId}
|
||||||
getOptionIcon={field => field.icon}
|
getOptionIcon={field => field.icon}
|
||||||
|
@ -750,7 +774,7 @@
|
||||||
{errors}
|
{errors}
|
||||||
/>
|
/>
|
||||||
{:else if editableColumn.type === FieldType.FORMULA}
|
{:else if editableColumn.type === FieldType.FORMULA}
|
||||||
{#if !externalTable}
|
{#if !isExternalTable}
|
||||||
<div class="split-label">
|
<div class="split-label">
|
||||||
<div class="label-length">
|
<div class="label-length">
|
||||||
<Label size="M">Formula Type</Label>
|
<Label size="M">Formula Type</Label>
|
||||||
|
|
Loading…
Reference in New Issue