aboutsummaryrefslogtreecommitdiff
path: root/src/components/comments/AddComment.tsx
blob: 65c0b066a5754dc9d12752bf122c54146e3da16e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import * as React from 'react';
import {Image, StyleSheet, TextInput, View} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import {AuthContext} from '../../routes';
import {TaggBigInput} from '../onboarding';
import {postMomentComment} from '../../services';

/**
 * This file provides the add comment view for a user.
 * Displays the logged in user's profile picture to the left and then provides space to add a comment.
 * Comment is posted when enter is pressed as requested by product team.
 */

export interface AddCommentProps {
  setNewCommentsAvailable: Function;
  moment_id: string;
}

const AddComment: React.FC<AddCommentProps> = ({
  setNewCommentsAvailable,
  moment_id,
}) => {
  const [comment, setComment] = React.useState('');
  const {
    avatar,
    user: {userId, username},
    logout,
  } = React.useContext(AuthContext);

  const handleCommentUpdate = (comment: string) => {
    setComment(comment);
  };

  const postComment = async () => {
    try {
      const token = await AsyncStorage.getItem('token');
      if (!token) {
        logout();
        return;
      }
      const postedComment = await postMomentComment(
        userId,
        comment,
        moment_id,
        token,
      );

      if (postedComment) {
        //Set the current comment to en empty string if the comment was posted successfully.
        handleCommentUpdate('');

        //Indicate the MomentCommentsScreen that it needs to download the new comments again
        setNewCommentsAvailable(true);
      }
    } catch (err) {
      console.log('Error while posting comment!');
    }
  };

  return (
    <View style={styles.container}>
      <Image
        style={styles.avatar}
        source={
          avatar
            ? {uri: avatar}
            : require('../../assets/images/avatar-placeholder.png')
        }
      />
      <TaggBigInput
        style={styles.text}
        multiline
        placeholder="Add a comment....."
        placeholderTextColor="gray"
        onChangeText={handleCommentUpdate}
        onSubmitEditing={postComment}
        value={comment}
      />
    </View>
  );
};
const styles = StyleSheet.create({
  container: {flexDirection: 'row'},
  text: {
    position: 'relative',
    right: '18%',
    backgroundColor: 'white',
    width: '70%',
    paddingLeft: '2%',
    paddingRight: '2%',
    paddingBottom: '1%',
    paddingTop: '1%',
    height: 60,
  },
  avatar: {
    height: 40,
    width: 40,
    borderRadius: 30,
    marginRight: 15,
  },
});

export default AddComment;