Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import React, { useEffect, useState } from "react"
import dayjs, { Dayjs } from "dayjs"
import relativeTime from "dayjs/plugin/relativeTime"
import { fetchWithRetries } from "../../clientUtils/Util"
dayjs.extend(relativeTime)
export interface LastUpdatedTokenProps {
timestampUrl?: string
}
export const LastUpdated = ({ timestampUrl }: LastUpdatedTokenProps) => {
const [date, setDate] = useState<null | Dayjs>(null)
useEffect(() => {
const fetchTimeStamp = async () => {
if (!timestampUrl) return
const response = await fetchWithRetries(timestampUrl)
if (!response.ok) return
const timestampRaw = await response.text()
const timestamp = timestampRaw.trim()
const parsedDate =
timestamp.length < 20
? dayjs(`${timestamp}Z`)
: dayjs(timestamp)
if (!parsedDate.isValid()) return
setDate(parsedDate)
}
fetchTimeStamp()
}, [])
return (
date && (
<span>
Last update: <strong>{date.fromNow()}</strong>.
{/* (
{date.toDate().toLocaleString("en-US", {
year: "numeric",
month: "long",
day: "numeric",
hour: "numeric",
minute: "2-digit",
timeZone: "UTC",
timeZoneName: "short",
})}
) */}
</span>
)
)
}
|