-
Notifications
You must be signed in to change notification settings - Fork 150
Expand file tree
/
Copy pathindex.tsx
More file actions
126 lines (112 loc) · 3 KB
/
index.tsx
File metadata and controls
126 lines (112 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import { type Component, createSignal, For } from "solid-js";
import { createDropzone, createFileUploader, fileUploader } from "../src/index.js";
import { doStuff } from "../src/helpers.js";
import type { UploadFile } from "../src/types.js";
fileUploader;
const SingleFileUpload: Component = () => {
const { files, selectFiles } = createFileUploader();
const { files: filesAsync, selectFiles: selectFilesAsync } = createFileUploader();
return (
<div>
<div>
<h5>Select a single file</h5>
<button
onClick={() => {
selectFiles(([{ source, name, size, file }]) => {
console.log({ source, name, size, file });
});
}}
>
Select
</button>
<For each={files()}>{file => <p>{file.name}</p>}</For>
</div>
<div>
<h5>Select a single file with async callback</h5>
<button
onClick={() => {
selectFilesAsync(async ([{ source, name, size, file }]) => {
await doStuff(2);
console.log({ source, name, size, file });
});
}}
>
Select
</button>
<For each={filesAsync()}>{file => <p>{file.name}</p>}</For>
</div>
</div>
);
};
const MultipleFileUpload: Component = () => {
const { files, selectFiles } = createFileUploader({
multiple: true,
accept: "image/*",
});
return (
<div>
<h5>Select multiple files</h5>
<button
onClick={() => {
selectFiles(files => files.forEach(file => console.log(file)));
}}
>
Select
</button>
<For each={files()}>{item => <p>{item.name}</p>}</For>
</div>
);
};
const Dropzone: Component = () => {
const { setRef: dropzoneRef, files: droppedFiles } = createDropzone({
onDrop: async files => {
await doStuff(2);
files.forEach(f => console.log(f));
},
onDragOver: files => console.log("over", files.length),
});
return (
<div>
<h5>
Upload files using <strong>createDropzone</strong> with `div` and async callback
</h5>
<div ref={dropzoneRef} style={{ width: "100px", height: "100px", background: "red" }}>
Dropzone
</div>
<For each={droppedFiles()}>{file => <p>{file.name}</p>}</For>
</div>
);
};
const FileUploaderDirective: Component = () => {
const [files, setFiles] = createSignal<UploadFile[]>([]);
return (
<div>
<h5>
Upload files using <strong>fileUploader directive</strong>
</h5>
<input
type="file"
multiple
use:fileUploader={{
userCallback: fs => fs.forEach(f => console.log(f)),
setFiles,
}}
/>
<For each={files()}>{file => <p>{file.name}</p>}</For>
</div>
);
};
const App: Component = () => {
return (
<div>
<Dropzone />
<hr />
<SingleFileUpload />
<hr />
<MultipleFileUpload />
<hr />
<FileUploaderDirective />
</div>
);
};
export default App;