forked from Transparency/kgroad-frontend2
100 lines
2.7 KiB
TypeScript
100 lines
2.7 KiB
TypeScript
import Typography from "@/shared/ui/components/Typography/Typography";
|
||
import "./NewsDetails.scss";
|
||
import { apiInstance } from "@/shared/config/apiConfig";
|
||
import { INews } from "@/shared/types/news-type";
|
||
import Image from "next/image";
|
||
import message from "./icons/message.svg";
|
||
import calendar from "./icons/calendar.svg";
|
||
import ReviewSection from "@/widgets/ReviewSection/ReviewSection";
|
||
import BreadCrumbs from "@/features/BreadCrumbs/BreadCrumbs";
|
||
import { Metadata } from "next";
|
||
|
||
export async function generateMetadata({
|
||
params,
|
||
}: {
|
||
params: { id: string };
|
||
}): Promise<Metadata> {
|
||
const response = await apiInstance.get<INews>(
|
||
`/news/${params.id}/`
|
||
);
|
||
|
||
return {
|
||
title: response.data.title,
|
||
description: response.data.description,
|
||
openGraph: {
|
||
images: [response.data.image],
|
||
type: "article",
|
||
publishedTime: response.data.created_at,
|
||
},
|
||
keywords: ["Новости КР", "Кыргызстан"],
|
||
};
|
||
}
|
||
|
||
const NewsDetails = async ({
|
||
params,
|
||
}: {
|
||
params: { id: string; новость: string };
|
||
}) => {
|
||
const getNewsById = async () => {
|
||
const response = await apiInstance.get<INews>(
|
||
`/news/${params.id}/`
|
||
);
|
||
|
||
return response.data;
|
||
};
|
||
|
||
const data = await getNewsById();
|
||
|
||
const months: Record<string, string> = {
|
||
"01": "Январь",
|
||
"02": "Февраль",
|
||
"03": "Март",
|
||
"04": "Апрель",
|
||
"05": "Май",
|
||
"06": "Июнь",
|
||
"07": "Июль",
|
||
"08": "Август",
|
||
"09": "Сентябрь",
|
||
"10": "Октябрь",
|
||
"11": "Ноябрь",
|
||
"12": "Декабрь",
|
||
};
|
||
|
||
return (
|
||
<div className="news-details page-padding">
|
||
<BreadCrumbs />
|
||
<Typography element="h2">{data.title}</Typography>
|
||
|
||
<div className="news-details__img">
|
||
<img id="news-img" src={data.image} alt="News Image" />
|
||
<div className="news-details__date-and-reviews">
|
||
<div className="news-details__date">
|
||
<Image src={calendar} alt="Calendar Icon" />
|
||
<p>
|
||
{months[data.created_at.slice(5, 7)]}{" "}
|
||
{data.created_at.slice(5, 7).slice(0, 1) === "0"
|
||
? data.created_at.slice(6, 7)
|
||
: data.created_at.slice(5, 7)}
|
||
, {data.created_at.slice(0, 4)}
|
||
</p>
|
||
</div>
|
||
|
||
<div className="news-details__reviews">
|
||
<Image src={message} alt="Message Icon" />
|
||
<p>Комментарии: {data.count_reviews}</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div className="news-details__text">
|
||
<h3>{data.title}</h3>
|
||
<p>{data.description}</p>
|
||
</div>
|
||
|
||
<ReviewSection endpoint="news" id={data.id} />
|
||
</div>
|
||
);
|
||
};
|
||
|
||
export default NewsDetails;
|