import React, {useEffect, useState} from 'react'; import { Alert, Linking, StyleSheet, Text, TouchableOpacity, TouchableWithoutFeedback, View, } from 'react-native'; import {useSelector} from 'react-redux'; import {RootState} from 'src/store/rootReducer'; import {TAGG_LIGHT_BLUE} from '../../constants'; import { ERROR_NO_CONTACT_INVITE_LEFT, ERROR_SOMETHING_WENT_WRONG, INVITE_USER_SMS_BODY, SUCCESS_CONFIRM_INVITE_CONTACT_MESSAGE, SUCCESS_CONFIRM_INVITE_CONTACT_TITLE, SUCCESS_LAST_CONTACT_INVITE, } from '../../constants/strings'; import {InviteContactType} from '../../screens/profile/InviteFriendsScreen'; import { getRemainingInviteCount, handleCreateInviteCode, inviteFriendService, } from '../../services'; import {normalize} from '../../utils'; interface InviteFriendTileProps { item: InviteContactType; } const InviteFriendTile: React.FC = ({item}) => { const [invited, setInvited] = useState(false); const {name} = useSelector((state: RootState) => state.user.profile); const [formatedPhoneNumber, setFormattedPhoneNumber] = useState(''); const handleInviteFriend = async () => { const invites_left = await getRemainingInviteCount(); if (invites_left > 0) { Alert.alert( SUCCESS_CONFIRM_INVITE_CONTACT_TITLE(invites_left), SUCCESS_CONFIRM_INVITE_CONTACT_MESSAGE, [ {text: 'No!', style: 'cancel'}, { text: 'Yes!', onPress: async () => { setInvited(true); const inviteCode = await handleCreateInviteCode(); await inviteFriendService( item.phoneNumber, item.firstName, item.lastName, ); Linking.openURL( `sms:${item.phoneNumber}&body=${INVITE_USER_SMS_BODY( item.firstName, name, inviteCode, )}`, ); if (invites_left === 1) { Alert.alert(SUCCESS_LAST_CONTACT_INVITE); } }, }, ], ); } else if (invites_left === -1 || invites_left === 0) { Alert.alert(ERROR_NO_CONTACT_INVITE_LEFT); } else { Alert.alert(ERROR_SOMETHING_WENT_WRONG); } }; useEffect(() => { const formatPhoneNumer = () => { const unformatted_number: string = item.phoneNumber; const part_one: string = unformatted_number.substring(2, 5); const part_two: string = unformatted_number.substring(5, 8); const part_three: string = unformatted_number.substring( 8, unformatted_number.length, ); const temp = '(' + part_one + ')' + part_two + '-' + part_three; setFormattedPhoneNumber(temp); }; formatPhoneNumer(); }); return ( {item.firstName + ' ' + item.lastName} {formatedPhoneNumber} {invited ? 'Pending' : 'Invite'} ); }; const styles = StyleSheet.create({ container: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', height: normalize(42), marginBottom: '5%', }, bodyContainer: { flexDirection: 'column', height: normalize(42), justifyContent: 'space-around', }, label: { fontWeight: '500', fontSize: normalize(14), }, phoneNumber: { fontSize: normalize(12), fontWeight: '400', color: '#6C6C6C', letterSpacing: normalize(0.1), }, button: { alignSelf: 'center', justifyContent: 'center', alignItems: 'center', width: 82, height: 25, borderWidth: 2, borderRadius: 2, padding: 0, borderColor: TAGG_LIGHT_BLUE, }, pendingButton: { backgroundColor: TAGG_LIGHT_BLUE, }, inviteButton: { backgroundColor: 'transparent', }, buttonTitle: { padding: 0, fontSize: normalize(11), fontWeight: '700', lineHeight: normalize(13.13), letterSpacing: normalize(0.6), paddingHorizontal: '3.8%', }, pendingButtonTitle: { color: 'white', }, inviteButtonTitle: { color: TAGG_LIGHT_BLUE, }, }); export default InviteFriendTile;