src/views/Blog/Detail.jsx (66 lines of code) (raw):
import { Breadcrumb, Spin, Result, Button } from "antd";
import { useParams, useNavigate } from "react-router-dom";
import { useTranslation } from "../../hooks";
import { useBlogDetail } from "./useBlogDetail";
import { COLORS } from ".";
import "./detail.scss";
export const BlogDetail = () => {
const { locale } = useTranslation();
const params = useParams();
const navigate = useNavigate();
const { detail, loading } = useBlogDetail(locale, params.name);
return !loading ? (
<section className="blog-detail">
{detail.__html ? (
<>
<Breadcrumb>
<Breadcrumb.Item>
<a href={`/${locale}/blog`}>Blog</a>
</Breadcrumb.Item>
<Breadcrumb.Item>{detail.title}</Breadcrumb.Item>
</Breadcrumb>
<div className="blog-detail-title">
<div
className="blog-detail-tag"
style={{
backgroundColor: COLORS[detail.type] || "rgb(59, 89, 153)",
}}
>
{detail.label}
</div>
<span>{detail.title}</span>
</div>
<div className="blog-detail-desc">
<div className="blog-detail-author">{detail.author}</div>
<div className="blog-detail-time">{detail.time}</div>
</div>
<div
className="blog-detail-content"
dangerouslySetInnerHTML={{ __html: detail.__html }}
></div>
</>
) : (
<Result
status="404"
title="404"
subTitle="Sorry, the page you visited does not exist."
extra={
<Button
type="primary"
onClick={() => {
navigate(`/${locale}/blog`);
}}
shape="round"
>
Back Blog
</Button>
}
/>
)}
</section>
) : (
<div className="ds-spin">
<Spin size="large" />
</div>
);
};