2021-01-11 16:34:43 +01:00
|
|
|
import { get } from "svelte/store"
|
2020-11-12 13:24:45 +01:00
|
|
|
import { fetchTableData } from "./tables"
|
2020-11-12 10:07:09 +01:00
|
|
|
import { fetchViewData } from "./views"
|
|
|
|
import { fetchRelationshipData } from "./relationships"
|
2021-01-08 19:22:03 +01:00
|
|
|
import { executeQuery } from "./queries"
|
2020-11-12 13:24:45 +01:00
|
|
|
import { enrichRows } from "./rows"
|
2021-01-08 19:22:03 +01:00
|
|
|
import { enrichDataBindings } from "../utils/enrichDataBinding"
|
2021-01-11 16:34:43 +01:00
|
|
|
import { bindingStore } from "../store/binding"
|
2020-11-12 10:07:09 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Fetches all rows for a particular Budibase data source.
|
|
|
|
*/
|
2020-11-20 10:50:10 +01:00
|
|
|
export const fetchDatasource = async (datasource, dataContext) => {
|
2020-11-12 13:24:45 +01:00
|
|
|
if (!datasource || !datasource.type) {
|
2020-11-12 10:07:09 +01:00
|
|
|
return []
|
|
|
|
}
|
|
|
|
|
|
|
|
// Fetch all rows in data source
|
2020-11-19 14:50:20 +01:00
|
|
|
const { type, tableId, fieldName } = datasource
|
2020-11-12 10:07:09 +01:00
|
|
|
let rows = []
|
|
|
|
if (type === "table") {
|
2020-11-12 13:24:45 +01:00
|
|
|
rows = await fetchTableData(tableId)
|
2020-11-12 10:07:09 +01:00
|
|
|
} else if (type === "view") {
|
|
|
|
rows = await fetchViewData(datasource)
|
2020-12-18 19:19:43 +01:00
|
|
|
} else if (type === "query") {
|
2021-01-11 16:34:43 +01:00
|
|
|
const bindings = get(bindingStore)
|
2021-01-11 21:17:56 +01:00
|
|
|
|
|
|
|
// TODO: refactor. Set these defaults up somewhere else
|
|
|
|
let queryParams = datasource.queryParams || {}
|
|
|
|
for (let param of datasource.parameters) {
|
|
|
|
if (!queryParams[param.name]) {
|
|
|
|
queryParams[param.name] = param.default
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const parameters = enrichDataBindings(queryParams, {
|
2021-01-11 16:34:43 +01:00
|
|
|
...bindings,
|
|
|
|
...dataContext,
|
2021-01-11 21:17:56 +01:00
|
|
|
})
|
2021-01-11 16:34:43 +01:00
|
|
|
return await executeQuery({ queryId: datasource._id, parameters })
|
2020-11-12 10:07:09 +01:00
|
|
|
} else if (type === "link") {
|
2020-11-25 10:50:51 +01:00
|
|
|
const row = dataContext[datasource.providerId]
|
2020-11-19 14:50:20 +01:00
|
|
|
rows = await fetchRelationshipData({
|
2020-11-25 10:50:51 +01:00
|
|
|
rowId: row?._id,
|
|
|
|
tableId: row?.tableId,
|
2020-11-19 14:50:20 +01:00
|
|
|
fieldName,
|
|
|
|
})
|
2020-11-12 10:07:09 +01:00
|
|
|
}
|
|
|
|
// Enrich rows
|
2020-11-12 13:24:45 +01:00
|
|
|
return await enrichRows(rows, tableId)
|
2020-11-12 10:07:09 +01:00
|
|
|
}
|