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)];
							 | 
						||
| 
								 | 
							
								      }, []);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								}
							 |