2
0

feat(bot): ️ Add custom file upload size limit

This commit is contained in:
Baptiste Arnaud
2022-06-21 16:53:45 +02:00
parent 1931a5c9c0
commit ea765640cf
17 changed files with 141 additions and 44 deletions

View File

@ -53,6 +53,7 @@ export const InputChatBlock = ({
groupId: block.groupId,
content: value,
variableId: variableId ?? null,
uploadedFiles: block.type === InputBlockType.FILE,
})
if (!isEditting) onTransitionEnd({ label, value, itemId }, isRetry)
setIsEditting(false)

View File

@ -11,15 +11,17 @@ type Props = {
onSubmit: (url: InputSubmitContent) => void
}
const tenMB = 10 * 1024 * 1024
export const FileUploadForm = ({
block: {
id,
options: { isMultipleAllowed, labels },
options: { isMultipleAllowed, labels, sizeLimit },
},
onSubmit,
}: Props) => {
const { isPreview } = useTypebot()
const {
isPreview,
typebot: { typebotId },
} = useTypebot()
const { resultId } = useAnswers()
const [selectedFiles, setSelectedFiles] = useState<File[]>([])
const [isUploading, setIsUploading] = useState(false)
@ -35,8 +37,8 @@ export const FileUploadForm = ({
const onNewFiles = (files: FileList) => {
setErrorMessage(undefined)
const newFiles = Array.from(files)
if (newFiles.some((file) => file.size > tenMB))
return setErrorMessage('A file is larger than 10MB')
if (newFiles.some((file) => file.size > (sizeLimit ?? 10) * 1024 * 1024))
return setErrorMessage(`A file is larger than ${sizeLimit ?? 10}MB`)
if (!isMultipleAllowed && files) return startSingleFileUpload(newFiles[0])
setSelectedFiles([...selectedFiles, ...newFiles])
}
@ -55,6 +57,7 @@ export const FileUploadForm = ({
})
setIsUploading(true)
const urls = await uploadFiles({
basePath: `/api/typebots/${typebotId}/blocks/${id}`,
files: [
{
file,
@ -76,6 +79,7 @@ export const FileUploadForm = ({
})
setIsUploading(true)
const urls = await uploadFiles({
basePath: `/api/typebots/${typebotId}/blocks/${id}`,
files: files.map((file) => ({
file: file,
path: `public/results/${resultId}/${id}/${file.name}`,

View File

@ -33,7 +33,7 @@ export type TypebotViewerProps = {
startGroupId?: string
isLoading?: boolean
onNewGroupVisible?: (edge: Edge) => void
onNewAnswer?: (answer: Answer) => Promise<void>
onNewAnswer?: (answer: Answer & { uploadedFiles: boolean }) => Promise<void>
onNewLog?: (log: Omit<Log, 'id' | 'createdAt' | 'resultId'>) => void
onCompleted?: () => void
onVariablesUpdated?: (variables: VariableWithValue[]) => void
@ -64,7 +64,8 @@ export const TypebotViewer = ({
const handleNewGroupVisible = (edge: Edge) =>
onNewGroupVisible && onNewGroupVisible(edge)
const handleNewAnswer = (answer: Answer) => onNewAnswer && onNewAnswer(answer)
const handleNewAnswer = (answer: Answer & { uploadedFiles: boolean }) =>
onNewAnswer && onNewAnswer(answer)
const handleNewLog = (log: Omit<Log, 'id' | 'createdAt' | 'resultId'>) =>
onNewLog && onNewLog(log)

View File

@ -4,7 +4,9 @@ import React, { createContext, ReactNode, useContext, useState } from 'react'
const answersContext = createContext<{
resultId?: string
resultValues: ResultValues
addAnswer: (answer: Answer) => Promise<void> | undefined
addAnswer: (
answer: Answer & { uploadedFiles: boolean }
) => Promise<void> | undefined
updateVariables: (variables: VariableWithValue[]) => void
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
@ -17,7 +19,9 @@ export const AnswersContext = ({
onVariablesUpdated,
}: {
resultId?: string
onNewAnswer: (answer: Answer) => Promise<void> | undefined
onNewAnswer: (
answer: Answer & { uploadedFiles: boolean }
) => Promise<void> | undefined
onVariablesUpdated?: (variables: VariableWithValue[]) => void
children: ReactNode
}) => {
@ -27,7 +31,7 @@ export const AnswersContext = ({
createdAt: new Date().toISOString(),
})
const addAnswer = (answer: Answer) => {
const addAnswer = (answer: Answer & { uploadedFiles: boolean }) => {
setResultValues((resultValues) => ({
...resultValues,
answers: [...resultValues.answers, answer],