the reminder not showing content on the card at dashboard view and the quizes are hardcoded must move to the db make api's for it
49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
import CanceledError from "../cancel/CanceledError.js";
|
|
import AxiosError from "../core/AxiosError.js";
|
|
import utils from '../utils.js';
|
|
|
|
const composeSignals = (signals, timeout) => {
|
|
const {length} = (signals = signals ? signals.filter(Boolean) : []);
|
|
|
|
if (timeout || length) {
|
|
let controller = new AbortController();
|
|
|
|
let aborted;
|
|
|
|
const onabort = function (reason) {
|
|
if (!aborted) {
|
|
aborted = true;
|
|
unsubscribe();
|
|
const err = reason instanceof Error ? reason : this.reason;
|
|
controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));
|
|
}
|
|
}
|
|
|
|
let timer = timeout && setTimeout(() => {
|
|
timer = null;
|
|
onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))
|
|
}, timeout)
|
|
|
|
const unsubscribe = () => {
|
|
if (signals) {
|
|
timer && clearTimeout(timer);
|
|
timer = null;
|
|
signals.forEach(signal => {
|
|
signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);
|
|
});
|
|
signals = null;
|
|
}
|
|
}
|
|
|
|
signals.forEach((signal) => signal.addEventListener('abort', onabort));
|
|
|
|
const {signal} = controller;
|
|
|
|
signal.unsubscribe = () => utils.asap(unsubscribe);
|
|
|
|
return signal;
|
|
}
|
|
}
|
|
|
|
export default composeSignals;
|