19 lines
1.5 KiB
JavaScript
19 lines
1.5 KiB
JavaScript
const message = document.querySelector('#message');
|
|
async function api(path, options = {}) {
|
|
const response = await fetch(path, {headers: {'Content-Type': 'application/json'}, ...options});
|
|
if (!response.ok) throw new Error((await response.json().catch(() => ({}))).error || `HTTP ${response.status}`);
|
|
return response.json();
|
|
}
|
|
async function refresh() {
|
|
try {
|
|
const items = await api('/api/requests');
|
|
document.querySelector('#rows').innerHTML = items.map(item => `<tr><td>${item.pdbName}</td><td>${item.storageGb}</td><td>${item.requestedBy}</td><td>${item.status}</td><td>${item.status === 'PENDING' ? `<button onclick="approve('${item.id}')">Aprovar</button>` : ''}</td></tr>`).join('');
|
|
} catch (error) { message.textContent = error.message; }
|
|
}
|
|
async function approve(id) { try { await api(`/api/requests/${id}/approve`, {method: 'POST'}); message.textContent = 'Provisionamento submetido à OCI.'; refresh(); } catch (error) { message.textContent = error.message; } }
|
|
document.querySelector('#request').addEventListener('submit', async event => {
|
|
event.preventDefault(); const data = Object.fromEntries(new FormData(event.target)); data.storageGb = Number(data.storageGb);
|
|
try { await api('/api/requests', {method: 'POST', body: JSON.stringify(data)}); event.target.reset(); message.textContent = 'Solicitação enviada para aprovação.'; refresh(); } catch (error) { message.textContent = error.message; }
|
|
});
|
|
document.querySelector('#refresh').addEventListener('click', refresh); refresh();
|