diff --git a/apps/web/components/Objects/Courses/CourseActions/CoursesActions.tsx b/apps/web/components/Objects/Courses/CourseActions/CoursesActions.tsx index 72b6df2e..62d0293e 100644 --- a/apps/web/components/Objects/Courses/CourseActions/CoursesActions.tsx +++ b/apps/web/components/Objects/Courses/CourseActions/CoursesActions.tsx @@ -193,7 +193,7 @@ const Actions = ({ courseuuid, orgslug, course }: CourseActionsProps) => { const [isContributeLoading, setIsContributeLoading] = useState(false) const [isModalOpen, setIsModalOpen] = useState(false) const [hasAccess, setHasAccess] = useState(null) - const { contributorStatus } = useContributorStatus(courseuuid); + const { contributorStatus, refetch } = useContributorStatus(courseuuid); const isStarted = course.trail?.runs?.some( (run) => run.status === 'STATUS_IN_PROGRESS' && run.course_id === course.id @@ -306,6 +306,7 @@ const Actions = ({ courseuuid, orgslug, course }: CourseActionsProps) => { await applyForContributor('course_' + courseuuid, data, session.data?.tokens?.access_token) await revalidateTags(['courses'], orgslug) + await refetch() toast.success('Your application to contribute has been submitted successfully', { id: loadingToast }) } catch (error) { console.error('Failed to apply as contributor:', error) diff --git a/apps/web/hooks/useContributorStatus.ts b/apps/web/hooks/useContributorStatus.ts index a1370ed1..de44d4c6 100644 --- a/apps/web/hooks/useContributorStatus.ts +++ b/apps/web/hooks/useContributorStatus.ts @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect, useCallback } from 'react'; import { getCourseContributors } from '@services/courses/courses'; import { useLHSession } from '@components/Contexts/LHSessionContext'; import toast from 'react-hot-toast'; @@ -10,42 +10,42 @@ export function useContributorStatus(courseUuid: string) { const [contributorStatus, setContributorStatus] = useState('NONE'); const [isLoading, setIsLoading] = useState(true); - useEffect(() => { - const checkContributorStatus = async () => { - if (!session.data?.user) { - setIsLoading(false); - return; - } + const checkContributorStatus = useCallback(async () => { + if (!session.data?.user) { + setIsLoading(false); + return; + } - try { - const response = await getCourseContributors( - 'course_' + courseUuid, - session.data?.tokens?.access_token + try { + const response = await getCourseContributors( + 'course_' + courseUuid, + session.data?.tokens?.access_token + ); + + if (response && response.data) { + const currentUser = response.data.find( + (contributor: any) => contributor.user_id === session.data.user.id ); - if (response && response.data) { - const currentUser = response.data.find( - (contributor: any) => contributor.user_id === session.data.user.id - ); - - if (currentUser) { - setContributorStatus(currentUser.authorship_status as ContributorStatus); - } else { - setContributorStatus('NONE'); - } + if (currentUser) { + setContributorStatus(currentUser.authorship_status as ContributorStatus); + } else { + setContributorStatus('NONE'); } - } catch (error) { - console.error('Failed to check contributor status:', error); - toast.error('Failed to check contributor status'); - } finally { - setIsLoading(false); } - }; - - if (session.data?.user) { - checkContributorStatus(); + } catch (error) { + console.error('Failed to check contributor status:', error); + toast.error('Failed to check contributor status'); + } finally { + setIsLoading(false); } }, [courseUuid, session.data?.tokens?.access_token, session.data?.user]); - return { contributorStatus, isLoading }; + useEffect(() => { + if (session.data?.user) { + checkContributorStatus(); + } + }, [checkContributorStatus, session.data?.user]); + + return { contributorStatus, isLoading, refetch: checkContributorStatus }; } \ No newline at end of file