import { Link, graphql, PageProps } from 'gatsby' import * as React from 'react' import kebabCase from 'lodash/kebabCase' import styled from 'styled-components' import Layout from '../components/layout' import Seo from '../components/seo' import { Section } from '../components/shared' import { SectionHeading, SectionDesc, SolidButton } from '../components/shared/styledComponents' import Post from './postpreview' import { SideBar } from './sidebar' import type { PostNode, PageContext } from '../types' interface BlogListData { remark: { posts: Array<{ post: PostNode }> } } const BlogListTemplate: React.FC> = ({ data, location, pageContext }) => { const posts = data.remark.posts const iniPath: string = pageContext.page === 'index' ? `/blog/` : pageContext.page === 'year' ? `/${pageContext.year}/` : pageContext.page === 'category' ? `/category/${kebabCase(pageContext.tag ?? '')}/` : `/blog/` const pageInfo = `Page ${pageContext.currentPage} of ${pageContext.numPages}` const paginationJSX = Array.from( { length: pageContext.numPages ?? 0 }, (_, i) => i + 1 ).map((pageIndex) => { const link = pageIndex === 1 ? iniPath : `${iniPath}page/${pageIndex}` return ( {pageIndex} ) }) return (
{posts.map(({ post }, i) => ( ))}
{paginationJSX} {pageInfo}
) } export default BlogListTemplate export const pageQuery = graphql` query BlogListQuery( $filter: MarkdownRemarkFilterInput! $skip: Int! $limit: Int! ) { remark: allMarkdownRemark( filter: $filter limit: $limit skip: $skip sort: { frontmatter: { date: DESC } } ) { posts: edges { post: node { html fields { slug } frontmatter { title date(formatString: "MMMM DD, YYYY") author authorLink previewImg { childImageSharp { gatsbyImageData(layout: CONSTRAINED) } } } } } } } ` export const Head = () =>