2025-01-07 23:28:47 +01:00
|
|
|
import React, { useEffect, useState } from "react";
|
2023-06-22 17:16:26 +02:00
|
|
|
import { useCunningham } from ":/components/Provider";
|
|
|
|
|
import { formatBytes } from ":/components/Forms/FileUploader/utils";
|
|
|
|
|
import { Button } from ":/components/Button";
|
2025-01-07 23:28:47 +01:00
|
|
|
import { FileUploaderProps } from ":/components/Forms/FileUploader/index";
|
2023-06-22 17:16:26 +02:00
|
|
|
import { DropZone } from ":/components/Forms/FileUploader/DropZone";
|
|
|
|
|
|
2025-01-07 23:28:47 +01:00
|
|
|
export const FileUploaderMulti = ({
|
|
|
|
|
fullWidth,
|
|
|
|
|
fakeDefaultFiles,
|
|
|
|
|
ref,
|
|
|
|
|
...props
|
|
|
|
|
}: FileUploaderProps) => {
|
2023-06-22 17:16:26 +02:00
|
|
|
const { t } = useCunningham();
|
|
|
|
|
const [files, setFiles] = useState<File[]>(fakeDefaultFiles || []);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
props.onFilesChange?.({ target: { value: files } });
|
|
|
|
|
}, [files]);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<>
|
|
|
|
|
<DropZone
|
|
|
|
|
{...props}
|
|
|
|
|
files={files}
|
|
|
|
|
onFilesChange={(e) => setFiles(e.target.value)}
|
|
|
|
|
animateIcon={true}
|
|
|
|
|
ref={ref}
|
|
|
|
|
/>
|
|
|
|
|
{files.length > 0 && (
|
|
|
|
|
<div className="c__file-uploader__files">
|
|
|
|
|
{files.map((file) => (
|
|
|
|
|
<div
|
|
|
|
|
className="c__file-uploader__file"
|
|
|
|
|
key={"" + file.name + file.size + file.type + file.lastModified}
|
|
|
|
|
>
|
|
|
|
|
<div className="c__file-uploader__file__name">{file.name}</div>
|
|
|
|
|
<div className="c__file-uploader__file__specs">
|
|
|
|
|
<span>{formatBytes(file.size)}</span>
|
|
|
|
|
<Button
|
2024-01-08 11:36:43 +01:00
|
|
|
color="tertiary-text"
|
2023-09-07 11:20:04 +02:00
|
|
|
size="nano"
|
2023-06-22 17:16:26 +02:00
|
|
|
aria-label={t(
|
|
|
|
|
"components.forms.file_uploader.delete_file_name",
|
|
|
|
|
{
|
|
|
|
|
name: file.name,
|
2023-07-18 15:43:56 +02:00
|
|
|
},
|
2023-06-22 17:16:26 +02:00
|
|
|
)}
|
|
|
|
|
onClick={() => {
|
|
|
|
|
setFiles(files.filter((f) => f !== file));
|
|
|
|
|
}}
|
|
|
|
|
icon={<span className="material-icons">close</span>}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
</>
|
|
|
|
|
);
|
2025-01-07 23:28:47 +01:00
|
|
|
};
|