fix: don't paste file anyways if too large

This commit is contained in:
Paul Makles 2022-04-09 19:02:10 +01:00
parent b2f4411850
commit 56f59d132b

View file

@ -20,33 +20,39 @@ type BehaviourType =
| { behaviour: "ask"; onChange: (file: File) => void }
| { behaviour: "upload"; onUpload: (id: string) => Promise<void> }
| {
behaviour: "multi";
onChange: (files: File[]) => void;
append?: (files: File[]) => void;
}
behaviour: "multi";
onChange: (files: File[]) => void;
append?: (files: File[]) => void;
};
type StyleType =
| {
style: "icon" | "banner";
width?: number;
height?: number;
previewURL?: string;
defaultPreview?: string;
desaturateDefault?: boolean
}
style: "icon" | "banner";
width?: number;
height?: number;
previewURL?: string;
defaultPreview?: string;
desaturateDefault?: boolean;
}
| {
style: "attachment";
attached: boolean;
uploading: boolean;
cancel: () => void;
size?: number;
}
style: "attachment";
attached: boolean;
uploading: boolean;
cancel: () => void;
size?: number;
};
type Props = BehaviourType & StyleType & {
fileType: "backgrounds" | "icons" | "avatars" | "attachments" | "banners";
maxFileSize: number;
remove: () => Promise<void>;
}
type Props = BehaviourType &
StyleType & {
fileType:
| "backgrounds"
| "icons"
| "avatars"
| "attachments"
| "banners";
maxFileSize: number;
remove: () => Promise<void>;
};
export async function uploadFile(
autumnURL: string,
@ -80,6 +86,7 @@ export function grabFiles(
input.onchange = async (e) => {
const files = (e.currentTarget as HTMLInputElement)?.files;
if (!files) return;
for (const file of files) {
if (file.size > maxFileSize) {
return tooLarge();
@ -167,6 +174,7 @@ export function FileUploader(props: Props) {
id: "error",
error: "FileTooLarge",
});
continue;
}
files.push(blob);
@ -195,6 +203,7 @@ export function FileUploader(props: Props) {
for (const item of dropped) {
if (item.size > props.maxFileSize) {
openScreen({ id: "error", error: "FileTooLarge" });
continue;
}
files.push(item);
@ -226,14 +235,19 @@ export function FileUploader(props: Props) {
})}
data-uploading={uploading}>
<div
className={classNames(styles.image, props.desaturateDefault && previewURL == null && styles.desaturate)}
className={classNames(
styles.image,
props.desaturateDefault &&
previewURL == null &&
styles.desaturate,
)}
style={{
backgroundImage:
style === "icon"
? `url('${previewURL ?? defaultPreview}')`
: previewURL
? `linear-gradient( rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5) ), url('${previewURL}')`
: "none",
? `linear-gradient( rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5) ), url('${previewURL}')`
: "none",
width,
height,
}}