From 0ec42cf8486895e561eab0e2aa84dc0e110282f0 Mon Sep 17 00:00:00 2001
From: Izan Gil <66965250+SrIzan10@users.noreply.github.com>
Date: Sun, 3 Nov 2024 22:18:09 +0100
Subject: [PATCH] feat: get all types of thingies in the board
---
app/(app)/drawer/courses/[id].tsx | 3 ++-
lib/clients/classroom.ts | 45 ++++++++++++++++++++++++++++++-
lib/providers/auth.tsx | 7 +++++
lib/ui/components/CourseBoard.tsx | 41 ++++++++++++++++++++++++++++
4 files changed, 94 insertions(+), 2 deletions(-)
create mode 100644 lib/ui/components/CourseBoard.tsx
diff --git a/app/(app)/drawer/courses/[id].tsx b/app/(app)/drawer/courses/[id].tsx
index 0dd6842..1a70320 100644
--- a/app/(app)/drawer/courses/[id].tsx
+++ b/app/(app)/drawer/courses/[id].tsx
@@ -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 (
hi this is class with name {course?.name}
-
+
)
}
diff --git a/lib/clients/classroom.ts b/lib/clients/classroom.ts
index 5758e4b..fe576a7 100644
--- a/lib/clients/classroom.ts
+++ b/lib/clients/classroom.ts
@@ -23,9 +23,11 @@ const BASE_URL = 'https://classroom.googleapis.com'
async function fetchApi(
endpoint: string,
+ insideKey?: string,
options?: RequestInit,
): Promise {
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(
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(`/v1/courses/${id}`),
})
}
+
+export function useAnnouncements(courseId: string) {
+ return useQuery({
+ queryKey: keys.courses.announcement(courseId),
+ queryFn: () =>
+ fetchApi(
+ `/v1/courses/${courseId}/announcements`,
+ 'announcements',
+ ),
+ })
+}
+
+export function useCourseWork(courseId: string) {
+ return useQuery({
+ queryKey: keys.courses.courseWork(courseId),
+ queryFn: () =>
+ fetchApi(
+ `/v1/courses/${courseId}/courseWork`,
+ 'courseWork',
+ ),
+ })
+}
+
+export function useCourseWorkMaterials(courseId: string) {
+ return useQuery({
+ queryKey: keys.courses.courseWorkMaterials(courseId),
+ queryFn: () =>
+ fetchApi(
+ `/v1/courses/${courseId}/courseWorkMaterials`,
+ 'courseWorkMaterial',
+ ),
+ })
+}
diff --git a/lib/providers/auth.tsx b/lib/providers/auth.tsx
index 1bc3c4c..dd19b6d 100644
--- a/lib/providers/auth.tsx
+++ b/lib/providers/auth.tsx
@@ -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',
],
})
diff --git a/lib/ui/components/CourseBoard.tsx b/lib/ui/components/CourseBoard.tsx
new file mode 100644
index 0000000..f3269e2
--- /dev/null
+++ b/lib/ui/components/CourseBoard.tsx
@@ -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
+ }
+
+ return (
+
+ Announcements
+ {announcement?.map((a) => {a.text})}
+ Course Work
+ {courseWork &&
+ courseWork.map((cw) => {cw.title})}
+ Course Work Material
+ {courseWorkMaterial &&
+ courseWorkMaterial.map((cwm) => {cwm.title})}
+
+ )
+}