Skip to content

Commit 0ce6166

Browse files
author
root
committed
perf: lazy load modals
1 parent 79879ec commit 0ce6166

4 files changed

Lines changed: 22 additions & 5 deletions

File tree

apps/web/app/dashboard/groups/[groupId]/page.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
PaginatedExpensesResponseDto
66
} from '@fairshare/shared-types';
77
import { notFound } from 'next/navigation';
8+
import { Suspense } from 'react';
89

910
import { DashboardLayout } from '../../../../src/components/layout';
1011
import { MemberList, ExpenseTable, GroupActions } from '../../../../src/components/groups';
@@ -65,8 +66,12 @@ export default async function GroupDetailPage({ params }: GroupDetailPageProps)
6566
</div>
6667

6768
<aside className="space-y-10">
68-
<MemberList groupId={groupId} members={members} />
69-
<GroupActions groupId={groupId} currency={group.currency} members={members} />
69+
<Suspense fallback={<div className="h-52 rounded-3xl border border-[var(--fs-border)] bg-[var(--fs-card)] animate-pulse" />}>
70+
<MemberList groupId={groupId} members={members} />
71+
</Suspense>
72+
<Suspense fallback={<div className="h-40 rounded-3xl border border-[var(--fs-border)] bg-[var(--fs-card)] animate-pulse" />}>
73+
<GroupActions groupId={groupId} currency={group.currency} members={members} />
74+
</Suspense>
7075
</aside>
7176
</div>
7277
</div>

apps/web/src/components/groups/ExpenseRow.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22

33
import { useState } from 'react';
44
import { ExpenseDto } from '@fairshare/shared-types';
5-
import { ReceiptUploadModal } from './ReceiptUploadModal';
5+
import dynamic from 'next/dynamic';
6+
7+
const ReceiptUploadModal = dynamic(
8+
() => import('./ReceiptUploadModal').then((mod) => mod.ReceiptUploadModal),
9+
{ ssr: false },
10+
);
611

712
export function ExpenseRow({ expense }: { expense: ExpenseDto }) {
813
const [open, setOpen] = useState(false);

apps/web/src/components/groups/GroupActions.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import { useState } from 'react';
44
import { useRouter } from 'next/navigation';
55
import { GroupMemberSummaryDto } from '@fairshare/shared-types';
66
import { PlusCircle } from 'lucide-react';
7-
import { CreateExpenseModal } from './CreateExpenseModal';
7+
import dynamic from 'next/dynamic';
8+
9+
const CreateExpenseModal = dynamic(
10+
() => import('./CreateExpenseModal').then((mod) => mod.CreateExpenseModal),
11+
{ ssr: false },
12+
);
813

914
type GroupActionsProps = {
1015
groupId: string;

apps/web/src/components/groups/MemberList.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ import React, { useState } from 'react';
44
import { useRouter } from 'next/navigation';
55
import { GroupMemberSummaryDto } from '@fairshare/shared-types';
66
import { UserPlus } from 'lucide-react';
7-
import { InviteModal } from './InviteModal';
7+
import dynamic from 'next/dynamic';
88
import { glassPanel } from '../layout/layoutStyles';
99

10+
const InviteModal = dynamic(() => import('./InviteModal').then((mod) => mod.InviteModal), { ssr: false });
11+
1012
interface MemberListProps {
1113
groupId: string;
1214
members: GroupMemberSummaryDto[];

0 commit comments

Comments
 (0)