brunner56's picture
implement app
0bfe2e3
'use client';
import { Button } from '@/components/ui/button/button';
import { cn } from '@/components/ui/core/styling';
import Image from 'next/image';
import { useRouter } from 'next/navigation';
import React from 'react';
interface LuffyErrorProps {
children?: React.ReactNode;
className?: string;
reset?: () => void;
title?: string | null;
showRefreshButton?: boolean;
}
export const LuffyError: React.FC<LuffyErrorProps> = (props) => {
const {
children,
reset,
className,
title = 'Oops!',
showRefreshButton = false,
...rest
} = props;
const router = useRouter();
return (
<>
<div
data-luffy-error
className={cn(
'w-full flex flex-col items-center mt-10 space-y-4',
className
)}
>
{
<div
data-luffy-error-image-container
className="size-[8rem] mx-auto flex-none rounded-[--radius-md] object-cover object-center relative overflow-hidden"
>
<Image
data-luffy-error-image
src="/logo.png"
alt={''}
fill
quality={100}
priority
sizes="10rem"
className="object-contain object-top"
/>
</div>
}
<div data-luffy-error-content className="text-center space-y-4">
{!!title && <h3 data-luffy-error-title>{title}</h3>}
<div data-luffy-error-content-children>{children}</div>
<div data-luffy-error-content-buttons>
{showRefreshButton && !reset && (
<Button
data-luffy-error-content-button-refresh
intent="warning-subtle"
onClick={() => router.refresh()}
>
Retry
</Button>
)}
{!!reset && (
<Button
data-luffy-error-content-button-reset
intent="warning-subtle"
onClick={reset}
>
Retry
</Button>
)}
</div>
</div>
</div>
</>
);
};