react-native-salespanda 0.4.1 → 0.4.3

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 (178) hide show
  1. package/README.md +89 -5
  2. package/android/build.gradle +186 -0
  3. package/lib/module/SalespandaApp.js +24 -16
  4. package/lib/module/SalespandaApp.js.map +1 -1
  5. package/lib/module/assets/images/index.js +1 -22
  6. package/lib/module/assets/images/index.js.map +1 -1
  7. package/lib/module/components/BottomSheet.js +141 -0
  8. package/lib/module/components/BottomSheet.js.map +1 -0
  9. package/lib/module/components/ContactViaModal.js +68 -0
  10. package/lib/module/components/ContactViaModal.js.map +1 -0
  11. package/lib/module/components/ScreenHeader.js +63 -0
  12. package/lib/module/components/ScreenHeader.js.map +1 -0
  13. package/lib/module/components/SearchBar.js +57 -0
  14. package/lib/module/components/SearchBar.js.map +1 -0
  15. package/lib/module/components/TabsHeader.js +80 -0
  16. package/lib/module/components/TabsHeader.js.map +1 -0
  17. package/lib/module/components/index.js +8 -0
  18. package/lib/module/components/index.js.map +1 -0
  19. package/lib/module/config/FlavorConfig.js.map +1 -1
  20. package/lib/module/constants/Colors.js +3 -2
  21. package/lib/module/constants/Colors.js.map +1 -1
  22. package/lib/module/index.js +12 -4
  23. package/lib/module/index.js.map +1 -1
  24. package/lib/module/navigation/AppNavigator.js +13 -8
  25. package/lib/module/navigation/AppNavigator.js.map +1 -1
  26. package/lib/module/navigation/BottomTabNavigator.js +96 -49
  27. package/lib/module/navigation/BottomTabNavigator.js.map +1 -1
  28. package/lib/module/navigation/DrawerNavigator.js +45 -40
  29. package/lib/module/navigation/DrawerNavigator.js.map +1 -1
  30. package/lib/module/navigation/StackNavigator.js +23 -0
  31. package/lib/module/navigation/StackNavigator.js.map +1 -0
  32. package/lib/module/screens/CRM/AddContactModal.js +49 -0
  33. package/lib/module/screens/CRM/AddContactModal.js.map +1 -0
  34. package/lib/module/screens/CRM/CategoryTabs.js +70 -0
  35. package/lib/module/screens/CRM/CategoryTabs.js.map +1 -0
  36. package/lib/module/screens/CRM/ContactItem.js +168 -0
  37. package/lib/module/screens/CRM/ContactItem.js.map +1 -0
  38. package/lib/module/screens/CRM/FilterDropdown.js +39 -0
  39. package/lib/module/screens/CRM/FilterDropdown.js.map +1 -0
  40. package/lib/module/screens/CRM/FunnelChart.js +105 -0
  41. package/lib/module/screens/CRM/FunnelChart.js.map +1 -0
  42. package/lib/module/screens/CRM/InfoCard.js +56 -0
  43. package/lib/module/screens/CRM/InfoCard.js.map +1 -0
  44. package/lib/module/screens/CRM/LeadCard.js +76 -0
  45. package/lib/module/screens/CRM/LeadCard.js.map +1 -0
  46. package/lib/module/screens/CRM/LogCallScreen.js +271 -0
  47. package/lib/module/screens/CRM/LogCallScreen.js.map +1 -0
  48. package/lib/module/screens/CRM/TopTabs.js +63 -0
  49. package/lib/module/screens/CRM/TopTabs.js.map +1 -0
  50. package/lib/module/screens/CRM/index.js +13 -0
  51. package/lib/module/screens/CRM/index.js.map +1 -0
  52. package/lib/module/screens/ReportsScreen.js +6 -4
  53. package/lib/module/screens/ReportsScreen.js.map +1 -1
  54. package/lib/module/screens/Tabs/ActivityAnalytics.js +29 -0
  55. package/lib/module/screens/Tabs/ActivityAnalytics.js.map +1 -0
  56. package/lib/module/screens/Tabs/CRMScreen.js +316 -0
  57. package/lib/module/screens/Tabs/CRMScreen.js.map +1 -0
  58. package/lib/module/screens/Tabs/DigitalDiary.js +39 -0
  59. package/lib/module/screens/Tabs/DigitalDiary.js.map +1 -0
  60. package/lib/module/screens/Tabs/HomeScreen.js +240 -0
  61. package/lib/module/screens/Tabs/HomeScreen.js.map +1 -0
  62. package/lib/module/screens/Tabs/NotificationsScreen.js +29 -0
  63. package/lib/module/screens/Tabs/NotificationsScreen.js.map +1 -0
  64. package/lib/module/screens/contentliberary/contentliberary.js +283 -0
  65. package/lib/module/screens/contentliberary/contentliberary.js.map +1 -0
  66. package/lib/typescript/src/SalespandaApp.d.ts +12 -2
  67. package/lib/typescript/src/SalespandaApp.d.ts.map +1 -1
  68. package/lib/typescript/src/components/BottomSheet.d.ts +16 -0
  69. package/lib/typescript/src/components/BottomSheet.d.ts.map +1 -0
  70. package/lib/typescript/src/components/ContactViaModal.d.ts +13 -0
  71. package/lib/typescript/src/components/ContactViaModal.d.ts.map +1 -0
  72. package/lib/typescript/src/components/ScreenHeader.d.ts +8 -0
  73. package/lib/typescript/src/components/ScreenHeader.d.ts.map +1 -0
  74. package/lib/typescript/src/components/SearchBar.d.ts +8 -0
  75. package/lib/typescript/src/components/SearchBar.d.ts.map +1 -0
  76. package/lib/typescript/src/components/TabsHeader.d.ts +8 -0
  77. package/lib/typescript/src/components/TabsHeader.d.ts.map +1 -0
  78. package/lib/typescript/src/components/index.d.ts +5 -0
  79. package/lib/typescript/src/components/index.d.ts.map +1 -0
  80. package/lib/typescript/src/config/FlavorConfig.d.ts.map +1 -1
  81. package/lib/typescript/src/constants/Colors.d.ts +2 -1
  82. package/lib/typescript/src/constants/Colors.d.ts.map +1 -1
  83. package/lib/typescript/src/index.d.ts +6 -4
  84. package/lib/typescript/src/index.d.ts.map +1 -1
  85. package/lib/typescript/src/navigation/AppNavigator.d.ts +2 -1
  86. package/lib/typescript/src/navigation/AppNavigator.d.ts.map +1 -1
  87. package/lib/typescript/src/navigation/BottomTabNavigator.d.ts +9 -1
  88. package/lib/typescript/src/navigation/BottomTabNavigator.d.ts.map +1 -1
  89. package/lib/typescript/src/navigation/DrawerNavigator.d.ts +3 -1
  90. package/lib/typescript/src/navigation/DrawerNavigator.d.ts.map +1 -1
  91. package/lib/typescript/src/navigation/StackNavigator.d.ts +13 -0
  92. package/lib/typescript/src/navigation/StackNavigator.d.ts.map +1 -0
  93. package/lib/typescript/src/screens/CRM/AddContactModal.d.ts +11 -0
  94. package/lib/typescript/src/screens/CRM/AddContactModal.d.ts.map +1 -0
  95. package/lib/typescript/src/screens/CRM/CategoryTabs.d.ts +7 -0
  96. package/lib/typescript/src/screens/CRM/CategoryTabs.d.ts.map +1 -0
  97. package/lib/typescript/src/screens/CRM/ContactItem.d.ts +19 -0
  98. package/lib/typescript/src/screens/CRM/ContactItem.d.ts.map +1 -0
  99. package/lib/typescript/src/screens/CRM/FilterDropdown.d.ts +6 -0
  100. package/lib/typescript/src/screens/CRM/FilterDropdown.d.ts.map +1 -0
  101. package/lib/typescript/src/screens/CRM/FunnelChart.d.ts +17 -0
  102. package/lib/typescript/src/screens/CRM/FunnelChart.d.ts.map +1 -0
  103. package/lib/typescript/src/screens/CRM/InfoCard.d.ts +7 -0
  104. package/lib/typescript/src/screens/CRM/InfoCard.d.ts.map +1 -0
  105. package/lib/typescript/src/screens/CRM/LeadCard.d.ts +9 -0
  106. package/lib/typescript/src/screens/CRM/LeadCard.d.ts.map +1 -0
  107. package/lib/typescript/src/screens/CRM/LogCallScreen.d.ts +12 -0
  108. package/lib/typescript/src/screens/CRM/LogCallScreen.d.ts.map +1 -0
  109. package/lib/typescript/src/screens/CRM/TopTabs.d.ts +12 -0
  110. package/lib/typescript/src/screens/CRM/TopTabs.d.ts.map +1 -0
  111. package/lib/typescript/src/screens/CRM/index.d.ts +10 -0
  112. package/lib/typescript/src/screens/CRM/index.d.ts.map +1 -0
  113. package/lib/typescript/src/screens/ReportsScreen.d.ts +2 -1
  114. package/lib/typescript/src/screens/ReportsScreen.d.ts.map +1 -1
  115. package/lib/typescript/src/screens/Tabs/ActivityAnalytics.d.ts +3 -0
  116. package/lib/typescript/src/screens/Tabs/ActivityAnalytics.d.ts.map +1 -0
  117. package/lib/typescript/src/screens/Tabs/CRMScreen.d.ts +3 -0
  118. package/lib/typescript/src/screens/Tabs/CRMScreen.d.ts.map +1 -0
  119. package/lib/typescript/src/screens/Tabs/DigitalDiary.d.ts +3 -0
  120. package/lib/typescript/src/screens/Tabs/DigitalDiary.d.ts.map +1 -0
  121. package/lib/typescript/src/screens/Tabs/HomeScreen.d.ts +4 -0
  122. package/lib/typescript/src/screens/Tabs/HomeScreen.d.ts.map +1 -0
  123. package/lib/typescript/src/screens/Tabs/NotificationsScreen.d.ts +3 -0
  124. package/lib/typescript/src/screens/Tabs/NotificationsScreen.d.ts.map +1 -0
  125. package/lib/typescript/src/screens/contentliberary/contentliberary.d.ts +2 -0
  126. package/lib/typescript/src/screens/contentliberary/contentliberary.d.ts.map +1 -0
  127. package/package.json +5 -1
  128. package/src/SalespandaApp.tsx +37 -16
  129. package/src/components/BottomSheet.tsx +146 -0
  130. package/src/components/ContactViaModal.tsx +80 -0
  131. package/src/components/ScreenHeader.tsx +57 -0
  132. package/src/components/SearchBar.tsx +59 -0
  133. package/src/components/TabsHeader.tsx +72 -0
  134. package/src/components/index.ts +5 -0
  135. package/src/config/FlavorConfig.ts +5 -3
  136. package/src/constants/Colors.ts +2 -1
  137. package/src/index.tsx +12 -4
  138. package/src/navigation/AppNavigator.tsx +15 -8
  139. package/src/navigation/BottomTabNavigator.tsx +122 -62
  140. package/src/navigation/DrawerNavigator.tsx +49 -34
  141. package/src/navigation/StackNavigator.tsx +32 -0
  142. package/src/screens/CRM/AddContactModal.tsx +57 -0
  143. package/src/screens/CRM/CategoryTabs.tsx +109 -0
  144. package/src/screens/CRM/ContactItem.tsx +168 -0
  145. package/src/screens/CRM/FilterDropdown.tsx +34 -0
  146. package/src/screens/CRM/FunnelChart.tsx +103 -0
  147. package/src/screens/CRM/InfoCard.tsx +51 -0
  148. package/src/screens/CRM/LeadCard.tsx +69 -0
  149. package/src/screens/CRM/LogCallScreen.tsx +318 -0
  150. package/src/screens/CRM/TopTabs.tsx +95 -0
  151. package/src/screens/CRM/index.ts +10 -0
  152. package/src/screens/ReportsScreen.tsx +8 -5
  153. package/src/screens/Tabs/ActivityAnalytics.tsx +25 -0
  154. package/src/screens/Tabs/CRMScreen.tsx +381 -0
  155. package/src/screens/Tabs/DigitalDiary.tsx +35 -0
  156. package/src/screens/Tabs/HomeScreen.tsx +223 -0
  157. package/src/screens/Tabs/NotificationsScreen.tsx +25 -0
  158. package/src/screens/contentliberary/contentliberary.tsx +268 -0
  159. package/lib/module/screens/CRMScreen.js +0 -41
  160. package/lib/module/screens/CRMScreen.js.map +0 -1
  161. package/lib/module/screens/HomeScreen.js +0 -211
  162. package/lib/module/screens/HomeScreen.js.map +0 -1
  163. package/lib/module/screens/NotificationsScreen.js +0 -41
  164. package/lib/module/screens/NotificationsScreen.js.map +0 -1
  165. package/lib/module/screens/ProfileScreen.js +0 -41
  166. package/lib/module/screens/ProfileScreen.js.map +0 -1
  167. package/lib/typescript/src/screens/CRMScreen.d.ts +0 -2
  168. package/lib/typescript/src/screens/CRMScreen.d.ts.map +0 -1
  169. package/lib/typescript/src/screens/HomeScreen.d.ts +0 -2
  170. package/lib/typescript/src/screens/HomeScreen.d.ts.map +0 -1
  171. package/lib/typescript/src/screens/NotificationsScreen.d.ts +0 -2
  172. package/lib/typescript/src/screens/NotificationsScreen.d.ts.map +0 -1
  173. package/lib/typescript/src/screens/ProfileScreen.d.ts +0 -2
  174. package/lib/typescript/src/screens/ProfileScreen.d.ts.map +0 -1
  175. package/src/screens/CRMScreen.tsx +0 -34
  176. package/src/screens/HomeScreen.tsx +0 -201
  177. package/src/screens/NotificationsScreen.tsx +0 -34
  178. package/src/screens/ProfileScreen.tsx +0 -34
@@ -0,0 +1,146 @@
1
+ import {
2
+ View,
3
+ Text,
4
+ StyleSheet,
5
+ Modal,
6
+ TouchableOpacity,
7
+ TouchableWithoutFeedback,
8
+ } from 'react-native';
9
+ import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
10
+ import { Colors } from '../constants/Colors';
11
+
12
+ interface BottomSheetProps {
13
+ visible: boolean;
14
+ onClose: () => void;
15
+ title: string;
16
+ children: React.ReactNode;
17
+ }
18
+
19
+ export const BottomSheet: React.FC<BottomSheetProps> = ({
20
+ visible,
21
+ onClose,
22
+ title,
23
+ children,
24
+ }) => {
25
+ return (
26
+ <Modal
27
+ visible={visible}
28
+ transparent
29
+ animationType="slide"
30
+ onRequestClose={onClose}
31
+ >
32
+ <TouchableWithoutFeedback onPress={onClose}>
33
+ <View style={styles.overlay}>
34
+ <TouchableWithoutFeedback>
35
+ <View style={styles.bottomSheet}>
36
+ <View style={styles.header}>
37
+ <Text style={styles.title}>{title}</Text>
38
+ <TouchableOpacity onPress={onClose} style={styles.closeButton}>
39
+ <Text style={styles.closeIcon}>✕</Text>
40
+ </TouchableOpacity>
41
+ </View>
42
+ <View style={styles.content}>{children}</View>
43
+ </View>
44
+ </TouchableWithoutFeedback>
45
+ </View>
46
+ </TouchableWithoutFeedback>
47
+ </Modal>
48
+ );
49
+ };
50
+
51
+ interface BottomSheetOptionProps {
52
+ icon: string;
53
+ label: string;
54
+ onPress: () => void;
55
+ iconColor?: string;
56
+ }
57
+
58
+ export const BottomSheetOption: React.FC<BottomSheetOptionProps> = ({
59
+ icon,
60
+ label,
61
+ onPress,
62
+ iconColor,
63
+ }) => {
64
+ return (
65
+ <TouchableOpacity style={styles.option} onPress={onPress}>
66
+ <View
67
+ style={[
68
+ styles.iconContainer,
69
+ iconColor && { backgroundColor: iconColor },
70
+ ]}
71
+ >
72
+ <Text style={styles.optionIcon}>{icon}</Text>
73
+ </View>
74
+ <Text style={styles.optionLabel}>{label}</Text>
75
+ <Text style={styles.arrow}>›</Text>
76
+ </TouchableOpacity>
77
+ );
78
+ };
79
+
80
+ const styles = StyleSheet.create({
81
+ overlay: {
82
+ flex: 1,
83
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
84
+ justifyContent: 'flex-end',
85
+ },
86
+ bottomSheet: {
87
+ backgroundColor: Colors.white,
88
+ borderTopLeftRadius: moderateScale(20),
89
+ borderTopRightRadius: moderateScale(20),
90
+ paddingBottom: verticalScale(30),
91
+ },
92
+ header: {
93
+ flexDirection: 'row',
94
+ justifyContent: 'space-between',
95
+ alignItems: 'center',
96
+ padding: scale(20),
97
+ borderBottomWidth: 1,
98
+ borderBottomColor: '#E0E0E0',
99
+ },
100
+ title: {
101
+ fontSize: moderateScale(20),
102
+ fontWeight: '700',
103
+ color: Colors.black,
104
+ },
105
+ closeButton: {
106
+ padding: scale(4),
107
+ },
108
+ closeIcon: {
109
+ fontSize: moderateScale(24),
110
+ color: Colors.black,
111
+ },
112
+ content: {
113
+ padding: scale(16),
114
+ },
115
+ option: {
116
+ flexDirection: 'row',
117
+ alignItems: 'center',
118
+ padding: scale(16),
119
+ backgroundColor: Colors.white,
120
+ borderWidth: 1,
121
+ borderColor: '#E0E0E0',
122
+ borderRadius: moderateScale(12),
123
+ marginBottom: verticalScale(12),
124
+ },
125
+ iconContainer: {
126
+ width: scale(30),
127
+ height: scale(30),
128
+ borderRadius: moderateScale(20),
129
+ justifyContent: 'center',
130
+ alignItems: 'center',
131
+ marginRight: scale(12),
132
+ },
133
+ optionIcon: {
134
+ fontSize: moderateScale(16),
135
+ },
136
+ optionLabel: {
137
+ flex: 1,
138
+ fontSize: moderateScale(12),
139
+ fontWeight: '600',
140
+ color: Colors.black,
141
+ },
142
+ arrow: {
143
+ fontSize: moderateScale(24),
144
+ color: '#999',
145
+ },
146
+ });
@@ -0,0 +1,80 @@
1
+ import { BottomSheet, BottomSheetOption } from './BottomSheet';
2
+
3
+ interface ContactViaModalProps {
4
+ visible: boolean;
5
+ onClose: () => void;
6
+ onCall?: () => void;
7
+ onWhatsapp?: () => void;
8
+ onEmail?: () => void;
9
+ onSMS?: () => void;
10
+ onAddTask?: () => void;
11
+ onAddNote?: () => void;
12
+ }
13
+
14
+ export const ContactViaModal: React.FC<ContactViaModalProps> = ({
15
+ visible,
16
+ onClose,
17
+ onCall,
18
+ onWhatsapp,
19
+ onEmail,
20
+ onSMS,
21
+ onAddTask,
22
+ onAddNote,
23
+ }) => {
24
+ return (
25
+ <BottomSheet visible={visible} onClose={onClose} title="Contact Via">
26
+ <BottomSheetOption
27
+ icon="📞"
28
+ label="Call"
29
+ iconColor="#FF6B6B"
30
+ onPress={() => {
31
+ onClose();
32
+ onCall?.();
33
+ }}
34
+ />
35
+ <BottomSheetOption
36
+ icon="💬"
37
+ label="Whatsapp"
38
+ iconColor="#25D366"
39
+ onPress={() => {
40
+ onClose();
41
+ onWhatsapp?.();
42
+ }}
43
+ />
44
+ <BottomSheetOption
45
+ icon="✉️"
46
+ label="E-mail"
47
+ iconColor="#9B59B6"
48
+ onPress={() => {
49
+ onClose();
50
+ onEmail?.();
51
+ }}
52
+ />
53
+ <BottomSheetOption
54
+ icon="💬"
55
+ label="SMS"
56
+ iconColor="#3498DB"
57
+ onPress={() => {
58
+ onClose();
59
+ onSMS?.();
60
+ }}
61
+ />
62
+ <BottomSheetOption
63
+ icon="📋"
64
+ label="Add Task"
65
+ onPress={() => {
66
+ onClose();
67
+ onAddTask?.();
68
+ }}
69
+ />
70
+ <BottomSheetOption
71
+ icon="📝"
72
+ label="Add Note"
73
+ onPress={() => {
74
+ onClose();
75
+ onAddNote?.();
76
+ }}
77
+ />
78
+ </BottomSheet>
79
+ );
80
+ };
@@ -0,0 +1,57 @@
1
+ import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
2
+ import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
3
+ import { Colors } from '../constants/Colors';
4
+
5
+ interface ScreenHeaderProps {
6
+ title?: string;
7
+ onBackPress: () => void;
8
+ showCrossOnLeft?: boolean; // If true, shows cross icon instead of back arrow on left
9
+ }
10
+
11
+ export const ScreenHeader: React.FC<ScreenHeaderProps> = ({
12
+ title,
13
+ onBackPress,
14
+ showCrossOnLeft = false,
15
+ }) => {
16
+ return (
17
+ <View style={styles.header}>
18
+ <TouchableOpacity onPress={onBackPress} style={styles.iconButton}>
19
+ <Text style={styles.icon}>{showCrossOnLeft ? '✕' : '←'}</Text>
20
+ </TouchableOpacity>
21
+ {title && <Text style={styles.title}>{title}</Text>}
22
+ <TouchableOpacity onPress={onBackPress} style={styles.iconButton}>
23
+ <Text style={styles.icon}>✕</Text>
24
+ </TouchableOpacity>
25
+ </View>
26
+ );
27
+ };
28
+
29
+ const styles = StyleSheet.create({
30
+ header: {
31
+ flexDirection: 'row',
32
+ alignItems: 'center',
33
+ justifyContent: 'space-between',
34
+ paddingHorizontal: scale(16),
35
+ paddingVertical: verticalScale(12),
36
+ backgroundColor: Colors.white,
37
+ borderBottomWidth: 1,
38
+ borderBottomColor: '#e0e0e0',
39
+ },
40
+ iconButton: {
41
+ width: scale(40),
42
+ height: scale(40),
43
+ justifyContent: 'center',
44
+ alignItems: 'center',
45
+ },
46
+ icon: {
47
+ fontSize: moderateScale(24),
48
+ color: Colors.black,
49
+ },
50
+ title: {
51
+ fontSize: moderateScale(18),
52
+ fontWeight: '600',
53
+ color: Colors.black,
54
+ flex: 1,
55
+ textAlign: 'center',
56
+ },
57
+ });
@@ -0,0 +1,59 @@
1
+ import { View, Text, StyleSheet, TextInput } from 'react-native';
2
+ import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
3
+ import { Colors } from '../constants/Colors';
4
+
5
+ interface SearchBarProps {
6
+ placeholder?: string;
7
+ onChangeText?: (text: string) => void;
8
+ value?: string;
9
+ }
10
+
11
+ export const SearchBar: React.FC<SearchBarProps> = ({
12
+ placeholder = 'Search by name',
13
+ onChangeText,
14
+ value,
15
+ }) => {
16
+ return (
17
+ <View style={styles.searchContainer}>
18
+ <View style={styles.searchBar}>
19
+ <Text style={styles.searchIcon}>🔍</Text>
20
+ <TextInput
21
+ style={styles.searchInput}
22
+ placeholder={placeholder}
23
+ placeholderTextColor="#ccc"
24
+ onChangeText={onChangeText}
25
+ value={value}
26
+ />
27
+ </View>
28
+ </View>
29
+ );
30
+ };
31
+
32
+ const styles = StyleSheet.create({
33
+ searchContainer: {
34
+ backgroundColor: Colors.white,
35
+ paddingHorizontal: scale(16),
36
+ paddingVertical: verticalScale(12),
37
+ },
38
+ searchBar: {
39
+ flexDirection: 'row',
40
+ alignItems: 'center',
41
+ backgroundColor: Colors.white,
42
+ borderWidth: 1,
43
+ borderColor: '#E0E0E0',
44
+ borderRadius: moderateScale(8),
45
+ paddingHorizontal: scale(12),
46
+ paddingVertical: verticalScale(8),
47
+ },
48
+ searchIcon: {
49
+ fontSize: moderateScale(18),
50
+ marginRight: scale(8),
51
+ color: '#999',
52
+ },
53
+ searchInput: {
54
+ flex: 1,
55
+ fontSize: moderateScale(16),
56
+ color: Colors.black,
57
+ padding: 0,
58
+ },
59
+ });
@@ -0,0 +1,72 @@
1
+ import React from 'react';
2
+ import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
3
+ import { useNavigation } from '@react-navigation/native';
4
+ import { scale, moderateScale } from 'react-native-size-matters';
5
+ import { Colors } from '../constants/Colors';
6
+
7
+ interface TabsHeaderProps {
8
+ title: string;
9
+ rightSlot?: React.ReactNode;
10
+ }
11
+
12
+ const TabsHeader: React.FC<TabsHeaderProps> = ({ title, rightSlot }) => {
13
+ const navigation = useNavigation<any>();
14
+
15
+ return (
16
+ <View style={styles.container}>
17
+ <TouchableOpacity
18
+ style={styles.toggleButton}
19
+ onPress={() => navigation.toggleDrawer?.()}
20
+ hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}
21
+ accessibilityRole="button"
22
+ accessibilityLabel="Open navigation drawer"
23
+ >
24
+ <Text style={styles.toggleIcon}>☰</Text>
25
+ </TouchableOpacity>
26
+ <Text style={styles.title}>{title}</Text>
27
+ <View style={styles.rightSlot}>{rightSlot}</View>
28
+ </View>
29
+ );
30
+ };
31
+
32
+ export default TabsHeader;
33
+
34
+ const styles = StyleSheet.create({
35
+ container: {
36
+ flexDirection: 'row',
37
+ alignItems: 'center',
38
+ paddingHorizontal: moderateScale(12),
39
+ paddingVertical: moderateScale(4),
40
+ borderBottomWidth: StyleSheet.hairlineWidth,
41
+ borderBottomColor: Colors.divider,
42
+ backgroundColor: Colors.white,
43
+ },
44
+ toggleButton: {
45
+ width: scale(36),
46
+ height: scale(36),
47
+ borderRadius: moderateScale(18),
48
+ borderWidth: 1,
49
+ borderColor: Colors.border,
50
+ justifyContent: 'center',
51
+ alignItems: 'center',
52
+ backgroundColor: Colors.lightblue,
53
+ },
54
+ toggleIcon: {
55
+ fontSize: moderateScale(20),
56
+ color: Colors.black,
57
+ },
58
+ title: {
59
+ flex: 1,
60
+ textAlign: 'left',
61
+ fontSize: moderateScale(16),
62
+ fontWeight: '600',
63
+ color: Colors.black,
64
+ marginLeft: 12,
65
+ },
66
+ rightSlot: {
67
+ minWidth: scale(36),
68
+ minHeight: scale(36),
69
+ alignItems: 'flex-end',
70
+ justifyContent: 'center',
71
+ },
72
+ });
@@ -0,0 +1,5 @@
1
+ // Reusable Components
2
+ export { SearchBar } from './SearchBar';
3
+ export { BottomSheet, BottomSheetOption } from './BottomSheet';
4
+ export { ContactViaModal } from './ContactViaModal';
5
+ export { ScreenHeader } from './ScreenHeader';
@@ -20,7 +20,7 @@ interface FlavorConfig {
20
20
  export const getFlavorConfig = (): FlavorConfig => {
21
21
  if (Platform.OS === 'android') {
22
22
  const { BuildConfig } = NativeModules;
23
-
23
+
24
24
  if (BuildConfig) {
25
25
  return {
26
26
  appName: BuildConfig.APP_NAME || 'Salespanda',
@@ -30,8 +30,10 @@ export const getFlavorConfig = (): FlavorConfig => {
30
30
  clevertapToken: BuildConfig.CLEVERTAP_TOKEN || '',
31
31
  twScheme: BuildConfig.TWSCHEME || '',
32
32
  fileProviderAuthority: BuildConfig.FILE_PROVIDER_AUTHORITY || '',
33
- freshchatFileProviderAuthority: BuildConfig.FRESHCHAT_FILE_PROVIDER_AUTHORITY || '',
34
- defaultNotificationChannelId: BuildConfig.DEFAULT_NOTIFICATION_CHANNEL_ID || '',
33
+ freshchatFileProviderAuthority:
34
+ BuildConfig.FRESHCHAT_FILE_PROVIDER_AUTHORITY || '',
35
+ defaultNotificationChannelId:
36
+ BuildConfig.DEFAULT_NOTIFICATION_CHANNEL_ID || '',
35
37
  };
36
38
  }
37
39
  }
@@ -4,13 +4,14 @@ export const Colors = {
4
4
  white: '#ffffff',
5
5
  black: '#322F2F',
6
6
  background: '#ffffff',
7
- border: '#e0e0e0',
7
+ border: '#ffffff',
8
8
  divider: '#e0e0e0',
9
9
  white50: 'rgba(255, 255, 255, 0.5)',
10
10
  black50: 'rgba(0, 0, 0, 0.2)',
11
11
  black30: 'rgba(0, 0, 0, 0.3)',
12
12
  black20: 'rgba(0, 0, 0, 0.2)',
13
13
  black10: 'rgba(0, 0, 0, 0.1)',
14
+ lightblue: '#E1F5FE',
14
15
  } as const;
15
16
 
16
17
  export type ColorKey = keyof typeof Colors;
package/src/index.tsx CHANGED
@@ -11,6 +11,8 @@
11
11
  * import { HomeScreen, ProfileScreen } from 'react-native-salespanda';
12
12
  */
13
13
 
14
+ // Import gesture handler at the very top
15
+
14
16
  // ============================================
15
17
  // MAIN APP EXPORT (Default)
16
18
  // ============================================
@@ -28,6 +30,12 @@ export {
28
30
  } from './config/SalespandaConfig';
29
31
  export type { SalespandaConfig } from './config/SalespandaConfig';
30
32
 
33
+ // ============================================
34
+ // FLAVOR CONFIGURATION
35
+ // ============================================
36
+ export { getFlavorConfig } from './config/FlavorConfig';
37
+ export { default as FlavorConfig } from './config/FlavorConfig';
38
+
31
39
  // ============================================
32
40
  // NAVIGATION COMPONENTS
33
41
  // ============================================
@@ -38,8 +46,8 @@ export { default as BottomTabNavigator } from './navigation/BottomTabNavigator';
38
46
  // ============================================
39
47
  // SCREEN COMPONENTS (Library Mode)
40
48
  // ============================================
41
- export { default as HomeScreen } from './screens/HomeScreen';
42
- export { default as ProfileScreen } from './screens/ProfileScreen';
43
- export { default as NotificationsScreen } from './screens/NotificationsScreen';
49
+ export { default as HomeScreen } from './screens/Tabs/HomeScreen';
50
+ export { default as ProfileScreen } from './screens/Tabs/ActivityAnalytics';
51
+ export { default as NotificationsScreen } from './screens/Tabs/NotificationsScreen';
44
52
  export { default as ReportsScreen } from './screens/ReportsScreen';
45
- export { default as PremiumScreen } from './screens/CRMScreen';
53
+ export { default as PremiumScreen } from './screens/Tabs/CRMScreen';
@@ -1,17 +1,24 @@
1
1
  import { NavigationContainer } from '@react-navigation/native';
2
- import BottomTabNavigator from './BottomTabNavigator';
2
+ import { StyleSheet } from 'react-native';
3
+ import StackNavigator from './StackNavigator';
3
4
  import { SafeAreaView } from 'react-native-safe-area-context';
4
5
  import { Colors } from '../constants/Colors';
5
6
 
6
- export default function AppNavigator() {
7
+ const AppNavigator: React.FC = () => {
7
8
  return (
8
9
  <NavigationContainer>
9
- <SafeAreaView
10
- style={{ flex: 1, backgroundColor: Colors.background }}
11
- edges={['bottom', 'top']}
12
- >
13
- <BottomTabNavigator />
10
+ <SafeAreaView style={styles.container} edges={['bottom', 'top']}>
11
+ <StackNavigator />
14
12
  </SafeAreaView>
15
13
  </NavigationContainer>
16
14
  );
17
- }
15
+ };
16
+
17
+ export default AppNavigator;
18
+
19
+ const styles = StyleSheet.create({
20
+ container: {
21
+ flex: 1,
22
+ backgroundColor: Colors.background,
23
+ },
24
+ });