Skip to content

Commit a6c69b7

Browse files
user search added
1 parent 1a848ca commit a6c69b7

File tree

18 files changed

+654
-103
lines changed

18 files changed

+654
-103
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import React from 'react';
2+
import {StyleSheet, View, TouchableOpacity} from 'react-native';
3+
import {UserInterface} from '../../../models/User/User';
4+
import {Text} from '@ui-kitten/components';
5+
import FastImage from 'react-native-fast-image';
6+
import {DEFAULT_AVATAR} from '../../../constants/Images/Images';
7+
import {RALEWAY_BOLD, RALEWAY_REGULAR} from '../../../constants/Fonts/Fonts';
8+
9+
interface props {
10+
user: UserInterface;
11+
onPress: () => void;
12+
}
13+
14+
const UserSerchCard = ({user, onPress}: props) => {
15+
return (
16+
<TouchableOpacity style={styles.main} onPress={onPress}>
17+
<View style={styles.imgView}>
18+
<FastImage
19+
source={{uri: user.photoURL ? user.photoURL : DEFAULT_AVATAR}}
20+
style={{flex: 1, height: 50, width: 50, borderRadius: 30}}
21+
/>
22+
</View>
23+
<View style={styles.content}>
24+
<Text style={styles.name}>{user.name ? user.name : 'Robot'}</Text>
25+
<Text style={styles.tagLine}>
26+
{user.tagLine ? user.tagLine : 'Baithak user'}
27+
</Text>
28+
</View>
29+
</TouchableOpacity>
30+
);
31+
};
32+
33+
const styles = StyleSheet.create({
34+
main: {
35+
flex: 1,
36+
flexDirection: 'row',
37+
},
38+
imgView: {
39+
justifyContent: 'center',
40+
alignItems: 'center',
41+
flex: 1,
42+
},
43+
content: {
44+
flex: 4,
45+
justifyContent: 'center',
46+
paddingHorizontal: 10,
47+
// borderBottomWidth: 0.3,
48+
// borderColor: 'grey',
49+
// paddingBottom: 15,
50+
},
51+
name: {
52+
fontFamily: RALEWAY_BOLD,
53+
},
54+
tagLine: {
55+
fontFamily: RALEWAY_REGULAR,
56+
color: 'grey',
57+
},
58+
});
59+
60+
export default UserSerchCard;

src/components/Headers/GeneralHeader/GeneralHeader.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@ interface props {
2020
onPressLeft: () => void;
2121
onPressRight?: () => void;
2222
rightIcon?: string;
23+
onPressSearch: () => void;
2324
}
2425
const GeneralHeader: FC<props> = ({
2526
firebaseUser,
2627
heading,
2728
rightIcon,
2829
onPressLeft,
2930
onPressRight,
31+
onPressSearch,
3032
}) => {
3133
const theme = useTheme();
3234
const appTheme = useSelector(
@@ -76,7 +78,7 @@ const GeneralHeader: FC<props> = ({
7678
)}
7779
</View>
7880
<View style={styles.searchBarView}>
79-
<ShowSearchBar theme={appTheme} onPress={() => console.log('Search')} />
81+
<ShowSearchBar theme={appTheme} onPress={onPressSearch} />
8082
</View>
8183
</View>
8284
);

src/components/Icons/Icons.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ export const PhoneIcon = (style: any) => (
1717
<Icon {...style} name="phone-outline" />
1818
);
1919

20+
export const SearchIcon = (style: any) => (
21+
<Icon {...style} name="search-outline" />
22+
);
23+
2024
export const PlusIcon = (style: any) => <Icon {...style} name="plus" />;
2125

2226
export const PasswordIcon = (style: any) => (

src/components/SearchBar/ShowSearchBar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const ShowSearchBar = (props: props) => {
3636

3737
const themedStyles = StyleSheet.create({
3838
main: {
39-
borderRadius: 30,
39+
borderRadius: 10,
4040
padding: 8,
4141
paddingLeft: 10,
4242
flexDirection: 'row',
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import React from 'react';
2+
import {StyleSheet, Text, View} from 'react-native';
3+
import {Input} from '@ui-kitten/components';
4+
import {RALEWAY_MEDIUM} from '../../constants/Fonts/Fonts';
5+
import {SearchIcon} from '../Icons/Icons';
6+
7+
interface props {
8+
query: string;
9+
handleQuery: (text: string) => void;
10+
placeholder: string;
11+
style: any;
12+
autoFocus: boolean;
13+
}
14+
15+
const UserSearchBar = ({
16+
query,
17+
handleQuery,
18+
placeholder,
19+
style,
20+
autoFocus,
21+
}: props) => {
22+
return (
23+
<Input
24+
textStyle={{fontFamily: RALEWAY_MEDIUM}}
25+
style={[styles.input, style]}
26+
status="basic"
27+
placeholder={placeholder}
28+
keyboardType="default"
29+
accessoryLeft={SearchIcon}
30+
value={query}
31+
onChangeText={(text) => handleQuery(text)}
32+
size="large"
33+
autoFocus={autoFocus}
34+
/>
35+
);
36+
};
37+
38+
const styles = StyleSheet.create({
39+
input: {},
40+
});
41+
42+
export default UserSearchBar;

src/constants/Navigation/Navigation.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,6 @@ export const PROFILE_SCREEN = 'PROFILE_SCREEN';
1313
export const CREATE_MEET_SCREEN = 'CREATE_MEET_SCREEN';
1414
export const JOIN_MEET_SCREEN = 'JOIN_MEET_SCREEN';
1515
export const VIDEO_STREAM = 'VIDEO_STREAM';
16+
export const EDIT_PROFILE_SCREEN = 'EDIT_PROFILE_SCREEN';
17+
export const USER_SEARCH_SCREEN = 'USER_SEARCH_SCREEN';
18+
export const REMOTE_USER_SEARCH_SCREEN = 'REMOTE_USER_SEARCH_SCREEN';
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import {useEffect, useState} from 'react';
2+
import Toast from 'react-native-toast-message';
3+
import {FAIL} from '../../constants/RemoteStates/remotestates';
4+
import {defaultUser, UserInterface} from '../../models/User/User';
5+
import {updateFirebaseUserStatus} from '../../store/User/actionCreator/addFirebaseUser';
6+
import {getRemoteUser} from '../../utils/User/Methods/getRemoteUser';
7+
import auth from '@react-native-firebase/auth';
8+
import {useDispatch} from 'react-redux';
9+
import {generalErrorN} from '../../components/Alerts/GeneralError';
10+
import {readAsync} from '../../utils/Firestore/read';
11+
12+
const useGetUserForProfile = (uid: string) => {
13+
const [loading, setLoading] = useState<boolean>(true);
14+
const [user, setUser] = useState<UserInterface>(defaultUser);
15+
const [settingOpen, toggleSetting] = useState<boolean>(false);
16+
17+
useEffect(() => {
18+
const fetchUser = async () => {
19+
try {
20+
setLoading(true);
21+
const localUser = await readAsync('users', uid);
22+
localUser && setUser(localUser as UserInterface);
23+
setLoading(false);
24+
} catch (error) {
25+
console.log('Eror in profile fecthing', error);
26+
setLoading(false);
27+
Toast.show({
28+
type: 'error',
29+
position: 'top',
30+
text1: 'Something went wrong 😔',
31+
text2: 'Please try again!!',
32+
});
33+
}
34+
};
35+
36+
fetchUser();
37+
}, [uid]);
38+
39+
const storeDispatch = useDispatch();
40+
41+
const signOut = async () => {
42+
try {
43+
await auth().signOut();
44+
Toast.show({
45+
type: 'success',
46+
position: 'top',
47+
text1: 'Great Success✌',
48+
text2: 'You have successfully logout ',
49+
});
50+
storeDispatch(updateFirebaseUserStatus(FAIL));
51+
} catch (err) {
52+
Toast.show({
53+
type: 'error',
54+
position: 'top',
55+
text1: 'Something went wrong 😔',
56+
text2: 'Please try again!!',
57+
});
58+
storeDispatch(updateFirebaseUserStatus(FAIL));
59+
console.log('Error in log out', err);
60+
}
61+
};
62+
63+
const onSignOut = async () => {
64+
generalErrorN(
65+
{
66+
title: 'Log Out',
67+
textMessage: 'Are you sure you want to logout',
68+
okText: 'Yes',
69+
},
70+
[
71+
{
72+
text: 'No',
73+
onPress: () => {},
74+
},
75+
{
76+
text: 'Yes',
77+
onPress: signOut,
78+
},
79+
],
80+
);
81+
};
82+
83+
const onClickSettings = () => {
84+
toggleSetting(!settingOpen);
85+
};
86+
87+
return {
88+
loading,
89+
user,
90+
onSignOut,
91+
settingOpen,
92+
onClickSettings,
93+
};
94+
};
95+
96+
export default useGetUserForProfile;

src/hooks/User/useGetUsers.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import {useEffect, useState} from 'react';
2+
import {UserInterface} from '../../models/User/User';
3+
import firestore from '@react-native-firebase/firestore';
4+
5+
const useGetUsers = () => {
6+
const [users, setUsers] = useState<UserInterface[]>();
7+
const [filteredUsers, setFilteredUsers] = useState<UserInterface[]>();
8+
const [loading, setLoading] = useState<boolean>(true);
9+
const [query, setQuery] = useState<string>('');
10+
11+
useEffect(() => {
12+
const subscriber = firestore()
13+
.collection('users')
14+
.onSnapshot((querySnapshot) => {
15+
const localUsers: UserInterface[] = [];
16+
for (const doc of querySnapshot.docs) {
17+
doc.exists && localUsers.push(doc.data() as UserInterface);
18+
}
19+
setUsers(localUsers);
20+
setFilteredUsers(localUsers);
21+
setLoading(false);
22+
});
23+
24+
return () => subscriber();
25+
}, []);
26+
27+
const handleQuery = (text: string) => {
28+
const filterUsers = users?.filter((user) => {
29+
return user.name
30+
? user.name.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) !== -1
31+
: false;
32+
});
33+
setFilteredUsers(filterUsers);
34+
setQuery(text);
35+
};
36+
37+
return {
38+
filteredUsers,
39+
loading,
40+
query,
41+
handleQuery,
42+
};
43+
};
44+
45+
export default useGetUsers;

src/hooks/auth/useAuth.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ const useAuth = () => {
6969
user.uid,
7070
Platform.OS,
7171
user.displayName ? user.displayName : 'Robot',
72-
user.phoneNumber ? user.phoneNumber : DEFAULT_AVATAR,
72+
user.phoneNumber ? user.phoneNumber : undefined,
7373
user.email ? user.email : '[email protected]',
74-
user.photoURL ? user.photoURL : '',
74+
user.photoURL ? user.photoURL : DEFAULT_AVATAR,
7575
);
7676
}
7777

src/navigation/MainStackNavigator/MainStackNavigator.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,20 @@ import {createStackNavigator} from '@react-navigation/stack';
33
import MainTabNavigator from '../MainTabNavigator/MainTabNavigator';
44
import {
55
CREATE_MEET_SCREEN,
6+
EDIT_PROFILE_SCREEN,
67
JOIN_MEET_SCREEN,
78
MAIN_TAB,
9+
REMOTE_USER_SEARCH_SCREEN,
10+
USER_SEARCH_SCREEN,
811
VIDEO_STREAM,
912
} from '../../constants/Navigation/Navigation';
1013
import CreateMeetScreen from '../../screens/Meeting/CreateMeetScreen/CreateMeetScreen';
1114
import JoinMeetScreen from '../../screens/Meeting/JoinMeetScreen/JoinMeetScreen';
1215
import VideoStream from '../../screens/Meeting/VideoStream/VideoStream';
16+
import EditProfileScreen from '../../screens/ProfileScreen/EditProfileScreen';
17+
import UserSearchScreen from '../../screens/Search/UserSearch/UserSearchScreen';
18+
import ProfileScreen from '../../screens/ProfileScreen/ProfileScreen';
19+
import RemoteProfileScreen from '../../screens/ProfileScreen/RemoteProfileScreen';
1320

1421
const Stack = createStackNavigator();
1522

@@ -20,6 +27,12 @@ const MainStackNavigator = () => {
2027
<Stack.Screen name={CREATE_MEET_SCREEN} component={CreateMeetScreen} />
2128
<Stack.Screen name={JOIN_MEET_SCREEN} component={JoinMeetScreen} />
2229
<Stack.Screen name={VIDEO_STREAM} component={VideoStream} />
30+
<Stack.Screen name={EDIT_PROFILE_SCREEN} component={EditProfileScreen} />
31+
<Stack.Screen name={USER_SEARCH_SCREEN} component={UserSearchScreen} />
32+
<Stack.Screen
33+
name={REMOTE_USER_SEARCH_SCREEN}
34+
component={RemoteProfileScreen}
35+
/>
2336
</Stack.Navigator>
2437
);
2538
};

0 commit comments

Comments
 (0)