2022-08-26 03:10:28 +00:00
|
|
|
import {
|
|
|
|
RouteProp,
|
|
|
|
useFocusEffect,
|
|
|
|
useNavigation,
|
|
|
|
useRoute,
|
|
|
|
} from '@react-navigation/native';
|
|
|
|
import React, {useCallback, useContext, useState} from 'react';
|
2022-08-28 08:20:58 +00:00
|
|
|
import {Image, ScrollView, View} from 'react-native';
|
|
|
|
import DocumentPicker from 'react-native-document-picker';
|
2022-08-26 03:10:28 +00:00
|
|
|
import {Button, IconButton} from 'react-native-paper';
|
|
|
|
import {set} from 'react-native-reanimated';
|
2022-08-30 11:21:25 +00:00
|
|
|
import {DatabaseContext} from './Routes';
|
2022-08-26 03:10:28 +00:00
|
|
|
import MassiveInput from './MassiveInput';
|
|
|
|
import {WorkoutsPageParams} from './WorkoutsPage';
|
|
|
|
|
|
|
|
export default function EditWorkout() {
|
|
|
|
const [name, setName] = useState('');
|
2022-08-28 08:55:12 +00:00
|
|
|
const [uri, setUri] = useState('');
|
2022-08-26 03:10:28 +00:00
|
|
|
const {params} = useRoute<RouteProp<WorkoutsPageParams, 'EditWorkout'>>();
|
|
|
|
const db = useContext(DatabaseContext);
|
|
|
|
const navigation = useNavigation();
|
|
|
|
|
|
|
|
useFocusEffect(
|
|
|
|
useCallback(() => {
|
|
|
|
navigation.getParent()?.setOptions({
|
|
|
|
headerLeft: () => (
|
|
|
|
<IconButton icon="arrow-back" onPress={() => navigation.goBack()} />
|
|
|
|
),
|
|
|
|
headerRight: null,
|
2022-08-30 08:22:20 +00:00
|
|
|
title: params.value.name ? params.value.name : 'New workout',
|
2022-08-26 03:10:28 +00:00
|
|
|
});
|
2022-08-28 08:55:12 +00:00
|
|
|
db.executeSql(`SELECT image FROM sets WHERE name = ? LIMIT 1`, [
|
|
|
|
params.value.name,
|
|
|
|
]).then(([result]) => setUri(result.rows.item(0)?.image));
|
|
|
|
}, [navigation, params.value.name, db]),
|
2022-08-26 03:10:28 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
const update = useCallback(async () => {
|
|
|
|
console.log(`${EditWorkout.name}.update`, set);
|
2022-08-28 08:55:12 +00:00
|
|
|
if (name) {
|
|
|
|
await db.executeSql(`UPDATE sets SET name = ? WHERE name = ?`, [
|
|
|
|
name,
|
|
|
|
params.value.name,
|
|
|
|
]);
|
|
|
|
await db.executeSql(
|
|
|
|
`UPDATE plans SET workouts = REPLACE(workouts, ?, ?)
|
2022-08-26 03:10:28 +00:00
|
|
|
WHERE workouts LIKE ?`,
|
2022-08-28 08:55:12 +00:00
|
|
|
[params.value.name, name, `%${params.value.name}%`],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
if (uri)
|
|
|
|
await db.executeSql(`UPDATE sets SET image = ? WHERE name = ?`, [
|
|
|
|
uri,
|
|
|
|
params.value.name,
|
|
|
|
]);
|
2022-08-26 03:10:28 +00:00
|
|
|
navigation.goBack();
|
2022-08-28 08:55:12 +00:00
|
|
|
}, [db, navigation, params.value.name, name, uri]);
|
2022-08-26 03:10:28 +00:00
|
|
|
|
|
|
|
const add = useCallback(async () => {
|
|
|
|
const insert = `
|
|
|
|
INSERT INTO sets(name, reps, weight, created, unit, hidden)
|
|
|
|
VALUES (?,0,0,strftime('%Y-%m-%dT%H:%M:%S', 'now', 'localtime'),'kg',true)
|
|
|
|
`;
|
|
|
|
await db.executeSql(insert, [name]);
|
|
|
|
navigation.goBack();
|
|
|
|
}, [db, navigation, name]);
|
|
|
|
|
|
|
|
const save = useCallback(async () => {
|
|
|
|
if (params.value.name) return update();
|
|
|
|
return add();
|
|
|
|
}, [update, add, params.value.name]);
|
|
|
|
|
2022-08-28 08:55:12 +00:00
|
|
|
const changeImage = useCallback(async () => {
|
|
|
|
const {fileCopyUri} = await DocumentPicker.pickSingle({
|
|
|
|
type: 'image/*',
|
|
|
|
copyTo: 'documentDirectory',
|
|
|
|
});
|
|
|
|
if (fileCopyUri) setUri(fileCopyUri);
|
|
|
|
}, []);
|
|
|
|
|
2022-08-26 03:10:28 +00:00
|
|
|
return (
|
|
|
|
<ScrollView style={{padding: 10, height: '90%'}}>
|
|
|
|
{params.value.name ? (
|
|
|
|
<>
|
2022-08-30 08:22:20 +00:00
|
|
|
<MassiveInput
|
|
|
|
placeholder={params.value.name}
|
|
|
|
label="New name"
|
|
|
|
value={name}
|
|
|
|
onChangeText={setName}
|
|
|
|
/>
|
2022-08-28 08:55:12 +00:00
|
|
|
<View style={{flexDirection: 'row', paddingBottom: 10}}>
|
|
|
|
{uri && <Image source={{uri}} style={{height: 50, width: 50}} />}
|
|
|
|
<Button onPress={changeImage} icon="image">
|
|
|
|
Image
|
|
|
|
</Button>
|
|
|
|
</View>
|
2022-08-26 03:10:28 +00:00
|
|
|
</>
|
|
|
|
) : (
|
|
|
|
<MassiveInput label="Name" value={name} onChangeText={setName} />
|
|
|
|
)}
|
|
|
|
<Button
|
2022-08-28 08:55:12 +00:00
|
|
|
disabled={!name && !!params.value.name && !uri}
|
2022-08-26 03:10:28 +00:00
|
|
|
mode="contained"
|
|
|
|
icon="save"
|
|
|
|
onPress={save}>
|
|
|
|
Save
|
|
|
|
</Button>
|
|
|
|
</ScrollView>
|
|
|
|
);
|
|
|
|
}
|