diff --git a/App.tsx b/App.tsx index 4d176a5..cf4abc7 100644 --- a/App.tsx +++ b/App.tsx @@ -16,6 +16,7 @@ import {SQLiteDatabase} from 'react-native-sqlite-storage'; import Ionicon from 'react-native-vector-icons/Ionicons'; import { addHidden, + addImage, addNotify, addSound, createPlans, @@ -75,6 +76,7 @@ const App = () => { await _db.executeSql(createWorkouts); await _db.executeSql(addHidden).catch(() => null); await _db.executeSql(addNotify).catch(() => null); + await _db.executeSql(addImage).catch(() => null); const [result] = await _db.executeSql(`SELECT * FROM settings LIMIT 1`); if (result.rows.length === 0) return _db.executeSql(` diff --git a/EditSet.tsx b/EditSet.tsx index 6aae2df..2799ceb 100644 --- a/EditSet.tsx +++ b/EditSet.tsx @@ -57,13 +57,13 @@ export default function EditSet() { const add = useCallback( async (set: Set) => { - const {name, reps, weight, unit} = set; + const {name, reps, weight, unit, image} = set; const insert = ` - INSERT INTO sets(name, reps, weight, created, unit) - VALUES (?,?,?,strftime('%Y-%m-%dT%H:%M:%S', 'now', 'localtime'),?) + INSERT INTO sets(name, reps, weight, created, unit, image) + VALUES (?,?,?,strftime('%Y-%m-%dT%H:%M:%S', 'now', 'localtime'),?, ?) `; startTimer(); - await db.executeSql(insert, [name, reps, weight, unit]); + await db.executeSql(insert, [name, reps, weight, unit, image]); const [result] = await db.executeSql(`SELECT * FROM settings LIMIT 1`); const settings: Settings = result.rows.item(0); if (settings.notify === 0) return navigation.goBack(); diff --git a/EditWorkout.tsx b/EditWorkout.tsx index 02572b9..ae6fe40 100644 --- a/EditWorkout.tsx +++ b/EditWorkout.tsx @@ -15,6 +15,7 @@ import {WorkoutsPageParams} from './WorkoutsPage'; export default function EditWorkout() { const [name, setName] = useState(''); + const [uri, setUri] = useState(''); const {params} = useRoute>(); const db = useContext(DatabaseContext); const navigation = useNavigation(); @@ -28,22 +29,32 @@ export default function EditWorkout() { headerRight: null, title: params.value.name ? 'Edit workout' : 'New workout', }); - }, [navigation, params.value.name]), + 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]), ); const update = useCallback(async () => { console.log(`${EditWorkout.name}.update`, set); - await db.executeSql(`UPDATE sets SET name = ? WHERE name = ?`, [ - name, - params.value.name, - ]); - await db.executeSql( - `UPDATE plans SET workouts = REPLACE(workouts, ?, ?) + if (name) { + await db.executeSql(`UPDATE sets SET name = ? WHERE name = ?`, [ + name, + params.value.name, + ]); + await db.executeSql( + `UPDATE plans SET workouts = REPLACE(workouts, ?, ?) WHERE workouts LIKE ?`, - [params.value.name, name, `%${params.value.name}%`], - ); + [params.value.name, name, `%${params.value.name}%`], + ); + } + if (uri) + await db.executeSql(`UPDATE sets SET image = ? WHERE name = ?`, [ + uri, + params.value.name, + ]); navigation.goBack(); - }, [db, navigation, params.value.name, name]); + }, [db, navigation, params.value.name, name, uri]); const add = useCallback(async () => { const insert = ` @@ -59,18 +70,32 @@ export default function EditWorkout() { return add(); }, [update, add, params.value.name]); + const changeImage = useCallback(async () => { + const {fileCopyUri} = await DocumentPicker.pickSingle({ + type: 'image/*', + copyTo: 'documentDirectory', + }); + if (fileCopyUri) setUri(fileCopyUri); + }, []); + return ( {params.value.name ? ( <> + + {uri && } + + ) : ( )}