31 lines
		
	
	
		
			1011 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			31 lines
		
	
	
		
			1011 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | import { flatten } from 'lodash'; | ||
|  | 
 | ||
|  | import { getChallengesForLang } from '../../../curriculum/getChallenges'; | ||
|  | 
 | ||
|  | // TODO: this caching is handy if we want to field requests that need to 'query'
 | ||
|  | // the curriculum, but if we force the client to handle
 | ||
|  | // redirectToCurrentChallenge and, instead, only report the current challenge
 | ||
|  | // id via the user object, then we should *not* store this so it can be garbage
 | ||
|  | // collected.
 | ||
|  | 
 | ||
|  | let curriculum; | ||
|  | export async function getCurriculum() { | ||
|  |   curriculum = curriculum | ||
|  |     ? curriculum | ||
|  |     : getChallengesForLang(process.env.LOCALE); | ||
|  |   return curriculum; | ||
|  | } | ||
|  | 
 | ||
|  | export async function getChallenges() { | ||
|  |   return getCurriculum().then(curriculum => { | ||
|  |     return Object.keys(curriculum) | ||
|  |       .map(key => curriculum[key].blocks) | ||
|  |       .reduce((challengeArray, superBlock) => { | ||
|  |         const challengesForBlock = Object.keys(superBlock).map( | ||
|  |           key => superBlock[key].challenges | ||
|  |         ); | ||
|  |         return [...challengeArray, ...flatten(challengesForBlock)]; | ||
|  |       }, []); | ||
|  |   }); | ||
|  | } |