Skip to content

Commit ee35c84

Browse files
chore: add smart date time component with tooltip (#779)
1 parent f7d4c48 commit ee35c84

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed

apps/web/src/app/[orgShortcode]/convo/[convoId]/_components/messages-panel.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ import {
2121
TooltipContent
2222
} from '@/src/components/shadcn-ui/tooltip';
2323
import { type JSONContent, generateHTML } from '@u22n/tiptap/react';
24+
import { SmartDateTime } from '@/src/components/smart-date-time';
2425
import { emailIdentityAtom, replyToMessageAtom } from '../atoms';
2526
import { Virtuoso, type VirtuosoHandle } from 'react-virtuoso';
2627
import { OriginalMessageView } from './original-message-view';
2728
import { type RouterOutputs, platform } from '@/src/lib/trpc';
2829
import { createExtensionSet } from '@u22n/tiptap/extensions';
2930
import { useOrgShortcode } from '@/src/hooks/use-params';
3031
import { type formatParticipantData } from '../../utils';
31-
import { useTimeAgo } from '@/src/hooks/use-time-ago';
3232
import { cn, copyToClipboard } from '@/src/lib/utils';
3333
import { Avatar } from '@/src/components/avatar';
3434
import { type TypeId } from '@u22n/utils/typeid';
@@ -239,7 +239,6 @@ const MessageItem = memo(
239239
// if the message timestamp is less than a day ago, show the date instead of the time
240240
const isRecent =
241241
new Date().getTime() - message.createdAt.getTime() < ms('1 day');
242-
const timeAgo = useTimeAgo(message.createdAt);
243242

244243
const viaAddress = message.metadata?.email?.from?.[0]?.email;
245244

@@ -328,7 +327,7 @@ const MessageItem = memo(
328327
<div className={cn(isUserAuthor ? 'mr-4' : 'ml-4')}>
329328
{isRecent ? (
330329
<span className="text-base-11 text-xs leading-none">
331-
{timeAgo}
330+
<SmartDateTime date={message.createdAt} />
332331
</span>
333332
) : (
334333
<div

apps/web/src/app/[orgShortcode]/convo/_components/convo-list-item.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ import {
1414
} from '../utils';
1515
import { useOrgShortcode, useSpaceShortcode } from '@/src/hooks/use-params';
1616
import { LongPressEventType, useLongPress } from 'use-long-press';
17+
import { SmartDateTime } from '@/src/components/smart-date-time';
1718
import { Checkbox } from '@/src/components/shadcn-ui/checkbox';
1819
import { AvatarPlus } from '@/src/components/avatar-plus';
1920
import { usePathname, useRouter } from 'next/navigation';
2021
import { useIsMobile } from '@/src/hooks/use-is-mobile';
21-
import { useTimeAgo } from '@/src/hooks/use-time-ago';
2222
import { type TypeId } from '@u22n/utils/typeid';
2323
import { Trash } from '@phosphor-icons/react';
2424
import { convoListSelecting } from '../atoms';
@@ -56,8 +56,6 @@ export const ConvoItem = memo(function ConvoItem({
5656
});
5757
// const { mutate: hideConvo } = platform.convos.hideConvo.useMutation();
5858

59-
const timeAgo = useTimeAgo(convo.lastUpdatedAt);
60-
6159
const authorAsParticipant = useMemo(() => {
6260
return (
6361
convo.participants.find(
@@ -164,7 +162,7 @@ export const ConvoItem = memo(function ConvoItem({
164162
{convo.subjects[0]?.subject}
165163
</span>
166164
<span className="text-base-11 min-w-fit text-right text-xs">
167-
{timeAgo}
165+
<SmartDateTime date={convo.lastUpdatedAt} />
168166
</span>
169167
</div>
170168
<span className="truncate text-xs font-medium">
@@ -174,7 +172,7 @@ export const ConvoItem = memo(function ConvoItem({
174172
<div className="flex flex-row items-start justify-start gap-1 text-left text-sm">
175173
<span className="ph-no-capture line-clamp-2 overflow-clip break-words">
176174
<span className="font-semibold">
177-
{authorAvatarData?.name.trim() ?? ' ' + ': '}
175+
{(authorAvatarData?.name.trim() ?? '') + ': '}
178176
</span>
179177
{convo.entries[0]?.bodyPlainText.trim() ?? ''}
180178
</span>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { Tooltip, TooltipContent, TooltipTrigger } from './shadcn-ui/tooltip';
2+
import { useTimeAgo } from '../hooks/use-time-ago';
3+
import { ms } from '@u22n/utils/ms';
4+
5+
export function SmartDateTime({
6+
date,
7+
relativeUntil = ms('1 day')
8+
}: {
9+
date: Date;
10+
relativeUntil?: number;
11+
}) {
12+
const timeAgo = useTimeAgo(date);
13+
const showRealDate = date.getTime() - Date.now() > relativeUntil;
14+
15+
return (
16+
<Tooltip>
17+
<TooltipTrigger>
18+
{showRealDate ? date.toLocaleDateString() : timeAgo}
19+
</TooltipTrigger>
20+
<TooltipContent>{date.toLocaleString()}</TooltipContent>
21+
</Tooltip>
22+
);
23+
}

0 commit comments

Comments
 (0)