Skip to content
This repository has been archived by the owner on Oct 23, 2024. It is now read-only.

Commit

Permalink
Add optional drag event handlers to dropzone (#258)
Browse files Browse the repository at this point in the history
* Add optional drag event handlers to dropzone

* Apply suggestions from code review

Co-authored-by: kenneth-duverge <77157695+kenneth-duverge@users.noreply.github.com>

---------

Co-authored-by: Sean Costello <sean.costello@vimeo.com>
Co-authored-by: kenneth-duverge <77157695+kenneth-duverge@users.noreply.github.com>
  • Loading branch information
3 people authored Apr 18, 2023
1 parent 4d93e9a commit 193ada4
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 5 deletions.
15 changes: 15 additions & 0 deletions src/components/inputs/Dropzone/Dropzone.story.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,26 @@ const onChange = (event: DropChangeEvent) => {
);
};

const onDragEnter = (event: DragEvent) => {
console.log('Drag enter', event);
};

const onDragLeave = (event: DragEvent) => {
console.log('Drag leave', event);
};

const onDragOver = (event: DragEvent) => {
console.log('Drag over', event);
};

const Template: Story<Props> = (args) => {
return (
<Dropzone
style={{ maxWidth: '40rem' }}
onChange={onChange}
onDragEnter={onDragEnter}
onDragLeave={onDragLeave}
onDragOver={onDragOver}
{...args}
>
<Header size="3">Drag files here</Header>
Expand Down
22 changes: 18 additions & 4 deletions src/components/inputs/Dropzone/Dropzone.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,26 @@ function DropzoneComponent({
forwardRef,
multiple,
onChange,
onDragEnter,
onDragLeave,
onDragOver,
...props
}: Props) {
const ref = useForwardRef(forwardRef);
const [drag, dragSet] = useState(false);

const onDragOver = stopPrevent<DragEvent>(() => dragSet(true));
const onDragLeave = stopPrevent<DragEvent>(() => dragSet(false));
const handleDragOver = stopPrevent<DragEvent>(
(e: DragEvent<HTMLDivElement>) => {
onDragOver?.(e);
dragSet(true);
}
);
const handleDragLeave = stopPrevent<DragEvent>(
(e: DragEvent<HTMLDivElement>) => {
onDragLeave?.(e);
dragSet(false);
}
);

const onDrop = stopPrevent<DragEvent>(
(event: DragEvent<HTMLDivElement> & DropChangeEvent) => {
Expand All @@ -39,8 +52,9 @@ function DropzoneComponent({
<DropzoneContainer
drag={active || drag}
format={format}
onDragLeave={onDragLeave}
onDragOver={onDragOver}
onDragEnter={onDragEnter}
onDragLeave={handleDragLeave}
onDragOver={handleDragOver}
onDrop={onDrop}
{...props}
>
Expand Down
5 changes: 4 additions & 1 deletion src/components/inputs/Dropzone/Dropzone.types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ChangeEvent, ReactNode } from 'react';
import { ChangeEvent, DragEventHandler, ReactNode } from 'react';
import { IrisInputProps } from '../../../utils';

export type DropChangeEvent = ChangeEvent<HTMLInputElement> & {
Expand All @@ -22,4 +22,7 @@ export type Props = IrisInputProps<{
*/
format?: 'primary' | 'secondary';
onChange?: (event: DropChangeEvent) => void;
onDragEnter?: DragEventHandler<HTMLDivElement>;
onDragLeave?: DragEventHandler<HTMLDivElement>;
onDragOver?: DragEventHandler<HTMLDivElement>;
}>;

0 comments on commit 193ada4

Please # to comment.