diff options
Diffstat (limited to 'src/view/com/util/load-latest')
-rw-r--r-- | src/view/com/util/load-latest/LoadLatestBtn.tsx | 1 | ||||
-rw-r--r-- | src/view/com/util/load-latest/LoadLatestBtn.web.tsx | 58 | ||||
-rw-r--r-- | src/view/com/util/load-latest/LoadLatestBtnMobile.tsx | 59 |
3 files changed, 118 insertions, 0 deletions
diff --git a/src/view/com/util/load-latest/LoadLatestBtn.tsx b/src/view/com/util/load-latest/LoadLatestBtn.tsx new file mode 100644 index 000000000..ae9cb9361 --- /dev/null +++ b/src/view/com/util/load-latest/LoadLatestBtn.tsx @@ -0,0 +1 @@ +export * from './LoadLatestBtnMobile' diff --git a/src/view/com/util/load-latest/LoadLatestBtn.web.tsx b/src/view/com/util/load-latest/LoadLatestBtn.web.tsx new file mode 100644 index 000000000..22a8fbada --- /dev/null +++ b/src/view/com/util/load-latest/LoadLatestBtn.web.tsx @@ -0,0 +1,58 @@ +import React from 'react' +import {StyleSheet, TouchableOpacity} from 'react-native' +import {Text} from '../text/Text' +import {usePalette} from 'lib/hooks/usePalette' +import {UpIcon} from 'lib/icons' +import {LoadLatestBtn as LoadLatestBtnMobile} from './LoadLatestBtnMobile' +import {isMobileWeb} from 'platform/detection' + +const HITSLOP = {left: 20, top: 20, right: 20, bottom: 20} + +export const LoadLatestBtn = ({ + onPress, + label, +}: { + onPress: () => void + label: string +}) => { + const pal = usePalette('default') + if (isMobileWeb) { + return <LoadLatestBtnMobile onPress={onPress} label={label} /> + } + return ( + <TouchableOpacity + style={[pal.view, pal.borderDark, styles.loadLatest]} + onPress={onPress} + hitSlop={HITSLOP}> + <Text type="md-bold" style={pal.text}> + <UpIcon size={16} strokeWidth={1} style={[pal.text, styles.icon]} /> + Load new {label} + </Text> + </TouchableOpacity> + ) +} + +const styles = StyleSheet.create({ + loadLatest: { + flexDirection: 'row', + position: 'absolute', + left: '50vw', + // @ts-ignore web only -prf + transform: 'translateX(-50%)', + top: 30, + shadowColor: '#000', + shadowOpacity: 0.2, + shadowOffset: {width: 0, height: 2}, + shadowRadius: 4, + paddingLeft: 20, + paddingRight: 24, + paddingVertical: 10, + borderRadius: 30, + borderWidth: 1, + }, + icon: { + position: 'relative', + top: 2, + marginRight: 5, + }, +}) diff --git a/src/view/com/util/load-latest/LoadLatestBtnMobile.tsx b/src/view/com/util/load-latest/LoadLatestBtnMobile.tsx new file mode 100644 index 000000000..75a812760 --- /dev/null +++ b/src/view/com/util/load-latest/LoadLatestBtnMobile.tsx @@ -0,0 +1,59 @@ +import React from 'react' +import {StyleSheet, TouchableOpacity} from 'react-native' +import {observer} from 'mobx-react-lite' +import LinearGradient from 'react-native-linear-gradient' +import {useSafeAreaInsets} from 'react-native-safe-area-context' +import {Text} from '../text/Text' +import {colors, gradients} from 'lib/styles' +import {clamp} from 'lodash' +import {useStores} from 'state/index' + +const HITSLOP = {left: 20, top: 20, right: 20, bottom: 20} + +export const LoadLatestBtn = observer( + ({onPress, label}: {onPress: () => void; label: string}) => { + const store = useStores() + const safeAreaInsets = useSafeAreaInsets() + return ( + <TouchableOpacity + style={[ + styles.loadLatest, + !store.shell.minimalShellMode && { + bottom: 60 + clamp(safeAreaInsets.bottom, 15, 30), + }, + ]} + onPress={onPress} + hitSlop={HITSLOP}> + <LinearGradient + colors={[gradients.blueLight.start, gradients.blueLight.end]} + start={{x: 0, y: 0}} + end={{x: 1, y: 1}} + style={styles.loadLatestInner}> + <Text type="md-bold" style={styles.loadLatestText}> + Load new {label} + </Text> + </LinearGradient> + </TouchableOpacity> + ) + }, +) + +const styles = StyleSheet.create({ + loadLatest: { + position: 'absolute', + left: 20, + bottom: 35, + shadowColor: '#000', + shadowOpacity: 0.3, + shadowOffset: {width: 0, height: 1}, + }, + loadLatestInner: { + flexDirection: 'row', + paddingHorizontal: 14, + paddingVertical: 10, + borderRadius: 30, + }, + loadLatestText: { + color: colors.white, + }, +}) |