Files
myeasycms-v2/apps/web/components/empty-state.tsx

49 lines
1.1 KiB
TypeScript

import { Button } from '@kit/ui/button';
interface EmptyStateProps {
icon?: React.ReactNode;
title: string;
description: string;
actionLabel?: string;
actionHref?: string;
onAction?: () => void;
}
/**
* Reusable empty state with icon + CTA.
* Used when DataTables have 0 rows.
*/
export function EmptyState({
icon,
title,
description,
actionLabel,
actionHref,
onAction,
}: EmptyStateProps) {
return (
<div className="flex flex-col items-center justify-center rounded-lg border border-dashed p-12 text-center">
{icon && (
<div className="bg-muted text-muted-foreground mb-4 rounded-full p-4">
{icon}
</div>
)}
<h3 className="text-lg font-semibold">{title}</h3>
<p className="text-muted-foreground mt-1 max-w-sm text-sm">
{description}
</p>
{actionLabel && (
<div className="mt-6">
{actionHref ? (
<a href={actionHref}>
<Button>{actionLabel}</Button>
</a>
) : (
<Button onClick={onAction}>{actionLabel}</Button>
)}
</div>
)}
</div>
);
}