import React from 'react'; import Head from 'next/head'; import ErrorPage from '../_error'; import PostsList, { PostItem } from '../../components/blog/PostsList'; import Container from '../../components/shared/Container'; import BlockCTA from '../../components/shared/BlockCTA'; import { Header } from '../../components/blog/Header'; import { BlogHomePageData, BlogPostData, BlogPostTag, HeaderBlogData } from '../../typings/entities'; import { DEFAULT_POSTS_PER_PAGE, getBlogHomepage, getBlogPosts, PrismicDocument, SearchResponse } from '../../prismic/api'; import { NextPage } from 'next'; import { Link as RouterLink } from '../../i18n'; import Pagination from '../../components/blog/Pagination'; import { Link } from '../../styles/components/shared/Link.style'; export interface BlogHomeProps { header?: HeaderBlogData; error?: boolean; namespacesRequired?: string[]; posts?: SearchResponse; home?: BlogHomePageData; blogTag?: PrismicDocument; currentPage?: number; totalPages?: number; } export function formatPost(post: PrismicDocument): PostItem { return { uid: post?.uid, image: post?.data?.image?.url, tag: post?.data?.tag?.data?.name, tagUid: post?.data?.tag?.uid, title: post?.data?.title, description: post?.data?.description }; } const BlogHome: NextPage = ({ header, error, posts, home, blogTag, totalPages, currentPage }) => { if (error) { return ; } function getPosts(): PostItem[] { const results: PostItem[] = currentPage === 1 ? [formatPost(blogTag ? blogTag?.data?.focused_article : home.focused_article)] : []; return [...results, ...posts.results.map((post) => formatPost(post))]; } return ( <> {blogTag && {blogTag?.data?.title}} {blogTag && }

{blogTag ? blogTag?.data?.title : home.top_title}

{blogTag ? blogTag?.data?.tagline : home.top_tagline}

{currentPage === 1 && totalPages > 1 && Afficher Plus d'Articles } {currentPage !== 1 && }
); }; BlogHome.getInitialProps = async ({ req, query }): Promise => { try { const { page } = query; const currentPage = page ? parseInt(page.toString()) : 1; const home = await getBlogHomepage(req); const posts = await getBlogPosts(req, { page: currentPage, ignoredPostId: home?.data?.focused_article?.id }); const totalPages = Math.ceil((posts.total_results_size) / DEFAULT_POSTS_PER_PAGE); return { posts, home: home.data, namespacesRequired: ['common'], currentPage, totalPages }; } catch (err) { return { error: true, namespacesRequired: ['common'] }; } }; export default BlogHome;