2016-06-03 14:12:56 -07:00
|
|
|
import * as challengeTypes from '../../../utils/challengeTypes';
|
2016-05-10 13:17:57 -07:00
|
|
|
import { createSelector } from 'reselect';
|
|
|
|
|
2016-06-03 14:12:56 -07:00
|
|
|
const viewTypes = {
|
|
|
|
[ challengeTypes.HTML ]: 'classic',
|
|
|
|
[ challengeTypes.JS ]: 'classic',
|
|
|
|
[ challengeTypes.BONFIRE ]: 'classic',
|
|
|
|
[ challengeTypes.ZIPLINE ]: 'project',
|
|
|
|
[ challengeTypes.BASEJUMP ]: 'project',
|
|
|
|
// might not be used anymore
|
|
|
|
[ challengeTypes.OLDVIDEO ]: 'video',
|
|
|
|
// formally hikes
|
|
|
|
[ challengeTypes.VIDEO ]: 'video',
|
|
|
|
[ challengeTypes.STEP ]: 'step'
|
|
|
|
};
|
|
|
|
|
2016-05-10 13:17:57 -07:00
|
|
|
export const challengeSelector = createSelector(
|
|
|
|
state => state.challengesApp.challenge,
|
|
|
|
state => state.entities.challenge,
|
|
|
|
(challengeName, challengeMap) => {
|
|
|
|
if (!challengeName || !challengeMap) {
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
const challenge = challengeMap[challengeName];
|
|
|
|
return {
|
|
|
|
challenge: challenge,
|
2016-06-03 14:12:56 -07:00
|
|
|
viewType: viewTypes[challenge.challengeType] || 'classic',
|
|
|
|
|
|
|
|
showPreview: challenge &&
|
|
|
|
challenge.challengeType === challengeTypes.HTML,
|
|
|
|
|
|
|
|
mode: challenge && challenge.challengeType === challengeTypes.HTML ?
|
2016-05-10 13:17:57 -07:00
|
|
|
'text/html' :
|
|
|
|
'javascript'
|
|
|
|
};
|
|
|
|
}
|
|
|
|
);
|