nexwidget
Version:
An ESNext Web Component library.
38 lines (37 loc) • 1.09 kB
JavaScript
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;
};