@aplus-frontend/ui
Version:
2 lines (1 loc) • 1.29 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const m=require("dayjs"),l=require("vue");function s(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.floor(t/1e3)):t<60*60*1e3?(e.unit="m",e.count=Math.floor(t/(60*1e3))):t<24*60*60*1e3?(e.unit="h",e.count=Math.floor(t/(60*60*1e3))):t<30*24*60*60*1e3?(e.unit="d",e.count=Math.floor(t/(24*60*60*1e3))):t<365*24*60*60*1e3?(e.unit="M",e.count=Math.floor(t/(30*24*60*60*1e3))):(e.unit="y",e.count=Math.floor(t/365/(24*60*60*1e3))),e}function o(n){return m(n).valueOf()}let b=1;function v(){return b++}const i=new Map;let r,f;function M(n,u){i.set(n,u),i.size&&!f&&(clearInterval(r),r=setInterval(()=>{f=!0;const t=Date.now();i.forEach(e=>{e.interval&&Math.abs(t-e.updated-e.interval)<=50&&(e.timeAgo.value=s(e.ts,t),e.updated=t)})},5e3))}function g(n){i.delete(n),i.size||(clearInterval(r),f=!1)}const p=(n,u,t)=>{const e=v(),a=l.ref(s(o(n.value),o(u))),c={ts:o(n.value),timeAgo:a,interval:t.value,updated:Date.now()};return l.watch(()=>n.value,h=>{const d=o(h);c.ts=d,a.value=s(d,o(u))}),M(e,c),l.onBeforeUnmount(()=>{g(e)}),a};exports.default=p;exports.getId=v;exports.getTimeAgo=s;exports.subscribe=M;exports.unsubscribe=g;