import React, { useEffect, useMemo, useState } from 'react'; import { Helmet } from 'react-helmet-async'; import { Link, useNavigate, useParams } from 'react-router-dom'; import { Tooltip } from 'react-tooltip'; import { useAccount, useAccountComment, useSubplebbit } from '@plebbit/plebbit-react-hooks'; import useGeneralStore from '../../hooks/stores/useGeneralStore'; import { Container, NavBar, Header, Break, PostForm, BoardForm } from '../styled/views/Board.styled'; import { ReplyFormLink, TopBar, BottomBar } from '../styled/views/Thread.styled'; import BoardStats from '../BoardStats'; import ImageBanner from '../ImageBanner'; import Post from '../Post'; import PostLoader from '../PostLoader'; import CreateBoardModal from '../modals/CreateBoardModal'; import SettingsModal from '../modals/SettingsModal'; import getCommentMediaInfo from '../../utils/getCommentMediaInfo'; import getDate from '../../utils/getDate'; import handleImageClick from '../../utils/handleImageClick'; import handleQuoteClick from '../../utils/handleQuoteClick'; import handleStyleChange from '../../utils/handleStyleChange'; import useError from '../../hooks/useError'; import useStateString from '../../hooks/useStateString'; import packageJson from '../../../package.json'; const {version} = packageJson; const Pending = () => { const { defaultSubplebbits, isSettingsOpen, setIsSettingsOpen, selectedAddress, setSelectedAddress, selectedStyle, setSelectedTitle, showPostFormLink } = useGeneralStore(state => state); const { index } = useParams(); const account = useAccount(); const comment = useAccountComment({commentIndex: index}); const [, setNewErrorMessage] = useError(); const [isThumbnailClicked, setIsThumbnailClicked] = useState({}); const [isMobileThumbnailClicked, setIsMobileThumbnailClicked] = useState({}); const [isCreateBoardOpen, setIsCreateBoardOpen] = useState(false); const subplebbitAddress = comment?.subplebbitAddress; const subplebbit = useSubplebbit({subplebbitAddress}) const selectedTitle = subplebbit?.title; const handleThumbnailClick = (index, isMobile=false) => { if (isMobile) { setIsMobileThumbnailClicked(prevState => ({ ...prevState, [index]: !prevState[index], })); } else { setIsThumbnailClicked(prevState => ({ ...prevState, [index]: !prevState[index], })); } }; useEffect(() => { setSelectedAddress(comment?.subplebbitAddress); }, [comment, setSelectedAddress]); const stateString = useStateString(comment) const errorString = useMemo(() => { if (comment?.state === 'failed') { let errorString = 'Failed fetching pending thread. Pending index: ' + index; if (comment.error) { errorString += `: ${comment.error.toString().slice(0, 300)}` } return errorString } }, [comment?.state, comment?.error, index]) useEffect(() => { if (errorString) { setNewErrorMessage(errorString); } }, [errorString, setNewErrorMessage]); const [visible] = useState(true); const navigate = useNavigate(); const [commentMediaInfo, setCommentMediaInfo] = useState(null); const fallbackImgUrl = "assets/filedeleted-res.gif"; // mobile navbar board select functionality const handleSelectChange = (event) => { const selected = event.target.value; if (selected === 'subscriptions') { navigate(`/p/subscriptions`); return; } else if (selected === 'all') { navigate(`/p/all`); return; } const selectedTitle = defaultSubplebbits.find((subplebbit) => subplebbit.address === selected).title; setSelectedTitle(selectedTitle); setSelectedAddress(selected); navigate(`/p/${selected}`); }; // get comment media info useEffect(() => { if (comment && comment.link) { const mediaInfo = getCommentMediaInfo(comment); setCommentMediaInfo(mediaInfo); } }, [comment]); return ( <> {`plebchan - Pending Thread #${parseInt(index) + 1}`} setIsCreateBoardOpen(false)} /> setIsSettingsOpen(false)} /> <> [ window.scrollTo(0, 0)}>All  /  window.scrollTo(0, 0)}>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} ))} ] [ { window.electron && window.electron.isElectron ? ( setIsCreateBoardOpen(true) ) : ( alert( 'You can create a board with the desktop version of plebchan:\nhttps://github.com/plebbit/plebchan/releases/latest\n\nIf you are comfortable with the command line, use plebbit-cli:\nhttps://github.com/plebbit/plebbit-cli\n\n' ) ) } }>Create Board ] [ setIsSettingsOpen(true)}>Settings ] [ Home ]
Board     alert( 'You can create a board with the desktop version of plebchan:\nhttps://github.com/plebbit/plebchan/releases/latest\n\nIf you are comfortable with the command line, use plebbit-cli:\nhttps://github.com/plebbit/plebbit-cli\n\n' ) }>Create Board
setIsSettingsOpen(true)}>Settings   {handleStyleChange({target: {value: "Yotsuba"}}); window.scrollTo(0, 0);}}>Home
 
 
<>
<>
{selectedTitle ?? null}
{selectedAddress ? ("p/" + selectedAddress) : null}
{window.scrollTo(0, 0)}}>Return
{window.scrollTo(0, 0)}}>Catalog
 

Style:   [ {window.scrollTo(0, 0)}}>Return ] [ {window.scrollTo(0, 0)}}>Catalog ] {stateString}
{comment !== undefined ? ( <>
{commentMediaInfo?.url ? (
Link:  { commentMediaInfo?.url.length > 30 ? commentMediaInfo?.url.slice(0, 30) + "(...)" : commentMediaInfo?.url } ({commentMediaInfo?.type === "iframe" ? "video" : commentMediaInfo?.type}) {isThumbnailClicked[index] ? ( -[ {handleThumbnailClick(index)}}>Close ] ) : null}
{commentMediaInfo?.type === 'iframe' && (
{(isThumbnailClicked[index] || !commentMediaInfo.thumbnail) && commentMediaInfo.embedUrl ? (