import PostPreview from '@components/PostPreview/PostPreview'; import { PostsList as PostsListData } from '@ts/types/blog'; import { sortPostsByYear } from '@utils/helpers/sort'; import { ForwardedRef, forwardRef, Fragment } from 'react'; import { useIntl } from 'react-intl'; import styles from './PostsList.module.scss'; const PostsList = ( { data, showYears, }: { data: PostsListData[]; showYears: boolean; }, ref: ForwardedRef ) => { const intl = useIntl(); const titleLevel = showYears ? 3 : 2; const getPostsListByYear = () => { const posts = sortPostsByYear(data); const years = Object.keys(posts).reverse(); const getLastPostId = () => { const oldestYear = Object.keys(posts)[0]; const lastPost = posts[oldestYear][posts[oldestYear].length - 1]; return lastPost.id; }; return years.map((year) => { return (
{showYears && (

{intl.formatMessage({ defaultMessage: 'Published on', description: 'PostsList: published on year label', id: 'EvODgw', })}{' '} {year}

)}
    {posts[year].map((post) => { const isLastPost = post.id === getLastPostId(); return (
  1. {isLastPost && (
  2. )}
    ); })}
); }); }; const getPostsList = () => { return data.map((page) => { const getLastPostId = () => { const lastPost = page.posts[page.posts.length - 1]; return lastPost.id; }; if (page.posts.length === 0) { return (

{intl.formatMessage({ defaultMessage: 'No results found.', description: 'PostsList: no results', id: 'vK7Sxv', })}

); } else { return (
    {page.posts.map((post) => { const isLastPost = post.id === getLastPostId(); return (
  1. {isLastPost && }
    ); })}
); } }); }; return
{showYears ? getPostsListByYear() : getPostsList()}
; }; export default forwardRef(PostsList);