Skip to content

Commit c45be93

Browse files
committed
fix: show 'Today'/'Yesterday' labels in message separator instead of full date
1 parent 80b0f14 commit c45be93

1 file changed

Lines changed: 53 additions & 29 deletions

File tree

  • packages/livechat/src/components/Messages/MessageSeparator

packages/livechat/src/components/Messages/MessageSeparator/index.tsx

Lines changed: 53 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,60 @@ type MessageSeparatorProps = {
1515
use?: any;
1616
};
1717

18+
const isSameDay = (a: Date, b: Date) =>
19+
a.getFullYear() === b.getFullYear() &&
20+
a.getMonth() === b.getMonth() &&
21+
a.getDate() === b.getDate();
22+
23+
24+
const getDateLabel = (date: string, t: TFunction): string => {
25+
const messageDate = new Date(date);
26+
if (isNaN(messageDate.getTime())) {
27+
return '';
28+
}
29+
const today = new Date();
30+
const yesterday = new Date();
31+
yesterday.setDate(today.getDate() - 1);
32+
33+
34+
if (isSameDay(messageDate, today)) return t('Today');
35+
if (isSameDay(messageDate, yesterday)) return t('Yesterday');
36+
37+
return t('message_separator_date', {
38+
val: messageDate,
39+
formatParams: {
40+
val: { month: 'short', day: '2-digit', year: 'numeric' },
41+
},
42+
}).toUpperCase();
43+
};
44+
1845
// TODO: find a better way to pass `use` and do not default to a string
1946
// eslint-disable-next-line @typescript-eslint/naming-convention
20-
const MessageSeparator = ({ date, unread, use: Element = 'div', className, style = {}, t }: MessageSeparatorProps) => (
21-
<Element
22-
className={createClassName(
23-
styles,
24-
'separator',
25-
{
26-
date: !!date && !unread,
27-
unread: !date && !!unread,
28-
},
29-
[className],
30-
)}
31-
style={style}
32-
>
33-
<hr className={createClassName(styles, 'separator__line')} />
34-
{(date || unread) && (
35-
<span className={createClassName(styles, 'separator__text')}>
36-
{(!!date &&
37-
t('message_separator_date', {
38-
val: new Date(date),
39-
formatParams: {
40-
val: { month: 'short', day: '2-digit', year: 'numeric' },
41-
},
42-
}).toUpperCase()) ||
43-
(unread && t('unread_messages'))}
44-
</span>
45-
)}
46-
<hr className={createClassName(styles, 'separator__line')} />
47-
</Element>
48-
);
47+
const MessageSeparator = ({ date, unread, use: Element = 'div', className, style = {}, t }: MessageSeparatorProps) => {
48+
const dateLabel = date ? getDateLabel(date, t) : '';
49+
50+
return (
51+
<Element
52+
className={createClassName(
53+
styles,
54+
'separator',
55+
{
56+
date: !!date && !unread,
57+
unread: !date && !!unread,
58+
},
59+
[className],
60+
)}
61+
style={style}
62+
>
63+
<hr className={createClassName(styles, 'separator__line')} />
64+
{(date || unread) && (
65+
<span className={createClassName(styles, 'separator__text')}>
66+
{dateLabel || (unread ? t('Unread_Messages') : null)}
67+
</span>
68+
)}
69+
<hr className={createClassName(styles, 'separator__line')} />
70+
</Element>
71+
);
72+
};
4973

5074
export default withTranslation()(memo(MessageSeparator));

0 commit comments

Comments
 (0)