feat: create mobile curriculum data on build (#45162)

* feat: create mobile curriculum data on build

Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
This commit is contained in:
Sem Bauke
2022-03-01 15:59:15 +01:00
committed by GitHub
parent 86a470ef1a
commit e8ec209431
3 changed files with 51 additions and 1 deletions

1
.gitignore vendored
View File

@ -201,6 +201,7 @@ api-server/lib/*
curriculum/dist curriculum/dist
curriculum/build curriculum/build
client/static/_redirects client/static/_redirects
client/static/mobile
### UI Components ### ### UI Components ###
tools/ui-components/dist tools/ui-components/dist

View File

@ -2,11 +2,18 @@ const fs = require('fs');
const path = require('path'); const path = require('path');
const { getChallengesForLang } = require('../../../curriculum/getChallenges'); const { getChallengesForLang } = require('../../../curriculum/getChallenges');
const { buildMobileCurriculum } = require('./build-mobile-curriculum');
const globalConfigPath = path.resolve(__dirname, '../../../config'); const globalConfigPath = path.resolve(__dirname, '../../../config');
// We are defaulting to English because the ids for the challenges are same // We are defaulting to English because the ids for the challenges are same
// across all languages. // across all languages.
getChallengesForLang('english') getChallengesForLang('english')
.then(result => {
buildMobileCurriculum(result);
return result;
})
.then(JSON.stringify) .then(JSON.stringify)
.then(x => fs.writeFileSync(`${globalConfigPath}/curriculum.json`, x)); .then(json => {
fs.writeFileSync(`${globalConfigPath}/curriculum.json`, json);
});

View File

@ -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)
);
}
};