forked from solidjs-community/solid-primitives
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.ts
More file actions
43 lines (35 loc) · 1.15 KB
/
index.ts
File metadata and controls
43 lines (35 loc) · 1.15 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
import { JSX, onCleanup, onMount } from "solid-js";
import { isServer } from "solid-js/web";
import { transformFiles } from "./helpers.js";
import { FileUploaderDirective } from "./types.js";
declare module "solid-js" {
namespace JSX {
interface Directives {
fileUploader: FileUploaderDirective;
}
}
}
export const fileUploader = (element: HTMLInputElement, options: () => FileUploaderDirective) => {
if (isServer) {
return;
}
const { userCallback, setFiles } = options();
onMount(() => {
const onChange: JSX.EventHandler<HTMLInputElement, Event> = async event => {
const parsedFiles = transformFiles(event.currentTarget.files);
setFiles(parsedFiles);
try {
await userCallback(parsedFiles);
} catch (error) {
// eslint-disable-next-line no-console
console.error(error);
}
return;
};
onCleanup(() => element.removeEventListener("change", onChange as any));
element.addEventListener("change", onChange as any);
});
};
export { createFileUploader } from "./createFileUploader.js";
export { createDropzone } from "./createDropzone.js";
export * from "./types.js";