budibase/packages/frontend-core/src/api/views.js

60 lines
1.5 KiB
JavaScript

export const buildViewEndpoints = API => ({
/**
* Fetches all rows in a view
* @param name the name of the view
* @param field the field to perform the calculation on
* @param groupBy the field to group by
* @param calculation the calculation to perform
*/
fetchViewData: async ({ name, field, groupBy, calculation }) => {
const params = new URLSearchParams()
if (calculation) {
params.set("field", field)
params.set("calculation", calculation)
}
if (groupBy) {
params.set("group", groupBy)
}
const QUERY_VIEW_URL = field
? `/api/views/${name}?${params}`
: `/api/views/${name}`
return await API.get({ url: QUERY_VIEW_URL })
},
/**
* Exports a view for download
* @param viewName the view to export
* @param format the format to download
*/
exportView: async ({ viewName, format }) => {
const safeViewName = encodeURIComponent(viewName)
return await API.get({
url: `/api/views/export?view=${safeViewName}&format=${format}`,
parseResponse: async response => {
return await response.text()
},
})
},
/**
* Saves a view.
* @param view the view to save
*/
saveView: async view => {
return await API.post({
url: "/api/views",
body: view,
})
},
/**
* Deletes a view.
* @param viewName the name of the view to delete
*/
deleteView: async viewName => {
return await API.delete({
url: `/api/views/${viewName}`,
})
},
})