mirror of
https://github.com/sergeyyarkov/devthread.ru.git
synced 2026-10-11 18:29:10 +03:00
load more btn
This commit is contained in:
parent
40607d546c
commit
e9d52b1853
@ -3,7 +3,7 @@ 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 }, limit = 6 }) => {
|
const Articles = ({ data: { edges }, limit = 6, setLimit = () => null }) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="articles">
|
<div className="articles">
|
||||||
@ -15,6 +15,12 @@ const Articles = ({ data: { edges }, limit = 6 }) => {
|
|||||||
return null
|
return null
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
<div className="articles-loadMore">
|
||||||
|
{edges.length === limit || edges.length <= limit
|
||||||
|
? null
|
||||||
|
: <button className='btn-loadMore' onClick={() => setLimit(limit + 2)}>Загрузить еще <span role='img' aria-label='load more'>👇</span></button>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Newsletter />
|
<Newsletter />
|
||||||
</>
|
</>
|
||||||
@ -25,6 +31,8 @@ export default Articles
|
|||||||
|
|
||||||
Articles.propTypes = {
|
Articles.propTypes = {
|
||||||
data: PropTypes.shape({
|
data: PropTypes.shape({
|
||||||
edges: PropTypes.array
|
edges: PropTypes.array,
|
||||||
|
limit: PropTypes.number,
|
||||||
|
setLimit: PropTypes.func
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -56,6 +56,10 @@
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 60px;
|
margin-bottom: 60px;
|
||||||
}
|
}
|
||||||
|
& .articles-loadMore {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark {
|
.dark {
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import React from 'react'
|
|||||||
import { navigate } from 'gatsby'
|
import { navigate } from 'gatsby'
|
||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types'
|
||||||
|
|
||||||
const Search = ({ allArticles, filterArticles, articlesLength, resultsLength, query, setQuery, setFiltredArticles }) => {
|
const Search = ({ allArticles, filterArticles, articlesLength, resultsLength, query, setQuery, setFiltredArticles, setLimit }) => {
|
||||||
const handleInput = e => {
|
const handleInput = e => {
|
||||||
const query = e.target.value
|
const query = e.target.value
|
||||||
if (query === '') {
|
if (query === '') {
|
||||||
@ -14,6 +14,7 @@ const Search = ({ allArticles, filterArticles, articlesLength, resultsLength, qu
|
|||||||
navigate(`/articles/?search=${query.trim()}`)
|
navigate(`/articles/?search=${query.trim()}`)
|
||||||
setQuery(query)
|
setQuery(query)
|
||||||
setFiltredArticles(filterArticles(allArticles))
|
setFiltredArticles(filterArticles(allArticles))
|
||||||
|
setLimit(6)
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -53,7 +53,7 @@ const ArticlesPage = ({ data: { allMarkdownRemark: edges }, }) => {
|
|||||||
<Categories setQuery={setQuery}>
|
<Categories setQuery={setQuery}>
|
||||||
{categories.map(({ node }, i) => <CategoryItem key={i} title={node.frontmatter.title} />)}
|
{categories.map(({ node }, i) => <CategoryItem key={i} title={node.frontmatter.title} />)}
|
||||||
</Categories>
|
</Categories>
|
||||||
<Search allArticles={allArticles.edges} filterArticles={filterArticles} articlesLength={edges.edges.length} resultsLength={filtredArticles.length} query={query} setQuery={setQuery} setFiltredArticles={setFiltredArticles} />
|
<Search allArticles={allArticles.edges} filterArticles={filterArticles} articlesLength={edges.edges.length} resultsLength={filtredArticles.length} query={query} setQuery={setQuery} setFiltredArticles={setFiltredArticles} setLimit={setLimit} />
|
||||||
<div className="articles-info">
|
<div className="articles-info">
|
||||||
{query && query !== '' ? filtredArticles.length === 0 ? <p><SearchIcon /> Ничего не найдено</p> : null : null}
|
{query && query !== '' ? filtredArticles.length === 0 ? <p><SearchIcon /> Ничего не найдено</p> : null : null}
|
||||||
</div>
|
</div>
|
||||||
@ -63,10 +63,9 @@ const ArticlesPage = ({ data: { allMarkdownRemark: edges }, }) => {
|
|||||||
<Row>
|
<Row>
|
||||||
<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}} limit={limit} setLimit={setLimit} /> : null
|
||||||
: <Articles data={edges} limit={limit} />
|
: <Articles data={edges} limit={limit} setLimit={setLimit} />
|
||||||
}
|
}
|
||||||
<span onClick={() => setLimit(limit + 2)}>load more</span>
|
|
||||||
</Col >
|
</Col >
|
||||||
<Col lg={3} xs={12}>
|
<Col lg={3} xs={12}>
|
||||||
<Offers />
|
<Offers />
|
||||||
|
|||||||
@ -22,6 +22,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.btn-loadMore {
|
||||||
|
background: none;
|
||||||
|
text-decoration: underline;
|
||||||
|
color: #6ab0f3;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
.tag-item {
|
.tag-item {
|
||||||
margin-bottom: 13px;
|
margin-bottom: 13px;
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
|
|||||||
@ -15,6 +15,8 @@ const CategoryPage = ({ data: { allMarkdownRemark: edges }, pageContext: { title
|
|||||||
const { categories } = useCategoriesQuery()
|
const { categories } = useCategoriesQuery()
|
||||||
const { siteMetadata: { siteUrl } } = useSiteMetadataQuery()
|
const { siteMetadata: { siteUrl } } = useSiteMetadataQuery()
|
||||||
|
|
||||||
|
let [limit, setLimit] = React.useState(6)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Layout>
|
||||||
<SEO title={title} canonical={`${siteUrl}/articles`} />
|
<SEO title={title} canonical={`${siteUrl}/articles`} />
|
||||||
@ -30,14 +32,14 @@ const CategoryPage = ({ data: { allMarkdownRemark: edges }, pageContext: { title
|
|||||||
{categories.map(({ node }, i) => <CategoryItem key={i} title={node.frontmatter.title} />)}
|
{categories.map(({ node }, i) => <CategoryItem key={i} title={node.frontmatter.title} />)}
|
||||||
</Categories>
|
</Categories>
|
||||||
<div className="articles-info">
|
<div className="articles-info">
|
||||||
<p>Показано {edges.edges.length} из категории "{title}"</p>
|
<p>Найдено {edges.edges.length} из категории "{title}"</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
<Col lg={9} xs={12}>
|
<Col lg={9} xs={12}>
|
||||||
<Articles data={edges} />
|
<Articles data={edges} limit={limit} setLimit={setLimit} />
|
||||||
</Col>
|
</Col>
|
||||||
<Col lg={3} xs={12}>
|
<Col lg={3} xs={12}>
|
||||||
<Offers />
|
<Offers />
|
||||||
|
|||||||
@ -15,6 +15,8 @@ const TagPage = ({ data: { allMarkdownRemark: edges }, pageContext: { title } })
|
|||||||
const { categories } = useCategoriesQuery()
|
const { categories } = useCategoriesQuery()
|
||||||
const { siteMetadata: { siteUrl } } = useSiteMetadataQuery()
|
const { siteMetadata: { siteUrl } } = useSiteMetadataQuery()
|
||||||
|
|
||||||
|
let [limit, setLimit] = React.useState(6)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Layout>
|
||||||
<SEO title={title} canonical={`${siteUrl}/articles`} />
|
<SEO title={title} canonical={`${siteUrl}/articles`} />
|
||||||
@ -30,14 +32,14 @@ const TagPage = ({ data: { allMarkdownRemark: edges }, pageContext: { title } })
|
|||||||
{categories.map(({ node }, i) => <CategoryItem key={i} title={node.frontmatter.title} />)}
|
{categories.map(({ node }, i) => <CategoryItem key={i} title={node.frontmatter.title} />)}
|
||||||
</Categories>
|
</Categories>
|
||||||
<div className="articles-info">
|
<div className="articles-info">
|
||||||
<p>Показано {edges.edges.length} по тегу "{title}"</p>
|
<p>Найдено {edges.edges.length} по тегу "{title}"</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
<Row>
|
<Row>
|
||||||
<Col lg={9} xs={12}>
|
<Col lg={9} xs={12}>
|
||||||
<Articles data={edges} />
|
<Articles data={edges} limit={limit} setLimit={setLimit} />
|
||||||
</Col>
|
</Col>
|
||||||
<Col lg={3} xs={12}>
|
<Col lg={3} xs={12}>
|
||||||
<Offers />
|
<Offers />
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user