47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
"use client";
|
|
import React from "react";
|
|
import {
|
|
Card,
|
|
CardContent,
|
|
CardHeader,
|
|
} from "@/components/ui/card";
|
|
import { Skeleton } from "@/components/ui/skeleton";
|
|
import { CardSkeletonProps } from "./schema";
|
|
|
|
// Interface moved to schema.ts
|
|
|
|
export function CardSkeleton({
|
|
index,
|
|
showFields,
|
|
showViewIcon,
|
|
showUpdateIcon,
|
|
}: CardSkeletonProps) {
|
|
return (
|
|
<div key={`loading-${index}`} className="w-full p-1">
|
|
<Card className="h-full">
|
|
<CardHeader className="p-3 pb-0 flex justify-between items-start">
|
|
<Skeleton className="h-5 w-3/4" />
|
|
<div className="flex space-x-1">
|
|
{showViewIcon && (
|
|
<Skeleton className="h-8 w-8 rounded-full" />
|
|
)}
|
|
{showUpdateIcon && (
|
|
<Skeleton className="h-8 w-8 rounded-full" />
|
|
)}
|
|
</div>
|
|
</CardHeader>
|
|
<CardContent className="p-3">
|
|
<div className="space-y-2">
|
|
{showFields.map((field, fieldIndex) => (
|
|
<div key={`loading-${index}-${field}`} className="flex">
|
|
<Skeleton className="h-4 w-10 mr-2" />
|
|
<Skeleton className="h-4 w-full" />
|
|
</div>
|
|
))}
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
);
|
|
}
|