From 6dac36d6fa203430ea5510e1c720fb73afdbcf43 Mon Sep 17 00:00:00 2001 From: Maynor Pineda Date: Thu, 24 Nov 2022 13:17:15 -0600 Subject: [PATCH 1/3] Add the getFilesFromEvent and validator props --- src/mantine-dropzone/src/Dropzone.tsx | 38 ++++++++++++++++++++------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/mantine-dropzone/src/Dropzone.tsx b/src/mantine-dropzone/src/Dropzone.tsx index a5a33b993fd..6ae45f419e4 100644 --- a/src/mantine-dropzone/src/Dropzone.tsx +++ b/src/mantine-dropzone/src/Dropzone.tsx @@ -1,19 +1,27 @@ -import React from 'react'; -import { useDropzone, FileRejection, Accept, FileWithPath } from 'react-dropzone'; import { + Box, DefaultProps, - Selectors, - MantineNumberSize, LoadingOverlay, - Box, - useComponentDefaultProps, + MantineNumberSize, + Selectors, + useComponentDefaultProps } from '@mantine/core'; import { assignRef } from '@mantine/hooks'; import { ForwardRefWithStaticComponents } from '@mantine/utils'; +import { fromEvent } from 'file-selector'; +import React from 'react'; +import { + Accept, + DropEvent, + FileError, + FileRejection, + FileWithPath, + useDropzone +} from 'react-dropzone'; import { DropzoneProvider } from './Dropzone.context'; -import { DropzoneAccept, DropzoneIdle, DropzoneReject } from './DropzoneStatus'; -import type { DropzoneFullScreenType } from './DropzoneFullScreen'; import useStyles from './Dropzone.styles'; +import type { DropzoneFullScreenType } from './DropzoneFullScreen'; +import { DropzoneAccept, DropzoneIdle, DropzoneReject } from './DropzoneStatus'; export type DropzoneStylesNames = Selectors; @@ -97,6 +105,12 @@ export interface DropzoneProps /** Set to true to use the File System Access API to open the file picker instead of using an click event, defaults to true */ useFsAccessApi?: boolean; + + /** Use this to provide a custom file aggregator */ + getFilesFromEvent?: (event: DropEvent) => Promise>; + + /** Custom validation function. It must return null if there's no errors. */ + validator?: (file: T) => FileError | FileError[] | null; } export const defaultProps: Partial = { @@ -110,6 +124,8 @@ export const defaultProps: Partial = { dragEventsBubbling: true, activateOnKeyboard: true, useFsAccessApi: true, + getFilesFromEvent: fromEvent, + validator: null, }; export function _Dropzone(props: DropzoneProps) { @@ -144,6 +160,8 @@ export function _Dropzone(props: DropzoneProps) { onFileDialogOpen, preventDropOnDocument, useFsAccessApi, + getFilesFromEvent, + validator, ...others } = useComponentDefaultProps('Dropzone', defaultProps, props); @@ -173,7 +191,9 @@ export function _Dropzone(props: DropzoneProps) { onFileDialogOpen, preventDropOnDocument, useFsAccessApi, - }); + getFilesFromEvent, + validator, +`` }); assignRef(openRef, open); From 15592f205f55b8c8f0cff639221e933eb289da3f Mon Sep 17 00:00:00 2001 From: Maynor Pineda Date: Fri, 25 Nov 2022 13:19:39 -0600 Subject: [PATCH 2/3] Remove values from defaultProps --- src/mantine-dropzone/src/Dropzone.tsx | 40 +++++++++++++-------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/mantine-dropzone/src/Dropzone.tsx b/src/mantine-dropzone/src/Dropzone.tsx index 6ae45f419e4..c91e3b6e8d9 100644 --- a/src/mantine-dropzone/src/Dropzone.tsx +++ b/src/mantine-dropzone/src/Dropzone.tsx @@ -1,27 +1,27 @@ -import { - Box, - DefaultProps, - LoadingOverlay, - MantineNumberSize, - Selectors, - useComponentDefaultProps -} from '@mantine/core'; -import { assignRef } from '@mantine/hooks'; -import { ForwardRefWithStaticComponents } from '@mantine/utils'; -import { fromEvent } from 'file-selector'; import React from 'react'; import { + useDropzone, + FileRejection, Accept, + FileWithPath, DropEvent, FileError, - FileRejection, - FileWithPath, - useDropzone } from 'react-dropzone'; +import { fromEvent } from 'file-selector'; +import { + DefaultProps, + Selectors, + MantineNumberSize, + LoadingOverlay, + Box, + useComponentDefaultProps, +} from '@mantine/core'; +import { assignRef } from '@mantine/hooks'; +import { ForwardRefWithStaticComponents } from '@mantine/utils'; import { DropzoneProvider } from './Dropzone.context'; -import useStyles from './Dropzone.styles'; -import type { DropzoneFullScreenType } from './DropzoneFullScreen'; import { DropzoneAccept, DropzoneIdle, DropzoneReject } from './DropzoneStatus'; +import type { DropzoneFullScreenType } from './DropzoneFullScreen'; +import useStyles from './Dropzone.styles'; export type DropzoneStylesNames = Selectors; @@ -124,8 +124,6 @@ export const defaultProps: Partial = { dragEventsBubbling: true, activateOnKeyboard: true, useFsAccessApi: true, - getFilesFromEvent: fromEvent, - validator: null, }; export function _Dropzone(props: DropzoneProps) { @@ -191,9 +189,9 @@ export function _Dropzone(props: DropzoneProps) { onFileDialogOpen, preventDropOnDocument, useFsAccessApi, - getFilesFromEvent, - validator, -`` }); + getFilesFromEvent: getFilesFromEvent || fromEvent, + validator: validator || null, + }); assignRef(openRef, open); From 57a1745238ab369a2e7dc120595903b4ac4d9cba Mon Sep 17 00:00:00 2001 From: Maynor Pineda Date: Mon, 28 Nov 2022 08:45:06 -0600 Subject: [PATCH 3/3] Remove values from defaultProps --- src/mantine-dropzone/src/Dropzone.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/mantine-dropzone/src/Dropzone.tsx b/src/mantine-dropzone/src/Dropzone.tsx index c91e3b6e8d9..22d2c7bb8ec 100644 --- a/src/mantine-dropzone/src/Dropzone.tsx +++ b/src/mantine-dropzone/src/Dropzone.tsx @@ -7,7 +7,6 @@ import { DropEvent, FileError, } from 'react-dropzone'; -import { fromEvent } from 'file-selector'; import { DefaultProps, Selectors, @@ -189,8 +188,8 @@ export function _Dropzone(props: DropzoneProps) { onFileDialogOpen, preventDropOnDocument, useFsAccessApi, - getFilesFromEvent: getFilesFromEvent || fromEvent, - validator: validator || null, + getFilesFromEvent, + validator, }); assignRef(openRef, open);