diff options
Diffstat (limited to 'src/components')
-rw-r--r-- | src/components/friends/InviteFriendTile.tsx | 142 |
1 files changed, 97 insertions, 45 deletions
diff --git a/src/components/friends/InviteFriendTile.tsx b/src/components/friends/InviteFriendTile.tsx index 355b88e8..50085f98 100644 --- a/src/components/friends/InviteFriendTile.tsx +++ b/src/components/friends/InviteFriendTile.tsx @@ -19,62 +19,115 @@ import { SUCCESS_CONFIRM_INVITE_CONTACT_TITLE, SUCCESS_LAST_CONTACT_INVITE, } from '../../constants/strings'; -import {InviteContactType} from '../../screens/profile/InviteFriendsScreen'; import { - getRemainingInviteCount, - handleCreateInviteCode, - inviteFriendService, -} from '../../services'; + InviteContactType, + SearchResultType, +} from '../../screens/profile/InviteFriendsScreen'; +import {getRemainingInviteCount, inviteFriendService} from '../../services'; import {normalize} from '../../utils'; interface InviteFriendTileProps { item: InviteContactType; + remind: boolean; + results: SearchResultType; + setResults: Function; } -const InviteFriendTile: React.FC<InviteFriendTileProps> = ({item}) => { - const [invited, setInvited] = useState<boolean>(false); +const InviteFriendTile: React.FC<InviteFriendTileProps> = ({ + item, + remind, + results, + setResults, +}) => { + const [invited, setInvited] = useState<boolean>(remind); const {name} = useSelector((state: RootState) => state.user.profile); const [formatedPhoneNumber, setFormattedPhoneNumber] = useState<string>(''); + 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 () => { - const success = await inviteFriendService( - item.phoneNumber, - item.firstName, - item.lastName, - ); - if (success) { - const inviteCode = await handleCreateInviteCode(); - setInvited(true); - Linking.openURL( - `sms:${item.phoneNumber}&body=${INVITE_USER_SMS_BODY( - item.firstName, - name, - inviteCode, - )}`, + // If user has been invited already, don't show alerts and change invite count + if (invited) { + const response = await inviteFriendService( + item.phoneNumber, + item.firstName, + item.lastName, + true, + ); + const inviteCode = response?.invite_code; + if (inviteCode) { + Linking.openURL( + `sms:${item.phoneNumber}&body=${INVITE_USER_SMS_BODY( + item.firstName, + name, + inviteCode, + )}`, + ); + } + } else { + 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 () => { + const response = await inviteFriendService( + item.phoneNumber, + item.firstName, + item.lastName, + false, ); - if (invites_left === 1) { - Alert.alert(SUCCESS_LAST_CONTACT_INVITE); + const inviteCode = response?.invite_code; + if (inviteCode) { + // Add user to Pending Users list + const newPendingUser: InviteContactType = { + phoneNumber: item.phoneNumber, + firstName: item.firstName, + lastName: item.lastName, + }; + + // Filtering user from nonUsersFromContacts list + const filteredNonUsers = results.nonUsersFromContacts.filter( + (user: InviteContactType) => + user.phoneNumber !== item.phoneNumber, + ); + + // Open iMessages + Linking.openURL( + `sms:${item.phoneNumber}&body=${INVITE_USER_SMS_BODY( + item.firstName, + name, + inviteCode, + )}`, + ); + + // Update results after navigating out of the app + setTimeout(() => { + setInvited(true); + setResults({ + ...results, + pendingUsers: [...results.pendingUsers, newPendingUser], + nonUsersFromContacts: filteredNonUsers, + }); + }, 500); + + if (invites_left === 1) { + Alert.alert(SUCCESS_LAST_CONTACT_INVITE); + } + } else { + Alert.alert(ERROR_SOMETHING_WENT_WRONG); } - } else { - Alert.alert(ERROR_SOMETHING_WENT_WRONG); - } + }, }, - }, - ], - ); - } else if (invites_left === -1 || invites_left === 0) { - Alert.alert(ERROR_NO_CONTACT_INVITE_LEFT); - } else { - Alert.alert(ERROR_SOMETHING_WENT_WRONG); + ], + ); + } else if (invites_left === -1 || invites_left === 0) { + Alert.alert(ERROR_NO_CONTACT_INVITE_LEFT); + } else { + Alert.alert(ERROR_SOMETHING_WENT_WRONG); + } } }; @@ -103,7 +156,6 @@ const InviteFriendTile: React.FC<InviteFriendTileProps> = ({item}) => { <Text style={styles.phoneNumber}>{formatedPhoneNumber}</Text> </View> <TouchableOpacity - disabled={invited} style={[ styles.button, invited ? styles.pendingButton : styles.inviteButton, @@ -114,7 +166,7 @@ const InviteFriendTile: React.FC<InviteFriendTileProps> = ({item}) => { styles.buttonTitle, invited ? styles.pendingButtonTitle : styles.inviteButtonTitle, ]}> - {invited ? 'Pending' : 'Invite'} + {invited ? 'Remind' : 'Invite'} </Text> </TouchableOpacity> </View> |