mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import { useEffect } from 'react';
|
|
import { create } from 'zustand';
|
|
import { useCommunityStats } from '@bitsocialnet/bitsocial-react-hooks';
|
|
import { useCommunityIdentifier } from './use-community-identifiers';
|
|
|
|
type CommunityStatsState = {
|
|
communityStats: { [communityAddress: string]: any };
|
|
setCommunityStats: (communityAddress: string, stats: any) => void;
|
|
};
|
|
|
|
export const useCommunitiesStatsStore = create<CommunityStatsState>((set) => ({
|
|
communityStats: {},
|
|
setCommunityStats: (communityAddress, stats) =>
|
|
set((state) => ({
|
|
communityStats: { ...state.communityStats, [communityAddress]: stats },
|
|
})),
|
|
}));
|
|
|
|
export const CommunityStatsCollector = ({ communityAddress }: { communityAddress: string }) => {
|
|
const community = useCommunityIdentifier(communityAddress);
|
|
const stats = useCommunityStats(community ? { community } : undefined);
|
|
const setCommunityStats = useCommunitiesStatsStore((state) => state.setCommunityStats);
|
|
|
|
useEffect(() => {
|
|
if (stats && stats.allPostCount !== undefined) {
|
|
setCommunityStats(communityAddress, stats);
|
|
}
|
|
}, [stats, communityAddress, setCommunityStats]);
|
|
|
|
return null;
|
|
};
|
|
|
|
/**
|
|
* Back-compat exports for old naming.
|
|
*/
|
|
export const useSubplebbitsStatsStore = useCommunitiesStatsStore;
|
|
export const SubplebbitStatsCollector = CommunityStatsCollector;
|