Brandon Presley
f778426aba
Something happened with the deno formatter, I can't remember what! Hahahahahaahahaha
76 lines
2.1 KiB
TypeScript
76 lines
2.1 KiB
TypeScript
import { useFocusEffect } from "@react-navigation/native";
|
|
import React, { useCallback, useMemo, useState } from "react";
|
|
import { Dimensions, NativeModules, View } from "react-native";
|
|
import { Button, Text, useTheme } from "react-native-paper";
|
|
import { ProgressCircle } from "react-native-svg-charts";
|
|
import AppFab from "./AppFab";
|
|
import { MARGIN, PADDING } from "./constants";
|
|
import { settingsRepo } from "./db";
|
|
import DrawerHeader from "./DrawerHeader";
|
|
import Settings from "./settings";
|
|
import useTimer from "./use-timer";
|
|
|
|
export interface TickEvent {
|
|
minutes: string;
|
|
seconds: string;
|
|
}
|
|
|
|
export default function TimerPage() {
|
|
const { minutes, seconds } = useTimer();
|
|
const [settings, setSettings] = useState<Settings>();
|
|
const { colors } = useTheme();
|
|
|
|
useFocusEffect(
|
|
useCallback(() => {
|
|
settingsRepo.findOne({ where: {} }).then(setSettings);
|
|
}, [])
|
|
);
|
|
|
|
const stop = () => {
|
|
NativeModules.AlarmModule.stop();
|
|
};
|
|
|
|
const add = async () => {
|
|
console.log(`${TimerPage.name}.add:`, settings);
|
|
NativeModules.AlarmModule.add();
|
|
};
|
|
|
|
const progress = useMemo(() => {
|
|
return (Number(minutes) * 60 + Number(seconds)) / 210;
|
|
}, [minutes, seconds]);
|
|
|
|
const left = useMemo(() => {
|
|
return Dimensions.get("screen").width * 0.5 - 60;
|
|
}, []);
|
|
|
|
return (
|
|
<>
|
|
<DrawerHeader name="Timer" />
|
|
<View style={{ flexGrow: 1, padding: PADDING }}>
|
|
<View
|
|
style={{
|
|
flex: 1,
|
|
justifyContent: "center",
|
|
alignItems: "center",
|
|
}}
|
|
>
|
|
<Text style={{ fontSize: 70, position: "absolute" }}>
|
|
{minutes}:{seconds}
|
|
</Text>
|
|
<ProgressCircle
|
|
style={{ height: 300, width: 300, marginBottom: MARGIN }}
|
|
progress={progress}
|
|
strokeWidth={10}
|
|
progressColor={colors.primary}
|
|
backgroundColor={colors.primary + "80"}
|
|
/>
|
|
</View>
|
|
</View>
|
|
<Button onPress={add} style={{ position: "absolute", top: "82%", left }}>
|
|
Add 1 min
|
|
</Button>
|
|
<AppFab icon="stop" onPress={stop} />
|
|
</>
|
|
);
|
|
}
|