feat: add warning for large files

This commit is contained in:
diced 2023-07-08 21:10:08 -07:00
parent f4aad566c9
commit fe08fd40fc
No known key found for this signature in database
GPG key ID: 370BD1BA142842D1

View file

@ -14,22 +14,44 @@ import {
import { Dropzone } from '@mantine/dropzone'; import { Dropzone } from '@mantine/dropzone';
import { useClipboard } from '@mantine/hooks'; import { useClipboard } from '@mantine/hooks';
import { useModals } from '@mantine/modals'; import { useModals } from '@mantine/modals';
import { IconFiles, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { IconDeviceSdCard, IconFiles, IconPhoto, IconUpload, IconX } from '@tabler/icons-react';
import Link from 'next/link'; import Link from 'next/link';
import { useState } from 'react'; import { useState } from 'react';
import { uploadFiles } from '../uploadFiles'; import { uploadFiles } from '../uploadFiles';
import ToUploadFile from './ToUploadFile'; import ToUploadFile from './ToUploadFile';
import { useConfig } from '@/components/ConfigProvider';
import bytes from 'bytes';
import { notifications } from '@mantine/notifications';
export default function UploadFile() { export default function UploadFile() {
const theme = useMantineTheme(); const theme = useMantineTheme();
const modals = useModals(); const modals = useModals();
const clipboard = useClipboard(); const clipboard = useClipboard();
const config = useConfig();
const [files, setFiles] = useState<File[]>([]); const [files, setFiles] = useState<File[]>([]);
const [progress, setProgress] = useState(0); const [progress, setProgress] = useState(0);
const [dropLoading, setLoading] = useState(false); const [dropLoading, setLoading] = useState(false);
const aggregateSize = () => files.reduce((acc, file) => acc + file.size, 0);
const upload = () => { const upload = () => {
const size = aggregateSize();
if (size > config.files.maxFileSize) {
notifications.show({
title: 'Upload may fail',
color: 'red',
icon: <IconDeviceSdCard size='1rem' />,
message: (
<>
The upload may fail because the total size of the files you are trying to upload is{' '}
<b>{bytes(size, { unitSeparator: ' ' })}</b>, which is larger than the limit of{' '}
<b>{bytes(config.files.maxFileSize, { unitSeparator: ' ' })}</b>
</>
),
});
}
uploadFiles(files, { uploadFiles(files, {
setFiles, setFiles,
setLoading, setLoading,
@ -78,6 +100,9 @@ export default function UploadFile() {
<Text size='sm' color='dimmed' inline mt={7}> <Text size='sm' color='dimmed' inline mt={7}>
Attach as many files as you like, they will show up below to review before uploading. Attach as many files as you like, they will show up below to review before uploading.
</Text> </Text>
<Text size='sm' color='dimmed' mt={7}>
<b>{bytes(config.files.maxFileSize, { unitSeparator: ' ' })}</b> limit per file
</Text>
</div> </div>
</Group> </Group>
</Dropzone> </Dropzone>
@ -103,7 +128,7 @@ export default function UploadFile() {
size='xl' size='xl'
onClick={upload} onClick={upload}
> >
Upload {files.length} files Upload {files.length} files ({bytes(aggregateSize(), { unitSeparator: ' ' })})
</Button> </Button>
</> </>
); );