Spaces:
Running
Running
Update events.js
Browse files
events.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
| 1 |
// events.js - Manages all event listeners
|
| 2 |
|
| 3 |
-
import { appState, saveState } from './state.js';
|
| 4 |
import { handleUpdateStock, handleRestock } from './services.js';
|
| 5 |
import { refreshUI, showToast, renderReport } from './ui.js';
|
|
|
|
| 6 |
|
| 7 |
export function attachAllListeners() {
|
| 8 |
attachProductInputListeners();
|
| 9 |
attachMaxStockEditListeners();
|
| 10 |
attachRestockListeners();
|
|
|
|
| 11 |
attachModalListeners();
|
| 12 |
}
|
| 13 |
|
|
@@ -57,28 +59,42 @@ function attachMaxStockEditListeners() {
|
|
| 57 |
}
|
| 58 |
|
| 59 |
function attachRestockListeners() {
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
|
|
|
|
|
|
|
|
|
| 64 |
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
if (btn.dataset.listenerAttached) return;
|
| 80 |
btn.dataset.listenerAttached = true;
|
| 81 |
-
btn.addEventListener('click',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
});
|
| 83 |
}
|
| 84 |
|
|
@@ -86,12 +102,13 @@ function attachModalListeners() {
|
|
| 86 |
const resetModal = document.getElementById('reset-modal');
|
| 87 |
const reportsModal = document.getElementById('reports-modal');
|
| 88 |
|
|
|
|
| 89 |
const showResetModalBtn = document.getElementById('show-reset-modal-btn');
|
| 90 |
if (!showResetModalBtn.dataset.listenerAttachedForReset) {
|
| 91 |
showResetModalBtn.addEventListener('click', () => resetModal.classList.remove('hidden'));
|
| 92 |
resetModal.addEventListener('click', (e) => {
|
| 93 |
const target = e.target.closest('button');
|
| 94 |
-
if (target && target.id === 'cancel-reset-btn' || e.target.id === 'reset-modal') {
|
| 95 |
resetModal.classList.add('hidden');
|
| 96 |
}
|
| 97 |
if (target && target.id === 'confirm-reset-btn') {
|
|
@@ -102,12 +119,13 @@ function attachModalListeners() {
|
|
| 102 |
showResetModalBtn.dataset.listenerAttachedForReset = true;
|
| 103 |
}
|
| 104 |
|
|
|
|
| 105 |
const showReportsModalBtn = document.getElementById('show-reports-modal-btn');
|
| 106 |
if (!showReportsModalBtn.dataset.listenerAttachedForReports) {
|
| 107 |
showReportsModalBtn.addEventListener('click', () => reportsModal.classList.remove('hidden'));
|
| 108 |
reportsModal.addEventListener('click', (e) => {
|
| 109 |
const target = e.target.closest('button');
|
| 110 |
-
if (target && target.id === 'close-reports-modal-btn' || e.target.id === 'reports-modal') {
|
| 111 |
reportsModal.classList.add('hidden');
|
| 112 |
}
|
| 113 |
if (target && target.id === 'report-prod-summary') renderReport('production');
|
|
|
|
| 1 |
// events.js - Manages all event listeners
|
| 2 |
|
| 3 |
+
import { appState, saveState, loadState } from './state.js';
|
| 4 |
import { handleUpdateStock, handleRestock } from './services.js';
|
| 5 |
import { refreshUI, showToast, renderReport } from './ui.js';
|
| 6 |
+
import { generatePurchaseOrder } from './purchaseOrderService.js';
|
| 7 |
|
| 8 |
export function attachAllListeners() {
|
| 9 |
attachProductInputListeners();
|
| 10 |
attachMaxStockEditListeners();
|
| 11 |
attachRestockListeners();
|
| 12 |
+
attachPurchaseOrderListeners();
|
| 13 |
attachModalListeners();
|
| 14 |
}
|
| 15 |
|
|
|
|
| 59 |
}
|
| 60 |
|
| 61 |
function attachRestockListeners() {
|
| 62 |
+
document.querySelectorAll('.restock-icon').forEach(btn => {
|
| 63 |
+
if (btn.dataset.listenerAttached) return;
|
| 64 |
+
btn.dataset.listenerAttached = true;
|
| 65 |
+
btn.addEventListener('click', (e) => {
|
| 66 |
+
const parentEl = e.target.closest('[data-material-name]');
|
| 67 |
+
const materialName = parentEl.dataset.materialName;
|
| 68 |
+
const formContainer = parentEl.querySelector('.restock-form');
|
| 69 |
|
| 70 |
+
if (formContainer.classList.contains('hidden')) {
|
| 71 |
+
document.querySelectorAll('.restock-form').forEach(f => { f.classList.add('hidden'); f.innerHTML = ''; });
|
| 72 |
+
formContainer.classList.remove('hidden');
|
| 73 |
+
formContainer.innerHTML = `<div class="flex items-center gap-2"><input type="number" placeholder="Qty" class="input-field w-20"><button class="btn btn-primary text-xs confirm-restock-btn">Add</button></div>`;
|
| 74 |
+
const input = formContainer.querySelector('input');
|
| 75 |
+
input.focus();
|
| 76 |
+
formContainer.querySelector('.confirm-restock-btn').addEventListener('click', () => { handleRestock(materialName, parseInt(input.value, 10)); });
|
| 77 |
+
input.addEventListener('keydown', (event) => { if (event.key === 'Enter') handleRestock(materialName, parseInt(input.value, 10)); if (event.key === 'Escape') formContainer.classList.add('hidden'); });
|
| 78 |
+
} else {
|
| 79 |
+
formContainer.classList.add('hidden');
|
| 80 |
+
formContainer.innerHTML = '';
|
| 81 |
+
}
|
| 82 |
+
});
|
| 83 |
+
});
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
function attachPurchaseOrderListeners() {
|
| 87 |
+
document.querySelectorAll('.generate-po-btn').forEach(btn => {
|
| 88 |
if (btn.dataset.listenerAttached) return;
|
| 89 |
btn.dataset.listenerAttached = true;
|
| 90 |
+
btn.addEventListener('click', (e) => {
|
| 91 |
+
const materialName = e.target.closest('[data-material-name]').dataset.materialName;
|
| 92 |
+
const material = appState.materials.find(m => m.name === materialName);
|
| 93 |
+
if (material) {
|
| 94 |
+
generatePurchaseOrder(material);
|
| 95 |
+
showToast(`Generated PO for ${material.name}`, 'success');
|
| 96 |
+
}
|
| 97 |
+
});
|
| 98 |
});
|
| 99 |
}
|
| 100 |
|
|
|
|
| 102 |
const resetModal = document.getElementById('reset-modal');
|
| 103 |
const reportsModal = document.getElementById('reports-modal');
|
| 104 |
|
| 105 |
+
// Reset Modal
|
| 106 |
const showResetModalBtn = document.getElementById('show-reset-modal-btn');
|
| 107 |
if (!showResetModalBtn.dataset.listenerAttachedForReset) {
|
| 108 |
showResetModalBtn.addEventListener('click', () => resetModal.classList.remove('hidden'));
|
| 109 |
resetModal.addEventListener('click', (e) => {
|
| 110 |
const target = e.target.closest('button');
|
| 111 |
+
if ((target && target.id === 'cancel-reset-btn') || e.target.id === 'reset-modal') {
|
| 112 |
resetModal.classList.add('hidden');
|
| 113 |
}
|
| 114 |
if (target && target.id === 'confirm-reset-btn') {
|
|
|
|
| 119 |
showResetModalBtn.dataset.listenerAttachedForReset = true;
|
| 120 |
}
|
| 121 |
|
| 122 |
+
// Reports Modal
|
| 123 |
const showReportsModalBtn = document.getElementById('show-reports-modal-btn');
|
| 124 |
if (!showReportsModalBtn.dataset.listenerAttachedForReports) {
|
| 125 |
showReportsModalBtn.addEventListener('click', () => reportsModal.classList.remove('hidden'));
|
| 126 |
reportsModal.addEventListener('click', (e) => {
|
| 127 |
const target = e.target.closest('button');
|
| 128 |
+
if ((target && target.id === 'close-reports-modal-btn') || e.target.id === 'reports-modal') {
|
| 129 |
reportsModal.classList.add('hidden');
|
| 130 |
}
|
| 131 |
if (target && target.id === 'report-prod-summary') renderReport('production');
|