@@ -4,6 +4,7 @@ import * as api from './api';
44import {
55 addCompletionStatus ,
66 addLearningPaths ,
7+ calculateCompletionStatus ,
78 createCompletionsMap ,
89 createCourseToLearningPathsMap ,
910} from './dataUtils' ;
@@ -19,6 +20,7 @@ export const QUERY_KEYS = {
1920 COURSE_COMPLETION : ( courseId ) => [ 'courseCompletion' , courseId ] ,
2021 COURSE_ENROLLMENT_STATUS : ( courseId ) => [ 'courseEnrollmentStatus' , courseId ] ,
2122 ORGANIZATIONS : [ 'organizations' ] ,
23+ CREDENTIAL_CONFIGURATION : ( learningContextKey ) => [ 'credentialConfiguration' , learningContextKey ] ,
2224} ;
2325
2426// Stale time configurations
@@ -33,6 +35,7 @@ export const STALE_TIMES = {
3335 COMPLETIONS : 60 * 1000 , // 1 minute
3436
3537 ORGANIZATIONS : 60 * 60 * 1000 , // 1 hour
38+ CREDENTIALS : 5 * 60 * 1000 , // 5 minutes
3639} ;
3740
3841// Learning Paths Queries
@@ -72,22 +75,8 @@ export const useLearningPaths = () => {
7275 return sum + ( completion ?. percent ?? 0 ) ;
7376 } , 0 ) ;
7477
75- const progress = totalCompletion / totalCourses ;
76- const requiredCompletion = lp . requiredCompletion || 0 ;
77-
78- let status = 'In progress' ;
79- if ( progress === 0 ) {
80- status = 'Not started' ;
81- } else if ( progress >= requiredCompletion ) {
82- status = 'Completed' ;
83- }
84-
85- let percent = 0 ;
86- if ( requiredCompletion > 0 ) {
87- percent = Math . round ( ( progress / requiredCompletion ) * 100 ) ;
88- } else {
89- percent = Math . round ( progress * 100 ) ;
90- }
78+ const percent = totalCompletion / totalCourses ;
79+ const { status } = calculateCompletionStatus ( percent ) ;
9180
9281 let minDate = null ;
9382 let maxDate = null ;
@@ -292,6 +281,12 @@ export const useCourseDetail = (courseKey) => {
292281 queryFn : api . fetchAllCourseCompletions ,
293282 } ) ;
294283
284+ queryClient . prefetchQuery ( {
285+ queryKey : QUERY_KEYS . CREDENTIAL_CONFIGURATION ( courseKey ) ,
286+ queryFn : ( ) => api . fetchCredentialConfiguration ( courseKey ) ,
287+ staleTime : STALE_TIMES . CREDENTIALS ,
288+ } ) ;
289+
295290 const completions = queryClient . getQueryData ( QUERY_KEYS . COURSE_COMPLETIONS ) || { } ;
296291 const completionsMap = createCompletionsMap ( completions ) ;
297292
@@ -324,6 +319,12 @@ export const usePrefetchCourseDetail = (courseId) => {
324319 queryFn : ( ) => api . fetchCourseCompletion ( courseId ) ,
325320 staleTime : STALE_TIMES . COMPLETIONS ,
326321 } ) ;
322+
323+ queryClient . prefetchQuery ( {
324+ queryKey : QUERY_KEYS . CREDENTIAL_CONFIGURATION ( courseId ) ,
325+ queryFn : ( ) => api . fetchCredentialConfiguration ( courseId ) ,
326+ staleTime : STALE_TIMES . CREDENTIALS ,
327+ } ) ;
327328 } catch ( error ) {
328329 // eslint-disable-next-line no-console
329330 console . error ( 'Error prefetching course data:' , error ) ;
@@ -399,3 +400,10 @@ export const useOrganizations = () => useQuery({
399400 } ,
400401 staleTime : STALE_TIMES . ORGANIZATIONS ,
401402} ) ;
403+
404+ export const useCredentialConfiguration = ( learningContextKey ) => useQuery ( {
405+ queryKey : QUERY_KEYS . CREDENTIAL_CONFIGURATION ( learningContextKey ) ,
406+ queryFn : ( ) => api . fetchCredentialConfiguration ( learningContextKey ) ,
407+ enabled : ! ! learningContextKey ,
408+ staleTime : STALE_TIMES . CREDENTIALS ,
409+ } ) ;
0 commit comments