diff options
author | Ivan Chen <ivan@thetaggid.com> | 2020-10-07 20:17:13 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-07 20:17:13 -0400 |
commit | 0f332655d2b64700623f25912d2610517fb954b6 (patch) | |
tree | bf0f4b6fb1f5f226dea4a6ee9d312d28a258bda4 /src/components/taggs/TaggsBar.tsx | |
parent | e86478f52e191c52fea20980278174af46f50953 (diff) |
[TMA-186] Instagram Taggs - Frontend (#45)
* Renamed Moments(Bar) to Taggs(Bar)
* created initial navigation and empty social media taggs screen
* made more progress for the header styling
* Finished social media taggs screen, organized code structure
* linted stuff D:
* moved bar height utility function to utils
* moved color constants to constants
* moved avatar title
* updated comments for social media taggs
* NOW the file is there
Diffstat (limited to 'src/components/taggs/TaggsBar.tsx')
-rw-r--r-- | src/components/taggs/TaggsBar.tsx | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/components/taggs/TaggsBar.tsx b/src/components/taggs/TaggsBar.tsx new file mode 100644 index 00000000..1022c4fc --- /dev/null +++ b/src/components/taggs/TaggsBar.tsx @@ -0,0 +1,75 @@ +// @refresh react +import React from 'react'; +import {StyleSheet} from 'react-native'; +import Animated from 'react-native-reanimated'; +import Tagg from './Tagg'; +import {PROFILE_CUTOUT_BOTTOM_Y} from '../../constants'; +import {StatusBarHeight} from '../../utils'; + +const {View, ScrollView, interpolate, Extrapolate} = Animated; +interface TaggsBarProps { + y: Animated.Value<number>; + profileBodyHeight: number; +} +const TaggsBar: React.FC<TaggsBarProps> = ({y, profileBodyHeight}) => { + const taggs: Array<JSX.Element> = []; + for (let i = 0; i < 10; i++) { + taggs.push(<Tagg key={i} style={styles.tagg} />); + } + const shadowOpacity: Animated.Node<number> = interpolate(y, { + inputRange: [ + PROFILE_CUTOUT_BOTTOM_Y + profileBodyHeight, + PROFILE_CUTOUT_BOTTOM_Y + profileBodyHeight + 20, + ], + outputRange: [0, 0.2], + extrapolate: Extrapolate.CLAMP, + }); + const paddingTop: Animated.Node<number> = interpolate(y, { + inputRange: [ + 0, + PROFILE_CUTOUT_BOTTOM_Y + profileBodyHeight - 30, + PROFILE_CUTOUT_BOTTOM_Y + profileBodyHeight, + ], + outputRange: [20, 20, StatusBarHeight], + extrapolate: Extrapolate.CLAMP, + }); + const paddingBottom: Animated.Node<number> = interpolate(y, { + inputRange: [ + 0, + PROFILE_CUTOUT_BOTTOM_Y + profileBodyHeight - 30, + PROFILE_CUTOUT_BOTTOM_Y + profileBodyHeight, + ], + outputRange: [30, 30, 15], + extrapolate: Extrapolate.CLAMP, + }); + return ( + <View style={[styles.container, {shadowOpacity}]}> + <ScrollView + horizontal + showsHorizontalScrollIndicator={false} + style={{paddingTop, paddingBottom}} + contentContainerStyle={styles.contentContainer}> + {taggs} + </ScrollView> + </View> + ); +}; + +const styles = StyleSheet.create({ + container: { + backgroundColor: 'white', + shadowColor: '#000', + shadowRadius: 10, + shadowOffset: {width: 0, height: 2}, + zIndex: 1, + }, + contentContainer: { + alignItems: 'center', + paddingHorizontal: 15, + }, + tagg: { + marginHorizontal: 14, + }, +}); + +export default TaggsBar; |