import { RouteProp, useFocusEffect, useNavigation, } from '@react-navigation/native'; import React, {useCallback, useEffect, useState} from 'react'; import {StyleSheet, View} from 'react-native'; import {SafeAreaView} from 'react-native-safe-area-context'; import {TabsGradient} from '../../components'; import {AddComment} from '../../components/'; import CommentsContainer from '../../components/comments/CommentsContainer'; import {ADD_COMMENT_TEXT} from '../../constants/strings'; import {headerBarOptions, MainStackParams} from '../../routes/main'; import {CommentThreadType, CommentType} from '../../types'; import {HeaderHeight, SCREEN_HEIGHT, SCREEN_WIDTH} from '../../utils'; /** * Comments Screen for an image uploaded * Displays all comments for a particular moment uploaded by the user followed by a text area to add the comment. * Comment is posted when return is pressed on the keypad. */ type MomentCommentsScreenRouteProps = RouteProp< MainStackParams, 'MomentCommentsScreen' >; interface MomentCommentsScreenProps { route: MomentCommentsScreenRouteProps; } type MomentCommentContextType = { commentTapped: CommentType | CommentThreadType | undefined; setCommentTapped: ( comment: CommentType | CommentThreadType | undefined, ) => void; shouldUpdateAllComments: boolean; setShouldUpdateAllComments: (available: boolean) => void; }; export const CommentContext = React.createContext( {} as MomentCommentContextType, ); const MomentCommentsScreen: React.FC = ({route}) => { const navigation = useNavigation(); const {moment_id, screenType, comment_id} = route.params; //Receives comment length from child CommentsContainer const [commentsLength, setCommentsLength] = useState(0); const [shouldUpdateAllComments, setShouldUpdateAllComments] = React.useState(true); //Keeps track of the current comments object in focus so that the application knows which comment to post a reply to const [commentTapped, setCommentTapped] = useState< CommentType | CommentThreadType | undefined >(); useFocusEffect( useCallback(() => { navigation.dangerouslyGetParent()?.setOptions({ tabBarVisible: false, }); return () => { navigation.dangerouslyGetParent()?.setOptions({ tabBarVisible: true, }); }; }, [navigation]), ); useEffect(() => { navigation.setOptions({ ...headerBarOptions('black', `${commentsLength} Comments`), }); }, [commentsLength, navigation]); return ( ); }; const styles = StyleSheet.create({ background: { backgroundColor: 'white', height: '100%', }, body: { marginTop: HeaderHeight, width: SCREEN_WIDTH * 0.95, height: SCREEN_HEIGHT * 0.8, paddingTop: '3%', }, }); export default MomentCommentsScreen;