From e20baad4bcf15cac996e5da835bca3b2f690a193 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 2 Jun 2022 17:43:23 +0200 Subject: [PATCH 1/9] allow empty folder on Files --- .../src/FileInput/FileInput.tsx | 17 ++- ...etFilesAndEmptyDirFromDataTransferItems.ts | 100 ++++++++++++++++++ packages/common-components/src/utils/index.ts | 1 + .../Modules/FileBrowsers/CSFFileBrowser.tsx | 15 ++- .../FileBrowsers/SharedFileBrowser.tsx | 24 ++++- .../Modules/FileBrowsers/UploadFileModal.tsx | 13 ++- .../files-ui/src/Contexts/FilesContext.tsx | 3 +- .../Utils/getFilesFromDataTransferItems.ts | 80 -------------- 8 files changed, 157 insertions(+), 96 deletions(-) create mode 100644 packages/common-components/src/utils/getFilesAndEmptyDirFromDataTransferItems.ts delete mode 100644 packages/files-ui/src/Utils/getFilesFromDataTransferItems.ts diff --git a/packages/common-components/src/FileInput/FileInput.tsx b/packages/common-components/src/FileInput/FileInput.tsx index 39ebe5b79c..384544fa82 100644 --- a/packages/common-components/src/FileInput/FileInput.tsx +++ b/packages/common-components/src/FileInput/FileInput.tsx @@ -7,6 +7,7 @@ import { Button } from "../Button" import { Typography } from "../Typography" import { PlusIcon, CrossIcon } from "../Icons" import { ScrollbarWrapper } from "../ScrollbarWrapper" +import { getFilesAndEmptyDirFromDataTransferItems } from "../utils" const useStyles = makeStyles(({ constants, palette, overrides }: ITheme) => createStyles({ @@ -118,6 +119,7 @@ interface IFileInputProps extends DropzoneOptions { error?: string } onFileNumberChange: (filesNumber: number) => void + onEmptyFolderChange?: (emptyFolderPaths: string[]) => void moreFilesLabel: string testId?: string } @@ -132,6 +134,7 @@ const FileInput = ({ maxFileSize, classNames, onFileNumberChange, + onEmptyFolderChange, moreFilesLabel, testId, ...props @@ -188,9 +191,17 @@ const FileInput = ({ const { getRootProps, getInputProps, open } = useDropzone({ onDrop, - ...dropZoneProps + ...dropZoneProps, + getFilesFromEvent }) + async function getFilesFromEvent(event: any) { + const res = await getFilesAndEmptyDirFromDataTransferItems(event.dataTransfer.items) + onEmptyFolderChange && res.emptyDirPaths?.length && onEmptyFolderChange(res.emptyDirPaths) + + return res.files as File[] || [] + } + const removeItem = (i: number) => { const items = value items.splice(i, 1) @@ -224,12 +235,12 @@ const FileInput = ({ >