35 lines
1.4 KiB
TypeScript
35 lines
1.4 KiB
TypeScript
export function LoadingPanel({ title = 'Загрузка...' }: { title?: string }) {
|
||
return (
|
||
<div className="grid min-h-[320px] place-items-center rounded-[16px] border border-[#24314f] bg-[#121b2e]">
|
||
<div className="text-center">
|
||
<div className="text-3xl font-semibold tracking-tight text-white">{title}</div>
|
||
<div className="mt-3 text-base text-slate-400">Подтягиваю данные и подготавливаю экран.</div>
|
||
</div>
|
||
</div>
|
||
)
|
||
}
|
||
|
||
export function ErrorPanel({
|
||
title = 'Не удалось загрузить данные',
|
||
description = 'Проверь соединение с сервером и попробуй ещё раз.',
|
||
onRetry,
|
||
}: {
|
||
title?: string
|
||
description?: string
|
||
onRetry?: () => void
|
||
}) {
|
||
return (
|
||
<div className="grid min-h-[320px] place-items-center rounded-[16px] border border-dashed border-[#31405f] bg-[#121b2e]">
|
||
<div className="max-w-xl text-center">
|
||
<div className="text-3xl font-semibold tracking-tight text-white">{title}</div>
|
||
<div className="mt-3 text-base text-slate-400">{description}</div>
|
||
{onRetry ? (
|
||
<button className="mt-6 rounded-[10px] bg-[#15c98b] px-6 py-3 text-base font-medium text-[#081225]" onClick={onRetry} type="button">
|
||
Повторить
|
||
</button>
|
||
) : null}
|
||
</div>
|
||
</div>
|
||
)
|
||
}
|