From de8107372f92082f891ce8e41fe7654ca491e4bb Mon Sep 17 00:00:00 2001 From: "plebeius.eth" Date: Sat, 4 May 2024 22:36:34 +0200 Subject: [PATCH] feat(home): add multisub boards with categories, subscriptions list, moderating boards list --- src/views/home/home.module.css | 2 +- src/views/home/home.tsx | 100 +++++++++++++++++++++++++-------- 2 files changed, 79 insertions(+), 23 deletions(-) diff --git a/src/views/home/home.module.css b/src/views/home/home.module.css index 786b093b..16538986 100644 --- a/src/views/home/home.module.css +++ b/src/views/home/home.module.css @@ -26,7 +26,6 @@ } .boardsBox { - height: 343px; overflow: hidden; } @@ -149,6 +148,7 @@ font-size: 100%; font-weight: 700; text-decoration: underline; + text-transform: capitalize; color: var(--homepage-box-bar-text-color); } diff --git a/src/views/home/home.tsx b/src/views/home/home.tsx index ca66a5b0..177b7ebe 100644 --- a/src/views/home/home.tsx +++ b/src/views/home/home.tsx @@ -2,7 +2,7 @@ import { useEffect, useRef, useState } from 'react'; import styles from './home.module.css'; import { Link, useNavigate } from 'react-router-dom'; import { Trans, useTranslation } from 'react-i18next'; -import { Comment, Subplebbit, useSubplebbits } from '@plebbit/plebbit-react-hooks'; +import { Comment, Subplebbit, useAccount, useAccountSubplebbits, useSubplebbits } from '@plebbit/plebbit-react-hooks'; import packageJson from '../../../package.json'; import useDefaultSubplebbits, { useDefaultSubplebbitAddresses } from '../../hooks/use-default-subplebbits'; import { getCommentMediaInfo, getHasThumbnail } from '../../lib/utils/media-utils'; @@ -69,8 +69,20 @@ const InfoBox = () => { ); }; -const Boards = ({ defaultSubplebbits }: { defaultSubplebbits: any }) => { +const Boards = ({ multisub }: { multisub: Subplebbit[] }) => { const { t } = useTranslation(); + const account = useAccount(); + const subscriptions = account?.subscriptions || []; + const { accountSubplebbits } = useAccountSubplebbits(); + const accountSubplebbitAddresses = Object.keys(accountSubplebbits); + + const plebbitSubs = multisub.filter((sub) => sub.tags.includes('plebbit')); + const interestsSubs = multisub.filter( + (sub) => sub.tags.includes('topic') && !sub.tags.includes('plebbit') && !sub.tags.includes('country') && !sub.tags.includes('international'), + ); + const randomSubs = multisub.filter((sub) => sub.tags.includes('random') && !sub.tags.includes('plebbit')); + const internationalSubs = multisub.filter((sub) => sub.tags.includes('international') || sub.tags.includes('country')); + const projectsSubs = multisub.filter((sub) => sub.tags.includes('project') && !sub.tags.includes('plebbit') && !sub.tags.includes('topic')); return (
@@ -80,28 +92,72 @@ const Boards = ({ defaultSubplebbits }: { defaultSubplebbits: any }) => {
-

Default SFW

+

Plebbit

- {defaultSubplebbits - .filter((subplebbit: Subplebbit | undefined): subplebbit is Subplebbit => subplebbit !== undefined) - .map((subplebbit: Subplebbit) => { - const address = subplebbit.address; - return ( -
- {address} -
- ); - })} + {plebbitSubs.map((sub) => ( +
+ {sub.title || sub.address} +
+ ))} +
+

Projects

+
+ {projectsSubs.map((sub) => ( +
+ {sub.title || sub.address} +
+ ))}
-

Default NSFW

+

Interests

+
+ {interestsSubs.map((sub) => ( +
+ {sub.title || sub.address} +
+ ))} +
-

Subscriptions

+

Random

+
+ {randomSubs.map((sub) => ( +
+ {sub.title || sub.address} +
+ ))} +
+

International

+
+ {internationalSubs.map((sub) => ( +
+ {sub.title || sub.address} +
+ ))} +
-

Moderating

+
+

Subscriptions

+ {subscriptions.length > 0 + ? subscriptions.map((address: string, index: number) => ( +
+ p/{address} +
+ )) + : 'Not subscribed to any board.'} +
+
+

Moderating

+ {accountSubplebbitAddresses.length > 0 + ? accountSubplebbitAddresses.map((address: string, index: number) => ( +
+ p/{address} +
+ )) + : 'Not moderating any board.'} +
@@ -213,7 +269,7 @@ const PopularThreads = ({ subplebbits }: { subplebbits: any }) => { ); }; -const Stats = ({ subplebbitAddresses }: { subplebbitAddresses: string[] }) => { +const Stats = ({ multisub, subplebbitAddresses }: { multisub: any; subplebbitAddresses: string[] }) => { const { t } = useTranslation(); // const { totalPosts, currentUsers, boardsTracked } = useSubplebbitStats(subplebbitAddresses); @@ -227,13 +283,13 @@ const Stats = ({ subplebbitAddresses }: { subplebbitAddresses: string[] }) => {

{t('stats_info')}

*/}
- Total Posts:{' '} + Total Posts: x,xxx,xxx
- Current Users:{' '} + Current Users: xxx,xxx
- Boards Tracked:{' '} + Boards Tracked: {multisub.length}
@@ -342,9 +398,9 @@ const Home = () => { - + - +