duimstok.prorail.nl/public/js/main.js

115 lines
3.8 KiB
JavaScript

(function () {
const A = window.App.Application;
const D = window.App.Domain;
const I = window.App.Infrastructure;
function openOrder(orderKey) {
A.state.currentOrderKey = orderKey;
const order = A.state.orders.find(o => o.orderKey === orderKey);
if (!order) return;
A.resetForm();
A.prefillFromOrder(order);
A.showScreen('screen-form');
A.loadSavedData(orderKey);
}
function goBackToOverview() {
A.saveCurrentForm();
A.state.currentOrderKey = null;
A.resetForm();
A.renderOverviewScreen(openOrder);
A.showScreen('screen-overview');
}
async function markOpnameGereed() {
if (!A.state.currentOrderKey) { alert('Geen order geselecteerd.'); return; }
await A.saveCurrentForm();
A.state.orderStatuses[A.state.currentOrderKey] = 'Opname gereed';
await I.saveOrderStatus(A.state.currentOrderKey, 'Opname gereed');
goBackToOverview();
}
function wireOverviewToolbar() {
document.getElementById('csvFileInput').addEventListener('change', async (e) => {
const file = e.target.files[0];
if (!file) return;
A.state.orders = await I.loadOrdersFromUpload(file);
A.renderOverviewScreen(openOrder);
e.target.value = '';
});
document.getElementById('btnOpenInstall').addEventListener('click', () => A.openInstallScreen());
document.querySelectorAll('.filter-btn').forEach(btn => {
btn.addEventListener('click', () => A.setFilter(btn.dataset.filter, openOrder));
});
document.querySelectorAll('.col-filter').forEach(inp => {
inp.addEventListener('input', () => {
inp.classList.toggle('has-value', inp.value.length > 0);
A.setColumnFilter(inp.dataset.col, inp.value, openOrder);
});
});
}
function wireInstallScreen() {
document.getElementById('btnInstallBack').addEventListener('click', () => {
A.showScreen('screen-overview');
});
}
function wireFormToolbar() {
document.getElementById('btnBack').addEventListener('click', goBackToOverview);
document.getElementById('btnOpnameGereed').addEventListener('click', markOpnameGereed);
document.getElementById('btnExport').addEventListener('click', () => A.exportFormData());
document.getElementById('btnPrint').addEventListener('click', () => window.print());
document.getElementById('xmlFileInput').addEventListener('change', async (e) => {
const file = e.target.files[0];
if (!file) return;
A.parseAndLoadXML(await file.text());
});
document.querySelectorAll('.tab-btn').forEach(btn => {
btn.addEventListener('click', () => A.switchTab(btn.dataset.tab));
});
document.getElementById('cameraInput').addEventListener('change', A.handlePhotoCapture);
document.getElementById('galleryInput').addEventListener('change', A.handlePhotoCapture);
document.getElementById('photoModalClose').addEventListener('click', A.closePhotoModal);
document.getElementById('lightbox').addEventListener('click', A.closeLightbox);
document.getElementById('btnOpenSvg').addEventListener('click', () => {
window.open('../PDF/Plaatje wissel_GW.svg', '_blank');
});
}
function wireKeyboard() {
document.addEventListener('keydown', e => {
if (e.key === 'Escape') { A.closePhotoModal(); A.closeLightbox(); }
});
}
async function init() {
await I.openDB();
A.state.orders = D.parseCSV(I.SEED_ORDERS_CSV);
A.state.orderStatuses = await I.loadAllOrderStatuses();
wireOverviewToolbar();
wireFormToolbar();
wireInstallScreen();
wireKeyboard();
A.renderOverviewScreen(openOrder);
A.initColumnResize();
A.initOverviewCapture();
A.pwa.register();
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();