// panes/items.js — CRUD against /api/items.
import { registerPane } from '../app.js';
import { jget, jpost, jdelete, escapeHtml } from '../lib/api.js';
import { ok, err } from '../lib/ui.js';
const TPL = `
Items
Backend-managed records (/api/items).
`;
async function load(host) {
try {
const j = await jget('/api/items');
const items = j.items || [];
host.querySelector('#items-count').textContent = String(j.count ?? items.length);
host.querySelector('#items-list').innerHTML = items.length ? items.map(it => `
#${it.id}
${escapeHtml(it.name)}
${escapeHtml(it.description || '')}
delete
`).join('') : 'no items
';
host.querySelectorAll('[data-del]').forEach(b => {
b.addEventListener('click', async () => {
try { await jdelete('/api/items/' + b.dataset.del); ok('deleted'); load(host); }
catch (e) { err(e.message); }
});
});
} catch (e) {
host.querySelector('#items-list').innerHTML = `${escapeHtml(e.message)}
`;
}
}
registerPane('items', {
label: 'Items',
init(host) {
host.innerHTML = TPL;
host.querySelector('#items-refresh').addEventListener('click', () => load(host));
host.querySelector('#items-form').addEventListener('submit', async (e) => {
e.preventDefault();
const name = host.querySelector('#items-name').value.trim();
const description = host.querySelector('#items-desc').value.trim();
if (!name) return;
try {
await jpost('/api/items', { name, description });
host.querySelector('#items-name').value = '';
host.querySelector('#items-desc').value = '';
ok('added');
load(host);
} catch (e) { err(e.message); }
});
load(host);
},
refresh: load,
});