From c87cb35d871c66d93f1ae0c7fa5e8635da61c2b2 Mon Sep 17 00:00:00 2001 From: Moheeb Zara Date: Sun, 17 May 2026 01:24:10 -0700 Subject: [PATCH] feat(ux): content-shaped route skeletons + disable Cancel during submit Per-route loading.tsx for dashboard/members/payments (content-shaped Skeletons instead of the single global full-page spinner) so heavy server pages paint structure immediately. Add/Edit member + Log cash modals now disable Cancel while the submit is in flight (was clickable mid-insert). --- app/(app)/dashboard/loading.tsx | 33 ++++++++++++++++++++++++++ app/(app)/members/loading.tsx | 29 ++++++++++++++++++++++ app/(app)/members/members-client.tsx | 4 ++-- app/(app)/payments/loading.tsx | 30 +++++++++++++++++++++++ app/(app)/payments/payments-client.tsx | 2 +- 5 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 app/(app)/dashboard/loading.tsx create mode 100644 app/(app)/members/loading.tsx create mode 100644 app/(app)/payments/loading.tsx diff --git a/app/(app)/dashboard/loading.tsx b/app/(app)/dashboard/loading.tsx new file mode 100644 index 0000000..becefba --- /dev/null +++ b/app/(app)/dashboard/loading.tsx @@ -0,0 +1,33 @@ +import { Skeleton } from '@/components/ui/skeleton' + +export default function DashboardLoading() { + return ( +
+
+ +
+
+
+ {Array.from({ length: 4 }).map((_, i) => ( +
+ + + +
+ ))} +
+
+
+ + + +
+
+ + +
+
+
+
+ ) +} diff --git a/app/(app)/members/loading.tsx b/app/(app)/members/loading.tsx new file mode 100644 index 0000000..4e8f36d --- /dev/null +++ b/app/(app)/members/loading.tsx @@ -0,0 +1,29 @@ +import { Skeleton } from '@/components/ui/skeleton' + +export default function MembersLoading() { + return ( + <> +
+ + +
+
+
+ {Array.from({ length: 4 }).map((_, i) => )} +
+ +
+ {Array.from({ length: 8 }).map((_, i) => ( +
+ + + + + +
+ ))} +
+
+ + ) +} diff --git a/app/(app)/members/members-client.tsx b/app/(app)/members/members-client.tsx index aeecf5c..f3ff3ab 100644 --- a/app/(app)/members/members-client.tsx +++ b/app/(app)/members/members-client.tsx @@ -493,7 +493,7 @@ export function MembersClient({ members: initialMembers, currentRole, areaLeadRo {error &&

{error}

}
- + @@ -512,7 +512,7 @@ export function MembersClient({ members: initialMembers, currentRole, areaLeadRo {error &&

{error}

}
- + diff --git a/app/(app)/payments/loading.tsx b/app/(app)/payments/loading.tsx new file mode 100644 index 0000000..5f755b9 --- /dev/null +++ b/app/(app)/payments/loading.tsx @@ -0,0 +1,30 @@ +import { Skeleton } from '@/components/ui/skeleton' + +export default function PaymentsLoading() { + return ( + <> +
+ +
+ + +
+
+
+
+ {Array.from({ length: 4 }).map((_, i) => )} +
+
+ {Array.from({ length: 8 }).map((_, i) => ( +
+ + + + +
+ ))} +
+
+ + ) +} diff --git a/app/(app)/payments/payments-client.tsx b/app/(app)/payments/payments-client.tsx index eb7c6ca..316a67a 100644 --- a/app/(app)/payments/payments-client.tsx +++ b/app/(app)/payments/payments-client.tsx @@ -305,7 +305,7 @@ export function PaymentsClient({ payments: initialPayments, members, integration
{error &&

{error}

}
- +