diff options
author | Paul Frazee <pfrazee@gmail.com> | 2022-08-31 20:09:58 -0500 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2022-08-31 20:09:58 -0500 |
commit | b3b2cfe9093cc9b95d35771d3029e05bc524d380 (patch) | |
tree | 35cc6f0388198dced081cb316d923f1273afe284 /src | |
parent | 4aa8a58f2717f514a1262fcfc66ec805c03966fb (diff) | |
download | voidsky-b3b2cfe9093cc9b95d35771d3029e05bc524d380.tar.zst |
Add composer FAB to home page
Diffstat (limited to 'src')
-rw-r--r-- | src/view/com/util/FloatingActionButton.tsx | 50 | ||||
-rw-r--r-- | src/view/lib/z-index.ts | 2 | ||||
-rw-r--r-- | src/view/screens/Home.tsx | 6 |
3 files changed, 58 insertions, 0 deletions
diff --git a/src/view/com/util/FloatingActionButton.tsx b/src/view/com/util/FloatingActionButton.tsx new file mode 100644 index 000000000..acfc48667 --- /dev/null +++ b/src/view/com/util/FloatingActionButton.tsx @@ -0,0 +1,50 @@ +import React from 'react' +import {GestureResponderEvent, StyleSheet, TouchableOpacity} from 'react-native' +import LinearGradient from 'react-native-linear-gradient' +import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' +import {IconProp} from '@fortawesome/fontawesome-svg-core' +import {colors, gradients} from '../../lib/styles' +import * as zIndex from '../../lib/z-index' + +type OnPress = ((event: GestureResponderEvent) => void) | undefined +export function FAB({icon, onPress}: {icon: IconProp; onPress: OnPress}) { + return ( + <TouchableOpacity style={styles.outer} onPress={onPress}> + <LinearGradient + colors={[gradients.primary.start, gradients.primary.end]} + start={{x: 0, y: 0}} + end={{x: 1, y: 1}} + style={styles.inner}> + <FontAwesomeIcon + size={20} + icon={icon} + color={colors.white} + style={styles.icon} + /> + </LinearGradient> + </TouchableOpacity> + ) +} + +const styles = StyleSheet.create({ + outer: { + position: 'absolute', + zIndex: zIndex.FAB, + right: 20, + bottom: 20, + width: 50, + height: 50, + borderRadius: 25, + shadowColor: '#000', + shadowOpacity: 0.3, + shadowOffset: {width: 0, height: 1}, + }, + inner: { + width: 50, + height: 50, + borderRadius: 25, + justifyContent: 'center', + alignItems: 'center', + }, + icon: {}, +}) diff --git a/src/view/lib/z-index.ts b/src/view/lib/z-index.ts new file mode 100644 index 000000000..872027d3f --- /dev/null +++ b/src/view/lib/z-index.ts @@ -0,0 +1,2 @@ +export const FAB = 1 +export const BASE = 0 diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index a94ffd2f7..1bc300a11 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -2,6 +2,7 @@ import React, {useState, useEffect, useLayoutEffect} from 'react' import {Image, StyleSheet, TouchableOpacity, View} from 'react-native' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {Feed} from '../com/feed/Feed' +import {FAB} from '../com/util/FloatingActionButton' import {useStores} from '../../state' import {useLoadEffect} from '../lib/navigation' import {AVIS} from '../lib/assets' @@ -48,9 +49,14 @@ export function Home({params}: ScreenParams) { // }) // }, [navigation]) + const onComposePress = () => { + store.nav.navigate('/compose') + } + return ( <View> <Feed feed={store.homeFeed} /> + <FAB icon="pen-nib" onPress={onComposePress} /> </View> ) } |