allow type editing on custom query datasource schemas

This commit is contained in:
Martin McKeaveney 2021-11-25 12:20:20 +01:00
parent 5abb36b1ed
commit e7e41a1743
1 changed files with 27 additions and 16 deletions

View File

@ -32,31 +32,22 @@
import { onMount } from "svelte" import { onMount } from "svelte"
export let query export let query
export let fields = []
let fields = query.schema ? schemaToFields(query.schema) : []
let parameters let parameters
let data = [] let data = []
let roleId let roleId
const transformerDocs = const transformerDocs =
"https://docs.budibase.com/building-apps/data/transformers" "https://docs.budibase.com/building-apps/data/transformers"
const typeOptions = [ const typeOptions = [
{ label: "Text", value: "STRING" }, { label: "Text", value: "string" },
{ label: "Number", value: "NUMBER" }, { label: "Number", value: "number" },
{ label: "Boolean", value: "BOOLEAN" }, { label: "Boolean", value: "boolean" },
{ label: "Datetime", value: "DATETIME" }, { label: "Datetime", value: "datetime" },
] ]
$: datasource = $datasources.list.find(ds => ds._id === query.datasourceId) $: datasource = $datasources.list.find(ds => ds._id === query.datasourceId)
$: query.schema = fields.reduce( $: query.schema = fieldsToSchema(fields)
(acc, next) => ({
...acc,
[next.name]: {
name: next.name,
type: "string",
},
}),
{}
)
$: datasourceType = datasource?.source $: datasourceType = datasource?.source
$: integrationInfo = $integrations[datasourceType] $: integrationInfo = $integrations[datasourceType]
$: queryConfig = integrationInfo?.query $: queryConfig = integrationInfo?.query
@ -135,7 +126,7 @@
// unique fields returned by the server // unique fields returned by the server
fields = json.schemaFields.map(field => ({ fields = json.schemaFields.map(field => ({
name: field, name: field,
type: "STRING", type: "string",
})) }))
} catch (err) { } catch (err) {
notifications.error(`Query Error: ${err.message}`) notifications.error(`Query Error: ${err.message}`)
@ -155,6 +146,26 @@
} }
} }
function schemaToFields(schema) {
return Object.keys(schema).map(key => ({
name: key,
type: query.schema[key].type,
}))
}
function fieldsToSchema(fieldsToConvert) {
return fieldsToConvert.reduce(
(acc, next) => ({
...acc,
[next.name]: {
name: next.name,
type: next.type,
},
}),
{}
)
}
onMount(async () => { onMount(async () => {
if (!query || !query._id) { if (!query || !query._id) {
roleId = Roles.BASIC roleId = Roles.BASIC