Merge branch 'master' of gitea.presley.nz:brandon.presley/Massive
This commit is contained in:
commit
71a1e69c7b
|
@ -1,5 +1,6 @@
|
||||||
import {NavigationProp, useNavigation} from '@react-navigation/native'
|
import {NavigationProp, useNavigation} from '@react-navigation/native'
|
||||||
import {useCallback, useState} from 'react'
|
import {useCallback, useState} from 'react'
|
||||||
|
import {Platform} from 'react-native'
|
||||||
import DocumentPicker from 'react-native-document-picker'
|
import DocumentPicker from 'react-native-document-picker'
|
||||||
import {FileSystem} from 'react-native-file-access'
|
import {FileSystem} from 'react-native-file-access'
|
||||||
import {Divider, IconButton, Menu} from 'react-native-paper'
|
import {Divider, IconButton, Menu} from 'react-native-paper'
|
||||||
|
@ -153,8 +154,16 @@ export default function DrawerMenu({name}: {name: keyof DrawerParamList}) {
|
||||||
icon="more-vert"
|
icon="more-vert"
|
||||||
/>
|
/>
|
||||||
}>
|
}>
|
||||||
<Menu.Item icon="arrow-downward" onPress={download} title="Download" />
|
{Platform.OS === 'android' && (
|
||||||
<Menu.Item icon="arrow-upward" onPress={upload} title="Upload" />
|
<>
|
||||||
|
<Menu.Item
|
||||||
|
icon="arrow-downward"
|
||||||
|
onPress={download}
|
||||||
|
title="Download"
|
||||||
|
/>
|
||||||
|
<Menu.Item icon="arrow-upward" onPress={upload} title="Upload" />
|
||||||
|
</>
|
||||||
|
)}
|
||||||
<Divider />
|
<Divider />
|
||||||
<Menu.Item
|
<Menu.Item
|
||||||
icon="delete"
|
icon="delete"
|
||||||
|
|
35
EditPlan.tsx
35
EditPlan.tsx
|
@ -102,29 +102,15 @@ export default function EditPlan() {
|
||||||
))
|
))
|
||||||
)}
|
)}
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
{names.length === 0 ? (
|
|
||||||
<Button
|
<Button
|
||||||
disabled={workouts.length === 0 && days.length === 0}
|
disabled={workouts.length === 0 && days.length === 0}
|
||||||
mode="contained"
|
style={styles.button}
|
||||||
onPress={() => {
|
mode="contained"
|
||||||
navigation.goBack()
|
icon="save"
|
||||||
navigation.navigate('Workouts', {
|
onPress={save}>
|
||||||
screen: 'EditWorkout',
|
Save
|
||||||
params: {value: {name: ''}},
|
</Button>
|
||||||
})
|
|
||||||
}}>
|
|
||||||
Add workout
|
|
||||||
</Button>
|
|
||||||
) : (
|
|
||||||
<Button
|
|
||||||
disabled={workouts.length === 0 && days.length === 0}
|
|
||||||
style={{marginTop: MARGIN}}
|
|
||||||
mode="contained"
|
|
||||||
icon="save"
|
|
||||||
onPress={save}>
|
|
||||||
Save
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
</View>
|
</View>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
@ -135,4 +121,7 @@ const styles = StyleSheet.create({
|
||||||
fontSize: 20,
|
fontSize: 20,
|
||||||
marginBottom: MARGIN,
|
marginBottom: MARGIN,
|
||||||
},
|
},
|
||||||
|
button: {
|
||||||
|
margin: MARGIN * 2,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
27
Routes.tsx
27
Routes.tsx
|
@ -1,5 +1,6 @@
|
||||||
import {createDrawerNavigator} from '@react-navigation/drawer'
|
import {createDrawerNavigator} from '@react-navigation/drawer'
|
||||||
import {useMemo} from 'react'
|
import {useMemo} from 'react'
|
||||||
|
import {Platform} from 'react-native'
|
||||||
import {IconButton} from 'react-native-paper'
|
import {IconButton} from 'react-native-paper'
|
||||||
import BestPage from './BestPage'
|
import BestPage from './BestPage'
|
||||||
import {DrawerParamList} from './drawer-param-list'
|
import {DrawerParamList} from './drawer-param-list'
|
||||||
|
@ -35,16 +36,22 @@ export default function Routes() {
|
||||||
swipeEdgeWidth: 1000,
|
swipeEdgeWidth: 1000,
|
||||||
headerShown: false,
|
headerShown: false,
|
||||||
}}>
|
}}>
|
||||||
{routes.map(route => (
|
{}
|
||||||
<Drawer.Screen
|
{routes
|
||||||
key={route.name}
|
.filter(route => {
|
||||||
name={route.name}
|
if (Platform.OS === 'ios' && route.name === 'Timer') return false
|
||||||
component={route.component}
|
return true
|
||||||
options={{
|
})
|
||||||
drawerIcon: () => <IconButton icon={route.icon} />,
|
.map(route => (
|
||||||
}}
|
<Drawer.Screen
|
||||||
/>
|
key={route.name}
|
||||||
))}
|
name={route.name}
|
||||||
|
component={route.component}
|
||||||
|
options={{
|
||||||
|
drawerIcon: () => <IconButton icon={route.icon} />,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
</Drawer.Navigator>
|
</Drawer.Navigator>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
43
ViewBest.tsx
43
ViewBest.tsx
|
@ -1,4 +1,3 @@
|
||||||
import {Picker} from '@react-native-picker/picker'
|
|
||||||
import {RouteProp, useRoute} from '@react-navigation/native'
|
import {RouteProp, useRoute} from '@react-navigation/native'
|
||||||
import {format} from 'date-fns'
|
import {format} from 'date-fns'
|
||||||
import {useEffect, useState} from 'react'
|
import {useEffect, useState} from 'react'
|
||||||
|
@ -10,13 +9,12 @@ import {setRepo} from './db'
|
||||||
import GymSet from './gym-set'
|
import GymSet from './gym-set'
|
||||||
import {Metrics} from './metrics'
|
import {Metrics} from './metrics'
|
||||||
import {Periods} from './periods'
|
import {Periods} from './periods'
|
||||||
|
import Select from './Select'
|
||||||
import StackHeader from './StackHeader'
|
import StackHeader from './StackHeader'
|
||||||
import useDark from './use-dark'
|
|
||||||
import Volume from './volume'
|
import Volume from './volume'
|
||||||
|
|
||||||
export default function ViewBest() {
|
export default function ViewBest() {
|
||||||
const {params} = useRoute<RouteProp<BestPageParams, 'ViewBest'>>()
|
const {params} = useRoute<RouteProp<BestPageParams, 'ViewBest'>>()
|
||||||
const dark = useDark()
|
|
||||||
const [weights, setWeights] = useState<GymSet[]>([])
|
const [weights, setWeights] = useState<GymSet[]>([])
|
||||||
const [volumes, setVolumes] = useState<Volume[]>([])
|
const [volumes, setVolumes] = useState<Volume[]>([])
|
||||||
const [metric, setMetric] = useState(Metrics.Weight)
|
const [metric, setMetric] = useState(Metrics.Weight)
|
||||||
|
@ -67,24 +65,27 @@ export default function ViewBest() {
|
||||||
<>
|
<>
|
||||||
<StackHeader title={params.best.name} />
|
<StackHeader title={params.best.name} />
|
||||||
<View style={{padding: PADDING}}>
|
<View style={{padding: PADDING}}>
|
||||||
<Picker
|
<Select
|
||||||
style={{color: dark ? 'white' : 'black'}}
|
items={[
|
||||||
dropdownIconColor={dark ? 'white' : 'black'}
|
{value: Metrics.Volume, label: Metrics.Volume},
|
||||||
selectedValue={metric}
|
{value: Metrics.OneRepMax, label: Metrics.OneRepMax},
|
||||||
onValueChange={value => setMetric(value)}>
|
{
|
||||||
<Picker.Item value={Metrics.Volume} label={Metrics.Volume} />
|
label: Metrics.Weight,
|
||||||
<Picker.Item value={Metrics.Weight} label={Metrics.Weight} />
|
value: Metrics.Weight,
|
||||||
<Picker.Item value={Metrics.OneRepMax} label={Metrics.OneRepMax} />
|
},
|
||||||
</Picker>
|
]}
|
||||||
<Picker
|
onChange={value => setMetric(value as Metrics)}
|
||||||
style={{color: dark ? 'white' : 'black'}}
|
value={metric}
|
||||||
dropdownIconColor={dark ? 'white' : 'black'}
|
/>
|
||||||
selectedValue={period}
|
<Select
|
||||||
onValueChange={value => setPeriod(value)}>
|
items={[
|
||||||
<Picker.Item value={Periods.Weekly} label={Periods.Weekly} />
|
{value: Periods.Weekly, label: Periods.Weekly},
|
||||||
<Picker.Item value={Periods.Monthly} label={Periods.Monthly} />
|
{value: Periods.Monthly, label: Periods.Monthly},
|
||||||
<Picker.Item value={Periods.Yearly} label={Periods.Yearly} />
|
{value: Periods.Yearly, label: Periods.Yearly},
|
||||||
</Picker>
|
]}
|
||||||
|
onChange={value => setPeriod(value as Periods)}
|
||||||
|
value={period}
|
||||||
|
/>
|
||||||
{metric === Metrics.Volume ? (
|
{metric === Metrics.Volume ? (
|
||||||
<Chart
|
<Chart
|
||||||
yData={volumes.map(v => v.value)}
|
yData={volumes.map(v => v.value)}
|
||||||
|
|
Loading…
Reference in New Issue