mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-05 17:58:55 +00:00
Co-authored-by: Christopher Oliphant <RALifeCoach@users.noreply.github.com>
54 lines
1.9 KiB
TypeScript
54 lines
1.9 KiB
TypeScript
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
import { faFileArrowUp, faFileAudio } from "@fortawesome/pro-solid-svg-icons";
|
|
import { P } from "~/components";
|
|
import { getFileName } from "./utils/getFileName";
|
|
|
|
interface Props {
|
|
file: File | null;
|
|
fileTypes: string[];
|
|
}
|
|
|
|
export const DragAndDropZone = ({ file, fileTypes }: Props) => {
|
|
const fileSize =
|
|
file && file.size >= 1024 * 1024
|
|
? (file.size / 1024 / 1024).toFixed(2) + " MB"
|
|
: file
|
|
? `${Math.floor(file.size / 1024)} KB`
|
|
: null;
|
|
|
|
const fileName = file && getFileName(file).toUpperCase();
|
|
|
|
if (!file) {
|
|
return (
|
|
<div className="flex cursor-pointer items-center gap-3.5 rounded-lg border-2 border-dashed border-ui-controls-button/50 bg-brand-secondary p-3">
|
|
<FontAwesomeIcon icon={faFileArrowUp} className="text-4xl" />
|
|
<div className="flex flex-col gap-0">
|
|
<P className="font-medium">
|
|
<u>Upload a file</u> or drop it here
|
|
</P>
|
|
<P className="flex items-center gap-2 text-sm font-normal opacity-50">
|
|
{fileTypes.join(", ").toString()} supported
|
|
</P>
|
|
</div>
|
|
</div>
|
|
);
|
|
} else {
|
|
return (
|
|
<div className="flex cursor-pointer items-center justify-between gap-3.5 rounded-lg border-2 border-dashed border-ui-controls-button/50 bg-brand-secondary p-3">
|
|
<FontAwesomeIcon icon={faFileAudio} className="text-4xl" />
|
|
<div className="flex grow flex-col gap-0">
|
|
<P className="font-medium">
|
|
{file.name.slice(0, file.name.lastIndexOf("."))}
|
|
</P>
|
|
<P className="flex items-center gap-2 text-sm font-normal">
|
|
<span className="opacity-50">
|
|
{`${fileName} file size: ${fileSize} `}
|
|
</span>
|
|
<u className="transition-all hover:text-white/80">Change File</u>
|
|
</P>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
};
|