Skip to content

Commit 1dd2aa1

Browse files
author
ChenYong
committed
handle files data in trigger function; alpha release
1 parent 94611bc commit 1dd2aa1

File tree

3 files changed

+29
-16
lines changed

3 files changed

+29
-16
lines changed

example/pages/upload-wrapper.tsx

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ let PageUploadWrapper: FC<{}> = React.memo((props) => {
1010

1111
let uploadPlugin = useUploadTrigger({
1212
acceptedFileTypes: ["jpg", "png"],
13-
onChange: async (files) => {
14-
console.log("files", files);
15-
},
1613
});
1714

1815
/** Methods */
@@ -34,7 +31,14 @@ let PageUploadWrapper: FC<{}> = React.memo((props) => {
3431
</DocDemo>
3532

3633
<DocDemo title="Upload Trigger">
37-
<JimoButton text="点击选取一个文件, 在 Console 查看" onClick={uploadPlugin.onUpload}></JimoButton>
34+
<JimoButton
35+
text="点击选取一个文件, 在 Console 查看"
36+
onClick={(event) => {
37+
uploadPlugin.onUpload((files) => {
38+
console.log("files", files);
39+
});
40+
}}
41+
></JimoButton>
3842
<DocSnippet code={hooksCode} />
3943
{uploadPlugin.ui}
4044
</DocDemo>
@@ -61,10 +65,14 @@ UploadWrapper 可以包裹一个区域, 用来获取 File 对象. 得到 File
6165
let hooksCode = `
6266
let uploadPlugin = useUploadTrigger({
6367
acceptedFileTypes: ["jpg", "png"],
64-
onChange: async (files) => {
65-
console.log("files", files);
66-
},
6768
});
6869
69-
<JimoButton text="点击选取一个文件, 在 Console 查看" onClick={uploadPlugin.onUpload}></JimoButton>
70+
<JimoButton
71+
text="点击选取一个文件, 在 Console 查看"
72+
onClick={(event) => {
73+
uploadPlugin.onUpload((files) => {
74+
console.log("files", files);
75+
});
76+
}}
77+
></JimoButton>
7078
`;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@jimengio/files-picker",
3-
"version": "0.0.1-a14",
3+
"version": "0.0.1-a15",
44
"description": "",
55
"main": "lib/index.js",
66
"scripts": {

src/component/upload-wrapper.tsx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@ interface IProps {
2525
accept?: string;
2626
multiple?: boolean;
2727
className?: string;
28-
onChange: (fileList: File[]) => Promise<void>;
28+
onChange?: (fileList: File[]) => Promise<void>;
2929
onError?: (error: EUploadError) => void;
3030
}
3131

3232
export let useUploadTrigger = (props: IProps) => {
3333
let inputElement = useRef(null);
34+
let filesHandlerRef = useRef<(files: File[]) => void>(null);
3435

3536
let inputAccepts = props.accept;
3637

@@ -49,11 +50,9 @@ export let useUploadTrigger = (props: IProps) => {
4950
accept={inputAccepts}
5051
multiple={props.multiple}
5152
onChange={async (e) => {
52-
if (props.onChange) {
53+
if (props.onChange || filesHandlerRef.current) {
5354
const fileList = Array.from(e.target.files); // copy to array before resetting
5455

55-
e.target.files = null; // without resetting, not able to trigger a change after failed
56-
5756
if (fileList.length > 0) {
5857
const files: File[] = [];
5958

@@ -69,14 +68,20 @@ export let useUploadTrigger = (props: IProps) => {
6968
files.push(file);
7069
});
7170

72-
props.onChange(files);
71+
props.onChange?.(files);
72+
filesHandlerRef.current?.(files);
73+
filesHandlerRef.current = null;
7374
}
7475
}
76+
77+
// reset selected files to null, or selecting same file will not trigger events
78+
e.target.value = "";
7579
}}
7680
/>
7781
);
7882

79-
let onUpload = () => {
83+
let onUpload = (onFiles: (files: File[]) => void) => {
84+
filesHandlerRef.current = onFiles;
8085
if (inputElement.current != null) {
8186
inputElement.current.click();
8287
} else {
@@ -101,7 +106,7 @@ let UploadWrapper: FC<IProps> = React.memo((props) => {
101106
<div
102107
className={cx(styleWrapper, props.className)}
103108
onClick={() => {
104-
uploadPlugin.onUpload();
109+
uploadPlugin.onUpload(null);
105110
}}
106111
>
107112
{props.children}

0 commit comments

Comments
 (0)