From 62417720160ec6bdb1d5874bfe0d5169a6a2f9e0 Mon Sep 17 00:00:00 2001 From: "plebeius.eth" Date: Tue, 25 Jul 2023 21:10:22 +0200 Subject: [PATCH] implement VirtuosoGrid in catalog views --- .../styled/views/Catalog.styled.jsx | 9 +- src/components/views/AllCatalog.jsx | 42 +- src/components/views/Catalog.jsx | 647 +++++++++--------- src/components/views/SubscriptionsCatalog.jsx | 44 +- 4 files changed, 385 insertions(+), 357 deletions(-) diff --git a/src/components/styled/views/Catalog.styled.jsx b/src/components/styled/views/Catalog.styled.jsx index ab2545db..6ed6b9e2 100644 --- a/src/components/styled/views/Catalog.styled.jsx +++ b/src/components/styled/views/Catalog.styled.jsx @@ -1,5 +1,12 @@ import styled from 'styled-components'; +export const GridContainer = styled.div` + display: flex; + flex-wrap: wrap; + justify-content: center; + width: 100%; +`; + export const Threads = styled.div` padding: 20px 0; text-align: center; @@ -7,7 +14,7 @@ export const Threads = styled.div` .thread { width: 180px; - max-height: 320px; + height: 320px; vertical-align: top; display: inline-block; word-wrap: break-word; diff --git a/src/components/views/AllCatalog.jsx b/src/components/views/AllCatalog.jsx index b939b271..76fc0cff 100755 --- a/src/components/views/AllCatalog.jsx +++ b/src/components/views/AllCatalog.jsx @@ -1,14 +1,14 @@ import React, { useCallback, useEffect, useRef, useState } from 'react'; import { createPortal } from 'react-dom'; import { Helmet } from 'react-helmet-async'; -import InfiniteScroll from 'react-infinite-scroller'; import { Link, useNavigate} from 'react-router-dom'; import { confirmAlert } from 'react-confirm-alert'; import { Tooltip } from 'react-tooltip'; +import { VirtuosoGrid } from 'react-virtuoso'; import { useAccount, useFeed, usePublishCommentEdit, useSubplebbits } from '@plebbit/plebbit-react-hooks'; import { debounce } from 'lodash'; import { Container, NavBar, Header, Break, PostMenu, BoardForm } from '../styled/views/Board.styled'; -import { Threads, PostMenuCatalog } from '../styled/views/Catalog.styled'; +import { Threads, PostMenuCatalog, GridContainer } from '../styled/views/Catalog.styled'; import { TopBar, Footer, AuthorDeleteAlert } from '../styled/views/Thread.styled'; import CatalogLoader from '../CatalogLoader'; import EditModal from '../modals/EditModal'; @@ -74,7 +74,7 @@ const AllCatalog = () => { const [isCreateBoardOpen, setIsCreateBoardOpen] = useState(false); const addresses = defaultSubplebbits.map(subplebbit => subplebbit.address); - const { feed, hasMore, loadMore } = useFeed({subplebbitAddresses: addresses, sortType: 'active'}); + const { feed, loadMore } = useFeed({subplebbitAddresses: addresses, sortType: 'active'}); const {subplebbits} = useSubplebbits({subplebbitAddresses: addresses, sortType: 'active'}); const [selectedFeed, setSelectedFeed] = useState(feed.sort((a, b) => b.timestamp - a.timestamp)); @@ -467,18 +467,18 @@ const AllCatalog = () => { - {feed ? ( - - {feed.map((thread, index) => { - const commentMediaInfo = getCommentMediaInfo(thread); - const fallbackImgUrl = "assets/filedeleted-res.gif"; - const isModerator = moderatorPermissions[thread.subplebbitAddress]; - const linkCount = countLinks(thread); - return ( + {feed.length > 1 ? ( + { + const thread = feed[index]; + const commentMediaInfo = getCommentMediaInfo(thread); + const fallbackImgUrl = "assets/filedeleted-res.gif"; + const isModerator = moderatorPermissions[thread.subplebbitAddress]; + const linkCount = countLinks(thread); + return (
{setIsHoveringOnThread(thread.cid)}} onMouseLeave={() => {setIsHoveringOnThread('')}}> @@ -662,11 +662,13 @@ const AllCatalog = () => {
- )})} -
- ) : ( - - )} + ) + }} + endReached={tryLoadMore} + useWindowScroll={true} + components={{List: GridContainer}} + /> + ) : ()}