From 82c6f658e84a1198f79c3b10b945dd92b16b1f74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Tue, 12 Sep 2023 01:11:07 +0200 Subject: [PATCH] Allow to drag files to avatar/header pickers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- .../edit-profile/components/avatar-picker.tsx | 23 +++++++++++++++---- .../edit-profile/components/header-picker.tsx | 22 ++++++++++++++---- .../manage-group-modal/steps/details-step.tsx | 5 ++-- app/soapbox/hooks/forms/useImageField.ts | 2 +- 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/app/soapbox/features/edit-profile/components/avatar-picker.tsx b/app/soapbox/features/edit-profile/components/avatar-picker.tsx index 09a6b0d29..afbd54a71 100644 --- a/app/soapbox/features/edit-profile/components/avatar-picker.tsx +++ b/app/soapbox/features/edit-profile/components/avatar-picker.tsx @@ -1,30 +1,43 @@ import clsx from 'clsx'; -import React from 'react'; +import React, { useRef } from 'react'; import { FormattedMessage } from 'react-intl'; import { Avatar, Icon, HStack } from 'soapbox/components/ui'; +import { useDraggedFiles } from 'soapbox/hooks'; interface IMediaInput { className?: string src: string | undefined accept: string - onChange: React.ChangeEventHandler + onChange: (files: FileList | null) => void disabled?: boolean } const AvatarPicker = React.forwardRef(({ className, src, onChange, accept, disabled }, ref) => { + const picker = useRef(null); + + const { isDragging, isDraggedOver } = useDraggedFiles(picker, (files) => { + onChange(files); + }); + return (