diff --git a/src/components/embed-event/event-types/embedded-article.tsx b/src/components/embed-event/event-types/embedded-article.tsx index b25f6950e..628ffa36e 100644 --- a/src/components/embed-event/event-types/embedded-article.tsx +++ b/src/components/embed-event/event-types/embedded-article.tsx @@ -1,6 +1,5 @@ import { useRef } from "react"; import { Card, CardProps, Flex, Image, LinkBox, LinkOverlay, Tag, Text } from "@chakra-ui/react"; -import dayjs from "dayjs"; import { getArticleImage, @@ -15,6 +14,7 @@ import { buildAppSelectUrl } from "../../../helpers/nostr/apps"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { UserAvatarLink } from "../../user-avatar-link"; import { UserLink } from "../../user-link"; +import Timestamp from "../../timestamp"; export default function EmbeddedArticle({ article, ...props }: Omit & { article: NostrEvent }) { const title = getArticleTitle(article); @@ -37,7 +37,9 @@ export default function EmbeddedArticle({ article, ...props }: Omit by: - | {dayjs.unix(getArticlePublishDate(article) ?? article.created_at).fromNow()} + + | + {summary} diff --git a/src/components/embed-event/event-types/embedded-emoji-pack.tsx b/src/components/embed-event/event-types/embedded-emoji-pack.tsx index 58d5f79ab..e3d74e885 100644 --- a/src/components/embed-event/event-types/embedded-emoji-pack.tsx +++ b/src/components/embed-event/event-types/embedded-emoji-pack.tsx @@ -12,7 +12,6 @@ import { Text, } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; -import dayjs from "dayjs"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { getEmojisFromPack, getPackName } from "../../../helpers/nostr/emoji-packs"; @@ -21,6 +20,7 @@ import { UserLink } from "../../user-link"; import EmojiPackFavoriteButton from "../../../views/emoji-packs/components/emoji-pack-favorite-button"; import EmojiPackMenu from "../../../views/emoji-packs/components/emoji-pack-menu"; import { NostrEvent } from "../../../types/nostr-event"; +import Timestamp from "../../timestamp"; export default function EmbeddedEmojiPack({ pack, ...props }: Omit & { pack: NostrEvent }) { const emojis = getEmojisFromPack(pack); @@ -52,7 +52,9 @@ export default function EmbeddedEmojiPack({ pack, ...props }: Omit - Updated: {dayjs.unix(pack.created_at).fromNow()} + + Updated: + ); diff --git a/src/components/embed-event/event-types/embedded-note.tsx b/src/components/embed-event/event-types/embedded-note.tsx index 7172f11ce..35bfeedd3 100644 --- a/src/components/embed-event/event-types/embedded-note.tsx +++ b/src/components/embed-event/event-types/embedded-note.tsx @@ -1,4 +1,3 @@ -import dayjs from "dayjs"; import { Button, Card, CardBody, CardHeader, Spacer, useDisclosure } from "@chakra-ui/react"; import { NoteContents } from "../../note/note-contents"; @@ -12,6 +11,7 @@ import EventVerificationIcon from "../../event-verification-icon"; import { TrustProvider } from "../../../providers/trust"; import { NoteLink } from "../../note-link"; import { ArrowDownSIcon, ArrowUpSIcon } from "../../icons"; +import Timestamp from "../../timestamp"; export default function EmbeddedNote({ event }: { event: NostrEvent }) { const { showSignatureVerification } = useSubject(appSettings); @@ -30,7 +30,7 @@ export default function EmbeddedNote({ event }: { event: NostrEvent }) { {showSignatureVerification && } - {dayjs.unix(event.created_at).fromNow()} + {expand.isOpen && } diff --git a/src/components/embed-event/event-types/embedded-stream.tsx b/src/components/embed-event/event-types/embedded-stream.tsx index 4c8ca9735..cb901a3c6 100644 --- a/src/components/embed-event/event-types/embedded-stream.tsx +++ b/src/components/embed-event/event-types/embedded-stream.tsx @@ -1,6 +1,5 @@ import { Card, CardBody, CardProps, Flex, Heading, Image, Link, Tag, Text, useBreakpointValue } from "@chakra-ui/react"; import { Link as RouterLink, useNavigate } from "react-router-dom"; -import dayjs from "dayjs"; import { parseStreamEvent } from "../../../helpers/nostr/stream"; import { NostrEvent } from "../../../types/nostr-event"; @@ -8,6 +7,7 @@ import StreamStatusBadge from "../../../views/streams/components/status-badge"; import { UserLink } from "../../user-link"; import { UserAvatar } from "../../user-avatar"; import useEventNaddr from "../../../hooks/use-event-naddr"; +import Timestamp from "../../timestamp"; export default function EmbeddedStream({ event, ...props }: Omit & { event: NostrEvent }) { const stream = parseStreamEvent(event); @@ -54,7 +54,11 @@ export default function EmbeddedStream({ event, ...props }: Omit - {stream.starts && Started: {dayjs.unix(stream.starts).fromNow()}} + {stream.starts && ( + + Started: + + )} {stream.tags.length > 0 && ( {stream.tags.map((tag) => ( diff --git a/src/components/embed-event/event-types/embedded-unknown.tsx b/src/components/embed-event/event-types/embedded-unknown.tsx index e4497d546..9a019138a 100644 --- a/src/components/embed-event/event-types/embedded-unknown.tsx +++ b/src/components/embed-event/event-types/embedded-unknown.tsx @@ -1,5 +1,4 @@ -import { Box, Card, CardBody, CardHeader, CardProps, Flex, Heading, Link, Text } from "@chakra-ui/react"; -import dayjs from "dayjs"; +import { Box, Card, CardBody, CardHeader, CardProps, Flex, Link, Text } from "@chakra-ui/react"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { NostrEvent } from "../../../types/nostr-event"; @@ -11,6 +10,7 @@ import { UserDnsIdentityIcon } from "../../user-dns-identity-icon"; import { useMemo } from "react"; import { embedEmoji, embedNostrHashtags, embedNostrLinks, embedNostrMentions } from "../../embed-types"; import { EmbedableContent } from "../../../helpers/embeds"; +import Timestamp from "../../timestamp"; export default function EmbeddedUnknown({ event, ...props }: Omit & { event: NostrEvent }) { const address = getSharableEventAddress(event); @@ -32,7 +32,7 @@ export default function EmbeddedUnknown({ event, ...props }: Omit - {dayjs.unix(event.created_at).fromNow()} + diff --git a/src/components/note/index.tsx b/src/components/note/index.tsx index 04cc005c9..1131112ce 100644 --- a/src/components/note/index.tsx +++ b/src/components/note/index.tsx @@ -1,5 +1,4 @@ import React, { useMemo, useRef } from "react"; -import dayjs from "dayjs"; import { Box, ButtonGroup, @@ -38,6 +37,7 @@ import { useCurrentAccount } from "../../hooks/use-current-account"; import NoteReactions from "./components/note-reactions"; import ReplyForm from "../../views/note/components/reply-form"; import { getReferences } from "../../helpers/nostr/events"; +import Timestamp from "../timestamp"; export type NoteProps = { event: NostrEvent; @@ -72,7 +72,7 @@ export const Note = React.memo(({ event, variant = "outline", showReplyButton }: {showSignatureVerification && } - {dayjs.unix(event.created_at).fromNow()} + diff --git a/src/components/note/note-zaps-modal.tsx b/src/components/note/note-zaps-modal.tsx index c2b0ec436..5f078595f 100644 --- a/src/components/note/note-zaps-modal.tsx +++ b/src/components/note/note-zaps-modal.tsx @@ -15,12 +15,12 @@ import { import { NostrEvent } from "../../types/nostr-event"; import { UserAvatarLink } from "../user-avatar-link"; import { UserLink } from "../user-link"; -import dayjs from "dayjs"; import { DislikeIcon, LightningIcon, LikeIcon } from "../icons"; import { ParsedZap } from "../../helpers/zaps"; import { readablizeSats } from "../../helpers/bolt11"; import useEventReactions from "../../hooks/use-event-reactions"; import useEventZaps from "../../hooks/use-event-zaps"; +import Timestamp from "../timestamp"; function getReactionIcon(content: string) { switch (content) { @@ -41,7 +41,7 @@ const ReactionEvent = React.memo(({ event }: { event: NostrEvent }) => ( - {dayjs.unix(event.created_at).fromNow()} + )); diff --git a/src/components/timeline-page/generic-note-timeline/stream-note.tsx b/src/components/timeline-page/generic-note-timeline/stream-note.tsx index a9953586f..658e31895 100644 --- a/src/components/timeline-page/generic-note-timeline/stream-note.tsx +++ b/src/components/timeline-page/generic-note-timeline/stream-note.tsx @@ -15,7 +15,6 @@ import { Text, } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; -import dayjs from "dayjs"; import { NostrEvent } from "../../../types/nostr-event"; import { parseStreamEvent } from "../../../helpers/nostr/stream"; import useEventNaddr from "../../../hooks/use-event-naddr"; @@ -26,6 +25,7 @@ import StreamStatusBadge from "../../../views/streams/components/status-badge"; import { EventRelays } from "../../note/note-relays"; import { useAsync } from "react-use"; import { getEventUID } from "../../../helpers/nostr/events"; +import Timestamp from "../../timestamp"; export default function StreamNote({ event, ...props }: CardProps & { event: NostrEvent }) { const { value: stream, error } = useAsync(async () => parseStreamEvent(event), [event]); @@ -64,7 +64,10 @@ export default function StreamNote({ event, ...props }: CardProps & { event: Nos ))} )} - Updated: {dayjs.unix(stream.updated).fromNow()} + + Updated: + + diff --git a/src/components/timeline-page/timeline-health/index.tsx b/src/components/timeline-page/timeline-health/index.tsx index 0ab167e9b..677b8b841 100644 --- a/src/components/timeline-page/timeline-health/index.tsx +++ b/src/components/timeline-page/timeline-health/index.tsx @@ -14,6 +14,7 @@ import { Tr, useColorMode, } from "@chakra-ui/react"; + import { TimelineLoader } from "../../../classes/timeline-loader"; import useSubject from "../../../hooks/use-subject"; import { getEventRelays, handleEventFromRelay } from "../../../services/event-relays"; @@ -21,10 +22,10 @@ import { NostrEvent } from "../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer"; import { RelayFavicon } from "../../relay-favicon"; import { NoteLink } from "../../note-link"; -import dayjs from "dayjs"; import NostrPublishAction from "../../../classes/nostr-publish-action"; import { RelayIcon } from "../../icons"; import { getEventUID } from "../../../helpers/nostr/events"; +import Timestamp from "../../timestamp"; function EventRow({ event, @@ -63,7 +64,7 @@ function EventRow({ return ( - {dayjs.unix(event.created_at).fromNow()} + diff --git a/src/components/timestamp.tsx b/src/components/timestamp.tsx new file mode 100644 index 000000000..74395db27 --- /dev/null +++ b/src/components/timestamp.tsx @@ -0,0 +1,11 @@ +import dayjs from "dayjs"; +import { Box, BoxProps } from "@chakra-ui/react"; + +export default function Timestamp({ timestamp, ...props }: { timestamp: number } & Omit) { + const date = dayjs.unix(timestamp); + return ( + + {date.fromNow()} + + ); +} diff --git a/src/index.tsx b/src/index.tsx index b6d3f41d2..4cb9eb773 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -7,6 +7,8 @@ import { GlobalProviders } from "./providers"; import dayjs from "dayjs"; import relativeTimePlugin from "dayjs/plugin/relativeTime"; dayjs.extend(relativeTimePlugin); +import localizedFormat from "dayjs/plugin/localizedFormat"; +dayjs.extend(localizedFormat); // register nostr: protocol handler if (import.meta.env.PROD) { diff --git a/src/views/badges/badge-details.tsx b/src/views/badges/badge-details.tsx index bdfc02a0b..369f35a57 100644 --- a/src/views/badges/badge-details.tsx +++ b/src/views/badges/badge-details.tsx @@ -10,7 +10,6 @@ import { getBadgeDescription, getBadgeImage, getBadgeName } from "../../helpers/ import BadgeMenu from "./components/badge-menu"; import BadgeAwardCard from "./components/award-card"; import useTimelineLoader from "../../hooks/use-timeline-loader"; -import { createCoordinate } from "../../services/replaceable-event-requester"; import { useReadRelayUrls } from "../../hooks/use-client-relays"; import IntersectionObserverProvider from "../../providers/intersection-observer"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; @@ -20,8 +19,8 @@ import { NostrEvent } from "../../types/nostr-event"; import { getEventCoordinate } from "../../helpers/nostr/events"; import { UserAvatarLink } from "../../components/user-avatar-link"; import { UserLink } from "../../components/user-link"; -import dayjs from "dayjs"; import { ErrorBoundary } from "../../components/error-boundary"; +import Timestamp from "../../components/timestamp"; function BadgeDetailsPage({ badge }: { badge: NostrEvent }) { const navigate = useNavigate(); @@ -77,7 +76,9 @@ function BadgeDetailsPage({ badge }: { badge: NostrEvent }) { Created by: {" "} - Last Updated: {dayjs.unix(badge.created_at).fromNow()} + + Last Updated: + {description && {description}} diff --git a/src/views/badges/components/badge-card.tsx b/src/views/badges/components/badge-card.tsx index 4a8fed18c..77c800b45 100644 --- a/src/views/badges/components/badge-card.tsx +++ b/src/views/badges/components/badge-card.tsx @@ -1,7 +1,6 @@ import { memo, useRef } from "react"; import { Link as RouterLink, useNavigate } from "react-router-dom"; import { ButtonGroup, Card, CardBody, CardHeader, CardProps, Flex, Heading, Image, Link, Text } from "@chakra-ui/react"; -import dayjs from "dayjs"; import { UserAvatarLink } from "../../../components/user-avatar-link"; import { UserLink } from "../../../components/user-link"; @@ -11,6 +10,7 @@ import { useRegisterIntersectionEntity } from "../../../providers/intersection-o import { getEventUID } from "../../../helpers/nostr/events"; import BadgeMenu from "./badge-menu"; import { getBadgeImage, getBadgeName } from "../../../helpers/nostr/badges"; +import Timestamp from "../../../components/timestamp"; function BadgeCard({ badge, ...props }: Omit & { badge: NostrEvent }) { const naddr = getSharableEventAddress(badge); @@ -40,7 +40,9 @@ function BadgeCard({ badge, ...props }: Omit & { badge: N - Updated: {dayjs.unix(badge.created_at).fromNow()} + + Updated: + ); diff --git a/src/views/emoji-packs/components/emoji-pack-card.tsx b/src/views/emoji-packs/components/emoji-pack-card.tsx index 89177e49a..f2b5c1798 100644 --- a/src/views/emoji-packs/components/emoji-pack-card.tsx +++ b/src/views/emoji-packs/components/emoji-pack-card.tsx @@ -13,7 +13,6 @@ import { Link, Text, } from "@chakra-ui/react"; -import dayjs from "dayjs"; import { UserAvatarLink } from "../../../components/user-avatar-link"; import { UserLink } from "../../../components/user-link"; @@ -24,6 +23,7 @@ import EmojiPackFavoriteButton from "./emoji-pack-favorite-button"; import { getEventUID } from "../../../helpers/nostr/events"; import { getEmojisFromPack, getPackName } from "../../../helpers/nostr/emoji-packs"; import EmojiPackMenu from "./emoji-pack-menu"; +import Timestamp from "../../../components/timestamp"; export default function EmojiPackCard({ pack, ...props }: Omit & { pack: NostrEvent }) { const emojis = getEmojisFromPack(pack); @@ -59,7 +59,9 @@ export default function EmojiPackCard({ pack, ...props }: Omit - Updated: {dayjs.unix(pack.created_at).fromNow()} + + Updated: + ); diff --git a/src/views/goals/components/goal-card.tsx b/src/views/goals/components/goal-card.tsx index f10dfb013..b4e7f32ba 100644 --- a/src/views/goals/components/goal-card.tsx +++ b/src/views/goals/components/goal-card.tsx @@ -15,6 +15,7 @@ import GoalContents from "./goal-contents"; import dayjs from "dayjs"; import GoalZapButton from "./goal-zap-button"; import GoalTopZappers from "./goal-top-zappers"; +import Timestamp from "../../../components/timestamp"; function GoalCard({ goal, ...props }: Omit & { goal: NostrEvent }) { const nevent = getSharableEventAddress(goal); @@ -41,7 +42,11 @@ function GoalCard({ goal, ...props }: Omit & { goal: Nost - {closed && Ends: {dayjs.unix(closed).fromNow()}} + {closed && ( + + Ends: + + )} diff --git a/src/views/goals/components/goal-zap-list.tsx b/src/views/goals/components/goal-zap-list.tsx index 1f40b047b..301191ca3 100644 --- a/src/views/goals/components/goal-zap-list.tsx +++ b/src/views/goals/components/goal-zap-list.tsx @@ -7,7 +7,7 @@ import { UserAvatarLink } from "../../../components/user-avatar-link"; import { UserLink } from "../../../components/user-link"; import { readablizeSats } from "../../../helpers/bolt11"; import { LightningIcon } from "../../../components/icons"; -import dayjs from "dayjs"; +import Timestamp from "../../../components/timestamp"; export default function GoalZapList({ goal }: { goal: NostrEvent }) { const zaps = useEventZaps(getEventUID(goal), getGoalRelays(goal), true); @@ -21,7 +21,7 @@ export default function GoalZapList({ goal }: { goal: NostrEvent }) { - {dayjs.unix(zap.event.created_at).fromNow()} + {zap.request.content && {zap.request.content}} diff --git a/src/views/lists/components/list-card.tsx b/src/views/lists/components/list-card.tsx index 7638d57c3..a6ff24b73 100644 --- a/src/views/lists/components/list-card.tsx +++ b/src/views/lists/components/list-card.tsx @@ -13,7 +13,6 @@ import { Link, Text, } from "@chakra-ui/react"; -import dayjs from "dayjs"; import { UserAvatarLink } from "../../../components/user-avatar-link"; import { UserLink } from "../../../components/user-link"; @@ -28,6 +27,7 @@ import { useRegisterIntersectionEntity } from "../../../providers/intersection-o import ListFavoriteButton from "./list-favorite-button"; import { getEventUID } from "../../../helpers/nostr/events"; import ListMenu from "./list-menu"; +import Timestamp from "../../../components/timestamp"; function ListCardRender({ event, ...props }: Omit & { event: NostrEvent }) { const people = getPubkeysFromList(event); @@ -59,7 +59,9 @@ function ListCardRender({ event, ...props }: Omit & { eve - Updated: {dayjs.unix(event.created_at).fromNow()} + + Updated: + {people.length > 0 && ( <> People ({people.length}): diff --git a/src/views/messages/index.tsx b/src/views/messages/index.tsx index 9c75e2487..788cb4102 100644 --- a/src/views/messages/index.tsx +++ b/src/views/messages/index.tsx @@ -24,6 +24,7 @@ import directMessagesService from "../../services/direct-messages"; import { ExternalLinkIcon } from "../../components/icons"; import RequireCurrentAccount from "../../providers/require-current-account"; import { nip19 } from "nostr-tools"; +import Timestamp from "../../components/timestamp"; function ContactCard({ pubkey }: { pubkey: string }) { const subject = useMemo(() => directMessagesService.getUserMessages(pubkey), [pubkey]); @@ -36,7 +37,7 @@ function ContactCard({ pubkey }: { pubkey: string }) { {getUserDisplayName(metadata, pubkey)} - {messages[0] && {dayjs.unix(messages[0].created_at).fromNow()}} + {messages[0] && } diff --git a/src/views/messages/message.tsx b/src/views/messages/message.tsx index b500f82c0..3b931d478 100644 --- a/src/views/messages/message.tsx +++ b/src/views/messages/message.tsx @@ -1,16 +1,17 @@ +import { useRef } from "react"; import { Box, Card, CardBody, CardHeader, CardProps, Flex, Heading, Text } from "@chakra-ui/react"; -import dayjs from "dayjs"; + import { useCurrentAccount } from "../../hooks/use-current-account"; import { getMessageRecipient } from "../../services/direct-messages"; import { NostrEvent } from "../../types/nostr-event"; import DecryptPlaceholder from "./decrypt-placeholder"; import { EmbedableContent, embedUrls } from "../../helpers/embeds"; import { embedNostrLinks, renderGenericUrl, renderImageUrl, renderVideoUrl } from "../../components/embed-types"; -import { useRef } from "react"; import { useRegisterIntersectionEntity } from "../../providers/intersection-observer"; import { UserAvatar } from "../../components/user-avatar"; import { UserLink } from "../../components/user-link"; import { getEventUID } from "../../helpers/nostr/events"; +import Timestamp from "../../components/timestamp"; export function MessageContent({ event, text }: { event: NostrEvent; text: string }) { let content: EmbedableContent = [text]; @@ -36,7 +37,7 @@ export function Message({ event }: { event: NostrEvent } & Omit - {dayjs.unix(event.created_at).fromNow()} + ( @@ -26,7 +26,7 @@ const Kind1Notification = ({ event }: { event: NostrEvent }) => ( replied to your post - {dayjs.unix(event.created_at).fromNow()} + @@ -45,7 +45,7 @@ const ReactionNotification = ({ event }: { event: NostrEvent }) => { reacted {event.content} to your post - {dayjs.unix(event.created_at).fromNow()} + ); @@ -81,9 +81,7 @@ const ZapNotification = ({ event }: { event: NostrEvent }) => { )} - - {dayjs.unix(zap.request.created_at).fromNow()} - + ); }; diff --git a/src/views/relays/components/relay-review-note.tsx b/src/views/relays/components/relay-review-note.tsx index a58026477..a2806f48d 100644 --- a/src/views/relays/components/relay-review-note.tsx +++ b/src/views/relays/components/relay-review-note.tsx @@ -1,6 +1,5 @@ -import dayjs from "dayjs"; import { useRef } from "react"; -import { Card, CardBody, CardHeader, Link, Text } from "@chakra-ui/react"; +import { Card, CardBody, CardHeader, Link } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; import { UserAvatarLink } from "../../../components/user-avatar-link"; @@ -13,6 +12,7 @@ import { useRegisterIntersectionEntity } from "../../../providers/intersection-o import { NoteContents } from "../../../components/note/note-contents"; import { Metadata } from "./relay-card"; import { getEventUID } from "../../../helpers/nostr/events"; +import Timestamp from "../../../components/timestamp"; export default function RelayReviewNote({ event, hideUrl }: { event: NostrEvent; hideUrl?: boolean }) { const ratingJson = event.tags.find((t) => t[0] === "l" && t[3])?.[3]; @@ -29,7 +29,7 @@ export default function RelayReviewNote({ event, hideUrl }: { event: NostrEvent; - {dayjs.unix(event.created_at).fromNow()} + {!hideUrl && url && ( diff --git a/src/views/streams/components/stream-card.tsx b/src/views/streams/components/stream-card.tsx index fdc99664d..29d00f292 100644 --- a/src/views/streams/components/stream-card.tsx +++ b/src/views/streams/components/stream-card.tsx @@ -1,5 +1,4 @@ import { memo, useRef } from "react"; -import dayjs from "dayjs"; import { Box, Card, CardBody, CardProps, Flex, Heading, LinkBox, LinkOverlay, Text } from "@chakra-ui/react"; import { ParsedStream } from "../../../helpers/nostr/stream"; @@ -11,6 +10,7 @@ import { useRegisterIntersectionEntity } from "../../../providers/intersection-o import useEventNaddr from "../../../hooks/use-event-naddr"; import { getEventUID } from "../../../helpers/nostr/events"; import StreamHashtags from "./stream-hashtags"; +import Timestamp from "../../../components/timestamp"; function StreamCard({ stream, ...props }: CardProps & { stream: ParsedStream }) { const { title, image } = stream; @@ -49,7 +49,11 @@ function StreamCard({ stream, ...props }: CardProps & { stream: ParsedStream }) )} - {stream.starts && Started: {dayjs.unix(stream.starts).fromNow()}} + {stream.starts && ( + + Started: + + )} ); diff --git a/src/views/user/about.tsx b/src/views/user/about.tsx index aa6c24c3e..498c05123 100644 --- a/src/views/user/about.tsx +++ b/src/views/user/about.tsx @@ -1,5 +1,4 @@ import { useOutletContext, Link as RouterLink } from "react-router-dom"; -import dayjs from "dayjs"; import { Accordion, AccordionButton, @@ -46,6 +45,7 @@ import { UserProfileMenu } from "./components/user-profile-menu"; import { useSharableProfileId } from "../../hooks/use-shareable-profile-id"; import useUserContactList from "../../hooks/use-user-contact-list"; import { getPubkeysFromList } from "../../helpers/nostr/lists"; +import Timestamp from "../../components/timestamp"; function buildDescriptionContent(description: string) { let content: EmbedableContent = [description.trim()]; @@ -190,7 +190,11 @@ export default function UserAboutTab() { Following {contacts ? readablizeSats(getPubkeysFromList(contacts).length) : "Unknown"} - {contacts && Updated {dayjs.unix(contacts.created_at).fromNow()}} + {contacts && ( + + Updated + + )} {stats && ( diff --git a/src/views/user/zaps.tsx b/src/views/user/zaps.tsx index 23aec8427..c2e6631e6 100644 --- a/src/views/user/zaps.tsx +++ b/src/views/user/zaps.tsx @@ -2,6 +2,7 @@ import { Box, Flex, Select, Text } from "@chakra-ui/react"; import dayjs from "dayjs"; import { useCallback, useMemo, useRef, useState } from "react"; import { useOutletContext } from "react-router-dom"; + import { ErrorBoundary, ErrorFallback } from "../../components/error-boundary"; import { LightningIcon } from "../../components/icons"; import { NoteLink } from "../../components/note-link"; @@ -19,6 +20,7 @@ import IntersectionObserverProvider, { useRegisterIntersectionEntity } from "../ import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import { EmbedableContent, embedUrls } from "../../helpers/embeds"; import { embedNostrLinks, renderGenericUrl } from "../../components/embed-types"; +import Timestamp from "../../components/timestamp"; const Zap = ({ zapEvent }: { zapEvent: NostrEvent }) => { const ref = useRef(null); @@ -55,7 +57,7 @@ const Zap = ({ zapEvent }: { zapEvent: NostrEvent }) => { {readablizeSats(payment.amount / 1000)} sats )} - {dayjs.unix(request.created_at).fromNow()} + {embedContent && {embedContent}}