UNPKG

@aplus-frontend/ui

Version:

2 lines (1 loc) 1.28 kB
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const m=require("dayjs"),r=require("vue");function o(n,u){const t=Math.abs(n-u),e={diffMs:t,type:n<u?"ago":"late"};return t<60*1e3?(e.unit="s",e.count=Math.round(t/1e3)):t<3600*1e3?(e.unit="m",e.count=Math.round(t/(60*1e3))):t<1440*60*1e3?(e.unit="h",e.count=Math.round(t/(3600*1e3))):t<720*60*60*1e3?(e.unit="d",e.count=Math.round(t/(1440*60*1e3))):t<365*24*60*60*1e3?(e.unit="M",e.count=Math.round(t/(720*60*60*1e3))):(e.unit="y",e.count=Math.round(t/365/(1440*60*1e3))),e}function i(n){return m(n).valueOf()}let b=1;function v(){return b++}const s=new Map;let l,c;function M(n,u){s.set(n,u),s.size&&!c&&(clearInterval(l),l=setInterval(()=>{c=!0;const t=Date.now();s.forEach(e=>{e.interval&&Math.abs(t-e.updated-e.interval)<50&&(e.timeAgo.value=o(e.ts,t),e.updated=t)})},5e3))}function g(n){s.delete(n),s.size||(clearInterval(l),c=!1)}const p=(n,u,t)=>{const e=v(),a=r.ref(o(i(n.value),i(u))),f={ts:i(n.value),timeAgo:a,interval:t.value,updated:Date.now()};return r.watch(()=>n.value,h=>{const d=i(h);f.ts=d,a.value=o(d,i(u))}),M(e,f),r.onBeforeUnmount(()=>{g(e)}),a};exports.default=p;exports.getId=v;exports.getTimeAgo=o;exports.subscribe=M;exports.unsubscribe=g;