diff options
author | Ivan Chen <ivan@tagg.id> | 2021-05-20 15:40:07 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-20 15:40:07 -0400 |
commit | 8641391ac28e5a1b2ca513755a44b71ef3ee64e9 (patch) | |
tree | 055cc3bbac4ba0a0e75c60a24a517e799b3a96d8 /src/components/friends/InviteFriendTile.tsx | |
parent | cddcfef3c32e08aedef1e4908bd477e45bef1974 (diff) | |
parent | 6556b1dd10d89f56153829cd8651caa86b28218e (diff) |
Merge pull request #425 from shravyaramesh/tma858-remind-users
[TMA-858] Pending Users
Diffstat (limited to 'src/components/friends/InviteFriendTile.tsx')
-rw-r--r-- | src/components/friends/InviteFriendTile.tsx | 108 |
1 files changed, 78 insertions, 30 deletions
diff --git a/src/components/friends/InviteFriendTile.tsx b/src/components/friends/InviteFriendTile.tsx index 355b88e8..48f65a94 100644 --- a/src/components/friends/InviteFriendTile.tsx +++ b/src/components/friends/InviteFriendTile.tsx @@ -19,25 +19,54 @@ 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) { + // 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 < 1) { + Alert.alert(ERROR_NO_CONTACT_INVITE_LEFT); + } Alert.alert( SUCCESS_CONFIRM_INVITE_CONTACT_TITLE(invites_left), SUCCESS_CONFIRM_INVITE_CONTACT_MESSAGE, @@ -46,35 +75,55 @@ const InviteFriendTile: React.FC<InviteFriendTileProps> = ({item}) => { { text: 'Yes!', onPress: async () => { - const success = await inviteFriendService( + const response = await inviteFriendService( item.phoneNumber, item.firstName, item.lastName, + false, ); - if (success) { - const inviteCode = await handleCreateInviteCode(); - setInvited(true); - 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 { + const inviteCode = response?.invite_code; + if (!inviteCode) { Alert.alert(ERROR_SOMETHING_WENT_WRONG); } + // 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 if (invites_left === -1 || invites_left === 0) { - Alert.alert(ERROR_NO_CONTACT_INVITE_LEFT); - } else { - Alert.alert(ERROR_SOMETHING_WENT_WRONG); } }; @@ -103,7 +152,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 +162,7 @@ const InviteFriendTile: React.FC<InviteFriendTileProps> = ({item}) => { styles.buttonTitle, invited ? styles.pendingButtonTitle : styles.inviteButtonTitle, ]}> - {invited ? 'Pending' : 'Invite'} + {invited ? 'Remind' : 'Invite'} </Text> </TouchableOpacity> </View> |