react-native-salespanda 0.5.3 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/README.md +50 -102
  2. package/android/build.gradle +15 -198
  3. package/package.json +3 -4
  4. package/lib/module/NativeSalespanda.js.map +0 -1
  5. package/lib/module/SalespandaApp.js.map +0 -1
  6. package/lib/module/assets/images/index.js.map +0 -1
  7. package/lib/module/components/BottomSheet.js.map +0 -1
  8. package/lib/module/components/ContactViaModal.js.map +0 -1
  9. package/lib/module/components/Loader.js.map +0 -1
  10. package/lib/module/components/ScreenHeader.js.map +0 -1
  11. package/lib/module/components/SearchBar.js.map +0 -1
  12. package/lib/module/components/TabsHeader.js.map +0 -1
  13. package/lib/module/components/index.js.map +0 -1
  14. package/lib/module/config/FlavorConfig.js.map +0 -1
  15. package/lib/module/config/SalespandaConfig.js.map +0 -1
  16. package/lib/module/constants/Colors.js.map +0 -1
  17. package/lib/module/constants/GetPlatorm.js.map +0 -1
  18. package/lib/module/index.js.map +0 -1
  19. package/lib/module/navigation/AppNavigator.js.map +0 -1
  20. package/lib/module/navigation/BottomTabNavigator.js.map +0 -1
  21. package/lib/module/navigation/DrawerNavigator.js.map +0 -1
  22. package/lib/module/navigation/StackNavigator.js.map +0 -1
  23. package/lib/module/screens/CRM/AddContactModal.js.map +0 -1
  24. package/lib/module/screens/CRM/CategoryTabs.js.map +0 -1
  25. package/lib/module/screens/CRM/ContactItem.js.map +0 -1
  26. package/lib/module/screens/CRM/FilterDropdown.js.map +0 -1
  27. package/lib/module/screens/CRM/FunnelChart.js.map +0 -1
  28. package/lib/module/screens/CRM/InfoCard.js.map +0 -1
  29. package/lib/module/screens/CRM/LeadCard.js.map +0 -1
  30. package/lib/module/screens/CRM/LogCallScreen.js.map +0 -1
  31. package/lib/module/screens/CRM/TopTabs.js.map +0 -1
  32. package/lib/module/screens/CRM/index.js.map +0 -1
  33. package/lib/module/screens/ReportsScreen.js.map +0 -1
  34. package/lib/module/screens/Tabs/ActivityAnalytics.js.map +0 -1
  35. package/lib/module/screens/Tabs/CRMScreen.js.map +0 -1
  36. package/lib/module/screens/Tabs/DigitalDiary.js.map +0 -1
  37. package/lib/module/screens/Tabs/HomeScreen.js.map +0 -1
  38. package/lib/module/screens/Tabs/NotificationsScreen.js.map +0 -1
  39. package/lib/module/screens/contentliberary/contentliberary.js.map +0 -1
  40. package/lib/module/services/api.js.map +0 -1
  41. package/lib/module/services/authService.js.map +0 -1
  42. package/lib/module/store/index.js.map +0 -1
  43. package/lib/typescript/src/NativeSalespanda.d.ts.map +0 -1
  44. package/lib/typescript/src/SalespandaApp.d.ts.map +0 -1
  45. package/lib/typescript/src/assets/images/index.d.ts.map +0 -1
  46. package/lib/typescript/src/components/BottomSheet.d.ts.map +0 -1
  47. package/lib/typescript/src/components/ContactViaModal.d.ts.map +0 -1
  48. package/lib/typescript/src/components/Loader.d.ts.map +0 -1
  49. package/lib/typescript/src/components/ScreenHeader.d.ts.map +0 -1
  50. package/lib/typescript/src/components/SearchBar.d.ts.map +0 -1
  51. package/lib/typescript/src/components/TabsHeader.d.ts.map +0 -1
  52. package/lib/typescript/src/components/index.d.ts.map +0 -1
  53. package/lib/typescript/src/config/FlavorConfig.d.ts.map +0 -1
  54. package/lib/typescript/src/config/SalespandaConfig.d.ts.map +0 -1
  55. package/lib/typescript/src/constants/Colors.d.ts.map +0 -1
  56. package/lib/typescript/src/constants/GetPlatorm.d.ts.map +0 -1
  57. package/lib/typescript/src/index.d.ts.map +0 -1
  58. package/lib/typescript/src/navigation/AppNavigator.d.ts.map +0 -1
  59. package/lib/typescript/src/navigation/BottomTabNavigator.d.ts.map +0 -1
  60. package/lib/typescript/src/navigation/DrawerNavigator.d.ts.map +0 -1
  61. package/lib/typescript/src/navigation/StackNavigator.d.ts.map +0 -1
  62. package/lib/typescript/src/screens/CRM/AddContactModal.d.ts.map +0 -1
  63. package/lib/typescript/src/screens/CRM/CategoryTabs.d.ts.map +0 -1
  64. package/lib/typescript/src/screens/CRM/ContactItem.d.ts.map +0 -1
  65. package/lib/typescript/src/screens/CRM/FilterDropdown.d.ts.map +0 -1
  66. package/lib/typescript/src/screens/CRM/FunnelChart.d.ts.map +0 -1
  67. package/lib/typescript/src/screens/CRM/InfoCard.d.ts.map +0 -1
  68. package/lib/typescript/src/screens/CRM/LeadCard.d.ts.map +0 -1
  69. package/lib/typescript/src/screens/CRM/LogCallScreen.d.ts.map +0 -1
  70. package/lib/typescript/src/screens/CRM/TopTabs.d.ts.map +0 -1
  71. package/lib/typescript/src/screens/CRM/index.d.ts.map +0 -1
  72. package/lib/typescript/src/screens/ReportsScreen.d.ts.map +0 -1
  73. package/lib/typescript/src/screens/Tabs/ActivityAnalytics.d.ts.map +0 -1
  74. package/lib/typescript/src/screens/Tabs/CRMScreen.d.ts.map +0 -1
  75. package/lib/typescript/src/screens/Tabs/DigitalDiary.d.ts.map +0 -1
  76. package/lib/typescript/src/screens/Tabs/HomeScreen.d.ts.map +0 -1
  77. package/lib/typescript/src/screens/Tabs/NotificationsScreen.d.ts.map +0 -1
  78. package/lib/typescript/src/screens/contentliberary/contentliberary.d.ts.map +0 -1
  79. package/lib/typescript/src/services/api.d.ts.map +0 -1
  80. package/lib/typescript/src/services/authService.d.ts.map +0 -1
  81. package/lib/typescript/src/store/index.d.ts.map +0 -1
  82. package/src/NativeSalespanda.ts +0 -7
  83. package/src/SalespandaApp.tsx +0 -141
  84. package/src/assets/images/bottomtabs/analytics.png +0 -0
  85. package/src/assets/images/bottomtabs/analyticsactive.png +0 -0
  86. package/src/assets/images/bottomtabs/crm.png +0 -0
  87. package/src/assets/images/bottomtabs/crmactive.png +0 -0
  88. package/src/assets/images/bottomtabs/diary.png +0 -0
  89. package/src/assets/images/bottomtabs/diaryactive.png +0 -0
  90. package/src/assets/images/bottomtabs/home.png +0 -0
  91. package/src/assets/images/bottomtabs/homeactive.png +0 -0
  92. package/src/assets/images/bottomtabs/notification.png +0 -0
  93. package/src/assets/images/bottomtabs/notificationactive.png +0 -0
  94. package/src/assets/images/index.js +0 -11
  95. package/src/assets/images/index.ts +0 -40
  96. package/src/components/BottomSheet.tsx +0 -146
  97. package/src/components/ContactViaModal.tsx +0 -80
  98. package/src/components/Loader.tsx +0 -48
  99. package/src/components/ScreenHeader.tsx +0 -57
  100. package/src/components/SearchBar.tsx +0 -59
  101. package/src/components/TabsHeader.tsx +0 -72
  102. package/src/components/index.ts +0 -5
  103. package/src/config/FlavorConfig.ts +0 -55
  104. package/src/config/SalespandaConfig.ts +0 -142
  105. package/src/constants/Colors.ts +0 -17
  106. package/src/constants/GetPlatorm.ts +0 -29
  107. package/src/index.tsx +0 -31
  108. package/src/navigation/AppNavigator.tsx +0 -24
  109. package/src/navigation/BottomTabNavigator.tsx +0 -181
  110. package/src/navigation/DrawerNavigator.tsx +0 -306
  111. package/src/navigation/StackNavigator.tsx +0 -32
  112. package/src/screens/CRM/AddContactModal.tsx +0 -57
  113. package/src/screens/CRM/CategoryTabs.tsx +0 -109
  114. package/src/screens/CRM/ContactItem.tsx +0 -168
  115. package/src/screens/CRM/FilterDropdown.tsx +0 -34
  116. package/src/screens/CRM/FunnelChart.tsx +0 -103
  117. package/src/screens/CRM/InfoCard.tsx +0 -51
  118. package/src/screens/CRM/LeadCard.tsx +0 -69
  119. package/src/screens/CRM/LogCallScreen.tsx +0 -318
  120. package/src/screens/CRM/TopTabs.tsx +0 -95
  121. package/src/screens/CRM/index.ts +0 -10
  122. package/src/screens/ReportsScreen.tsx +0 -37
  123. package/src/screens/Tabs/ActivityAnalytics.tsx +0 -25
  124. package/src/screens/Tabs/CRMScreen.tsx +0 -381
  125. package/src/screens/Tabs/DigitalDiary.tsx +0 -35
  126. package/src/screens/Tabs/HomeScreen.tsx +0 -379
  127. package/src/screens/Tabs/NotificationsScreen.tsx +0 -25
  128. package/src/screens/contentliberary/contentliberary.tsx +0 -268
  129. package/src/services/api.ts +0 -173
  130. package/src/services/authService.ts +0 -75
  131. package/src/store/index.ts +0 -16
@@ -1,306 +0,0 @@
1
- import * as React from 'react';
2
- import { createDrawerNavigator } from '@react-navigation/drawer';
3
- import {
4
- View,
5
- Text,
6
- StyleSheet,
7
- TouchableOpacity,
8
- Image,
9
- ScrollView,
10
- } from 'react-native';
11
- import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
12
- import BottomTabNavigator from './BottomTabNavigator';
13
- import { Colors } from '../constants/Colors';
14
- import ProfileScreen from '../screens/Tabs/ActivityAnalytics';
15
- import { GetPlatform } from '../constants/GetPlatorm';
16
-
17
- const Drawer = createDrawerNavigator();
18
-
19
- interface DrawerItemProps {
20
- label: string;
21
- onPress: () => void;
22
- active?: boolean;
23
- }
24
-
25
- const DrawerItem: React.FC<DrawerItemProps> = ({
26
- label,
27
- onPress,
28
- active = false,
29
- }) => {
30
- return (
31
- <TouchableOpacity
32
- style={[styles.drawerItem, active && styles.activeDrawerItem]}
33
- onPress={onPress}
34
- >
35
- <Text style={[styles.drawerLabel, active && styles.activeDrawerLabel]}>
36
- {label}
37
- </Text>
38
- </TouchableOpacity>
39
- );
40
- };
41
-
42
- interface CustomDrawerContentProps {
43
- navigation: any;
44
- state?: any;
45
- }
46
-
47
- const CustomDrawerContent: React.FC<CustomDrawerContentProps> = ({
48
- navigation,
49
- }) => {
50
- const [expanded, setExpanded] = React.useState<Record<string, boolean>>({
51
- 'Campaign': false,
52
- 'Sales WAR Room': false,
53
- 'Pipeline': false,
54
- });
55
- const toggle = (key: string) =>
56
- setExpanded((prev) => ({ ...prev, [key]: !prev[key] }));
57
-
58
- const groups: Array<{
59
- label: string;
60
- children?: Array<{ label: string; onPress: () => void }>;
61
- onPress?: () => void;
62
- }> = [
63
- { label: 'Content Library', onPress: () => {} },
64
- {
65
- label: 'Campaign',
66
- children: [
67
- { label: 'Run Campaign', onPress: () => {} },
68
- { label: 'List', onPress: () => {} },
69
- ],
70
- },
71
- { label: 'My Activity', onPress: () => {} },
72
- { label: 'DigiCard', onPress: () => {} },
73
- { label: 'My Profile', onPress: () => navigation.navigate('Profile') },
74
- {
75
- label: 'Sales WAR Room',
76
- children: [
77
- { label: 'Forms & Brochures', onPress: () => {} },
78
- { label: 'CXO Announcements', onPress: () => {} },
79
- { label: 'Training/Sales Content', onPress: () => {} },
80
- ],
81
- },
82
- { label: 'Tasks', onPress: () => {} },
83
- { label: 'Import Phone Contacts', onPress: () => {} },
84
- {
85
- label: 'Pipeline',
86
- children: [
87
- { label: 'Leads', onPress: () => {} },
88
- { label: 'Contacts', onPress: () => {} },
89
- { label: 'Email Activity', onPress: () => {} },
90
- ],
91
- },
92
- { label: 'Notification', onPress: () => {} },
93
- { label: 'Settings', onPress: () => {} },
94
- { label: 'Help & Support', onPress: () => {} },
95
- ];
96
-
97
- return (
98
- <View style={styles.drawerContainer}>
99
- <ScrollView
100
- style={styles.drawerContent}
101
- showsVerticalScrollIndicator={false}
102
- >
103
- <View style={styles.drawerHeader}>
104
- <View style={styles.headerRow}>
105
- <Image
106
- source={{ uri: 'https://via.placeholder.com/80x80' }}
107
- style={styles.drawerAvatar}
108
- />
109
- <View style={styles.headerTextCol}>
110
- <Text style={styles.drawerName}>Eduuu Parrtner</Text>
111
- <TouchableOpacity style={styles.badgeButton}>
112
- <Text style={styles.badgeText}>Go to Microsite</Text>
113
- </TouchableOpacity>
114
- </View>
115
- </View>
116
- </View>
117
- {groups.map((group, index) => {
118
- const hasChildren =
119
- Array.isArray(group.children) && group.children.length > 0;
120
- if (!hasChildren) {
121
- return (
122
- <View key={group.label}>
123
- {index > 0 ? <View style={styles.drawerDivider} /> : null}
124
- <DrawerItem
125
- label={group.label}
126
- onPress={group.onPress ?? (() => {})}
127
- />
128
- </View>
129
- );
130
- }
131
- const isOpen = !!expanded[group.label];
132
- return (
133
- <View key={group.label}>
134
- {index > 0 ? <View style={styles.drawerDivider} /> : null}
135
- <TouchableOpacity
136
- style={styles.drawerItem}
137
- onPress={() => toggle(group.label)}
138
- activeOpacity={0.7}
139
- >
140
- <Text style={[styles.drawerLabel, styles.flexOne]}>
141
- {group.label}
142
- </Text>
143
- <Text style={styles.chevron}>{isOpen ? '▾' : '▸'}</Text>
144
- </TouchableOpacity>
145
- {isOpen &&
146
- group.children!.map((child, cIdx) => (
147
- <View key={child.label}>
148
- {cIdx > 0 ? <View style={styles.drawerDivider} /> : null}
149
- <TouchableOpacity
150
- style={styles.childItem}
151
- onPress={child.onPress}
152
- >
153
- <Text style={styles.childLabel}>{child.label}</Text>
154
- </TouchableOpacity>
155
- </View>
156
- ))}
157
- </View>
158
- );
159
- })}
160
- </ScrollView>
161
- </View>
162
- );
163
- };
164
-
165
- const renderDrawerContent = (props: any) => {
166
- return <CustomDrawerContent navigation={props.navigation} />;
167
- };
168
-
169
- const DrawerNavigator: React.FC = () => {
170
- return (
171
- <Drawer.Navigator
172
- drawerContent={renderDrawerContent}
173
- screenOptions={{
174
- headerShown: false,
175
- drawerType: 'slide',
176
- swipeEdgeWidth: 100,
177
- drawerStyle: {
178
- width: scale(280),
179
- backgroundColor: Colors.primary,
180
- },
181
- headerStyle: {
182
- backgroundColor: Colors.white,
183
- },
184
- headerTintColor: Colors.primary,
185
- headerTitleAlign: 'left',
186
- headerTitleStyle: {
187
- fontWeight: '600',
188
- color: Colors.black,
189
- },
190
- }}
191
- >
192
- <Drawer.Screen
193
- name="HomeTabs"
194
- component={BottomTabNavigator}
195
- options={{
196
- title: 'Home Page',
197
- }}
198
- />
199
- <Drawer.Screen
200
- name="Profile"
201
- component={ProfileScreen}
202
- options={{
203
- title: 'Profile',
204
- }}
205
- />
206
- </Drawer.Navigator>
207
- );
208
- };
209
-
210
- export default DrawerNavigator;
211
-
212
- const styles = StyleSheet.create({
213
- drawerContainer: {
214
- flex: 1,
215
- backgroundColor: Colors.primary,
216
- },
217
- drawerHeader: {
218
- backgroundColor: Colors.primary,
219
- paddingHorizontal: scale(20),
220
- paddingTop: verticalScale(36),
221
- paddingBottom: verticalScale(16),
222
- alignItems: 'flex-start',
223
- },
224
- headerRow: {
225
- width: '100%',
226
- flexDirection: 'row',
227
- alignItems: 'center',
228
- marginTop: GetPlatform(verticalScale(20), 0),
229
- },
230
- drawerAvatar: {
231
- width: scale(60),
232
- height: scale(60),
233
- borderRadius: moderateScale(40),
234
- marginRight: scale(14),
235
- borderWidth: 2,
236
- borderColor: Colors.black30,
237
- },
238
- headerTextCol: {
239
- flex: 1,
240
- justifyContent: 'center',
241
- },
242
- drawerName: {
243
- fontSize: moderateScale(20),
244
- fontWeight: '600',
245
- color: Colors.white,
246
- marginBottom: verticalScale(10),
247
- },
248
- badgeButton: {
249
- borderWidth: 1,
250
- borderColor: Colors.white,
251
- paddingHorizontal: scale(12),
252
- paddingVertical: verticalScale(6),
253
- borderRadius: moderateScale(16),
254
- alignSelf: 'flex-start',
255
- },
256
- badgeText: {
257
- color: Colors.white,
258
- fontSize: moderateScale(12),
259
- fontWeight: '500',
260
- },
261
- drawerContent: {
262
- flex: 1,
263
- paddingTop: verticalScale(8),
264
- },
265
- drawerItem: {
266
- flexDirection: 'row',
267
- alignItems: 'center',
268
- padding: scale(10),
269
- paddingHorizontal: scale(20),
270
- },
271
- activeDrawerItem: {
272
- backgroundColor: 'rgba(255,255,255,0.08)',
273
- borderLeftWidth: 0,
274
- },
275
- drawerLabel: {
276
- fontSize: moderateScale(16),
277
- color: Colors.white,
278
- fontWeight: '700',
279
- },
280
- activeDrawerLabel: {
281
- fontWeight: '600',
282
- color: Colors.white,
283
- },
284
- chevron: {
285
- color: 'rgba(255,255,255,0.9)',
286
- fontSize: moderateScale(24),
287
- },
288
- drawerDivider: {
289
- height: 1,
290
- backgroundColor: Colors.black10,
291
- marginVertical: verticalScale(4),
292
- marginLeft: scale(20),
293
- },
294
- childItem: {
295
- paddingVertical: verticalScale(6),
296
- paddingLeft: scale(60),
297
- },
298
- childLabel: {
299
- fontSize: moderateScale(15),
300
- color: Colors.white,
301
- fontWeight: '500',
302
- },
303
- flexOne: {
304
- flex: 1,
305
- },
306
- });
@@ -1,32 +0,0 @@
1
- import DrawerNavigator from './DrawerNavigator';
2
- import LogCallScreen from '../screens/CRM/LogCallScreen';
3
- import { createNativeStackNavigator } from '@react-navigation/native-stack';
4
-
5
- export type RootStackParamList = {
6
- HomeTabs: undefined;
7
- LogCall: {
8
- contact: {
9
- name: string;
10
- avatarInitial: string;
11
- avatarColor: string;
12
- };
13
- };
14
- // Add more screens here as needed
15
- };
16
-
17
- const Stack = createNativeStackNavigator<RootStackParamList>();
18
-
19
- const StackNavigator: React.FC = () => {
20
- return (
21
- <Stack.Navigator
22
- screenOptions={{
23
- headerShown: false,
24
- }}
25
- >
26
- <Stack.Screen name="HomeTabs" component={DrawerNavigator} />
27
- <Stack.Screen name="LogCall" component={LogCallScreen} />
28
- </Stack.Navigator>
29
- );
30
- };
31
-
32
- export default StackNavigator;
@@ -1,57 +0,0 @@
1
- import { BottomSheet, BottomSheetOption } from '../../components/BottomSheet';
2
-
3
- interface AddContactModalProps {
4
- visible: boolean;
5
- onClose: () => void;
6
- onAddManually?: () => void;
7
- onUploadGmail?: () => void;
8
- onUploadPhonebook?: () => void;
9
- onUploadCSV?: () => void;
10
- }
11
-
12
- export const AddContactModal = ({
13
- visible,
14
- onClose,
15
- onAddManually,
16
- onUploadGmail,
17
- onUploadPhonebook,
18
- onUploadCSV,
19
- }: AddContactModalProps) => {
20
- return (
21
- <BottomSheet visible={visible} onClose={onClose} title="Add new contact">
22
- <BottomSheetOption
23
- icon="⋮⋮⋮"
24
- label="Add manually"
25
- onPress={() => {
26
- onClose();
27
- onAddManually?.();
28
- }}
29
- />
30
- <BottomSheetOption
31
- icon="G"
32
- label="Upload Gmail contact"
33
- iconColor="#EA4335"
34
- onPress={() => {
35
- onClose();
36
- onUploadGmail?.();
37
- }}
38
- />
39
- <BottomSheetOption
40
- icon="📱"
41
- label="Upload Phonebook contacts"
42
- onPress={() => {
43
- onClose();
44
- onUploadPhonebook?.();
45
- }}
46
- />
47
- <BottomSheetOption
48
- icon="↑"
49
- label="Upload CSV"
50
- onPress={() => {
51
- onClose();
52
- onUploadCSV?.();
53
- }}
54
- />
55
- </BottomSheet>
56
- );
57
- };
@@ -1,109 +0,0 @@
1
- import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
2
- import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
3
- import { Colors } from '../../constants/Colors';
4
-
5
- interface CategoryTabsProps {
6
- selectedCategory: 'all' | 'followUp' | 'new' | 'engaged';
7
- onSelectCategory: (category: 'all' | 'followUp' | 'new' | 'engaged') => void;
8
- }
9
-
10
- export const CategoryTabs: React.FC<CategoryTabsProps> = ({
11
- selectedCategory,
12
- onSelectCategory,
13
- }) => {
14
- return (
15
- <View style={styles.categoryTabsContainer}>
16
- <TouchableOpacity
17
- style={[
18
- styles.categoryTab,
19
- selectedCategory === 'all' && styles.categoryTabActive,
20
- ]}
21
- onPress={() => onSelectCategory('all')}
22
- >
23
- <Text
24
- style={[
25
- styles.categoryTabText,
26
- selectedCategory === 'all' && styles.categoryTabTextActive,
27
- ]}
28
- >
29
- All
30
- </Text>
31
- </TouchableOpacity>
32
- <TouchableOpacity
33
- style={[
34
- styles.categoryTab,
35
- selectedCategory === 'followUp' && styles.categoryTabActive,
36
- ]}
37
- onPress={() => onSelectCategory('followUp')}
38
- >
39
- <Text
40
- style={[
41
- styles.categoryTabText,
42
- selectedCategory === 'followUp' && styles.categoryTabTextActive,
43
- ]}
44
- >
45
- Follow Up
46
- </Text>
47
- </TouchableOpacity>
48
- <TouchableOpacity
49
- style={[
50
- styles.categoryTab,
51
- selectedCategory === 'new' && styles.categoryTabActive,
52
- ]}
53
- onPress={() => onSelectCategory('new')}
54
- >
55
- <Text
56
- style={[
57
- styles.categoryTabText,
58
- selectedCategory === 'new' && styles.categoryTabTextActive,
59
- ]}
60
- >
61
- New
62
- </Text>
63
- </TouchableOpacity>
64
- <TouchableOpacity
65
- style={[
66
- styles.categoryTab,
67
- selectedCategory === 'engaged' && styles.categoryTabActive,
68
- ]}
69
- onPress={() => onSelectCategory('engaged')}
70
- >
71
- <Text
72
- style={[
73
- styles.categoryTabText,
74
- selectedCategory === 'engaged' && styles.categoryTabTextActive,
75
- ]}
76
- >
77
- Engaged
78
- </Text>
79
- </TouchableOpacity>
80
- </View>
81
- );
82
- };
83
-
84
- const styles = StyleSheet.create({
85
- categoryTabsContainer: {
86
- flexDirection: 'row',
87
- backgroundColor: Colors.white,
88
- paddingHorizontal: scale(16),
89
- paddingVertical: verticalScale(8),
90
- },
91
- categoryTab: {
92
- flex: 1,
93
- paddingVertical: verticalScale(12),
94
- alignItems: 'center',
95
- borderBottomWidth: 3,
96
- borderBottomColor: 'transparent',
97
- },
98
- categoryTabActive: {
99
- borderBottomColor: '#FF9800',
100
- },
101
- categoryTabText: {
102
- fontSize: moderateScale(14),
103
- fontWeight: '600',
104
- color: Colors.black,
105
- },
106
- categoryTabTextActive: {
107
- color: '#FF9800',
108
- },
109
- });
@@ -1,168 +0,0 @@
1
- import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
2
- import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
3
- import { Colors } from '../../constants/Colors';
4
-
5
- interface ContactItemProps {
6
- name: string;
7
- phone?: string;
8
- email?: string;
9
- description?: string;
10
- avatarColor: string;
11
- avatarInitial: string;
12
- selected?: boolean;
13
- onPress?: () => void;
14
- onSelectToggle?: () => void;
15
- onReminderPress?: () => void;
16
- onCallPress?: () => void;
17
- onMenuPress?: () => void;
18
- showCheckbox?: boolean;
19
- showActionButtons?: boolean;
20
- }
21
-
22
- export const ContactItem: React.FC<ContactItemProps> = ({
23
- name,
24
- phone,
25
- email,
26
- description,
27
- avatarColor,
28
- avatarInitial,
29
- selected = false,
30
- onPress,
31
- onSelectToggle,
32
- onReminderPress,
33
- onCallPress,
34
- onMenuPress,
35
- showCheckbox = false,
36
- showActionButtons = false,
37
- }) => {
38
- return (
39
- <TouchableOpacity
40
- style={styles.contactItem}
41
- onPress={onPress}
42
- activeOpacity={0.7}
43
- >
44
- <View style={[styles.avatar, { backgroundColor: avatarColor }]}>
45
- <Text style={styles.avatarText}>{avatarInitial}</Text>
46
- </View>
47
- <View style={styles.contactInfo}>
48
- <Text style={styles.contactName}>{name}</Text>
49
- {phone && <Text style={styles.contactPhone}>{phone}</Text>}
50
- {email && <Text style={styles.contactEmail}>{email}</Text>}
51
- {description && (
52
- <Text
53
- style={styles.contactDescription}
54
- numberOfLines={1}
55
- ellipsizeMode="tail"
56
- >
57
- {description}
58
- </Text>
59
- )}
60
- </View>
61
- {showActionButtons && (
62
- <View style={styles.actionButtons}>
63
- <TouchableOpacity
64
- style={styles.actionButton}
65
- onPress={onReminderPress}
66
- >
67
- <Text style={styles.actionIcon}>⏰</Text>
68
- </TouchableOpacity>
69
- <TouchableOpacity style={styles.actionButton} onPress={onCallPress}>
70
- <Text style={styles.actionIcon}>📞</Text>
71
- </TouchableOpacity>
72
- <TouchableOpacity style={styles.actionButton} onPress={onMenuPress}>
73
- <Text style={styles.actionIcon}>⋮</Text>
74
- </TouchableOpacity>
75
- </View>
76
- )}
77
- {showCheckbox && (
78
- <TouchableOpacity style={styles.checkbox} onPress={onSelectToggle}>
79
- <View
80
- style={[styles.checkboxInner, selected && styles.checkboxSelected]}
81
- >
82
- {selected && <Text style={styles.checkmark}>✓</Text>}
83
- </View>
84
- </TouchableOpacity>
85
- )}
86
- </TouchableOpacity>
87
- );
88
- };
89
-
90
- const styles = StyleSheet.create({
91
- contactItem: {
92
- flexDirection: 'row',
93
- alignItems: 'center',
94
- backgroundColor: Colors.white,
95
- padding: scale(16),
96
- borderBottomWidth: 1,
97
- borderBottomColor: '#E0E0E0',
98
- },
99
- avatar: {
100
- width: scale(46),
101
- height: scale(46),
102
- borderRadius: moderateScale(23),
103
- justifyContent: 'center',
104
- alignItems: 'center',
105
- marginRight: scale(12),
106
- },
107
- avatarText: {
108
- fontSize: moderateScale(24),
109
- fontWeight: '700',
110
- color: Colors.white,
111
- },
112
- contactInfo: {
113
- flex: 1,
114
- },
115
- contactName: {
116
- fontSize: moderateScale(16),
117
- fontWeight: '700',
118
- color: Colors.black,
119
- marginBottom: verticalScale(4),
120
- },
121
- contactPhone: {
122
- fontSize: moderateScale(12),
123
- color: Colors.black,
124
- marginBottom: verticalScale(2),
125
- },
126
- contactEmail: {
127
- fontSize: moderateScale(12),
128
- color: '#666',
129
- marginBottom: verticalScale(4),
130
- },
131
- contactDescription: {
132
- fontSize: moderateScale(12),
133
- color: Colors.black,
134
- lineHeight: verticalScale(18),
135
- },
136
- actionButtons: {
137
- flexDirection: 'row',
138
- alignItems: 'center',
139
- },
140
- actionButton: {
141
- padding: scale(8),
142
- marginLeft: scale(8),
143
- },
144
- actionIcon: {
145
- fontSize: moderateScale(20),
146
- color: Colors.black,
147
- },
148
- checkbox: {
149
- padding: scale(8),
150
- },
151
- checkboxInner: {
152
- width: scale(28),
153
- height: scale(28),
154
- borderWidth: 2,
155
- borderColor: '#FF9800',
156
- borderRadius: moderateScale(4),
157
- justifyContent: 'center',
158
- alignItems: 'center',
159
- },
160
- checkboxSelected: {
161
- backgroundColor: '#FF9800',
162
- },
163
- checkmark: {
164
- color: Colors.white,
165
- fontSize: moderateScale(16),
166
- fontWeight: '700',
167
- },
168
- });
@@ -1,34 +0,0 @@
1
- import { Text, StyleSheet, TouchableOpacity } from 'react-native';
2
- import { scale, moderateScale } from 'react-native-size-matters';
3
-
4
- interface FilterDropdownProps {
5
- onPress?: () => void;
6
- }
7
-
8
- export const FilterDropdown: React.FC<FilterDropdownProps> = ({ onPress }) => {
9
- return (
10
- <TouchableOpacity style={styles.filterButton} onPress={onPress}>
11
- <Text style={styles.filterText}>Filter By</Text>
12
- <Text style={styles.filterArrow}>▼</Text>
13
- </TouchableOpacity>
14
- );
15
- };
16
-
17
- const styles = StyleSheet.create({
18
- filterButton: {
19
- flexDirection: 'row',
20
- alignItems: 'center',
21
- justifyContent: 'flex-end',
22
- paddingHorizontal: scale(16),
23
- },
24
- filterText: {
25
- fontSize: moderateScale(16),
26
- fontWeight: '600',
27
- color: '#FF9800',
28
- marginRight: scale(4),
29
- },
30
- filterArrow: {
31
- fontSize: moderateScale(12),
32
- color: '#FF9800',
33
- },
34
- });