From ebca043060d52f6fcefd4d5b0a2cbaa9bf888d40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81s=20Franco?= Date: Fri, 14 Aug 2020 13:08:04 +0200 Subject: [PATCH 1/3] feat: adds Ref forwarding --- src/index.tsx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 9f88503..961dc0e 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -6,6 +6,7 @@ import { ImageUploadingPropsType, ErrorsType, ResolutionType, + ExportInterface } from "./typings"; const { useRef, useState, useCallback } = React; @@ -17,7 +18,10 @@ const defaultErrors: ErrorsType = { resolution: false, }; -const ImageUploading: React.FC = ({ +const ImageUploading: React.RefForwardingComponent< +ExportInterface, +ImageUploadingPropsType +> = ({ multiple, onChange, maxNumber, @@ -29,7 +33,7 @@ const ImageUploading: React.FC = ({ resolutionHeight, resolutionType, onError, -}) => { +}, ref) => { const inputRef = useRef(null); const [imageList, setImageList] = useState(() => { let initImageList: Array = []; @@ -204,6 +208,13 @@ const ImageUploading: React.FC = ({ if (inputRef.current) inputRef.current.value = ""; }; + React.useImperativeHandle(ref, () => ({ + imageList, + onImageUpload, + onImageRemoveAll, + errors + })); + const acceptString = acceptType && acceptType.length > 0 ? acceptType.map((item) => `.${item}`).join(", ") @@ -236,7 +247,7 @@ ImageUploading.defaultProps = { acceptType: [], }; -export default ImageUploading; +export default React.forwardRef(ImageUploading); export { ImageType, From 06c52a9f1ad034f39a0680999eef3fdbdee3940a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81s=20Franco?= Date: Fri, 14 Aug 2020 13:12:24 +0200 Subject: [PATCH 2/3] refactor: removes defaultProps --- src/index.tsx | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 961dc0e..f6bba91 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -22,17 +22,17 @@ const ImageUploading: React.RefForwardingComponent< ExportInterface, ImageUploadingPropsType > = ({ - multiple, onChange, - maxNumber, children, defaultValue, - acceptType, maxFileSize, resolutionWidth, resolutionHeight, resolutionType, onError, + maxNumber = 1000, + multiple = false, + acceptType = [], }, ref) => { const inputRef = useRef(null); const [imageList, setImageList] = useState(() => { @@ -241,12 +241,6 @@ ImageUploadingPropsType ); }; -ImageUploading.defaultProps = { - maxNumber: 1000, - multiple: false, - acceptType: [], -}; - export default React.forwardRef(ImageUploading); export { From cd3d5baaf87616b0843ecb6f7776923bd89d2dc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81s=20Franco?= Date: Fri, 14 Aug 2020 13:17:10 +0200 Subject: [PATCH 3/3] refactor: export better typing for ref methods --- src/index.tsx | 5 +++-- src/typings.ts | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index f6bba91..c4a5bd5 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -6,7 +6,7 @@ import { ImageUploadingPropsType, ErrorsType, ResolutionType, - ExportInterface + ImageUploadingRef } from "./typings"; const { useRef, useState, useCallback } = React; @@ -19,7 +19,7 @@ const defaultErrors: ErrorsType = { }; const ImageUploading: React.RefForwardingComponent< -ExportInterface, +ImageUploadingRef, ImageUploadingPropsType > = ({ onChange, @@ -249,4 +249,5 @@ export { ImageUploadingPropsType, ErrorsType, ResolutionType, + ImageUploadingRef }; diff --git a/src/typings.ts b/src/typings.ts index 2dfddfa..9b1fe6e 100644 --- a/src/typings.ts +++ b/src/typings.ts @@ -29,6 +29,8 @@ export interface ExportInterface { errors: Record; } +export type ImageUploadingRef = ExportInterface + export type ErrorsType = { maxFileSize: boolean; maxNumber: boolean;