57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
import React from "react";
|
||
|
||
import {
|
||
Card,
|
||
CardSection,
|
||
} from "@components/index";
|
||
|
||
import Post from "@models/Feed";
|
||
import noop from "@utils/noop";
|
||
import { getTranslateFunc } from "../../i18n";
|
||
|
||
interface NewsFeedPageViewProps {
|
||
posts: Post[];
|
||
}
|
||
|
||
const cardTimeOpts: Intl.DateTimeFormatOptions = {
|
||
day: "numeric",
|
||
month: "numeric",
|
||
year: "numeric",
|
||
hour: "numeric",
|
||
minute: "2-digit",
|
||
};
|
||
|
||
const NewsFeedPageView: React.FC<NewsFeedPageViewProps> = ({ posts }) => {
|
||
const isFi = true;
|
||
const t = getTranslateFunc("fi");
|
||
|
||
const buttonText = `${t("Lue lisää")}\xa0›`;
|
||
|
||
const locale = isFi ? "fi-FI" : "en-GB";
|
||
|
||
const filteredFeed = posts.map((post) => ({
|
||
...post,
|
||
title: isFi ? post.title_fi : post.title_en,
|
||
description: isFi ? post.description_fi : post.description_en,
|
||
content: isFi ? post.content_fi : post.content_en,
|
||
publish_time: new Date(post.publish_time).toLocaleString(locale, cardTimeOpts),
|
||
}));
|
||
return (
|
||
<CardSection>
|
||
{filteredFeed.map((post) => (
|
||
<Card
|
||
key={post.id}
|
||
title={post.title}
|
||
text={post.description}
|
||
startTime={post.publish_time}
|
||
link={`/feed/${post.id}`}
|
||
buttonOnClick={noop}
|
||
buttonText={buttonText}
|
||
/>
|
||
))}
|
||
</CardSection>
|
||
);
|
||
};
|
||
|
||
export default NewsFeedPageView;
|