UNPKG

@aplus-frontend/ui

Version:

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