aboutsummaryrefslogtreecommitdiffstats
path: root/src/app/groups
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/groups')
-rw-r--r--src/app/groups/[groupId]/expenses/page.tsx46
-rw-r--r--src/app/groups/recent-group-list.tsx8
2 files changed, 40 insertions, 14 deletions
diff --git a/src/app/groups/[groupId]/expenses/page.tsx b/src/app/groups/[groupId]/expenses/page.tsx
index 0ec5086..5285cb8 100644
--- a/src/app/groups/[groupId]/expenses/page.tsx
+++ b/src/app/groups/[groupId]/expenses/page.tsx
@@ -7,11 +7,13 @@ import {
CardHeader,
CardTitle,
} from '@/components/ui/card'
+import { Skeleton } from '@/components/ui/skeleton'
import { getGroup, getGroupExpenses } from '@/lib/api'
import { Plus } from 'lucide-react'
import { Metadata } from 'next'
import Link from 'next/link'
import { notFound } from 'next/navigation'
+import { Suspense } from 'react'
export const metadata: Metadata = {
title: 'Expenses',
@@ -22,11 +24,6 @@ export default async function GroupExpensesPage({
}: {
params: { groupId: string }
}) {
- const group = await getGroup(groupId)
- if (!group) notFound()
-
- const expenses = await getGroupExpenses(groupId)
-
return (
<Card className="mb-4">
<div className="flex flex-1">
@@ -46,13 +43,40 @@ export default async function GroupExpensesPage({
</div>
<CardContent className="p-0">
- <ExpenseList
- expenses={expenses}
- groupId={groupId}
- currency={group.currency}
- participants={group.participants}
- />
+ <Suspense
+ fallback={[0, 1, 2].map((i) => (
+ <div
+ key={i}
+ className="border-t flex justify-between items-center px-6 py-4 text-sm"
+ >
+ <div className="flex flex-col gap-2">
+ <Skeleton className="h-4 w-16 rounded-full" />
+ <Skeleton className="h-4 w-32 rounded-full" />
+ </div>
+ <div>
+ <Skeleton className="h-4 w-16 rounded-full" />
+ </div>
+ </div>
+ ))}
+ >
+ <Expenses groupId={groupId} />
+ </Suspense>
</CardContent>
</Card>
)
}
+
+async function Expenses({ groupId }: { groupId: string }) {
+ const group = await getGroup(groupId)
+ if (!group) notFound()
+ const expenses = await getGroupExpenses(group.id)
+
+ return (
+ <ExpenseList
+ expenses={expenses}
+ groupId={group.id}
+ currency={group.currency}
+ participants={group.participants}
+ />
+ )
+}
diff --git a/src/app/groups/recent-group-list.tsx b/src/app/groups/recent-group-list.tsx
index 60e3922..77feaf4 100644
--- a/src/app/groups/recent-group-list.tsx
+++ b/src/app/groups/recent-group-list.tsx
@@ -2,6 +2,7 @@
import { getGroupsAction } from '@/app/groups/actions'
import { getRecentGroups } from '@/app/groups/recent-groups-helpers'
import { Button } from '@/components/ui/button'
+import { Skeleton } from '@/components/ui/skeleton'
import { getGroups } from '@/lib/api'
import { Calendar, Loader2, Users } from 'lucide-react'
import Link from 'next/link'
@@ -96,9 +97,10 @@ export function RecentGroupList() {
</div>
</div>
) : (
- <>
- <Loader2 className="w-3 h-3 mr-1 inline animate-spin" />
- </>
+ <div className="flex justify-between">
+ <Skeleton className="h-4 w-6 rounded-full" />
+ <Skeleton className="h-4 w-24 rounded-full" />
+ </div>
)}
</div>
</div>