All files / Api/UserActionsWatched/Streams createTimer.js

14.29% Statements 2/14
100% Branches 0/0
0% Functions 0/5
16.67% Lines 2/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 441x                     1x                                                                
import {
    scan,
    merge,
    mapTo,
    first,
    filter,
    takeUntil,
    startWith,
    switchMapTo,
} from 'rxjs/operators';
 
const createTimer = (
    start$,
    pause$,
    stop$,
    interval$,
    maxDurationInSeconds,
) => {
    const initialState = 0;
    const increment = prev => prev + 1;
    const reset = () => initialState;
 
    const shouldFreeze$ = pause$.pipe(merge(stop$));
    const shouldStop$ = stop$.pipe(mapTo(reset));
    const shouldIncrement$ = interval$
        .pipe(
            takeUntil(shouldFreeze$),
            mapTo(increment)
        );
 
    const incrementOrStop = shouldIncrement$.pipe(merge(shouldStop$));
 
    return start$
        .pipe(
            switchMapTo(incrementOrStop),
            startWith(initialState),
            scan((prev, increment) => increment(prev)),
            filter(current => current >= maxDurationInSeconds),
            first()
        );
};
 
export default createTimer;