aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Kim <brian@tagg.id>2021-05-26 16:06:05 -0400
committerBrian Kim <brian@tagg.id>2021-05-26 16:06:05 -0400
commitfbfb50acdf374bb920912caff785d49eb384237a (patch)
treed8e3b7718f1766dc96f3552454162eb8939b0a2b
parenta6e98c1031a9e1c1bb03dd848f39e5afd8f28cb5 (diff)
Merged with master
-rw-r--r--src/components/moments/MomentPostContent.tsx44
1 files changed, 38 insertions, 6 deletions
diff --git a/src/components/moments/MomentPostContent.tsx b/src/components/moments/MomentPostContent.tsx
index 97bf2a0b..982fc035 100644
--- a/src/components/moments/MomentPostContent.tsx
+++ b/src/components/moments/MomentPostContent.tsx
@@ -1,6 +1,8 @@
import {useNavigation} from '@react-navigation/native';
import React, {useEffect, useRef, useState} from 'react';
import {Image, StyleSheet, Text, View, ViewProps} from 'react-native';
+import {TouchableWithoutFeedback} from 'react-native-gesture-handler';
+import Animated, {Easing} from 'react-native-reanimated';
import {useDispatch, useStore} from 'react-redux';
import {getCommentsCount, loadMomentTags} from '../../services';
import {RootState} from '../../store/rootReducer';
@@ -34,10 +36,15 @@ const MomentPostContent: React.FC<MomentPostContentProps> = ({
const [elapsedTime, setElapsedTime] = useState('');
const [comments_count, setCommentsCount] = useState('');
const [tags, setTags] = useState<MomentTagType[]>([]);
+ const [visible, setVisible] = useState(false);
const state: RootState = useStore().getState();
const navigation = useNavigation();
const dispatch = useDispatch();
const imageRef = useRef(null);
+
+ const [fadeValue, setFadeValue] = useState<Animated.Value<number>>(
+ new Animated.Value(0),
+ );
const [imageDimensions, setImageDimensions] = useState([0, 0]);
useEffect(() => {
@@ -73,14 +80,36 @@ const MomentPostContent: React.FC<MomentPostContentProps> = ({
fetchCommentsCount();
}, [dateTime, momentId]);
+ useEffect(() => {
+ const fade = async () => {
+ Animated.timing(fadeValue, {
+ toValue: 1,
+ duration: 250,
+ easing: Easing.linear,
+ }).start();
+ };
+ fade();
+ }, [fadeValue]);
+
return (
<View style={[styles.container, style]}>
- <Image
- ref={imageRef}
- style={styles.image}
- source={{uri: pathHash}}
- resizeMode={'cover'}
- />
+ <TouchableWithoutFeedback
+ onPress={() => {
+ setVisible(!visible);
+ setFadeValue(new Animated.Value(0));
+ }}>
+ <Image
+ ref={imageRef}
+ style={styles.image}
+ source={{uri: pathHash}}
+ resizeMode={'cover'}
+ />
+ </TouchableWithoutFeedback>
+ {visible && (
+ <Animated.View style={[styles.tapTag, {opacity: fadeValue}]}>
+ <MomentTags editing={false} tags={tags} imageRef={imageRef} />
+ </Animated.View>
+ )}
{tags.length > 0 && (
<Image
source={require('../../assets/icons/tag_indicate.png')}
@@ -147,6 +176,9 @@ const styles = StyleSheet.create({
lineHeight: normalize(15.51),
letterSpacing: normalize(0.6),
},
+ tapTag: {
+ position: 'absolute',
+ },
tagIcon: {
width: normalize(30),
height: normalize(30),