|
1 | 1 | import { type Datapack, loadDatapack } from "./datapack"; |
| 2 | +import { DatapacksChangedEvent, datapackStore } from "./datapackStore"; |
2 | 3 |
|
3 | 4 | const fileUploadElement = document.getElementById("input")!; |
4 | 5 | fileUploadElement.addEventListener("change", onFileUploaded, { passive: true }); |
| 6 | +datapackStore.addEventListener("datapacksChanged", updateDatapackDisplay, { passive: true }); |
5 | 7 |
|
6 | 8 | async function onFileUploaded(e: Event) { |
7 | 9 | const fileList = (e.target as HTMLInputElement).files; |
8 | 10 | if (!fileList) return; |
9 | 11 |
|
| 12 | + console.time("loadDatapacks"); |
10 | 13 | const acceptedTypes = ["application/zip", "application/java-archive"]; |
11 | 14 | const zipFiles = Array.from(fileList).filter((file) => acceptedTypes.includes(file.type)); |
12 | 15 | const datapacks = await Promise.all(zipFiles.map(loadDatapack)); |
| 16 | + const validDatapacks = datapacks.filter((dp) => dp instanceof Object); |
| 17 | + console.timeEnd("loadDatapacks"); |
13 | 18 |
|
14 | | - console.log(datapacks); |
| 19 | + datapackStore.add(validDatapacks); |
| 20 | +} |
15 | 21 |
|
16 | | - const dpDisplayElement = datapacks |
17 | | - .filter((dp) => dp instanceof Object) |
18 | | - .map(createDatapackDisplayElement); |
| 22 | +function updateDatapackDisplay(event: Event) { |
| 23 | + const { detail } = event as DatapacksChangedEvent; |
| 24 | + const dpDisplayElement = detail.map(createDatapackDisplayElement); |
19 | 25 |
|
20 | | - document.getElementById("datapack-display")!.innerHTML = ""; |
| 26 | + const datapackDisplay = document.getElementById("datapack-display")!; |
| 27 | + datapackDisplay.innerHTML = ""; |
21 | 28 | dpDisplayElement.forEach((element) => { |
22 | | - document.getElementById("datapack-display")!.appendChild(element); |
| 29 | + datapackDisplay.appendChild(element); |
23 | 30 | }); |
24 | 31 | } |
25 | 32 |
|
|
0 commit comments