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:
1
.gitignore
vendored
1
.gitignore
vendored
@ -201,6 +201,7 @@ api-server/lib/*
|
||||
curriculum/dist
|
||||
curriculum/build
|
||||
client/static/_redirects
|
||||
client/static/mobile
|
||||
|
||||
### UI Components ###
|
||||
tools/ui-components/dist
|
||||
|
@ -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);
|
||||
});
|
||||
|
42
tools/scripts/build/build-mobile-curriculum.js
Normal file
42
tools/scripts/build/build-mobile-curriculum.js
Normal 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)
|
||||
);
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user