basic verification of team member in team
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
export default function BackgroundLayout({ children }) {
|
export default function BackgroundLayout({ children }) {
|
||||||
return (
|
return (
|
||||||
<div id="bg">
|
<div id="bg" className="text-white w-screen h-screen">
|
||||||
{children}
|
{children}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,12 +1,88 @@
|
|||||||
|
import { GetServerSidePropsContext, GetServerSidePropsResult } from 'next'
|
||||||
import { useRouter } from 'next/router'
|
import { useRouter } from 'next/router'
|
||||||
|
import { useEffect, useState } from 'react'
|
||||||
|
import BackgroundLayout from '../../components/Layouts/BackgroundLayout'
|
||||||
|
import { useAuth } from '../../contexts/authContext'
|
||||||
|
import { Team } from '../../models/team'
|
||||||
|
import { TeamMemberStatus } from '../../models/teamMember'
|
||||||
|
import TeamService from '../../services/teamService'
|
||||||
|
|
||||||
export default function Team() {
|
const teamService = new TeamService()
|
||||||
|
|
||||||
|
export default function TeamDashboard() {
|
||||||
|
const { currUser } = useAuth()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const { teamid } = router.query
|
const { teamid } = router.query
|
||||||
|
|
||||||
// check if the team is a valid team route and show the dashboard for the team
|
const [loading, setLoading] = useState<Boolean>(true)
|
||||||
|
const [team, setTeam] = useState<Team>(null)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
(async function() {
|
||||||
|
try {
|
||||||
|
// if not authenticated, take user to the login
|
||||||
|
if (!currUser) {
|
||||||
|
console.log('not authenticated...routing from dashboard to teams home')
|
||||||
|
router.push('/teams/login')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if the team is a valid team and that user is in it
|
||||||
|
if (typeof teamid === "string") {
|
||||||
|
const returnedTeam = await teamService.getTeam(teamid)
|
||||||
|
const returnedTeamMember = await teamService.getTeamMember(teamid, currUser.uid)
|
||||||
|
|
||||||
|
console.log(returnedTeam)
|
||||||
|
console.log(returnedTeamMember)
|
||||||
|
|
||||||
|
// if there is no such team OR
|
||||||
|
// if you are not a member of this team, then get out of here
|
||||||
|
if (!returnedTeam || !returnedTeamMember || returnedTeamMember.status == TeamMemberStatus.deleted) {
|
||||||
|
console.log('no team exists, or am not activated in it')
|
||||||
|
// router.push('/teams')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// if I am new to the team but I was invited, and this is my first time, then activate me into the team
|
||||||
|
// and proceed with showing the dashboard stuff
|
||||||
|
|
||||||
|
} else {
|
||||||
|
console.log('not a proper query with teamid')
|
||||||
|
router.push('/teams')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} catch(error) {
|
||||||
|
console.log(error)
|
||||||
|
router.push('/teams/login')
|
||||||
|
}
|
||||||
|
|
||||||
|
setLoading(false)
|
||||||
|
})();
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
if (loading) {
|
||||||
|
return (
|
||||||
|
<div>loading</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span>the team is {teamid}</span>
|
<BackgroundLayout>
|
||||||
|
the team is {teamid}
|
||||||
|
|
||||||
|
|
||||||
|
</BackgroundLayout>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getServerSideProps(context: GetServerSidePropsContext) {
|
||||||
|
// basic check if this team exists
|
||||||
|
|
||||||
|
// todo check if authenticated
|
||||||
|
|
||||||
|
// todo check if this user is in this team
|
||||||
|
|
||||||
|
return {
|
||||||
|
props: {},
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,7 +22,7 @@ export default function CreateTeam() {
|
|||||||
// if not authenticated, take user to the login
|
// if not authenticated, take user to the login
|
||||||
if (!currUser) {
|
if (!currUser) {
|
||||||
console.log('not authenticated...routing from dashboard to teams home')
|
console.log('not authenticated...routing from dashboard to teams home')
|
||||||
// router.push('/teams/login')
|
router.push('/teams/login')
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo if user is in a team already, notify them to make sure
|
// todo if user is in a team already, notify them to make sure
|
||||||
@@ -32,9 +32,9 @@ export default function CreateTeam() {
|
|||||||
console.log(error)
|
console.log(error)
|
||||||
router.push('/teams/login')
|
router.push('/teams/login')
|
||||||
}
|
}
|
||||||
})();
|
|
||||||
|
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
|
})();
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
async function handleSubmit(e) {
|
async function handleSubmit(e) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { addDoc, collection, doc, DocumentReference, Firestore, getFirestore, serverTimestamp } from 'firebase/firestore'
|
import { addDoc, collection, doc, DocumentReference, Firestore, getDoc, getDocs, getFirestore, orderBy, query, serverTimestamp, where } from 'firebase/firestore'
|
||||||
import { Team } from '../models/team'
|
import { Team } from '../models/team'
|
||||||
import { TeamMember, TeamMemberRole, TeamMemberStatus } from '../models/teamMember'
|
import { TeamMember, TeamMemberRole, TeamMemberStatus } from '../models/teamMember'
|
||||||
import { Collections } from './collections'
|
import { Collections } from './collections'
|
||||||
@@ -30,4 +30,46 @@ export default class TeamService implements IService {
|
|||||||
|
|
||||||
return teamDocRef.id
|
return teamDocRef.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getTeam(teamId: string): Promise<Team | null> {
|
||||||
|
const docRef = doc(this.db, Collections.teams, teamId);
|
||||||
|
const docSnap = await getDoc(docRef);
|
||||||
|
|
||||||
|
if (docSnap.exists()) {
|
||||||
|
console.log('got team data')
|
||||||
|
let team: Team = docSnap.data() as Team
|
||||||
|
return team
|
||||||
|
} else {
|
||||||
|
// doc.data() will be undefined in this case
|
||||||
|
console.log("team not found!");
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getTeamMember(teamId: string, userId: string): Promise<TeamMember | null> {
|
||||||
|
const q = query(
|
||||||
|
collection(this.db, Collections.teamMembers),
|
||||||
|
where("teamId", "==", teamId),
|
||||||
|
where("userId", "==", userId)
|
||||||
|
)
|
||||||
|
|
||||||
|
const querySnapshot = await getDocs(q);
|
||||||
|
|
||||||
|
if (querySnapshot.size > 1) {
|
||||||
|
console.log('there are multiple teammembers for this user...error in teamservice')
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(querySnapshot)
|
||||||
|
|
||||||
|
var teamMember: TeamMember | null = null
|
||||||
|
querySnapshot.forEach((doc) => {
|
||||||
|
// doc.data() is never undefined for query doc snapshots
|
||||||
|
// get the first one and just return...shouldn't be more
|
||||||
|
console.log('got teammember data')
|
||||||
|
teamMember = doc.data() as TeamMember
|
||||||
|
});
|
||||||
|
|
||||||
|
return teamMember
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user