nc-planner/scripts/configuration.js

66 lines
1.7 KiB
JavaScript

import { buildAtlas } from "./atlas.js";
import { emitEvent } from "./events.js";
import { setState, STATE } from "./state.js";
export let configuration = {};
export async function loadConfiguration(event) {
setState(STATE.initialization);
emitEvent("config:load:start");
let configData = null;
if (typeof event === "string") {
configData = await fetch(`./configurations/${event}.ncpf.json`)
.then(data => data.json());
} else if (event.target.dataset.configuration) {
const configuration = event.target.dataset.configuration;
console.log(configuration);
configData = await fetch(`./configurations/${configuration}.ncpf.json`)
.then(data => data.json());
} else if (event.target.files[0]) {
const file = event.target.files[0];
configData = await new Promise(resolve => {
const reader = new FileReader();
reader.addEventListener("load", () => {
resolve(JSON.parse(reader.result));
});
reader.readAsText(file);
});
} else {
throw new Error("Configuration load failed - unrecognised event");
}
if ((configData.designs ?? []).length > 0) {
throw new Error("Configuration load failed - contains designs, likely not full configuration");
}
emitEvent("config:load:end");
try {
await processConfiguration(configData);
} catch (e) {
emitEvent("config:fail");
throw e;
}
configuration = configData;
emitEvent("config:end");
}
export async function processConfiguration(data) {
emitEvent("config:process:start");
console.log(data);
try {
await buildAtlas(data);
} catch (e) {
console.error(e);
emitEvent("config:process:fail");
throw e;
}
emitEvent("config:process:end");
}