Update attachment endpoints to use TS
This commit is contained in:
parent
1e535d36b7
commit
9c35a7758c
|
@ -49,10 +49,7 @@
|
||||||
data.append("file", fileList[i])
|
data.append("file", fileList[i])
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return await API.uploadAttachment({
|
return await API.uploadAttachment(formContext?.dataSource?.tableId, data)
|
||||||
data,
|
|
||||||
tableId: formContext?.dataSource?.tableId,
|
|
||||||
})
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,12 +80,7 @@
|
||||||
const upload = async () => {
|
const upload = async () => {
|
||||||
loading = true
|
loading = true
|
||||||
try {
|
try {
|
||||||
const res = await API.externalUpload({
|
const res = await API.externalUpload(datasourceId, bucket, key, data)
|
||||||
datasourceId,
|
|
||||||
bucket,
|
|
||||||
key,
|
|
||||||
data,
|
|
||||||
})
|
|
||||||
notificationStore.actions.success("File uploaded successfully")
|
notificationStore.actions.success("File uploaded successfully")
|
||||||
loading = false
|
loading = false
|
||||||
return res
|
return res
|
||||||
|
|
|
@ -31,10 +31,10 @@
|
||||||
let attachRequest = new FormData()
|
let attachRequest = new FormData()
|
||||||
attachRequest.append("file", signatureFile)
|
attachRequest.append("file", signatureFile)
|
||||||
|
|
||||||
const resp = await API.uploadAttachment({
|
const resp = await API.uploadAttachment(
|
||||||
data: attachRequest,
|
formContext?.dataSource?.tableId,
|
||||||
tableId: formContext?.dataSource?.tableId,
|
attachRequest
|
||||||
})
|
)
|
||||||
const [signatureAttachment] = resp
|
const [signatureAttachment] = resp
|
||||||
updateValue = signatureAttachment
|
updateValue = signatureAttachment
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -454,12 +454,7 @@ const downloadFileHandler = async action => {
|
||||||
const { type } = action.parameters
|
const { type } = action.parameters
|
||||||
if (type === "attachment") {
|
if (type === "attachment") {
|
||||||
const { tableId, rowId, attachmentColumn } = action.parameters
|
const { tableId, rowId, attachmentColumn } = action.parameters
|
||||||
const res = await API.downloadAttachment(
|
const res = await API.downloadAttachment(tableId, rowId, attachmentColumn)
|
||||||
tableId,
|
|
||||||
rowId,
|
|
||||||
attachmentColumn,
|
|
||||||
{ suppressErrors: true }
|
|
||||||
)
|
|
||||||
await downloadStream(res)
|
await downloadStream(res)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,78 +0,0 @@
|
||||||
export const buildAttachmentEndpoints = API => {
|
|
||||||
/**
|
|
||||||
* Generates a signed URL to upload a file to an external datasource.
|
|
||||||
* @param datasourceId the ID of the datasource to upload to
|
|
||||||
* @param bucket the name of the bucket to upload to
|
|
||||||
* @param key the name of the file to upload to
|
|
||||||
*/
|
|
||||||
const getSignedDatasourceURL = async ({ datasourceId, bucket, key }) => {
|
|
||||||
return await API.post({
|
|
||||||
url: `/api/attachments/${datasourceId}/url`,
|
|
||||||
body: { bucket, key },
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
getSignedDatasourceURL,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uploads an attachment to the server.
|
|
||||||
* @param data the attachment to upload
|
|
||||||
* @param tableId the table ID to upload to
|
|
||||||
*/
|
|
||||||
uploadAttachment: async ({ data, tableId }) => {
|
|
||||||
return await API.post({
|
|
||||||
url: `/api/attachments/${tableId}/upload`,
|
|
||||||
body: data,
|
|
||||||
json: false,
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uploads an attachment to the server as a builder user from the builder.
|
|
||||||
* @param data the data to upload
|
|
||||||
*/
|
|
||||||
uploadBuilderAttachment: async data => {
|
|
||||||
return await API.post({
|
|
||||||
url: "/api/attachments/process",
|
|
||||||
body: data,
|
|
||||||
json: false,
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uploads a file to an external datasource.
|
|
||||||
* @param datasourceId the ID of the datasource to upload to
|
|
||||||
* @param bucket the name of the bucket to upload to
|
|
||||||
* @param key the name of the file to upload to
|
|
||||||
* @param data the file to upload
|
|
||||||
*/
|
|
||||||
externalUpload: async ({ datasourceId, bucket, key, data }) => {
|
|
||||||
const { signedUrl, publicUrl } = await getSignedDatasourceURL({
|
|
||||||
datasourceId,
|
|
||||||
bucket,
|
|
||||||
key,
|
|
||||||
})
|
|
||||||
await API.put({
|
|
||||||
url: signedUrl,
|
|
||||||
body: data,
|
|
||||||
json: false,
|
|
||||||
external: true,
|
|
||||||
})
|
|
||||||
return { publicUrl }
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* Download an attachment from a row given its column name.
|
|
||||||
* @param datasourceId the ID of the datasource to download from
|
|
||||||
* @param rowId the ID of the row to download from
|
|
||||||
* @param columnName the column name to download
|
|
||||||
*/
|
|
||||||
downloadAttachment: async (datasourceId, rowId, columnName, options) => {
|
|
||||||
return await API.get({
|
|
||||||
url: `/api/${datasourceId}/rows/${rowId}/attachment/${columnName}`,
|
|
||||||
parseResponse: response => response,
|
|
||||||
suppressErrors: options?.suppressErrors,
|
|
||||||
})
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,109 @@
|
||||||
|
import { ProcessAttachmentResponse } from "@budibase/types"
|
||||||
|
import { BaseAPIClient } from "./types"
|
||||||
|
|
||||||
|
export interface AttachmentEndpoints {
|
||||||
|
getSignedDatasourceURL: (
|
||||||
|
datasourceId: string,
|
||||||
|
bucket: string,
|
||||||
|
key: string
|
||||||
|
) => Promise<{ signedUrl: string; publicUrl: string }>
|
||||||
|
uploadAttachment: (
|
||||||
|
tableId: string,
|
||||||
|
data: any
|
||||||
|
) => Promise<ProcessAttachmentResponse>
|
||||||
|
uploadBuilderAttachment: (data: any) => Promise<ProcessAttachmentResponse>
|
||||||
|
externalUpload: (
|
||||||
|
datasourceId: string,
|
||||||
|
bucket: string,
|
||||||
|
key: string,
|
||||||
|
data: any
|
||||||
|
) => Promise<{ publicUrl: string }>
|
||||||
|
downloadAttachment: (
|
||||||
|
datasourceId: string,
|
||||||
|
rowId: string,
|
||||||
|
columnName: string
|
||||||
|
) => Promise<any>
|
||||||
|
}
|
||||||
|
|
||||||
|
export const buildAttachmentEndpoints = (
|
||||||
|
API: BaseAPIClient
|
||||||
|
): AttachmentEndpoints => {
|
||||||
|
const endpoints: Pick<AttachmentEndpoints, "getSignedDatasourceURL"> = {
|
||||||
|
/**
|
||||||
|
* Generates a signed URL to upload a file to an external datasource.
|
||||||
|
* @param datasourceId the ID of the datasource to upload to
|
||||||
|
* @param bucket the name of the bucket to upload to
|
||||||
|
* @param key the name of the file to upload to
|
||||||
|
*/
|
||||||
|
getSignedDatasourceURL: async (datasourceId, bucket, key) => {
|
||||||
|
return await API.post({
|
||||||
|
url: `/api/attachments/${datasourceId}/url`,
|
||||||
|
body: { bucket, key },
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...endpoints,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uploads an attachment to the server.
|
||||||
|
* @param data the attachment to upload
|
||||||
|
* @param tableId the table ID to upload to
|
||||||
|
*/
|
||||||
|
uploadAttachment: async (tableId, data) => {
|
||||||
|
return await API.post({
|
||||||
|
url: `/api/attachments/${tableId}/upload`,
|
||||||
|
body: data,
|
||||||
|
json: false,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uploads an attachment to the server as a builder user from the builder.
|
||||||
|
* @param data the data to upload
|
||||||
|
*/
|
||||||
|
uploadBuilderAttachment: async data => {
|
||||||
|
return await API.post({
|
||||||
|
url: "/api/attachments/process",
|
||||||
|
body: data,
|
||||||
|
json: false,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uploads a file to an external datasource.
|
||||||
|
* @param datasourceId the ID of the datasource to upload to
|
||||||
|
* @param bucket the name of the bucket to upload to
|
||||||
|
* @param key the name of the file to upload to
|
||||||
|
* @param data the file to upload
|
||||||
|
*/
|
||||||
|
externalUpload: async (datasourceId, bucket, key, data) => {
|
||||||
|
const { signedUrl, publicUrl } = await endpoints.getSignedDatasourceURL(
|
||||||
|
datasourceId,
|
||||||
|
bucket,
|
||||||
|
key
|
||||||
|
)
|
||||||
|
await API.put({
|
||||||
|
url: signedUrl,
|
||||||
|
body: data,
|
||||||
|
json: false,
|
||||||
|
external: true,
|
||||||
|
})
|
||||||
|
return { publicUrl }
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Download an attachment from a row given its column name.
|
||||||
|
* @param datasourceId the ID of the datasource to download from
|
||||||
|
* @param rowId the ID of the row to download from
|
||||||
|
* @param columnName the column name to download
|
||||||
|
*/
|
||||||
|
downloadAttachment: async (datasourceId, rowId, columnName) => {
|
||||||
|
return await API.get({
|
||||||
|
url: `/api/${datasourceId}/rows/${rowId}/attachment/${columnName}`,
|
||||||
|
parseResponse: response => response as any,
|
||||||
|
suppressErrors: true,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,7 +27,7 @@ export type APICallConfig = {
|
||||||
suppressErrors: boolean
|
suppressErrors: boolean
|
||||||
cache: boolean
|
cache: boolean
|
||||||
body?: any
|
body?: any
|
||||||
parseResponse?: <T>(response: Response) => Promise<T>
|
parseResponse?: <T>(response: Response) => Promise<T> | T
|
||||||
}
|
}
|
||||||
|
|
||||||
export type APICallParams = Pick<APICallConfig, "url"> & Partial<APICallConfig>
|
export type APICallParams = Pick<APICallConfig, "url"> & Partial<APICallConfig>
|
||||||
|
|
Loading…
Reference in New Issue