From 6b4019e6285fa755866b9073c6a60f725d242a33 Mon Sep 17 00:00:00 2001 From: donglei Date: Tue, 20 Aug 2024 09:49:10 +0800 Subject: [PATCH] fix: openFileDialogOnClick supports a function that returns a boolean value --- README.md | 2 +- src/AjaxUploader.tsx | 9 +++++++-- src/interface.tsx | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 50cfcb0..030dd46 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ React.render(, container); |beforeUpload| function |null| before upload check, return false or a rejected Promise will stop upload, only for modern browsers| |customRequest | function | null | provide an override for the default xhr behavior for additional customization| |withCredentials | boolean | false | ajax upload with cookie send | -|openFileDialogOnClick | boolean | true | useful for drag only upload as it does not trigger on enter key or click event | +|openFileDialogOnClick | boolean/function():boolean | true | useful for drag only upload as it does not trigger on enter key or click event | #### onError arguments diff --git a/src/AjaxUploader.tsx b/src/AjaxUploader.tsx index c8d4b9a..d56da8a 100644 --- a/src/AjaxUploader.tsx +++ b/src/AjaxUploader.tsx @@ -261,6 +261,11 @@ class AjaxUploader extends Component { this.fileInput = node; }; + eventHandler = (fn: (() => boolean) | boolean, originFn: Function, e: React.MouseEvent | React.KeyboardEvent) => { + if (typeof fn === 'function' ? fn() : fn) { + originFn(e); + } + }; render() { const { component: Tag, @@ -294,8 +299,8 @@ class AjaxUploader extends Component { const events = disabled ? {} : { - onClick: openFileDialogOnClick ? this.onClick : () => {}, - onKeyDown: openFileDialogOnClick ? this.onKeyDown : () => {}, + onClick: (e) => this.eventHandler(openFileDialogOnClick, this.onClick, e), + onKeyDown: (e) => this.eventHandler(openFileDialogOnClick, this.onKeyDown, e), onMouseEnter, onMouseLeave, onDrop: this.onFileDrop, diff --git a/src/interface.tsx b/src/interface.tsx index 1c6e1d5..5485a99 100644 --- a/src/interface.tsx +++ b/src/interface.tsx @@ -31,7 +31,7 @@ export interface UploadProps ) => BeforeUploadFileType | Promise | void; customRequest?: (option: UploadRequestOption) => void | { abort: () => void }; withCredentials?: boolean; - openFileDialogOnClick?: boolean; + openFileDialogOnClick?: boolean | (() => boolean); prefixCls?: string; id?: string; onMouseEnter?: (e: React.MouseEvent) => void;