import {RouteProp} from '@react-navigation/native'; import {StackNavigationProp} from '@react-navigation/stack'; import React, {Fragment, useRef, useState} from 'react'; import { Alert, Image, Keyboard, KeyboardAvoidingView, Platform, StyleSheet, // Text, TouchableWithoutFeedback, View, } from 'react-native'; import {MentionInput} from 'react-native-controlled-mentions'; import {Button} from 'react-native-elements'; import {useDispatch, useSelector} from 'react-redux'; import {SearchBackground} from '../../components'; import {CaptionScreenHeader} from '../../components/'; // import Draggable from '../../components/common/Draggable'; import TaggLoadingIndicator from '../../components/common/TaggLoadingIndicator'; // import TaggDraggable from '../../components/taggs/TaggDraggable'; import {TAGG_LIGHT_BLUE_2} from '../../constants'; import {ERROR_UPLOAD, SUCCESS_PIC_UPLOAD} from '../../constants/strings'; import {MainStackParams} from '../../routes'; import {postMoment} from '../../services'; import { loadUserMoments, updateProfileCompletionStage, } from '../../store/actions'; import {RootState} from '../../store/rootReducer'; import {SCREEN_WIDTH, StatusBarHeight} from '../../utils'; import {mentionPartTypes} from '../../utils/comments'; // import {TouchableOpacity} from 'react-native-gesture-handler'; /** * Upload Screen to allow users to upload posts to Tagg */ type CaptionScreenRouteProp = RouteProp; type CaptionScreenNavigationProp = StackNavigationProp< MainStackParams, 'CaptionScreen' >; interface CaptionScreenProps { route: CaptionScreenRouteProp; navigation: CaptionScreenNavigationProp; } interface momentTag { userID: string; username: string; xLocation: number; yLocation: number; } const CaptionScreen: React.FC = ({route, navigation}) => { const {title, image, screenType} = route.params; const { user: {userId}, } = useSelector((state: RootState) => state.user); const dispatch = useDispatch(); const [caption, setCaption] = useState(''); const [loading, setLoading] = useState(false); // const [isTop, setIsTop] = useState(false); const imageRef = useRef(null); // const zIndex = [0, 999]; // const [offset, setOffset] = useState([0, 0]); // const [curStart, setCurStart] = useState([0, 0]); // const [imageDimensions, setImageDimensions] = useState([0, 0]); // created a state variable to keep track of every tag // idea is that each element in the list // const [taggList, setTaggList] = useState([ // { // first_name: 'Ivan', // id: 'cee45bf8-7f3d-43c8-99bb-ec04908efe58', // last_name: 'Chen', // thumbnail_url: // 'https://tagg-dev.s3.us-east-2.amazonaws.com/thumbnails/smallProfilePicture/spp-cee45bf8-7f3d-43c8-99bb-ec04908efe58-thumbnail.jpg', // username: 'ivan.tagg', // }, // { // first_name: 'Ankit', // id: '3bcf6947-bee6-46b0-ad02-6f4d25eaeac3', // last_name: 'Thanekar', // thumbnail_url: // 'https://tagg-dev.s3.us-east-2.amazonaws.com/thumbnails/smallProfilePicture/spp-3bcf6947-bee6-46b0-ad02-6f4d25eaeac3-thumbnail.jpg', // username: 'ankit.thanekar', // }, // ]); // state variables used to position draggables // state var used to keep track of draggable z ordering // const [layerOrder, setLayerOrder] = useState([]); // created a test user - BUG - failed to register a profile visit - // const testUser: UserType = { // userId: 'ID-1234-567', // username: 'dragonofthewest', // }; const navigateToProfile = () => { //Since the logged In User is navigating to own profile, useXId is not required navigation.navigate('Profile', { screenType, userXId: undefined, }); }; /** * Helper function that we use to keep track of which element should be on top most layer * @param index */ // const bringToFront = (index: number) => { // let currUser = taggList[index].id; // if (layerOrder.includes(currUser)) { // layerOrder.splice(layerOrder.indexOf(currUser), 1); // } // layerOrder.push(currUser); // setLayerOrder(layerOrder); // }; /** * Helper function that tells us if the current draggable is the topmost one. * @param index */ // const isOnTop = (index: number) => { // let currUser = taggList[index].id; // return currUser === layerOrder[0]; // }; /** * function that sets the initial position of each newly created tag * @returns */ /** * need a handler to take care of creating a tagged user object, append that object to the taggList state variable. * @returns */ // useEffect(() => { // imageRef.current.measure((fx, fy, width, height, px, py) => { // console.log('Component width is: ' + width); // console.log('Component height is: ' + height); // console.log('X offset to frame: ' + fx); // console.log('Y offset to frame: ' + fy); // console.log('X offset to page: ' + px); // console.log('Y offset to page: ' + py); // setOffset([px, py]); // setImageDimensions([width, height]); // }); // }, []); const handleShare = async () => { setLoading(true); if (!image.filename) { return; } postMoment(image.filename, image.path, caption, title, userId).then( (data) => { setLoading(false); if (data) { dispatch(loadUserMoments(userId)); dispatch(updateProfileCompletionStage(data)); navigateToProfile(); setTimeout(() => { Alert.alert(SUCCESS_PIC_UPLOAD); }, 500); } else { setTimeout(() => { Alert.alert(ERROR_UPLOAD); }, 500); } }, ); }; return ( {loading ? : }