Massive/EditSet.tsx

72 lines
2.0 KiB
TypeScript
Raw Normal View History

2022-10-31 04:22:08 +00:00
import {RouteProp, useNavigation, useRoute} from '@react-navigation/native'
import {useCallback} from 'react'
import {NativeModules, View} from 'react-native'
import {PADDING} from './constants'
import {getNow, setRepo} from './db'
import GymSet from './gym-set'
import {HomePageParams} from './home-page-params'
import {useSnackbar} from './MassiveSnack'
import SetForm from './SetForm'
import StackHeader from './StackHeader'
import {useSettings} from './use-settings'
2022-07-03 01:50:01 +00:00
export default function EditSet() {
2022-10-31 04:22:08 +00:00
const {params} = useRoute<RouteProp<HomePageParams, 'EditSet'>>()
const {set} = params
const navigation = useNavigation()
const {toast} = useSnackbar()
const {settings} = useSettings()
const startTimer = useCallback(
async (name: string) => {
2022-10-31 04:22:08 +00:00
if (!settings.alarm) return
const {minutes, seconds} = await setRepo.findOne({where: {name}})
const milliseconds = (minutes ?? 3) * 60 * 1000 + (seconds ?? 0) * 1000
NativeModules.AlarmModule.timer(
milliseconds,
!!settings.vibrate,
settings.sound,
!!settings.noSound,
2022-10-31 04:22:08 +00:00
)
},
[settings],
2022-10-31 04:22:08 +00:00
)
2022-07-20 03:48:48 +00:00
const add = useCallback(
async (value: GymSet) => {
2022-10-31 04:22:08 +00:00
startTimer(value.name)
const [{now}] = await getNow()
value.created = now
value.hidden = false
console.log(`${EditSet.name}.add`, {set: value})
const result = await setRepo.save(value)
console.log({result})
if (!settings.notify) return
2022-08-24 01:04:45 +00:00
if (
value.weight > set.weight ||
(value.reps > set.reps && value.weight === set.weight)
2022-08-24 01:04:45 +00:00
)
2022-10-31 04:22:08 +00:00
toast("Great work King! That's a new record.", 3000)
2022-07-20 03:48:48 +00:00
},
[startTimer, set, toast, settings],
2022-10-31 04:22:08 +00:00
)
2022-07-20 03:48:48 +00:00
const save = useCallback(
async (value: GymSet) => {
2022-10-31 04:22:08 +00:00
if (typeof set.id === 'number') await setRepo.save(value)
else await add(value)
navigation.goBack()
2022-07-20 03:48:48 +00:00
},
[add, set.id, navigation],
2022-10-31 04:22:08 +00:00
)
2022-07-03 01:50:01 +00:00
return (
<>
<StackHeader title="Edit set" />
<View style={{padding: PADDING, flex: 1}}>
<SetForm save={save} set={set} />
</View>
</>
2022-10-31 04:22:08 +00:00
)
2022-07-03 01:50:01 +00:00
}