import { DarkTheme, DefaultTheme, RouteProp, useFocusEffect, useNavigation, useRoute, } from '@react-navigation/native'; import * as shape from 'd3-shape'; import React, {useCallback, useContext, useEffect, useState} from 'react'; import {Text, useColorScheme, View} from 'react-native'; import {IconButton} from 'react-native-paper'; import {Grid, LineChart, XAxis, YAxis} from 'react-native-svg-charts'; import {DatabaseContext} from './App'; import {BestPageParams} from './BestPage'; import Set from './set'; import {formatMonth} from './time'; export default function ViewBest() { const {params} = useRoute>(); const [sets, setSets] = useState([]); const db = useContext(DatabaseContext); const navigation = useNavigation(); const dark = useColorScheme() === 'dark'; useFocusEffect( useCallback(() => { console.log(`${ViewBest.name}.useFocusEffect`); navigation.getParent()?.setOptions({ headerLeft: () => ( navigation.goBack()} /> ), title: params.best.name, }); }, [navigation, params.best.name]), ); useEffect(() => { console.log(`${ViewBest.name}.useEffect`); const selectBest = ` SELECT max(weight) AS weight, STRFTIME('%Y-%m-%d', created) as created, unit FROM sets WHERE name = ? GROUP BY name, STRFTIME('%Y-%m-%d', created) `; const refresh = async () => { const [result] = await db.executeSql(selectBest, [params.best.name]); if (result.rows.length === 0) return; console.log(`${ViewBest.name}.${refresh.name}:`, result.rows.raw()); setSets(result.rows.raw()); }; refresh(); }, [params.best.name, db]); const axesSvg = {fontSize: 10, fill: 'grey'}; const verticalContentInset = {top: 10, bottom: 10}; const xAxisHeight = 30; return ( Best weight per day set.weight)} style={{marginBottom: xAxisHeight}} contentInset={verticalContentInset} svg={axesSvg} formatLabel={value => `${value}${sets[0].unit}`} /> set.weight)} contentInset={verticalContentInset} curve={shape.curveBasis} svg={{ stroke: dark ? DarkTheme.colors.primary : DefaultTheme.colors.primary, }}> formatMonth(sets[index].created)} contentInset={{left: 10, right: 10}} svg={axesSvg} /> ); }