feat: get all types of thingies in the board

This commit is contained in:
2024-11-03 22:18:09 +01:00
parent 72a1570c55
commit 0ec42cf848
4 changed files with 94 additions and 2 deletions

View File

@@ -1,4 +1,5 @@
import { useCourse } from '@/lib/clients/classroom'
import CourseBoard from '@/lib/ui/components/CourseBoard'
import Loading from '@/lib/ui/components/Loading'
import { useLocalSearchParams } from 'expo-router'
import { Surface, Text } from 'react-native-paper'
@@ -14,7 +15,7 @@ export default function Courses() {
return (
<Surface className="flex-1">
<Text>hi this is class with name {course?.name}</Text>
<CourseBoard />
</Surface>
)
}

View File

@@ -23,9 +23,11 @@ const BASE_URL = 'https://classroom.googleapis.com'
async function fetchApi<T>(
endpoint: string,
insideKey?: string,
options?: RequestInit,
): Promise<T> {
const token = (await GoogleSignin.getTokens()).accessToken
//console.log(token)
const response = await fetch(`${BASE_URL}${endpoint}`, {
...options,
headers: {
@@ -39,7 +41,8 @@ async function fetchApi<T>(
throw { message: response.statusText, status: response.status } as ApiError
}
return response.json()
const data = await response.json()
return insideKey ? data[insideKey] : data
}
// Query Keys
@@ -47,6 +50,13 @@ export const keys = {
courses: {
all: ['courses'],
one: (id: string) => ['courses', id],
announcement: (courseId: string) => ['courses', courseId, 'announcements'],
courseWork: (courseId: string) => ['courses', courseId, 'courseWork'],
courseWorkMaterials: (courseId: string) => [
'courses',
courseId,
'courseWorkMaterials',
],
},
}
@@ -65,3 +75,36 @@ export function useCourse(id: string) {
queryFn: () => fetchApi<classroom_v1.Schema$Course>(`/v1/courses/${id}`),
})
}
export function useAnnouncements(courseId: string) {
return useQuery({
queryKey: keys.courses.announcement(courseId),
queryFn: () =>
fetchApi<classroom_v1.Schema$Announcement[]>(
`/v1/courses/${courseId}/announcements`,
'announcements',
),
})
}
export function useCourseWork(courseId: string) {
return useQuery({
queryKey: keys.courses.courseWork(courseId),
queryFn: () =>
fetchApi<classroom_v1.Schema$CourseWork[]>(
`/v1/courses/${courseId}/courseWork`,
'courseWork',
),
})
}
export function useCourseWorkMaterials(courseId: string) {
return useQuery({
queryKey: keys.courses.courseWorkMaterials(courseId),
queryFn: () =>
fetchApi<classroom_v1.Schema$CourseWorkMaterial[]>(
`/v1/courses/${courseId}/courseWorkMaterials`,
'courseWorkMaterial',
),
})
}

View File

@@ -27,6 +27,13 @@ export function AuthProvider({ children }: AuthProviderProps) {
'https://www.googleapis.com/auth/classroom.coursework.students',
'https://www.googleapis.com/auth/classroom.coursework.students.readonly',
'https://www.googleapis.com/auth/classroom.coursework.me.readonly',
'https://www.googleapis.com/auth/classroom.profile.emails',
'https://www.googleapis.com/auth/classroom.profile.photos',
'https://www.googleapis.com/auth/classroom.announcements',
'https://www.googleapis.com/auth/classroom.announcements.readonly',
'https://www.googleapis.com/auth/classroom.courseworkmaterials',
'https://www.googleapis.com/auth/classroom.courseworkmaterials.readonly',
'https://www.googleapis.com/auth/classroom.push-notifications',
],
})

View File

@@ -0,0 +1,41 @@
import {
useAnnouncements,
useCourseWork,
useCourseWorkMaterials,
} from '@/lib/clients/classroom'
import { useLocalSearchParams } from 'expo-router'
import Loading from './Loading'
import { Surface, Text } from 'react-native-paper'
import { useEffect } from 'react'
export default function CourseBoard() {
const { id } = useLocalSearchParams() as { id: string }
const { data: announcement, isLoading: annIsLoading } = useAnnouncements(id)
const { data: courseWork, isLoading: cwIsLoading } = useCourseWork(id)
const { data: courseWorkMaterial, isLoading: cwmIsLoading } =
useCourseWorkMaterials(id)
useEffect(() => {
console.log('ann', announcement)
console.log('cw', courseWork)
console.log('cwm', courseWorkMaterial)
}, [announcement, courseWork, courseWorkMaterial])
if (annIsLoading || cwIsLoading || cwmIsLoading) {
return <Loading />
}
return (
<Surface className="flex-1">
<Text>Announcements</Text>
{announcement?.map((a) => <Text key={a.id}>{a.text}</Text>)}
<Text>Course Work</Text>
{courseWork &&
courseWork.map((cw) => <Text key={cw.id}>{cw.title}</Text>)}
<Text>Course Work Material</Text>
{courseWorkMaterial &&
courseWorkMaterial.map((cwm) => <Text key={cwm.id}>{cwm.title}</Text>)}
</Surface>
)
}