aboutsummaryrefslogtreecommitdiff
path: root/src/components/friends/InviteFriendTile.tsx
diff options
context:
space:
mode:
authorIvan Chen <ivan@tagg.id>2021-05-20 15:40:07 -0400
committerGitHub <noreply@github.com>2021-05-20 15:40:07 -0400
commit8641391ac28e5a1b2ca513755a44b71ef3ee64e9 (patch)
tree055cc3bbac4ba0a0e75c60a24a517e799b3a96d8 /src/components/friends/InviteFriendTile.tsx
parentcddcfef3c32e08aedef1e4908bd477e45bef1974 (diff)
parent6556b1dd10d89f56153829cd8651caa86b28218e (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.tsx108
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>