mirror of
https://github.com/SrIzan10/featheroom.git
synced 2026-06-06 00:56:49 +00:00
feat: get all types of thingies in the board
This commit is contained in:
@@ -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>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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',
|
||||
),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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',
|
||||
],
|
||||
})
|
||||
|
||||
|
||||
41
lib/ui/components/CourseBoard.tsx
Normal file
41
lib/ui/components/CourseBoard.tsx
Normal 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>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user