(sessions)
| 118 | * @returns {Object} - Object with key as the level original id, and value = complete/started/capstone stage last 'completed'. |
| 119 | */ |
| 120 | export const getLevelStatusMap = (sessions) => { |
| 121 | const levelStatusMap = {} |
| 122 | for (const session of sessions) { |
| 123 | const levelOriginal = (session.level || session.get('level') || {}).original |
| 124 | const sessionState = session.state || session.get('state') || {} |
| 125 | const capstoneStage = sessionState.capstoneStage // current capstone stage (undefined if user is on stage 1) |
| 126 | const isLevelAreadyComplete = levelOriginal && (levelStatusMap[levelOriginal] === 'complete' || (capstoneStage && levelStatusMap[levelOriginal] === capstoneStage - 1)) |
| 127 | if (!isLevelAreadyComplete) { // Don't overwrite a complete session with an incomplete one |
| 128 | if (capstoneStage && capstoneStage > 1) { |
| 129 | levelStatusMap[levelOriginal] = capstoneStage - 1 // for levels played in stages (capstone levels), levelStatusMap = last completed stage |
| 130 | } else if (sessionState.complete) { |
| 131 | levelStatusMap[levelOriginal] = 'complete' |
| 132 | } else { |
| 133 | levelStatusMap[levelOriginal] = 'started' // for levels played in stages (capstone levels) as well as normal levels |
| 134 | } |
| 135 | } |
| 136 | } |
| 137 | return levelStatusMap |
| 138 | } |
| 139 | |
| 140 | /** |
| 141 | * Gets the next level original ids for a given level |
no test coverage detected