All files / owid-grapher/grapher/timeline TimelineComponent.stories.tsx

91.97% Statements 126/137
100% Branches 10/10
71.43% Functions 10/14
91.97% Lines 126/137

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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 851x 1x 1x 1x 1x 1x 4x 4x 4x 4x 4x 4x 4x     4x 4x 4x 4x 4x     4x 4x 4x 1x 1x 4x 4x 4x 4x 4x 1x 1x 4x 4x 4x 1x 1x 1x 1x 1x 1x 1x 1x         1x       1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x
import * as React from "react"
import { TimelineComponent } from "./TimelineComponent"
import { action, computed, observable } from "mobx"
import { range } from "../../clientUtils/Util"
import { TimelineController, TimelineManager } from "./TimelineController"
 
class TimelineManagerMock implements TimelineManager {
    @observable isPlaying = false
    @observable userHasSetTimeline = true
    @observable times = range(1900, 2021)
 
    @observable protected _endTime = 2020
    set endHandleTimeBound(num: number) {
        this.updateEndTime(num)
    }
    @computed get endHandleTimeBound(): number {
        return this._endTime
    }
 
    @action.bound updateEndTime(num: number): void {
        this._endTime = num
    }
 
    @observable protected _startTime = 1950
    set startHandleTimeBound(num: number) {
        this.updateStartTime(num)
    }
    @computed get startHandleTimeBound(): number {
        return this._startTime
    }
 
    @action.bound updateStartTime(num: number): void {
        this._startTime = num
    }
 
    @observable disablePlay = false
}
 
export default {
    title: "TimelineControl",
    component: TimelineComponent,
}
 
class SingleYearManager extends TimelineManagerMock {
    @action.bound updateEndTime(num: number): void {
        // Simulate the Map class, which can only have 1 target time
        this._endTime = num
        this._startTime = num
    }
    @action.bound updateStartTime(num: number): void {
        this._endTime = num
        this._startTime = num
    }
    @observable protected _endTime = 1950
}
 
export const Default = (): JSX.Element => {
    const manager = new TimelineManagerMock()
    manager.startHandleTimeBound = 1900
    const timelineController = new TimelineController(manager)
    return <TimelineComponent timelineController={timelineController} />
}
 
export const StartPartialRange = (): JSX.Element => (
    <TimelineComponent
        timelineController={new TimelineController(new TimelineManagerMock())}
    />
)
 
export const OneYearAtATime = (): JSX.Element => (
    <TimelineComponent
        timelineController={new TimelineController(new SingleYearManager())}
    />
)
 
export const DisablePlayButton = (): JSX.Element => {
    const manager = new TimelineManagerMock()
    manager.disablePlay = true
    return (
        <TimelineComponent
            timelineController={new TimelineController(manager)}
        />
    )
}