// General helper functions export const cancelablePromise = promise => { let isCanceled = false const wrappedPromise = new Promise((resolve, reject) => { promise.then( value => (isCanceled ? reject({ isCanceled, value }) : resolve(value)), error => reject({ isCanceled, error }) ) }) return { promise: wrappedPromise, cancel: () => (isCanceled = true), } } export const noop = () => {} export const delay = (n = 550) => new Promise(resolve => setTimeout(resolve, n)) export const isObject = obj => Object.prototype.toString.call(obj) === '[object Object]' export const convertToDuration = (milliseconds: number) => { const stringifyTime = (time: number): string => String(time).padStart(2, '0') const seconds = Math.floor(milliseconds / 1000) const minutes = Math.floor(seconds / 60) const hours = Math.floor(minutes / 60) return `${stringifyTime(hours)}:${stringifyTime( minutes % 60 )}:${stringifyTime(seconds % 60)}` } export const convertToTimeWorked = (milliseconds: number) => { const seconds = Math.floor(milliseconds / 1000) const minutes = Math.floor(seconds / 60) const hours = Math.floor(minutes / 60) if (hours > 0) { return `${hours}h, ${minutes % 60}m` } else { return `${minutes % 60}m` } } // Returns a random int between min and max (inclusive) export function randomInt(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; } // Returns a random item from the given array export function selectRandom(arrayToChooseFrom) { return arrayToChooseFrom[randomInt(0, arrayToChooseFrom.length - 1)] }