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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 1x 1x 1x 1x 1x 1x 2x 2x 1x 1x | import { action } from "mobx"
 
export interface SlideShowManager<SlideData> {
    setSlide: (slide: SlideData) => void
}
 
// A "slide" is just a query string.
export class SlideShowController<SlideData> {
    constructor(
        slides: SlideData[] = [],
        currentIndex = 0,
        manager?: SlideShowManager<SlideData>
    ) {
        this.currentIndex = currentIndex
        this.slides = slides
        this.manager = manager
    }
    private slides: SlideData[]
    private currentIndex: number
    private manager?: SlideShowManager<SlideData>
 
    get isEmpty() {
        return this.slides.length === 0
    }
 
    @action.bound private playIndexCommand(index: number) {
        const slides = this.slides
        index = index >= slides.length ? index - slides.length : index
        index = index < 0 ? slides.length + index : index
        const slide = slides[index]
 
        if (this.manager) this.manager.setSlide(slide)
    }
 
    @action.bound playNext() {
        this.playIndexCommand(++this.currentIndex)
    }
 
    @action.bound playPrevious() {
        this.playIndexCommand(--this.currentIndex)
    }
}
  |