diff --git a/src/views/subplebbits/subplebbits.tsx b/src/views/subplebbits/subplebbits.tsx
index bc6a3a60..3e77e5d8 100644
--- a/src/views/subplebbits/subplebbits.tsx
+++ b/src/views/subplebbits/subplebbits.tsx
@@ -1,4 +1,4 @@
-import { Fragment, useEffect, useMemo, useState } from 'react';
+import { Fragment, useEffect, useMemo, useState, useRef, useReducer } from 'react';
import { Link, useLocation } from 'react-router-dom';
import { Trans, useTranslation } from 'react-i18next';
import { Subplebbit as SubplebbitType, useAccount, useAccountSubplebbits, useSubplebbits, useSubplebbitStats } from '@plebbit/plebbit-react-hooks';
@@ -315,26 +315,20 @@ const AccountSubplebbits = ({ viewRole }: { viewRole: string }) => {
const SubscriberSubplebbits = () => {
const account = useAccount();
- const { setError } = useErrorStore();
-
- const {
- list: displayedSubscriptions,
- isUnsubscribed,
- handleUnsubscribe,
- } = useDisplayedSubscriptions(() => (account?.subscriptions ? [...account.subscriptions].reverse() : []), [account?.author?.address]);
-
+ const initialSubscriptions = useMemo(() => (account?.subscriptions ? [...account.subscriptions].reverse() : []), [account?.author?.address]);
+ const { list: displayedSubscriptions, isUnsubscribed, handleUnsubscribe } = useDisplayedSubscriptions(() => initialSubscriptions, [account?.author?.address]);
const { subplebbits, error: subplebbitsError } = useSubplebbits({ subplebbitAddresses: displayedSubscriptions });
+ const { setError } = useErrorStore();
useEffect(() => {
setError('SubscriberSubplebbits_useSubplebbits', subplebbitsError);
}, [subplebbitsError, setError]);
return Object.values(subplebbits ?? {})
- .map(
- (subplebbit, index) =>
- subplebbit && (
-
- ),
+ .map((subplebbit, index) =>
+ subplebbit ? (
+
+ ) : null,
)
.filter(Boolean);
};
@@ -372,21 +366,25 @@ const AllAccountSubplebbits = () => {
const { accountSubplebbits, error: accountSubplebbitsError } = useAccountSubplebbits();
const { setError } = useErrorStore();
- const {
- list: displayedAddresses,
- isUnsubscribed,
- handleUnsubscribe,
- } = useDisplayedSubscriptions(() => {
+ const initialAddresses = useMemo(() => {
const accountAddrs = Object.keys(accountSubplebbits);
const subs = account?.subscriptions ? [...account.subscriptions].reverse() : [];
return Array.from(new Set([...accountAddrs, ...subs]));
}, [account?.author?.address]);
+ const unsubscribedRef = useRef>(new Set());
+ const [, forceUpdate] = useReducer((x) => x + 1, 0);
+
+ const handleUnsubscribe = (address: string) => {
+ unsubscribedRef.current.add(address);
+ forceUpdate();
+ };
+
useEffect(() => {
setError('AllAccountSubplebbits_useAccountSubplebbits', accountSubplebbitsError);
}, [accountSubplebbitsError, setError]);
- const { subplebbits, error: subplebbitsError } = useSubplebbits({ subplebbitAddresses: displayedAddresses });
+ const { subplebbits, error: subplebbitsError } = useSubplebbits({ subplebbitAddresses: initialAddresses });
useEffect(() => {
setError('AllAccountSubplebbits_useSubplebbits', subplebbitsError);
@@ -395,7 +393,13 @@ const AllAccountSubplebbits = () => {
return Object.values(subplebbits ?? {})
.map((subplebbit, index) =>
subplebbit ? (
-
+
) : null,
)
.filter(Boolean);