import React, { FC, useEffect } from 'react' import { useSelector, useDispatch } from 'react-redux' import { ApplicationState } from '../../../store' import { actionCreators as contentActionCreators } from '../../../store/reducers/Content' import { actionCreators as loaderActionCreators } from '../../../store/reducers/Loader' import { actionCreators as blogCatalogActionCreators } from '../../../store/reducers/BlogCatalog' import { actionCreators as blogFeaturedActionCreators } from '../../../store/reducers/BlogFeatured' import { actionCreators as blogCategoriesActionCreators } from '../../../store/reducers/BlogCategories' import { Link, useNavigate, useParams } from 'react-router-dom' import { Card, CardBody, CardFooter, CardImg, Col, Container, Row } from 'reactstrap' import { dateFormat, findRoutes } from '../../../functions' import { Categories, Empty, Search } from '../../../components/SideWidgets' import { Pagination } from '../../../components/Pagination' import { BlogItemModel } from '../../../models' import { TitleSectionModel } from '../../../models/pageSections' const TitleSection: FC = (props) => { const { title, text } = props return

{title ? title : ''}

{text ? text : ''}

} interface FeaturedBlog { path?: string, currentPage?: number item?: BlogItemModel, readTime?: string } const FeaturedBlogSection: FC = ({ currentPage = 1, path = "", item = { id: "", slug: "demo-post", badges: [], image: { src: "https://dummyimage.com/850x350/dee2e6/6c757d.jpg", alt: "..." }, title: "", shortText: "", author: { id: "", nickName: "", image: { src: "https://dummyimage.com/40x40/ced4da/6c757d", alt: "..." } }, created: new Date().toString(), tags: [], likes: 0 }, readTime = "" }) => { return {item.badges.map((badge, index) =>
{badge}
)}
{item.title}

{item.author.nickName}
{readTime}
} interface BlogItems { path?: string totalPages?: number, currentPage?: number, items?: BlogItemModel [] } const BlogItemsSection: FC = ({ path = "", totalPages = 1, currentPage = 1, items = [] }) => { const dispatch = useDispatch() const navigate = useNavigate() return <> {items.map((item, index) =>
{dateFormat(item.created)}

{item.title}

{item.shortText}

Read more →
)} { dispatch(blogCatalogActionCreators.requestBlogCatalog({ currentPage: nextPage + "" })) navigate(`${path}/${nextPage}`) } }} /> } const BlogCatalog = () => { const params = useParams() const dispatch = useDispatch() const { content, blogCatalog, blogCategories, blogFeatured } = useSelector((state: ApplicationState) => state) const page = content?.blogCatalog const path = findRoutes(content?.routes, 'BlogCatalog')[0]?.targets[0] useEffect(() => { // dispatch(blogCatalogActionCreators.requestBlogCatalog({ // currentPage: params?.page ? params.page : "1" // })) // dispatch(blogFeaturedActionCreators.requestBlogFeatured()) dispatch(blogCategoriesActionCreators.requestBlogCategories()) }, []) useEffect(() => { // blogCatalog?.isLoading // ? dispatch(loaderActionCreators.show()) // : setTimeout(() => { // dispatch(loaderActionCreators.hide()) // }, 1000) }, [blogCatalog?.isLoading]) const blogItem = blogFeatured?.items[0] const featuredBlog: FeaturedBlog = { path: path, currentPage: blogCatalog?.currentPage, item: blogItem, readTime: page?.featuredBlogSection?.readTime } if(featuredBlog.readTime && blogItem?.created && blogItem?.readTime) featuredBlog.readTime = featuredBlog.readTime?.replace('{date}', dateFormat(blogItem.created)) .replace('{readTime}', `${blogItem.readTime}`) return <> } export { BlogCatalog }