Skip to content

Commit dc00f9d

Browse files
committed
fix: update based on comments
1 parent 493389c commit dc00f9d

File tree

4 files changed

+25
-23
lines changed

4 files changed

+25
-23
lines changed

cypress/downloads/downloads.html

1.4 MB
Binary file not shown.

src/components/input/multimodal/multimodalInput/multimodalInput.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,20 @@ import BaseInput from '../../baseInput/baseInput'
1010
import Uploader from '../uploader/uploader'
1111

1212
export default function MultimodalInput(props: MultimodalInputProps) {
13-
const [fileList, setFileList] = useState<string[]>([])
13+
const [fileNames, setFileNames] = useState<string[]>([])
1414
const [messageId, setMessageId] = useState(getUUID())
1515
const [filePreviewsContainer, setFilePreviewsContainer] =
1616
useState<HTMLDivElement>()
1717
const [errorMessagesContainer, setErrorMessagesContainer] =
1818
useState<HTMLDivElement>()
1919
const inputRef = useRef<HTMLDivElement>(null)
20-
const hasAddedFiles = fileList.length > 0
20+
const hasAddedFiles = fileNames.length > 0
2121

22-
function handleFileListChange(action: 'add' | 'remove', fileName: string) {
22+
function handleFileUpdates(action: 'add' | 'remove', fileName: string) {
2323
if (action === 'add') {
24-
setFileList((prev) => [...prev, fileName])
24+
setFileNames((prev) => [...prev, fileName])
2525
} else {
26-
setFileList((prev) => prev.filter((file) => file !== fileName))
26+
setFileNames((prev) => prev.filter((file) => file !== fileName))
2727
}
2828
}
2929

@@ -46,12 +46,12 @@ export default function MultimodalInput(props: MultimodalInputProps) {
4646
if (hasAddedFiles) {
4747
formattedMessage.id = messageId
4848
formattedMessage.format = 'multipart'
49-
formattedMessage.data.files = fileList
49+
formattedMessage.data.files = fileNames
5050
}
5151

5252
props.ws.send(formattedMessage)
5353
setMessageId(getUUID())
54-
setFileList([])
54+
setFileNames([])
5555
}
5656

5757
return (
@@ -69,7 +69,7 @@ export default function MultimodalInput(props: MultimodalInputProps) {
6969
maxFileSize={props.maxFileSize}
7070
uploadFileEndpoint={props.uploadFileEndpoint}
7171
deleteFileEndpoint={props.deleteFileEndpoint}
72-
handleFileListChange={handleFileListChange}
72+
onFileUpdate={handleFileUpdates}
7373
messageId={messageId}
7474
filePreviewsContainer={filePreviewsContainer}
7575
errorMessagesContainer={errorMessagesContainer}

src/components/input/multimodal/uploader/uploader.tsx

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -153,14 +153,14 @@ function Uploader(props: UploaderProps) {
153153
setAddedFiles((prev) => prev.filter((file) => file.id !== id))
154154
}
155155

156-
function updateDuplicateFileName(file: File) {
156+
function getFileName(file: File) {
157157
let fileName = file.name
158-
const extensionIndex = fileName.lastIndexOf('.')
159-
const baseName = fileName.substring(0, extensionIndex)
160158
const fileNameCount = fileNamesRef.current[fileName]
161159

162160
if (fileNameCount) {
163161
const newCount = fileNameCount + 1
162+
const extensionIndex = fileName.lastIndexOf('.')
163+
const baseName = fileName.substring(0, extensionIndex)
164164
const extension = fileName.substring(extensionIndex)
165165
fileName = `${baseName}(${fileNameCount})${extension}`
166166
fileNamesRef.current = { ...fileNamesRef.current, [file.name]: newCount }
@@ -174,8 +174,10 @@ function Uploader(props: UploaderProps) {
174174
function uploadFile(file: File) {
175175
const formData = new FormData()
176176
const controller = new AbortController()
177-
formData.append('file', file)
178-
const fileName = updateDuplicateFileName(file)
177+
178+
const fileName = getFileName(file)
179+
const updatedFile = new File([file], fileName, { type: file.type })
180+
formData.append('file', updatedFile)
179181
const temporaryFileId = getUUID()
180182
const newAddedFile = {
181183
name: fileName,
@@ -185,15 +187,15 @@ function Uploader(props: UploaderProps) {
185187
}
186188

187189
setAddedFiles((prev) => [...prev, newAddedFile])
188-
props.handleFileListChange('add', fileName)
190+
props.onFileUpdate('add', fileName)
189191

190192
function handleUploadProgress(progressEvent: AxiosProgressEvent) {
191193
const percentageConversionRate = 100
192194
if (progressEvent.total) {
193195
const loadedPercentage =
194196
(progressEvent.loaded / progressEvent.total) *
195197
percentageConversionRate
196-
updateProgress(loadedPercentage, temporaryFileId)
198+
updateProgress(loadedPercentage, newAddedFile.id)
197199
}
198200
}
199201

@@ -204,15 +206,15 @@ function Uploader(props: UploaderProps) {
204206
signal: controller.signal,
205207
})
206208
.then((response) => {
207-
handleSuccessfulUpload(response.data, temporaryFileId)
209+
handleSuccessfulUpload(response.data, newAddedFile.id)
208210
})
209211
.catch((error) => {
210-
props.handleFileListChange('remove', fileName)
212+
props.onFileUpdate('remove', fileName)
211213
fileNamesRef.current = {
212214
...fileNamesRef.current,
213215
[fileName]: fileNamesRef.current[file.name]--,
214216
}
215-
handleFailedUpload(file.name, temporaryFileId, error.response?.data)
217+
handleFailedUpload(file.name, newAddedFile.id, error.response?.data)
216218
})
217219
}
218220

@@ -223,7 +225,7 @@ function Uploader(props: UploaderProps) {
223225
...fileNamesRef.current,
224226
[fileName]: fileNamesRef.current[fileName]--,
225227
}
226-
props.handleFileListChange('remove', fileName)
228+
props.onFileUpdate('remove', fileName)
227229
if (file.loadingProgress === maximumLoadingProgress) {
228230
const deleteUrl = `${props.deleteFileEndpoint}?message-id=${props.messageId}&file-id=${file.id}`
229231

@@ -233,7 +235,7 @@ function Uploader(props: UploaderProps) {
233235
return setAddedFiles((prev) => prev.filter((_, i) => i !== index))
234236
})
235237
.catch(() => {
236-
props.handleFileListChange('add', fileName)
238+
props.onFileUpdate('add', fileName)
237239
return setErrorMessages((prevMessages) => [
238240
...prevMessages,
239241
`Failed to delete ${fileName}. Please try again.`,

src/components/types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ export interface UploaderProps {
189189
deleteFileEndpoint: string
190190
/** Used in the API request to link the file with the message that's going to be sent. */
191191
messageId: string
192-
/** A function to handle changes in the file list. Parent component should use this to track file names and handle submit accordingly. */
193-
handleFileListChange: (action: 'add' | 'remove', fileName: string) => void
192+
/** A function to handle changes in the file list. The parent component should use this to track file names and handle submit accordingly. */
193+
onFileUpdate: (action: 'add' | 'remove', fileName: string) => void
194194
/** Optional HTML div where the errors should be shown. */
195195
errorMessagesContainer?: HTMLDivElement
196196
/** Optional HTML div where the filePreviews should be shown. */
@@ -205,7 +205,7 @@ export type MultimodalInputProps = TextInputProps &
205205
Omit<
206206
UploaderProps,
207207
| 'messageId'
208-
| 'handleFileListChange'
208+
| 'onFileUpdate'
209209
| 'filePreviewsContainer'
210210
| 'errorMessagesContainer'
211211
>

0 commit comments

Comments
 (0)