Skip to content

Commit a0c065a

Browse files
fix: replace Moment.js with Day.js to improve performance (#5091)
Co-authored-by: DuskWarden <pawar96sameer@gmail.com> Co-authored-by: Ansh Goyal <anshgoyal1704@gmail.com>
1 parent 5825299 commit a0c065a

File tree

12 files changed

+43
-46
lines changed

12 files changed

+43
-46
lines changed

components/Calendar.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import moment from 'moment';
1+
import dayjs from 'dayjs';
2+
import localizedFormat from 'dayjs/plugin/localizedFormat';
23
import React from 'react';
34
import { twMerge } from 'tailwind-merge';
45

@@ -11,6 +12,8 @@ import { getEvents } from '../utils/staticHelpers';
1112
import GoogleCalendarButton from './buttons/GoogleCalendarButton';
1213
import Heading from './typography/Heading';
1314

15+
dayjs.extend(localizedFormat);
16+
1417
interface ICalendarProps {
1518
className?: string;
1619
size: number;
@@ -29,7 +32,7 @@ export default function Calendar({ className = '', size }: ICalendarProps) {
2932
const CALENDAR_URL =
3033
'https://calendar.google.com/calendar/embed?src=c_q9tseiglomdsj6njuhvbpts11c%40group.calendar.google.com&ctz=UTC';
3134
const currentDate = new Date();
32-
const eventsExist = eventsData?.filter((event: IEvent) => moment(event.date).isAfter(currentDate)).length > 0;
35+
const eventsExist = eventsData?.filter((event: IEvent) => dayjs(event.date).isAfter(currentDate)).length > 0;
3336

3437
return (
3538
<div
@@ -46,13 +49,13 @@ export default function Calendar({ className = '', size }: ICalendarProps) {
4649
<li key={index} data-testid='Calendar-list-item'>
4750
<a href={event.url} className='mb-1 mt-2 flex grow flex-col items-start sm:flex-row sm:items-center'>
4851
<div className='inline-flex h-12 min-w-12 flex-row rounded-full bg-pink-500 font-bold text-white'>
49-
<span className='flex-1 self-center text-center'>{moment(event.date).format('D')}</span>
52+
<span className='flex-1 self-center text-center'>{dayjs(event.date).format('D')}</span>
5053
</div>
5154
<div className='grow text-left sm:mt-0 sm:pl-6'>
5255
<h2 className='title-font font-medium text-gray-900 hover:text-gray-500'>{event.title}</h2>
5356
<p className='text-gray-600'>
54-
{moment(event.date).local().format('LLLL')} UTC
55-
{moment(event.date).local().format('Z')}
57+
{dayjs(event.date).format('LLLL')} UTC
58+
{dayjs(event.date).format('Z')}
5659
</p>
5760
</div>
5861
</a>

components/campaigns/AnnouncementRemainingDays.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import moment from 'moment';
1+
import dayjs from 'dayjs';
22
import React from 'react';
33

44
interface AnnouncementRemainingDaysProps {
@@ -12,8 +12,8 @@ interface AnnouncementRemainingDaysProps {
1212
* @param {string} props.eventName - The name of the event
1313
*/
1414
export default function AnnouncementRemainingDays({ dateTime, eventName }: AnnouncementRemainingDaysProps) {
15-
const date = moment(dateTime);
16-
const now = moment();
15+
const date = dayjs(dateTime);
16+
const now = dayjs();
1717
const days = date.diff(now, 'days');
1818
const hours = date.diff(now, 'hours');
1919
const minutes = date.diff(now, 'minutes');

components/layout/BlogLayout.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import moment from 'moment';
1+
import dayjs from 'dayjs';
22
import ErrorPage from 'next/error';
33
import HtmlHead from 'next/head';
44
import { useRouter } from 'next/router';
@@ -71,7 +71,7 @@ export default function BlogLayout({ post, children }: IBlogLayoutProps) {
7171
</span>
7272
</p>
7373
<div className='flex text-sm leading-5 text-gray-500'>
74-
<time dateTime={post.date}>{moment(post.date).format('MMMM D, YYYY')}</time>
74+
<time dateTime={post.date}>{dayjs(post.date).format('MMMM D, YYYY')}</time>
7575
<span className='mx-1'>&middot;</span>
7676
<span>{post.readingTime} min read</span>
7777
</div>

components/navigation/BlogPostItem.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import moment from 'moment';
1+
import dayjs from 'dayjs';
22
import Link from 'next/link';
33
import type { Ref } from 'react';
44
import React, { forwardRef } from 'react';
@@ -129,7 +129,7 @@ const BlogPostItem = ({ post, className = '', id = '' }: BlogPostItemProps, ref:
129129
</span>
130130
</Heading>
131131
<Paragraph typeStyle={ParagraphTypeStyle.sm} className='flex'>
132-
<time dateTime={post.date}>{moment(post.date).format('MMMM D, YYYY')}</time>
132+
<time dateTime={post.date}>{dayjs(post.date).format('MMMM D, YYYY')}</time>
133133
<span className='mx-1'>&middot;</span>
134134
<span>{post.readingTime} min read</span>
135135
</Paragraph>

components/navigation/EventFilter.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import moment from 'moment';
1+
import dayjs from 'dayjs';
22
import React, { useEffect, useState } from 'react';
33

44
import type { IEvent } from '@/types/event';
@@ -23,7 +23,7 @@ interface EventFilterProps {
2323
* @param {React.Dispatch<React.SetStateAction<IEvent[]>>} props.setData - The function to update the filtered events.
2424
*/
2525
export default function EventFilter({ data, setData }: EventFilterProps) {
26-
const localTime = moment().format('YYYY-MM-DD');
26+
const localTime = dayjs().format('YYYY-MM-DD');
2727
const currentDate = `${localTime}T00:00:00.000Z`;
2828
const filterList: string[] = ['All', 'Upcoming', 'Recorded'];
2929
const [active, setActive] = useState<string>('All');
@@ -36,14 +36,14 @@ export default function EventFilter({ data, setData }: EventFilterProps) {
3636
case ActiveState.Upcoming:
3737
setData(
3838
getEvents(data).filter((event: IEvent) => {
39-
return moment(event.date).format() > currentDate;
39+
return dayjs(event.date).format() > currentDate;
4040
})
4141
);
4242
break;
4343
case ActiveState.Recorded:
4444
setData(
4545
getEvents(data).filter((event: IEvent) => {
46-
return moment(event.date).format() < currentDate;
46+
return dayjs(event.date).format() < currentDate;
4747
})
4848
);
4949
break;

components/navigation/EventPostItem.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ArrowRightIcon } from '@heroicons/react/outline';
2-
import moment from 'moment';
2+
import dayjs from 'dayjs';
33
import React from 'react';
44

55
import type { IEvent } from '@/types/event';
@@ -25,7 +25,7 @@ interface EventPostItemProps {
2525
*
2626
*/
2727
function EventPostItem({ post, className = '', id }: EventPostItemProps): React.JSX.Element {
28-
const localTime = moment().format('YYYY-MM-DD'); // store localTime
28+
const localTime = dayjs().format('YYYY-MM-DD'); // store localTime
2929
const currentDate = `${localTime}T00:00:00.000Z`;
3030
const title = post.title || '';
3131
let color = '';
@@ -48,7 +48,7 @@ function EventPostItem({ post, className = '', id }: EventPostItemProps): React.
4848

4949
const defaultCover = 'https://github.com/asyncapi/community/assets/40604284/01c2b8de-fa5c-44dd-81a5-70cb96df4813';
5050
let active = true;
51-
const postDate = moment(post.date); // Convert post.date to a moment object if necessary
51+
const postDate = dayjs(post.date); // Convert post.date to a dayjs object if necessary
5252

5353
if (!postDate.isValid()) {
5454
// Handle invalid date if necessary
@@ -80,7 +80,7 @@ function EventPostItem({ post, className = '', id }: EventPostItemProps): React.
8080
<div className='flex items-center'>
8181
<IconCalendar />
8282
<span className='ml-4 text-sm font-semibold' data-testid='Event-span'>
83-
{active ? moment(postDate).format('MMMM D, YYYY') : 'View Recording'}
83+
{active ? postDate.format('MMMM D, YYYY') : 'View Recording'}
8484
</span>
8585
<ArrowRightIcon className='ml-3 w-4' />
8686
</div>

components/newsroom/FeaturedBlogPost.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import moment from 'moment';
1+
import dayjs from 'dayjs';
22
import Link from 'next/link';
33
import React from 'react';
44
import TextTruncate from 'react-text-truncate';
@@ -100,7 +100,7 @@ export default function FeaturedBlogPost({ post, className = '' }: FeaturedBlogP
100100
</Heading>
101101
<Paragraph typeStyle={ParagraphTypeStyle.sm} className='flex'>
102102
<time dateTime={post.date} data-testid='FeaturedBlogPost-date'>
103-
{moment(post.date).format('MMMM D, YYYY')}
103+
{dayjs(post.date).format('MMMM D, YYYY')}
104104
</time>
105105
<span className='mx-1'>&middot;</span>
106106
<span data-testid='FeaturedBlogPost-RT'>{post.readingTime} min read</span>

package-lock.json

Lines changed: 1 addition & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
"axios": "^1.12.1",
7373
"clsx": "^2.1.0",
7474
"cssnano": "^6.0.3",
75+
"dayjs": "^1.11.19",
7576
"dedent": "^1.5.1",
7677
"dotenv": "^16.4.4",
7778
"fs-extra": "^11.2.0",
@@ -89,7 +90,6 @@
8990
"markdown-toc": "^1.2.0",
9091
"md5": "^2.3.0",
9192
"mermaid": "9.3.0",
92-
"moment": "^2.30.1",
9393
"next": "15.5.9",
9494
"next-i18next": "^15.3.0",
9595
"next-language-detector": "^1.1.1",
@@ -174,4 +174,4 @@
174174
"tsx": "^4.19.4",
175175
"typescript": "^5.3.3"
176176
}
177-
}
177+
}

pages/community/index.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import type moment from 'moment';
1+
import type { Dayjs } from 'dayjs';
2+
import dayjs from 'dayjs';
3+
import localizedFormat from 'dayjs/plugin/localizedFormat';
24
import React from 'react';
35

46
import { CardType } from '@/types/components/community/CardPropsType';
@@ -14,9 +16,11 @@ import Heading from '../../components/typography/Heading';
1416
import eventsData from '../../config/meetings.json';
1517
import { getEvents } from '../../utils/staticHelpers';
1618

19+
dayjs.extend(localizedFormat);
20+
1721
interface Event {
1822
title: string;
19-
date: moment.Moment;
23+
date: Dayjs;
2024
url: string;
2125
}
2226

@@ -132,8 +136,8 @@ export default function CommunityIndexPage() {
132136
<div className='ml-4 text-left'>
133137
<h1 className='text-md md:text-lg'>{event.title}</h1>
134138
<span className='text-xs text-gray-500 md:text-sm'>
135-
{event.date.local().format('LLLL')} UTC
136-
{event.date.local().format('Z')}
139+
{event.date.format('LLLL')} UTC
140+
{event.date.format('Z')}
137141
</span>
138142
</div>
139143
</a>

0 commit comments

Comments
 (0)