diff --git a/packages/builder/src/components/backend/TableNavigator/TableDataImport.svelte b/packages/builder/src/components/backend/TableNavigator/TableDataImport.svelte
index 810d7960f5..293f52b487 100644
--- a/packages/builder/src/components/backend/TableNavigator/TableDataImport.svelte
+++ b/packages/builder/src/components/backend/TableNavigator/TableDataImport.svelte
@@ -5,7 +5,7 @@
import api from "builderStore/api"
const BYTES_IN_MB = 1000000
- const FILE_SIZE_LIMIT = BYTES_IN_MB * 1
+ const FILE_SIZE_LIMIT = BYTES_IN_MB * 5
export let files = []
export let dataImport = {
diff --git a/packages/builder/src/components/userInterface/EventsEditor/actions/RefreshComponent.svelte b/packages/builder/src/components/userInterface/EventsEditor/actions/RefreshComponent.svelte
new file mode 100644
index 0000000000..7b144bdf88
--- /dev/null
+++ b/packages/builder/src/components/userInterface/EventsEditor/actions/RefreshComponent.svelte
@@ -0,0 +1,40 @@
+
+
+
+
+
+
diff --git a/packages/client/src/api/datasources.js b/packages/client/src/api/datasources.js
index 1ea592c94c..f5adb0fc06 100644
--- a/packages/client/src/api/datasources.js
+++ b/packages/client/src/api/datasources.js
@@ -1,9 +1,11 @@
+import { get } from "svelte/store"
import { fetchTableData } from "./tables"
import { fetchViewData } from "./views"
import { fetchRelationshipData } from "./relationships"
import { executeQuery } from "./queries"
import { enrichRows } from "./rows"
import { enrichDataBindings } from "../utils/enrichDataBinding"
+import { bindingStore } from "../store/binding"
/**
* Fetches all rows for a particular Budibase data source.
@@ -21,12 +23,13 @@ export const fetchDatasource = async (datasource, dataContext) => {
} else if (type === "view") {
rows = await fetchViewData(datasource)
} else if (type === "query") {
- console.log("Query Datasource", datasource)
- console.log("Data Context", dataContext)
- // TODO: You left here
- const parameters = enrichDataBindings(datasource.queryParams, dataContext)
- console.log("PARSED PARAMS", parameters)
- return await executeQuery({ _id: datasource._id, parameters })
+ const bindings = get(bindingStore)
+ const fullContext = {
+ ...bindings,
+ ...dataContext,
+ }
+ const parameters = enrichDataBindings(datasource.queryParams, fullContext)
+ return await executeQuery({ queryId: datasource._id, parameters })
} else if (type === "link") {
const row = dataContext[datasource.providerId]
rows = await fetchRelationshipData({
diff --git a/packages/client/src/api/queries.js b/packages/client/src/api/queries.js
index 29ca197d19..1c2fb852e8 100644
--- a/packages/client/src/api/queries.js
+++ b/packages/client/src/api/queries.js
@@ -10,5 +10,5 @@ export const executeQuery = async ({ queryId, parameters }) => {
parameters,
},
})
- return response.rows
+ return response
}
diff --git a/packages/server/scripts/exportAppTemplate.js b/packages/server/scripts/exportAppTemplate.js
index 8268b802d4..e896917d5b 100755
--- a/packages/server/scripts/exportAppTemplate.js
+++ b/packages/server/scripts/exportAppTemplate.js
@@ -3,7 +3,7 @@ const { exportTemplateFromApp } = require("../src/utilities/templates")
const yargs = require("yargs")
// Script to export a chosen budibase app into a package
-// Usage: ./scripts/exportAppTemplate.js export --name=Funky --appId=someInstanceId --appId=appId
+// Usage: ./scripts/exportAppTemplate.js export --name=Funky --appId=appId
yargs
.command(
diff --git a/packages/server/src/integrations/postgres.js b/packages/server/src/integrations/postgres.js
index 2d8011d84b..f2ddc31749 100644
--- a/packages/server/src/integrations/postgres.js
+++ b/packages/server/src/integrations/postgres.js
@@ -28,7 +28,7 @@ const SCHEMA = {
required: true,
},
},
- editor: {
+ query: {
sql: {
type: "sql",
},
@@ -42,53 +42,6 @@ const SCHEMA = {
},
}
-const DATASOURCE_CONFIG = {
- host: {
- type: "string",
- default: "localhost",
- required: true,
- },
- port: {
- type: "number",
- required: true,
- default: 5432,
- },
- database: {
- type: "string",
- default: "postgres",
- required: true,
- },
- username: {
- type: "string",
- default: "root",
- required: true,
- },
- password: {
- type: "password",
- default: "root",
- required: true,
- },
-}
-
-const QUERY_CONFIG = {
- sql: {
- type: "sql",
- },
- gui: {
- type: "config",
- fields: [
- {
- name: "",
- type: "",
- },
- {
- name: "",
- type: "",
- },
- ],
- },
-}
-
class PostgresIntegration {
constructor(config, query) {
this.config = config
@@ -113,9 +66,6 @@ class PostgresIntegration {
}
module.exports = {
- schema: {
- datasource: DATASOURCE_CONFIG,
- query: QUERY_CONFIG,
- },
+ schema: SCHEMA,
integration: PostgresIntegration,
}
diff --git a/packages/standard-components/src/Input.svelte b/packages/standard-components/src/Input.svelte
index 30aada63d0..18a8880529 100644
--- a/packages/standard-components/src/Input.svelte
+++ b/packages/standard-components/src/Input.svelte
@@ -4,9 +4,11 @@
const { styleable, setBindableValue } = getContext("sdk")
const component = getContext("component")
- // Keep bindable value up to date
let value
- $: setBindableValue(value, $component.id)
+
+ function onBlur() {
+ setBindableValue(value, $component.id)
+ }
-
+
diff --git a/packages/standard-components/src/grid/Component.svelte b/packages/standard-components/src/grid/Component.svelte
index cb259fefb0..e9ec8fa645 100644
--- a/packages/standard-components/src/grid/Component.svelte
+++ b/packages/standard-components/src/grid/Component.svelte
@@ -57,63 +57,68 @@
pagination,
}
- onMount(async () => {
- if (!isEmpty(datasource)) {
- data = await API.fetchDatasource(datasource, $dataContext)
- let schema
+ async function fetchData() {
+ data = await API.fetchDatasource(datasource, $dataContext)
- // Get schema for datasource
- // Views with "Calculate" applied provide their own schema.
- // For everything else, use the tableId property to pull to table schema
- if (datasource.schema) {
- schema = datasource.schema
- } else {
- schema = (await API.fetchTableDefinition(datasource.tableId)).schema
- }
+ let schema
- columnDefs = Object.keys(schema).map((key, i) => {
- return {
- headerCheckboxSelection: i === 0 && canEdit,
- checkboxSelection: i === 0 && canEdit,
- valueSetter: setters.get(schema[key].type),
- headerName: key,
- field: key,
- hide: shouldHideField(key),
- sortable: true,
- editable: canEdit && schema[key].type !== "link",
- cellRenderer: getRenderer(schema[key], canEdit, SDK),
- autoHeight: true,
- }
- })
-
- if (detailUrl) {
- columnDefs = [
- ...columnDefs,
- {
- headerName: "Detail",
- field: "_id",
- minWidth: 100,
- width: 100,
- flex: 0,
- editable: false,
- sortable: false,
- cellRenderer: getRenderer(
- {
- type: "_id",
- options: { detailUrl },
- },
- false,
- SDK
- ),
- autoHeight: true,
- pinned: "left",
- filter: false,
- },
- ]
- }
-
- dataLoaded = true
+ // Get schema for datasource
+ // Views with "Calculate" applied provide their own schema.
+ // For everything else, use the tableId property to pull to table schema
+ if (datasource.schema) {
+ schema = datasource.schema
+ } else {
+ schema = (await API.fetchTableDefinition(datasource.tableId)).schema
}
+
+ columnDefs = Object.keys(schema).map((key, i) => {
+ return {
+ headerCheckboxSelection: i === 0 && canEdit,
+ checkboxSelection: i === 0 && canEdit,
+ valueSetter: setters.get(schema[key].type),
+ headerName: key,
+ field: key,
+ hide: shouldHideField(key),
+ sortable: true,
+ editable: canEdit && schema[key].type !== "link",
+ cellRenderer: getRenderer(schema[key], canEdit, SDK),
+ autoHeight: true,
+ }
+ })
+
+ if (detailUrl) {
+ columnDefs = [
+ ...columnDefs,
+ {
+ headerName: "Detail",
+ field: "_id",
+ minWidth: 100,
+ width: 100,
+ flex: 0,
+ editable: false,
+ sortable: false,
+ cellRenderer: getRenderer(
+ {
+ type: "_id",
+ options: { detailUrl },
+ },
+ false,
+ SDK
+ ),
+ autoHeight: true,
+ pinned: "left",
+ filter: false,
+ },
+ ]
+ }
+
+ dataLoaded = true
+ }
+
+ $: datasource && fetchData()
+
+ onMount(() => {
+ if (!isEmpty(datasource)) fetchData()
})
const shouldHideField = name => {
@@ -150,9 +155,7 @@
{#if selectedRows.length > 0}
- Delete
- {selectedRows.length}
- row(s)
+ Delete {selectedRows.length} row(s)
{/if}