Only show share button on best view

This commit is contained in:
Brandon Presley 2023-03-28 12:04:54 +13:00
parent db5cc566ea
commit 457134df6b
2 changed files with 30 additions and 20 deletions

View File

@ -1,11 +1,14 @@
import {useNavigation} from '@react-navigation/native' import {useNavigation} from '@react-navigation/native'
import {FileSystem} from 'react-native-file-access'
import {Appbar, IconButton} from 'react-native-paper' import {Appbar, IconButton} from 'react-native-paper'
import Share from 'react-native-share'
import {captureScreen} from 'react-native-view-shot'
import useDark from './use-dark' import useDark from './use-dark'
export default function StackHeader({title}: {title: string}) { export default function StackHeader({
title,
children,
}: {
title: string
children?: JSX.Element | JSX.Element[]
}) {
const navigation = useNavigation() const navigation = useNavigation()
const dark = useDark() const dark = useDark()
@ -17,20 +20,7 @@ export default function StackHeader({title}: {title: string}) {
onPress={navigation.goBack} onPress={navigation.goBack}
/> />
<Appbar.Content title={title} /> <Appbar.Content title={title} />
<IconButton {children}
color={dark ? 'white' : 'white'}
onPress={() =>
captureScreen().then(async uri => {
const base64 = await FileSystem.readFile(uri, 'base64')
const url = `data:image/jpeg;base64,${base64}`
Share.open({
type: 'image/jpeg',
url,
})
})
}
icon="share"
/>
</Appbar.Header> </Appbar.Header>
) )
} }

View File

@ -2,7 +2,10 @@ import {RouteProp, useRoute} from '@react-navigation/native'
import {format} from 'date-fns' import {format} from 'date-fns'
import {useEffect, useMemo, useState} from 'react' import {useEffect, useMemo, useState} from 'react'
import {View} from 'react-native' import {View} from 'react-native'
import {List} from 'react-native-paper' import {FileSystem} from 'react-native-file-access'
import {IconButton, List} from 'react-native-paper'
import Share from 'react-native-share'
import {captureScreen} from 'react-native-view-shot'
import {BestPageParams} from './BestPage' import {BestPageParams} from './BestPage'
import Chart from './Chart' import Chart from './Chart'
import {PADDING} from './constants' import {PADDING} from './constants'
@ -12,6 +15,7 @@ import {Metrics} from './metrics'
import {Periods} from './periods' import {Periods} from './periods'
import Select from './Select' 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() {
@ -20,6 +24,7 @@ export default function ViewBest() {
const [volumes, setVolumes] = useState<Volume[]>() const [volumes, setVolumes] = useState<Volume[]>()
const [metric, setMetric] = useState(Metrics.Weight) const [metric, setMetric] = useState(Metrics.Weight)
const [period, setPeriod] = useState(Periods.Monthly) const [period, setPeriod] = useState(Periods.Monthly)
const dark = useDark()
useEffect(() => { useEffect(() => {
console.log(`${ViewBest.name}.useEffect`, {metric}) console.log(`${ViewBest.name}.useEffect`, {metric})
@ -105,7 +110,22 @@ export default function ViewBest() {
return ( return (
<> <>
<StackHeader title={params.best.name} /> <StackHeader title={params.best.name}>
<IconButton
color={dark ? 'white' : 'white'}
onPress={() =>
captureScreen().then(async uri => {
const base64 = await FileSystem.readFile(uri, 'base64')
const url = `data:image/jpeg;base64,${base64}`
Share.open({
type: 'image/jpeg',
url,
})
})
}
icon="share"
/>
</StackHeader>
<View style={{padding: PADDING}}> <View style={{padding: PADDING}}>
<Select <Select
label="Metric" label="Metric"