import { useState, useEffect } from 'react'; import { Link, useLocation } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import Plebbit from '@plebbit/plebbit-js/dist/browser/index.js'; import { Subplebbit, useSubplebbit, useSubplebbitStats } from '@plebbit/plebbit-react-hooks'; import { useDefaultSubplebbitsState } from '../../../hooks/use-default-subplebbits'; import { useDefaultSubplebbitTags } from '../../../hooks/use-default-subplebbits-tags'; import useIsMobile from '../../../hooks/use-is-mobile'; import useIsSubplebbitOffline from '../../../hooks/use-is-subplebbit-offline'; import LoadingEllipsis from '../../../components/loading-ellipsis'; import Tooltip from '../../../components/tooltip'; import styles from '../home.module.css'; import { nsfwTags } from '../home'; const Board = ({ subplebbit, isMobile }: { subplebbit: Subplebbit; isMobile: boolean }) => { const { t } = useTranslation(); const { address, tags } = subplebbit || {}; const nsfwTag = tags?.find((tag: string) => nsfwTags.includes(tag)); let stats = useSubplebbitStats({ subplebbitAddress: address }); const subplebbitData = useSubplebbit({ subplebbitAddress: address }); const { isOffline, isOnlineStatusLoading, offlineIconClass, offlineTitle } = useIsSubplebbitOffline(subplebbitData); const displayAddress = address && Plebbit.getShortAddress(address); const showOfflineIcon = address && (isOffline || isOnlineStatusLoading); const title = subplebbitData?.title || (subplebbitData?.updatedAt ? (displayAddress.endsWith('.eth') || displayAddress.endsWith('.sol') ? displayAddress.slice(0, -4) : displayAddress) : '?'); return (
{displayAddress}
{nsfwTag && ({t(nsfwTag)})}
{showOfflineIcon && (
{title}
{stats.hourPostCount ?? '?'}
{tags.map((tag: string, index: number) => ( {tag} {index < tags.length - 1 && ', '} ))}
| {t('board')} | {t('title')} | {!isMobile && (PPH | )} {!isMobile &&{t('tags')} | }
|---|