You've already forked AstralRinth
forked from didirus/AstralRinth
* refactor: migrate to common eslint+prettier configs * fix: prettier frontend * feat: config changes * fix: lint issues * fix: lint * fix: type imports * fix: cyclical import issue * fix: lockfile * fix: missing dep * fix: switch to tabs * fix: continue switch to tabs * fix: rustfmt parity * fix: moderation lint issue * fix: lint issues * fix: ui intl * fix: lint issues * Revert "fix: rustfmt parity" This reverts commit cb99d2376c321d813d4b7fc7e2a213bb30a54711. * feat: revert last rs
24 lines
783 B
TypeScript
24 lines
783 B
TypeScript
import { createFormatter, type FormatOptions, type Formatter } from '@vintl/how-ago'
|
|
import { useVIntl } from '@vintl/vintl'
|
|
import type { IntlController } from '@vintl/vintl/controller'
|
|
import { computed } from 'vue'
|
|
|
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
const formatters = new WeakMap<IntlController<any>, Formatter>()
|
|
|
|
export function useRelativeTime(): Formatter {
|
|
const vintl = useVIntl()
|
|
|
|
let formatter = formatters.get(vintl)
|
|
|
|
if (formatter == null) {
|
|
const formatterRef = computed(() => createFormatter(vintl.intl))
|
|
const defaultOptions: FormatOptions = { roundingMode: 'halfExpand' as const }
|
|
|
|
formatter = (value, options) => formatterRef.value(value, { ...options, ...defaultOptions })
|
|
formatters.set(vintl, formatter)
|
|
}
|
|
|
|
return formatter
|
|
}
|