diff --git a/web/pages/home/index.tsx b/web/pages/home/index.tsx
index 9e5314a5..7b3f79d2 100644
--- a/web/pages/home/index.tsx
+++ b/web/pages/home/index.tsx
@@ -21,7 +21,6 @@ import { Group } from 'common/group'
import { SiteLink } from 'web/components/site-link'
import { usePrivateUser, useUser } from 'web/hooks/use-user'
import {
- useMemberGroupIds,
useMemberGroupsSubscription,
useTrendingGroups,
} from 'web/hooks/use-group'
@@ -80,6 +79,7 @@ export default function Home() {
const dailyTrendingContracts = useContractsByDailyScoreNotBetOn(user?.id, 6)
const groups = useMemberGroupsSubscription(user)
+ const trendingGroups = useTrendingGroups()
const groupContracts = useContractsByDailyScoreGroups(
groups?.map((g) => g.slug)
)
@@ -113,16 +113,26 @@ export default function Home() {
) : (
<>
- {renderSections(user, sections, {
+ {renderSections(sections, {
score: trendingContracts,
newest: newContracts,
'daily-trending': dailyTrendingContracts,
'daily-movers': dailyMovers,
})}
-
-
- {renderGroupSections(user, groups, groupContracts)}
+ {groups && groupContracts && trendingGroups.length > 0 ? (
+ <>
+
+ {renderGroupSections(user, groups, groupContracts)}
+ >
+ ) : (
+
+ )}
>
)}
@@ -171,7 +181,6 @@ export const getHomeItems = (sections: string[]) => {
}
function renderSections(
- user: User,
sections: { id: string; label: string }[],
sectionContracts: {
'daily-movers': CPMMBinaryContract[]
@@ -192,7 +201,7 @@ function renderSections(
}
if (id === 'daily-trending') {
return (
-
)
})}
@@ -216,13 +225,9 @@ function renderSections(
function renderGroupSections(
user: User,
- groups: Group[] | undefined,
- groupContracts: Dictionary | undefined
+ groups: Group[],
+ groupContracts: Dictionary
) {
- if (!groups || !groupContracts) {
- return
- }
-
const filteredGroups = groups.filter((g) => groupContracts[g.slug])
const orderedGroups = sortBy(filteredGroups, (g) =>
// Sort by sum of top two daily scores.
@@ -285,7 +290,7 @@ function SectionHeader(props: {
)
}
-function ContractsSection(props: {
+function SearchSection(props: {
label: string
contracts: CPMMBinaryContract[]
sort: Sort
@@ -406,15 +411,16 @@ function DailyStats(props: {
}
export function TrendingGroupsSection(props: {
- user: User | null | undefined
+ user: User
+ myGroups: Group[]
+ trendingGroups: Group[]
className?: string
}) {
- const { user, className } = props
- const memberGroupIds = useMemberGroupIds(user) || []
+ const { user, myGroups, trendingGroups, className } = props
- const groups = useTrendingGroups().filter(
- (g) => !memberGroupIds.includes(g.id)
- )
+ const myGroupIds = new Set(myGroups.map((g) => g.id))
+
+ const groups = trendingGroups.filter((g) => !myGroupIds.has(g.id))
const count = 20
const chosenGroups = groups.slice(0, count)
@@ -433,10 +439,9 @@ export function TrendingGroupsSection(props: {
{
- if (!user) return
- if (memberGroupIds.includes(g.id)) leaveGroup(g, user?.id)
+ if (myGroupIds.has(g.id)) leaveGroup(g, user.id)
else {
const homeSections = (user.homeSections ?? [])
.filter((id) => id !== g.id)