import { waitForWu } from 'wu-framework/adapters/shared'; const wu = await waitForWu(); let dispose; wu.define('cliente-suma', { mount(container, context) { container.innerHTML = `

Cliente de suma

Pulsa Calcular para solicitar una suma.
`; const form = container.querySelector('form'); const first = form.elements.namedItem('a'); const second = form.elements.namedItem('b'); const button = form.querySelector('button'); const output = container.querySelector('output'); const listeners = new AbortController(); let pending; let active = true; form.addEventListener('submit', async (event) => { event.preventDefault(); if (pending) return; const a = first.value === '' ? null : first.valueAsNumber; const b = second.value === '' ? null : second.valueAsNumber; pending = new AbortController(); button.disabled = true; output.textContent = 'Calculando…'; try { const total = await context.wu.request('ejemplo:suma', { a, b }, { version: '^1.0.0', timeout: 1000, signal: pending.signal, }); if (active) output.textContent = `${a} + ${b} = ${total}`; } catch (error) { if (!active) return; output.textContent = error.code === 'WU_RPC_NO_HANDLER' ? 'El servicio está detenido. Inícialo y vuelve a pulsar Calcular.' : `No se pudo calcular: ${error.message}`; } finally { pending = undefined; if (active) button.disabled = false; } }, { signal: listeners.signal }); dispose = () => { active = false; listeners.abort(); pending?.abort(); }; }, unmount(container) { dispose?.(); dispose = undefined; container.replaceChildren(); }, });