2022-11-03 07:04:15 +00:00
|
|
|
import React, {useEffect, useState} from 'react'
|
|
|
|
import {NativeEventEmitter, NativeModules, View} from 'react-native'
|
|
|
|
import {Button, Subheading, Title} from 'react-native-paper'
|
|
|
|
import {PADDING} from './constants'
|
|
|
|
import {settingsRepo} from './db'
|
|
|
|
import DrawerHeader from './DrawerHeader'
|
|
|
|
import MassiveFab from './MassiveFab'
|
|
|
|
import Settings from './settings'
|
2022-10-24 01:45:21 +00:00
|
|
|
|
2022-11-03 07:04:15 +00:00
|
|
|
interface TickEvent {
|
|
|
|
minutes: string
|
|
|
|
seconds: string
|
|
|
|
}
|
2022-10-24 01:45:21 +00:00
|
|
|
|
2022-11-03 07:04:15 +00:00
|
|
|
export default function TimerPage() {
|
|
|
|
const [minutes, setMinutes] = useState('00')
|
|
|
|
const [seconds, setSeconds] = useState('00')
|
|
|
|
const [settings, setSettings] = useState<Settings>()
|
2022-10-24 01:45:21 +00:00
|
|
|
|
2022-11-03 07:04:15 +00:00
|
|
|
useEffect(() => {
|
|
|
|
settingsRepo.findOne({where: {}}).then(setSettings)
|
|
|
|
const emitter = new NativeEventEmitter()
|
|
|
|
const listener = emitter.addListener('tick', (event: TickEvent) => {
|
|
|
|
console.log(`${TimerPage.name}.tick:`, {event})
|
|
|
|
setMinutes(event.minutes)
|
|
|
|
setSeconds(event.seconds)
|
|
|
|
})
|
|
|
|
return listener.remove
|
|
|
|
}, [])
|
2022-10-24 01:45:21 +00:00
|
|
|
|
|
|
|
const stop = () => {
|
2022-11-03 07:04:15 +00:00
|
|
|
NativeModules.AlarmModule.stop()
|
|
|
|
}
|
2022-10-24 01:45:21 +00:00
|
|
|
|
|
|
|
const add = async () => {
|
2022-11-03 07:04:15 +00:00
|
|
|
NativeModules.AlarmModule.add(settings.vibrate, settings.sound)
|
|
|
|
}
|
2022-10-24 01:45:21 +00:00
|
|
|
|
|
|
|
return (
|
|
|
|
<>
|
|
|
|
<DrawerHeader name="Timer" />
|
2022-11-03 07:04:15 +00:00
|
|
|
<View style={{flexGrow: 1, padding: PADDING}}>
|
2022-10-24 01:45:21 +00:00
|
|
|
<View
|
|
|
|
style={{
|
|
|
|
flex: 1,
|
|
|
|
justifyContent: 'center',
|
|
|
|
alignItems: 'center',
|
|
|
|
}}>
|
|
|
|
<Title>Remaining</Title>
|
|
|
|
<Subheading>
|
|
|
|
{minutes}:{seconds}
|
|
|
|
</Subheading>
|
|
|
|
<Button onPress={add}>Add 1 min</Button>
|
|
|
|
</View>
|
2022-11-03 07:04:15 +00:00
|
|
|
</View>
|
2022-10-24 01:45:21 +00:00
|
|
|
<MassiveFab icon="stop" onPress={stop} />
|
|
|
|
</>
|
2022-11-03 07:04:15 +00:00
|
|
|
)
|
2022-10-24 01:45:21 +00:00
|
|
|
}
|