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
45 lines
1.2 KiB
JavaScript
45 lines
1.2 KiB
JavaScript
import speedometer from "./speedometer.js";
|
|
import throttle from "./throttle.js";
|
|
import utils from "../utils.js";
|
|
|
|
export const progressEventReducer = (listener, isDownloadStream, freq = 3) => {
|
|
let bytesNotified = 0;
|
|
const _speedometer = speedometer(50, 250);
|
|
|
|
return throttle(e => {
|
|
const loaded = e.loaded;
|
|
const total = e.lengthComputable ? e.total : undefined;
|
|
const progressBytes = loaded - bytesNotified;
|
|
const rate = _speedometer(progressBytes);
|
|
const inRange = loaded <= total;
|
|
|
|
bytesNotified = loaded;
|
|
|
|
const data = {
|
|
loaded,
|
|
total,
|
|
progress: total ? (loaded / total) : undefined,
|
|
bytes: progressBytes,
|
|
rate: rate ? rate : undefined,
|
|
estimated: rate && total && inRange ? (total - loaded) / rate : undefined,
|
|
event: e,
|
|
lengthComputable: total != null,
|
|
[isDownloadStream ? 'download' : 'upload']: true
|
|
};
|
|
|
|
listener(data);
|
|
}, freq);
|
|
}
|
|
|
|
export const progressEventDecorator = (total, throttled) => {
|
|
const lengthComputable = total != null;
|
|
|
|
return [(loaded) => throttled[0]({
|
|
lengthComputable,
|
|
total,
|
|
loaded
|
|
}), throttled[1]];
|
|
}
|
|
|
|
export const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));
|