Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 61 lines 1.6 kB view raw
1import { PERMISSIONS } from "@hey/data/constants"; 2import { type GroupFragment, useGroupStatsQuery } from "@hey/indexer"; 3import { useState } from "react"; 4import Members from "@/components/Shared/Modal/Members"; 5import GraphStatsShimmer from "@/components/Shared/Shimmer/GraphStatsShimmer"; 6import { Modal } from "@/components/Shared/UI"; 7import humanize from "@/helpers/humanize"; 8import { useAccountStore } from "@/store/persisted/useAccountStore"; 9 10interface MembersCountProps { 11 group: GroupFragment; 12} 13 14const MembersCount = ({ group }: MembersCountProps) => { 15 const { currentAccount } = useAccountStore(); 16 const [showMembersModal, setShowMembersModal] = useState(false); 17 const hideCount = Object.values( 18 currentAccount?.isStaff ? [] : PERMISSIONS 19 ).includes(group.address); 20 21 const { data, loading } = useGroupStatsQuery({ 22 skip: hideCount, 23 variables: { request: { group: group.address } } 24 }); 25 26 if (hideCount) { 27 return null; 28 } 29 30 if (loading) { 31 return <GraphStatsShimmer count={1} />; 32 } 33 34 if (!data) { 35 return null; 36 } 37 38 const stats = data.groupStats; 39 40 return ( 41 <div className="flex gap-8"> 42 <button 43 className="flex gap-x-1" 44 onClick={() => setShowMembersModal(true)} 45 type="button" 46 > 47 <b>{humanize(stats?.totalMembers)}</b> 48 <span className="text-gray-500 dark:text-gray-200">Members</span> 49 </button> 50 <Modal 51 onClose={() => setShowMembersModal(false)} 52 show={showMembersModal} 53 title="Members" 54 > 55 <Members group={group} /> 56 </Modal> 57 </div> 58 ); 59}; 60 61export default MembersCount;