* fix(routes): /map redirects to current challenge * fix(map): Normalize server map building Localize all server code dealing with the map * refactor(server): Remove unused services * feat(Nav): Show Map button when no panes This gives user the ability to quickly return to their challenge using a known feature * fix(server.map): Add caching to nameIdMap Add caching to nameIdMap on the server * fix(services.map): Fix map service Move map building utils to map util. Fix bad import. Normalize challenge lookup
		
			
				
	
	
		
			75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import emptyProtector from '../app/utils/empty-protector';
 | |
| 
 | |
| export function checkMapData(
 | |
|   {
 | |
|     entities: {
 | |
|       challenge,
 | |
|       block,
 | |
|       superBlock
 | |
|     },
 | |
|     result: { superBlocks }
 | |
|   }
 | |
| ) {
 | |
|   if (
 | |
|     !challenge ||
 | |
|     !block ||
 | |
|     !superBlock ||
 | |
|     !superBlocks ||
 | |
|     !superBlocks.length
 | |
|   ) {
 | |
|     throw new Error(
 | |
|       'entities not found, db may not be properly seeded'
 | |
|     );
 | |
|   }
 | |
| }
 | |
| // getFirstChallenge(
 | |
| //   map: {
 | |
| //     entities: { challenge: Object, block: Object, superBlock: Object },
 | |
| //     result: [...superBlockDashedName: String]
 | |
| //   }
 | |
| // ) => Challenge|Void
 | |
| export function getFirstChallenge({
 | |
|   entities: { superBlock, block, challenge },
 | |
|   result: { superBlocks }
 | |
| }) {
 | |
|   return challenge[
 | |
|     emptyProtector(block[
 | |
|       emptyProtector(superBlock[
 | |
|         superBlocks[0]
 | |
|       ]).blocks[0]
 | |
|     ]).challenges[0]
 | |
|   ];
 | |
| }
 | |
| 
 | |
| // let challengeDashedName: String;
 | |
| // createNameIdMap({
 | |
| //  challenge: {
 | |
| //    [...challengeDashedName ]: Challenge
 | |
| // }) => {
 | |
| //   challengeIdToName: {
 | |
| //     [ ...challengeId ]: challengeDashedName
 | |
| //   }
 | |
| //  };
 | |
| export function createNameIdMap({ challenge }) {
 | |
|   return {
 | |
|     challengeIdToName: Object.keys(challenge)
 | |
|       .reduce((map, challengeName) => {
 | |
|         map[challenge[challengeName].id] =
 | |
|           challenge[challengeName].dashedName;
 | |
|         return map;
 | |
|       }, {})
 | |
|   };
 | |
| }
 | |
| // addNameIdMap(
 | |
| //  map: { entities; Object, ...rest }
 | |
| // ) => { ...rest, entities: Object };
 | |
| export function addNameIdMap({ entities, ...rest }) {
 | |
|   return {
 | |
|     ...rest,
 | |
|     entities: {
 | |
|       ...entities,
 | |
|       ...createNameIdMap(entities)
 | |
|     }
 | |
|   };
 | |
| }
 |