From bed426a6b4843f784b234736fdbd852ce2f0d816 Mon Sep 17 00:00:00 2001 From: i701 Date: Sat, 31 May 2025 12:37:46 +0500 Subject: [PATCH] feat: add loading state and full-page loader component; update payment page and application layout to improve user experience --- app/(dashboard)/devices-to-pay/loading.tsx | 8 +++++ app/(dashboard)/payments/[paymentId]/page.tsx | 4 ++- components/auth/application-layout.tsx | 15 +++++---- components/clickable-row.tsx | 2 +- components/device-card.tsx | 6 ++-- components/device-cart.tsx | 3 +- components/devices-for-payment.tsx | 3 +- components/full-page-loader.tsx | 9 +++++ components/user/add-device-dialog.tsx | 2 +- components/welcome-banner.tsx | 33 +++++++++++++++++++ lib/atoms.ts | 2 ++ package-lock.json | 10 ++++++ package.json | 1 + tailwind.config.ts | 4 +-- 14 files changed, 84 insertions(+), 18 deletions(-) create mode 100644 app/(dashboard)/devices-to-pay/loading.tsx create mode 100644 components/full-page-loader.tsx create mode 100644 components/welcome-banner.tsx diff --git a/app/(dashboard)/devices-to-pay/loading.tsx b/app/(dashboard)/devices-to-pay/loading.tsx new file mode 100644 index 0000000..8c26961 --- /dev/null +++ b/app/(dashboard)/devices-to-pay/loading.tsx @@ -0,0 +1,8 @@ +import FullPageLoader from '@/components/full-page-loader' +import React from 'react' + +export default function Loading() { + return ( + + ) +} diff --git a/app/(dashboard)/payments/[paymentId]/page.tsx b/app/(dashboard)/payments/[paymentId]/page.tsx index 4ea576e..fe04a33 100644 --- a/app/(dashboard)/payments/[paymentId]/page.tsx +++ b/app/(dashboard)/payments/[paymentId]/page.tsx @@ -39,7 +39,9 @@ export default async function PaymentPage({ > {payment?.paid ? "Paid" : "Pending"} - + {!payment.paid && ( + + )} diff --git a/components/auth/application-layout.tsx b/components/auth/application-layout.tsx index fc5fbf2..82e97e8 100644 --- a/components/auth/application-layout.tsx +++ b/components/auth/application-layout.tsx @@ -16,6 +16,7 @@ import { tryCatch } from "@/utils/tryCatch"; import { getServerSession } from "next-auth"; import { redirect } from "next/navigation"; import { AccountPopover } from "./account-popver"; +import { WelcomeBanner } from "../welcome-banner"; export async function ApplicationLayout({ children, @@ -31,7 +32,6 @@ export async function ApplicationLayout({ return ( -
@@ -45,13 +45,14 @@ export async function ApplicationLayout({
-
- Welcome,{" "} - - {session?.user?.first_name} {session?.user?.last_name} - + + +
+ {children}
-
{children}
); diff --git a/components/clickable-row.tsx b/components/clickable-row.tsx index 9b6e8ab..d820958 100644 --- a/components/clickable-row.tsx +++ b/components/clickable-row.tsx @@ -20,7 +20,7 @@ export default function ClickableRow({ key={device.id} className={cn( (parentalControl === false && device.blocked) || device.is_active - ? "cursor-not-allowed bg-accent-foreground/10 hover:bg-accent-foreground/10" + ? "cursor-not-allowed hover:bg-accent-foreground/10" : "cursor-pointer hover:bg-muted-foreground/10", )} onClick={() => { diff --git a/components/device-card.tsx b/components/device-card.tsx index 9fffc61..d458d28 100644 --- a/components/device-card.tsx +++ b/components/device-card.tsx @@ -19,7 +19,7 @@ export default function DeviceCard({ return (
{}} + onKeyUp={() => { }} onClick={() => { if (device.blocked) return; if (device.is_active === true) return; @@ -36,9 +36,9 @@ export default function DeviceCard({
diff --git a/components/device-cart.tsx b/components/device-cart.tsx index 04341f5..f226eef 100644 --- a/components/device-cart.tsx +++ b/components/device-cart.tsx @@ -10,7 +10,6 @@ export function DeviceCartDrawer() { const pathname = usePathname(); const devices = useAtomValue(deviceCartAtom); const router = useRouter(); - if (pathname === "/payment" || pathname === "/devices-to-pay") { return null; } @@ -19,7 +18,7 @@ export function DeviceCartDrawer() { return (