UNPKG

nexwidget

Version:

An ESNext Web Component library.

38 lines (37 loc) 1.09 kB
import { addPendingTask } from '../lib/add-pending-task.js'; export const WithPendingTaskEmitter = (Base) => { class WithPendingTaskEmitter extends Base { addPendingTask(task) { return addPendingTask(this, task); } } return WithPendingTaskEmitter; }; export const WithPendingTaskHandler = (Base) => { class WithPendingTaskHandler extends Base { static { this.createAttributes([{ key: 'hasPendingTask', type: 'boolean' }]); this.createReactives(['hasPendingTask']); } #pendingTaskCount = 0; #handlePendingTask({ detail: { task } }) { this.hasPendingTask = true; this.#pendingTaskCount += 1; task.finally(() => { this.#pendingTaskCount -= 1; this.hasPendingTask = this.#pendingTaskCount > 0; }); } addedCallback() { super.addedCallback(); this.addEventListener( 'pending-task', this.#handlePendingTask.bind(this), { signal: this.removedSignal, }, ); } } return WithPendingTaskHandler; };