aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/friends/InviteFriendTile.tsx136
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>