(position: T.Position, level: TT.Level, levels: TT.Level[])
| 2 | import * as TT from 'typings/tutorial' |
| 3 | |
| 4 | const getNext = (position: T.Position, level: TT.Level, levels: TT.Level[]) => { |
| 5 | const steps: TT.Step[] = level.steps |
| 6 | |
| 7 | if (steps.length && position.stepId) { |
| 8 | const stepIndex = steps.findIndex((s: TT.Step) => s.id === position.stepId) |
| 9 | const finalStep = stepIndex > -1 && stepIndex === steps.length - 1 |
| 10 | const hasNextStep = !finalStep |
| 11 | |
| 12 | // NEXT STEP |
| 13 | if (hasNextStep) { |
| 14 | const nextPosition = { |
| 15 | levelId: position.levelId, |
| 16 | stepId: steps[stepIndex + (position.complete ? 1 : 0)].id, |
| 17 | complete: false, |
| 18 | } |
| 19 | return { type: 'NEXT_STEP', payload: nextPosition } |
| 20 | } |
| 21 | } |
| 22 | |
| 23 | const levelIndex = levels.findIndex((l: TT.Level) => l.id === position.levelId) |
| 24 | const finalLevel = levelIndex > -1 && levelIndex === levels.length - 1 |
| 25 | const hasNextLevel = !finalLevel |
| 26 | |
| 27 | // NEXT LEVEL |
| 28 | if (hasNextLevel) { |
| 29 | const nextLevel = levels[levelIndex + 1] |
| 30 | const nextPosition = { |
| 31 | levelId: nextLevel.id, |
| 32 | stepId: nextLevel.steps.length ? nextLevel.steps[0].id : null, |
| 33 | complete: false, |
| 34 | } |
| 35 | return { type: 'NEXT_LEVEL', payload: nextPosition } |
| 36 | } |
| 37 | |
| 38 | // COMPLETED |
| 39 | return { type: 'COMPLETED' } |
| 40 | } |
| 41 | |
| 42 | export default getNext |
no outgoing calls
no test coverage detected