C2M / main.js
CVNSS's picture
Upload main.js
cdfafec verified
import "./style.css";
async function loadProvincesLocal() {
const res = await fetch("./provinces.json", { cache: "no-store" });
if (!res.ok) throw new Error("Không tải được provinces.json");
return res.json();
}
function makeWorker(url) {
return new Worker(new URL(url, import.meta.url), { type: "module" });
}
async function boot() {
const el = document.querySelector("#app");
el.innerHTML = `
<div style="padding:16px;font-family:system-ui">
<h2>CAD2MAP (Local-only)</h2>
<div id="prov">Đang tải provinces...</div>
<input id="file" type="file" />
<div id="log" style="margin-top:12px;white-space:pre-wrap"></div>
</div>
`;
const log = (s) => (document.querySelector("#log").textContent += s + "\n");
// 1) Provinces local-only
try {
const p = await loadProvincesLocal();
document.querySelector("#prov").textContent = `Provinces: ${p.length} (từ provinces.json, không cloud)`;
} catch (e) {
document.querySelector("#prov").textContent = "Lỗi tải provinces (local)";
log(String(e));
}
// 2) Worker (parse client-side)
const dxfWorker = makeWorker("./workers/dxf-parser-worker.js");
document.querySelector("#file").addEventListener("change", async (ev) => {
const f = ev.target.files?.[0];
if (!f) return;
const buf = await f.arrayBuffer();
const id = crypto.randomUUID();
dxfWorker.postMessage({ id, input: { fileName: f.name, buffer: buf } }, [buf]);
dxfWorker.onmessage = (msgEv) => {
const { success, error } = msgEv.data || {};
if (!success) log("DXF worker: " + (error || "fail"));
else log("DXF worker: OK");
};
});
}
boot();