import {format, formatDistanceToNow, parseJSON} from "date-fns"; export function friendlyDate(date) { return formatDistanceToNow(parseJSON(date), {addSuffix: true}); } export function readableDate(date) { if (!date) { return ""; } return format(parseJSON(date), "dd MMM yyyy"); } export function readableDatetime(date) { if (!date) { return ""; } return format(parseJSON(date), "dd MMM yyyy HH:mm"); } export function stripHtml(html = "") { let tmp = document.createElement("div"); tmp.innerHTML = html; return tmp.textContent || tmp.innerText || ""; } export function randomId(length = 10) { return Math.random().toString(36).substring(2, length + 2); } export function clickOutside(node) { const handleClick = event => { if (node && !node.contains(event.target) && !event.defaultPrevented) { node.dispatchEvent( new CustomEvent('click_outside', node) ) } } document.addEventListener('click', handleClick, true); return { destroy() { document.removeEventListener('click', handleClick, true); } } } export function uniqueBy(list, callback) { const itemMap = list.reduce((c, item) => { c[callback(item)] = item; return c; }, {}); return Object.values(itemMap); } export function range(start, end) { var ans = []; for (let i = start; i <= end; i++) { ans.push(i); } return ans; }