render upd

This commit is contained in:
Sergey Yarkov 2020-07-14 23:42:24 +03:00
parent cf24c24c36
commit 40607d546c
4 changed files with 17 additions and 13 deletions

View File

@ -3,12 +3,17 @@ import PropTypes from 'prop-types'
import ArticleCard from './ArticleCard/ArticleCard' import ArticleCard from './ArticleCard/ArticleCard'
import Newsletter from '../Newsletter/Newsletter' import Newsletter from '../Newsletter/Newsletter'
const Articles = ({ data: { edges } }) => { const Articles = ({ data: { edges }, limit = 6 }) => {
return ( return (
<> <>
<div className="articles"> <div className="articles">
<div className="articles-content"> <div className="articles-content">
{edges.map(({ node }, e) => <ArticleCard key={e} data={node.frontmatter} />)} {edges.map(({ node }, i) => {
if (i < limit) {
return <ArticleCard key={i} data={node.frontmatter} />
}
return null
})}
</div> </div>
</div> </div>
<Newsletter /> <Newsletter />

View File

@ -4,7 +4,6 @@ import { Link } from 'gatsby'
const Categories = ({ children, setQuery = () => null }) => { const Categories = ({ children, setQuery = () => null }) => {
const { search, pathname } = useLocation() const { search, pathname } = useLocation()
return ( return (
<div className="articles-categories"> <div className="articles-categories">
<div className={ <div className={

View File

@ -18,8 +18,9 @@ import SearchIcon from '../images/search-icon.svg'
const ArticlesPage = ({ data: { allMarkdownRemark: edges }, }) => { const ArticlesPage = ({ data: { allMarkdownRemark: edges }, }) => {
const { categories } = useCategoriesQuery() const { categories } = useCategoriesQuery()
const { search, pathname } = useLocation() const { search } = useLocation()
let [limit, setLimit] = React.useState(6)
const [filtredArticles, setFiltredArticles] = React.useState([]) const [filtredArticles, setFiltredArticles] = React.useState([])
const [query, setQuery] = React.useState(queryString.parse(search).search || '') const [query, setQuery] = React.useState(queryString.parse(search).search || '')
@ -27,16 +28,16 @@ const ArticlesPage = ({ data: { allMarkdownRemark: edges }, }) => {
const filterArticles = React.useCallback(arr => { const filterArticles = React.useCallback(arr => {
return arr.filter(({ node: { frontmatter } }) => return arr.filter(({ node: { frontmatter } }) =>
frontmatter.title.toLowerCase().includes(query.toLowerCase()) frontmatter.title.toLowerCase().includes(query.toLowerCase().trim())
|| frontmatter.description.toLowerCase().includes(query.toLowerCase()) || frontmatter.description.toLowerCase().includes(query.toLowerCase().trim())
|| frontmatter.category.toLowerCase().includes(query.toLowerCase()) || frontmatter.category.toLowerCase().includes(query.toLowerCase().trim())
|| frontmatter.tags.join('').toLowerCase().includes(query.toLowerCase()) || frontmatter.tags.join('').toLowerCase().includes(query.toLowerCase().trim())
) )
}, [query]) }, [query])
React.useEffect(() => { React.useEffect(() => {
if (query !== '') setFiltredArticles(filterArticles(allArticles.edges)) if (query !== '') setFiltredArticles(filterArticles(allArticles.edges))
}, [setFiltredArticles, filterArticles, allArticles.edges, query, pathname]) }, [setFiltredArticles, filterArticles, allArticles.edges, query])
return ( return (
<Layout> <Layout>
@ -63,8 +64,9 @@ const ArticlesPage = ({ data: { allMarkdownRemark: edges }, }) => {
<Col lg={9} xs={12}> <Col lg={9} xs={12}>
{query && query !== '' {query && query !== ''
? filtredArticles.length > 0 ? <Articles data={{edges: filtredArticles}} /> : null ? filtredArticles.length > 0 ? <Articles data={{edges: filtredArticles}} /> : null
: <Articles data={edges} /> : <Articles data={edges} limit={limit} />
} }
<span onClick={() => setLimit(limit + 2)}>load more</span>
</Col > </Col >
<Col lg={3} xs={12}> <Col lg={3} xs={12}>
<Offers /> <Offers />

View File

@ -6,7 +6,6 @@ import SEO from '../components/SEO/SEO'
import Layout from '../components/Layout/Layout' import Layout from '../components/Layout/Layout'
import Articles from '../components/Articles/Articles' 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 ArrowNext from '../images/arrow-next.svg' import ArrowNext from '../images/arrow-next.svg'
@ -29,7 +28,6 @@ const IndexPage = ({ data: { allMarkdownRemark: edges } }) => {
<Row> <Row>
<Col lg={9} xs={12}> <Col lg={9} xs={12}>
<Articles data={edges} /> <Articles data={edges} />
<Newsletter />
</Col> </Col>
<Col lg={3} xs={12}> <Col lg={3} xs={12}>
<Offers /> <Offers />
@ -43,7 +41,7 @@ const IndexPage = ({ data: { allMarkdownRemark: edges } }) => {
export const query = graphql` export const query = graphql`
{ {
allMarkdownRemark(filter: {frontmatter: {templateKey: {eq: "article"}}}, sort: {order: DESC, fields: frontmatter___date}, limit: 12) { allMarkdownRemark(filter: {frontmatter: {templateKey: {eq: "article"}}}, sort: {order: DESC, fields: frontmatter___date}, limit: 6) {
edges { edges {
node { node {
frontmatter { frontmatter {