UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 4.88 kB
{"version":3,"file":"helper.cjs","sources":["../../../components/time-ago/helper.ts"],"sourcesContent":["import { getCountWord, makeSentence } from '@vexip-ui/config'\nimport {\n DAY_ON_MILLISECONDS,\n HOUR_ON_MILLISECONDS,\n MINUTE_ON_MILLISECONDS,\n SECOND_ON_MILLISECONDS,\n} from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\nexport interface TimeAgoRecord {\n datetime: Date,\n timeAgo: Ref<string>,\n locale: Ref<Record<string, string>>,\n wordSpace: Ref<boolean>,\n interval: false | number,\n updated: number,\n}\n\nlet id = 1\n\nexport function getId() {\n return id++\n}\n\nconst recordMap = new Map<number, TimeAgoRecord>()\n\nlet timer: ReturnType<typeof setInterval>\nlet isRunning: boolean\n\nexport function subscribe(id: number, record: TimeAgoRecord) {\n recordMap.set(id, record)\n\n if (recordMap.size && !isRunning) {\n clearInterval(timer)\n\n timer = setInterval(() => {\n isRunning = true\n\n const current = Date.now()\n\n recordMap.forEach(record => {\n if (!record.interval) return\n\n if (current - record.updated > record.interval) {\n record.timeAgo.value = computeTimeAgo(\n record.datetime,\n current,\n record.locale.value,\n record.wordSpace.value,\n )\n record.updated = current\n }\n })\n }, 5000)\n }\n}\n\nexport function unsubscribe(id: number) {\n recordMap.delete(id)\n\n if (!recordMap.size) {\n clearInterval(timer)\n isRunning = false\n }\n}\n\nexport function computeTimeAgo(\n date: Date,\n current: number,\n locale: Record<string, string>,\n wordSpace: boolean,\n) {\n const diff = Math.abs(current - date.getTime())\n const type = current > date.getTime() ? locale.ago : locale.late\n\n let label: string\n let usedDiff: number\n let noFormat = false\n\n if (diff < 10 * SECOND_ON_MILLISECONDS) {\n label = locale.justNow\n noFormat = true\n } else if (diff < MINUTE_ON_MILLISECONDS) {\n label = locale.second\n usedDiff = Math.floor(diff / SECOND_ON_MILLISECONDS)\n } else if (diff < HOUR_ON_MILLISECONDS) {\n label = locale.minute\n usedDiff = Math.floor(diff / MINUTE_ON_MILLISECONDS)\n } else if (diff < DAY_ON_MILLISECONDS) {\n label = locale.hour\n usedDiff = Math.floor(diff / HOUR_ON_MILLISECONDS)\n } else if (diff < 30 * DAY_ON_MILLISECONDS) {\n usedDiff = Math.floor(diff / DAY_ON_MILLISECONDS)\n\n if (usedDiff === 1) {\n label = locale.yesterday\n noFormat = true\n } else {\n label = locale.days\n }\n } else if (diff < 365 * DAY_ON_MILLISECONDS) {\n usedDiff = Math.floor(diff / (30 * DAY_ON_MILLISECONDS))\n\n if (usedDiff === 1) {\n label = locale.lastMonth\n noFormat = true\n } else {\n label = locale.months\n }\n } else {\n usedDiff = Math.floor(diff / 365 / DAY_ON_MILLISECONDS)\n\n if (usedDiff === 1) {\n label = locale.lastYear\n noFormat = true\n } else {\n label = locale.years\n }\n }\n\n if (noFormat) {\n return label\n }\n\n return makeSentence(`${getCountWord(label, usedDiff!)} ${type}`, wordSpace)\n}\n"],"names":["id","getId","recordMap","timer","isRunning","subscribe","record","current","computeTimeAgo","unsubscribe","date","locale","wordSpace","diff","type","label","usedDiff","noFormat","SECOND_ON_MILLISECONDS","MINUTE_ON_MILLISECONDS","HOUR_ON_MILLISECONDS","DAY_ON_MILLISECONDS","makeSentence","getCountWord"],"mappings":"iJAmBA,IAAIA,EAAK,EAEF,SAASC,GAAQ,CACf,OAAAD,GACT,CAEA,MAAME,MAAgB,IAEtB,IAAIC,EACAC,EAEY,SAAAC,EAAUL,EAAYM,EAAuB,CACjDJ,EAAA,IAAIF,EAAIM,CAAM,EAEpBJ,EAAU,MAAQ,CAACE,IACrB,cAAcD,CAAK,EAEnBA,EAAQ,YAAY,IAAM,CACZC,EAAA,GAEN,MAAAG,EAAU,KAAK,IAAI,EAEfL,EAAA,QAAQI,GAAU,CACrBA,EAAO,UAERC,EAAUD,EAAO,QAAUA,EAAO,WACpCA,EAAO,QAAQ,MAAQE,EACrBF,EAAO,SACPC,EACAD,EAAO,OAAO,MACdA,EAAO,UAAU,KACnB,EACAA,EAAO,QAAUC,EACnB,CACD,GACA,GAAI,EAEX,CAEO,SAASE,EAAYT,EAAY,CACtCE,EAAU,OAAOF,CAAE,EAEdE,EAAU,OACb,cAAcC,CAAK,EACPC,EAAA,GAEhB,CAEO,SAASI,EACdE,EACAH,EACAI,EACAC,EACA,CACA,MAAMC,EAAO,KAAK,IAAIN,EAAUG,EAAK,SAAS,EACxCI,EAAOP,EAAUG,EAAK,QAAY,EAAAC,EAAO,IAAMA,EAAO,KAExD,IAAAI,EACAC,EACAC,EAAW,GA2Cf,OAzCIJ,EAAO,GAAKK,0BACdH,EAAQJ,EAAO,QACJM,EAAA,IACFJ,EAAOM,0BAChBJ,EAAQJ,EAAO,OACJK,EAAA,KAAK,MAAMH,EAAOK,EAAAA,sBAAsB,GAC1CL,EAAOO,wBAChBL,EAAQJ,EAAO,OACJK,EAAA,KAAK,MAAMH,EAAOM,EAAAA,sBAAsB,GAC1CN,EAAOQ,uBAChBN,EAAQJ,EAAO,KACJK,EAAA,KAAK,MAAMH,EAAOO,EAAAA,oBAAoB,GACxCP,EAAO,GAAKQ,uBACVL,EAAA,KAAK,MAAMH,EAAOQ,EAAAA,mBAAmB,EAE5CL,IAAa,GACfD,EAAQJ,EAAO,UACJM,EAAA,IAEXF,EAAQJ,EAAO,MAERE,EAAO,IAAMQ,uBACtBL,EAAW,KAAK,MAAMH,GAAQ,GAAKQ,EAAoB,oBAAA,EAEnDL,IAAa,GACfD,EAAQJ,EAAO,UACJM,EAAA,IAEXF,EAAQJ,EAAO,SAGjBK,EAAW,KAAK,MAAMH,EAAO,IAAMQ,EAAAA,mBAAmB,EAElDL,IAAa,GACfD,EAAQJ,EAAO,SACJM,EAAA,IAEXF,EAAQJ,EAAO,OAIfM,EACKF,EAGFO,EAAA,aAAa,GAAGC,EAAAA,aAAaR,EAAOC,CAAS,CAAC,IAAIF,CAAI,GAAIF,CAAS,CAC5E"}