diff options
author | Shravya Ramesh <shravs1208@gmail.com> | 2021-05-14 13:49:48 -0700 |
---|---|---|
committer | Shravya Ramesh <shravs1208@gmail.com> | 2021-05-14 13:49:48 -0700 |
commit | e08e775264538d337d084319542871a411ca218d (patch) | |
tree | ab43fa9f150a6f0fcd6ea6b3f0db8e3dd3f7fdba | |
parent | 5c01225acf5aa4c5be3b4638779d1f766c054eca (diff) |
Added functionality to remind users
-rw-r--r-- | src/components/friends/InviteFriendTile.tsx | 136 |
1 files changed, 95 insertions, 41 deletions
diff --git a/src/components/friends/InviteFriendTile.tsx b/src/components/friends/InviteFriendTile.tsx index abd017d0..617ec203 100644 --- a/src/components/friends/InviteFriendTile.tsx +++ b/src/components/friends/InviteFriendTile.tsx @@ -19,58 +19,113 @@ 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 () => { - 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); - } - }, - }, - ], + // 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, ); - } else if (invites_left === -1 || invites_left === 0) { - Alert.alert(ERROR_NO_CONTACT_INVITE_LEFT); + const inviteCode = response?.invite_code; + if (inviteCode) { + Linking.openURL( + `sms:${item.phoneNumber}&body=${INVITE_USER_SMS_BODY( + item.firstName, + name, + inviteCode, + )}`, + ); + } } else { - Alert.alert(ERROR_SOMETHING_WENT_WRONG); + 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, + ); + 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 if (invites_left === -1 || invites_left === 0) { + Alert.alert(ERROR_NO_CONTACT_INVITE_LEFT); + } else { + Alert.alert(ERROR_SOMETHING_WENT_WRONG); + } } }; @@ -99,7 +154,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, @@ -110,7 +164,7 @@ const InviteFriendTile: React.FC<InviteFriendTileProps> = ({item}) => { styles.buttonTitle, invited ? styles.pendingButtonTitle : styles.inviteButtonTitle, ]}> - {invited ? 'Pending' : 'Invite'} + {invited ? 'Remind' : 'Invite'} </Text> </TouchableOpacity> </View> |