movie-web/src/pages/parts/player/PlaybackErrorPart.tsx
2024-04-04 21:11:01 +01:00

68 lines
2.1 KiB
TypeScript

import { useTranslation } from "react-i18next";
import { Button } from "@/components/buttons/Button";
import { Icons } from "@/components/Icon";
import { IconPill } from "@/components/layout/IconPill";
import { useModal } from "@/components/overlays/Modal";
import { Paragraph } from "@/components/text/Paragraph";
import { Title } from "@/components/text/Title";
import { ErrorContainer, ErrorLayout } from "@/pages/layouts/ErrorLayout";
import { playerStatus } from "@/stores/player/slices/source";
import { usePlayerStore } from "@/stores/player/store";
import { ErrorCardInModal } from "../errors/ErrorCard";
export function PlaybackErrorPart() {
const { t } = useTranslation();
const playbackError = usePlayerStore((s) => s.interface.error);
const setStatus = usePlayerStore((s) => s.setStatus);
const setPlay = usePlayerStore((s) => s.play);
const modal = useModal("error");
return (
<ErrorLayout>
<ErrorContainer>
<IconPill icon={Icons.WAND}>{t("player.playbackError.badge")}</IconPill>
<Title>{t("player.playbackError.title")}</Title>
<Paragraph>{t("player.playbackError.text")}</Paragraph>
<div className="flex gap-3">
<Button
href="/"
theme="secondary"
padding="md:px-12 p-2.5"
className="mt-6"
>
{t("player.playbackError.homeButton")}
</Button>
<Button
onClick={() => {
setStatus(playerStatus.PLAYING);
setPlay();
}}
href="secondary"
theme="secondary"
padding="md:px-12 p-2.5"
className="mt-6"
>
{t("player.playbackError.retryButton")}
</Button>
<Button
onClick={() => modal.show()}
theme="purple"
padding="md:px-12 p-2.5"
className="mt-6"
>
{t("errors.showError")}
</Button>
</div>
</ErrorContainer>
{/* Error */}
<ErrorCardInModal
onClose={() => modal.hide()}
error={playbackError}
id={modal.id}
/>
</ErrorLayout>
);
}