import { useEffect, useState, FormEvent } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { useSubplebbit } from '@plebbit/plebbit-react-hooks'; import { Footer, HomeLogo } from '../home'; import { useDirectories, DirectoryCommunity } from '../../hooks/use-directories'; import { getSubplebbitAddress, getBoardPath } from '../../lib/utils/route-utils'; import Markdown from '../../components/markdown'; import styles from './rules.module.css'; const getBoardShortCode = (title?: string): string => { if (!title) return ''; const match = title.match(/^\/([^/]+)\//); return match ? match[1] : ''; }; const getBoardName = (title?: string): string => { if (!title) return ''; const match = title.match(/^\/[^/]+\/\s*-\s*(.+)$/); return match ? match[1] : title; }; const BoardRulesDisplay = ({ subplebbitAddress, directories }: { subplebbitAddress: string; directories: DirectoryCommunity[] }) => { const subplebbit = useSubplebbit({ subplebbitAddress }); const { rules, state, title, shortAddress } = subplebbit || {}; let loadingText: string | null = null; if (!subplebbit) { loadingText = 'connecting...'; } else { switch (state) { case 'fetching-ipns': case 'fetching-ipfs': loadingText = 'loading...'; break; case 'failed': loadingText = 'failed to load'; break; case 'succeeded': loadingText = null; break; default: loadingText = state ? `${state}...` : 'loading...'; } } const isLoaded = state === 'succeeded'; const defaultSub = directories.find((sub) => sub.address === subplebbitAddress); let displayTitle: string; if (defaultSub?.title) { const shortCode = getBoardShortCode(defaultSub.title); const boardName = getBoardName(defaultSub.title); displayTitle = `Rules for: /${shortCode}/ - ${boardName}`; } else if (title) { const shortCode = getBoardShortCode(title); const boardName = getBoardName(title); if (shortCode && boardName && boardName !== title) { displayTitle = `Rules for: /${shortCode}/ - ${boardName}`; } else { displayTitle = `Rules for: ${shortAddress || subplebbitAddress}`; } } else { displayTitle = `Rules for: ${shortAddress || subplebbitAddress}`; } return (
{loadingText}
) : rules && rules.length > 0 ? (This board has no rules set by its owner.
)}