Skip to content

Commit

Permalink
feat: handle max file size
Browse files Browse the repository at this point in the history
  • Loading branch information
mortennordseth committed Sep 27, 2024
1 parent 878914f commit 4def79d
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 7 deletions.
33 changes: 26 additions & 7 deletions src/page-modules/contact/components/input/file.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,24 @@ import style from './input.module.css';
import { Typo } from '@atb/components/typography';
import { Button } from '@atb/components/button';
import { MonoIcon } from '@atb/components/icon';
import { PageText, useTranslation } from '@atb/translations';

export type FileInputProps = {
label: string;
onChange?: (files: File[]) => void;
} & Omit<JSX.IntrinsicElements['input'], 'onChange'>;

const MAX_ALLOWED_FILE_SIZE = 10 * 1024 * 1024; // 10MB

export function FileInput({ onChange, label, name }: FileInputProps) {
const { t } = useTranslation();
const id = useId();
const [files, setFiles] = useState<File[]>([]);

const handleFileChange = (event: ChangeEvent<HTMLInputElement>) => {
if (event.target.files) {
const newFilesArray = Array.from(event.target.files);
setFiles((prevFiles) => [...prevFiles, ...newFilesArray]);
if (onChange) {
onChange([...files, ...newFilesArray]);
}
handleFileUpload(newFilesArray);
}
};

Expand All @@ -36,10 +37,28 @@ export function FileInput({ onChange, label, name }: FileInputProps) {

if (event.dataTransfer.files) {
const droppedFiles = Array.from(event.dataTransfer.files);
setFiles((prevFiles) => [...prevFiles, ...droppedFiles]);
if (onChange) {
onChange([...files, ...droppedFiles]);
handleFileUpload(droppedFiles);
}
};

const handleFileUpload = (uploadedFiles: File[]) => {
const filteredFiles = uploadedFiles.filter((file) => {
const isTooLarge = file.size > MAX_ALLOWED_FILE_SIZE;
if (isTooLarge) {
alert(
t(
PageText.Contact.components.fileinput.errorMessages.tooLarge(
file.name,
),
),
);
}
return !isTooLarge;
});

setFiles((prevFiles) => [...prevFiles, ...filteredFiles]);
if (onChange) {
onChange([...files, ...filteredFiles]);
}
};

Expand Down
12 changes: 12 additions & 0 deletions src/translations/pages/contact.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1011,4 +1011,16 @@ export const Contact = {
'Her gjekk vi på ei blemme og det skjedde ein feil. Kan du prøve igjen?',
),
},
components: {
fileinput: {
errorMessages: {
tooLarge: (fileName: string) =>
_(
`Filen "${fileName}" er for stor. Maks 5 MB`,
`The file "${fileName}" is too large. Max 5 MB`,
`Fila "${fileName}" er for stor. Maks 5 MB`,
),
},
},
},
};

0 comments on commit 4def79d

Please sign in to comment.