const html = 0; const js = 1; const backend = 2; const zipline = 3; const frontEndProject = 3; const backEndProject = 4; const jsProject = 5; const modern = 6; const step = 7; const quiz = 8; const invalid = 9; const pythonProject = 10; const video = 11; const codeAllyPractice = 12; const codeAllyCert = 13; const multifileCertProject = 14; const theOdinProject = 15; const colab = 16; const exam = 17; const msTrophy = 18; const multipleChoice = 19; const python = 20; const dialogue = 21; const fillInTheBlank = 22; const multifilePythonCertProject = 23; const generic = 24; const lab = 25; const jsLab = 26; const pyLab = 27; const dailyChallengeJs = 28; const dailyChallengePy = 29; const examDownload = 30; const review = 31; export const challengeTypes = { html, js, backend, zipline, frontEndProject, backEndProject, pythonProject, jsProject, modern, step, quiz, invalid, video, codeAllyPractice, codeAllyCert, multifileCertProject, theOdinProject, colab, exam, msTrophy, multipleChoice, python, dialogue, fillInTheBlank, multifilePythonCertProject, generic, lab, jsLab, pyLab, dailyChallengeJs, dailyChallengePy, examDownload, review }; export const hasNoSolution = (challengeType: number): boolean => { const noSolutions = [ backend, zipline, frontEndProject, backEndProject, step, quiz, invalid, pythonProject, video, codeAllyPractice, codeAllyCert, theOdinProject, colab, exam, msTrophy, multipleChoice, dialogue, fillInTheBlank, generic, examDownload, review ]; return noSolutions.includes(challengeType); }; // determine the component view for each challenge export const viewTypes = { [html]: 'classic', [js]: 'classic', [jsProject]: 'classic', [frontEndProject]: 'frontend', [backEndProject]: 'backend', [pythonProject]: 'frontend', [modern]: 'modern', [step]: 'step', [quiz]: 'quiz', [backend]: 'backend', [video]: 'generic', [codeAllyPractice]: 'codeAlly', [codeAllyCert]: 'codeAlly', [multifileCertProject]: 'classic', [theOdinProject]: 'generic', [colab]: 'frontend', [exam]: 'exam', [msTrophy]: 'msTrophy', [multipleChoice]: 'generic', [python]: 'modern', [dialogue]: 'generic', [fillInTheBlank]: 'fillInTheBlank', [multifilePythonCertProject]: 'classic', [generic]: 'generic', [lab]: 'classic', [jsLab]: 'classic', [pyLab]: 'classic', [dailyChallengeJs]: 'classic', [dailyChallengePy]: 'classic', [examDownload]: 'examDownload', [review]: 'generic' }; // determine the type of submit function to use for the challenge on completion export const submitTypes = { [html]: 'tests', [js]: 'tests', [jsProject]: 'tests', // requires just a single url // like codepen.com/my-project [frontEndProject]: 'project.frontEnd', // requires two urls // a hosted URL where the app is running live // project code url like GitHub [backEndProject]: 'project.backEnd', [pythonProject]: 'project.backEnd', [step]: 'step', [quiz]: 'tests', [backend]: 'backend', [modern]: 'tests', [video]: 'tests', [codeAllyCert]: 'project.frontEnd', [multifileCertProject]: 'tests', [theOdinProject]: 'tests', [colab]: 'project.backEnd', [exam]: 'exam', [msTrophy]: 'msTrophy', [multipleChoice]: 'tests', [python]: 'tests', [dialogue]: 'tests', [fillInTheBlank]: 'tests', [multifilePythonCertProject]: 'tests', [generic]: 'tests', [lab]: 'tests', [jsLab]: 'tests', [pyLab]: 'tests', [dailyChallengeJs]: 'tests', [dailyChallengePy]: 'tests', [examDownload]: 'examDownload', [review]: 'tests' }; const dailyCodingChallengeTypes = [ challengeTypes.dailyChallengeJs, challengeTypes.dailyChallengePy ]; export const getIsDailyCodingChallenge = (challengeType: number): boolean => dailyCodingChallengeTypes.includes(challengeType); const dailyCodingChallengeLanguages = { [challengeTypes.dailyChallengeJs]: 'javascript', [challengeTypes.dailyChallengePy]: 'python' }; export const getDailyCodingChallengeLanguage = ( challengeType: number ): string | undefined => dailyCodingChallengeLanguages[challengeType];