feat: implement client filesystem utilities
parent
c669e7fd0c
commit
8bf1f7fff6
@ -0,0 +1,49 @@
|
||||
export const uploadFile = (file: File, type: "dataUrl" | "text" = "text") => {
|
||||
return new Promise<string>((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.addEventListener("load", () => {
|
||||
if (reader.error) {
|
||||
return reject(reader.error);
|
||||
}
|
||||
if (reader.result == null) {
|
||||
return reject(new Error("Result was empty"));
|
||||
}
|
||||
resolve(reader.result.toString());
|
||||
});
|
||||
|
||||
if (type === "dataUrl") {
|
||||
reader.readAsDataURL(file);
|
||||
}
|
||||
if (type === "text") {
|
||||
reader.readAsText(file);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export const saveFile = (name: string, type: string, content: string) => {
|
||||
const a = document.createElement("a");
|
||||
const blob = new Blob([content], {
|
||||
type,
|
||||
});
|
||||
const url = URL.createObjectURL(blob);
|
||||
a.setAttribute("href", url);
|
||||
a.setAttribute("download", name);
|
||||
a.click();
|
||||
};
|
||||
|
||||
export const selectLocalFiles = (type: string[]) => {
|
||||
return new Promise<FileList>((resolve, reject) => {
|
||||
const fileInput = document.createElement("input");
|
||||
fileInput.type = "file";
|
||||
fileInput.accept = type.join(",");
|
||||
fileInput.oninput = (evt) => {
|
||||
const files: FileList | undefined = (evt.currentTarget as any).files;
|
||||
if (!files) {
|
||||
return resolve(new FileList());
|
||||
}
|
||||
|
||||
resolve(files);
|
||||
};
|
||||
fileInput.click();
|
||||
});
|
||||
};
|
Loading…
Reference in New Issue