This commit is contained in:
Sergey Yarkov 2020-07-03 17:12:55 +03:00
parent f16b7ba95b
commit 97aa599223
7 changed files with 87 additions and 18 deletions

View File

@ -1,31 +1,29 @@
import React from 'react'; import React from 'react';
import { Link } from 'gatsby'
import './ArticleCard.scss' import './ArticleCard.scss'
const ArticleCard = ({ data }) => { const ArticleCard = ({ data: { slug, title, category, description, tags } }) => {
return ( return (
<article className="article-card"> <article className="article-card">
<div className="article-card__image"> <div className="article-card__image">
<a href="/"> <Link to={`/article/${slug}`}>
<img src="https://c.wallhere.com/photos/fb/a1/JavaScript_minimalism-1227036.jpg!d" alt="article" /> <img src="https://c.wallhere.com/photos/fb/a1/JavaScript_minimalism-1227036.jpg!d" alt="article" />
</a> </Link>
</div> </div>
<div className="article-card__heading"> <div className="article-card__heading">
<h2><a href="/">Lorem ipsum dolor sit amet, consectetur.</a></h2> <h2><Link to={`/article/${slug}`}>{title}</Link></h2>
</div> </div>
<div className="article-card__category"> <div className="article-card__category">
<a href="/">Javascript</a> <Link to={`/category/${category}`}>{category}</Link>
</div> </div>
<div className="article-card__tags"> <div className="article-card__tags">
<ul> <ul>
<li><a href="/">graphql</a></li> {tags.map((tag, i) => <li key={i}><Link to={`/tag/${tag}`}>{tag}</Link></li>)}
<li><a href="/">netlify</a></li>
<li><a href="/">tutorial</a></li>
<li><a href="/">serverless</a></li>
</ul> </ul>
</div> </div>
<div className="article-card__description"> <div className="article-card__description">
<p> <p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Non autem hoc: igitur ne illud quidem. Uterque enim summo bono fruitur, id est voluptate. Hoc tu nunc in illo probas {description}
</p> </p>
</div> </div>
</article> </article>

View File

@ -2,11 +2,11 @@ import React from 'react';
import ArticleCard from './ArticleCard/ArticleCard' import ArticleCard from './ArticleCard/ArticleCard'
import './Articles.scss' import './Articles.scss'
const Articles = () => { const Articles = ({ data: { edges } }) => {
return ( return (
<div className="articles"> <div className="articles">
<div className="articles-content"> <div className="articles-content">
{[1,2,3,4].map(e => <ArticleCard key={e} />)} {edges.map(({ node }, e) => <ArticleCard key={e} data={node.frontmatter} />)}
</div> </div>
</div> </div>
) )

View File

@ -1,15 +1,26 @@
import React from 'react'; import React from 'react';
import { useLocation } from '@reach/router'
import useMoreArticlesQuery from '../../../hooks/useMoreArticlesQuery'
import ArticleCard from '../ArticleCard/ArticleCard' import ArticleCard from '../ArticleCard/ArticleCard'
import './MoreArticles.scss' import './MoreArticles.scss'
const MoreArticles = () => { const MoreArticles = () => {
const { edges } = useMoreArticlesQuery()
const { pathname } = useLocation()
const query = pathname.split('/')[pathname.split('/').length - 1]
return ( return (
<div className="more-articles"> <div className="more-articles">
<div className="more-articles__heading"> <div className="more-articles__heading">
<h2>Вам также может понравится...</h2> <h2>Вам также может понравится...</h2>
</div> </div>
<div className="more-articles__content"> <div className="more-articles__content">
{[1,2,3,4].map(e => <ArticleCard key={e} />)} {edges.map(({ node }, e) => {
if (node.frontmatter.slug !== query) {
return <ArticleCard key={e} data={node.frontmatter} />
}
return null
})}
</div> </div>
</div> </div>
) )

View File

@ -0,0 +1,24 @@
import { useStaticQuery, graphql } from 'gatsby'
const useMoreArticlesQuery = () => {
const { allMarkdownRemark: { edges } } = useStaticQuery(graphql`
{
allMarkdownRemark(filter: {frontmatter: {templateKey: {eq: "article"}}}, limit: 4) {
edges {
node {
frontmatter {
slug
title
category
tags
description
}
}
}
}
}
`)
return { edges }
}
export default useMoreArticlesQuery

View File

@ -6,7 +6,7 @@ import Articles from '../components/Articles/Articles'
import Offers from '../components/Offers/Offers' import Offers from '../components/Offers/Offers'
import Newsletter from '../components/Newsletter/Newsletter' import Newsletter from '../components/Newsletter/Newsletter'
const ArticlesPage = () => { const ArticlesPage = ({ data: { allMarkdownRemark: edges } }) => {
return ( return (
<Layout> <Layout>
<SEO title='Статьи' /> <SEO title='Статьи' />
@ -59,7 +59,7 @@ const ArticlesPage = () => {
</div> </div>
<div className="row"> <div className="row">
<div className="col-md-9 col-xs-12"> <div className="col-md-9 col-xs-12">
<Articles /> <Articles data={edges} />
<Newsletter /> <Newsletter />
</div> </div>
<div className="col-md-3 col-xs-12"> <div className="col-md-3 col-xs-12">
@ -72,4 +72,22 @@ const ArticlesPage = () => {
) )
} }
export const query = graphql`
{
allMarkdownRemark(filter: {frontmatter: {templateKey: {eq: "article"}}}) {
edges {
node {
frontmatter {
slug
title
category
tags
description
}
}
}
}
}
`
export default ArticlesPage export default ArticlesPage

View File

@ -9,7 +9,7 @@ import Newsletter from '../components/Newsletter/Newsletter'
import ArrowNext from '../images/arrow-next.svg' import ArrowNext from '../images/arrow-next.svg'
const IndexPage = () => { const IndexPage = ({ data: { allMarkdownRemark: edges } }) => {
return ( return (
<Layout> <Layout>
<SEO /> <SEO />
@ -28,7 +28,7 @@ const IndexPage = () => {
</div> </div>
<div className="row"> <div className="row">
<div className="col-md-9 col-xs-12"> <div className="col-md-9 col-xs-12">
<Articles /> <Articles data={edges} />
<Newsletter /> <Newsletter />
</div> </div>
<div className="col-md-3 col-xs-12"> <div className="col-md-3 col-xs-12">
@ -41,4 +41,22 @@ const IndexPage = () => {
) )
} }
export const query = graphql`
{
allMarkdownRemark(filter: {frontmatter: {templateKey: {eq: "article"}}}) {
edges {
node {
frontmatter {
slug
title
category
tags
description
}
}
}
}
}
`
export default IndexPage export default IndexPage

View File

@ -9,7 +9,7 @@ import { graphql } from "gatsby"
export default function Template ({ data }) { export default function Template ({ data }) {
const { markdownRemark } = data const { markdownRemark } = data
const { frontmatter, html } = markdownRemark const { frontmatter, html } = markdownRemark
console.log(markdownRemark.frontmatter)
return ( return (
<Layout> <Layout>
<main> <main>