Browse Source
Merge pull request #1156 from Budibase/external-data-source-fixes
External data source fixes
pull/1159/head
Martin McKeaveney
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with
20 additions and
10 deletions
-
packages/builder/src/components/backend/DatasourceNavigator/TableIntegrationMenu/IntegrationConfigForm.svelte
-
packages/builder/src/components/deploy/CreateWebhookDeploymentModal.svelte
-
packages/builder/src/components/integration/QueryViewer.svelte
-
packages/builder/src/pages/[application]/data/datasource/[selectedDatasource]/index.svelte
-
packages/server/src/api/controllers/query.js
-
packages/server/src/integrations/airtable.js
|
|
|
@ -3,13 +3,14 @@ |
|
|
|
import KeyValueBuilder from "components/integration/KeyValueBuilder.svelte" |
|
|
|
|
|
|
|
export let integration |
|
|
|
export let schema |
|
|
|
|
|
|
|
let unsaved = false |
|
|
|
</script> |
|
|
|
|
|
|
|
<form> |
|
|
|
{#each Object.keys(integration) as configKey} |
|
|
|
{#if typeof integration[configKey] === 'object'} |
|
|
|
{#each Object.keys(schema) as configKey} |
|
|
|
{#if typeof schema[configKey].type === 'object'} |
|
|
|
<Label small>{configKey}</Label> |
|
|
|
<Spacer small /> |
|
|
|
<KeyValueBuilder bind:object={integration[configKey]} on:change /> |
|
|
|
@ -18,7 +19,7 @@ |
|
|
|
<Label small>{configKey}</Label> |
|
|
|
<Input |
|
|
|
outline |
|
|
|
type={integration[configKey].type} |
|
|
|
type={schema[configKey].type} |
|
|
|
on:change |
|
|
|
bind:value={integration[configKey]} /> |
|
|
|
</div> |
|
|
|
|
|
|
|
@ -23,7 +23,7 @@ |
|
|
|
}) |
|
|
|
</script> |
|
|
|
|
|
|
|
<ModalContent title="Webhook Endpoints" confirmText="Done"> |
|
|
|
<ModalContent title="Webhook Endpoints" confirmText="OK" showCancelButton={false}> |
|
|
|
<p>See below the list of deployed webhook URLs.</p> |
|
|
|
{#each webhookUrls as webhookUrl} |
|
|
|
<div> |
|
|
|
|
|
|
|
@ -90,7 +90,7 @@ |
|
|
|
|
|
|
|
if (response.status !== 200) throw new Error(json.message) |
|
|
|
|
|
|
|
data = json || [] |
|
|
|
data = json.rows || [] |
|
|
|
|
|
|
|
if (data.length === 0) { |
|
|
|
notifier.info( |
|
|
|
@ -101,9 +101,9 @@ |
|
|
|
|
|
|
|
notifier.success("Query executed successfully.") |
|
|
|
|
|
|
|
// Assume all the fields are strings and create a basic schema |
|
|
|
// from the first record returned by the query |
|
|
|
fields = Object.keys(json[0]).map(field => ({ |
|
|
|
// Assume all the fields are strings and create a basic schema from the |
|
|
|
// unique fields returned by the server |
|
|
|
fields = json.schemaFields.map(field => ({ |
|
|
|
name: field, |
|
|
|
type: "STRING", |
|
|
|
})) |
|
|
|
|
|
|
|
@ -74,6 +74,7 @@ |
|
|
|
|
|
|
|
<Spacer extraLarge /> |
|
|
|
<IntegrationConfigForm |
|
|
|
schema={integration.datasource} |
|
|
|
integration={datasource.config} |
|
|
|
on:change={setUnsaved} /> |
|
|
|
<Spacer extraLarge /> |
|
|
|
|
|
|
|
@ -115,9 +115,17 @@ exports.preview = async function(ctx) { |
|
|
|
|
|
|
|
const enrichedQuery = await enrichQueryFields(fields, parameters) |
|
|
|
|
|
|
|
ctx.body = formatResponse( |
|
|
|
const rows = formatResponse( |
|
|
|
await new Integration(datasource.config)[queryVerb](enrichedQuery) |
|
|
|
) |
|
|
|
|
|
|
|
// get all the potential fields in the schema
|
|
|
|
const keys = rows.flatMap(Object.keys) |
|
|
|
|
|
|
|
ctx.body = { |
|
|
|
rows, |
|
|
|
schemaFields: [...new Set(keys)], |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
exports.execute = async function(ctx) { |
|
|
|
|
|
|
|
@ -8,7 +8,7 @@ const SCHEMA = { |
|
|
|
friendlyName: "Airtable", |
|
|
|
datasource: { |
|
|
|
apiKey: { |
|
|
|
type: FIELD_TYPES.STRING, |
|
|
|
type: FIELD_TYPES.PASSWORD, |
|
|
|
default: "enter api key", |
|
|
|
required: true, |
|
|
|
}, |
|
|
|
|