import React, { Fragment, useEffect, useState } from 'react'; import { Helmet } from 'react-helmet-async'; import InfiniteScroll from 'react-infinite-scroller'; import { Link, useNavigate } from 'react-router-dom'; import { Tooltip } from 'react-tooltip'; import { useAccount, useFeed } from '@plebbit/plebbit-react-hooks'; import { debounce } from 'lodash'; import useGeneralStore from '../../hooks/stores/useGeneralStore'; import { Container, NavBar, Header, Break} from '../styled/Board.styled'; import { Threads } from '../styled/Catalog.styled'; import { TopBar, Footer } from '../styled/Thread.styled'; import ImageBanner from '../ImageBanner'; import OfflineIndicator from '../OfflineIndicator'; import SettingsModal from '../SettingsModal'; import getCommentMediaInfo from '../../utils/getCommentMediaInfo'; import handleStyleChange from '../../utils/handleStyleChange'; import useError from '../../hooks/useError'; import packageJson from '../../../package.json' const {version} = packageJson const SubscriptionsCatalog = () => { const { defaultSubplebbits, isSettingsOpen, setIsSettingsOpen, selectedAddress, setSelectedAddress, selectedStyle, setSelectedThread, setSelectedTitle, } = useGeneralStore(state => state); const account = useAccount(); const navigate = useNavigate(); const [prevScrollPos, setPrevScrollPos] = useState(0); const [visible, setVisible] = useState(true); const { feed, hasMore, loadMore } = useFeed({subplebbitAddresses: account?.subscriptions, sortType: 'new'}); const [setSelectedFeed] = useState(feed.sort((a, b) => b.timestamp - a.timestamp)); const [errorMessage] = useState(null); useError(errorMessage, [errorMessage]); // mobile navbar scroll effect useEffect(() => { const debouncedHandleScroll = debounce(() => { const currentScrollPos = window.pageYOffset; setVisible(prevScrollPos > currentScrollPos || currentScrollPos < 10); setPrevScrollPos(currentScrollPos); }, 50); window.addEventListener('scroll', debouncedHandleScroll); return () => window.removeEventListener('scroll', debouncedHandleScroll); }, [prevScrollPos, visible]); const tryLoadMore = async () => { try {loadMore()} catch (e) {await new Promise(resolve => setTimeout(resolve, 1000))} }; // desktop navbar board select functionality const handleClickTitle = (title, address) => { setSelectedTitle(title); setSelectedAddress(address); setSelectedFeed(feed.filter(feed => feed.title === title)); }; // mobile navbar board select functionality const handleSelectChange = (event) => { const selected = event.target.value; if (selected === 'subscriptions') { return; } const selectedTitle = defaultSubplebbits.find((subplebbit) => subplebbit.address === selected).title; setSelectedTitle(selectedTitle); setSelectedAddress(selected); navigate(`/p/${selected}`); }; return ( <> Subscriptions - Catalog - plebchan setIsSettingsOpen(false)} /> <> [ Subscriptions ] [ {defaultSubplebbits.map((subplebbit, index) => ( {index === 0 ? null : "\u00a0"} { setSelectedTitle(subplebbit.title); setSelectedAddress(subplebbit.address); }} >{subplebbit.title ? subplebbit.title : subplebbit.address} {index !== defaultSubplebbits.length - 1 ? " /" : null} ))} ] [ ] [ setIsSettingsOpen(true)}>Settings ] [ handleStyleChange({target: {value: "Yotsuba"}} )}>Home ]
Board    
setIsSettingsOpen(true)}>Settings   handleStyleChange({target: {value: "Yotsuba"}} )}>Home
 
 
<>
<>
Subscriptions
{feed.length < 1 ? (
You haven't subscribed to any board yet.
) : (
You have subscribed to {account.subscriptions.length} board{account.subscriptions.length > 1 ? "s" : null}.
)}

Style:  
[ Return ]
Return

{ feed.length < 1 ? ( null ) : ( {feed.map((thread, index) => { const commentMediaInfo = getCommentMediaInfo(thread); const fallbackImgUrl = "assets/filedeleted-res.gif"; return ( {setSelectedThread(thread.cid); window.scrollTo(0, 0);}}>
{commentMediaInfo?.url ? ( {commentMediaInfo?.type === "webpage" ? ( thread.thumbnailUrl ? ( {commentMediaInfo.type} { e.target.src = fallbackImgUrl e.target.onerror = null; }} /> ) : null ) : null} {commentMediaInfo?.type === "image" ? ( {commentMediaInfo.type} { e.target.src = fallbackImgUrl e.target.onerror = null;}} /> ) : null} {commentMediaInfo?.type === "video" ? ( ) : null}
{(commentMediaInfo && ( commentMediaInfo.type === 'image' || commentMediaInfo.type === 'video' || (commentMediaInfo.type === 'webpage' && commentMediaInfo.thumbnail))) ? ( // */ ) : ( // */ ) }
R: {thread.replyCount}
{thread.title ? `${thread.title}` : null} {thread.content ? `: ${thread.content}` : null}
)})}
)}
); } export default SubscriptionsCatalog;