feat(client): ts-migrate client/utils/** (#42823)

* rename js files

* update imports and references

* migrate build-challenges

* migrate challenge-types

* migrate utils/index

* migrate state-management

* install @types/psl for tags

* migrate tags

* migrate tags.test

* migrate challenge-page-creator

* migrate utils/gatsby/index

* migrate layout-selector

* migrate layout-selector.test

* revert challenge-types

Curriculum can't handle TS or modules

* convert arrow functions

* revert build-challenges

* revert utils/gatsby/index

* revert challenge-page-creator

* revert challenge-types reference

* Delete state-management

Deleted in #42960

* Disable render-result-naming-convention (for now)

* update layout-selector.test comment

* reorder imports in build-challenges

* change ts-ignore to ts-expect-error
This commit is contained in:
awu43
2021-08-09 01:30:31 -07:00
committed by GitHub
parent fcadd534e7
commit dd5d2919be
23 changed files with 116 additions and 83 deletions

View File

@ -0,0 +1,126 @@
const path = require('path');
const { dasherize } = require('../../../utils/slugs');
const { viewTypes } = require('../challenge-types');
const backend = path.resolve(
__dirname,
'../../src/templates/Challenges/projects/backend/Show.tsx'
);
const classic = path.resolve(
__dirname,
'../../src/templates/Challenges/classic/Show.tsx'
);
const frontend = path.resolve(
__dirname,
'../../src/templates/Challenges/projects/frontend/Show.tsx'
);
const codeally = path.resolve(
__dirname,
'../../src/templates/Challenges/codeally/show.tsx'
);
const intro = path.resolve(
__dirname,
'../../src/templates/Introduction/Intro.js'
);
const superBlockIntro = path.resolve(
__dirname,
'../../src/templates/Introduction/SuperBlockIntro.js'
);
const video = path.resolve(
__dirname,
'../../src/templates/Challenges/video/Show.tsx'
);
const views = {
backend,
classic,
modern: classic,
frontend,
video,
codeally
// quiz: Quiz
};
function getNextChallengePath(_node, index, nodeArray) {
const next = nodeArray[index + 1];
return next ? next.node.fields.slug : '/learn';
}
function getPrevChallengePath(_node, index, nodeArray) {
const prev = nodeArray[index - 1];
return prev ? prev.node.fields.slug : '/learn';
}
function getTemplateComponent(challengeType) {
return views[viewTypes[challengeType]];
}
exports.createChallengePages = function (createPage) {
return function ({ node }, index, thisArray) {
const {
superBlock,
block,
fields: { slug },
required = [],
template,
challengeType,
id
} = node;
// TODO: challengeType === 7 and isPrivate are the same, right? If so, we
// should remove one of them.
createPage({
path: slug,
component: getTemplateComponent(challengeType),
context: {
challengeMeta: {
superBlock,
block,
template,
required,
nextChallengePath: getNextChallengePath(node, index, thisArray),
prevChallengePath: getPrevChallengePath(node, index, thisArray),
id
},
slug
}
});
};
};
exports.createBlockIntroPages = function (createPage) {
return function (edge) {
const {
fields: { slug },
frontmatter: { block }
} = edge.node;
createPage({
path: slug,
component: intro,
context: {
block: dasherize(block),
slug
}
});
};
};
exports.createSuperBlockIntroPages = function (createPage) {
return function (edge) {
const {
fields: { slug },
frontmatter: { superBlock }
} = edge.node;
createPage({
path: slug,
component: superBlockIntro,
context: {
superBlock,
slug
}
});
};
};