aboutsummaryrefslogtreecommitdiff
path: root/src/components/comments
diff options
context:
space:
mode:
authorAshm Walia <ashmwalia@outlook.com>2021-01-25 18:00:44 -0800
committerAshm Walia <ashmwalia@outlook.com>2021-01-25 18:00:44 -0800
commit755f4f540d3e759ff9ad3bc35c64b6f7fc83998b (patch)
tree6619de58ffcd0a5c9e32a612ffc82f0d65d041d9 /src/components/comments
parent6cd49ed14f99fe953026e54969abc6232f3aec57 (diff)
Add provision to show and hide replies
Diffstat (limited to 'src/components/comments')
-rw-r--r--src/components/comments/AddComment.tsx4
-rw-r--r--src/components/comments/CommentTile.tsx122
-rw-r--r--src/components/comments/CommentsContainer.tsx83
3 files changed, 188 insertions, 21 deletions
diff --git a/src/components/comments/AddComment.tsx b/src/components/comments/AddComment.tsx
index 24b3473c..7b04085d 100644
--- a/src/components/comments/AddComment.tsx
+++ b/src/components/comments/AddComment.tsx
@@ -24,11 +24,13 @@ import {SCREEN_HEIGHT, SCREEN_WIDTH} from '../../utils';
export interface AddCommentProps {
setNewCommentsAvailable: Function;
moment_id: string;
+ placeholderText: string;
}
const AddComment: React.FC<AddCommentProps> = ({
setNewCommentsAvailable,
moment_id,
+ placeholderText,
}) => {
const [comment, setComment] = React.useState('');
const [keyboardVisible, setKeyboardVisible] = React.useState(false);
@@ -83,7 +85,7 @@ const AddComment: React.FC<AddCommentProps> = ({
/>
<TextInput
style={styles.text}
- placeholder="Add a comment..."
+ placeholder={placeholderText}
placeholderTextColor="grey"
onChangeText={setComment}
value={comment}
diff --git a/src/components/comments/CommentTile.tsx b/src/components/comments/CommentTile.tsx
index 47f25a53..4221fd54 100644
--- a/src/components/comments/CommentTile.tsx
+++ b/src/components/comments/CommentTile.tsx
@@ -1,10 +1,19 @@
-import React from 'react';
+import React, {useState} from 'react';
import {Text, View} from 'react-native-animatable';
import {ProfilePreview} from '../profile';
-import {CommentType, ScreenType} from '../../types';
+import {CommentType, ScreenType, TypeOfComment} from '../../types';
import {StyleSheet} from 'react-native';
-import {getTimePosted} from '../../utils';
+import {
+ getTimePosted,
+ normalize,
+ SCREEN_HEIGHT,
+ SCREEN_WIDTH,
+} from '../../utils';
import ClockIcon from '../../assets/icons/clock-icon-01.svg';
+import {COMMENT_REPLIES} from '../../constants';
+import BackIcon from '../../assets/icons/back-arrow-colored.svg';
+import {TouchableOpacity} from 'react-native-gesture-handler';
+// import CommentsContainer from './CommentsContainer';
/**
* Displays users's profile picture, comment posted by them and the time difference between now and when a comment was posted.
@@ -13,33 +22,78 @@ import ClockIcon from '../../assets/icons/clock-icon-01.svg';
interface CommentTileProps {
comment_object: CommentType;
screenType: ScreenType;
+ typeOfComment: TypeOfComment;
}
const CommentTile: React.FC<CommentTileProps> = ({
comment_object,
screenType,
+ typeOfComment,
}) => {
const timePosted = getTimePosted(comment_object.date_created);
+ const [showReplies, setShowReplies] = useState<boolean>(false);
+
+ const isThread = typeOfComment === 'Thread';
+
return (
- <View style={styles.container}>
- <ProfilePreview
- profilePreview={{
- id: comment_object.commenter.id,
- username: comment_object.commenter.username,
- first_name: comment_object.commenter.first_name,
- last_name: comment_object.commenter.last_name,
- }}
- previewType={'Comment'}
- screenType={screenType}
- />
- <View style={styles.body}>
- <Text style={styles.comment}>{comment_object.comment}</Text>
- <View style={styles.clockIconAndTime}>
- <ClockIcon style={styles.clockIcon} />
- <Text style={styles.date_time}>{' ' + timePosted}</Text>
+ <>
+ <View style={styles.container}>
+ <ProfilePreview
+ profilePreview={{
+ id: comment_object.commenter.id,
+ username: comment_object.commenter.username,
+ first_name: comment_object.commenter.first_name,
+ last_name: comment_object.commenter.last_name,
+ }}
+ previewType={'Comment'}
+ screenType={screenType}
+ />
+ <View style={styles.body}>
+ <Text style={styles.comment}>{comment_object.comment}</Text>
+ <View style={styles.clockIconAndTime}>
+ <ClockIcon style={styles.clockIcon} />
+ <Text style={styles.date_time}>{' ' + timePosted}</Text>
+ {typeOfComment === 'Comment' && (
+ <>
+ <TouchableOpacity
+ onPress={() => {
+ setShowReplies(!showReplies);
+ }}>
+ <View style={styles.repliesTextAndIconContainer}>
+ <Text style={styles.repliesText}>
+ {showReplies ? 'Hide' : 'Replies'}
+ </Text>
+ <BackIcon
+ width={12}
+ height={11}
+ color={COMMENT_REPLIES}
+ style={
+ !showReplies
+ ? styles.repliesDownArrow
+ : styles.repliesUpArrow
+ }
+ />
+ </View>
+ </TouchableOpacity>
+ </>
+ )}
+ </View>
</View>
</View>
- </View>
+ {/* {showReplies && (
+ <View style={styles.repliesBody}>
+ <CommentsContainer
+ moment_id={'5a9d6023-bc62-4588-a3dc-8de2c9c370e0'}
+ screenType={screenType}
+ setNewCommentsAvailable={(value: boolean) => {
+ console.log(value);
+ }}
+ newCommentsAvailable={true}
+ typeOfComment={'Thread'}
+ />
+ </View>
+ )} */}
+ </>
);
};
@@ -61,6 +115,7 @@ const styles = StyleSheet.create({
},
date_time: {
color: 'gray',
+ fontSize: normalize(12),
},
clockIcon: {
width: 12,
@@ -71,6 +126,33 @@ const styles = StyleSheet.create({
flexDirection: 'row',
marginBottom: '3%',
},
+
+ repliesTextAndIconContainer: {
+ marginLeft: SCREEN_WIDTH * 0.37,
+ flexDirection: 'row',
+ },
+
+ repliesText: {
+ color: COMMENT_REPLIES,
+ fontWeight: '500',
+ fontSize: normalize(12),
+ marginRight: '3%',
+ },
+
+ repliesBody: {
+ width: SCREEN_WIDTH,
+ height: SCREEN_HEIGHT * 0.8,
+ },
+
+ repliesDownArrow: {
+ transform: [{rotate: '270deg'}],
+ marginTop: '7%',
+ },
+
+ repliesUpArrow: {
+ transform: [{rotate: '90deg'}],
+ marginTop: '7%',
+ },
});
export default CommentTile;
diff --git a/src/components/comments/CommentsContainer.tsx b/src/components/comments/CommentsContainer.tsx
new file mode 100644
index 00000000..81ae8e1e
--- /dev/null
+++ b/src/components/comments/CommentsContainer.tsx
@@ -0,0 +1,83 @@
+import React, {useRef, useEffect, useState} from 'react';
+import {StyleSheet} from 'react-native';
+import {ScrollView} from 'react-native-gesture-handler';
+import {useDispatch} from 'react-redux';
+import {CommentTile} from '.';
+import {getMomentComments} from '../../services';
+import {CommentType, ScreenType, TypeOfComment} from '../../types';
+export type CommentsContainerProps = {
+ screenType: ScreenType;
+ moment_id: string;
+ setCommentsLength?: (count: number) => void;
+ newCommentsAvailable: boolean;
+ setNewCommentsAvailable: (value: boolean) => void;
+ typeOfComment: TypeOfComment;
+};
+
+const CommentsContainer: React.FC<CommentsContainerProps> = ({
+ screenType,
+ moment_id,
+ setCommentsLength,
+ newCommentsAvailable,
+ setNewCommentsAvailable,
+ typeOfComment,
+}) => {
+ const [commentsList, setCommentsList] = useState<CommentType[]>([]);
+ const dispatch = useDispatch();
+ const ref = useRef<ScrollView>(null);
+
+ useEffect(() => {
+ const loadComments = async () => {
+ console.log(moment_id);
+ const comments = await getMomentComments(moment_id);
+ setCommentsList(comments);
+ if (setCommentsLength) {
+ setCommentsLength(comments.length);
+ }
+ console.log(comments);
+ setNewCommentsAvailable(false);
+ };
+ if (newCommentsAvailable) {
+ loadComments();
+ setTimeout(() => {
+ ref.current?.scrollToEnd({
+ animated: true,
+ });
+ }, 500);
+ }
+ }, [
+ dispatch,
+ moment_id,
+ newCommentsAvailable,
+ setNewCommentsAvailable,
+ setCommentsLength,
+ ]);
+
+ return (
+ <ScrollView
+ ref={ref}
+ style={styles.scrollView}
+ contentContainerStyle={styles.scrollViewContent}>
+ {commentsList &&
+ commentsList.map((comment: CommentType) => (
+ <CommentTile
+ key={comment.comment_id}
+ comment_object={comment}
+ screenType={screenType}
+ typeOfComment={typeOfComment}
+ />
+ ))}
+ </ScrollView>
+ );
+};
+
+const styles = StyleSheet.create({
+ scrollView: {
+ paddingHorizontal: 20,
+ },
+ scrollViewContent: {
+ justifyContent: 'center',
+ },
+});
+
+export default CommentsContainer;