Sawtaytoes
9/20/2018 - 2:49 AM

Flic Button listener for single- and double-button presses.

Flic Button listener for single- and double-button presses.

import {
    BUTTON_DOWN,
    doublePressAction,
    singlePressAction,
} from './actions'

const timeLimit = 300

let startTime = Date.now()
let timeoutId = 0

const isWithinTimeLimit = () => Date.now() - startTime < timeLimit

const handleButtonPress = buttonState => {
    if (buttonState !== 'ButtonDown') {
        return
    }

    if (isWithinTimeLimit()) {
        clearTimeout(timeoutId)
        startTime = 0

        doublePressAction()
    }

    startTime = Date.now()
    timeoutId = setTimeout(singlePressAction, timeLimit)
}

const listenForButtonPress = bluetoothAddress => {
    new FlicConnectionChannel(bluetoothAddress)
    .on('buttonUpOrDown', handleButtonPress)
}