diff --git a/packages/builder/src/components/backend/DataTable/ExternalDataSourceTable.svelte b/packages/builder/src/components/backend/DataTable/ExternalDataSourceTable.svelte
index a340f7c3c9..e0f429cb3b 100644
--- a/packages/builder/src/components/backend/DataTable/ExternalDataSourceTable.svelte
+++ b/packages/builder/src/components/backend/DataTable/ExternalDataSourceTable.svelte
@@ -4,11 +4,10 @@
import { notifier } from "builderStore/store/notifications"
import * as api from "./api"
import Table from "./Table.svelte"
- import CreateQueryButton from "components/backend/DataTable/buttons/CreateQueryButton.svelte"
export let query = {}
+ export let data = []
- let data = []
let loading = false
let error = false
@@ -17,7 +16,7 @@
loading = true
const response = await api.fetchDataForQuery(
$params.selectedDatasource,
- $params.query
+ query._id
)
data = response.rows || []
error = false
@@ -30,15 +29,13 @@
}
// Fetch rows for specified query
- $: query && fetchData()
+ // $: query && fetchData()
{#if error}
{error}
{/if}
-
+
diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditQuery.svelte b/packages/builder/src/components/integration/QueryViewer.svelte
similarity index 51%
rename from packages/builder/src/components/backend/DataTable/modals/CreateEditQuery.svelte
rename to packages/builder/src/components/integration/QueryViewer.svelte
index 024646757c..c8a34eb423 100644
--- a/packages/builder/src/components/backend/DataTable/modals/CreateEditQuery.svelte
+++ b/packages/builder/src/components/integration/QueryViewer.svelte
@@ -14,33 +14,40 @@
import api from "builderStore/api"
import { FIELDS } from "constants/backend"
import IntegrationQueryEditor from "components/integration/index.svelte"
+ import ExternalDataSourceTable from "components/backend/DataTable/ExternalDataSourceTable.svelte"
import { backendUiStore } from "builderStore"
const PREVIEW_HEADINGS = [
{
- title: "Preview",
- key: "PREVIEW",
+ title: "JSON",
+ key: "JSON",
},
{
title: "Schema",
key: "SCHEMA",
},
+ {
+ title: "Results",
+ key: "RESULTS",
+ },
+ {
+ title: "Preview",
+ key: "PREVIEW",
+ },
]
export let query
export let fields = []
let config = {}
- let previewTab = "PREVIEW"
- let preview
+ let tab = "JSON"
+ let parameters
+ let data
$: datasource = $backendUiStore.datasources.find(
ds => ds._id === query.datasourceId
)
- $: query.datasourceId =
- query.datasourceId || $backendUiStore.selectedDatasourceId
-
$: query.schema = fields.reduce(
(acc, next) => ({
...acc,
@@ -52,6 +59,9 @@
{}
)
+ $: datasourceType = datasource.source
+ $: datasourceType && fetchQueryConfig()
+
function newField() {
fields = [...fields, {}]
}
@@ -76,17 +86,18 @@
async function previewQuery() {
try {
const response = await api.post(`/api/queries/preview`, {
+ parameters: query.parameters,
datasourceId: datasource._id,
query: query.queryString,
})
const json = await response.json()
- if (response.status !== 200) {
- throw new Error(json.message)
- }
- preview = json[0] || {}
+
+ if (response.status !== 200) throw new Error(json.message)
+
+ data = json || []
// TODO: refactor
- fields = Object.keys(preview).map(field => ({
+ fields = Object.keys(json[0]).map(field => ({
name: field,
type: "STRING",
}))
@@ -96,15 +107,21 @@
}
}
- onMount(() => {
- fetchQueryConfig()
- })
+ async function saveQuery() {
+ try {
+ await backendUiStore.actions.queries.save(query.datasourceId, query)
+ notifier.success(`Query created successfully.`)
+ } catch (err) {
+ console.error(err)
+ notifier.danger(`Error creating query. ${err.message}`)
+ }
+ }
-
+
@@ -118,40 +135,43 @@
-
+
-
+
-
+
@@ -163,17 +183,6 @@
margin-bottom: var(--spacing-m);
}
- h6 {
- font-family: var(--font-sans);
- font-weight: 600;
- text-rendering: var(--text-render);
- color: var(--ink);
- font-size: var(--heading-font-size-xs);
- color: var(--ink);
- margin-bottom: var(--spacing-xs);
- margin-top: var(--spacing-xs);
- }
-
.config {
margin-bottom: var(--spacing-s);
}
@@ -185,7 +194,21 @@
.preview {
width: 800px;
+ height: 100%;
+ overflow-y: auto;
overflow-wrap: break-word;
white-space: pre-wrap;
}
+
+ .viewer {
+ position: relative;
+ }
+
+ .viewer-controls {
+ position: absolute;
+ right: 0;
+ display: grid;
+ grid-gap: var(--spacing-m);
+ grid-auto-flow: column;
+ }
diff --git a/packages/builder/src/components/integration/codemirror.js b/packages/builder/src/components/integration/codemirror.js
index 3b823a1c97..6d731ab9af 100644
--- a/packages/builder/src/components/integration/codemirror.js
+++ b/packages/builder/src/components/integration/codemirror.js
@@ -1,6 +1,7 @@
import CodeMirror from "codemirror"
import "codemirror/lib/codemirror.css"
import "codemirror/mode/sql/sql"
+import "codemirror/mode/css/css"
import "codemirror/mode/handlebars/handlebars"
import "codemirror/mode/javascript/javascript"
diff --git a/packages/builder/src/components/integration/index.svelte b/packages/builder/src/components/integration/index.svelte
index da301e3458..c133f4ff24 100644
--- a/packages/builder/src/components/integration/index.svelte
+++ b/packages/builder/src/components/integration/index.svelte
@@ -1,6 +1,6 @@
-
+Parameters
-{#if type === QueryTypes.SQL}
-
+{#if query.queryType === QueryTypes.SQL}
+
+
+
{/if}
+
+
diff --git a/packages/builder/src/components/userInterface/EventsEditor/actions/ExecuteQuery.svelte b/packages/builder/src/components/userInterface/EventsEditor/actions/ExecuteQuery.svelte
index 8195e16258..ccc15a743f 100644
--- a/packages/builder/src/components/userInterface/EventsEditor/actions/ExecuteQuery.svelte
+++ b/packages/builder/src/components/userInterface/EventsEditor/actions/ExecuteQuery.svelte
@@ -25,7 +25,7 @@
{/if}
diff --git a/packages/builder/src/pages/[application]/data/datasource/[selectedDatasource]/[query]/index.svelte b/packages/builder/src/pages/[application]/data/datasource/[selectedDatasource]/[query]/index.svelte
index 27e3845584..0f6c4825ab 100644
--- a/packages/builder/src/pages/[application]/data/datasource/[selectedDatasource]/[query]/index.svelte
+++ b/packages/builder/src/pages/[application]/data/datasource/[selectedDatasource]/[query]/index.svelte
@@ -1,12 +1,36 @@
-{#if $backendUiStore.selectedDatabase._id && query}
-
-{/if}
+
+ {#if $backendUiStore.selectedDatabase._id && query}
+
+ {/if}
+
+
+
diff --git a/packages/builder/src/pages/[application]/data/datasource/[selectedDatasource]/index.svelte b/packages/builder/src/pages/[application]/data/datasource/[selectedDatasource]/index.svelte
index c2f615c511..82756a2c2b 100644
--- a/packages/builder/src/pages/[application]/data/datasource/[selectedDatasource]/index.svelte
+++ b/packages/builder/src/pages/[application]/data/datasource/[selectedDatasource]/index.svelte
@@ -1,5 +1,6 @@
{#if datasource}
-
+ $goto('../new')}>
+
+ Create Query
+
{datasource.name}: Configuration
diff --git a/packages/server/src/api/controllers/datasource.js b/packages/server/src/api/controllers/datasource.js
index 87e22d2e8e..2cbe4fb107 100644
--- a/packages/server/src/api/controllers/datasource.js
+++ b/packages/server/src/api/controllers/datasource.js
@@ -60,6 +60,7 @@ exports.update = async function(ctx) {
}
exports.destroy = async function(ctx) {
+ // TODO: destroy all queries as well
const database = new CouchDB(ctx.user.appId)
await database.destroy(ctx.params.datasourceId)
ctx.message = `Datasource deleted.`
diff --git a/packages/server/src/api/controllers/query.js b/packages/server/src/api/controllers/query.js
index 229897debb..9c4b2cc8a8 100644
--- a/packages/server/src/api/controllers/query.js
+++ b/packages/server/src/api/controllers/query.js
@@ -51,7 +51,12 @@ exports.save = async function(ctx) {
}
exports.preview = async function(ctx) {
- const { query, datasourceId } = ctx.request.body
+ const { query, datasourceId, parameters } = ctx.request.body
+
+ const queryTemplate = handlebars.compile(query)
+ const parsedQuery = queryTemplate(parameters)
+
+ console.log(parsedQuery)
const db = new CouchDB(ctx.user.appId)
@@ -64,7 +69,7 @@ exports.preview = async function(ctx) {
return
}
- ctx.body = await new Integration(datasource.config, query).query()
+ ctx.body = await new Integration(datasource.config, parsedQuery).query()
}
exports.execute = async function(ctx) {