in apps/chat/src/components/Files/PreUploadModal.tsx [347:495]
id: constructPath(
getFileRootId(),
folderPath,
prepareFileName(file.name),
),
folderPath,
};
}),
);
}, [folderPath]);
return (
<Modal
portalId="theme-main"
containerClassName="flex flex-col gap-4 md:w-[425px] w-full max-w-[425px] px-3 py-4 md:p-6"
dataQa="pre-upload-modal"
state={isOpen ? ModalState.OPENED : ModalState.CLOSED}
onClose={() => onClose(false)}
dismissProps={OUTSIDE_PRESS_AND_MOUSE_EVENT}
>
<div className="flex flex-col gap-2 overflow-auto">
<div className="flex justify-between">
<h2 id={headingId} className="text-base font-semibold">
{t('Upload from device')}
</h2>
</div>
<p id={descriptionId} data-qa="supported-attributes">
{t(
'Max file size up to 512 Mb. Supported types: {{allowedExtensions}}.',
{
allowedExtensions:
allowedTypesLabel ||
allowedExtensions.join(', ') ||
'no available extensions',
},
)}
</p>
<div>
<ErrorMessage error={errorMessage} />
</div>
<div
className="flex flex-col gap-2 overflow-auto"
data-qa="uploaded-files"
>
<div className="flex flex-col gap-1">
<div>
<span className="text-xs text-secondary">{t('Upload to')}</span>
<span className="text-xs text-accent-primary"> *</span>
</div>
<button
className="flex grow cursor-default items-center justify-between rounded border border-primary bg-transparent px-3 py-2 placeholder:text-secondary hover:border-accent-primary focus:border-accent-primary focus:outline-none"
data-qa="change-path-container"
>
<span className="truncate" data-qa="path">
{constructPath(t('All files'), folderPath)}
</span>
<span
className="cursor-pointer text-accent-primary"
onClick={handleFolderChange}
data-qa="change-button"
>
{t('Change')}
</span>
</button>
</div>
{selectedFiles.length !== 0 && (
<div className="flex flex-col gap-1">
<div>
<span className="text-xs text-secondary">{t('Files')}</span>
<span className="text-xs text-accent-primary"> *</span>
</div>
<div className="flex flex-col gap-3 overflow-auto text-sm">
{selectedFiles.map((file, index) => (
<div
key={index}
className="flex items-center gap-3"
data-qa="uploaded-file"
>
<div className="relative flex grow items-center">
<IconFile
className="absolute left-2 top-[calc(50%_-_9px)] shrink-0 text-secondary"
size={18}
/>
<input
type="text"
value={getFileNameWithoutExtension(file.name)}
className="grow text-ellipsis rounded border border-primary bg-transparent py-2 pl-8 pr-12 placeholder:text-secondary hover:border-accent-primary focus:border-accent-primary focus:outline-none"
onChange={handleRenameFile(index)}
/>
<span
className="absolute right-2"
data-qa="file-extension"
>
{getFileNameExtension(file.name)}
</span>
</div>
<button
onClick={handleUnselectFile(index)}
data-qa="delete-file"
>
<IconTrashX
size={24}
className="shrink-0 text-secondary hover:text-accent-primary"
/>
</button>
</div>
))}
</div>
</div>
)}
</div>
</div>
<div className="flex w-full justify-between gap-3">
<label
className="cursor-pointer rounded py-2.5 text-accent-primary"
data-qa="add-more-files"
>
{t('Add more files...')}
<input
ref={uploadInputRef}
id="file"
type="file"
className="hidden"
multiple
accept={allowedTypes.join()}
onChange={handleSelectFiles}
/>
</label>
<button
className="button button-primary"
onClick={handleUpload}
disabled={selectedFiles.length === 0}
data-qa="upload"
>
{customUploadButtonLabel ? customUploadButtonLabel : t('Upload')}
</button>
</div>
<SelectFolderModal
isOpen={isChangeFolderModalOpened}
initialSelectedFolderId={selectedFolderId}
rootFolderId={getFileRootId()}
onClose={(folderId) => {
if (folderId) {