MCPcopy Create free account
hub / github.com/coderoad/coderoad-vscode / getNext

Function getNext

web-app/src/services/state/actions/utils/getNext.ts:4–40  ·  view source on GitHub ↗
(position: T.Position, level: TT.Level, levels: TT.Level[])

Source from the content-addressed store, hash-verified

2import * as TT from 'typings/tutorial'
3
4const 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
42export default getNext

Callers 2

context.tsFile · 0.85
getNext.test.tsFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected