diff options
author | 2025-04-24 09:13:07 +0530 | |
---|---|---|
committer | 2025-04-24 09:13:07 +0530 | |
commit | caace928ac81c284629ee50942d72179d4da9784 (patch) | |
tree | b2f4e87b7a53e30ac5ac9af94cdc70c2da5bbfb9 /frontend/src/components/ui/card.tsx | |
parent | 50d5e6534f5e593297a09323e683c7c8b850117b (diff) | |
download | finance-caace928ac81c284629ee50942d72179d4da9784.tar.gz finance-caace928ac81c284629ee50942d72179d4da9784.tar.bz2 finance-caace928ac81c284629ee50942d72179d4da9784.zip |
feat: Fix loan API type assertion and complete core loan features
- Resolve interface conversion panic in loan handlers by correcting
user type assertions from *models.User to models.User
- Finalize loan management API integration with frontend components
- Implement remaining loan calculation logic and CRUD operations
- Connect loan display components to backend APIs as per Phase 3
- Update project status in README.md to reflect completed loan features
- Add CORS middleware configuration for frontend-backend communication
This commit completes core loan management functionality and fixes critical
type safety issues in the API handlers, enabling proper user context handling.
Diffstat (limited to 'frontend/src/components/ui/card.tsx')
-rw-r--r-- | frontend/src/components/ui/card.tsx | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/frontend/src/components/ui/card.tsx b/frontend/src/components/ui/card.tsx new file mode 100644 index 0000000..d05bbc6 --- /dev/null +++ b/frontend/src/components/ui/card.tsx @@ -0,0 +1,92 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +function Card({ className, ...props }: React.ComponentProps<"div">) { + return ( + <div + data-slot="card" + className={cn( + "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm", + className + )} + {...props} + /> + ) +} + +function CardHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( + <div + data-slot="card-header" + className={cn( + "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6", + className + )} + {...props} + /> + ) +} + +function CardTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( + <div + data-slot="card-title" + className={cn("leading-none font-semibold", className)} + {...props} + /> + ) +} + +function CardDescription({ className, ...props }: React.ComponentProps<"div">) { + return ( + <div + data-slot="card-description" + className={cn("text-muted-foreground text-sm", className)} + {...props} + /> + ) +} + +function CardAction({ className, ...props }: React.ComponentProps<"div">) { + return ( + <div + data-slot="card-action" + className={cn( + "col-start-2 row-span-2 row-start-1 self-start justify-self-end", + className + )} + {...props} + /> + ) +} + +function CardContent({ className, ...props }: React.ComponentProps<"div">) { + return ( + <div + data-slot="card-content" + className={cn("px-6", className)} + {...props} + /> + ) +} + +function CardFooter({ className, ...props }: React.ComponentProps<"div">) { + return ( + <div + data-slot="card-footer" + className={cn("flex items-center px-6 [.border-t]:pt-6", className)} + {...props} + /> + ) +} + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardAction, + CardDescription, + CardContent, +} |