mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
5chan boards enforce requirePostLinkIsMedia/requirePostLink at subplebbit level; client-side filter redundant.
59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import { useMemo } from 'react';
|
|
import { useAccountComments, Subplebbit } from '@plebbit/plebbit-react-hooks';
|
|
const useCatalogFeedRows = (columnCount: number, feed: any, isFeedLoaded: boolean, subplebbit: Subplebbit) => {
|
|
const { address } = subplebbit || {};
|
|
|
|
const { accountComments } = useAccountComments();
|
|
|
|
const feedWithFakePostsOnTop = useMemo(() => {
|
|
if (!isFeedLoaded) {
|
|
return []; // prevent temporary/mock posts from appearing while the actual feed is loading
|
|
}
|
|
|
|
const _feed = [...feed];
|
|
|
|
// show account comments instantly in the feed once published (cid defined), instead of waiting for the feed to update
|
|
const filteredComments = accountComments.filter((comment) => {
|
|
const { cid, deleted, postCid, removed, state, subplebbitAddress, timestamp } = comment || {};
|
|
|
|
return (
|
|
!deleted &&
|
|
!removed &&
|
|
timestamp > Date.now() - 60 * 60 * 1000 &&
|
|
state === 'succeeded' &&
|
|
cid &&
|
|
cid === postCid &&
|
|
subplebbitAddress === address &&
|
|
!_feed.some((feedItem) => feedItem.cid === cid)
|
|
);
|
|
});
|
|
|
|
// show newest account comment at the top of the feed but after pinned posts
|
|
const lastPinnedIndex = _feed.map((post) => post.pinned).lastIndexOf(true);
|
|
if (filteredComments.length > 0) {
|
|
_feed.splice(
|
|
lastPinnedIndex + 1,
|
|
0,
|
|
...filteredComments.map((comment) => ({
|
|
...comment,
|
|
isAccountComment: true,
|
|
})),
|
|
);
|
|
}
|
|
|
|
return _feed;
|
|
}, [accountComments, feed, address, isFeedLoaded]);
|
|
|
|
const rows = useMemo(() => {
|
|
const rows = [];
|
|
for (let i = 0; i < feedWithFakePostsOnTop.length; i += columnCount) {
|
|
rows.push(feedWithFakePostsOnTop.slice(i, i + columnCount));
|
|
}
|
|
return rows;
|
|
}, [feedWithFakePostsOnTop, columnCount]);
|
|
|
|
return rows;
|
|
};
|
|
|
|
export default useCatalogFeedRows;
|