Auth user server-side on groups page
This commit is contained in:
parent
c74d972caf
commit
25a0276bf7
|
@ -8,7 +8,6 @@ import { Row } from 'web/components/layout/row'
|
|||
import { Page } from 'web/components/page'
|
||||
import { Title } from 'web/components/title'
|
||||
import { useGroups, useMemberGroupIds } from 'web/hooks/use-group'
|
||||
import { useUser } from 'web/hooks/use-user'
|
||||
import { groupPath, listAllGroups } from 'web/lib/firebase/groups'
|
||||
import { getUser, User } from 'web/lib/firebase/users'
|
||||
import { Tabs } from 'web/components/layout/tabs'
|
||||
|
@ -18,14 +17,15 @@ import { Avatar } from 'web/components/avatar'
|
|||
import { JoinOrLeaveGroupButton } from 'web/components/groups/groups-button'
|
||||
import { searchInAny } from 'common/util/parse'
|
||||
import { SEO } from 'web/components/SEO'
|
||||
import { GetServerSideProps } from 'next'
|
||||
import { authenticateOnServer } from 'web/lib/firebase/server-auth'
|
||||
import { useUser } from 'web/hooks/use-user'
|
||||
|
||||
export async function getStaticProps() {
|
||||
export const getServerSideProps: GetServerSideProps = async (ctx) => {
|
||||
const creds = await authenticateOnServer(ctx)
|
||||
const serverUser = creds ? await getUser(creds.uid) : null
|
||||
const groups = await listAllGroups().catch((_) => [])
|
||||
|
||||
// mqp: temporary fix to make dev deploy while Ian works on migrating groups away
|
||||
// from the document array member and contracts representation
|
||||
// groups = groups.filter((g) => g.contractIds != null && g.memberIds != null)
|
||||
|
||||
const creators = await Promise.all(
|
||||
groups.map((group) => getUser(group.creatorId))
|
||||
)
|
||||
|
@ -33,25 +33,20 @@ export async function getStaticProps() {
|
|||
creators.map((creator) => [creator.id, creator])
|
||||
)
|
||||
|
||||
return {
|
||||
props: {
|
||||
groups: groups,
|
||||
creatorsDict,
|
||||
},
|
||||
|
||||
revalidate: 60, // regenerate after a minute
|
||||
}
|
||||
return { props: { serverUser, groups: groups, creatorsDict } }
|
||||
}
|
||||
|
||||
export default function Groups(props: {
|
||||
serverUser: User | null
|
||||
groups: Group[]
|
||||
creatorsDict: { [k: string]: User }
|
||||
}) {
|
||||
//TODO: do we really need the creatorsDict?
|
||||
const [creatorsDict, setCreatorsDict] = useState(props.creatorsDict)
|
||||
|
||||
const { serverUser } = props || {}
|
||||
const groups = useGroups() ?? props.groups
|
||||
const user = useUser()
|
||||
const memberGroupIds = useMemberGroupIds(user) || []
|
||||
const memberGroupIds = useMemberGroupIds(serverUser) || []
|
||||
const user = useUser() ?? serverUser
|
||||
|
||||
useEffect(() => {
|
||||
// Load User object for creator of new Groups.
|
||||
|
@ -117,6 +112,39 @@ export default function Groups(props: {
|
|||
<Tabs
|
||||
currentPageForAnalytics={'groups'}
|
||||
tabs={[
|
||||
...(user
|
||||
? [
|
||||
{
|
||||
title: 'My Groups',
|
||||
content: (
|
||||
<Col>
|
||||
<input
|
||||
type="text"
|
||||
onChange={(e) => debouncedQuery(e.target.value)}
|
||||
placeholder="Search your groups"
|
||||
className="input input-bordered mb-4 w-full"
|
||||
/>
|
||||
|
||||
<div className="flex flex-wrap justify-center gap-4">
|
||||
{matchesOrderedByRecentActivity
|
||||
.filter((match) =>
|
||||
memberGroupIds.includes(match.id)
|
||||
)
|
||||
.map((group) => (
|
||||
<GroupCard
|
||||
key={group.id}
|
||||
group={group}
|
||||
creator={creatorsDict[group.creatorId]}
|
||||
user={user}
|
||||
isMember={memberGroupIds.includes(group.id)}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</Col>
|
||||
),
|
||||
},
|
||||
]
|
||||
: []),
|
||||
{
|
||||
title: 'All',
|
||||
content: (
|
||||
|
@ -142,33 +170,6 @@ export default function Groups(props: {
|
|||
</Col>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: 'My Groups',
|
||||
content: (
|
||||
<Col>
|
||||
<input
|
||||
type="text"
|
||||
onChange={(e) => debouncedQuery(e.target.value)}
|
||||
placeholder="Search your groups"
|
||||
className="input input-bordered mb-4 w-full"
|
||||
/>
|
||||
|
||||
<div className="flex flex-wrap justify-center gap-4">
|
||||
{matchesOrderedByRecentActivity
|
||||
.filter((match) => memberGroupIds.includes(match.id))
|
||||
.map((group) => (
|
||||
<GroupCard
|
||||
key={group.id}
|
||||
group={group}
|
||||
creator={creatorsDict[group.creatorId]}
|
||||
user={user}
|
||||
isMember={memberGroupIds.includes(group.id)}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</Col>
|
||||
),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</Col>
|
||||
|
|
Loading…
Reference in New Issue
Block a user