diff --git a/.gitignore b/.gitignore index f799608e92..5949a11c4f 100644 --- a/.gitignore +++ b/.gitignore @@ -201,6 +201,7 @@ api-server/lib/* curriculum/dist curriculum/build client/static/_redirects +client/static/mobile ### UI Components ### tools/ui-components/dist diff --git a/tools/scripts/build/build-curriculum.js b/tools/scripts/build/build-curriculum.js index 7a1c18be94..dcde52afd9 100644 --- a/tools/scripts/build/build-curriculum.js +++ b/tools/scripts/build/build-curriculum.js @@ -2,11 +2,18 @@ const fs = require('fs'); const path = require('path'); const { getChallengesForLang } = require('../../../curriculum/getChallenges'); +const { buildMobileCurriculum } = require('./build-mobile-curriculum'); const globalConfigPath = path.resolve(__dirname, '../../../config'); // We are defaulting to English because the ids for the challenges are same // across all languages. getChallengesForLang('english') + .then(result => { + buildMobileCurriculum(result); + return result; + }) .then(JSON.stringify) - .then(x => fs.writeFileSync(`${globalConfigPath}/curriculum.json`, x)); + .then(json => { + fs.writeFileSync(`${globalConfigPath}/curriculum.json`, json); + }); diff --git a/tools/scripts/build/build-mobile-curriculum.js b/tools/scripts/build/build-mobile-curriculum.js new file mode 100644 index 0000000000..1e1d0d2e0c --- /dev/null +++ b/tools/scripts/build/build-mobile-curriculum.js @@ -0,0 +1,42 @@ +const fs = require('fs'); +const path = require('path'); + +exports.buildMobileCurriculum = function buildMobileCurriculum(json) { + const mobileStaticPath = path.resolve(__dirname, '../../../client/static'); + + fs.mkdirSync(`${mobileStaticPath}/mobile`, { recursive: true }); + writeAndParseCurriculumJson(json); + + function writeAndParseCurriculumJson(curriculum) { + const superBlockKeys = Object.keys(curriculum).filter( + key => key !== '00-certifications' + ); + + writeToFile('availableSuperblocks', { superblocks: superBlockKeys }); + + for (let i = 0; i < superBlockKeys.length; i++) { + const superBlock = {}; + const blockNames = Object.keys(curriculum[superBlockKeys[i]].blocks); + + if (blockNames.length === 0) continue; + + superBlock[superBlockKeys[i]] = {}; + superBlock[superBlockKeys[i]]['blocks'] = {}; + + for (let j = 0; j < blockNames.length; j++) { + superBlock[superBlockKeys[i]]['blocks'][blockNames[j]] = {}; + superBlock[superBlockKeys[i]]['blocks'][blockNames[j]]['challenges'] = + curriculum[superBlockKeys[i]]['blocks'][blockNames[j]]['meta']; + } + + writeToFile(superBlockKeys[i], superBlock); + } + } + + function writeToFile(filename, json) { + fs.writeFileSync( + `${mobileStaticPath}/mobile/${filename}.json`, + JSON.stringify(json, null, 2) + ); + } +};