react-native-salespanda 0.4.4 → 0.4.5
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.
- package/lib/module/SalespandaApp.js +16 -8
- package/lib/module/SalespandaApp.js.map +1 -1
- package/lib/module/assets/images/index.js +2 -3
- package/lib/module/assets/images/index.js.map +2 -1
- package/lib/module/components/Loader.js +45 -0
- package/lib/module/components/Loader.js.map +1 -0
- package/lib/module/config/SalespandaConfig.js +17 -0
- package/lib/module/config/SalespandaConfig.js.map +1 -1
- package/lib/module/index.js +1 -32
- package/lib/module/index.js.map +1 -1
- package/lib/module/screens/Tabs/HomeScreen.js +174 -83
- package/lib/module/screens/Tabs/HomeScreen.js.map +1 -1
- package/lib/module/services/api.js +132 -0
- package/lib/module/services/api.js.map +1 -0
- package/lib/module/services/authService.js +59 -0
- package/lib/module/services/authService.js.map +1 -0
- package/lib/module/store/index.js +13 -0
- package/lib/module/store/index.js.map +1 -0
- package/lib/typescript/src/SalespandaApp.d.ts.map +1 -1
- package/lib/typescript/src/components/Loader.d.ts +11 -0
- package/lib/typescript/src/components/Loader.d.ts.map +1 -0
- package/lib/typescript/src/config/SalespandaConfig.d.ts +14 -0
- package/lib/typescript/src/config/SalespandaConfig.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -12
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/screens/Tabs/HomeScreen.d.ts.map +1 -1
- package/lib/typescript/src/services/api.d.ts +638 -0
- package/lib/typescript/src/services/api.d.ts.map +1 -0
- package/lib/typescript/src/services/authService.d.ts +13 -0
- package/lib/typescript/src/services/authService.d.ts.map +1 -0
- package/lib/typescript/src/store/index.d.ts +36 -0
- package/lib/typescript/src/store/index.d.ts.map +1 -0
- package/package.json +8 -2
- package/react-native.config.js +8 -5
- package/src/SalespandaApp.tsx +18 -10
- package/src/components/Loader.tsx +48 -0
- package/src/config/SalespandaConfig.ts +37 -0
- package/src/index.tsx +8 -30
- package/src/screens/Tabs/HomeScreen.tsx +220 -61
- package/src/services/api.ts +173 -0
- package/src/services/authService.ts +75 -0
- package/src/store/index.ts +16 -0
|
@@ -5,6 +5,8 @@ import { NavigationContainer, DefaultTheme } from '@react-navigation/native';
|
|
|
5
5
|
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
6
6
|
import { StyleSheet } from 'react-native';
|
|
7
7
|
import StackNavigator from "./navigation/StackNavigator.js";
|
|
8
|
+
import { Provider } from 'react-redux';
|
|
9
|
+
import { store } from "./store/index.js";
|
|
8
10
|
import { SafeAreaProvider, initialWindowMetrics } from 'react-native-safe-area-context';
|
|
9
11
|
import { Colors } from "./constants/Colors.js";
|
|
10
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -34,7 +36,10 @@ const SalespandaApp = ({
|
|
|
34
36
|
// If standalone mode, don't wrap with NavigationContainer
|
|
35
37
|
// (parent app will provide it)
|
|
36
38
|
if (standalone) {
|
|
37
|
-
return /*#__PURE__*/_jsx(
|
|
39
|
+
return /*#__PURE__*/_jsx(Provider, {
|
|
40
|
+
store: store,
|
|
41
|
+
children: /*#__PURE__*/_jsx(AppContent, {})
|
|
42
|
+
});
|
|
38
43
|
}
|
|
39
44
|
|
|
40
45
|
// Navigation content with SafeAreaProvider
|
|
@@ -49,13 +54,16 @@ const SalespandaApp = ({
|
|
|
49
54
|
border: Colors.border
|
|
50
55
|
}
|
|
51
56
|
};
|
|
52
|
-
const NavigationContent = /*#__PURE__*/_jsx(
|
|
53
|
-
|
|
54
|
-
children: /*#__PURE__*/_jsx(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
const NavigationContent = /*#__PURE__*/_jsx(Provider, {
|
|
58
|
+
store: store,
|
|
59
|
+
children: /*#__PURE__*/_jsx(SafeAreaProvider, {
|
|
60
|
+
initialMetrics: initialWindowMetrics,
|
|
61
|
+
children: /*#__PURE__*/_jsx(NavigationContainer, {
|
|
62
|
+
ref: navigationRef,
|
|
63
|
+
onReady: onReady,
|
|
64
|
+
theme: navTheme,
|
|
65
|
+
children: /*#__PURE__*/_jsx(AppContent, {})
|
|
66
|
+
})
|
|
59
67
|
})
|
|
60
68
|
});
|
|
61
69
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","NavigationContainer","DefaultTheme","GestureHandlerRootView","StyleSheet","StackNavigator","SafeAreaProvider","initialWindowMetrics","Colors","jsx","_jsx","AppContent","SalespandaApp","navigationRef","theme","_customTheme","standalone","onReady","wrapWithGestureHandler","navTheme","colors","background","primary","card","white","text","black","border","NavigationContent","initialMetrics","
|
|
1
|
+
{"version":3,"names":["React","NavigationContainer","DefaultTheme","GestureHandlerRootView","StyleSheet","StackNavigator","Provider","store","SafeAreaProvider","initialWindowMetrics","Colors","jsx","_jsx","AppContent","SalespandaApp","navigationRef","theme","_customTheme","standalone","onReady","wrapWithGestureHandler","children","navTheme","colors","background","primary","card","white","text","black","border","NavigationContent","initialMetrics","ref","style","styles","container","create","flex"],"sourceRoot":"../../src","sources":["SalespandaApp.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,mBAAmB,EAAEC,YAAY,QAAQ,0BAA0B;AAC5E,SAASC,sBAAsB,QAAQ,8BAA8B;AACrE,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAOC,cAAc,MAAM,gCAA6B;AACxD,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,KAAK,QAAQ,kBAAS;AAC/B,SACEC,gBAAgB,EAChBC,oBAAoB,QACf,gCAAgC;AACvC,SAASC,MAAM,QAAQ,uBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAkD5C;AACA;AACA;AACA,MAAMC,UAAoB,GAAGA,CAAA,KAAM;EACjC;EACA,oBAAOD,IAAA,CAACP,cAAc,IAAE,CAAC;AAC3B,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMS,aAA2C,GAAGA,CAAC;EACnDC,aAAa;EACbC,KAAK,EAAEC,YAAY;EACnBC,UAAU,GAAG,KAAK;EAClBC,OAAO;EACPC,sBAAsB,GAAG;AAC3B,CAAC,GAAG,CAAC,CAAC,KAAK;EACT;EACA;EACA;;EAEA;EACA;EACA,IAAIF,UAAU,EAAE;IACd,oBACEN,IAAA,CAACN,QAAQ;MAACC,KAAK,EAAEA,KAAM;MAAAc,QAAA,eACrBT,IAAA,CAACC,UAAU,IAAE;IAAC,CACN,CAAC;EAEf;;EAEA;EACA,MAAMS,QAAQ,GAAG;IACf,GAAGpB,YAAY;IACfqB,MAAM,EAAE;MACN,GAAGrB,YAAY,CAACqB,MAAM;MACtBC,UAAU,EAAEd,MAAM,CAACc,UAAU;MAC7BC,OAAO,EAAEf,MAAM,CAACe,OAAO;MACvBC,IAAI,EAAEhB,MAAM,CAACiB,KAAK;MAClBC,IAAI,EAAElB,MAAM,CAACmB,KAAK;MAClBC,MAAM,EAAEpB,MAAM,CAACoB;IACjB;EACF,CAAC;EAED,MAAMC,iBAAiB,gBACrBnB,IAAA,CAACN,QAAQ;IAACC,KAAK,EAAEA,KAAM;IAAAc,QAAA,eACrBT,IAAA,CAACJ,gBAAgB;MAACwB,cAAc,EAAEvB,oBAAqB;MAAAY,QAAA,eACrDT,IAAA,CAACX,mBAAmB;QAClBgC,GAAG,EAAElB,aAAc;QACnBI,OAAO,EAAEA,OAAQ;QACjBH,KAAK,EAAEM,QAAS;QAAAD,QAAA,eAEhBT,IAAA,CAACC,UAAU,IAAE;MAAC,CACK;IAAC,CACN;EAAC,CACX,CACX;;EAED;EACA;EACA,IAAIO,sBAAsB,EAAE;IAC1B,oBACER,IAAA,CAACT,sBAAsB;MAAC+B,KAAK,EAAEC,MAAM,CAACC,SAAU;MAAAf,QAAA,EAC7CU;IAAiB,CACI,CAAC;EAE7B;EAEA,OAAOA,iBAAiB;AAC1B,CAAC;AAED,eAAejB,aAAa;AAE5B,MAAMqB,MAAM,GAAG/B,UAAU,CAACiC,MAAM,CAAC;EAC/BD,SAAS,EAAE;IACTE,IAAI,EAAE;EACR;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
// Bottom Tab Icons
|
|
3
4
|
export const homeIcon = require('./bottomtabs/home.png');
|
|
4
5
|
export const homeIconActive = require('./bottomtabs/homeactive.png');
|
|
5
6
|
export const analyticsIcon = require('./bottomtabs/analytics.png');
|
|
@@ -10,9 +11,7 @@ export const diaryIcon = require('./bottomtabs/diary.png');
|
|
|
10
11
|
export const diaryIconActive = require('./bottomtabs/diaryactive.png');
|
|
11
12
|
export const notificationIcon = require('./bottomtabs/notification.png');
|
|
12
13
|
export const notificationIconActive = require('./bottomtabs/notificationactive.png');
|
|
13
|
-
|
|
14
|
-
home: {
|
|
15
|
-
default: homeIcon,
|
|
14
|
+
//# sourceMappingURL=index.js.map: homeIcon,
|
|
16
15
|
active: homeIconActive
|
|
17
16
|
},
|
|
18
17
|
analytics: {
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
{"version":3,"names":["homeIcon","require","homeIconActive","analyticsIcon","analyticsIconActive","crmIcon","crmIconActive","diaryIcon","diaryIconActive","notificationIcon","notificationIconActive"
|
|
1
|
+
{"version":3,"names":["homeIcon","require","homeIconActive","analyticsIcon","analyticsIconActive","crmIcon","crmIconActive","diaryIcon","diaryIconActive","notificationIcon","notificationIconActive"],"sourceRoot":"../../../../src","sources":["assets/images/index.js"],"mappings":";;AAAA;AACA,OAAO,MAAMA,QAAQ,GAAGC,OAAO,CAAC,uBAAuB,CAAC;AACxD,OAAO,MAAMC,cAAc,GAAGD,OAAO,CAAC,6BAA6B,CAAC;AACpE,OAAO,MAAME,aAAa,GAAGF,OAAO,CAAC,4BAA4B,CAAC;AAClE,OAAO,MAAMG,mBAAmB,GAAGH,OAAO,CAAC,kCAAkC,CAAC;AAC9E,OAAO,MAAMI,OAAO,GAAGJ,OAAO,CAAC,sBAAsB,CAAC;AACtD,OAAO,MAAMK,aAAa,GAAGL,OAAO,CAAC,4BAA4B,CAAC;AAClE,OAAO,MAAMM,SAAS,GAAGN,OAAO,CAAC,wBAAwB,CAAC;AAC1D,OAAO,MAAMO,eAAe,GAAGP,OAAO,CAAC,8BAA8B,CAAC;AACtE,OAAO,MAAMQ,gBAAgB,GAAGR,OAAO,CAAC,+BAA+B,CAAC;AACxE,OAAO,MAAMS,sBAAsB,GAAGT,OAAO,CAAC,qCAAqC,CAAC","ignoreList":[]}
|
|
2
|
+
AAC,+BAA+B,CAAC;AAC7F,OAAO,MAAMS,sBAA2C,GAAGT,OAAO,CAAC,qCAAqC,CAAC;AAOzG,OAAO,MAAMU,cAAwC,GAAG;EACtDC,IAAI,EAAE;IACJC,OAAO,EAAEb,QAAQ;IACjBc,MAAM,EAAEZ;EACV,CAAC;EACDa,SAAS,EAAE;IACTF,OAAO,EAAEV,aAAa;IACtBW,MAAM,EAAEV;EACV,CAAC;EACDY,GAAG,EAAE;IACHH,OAAO,EAAER,OAAO;IAChBS,MAAM,EAAER;EACV,CAAC;EACDW,KAAK,EAAE;IACLJ,OAAO,EAAEN,SAAS;IAClBO,MAAM,EAAEN;EACV,CAAC;EACDU,YAAY,EAAE;IACZL,OAAO,EAAEJ,gBAAgB;IACzBK,MAAM,EAAEJ;EACV;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { View, Text, ActivityIndicator, StyleSheet } from 'react-native';
|
|
5
|
+
import { Colors } from "../constants/Colors.js";
|
|
6
|
+
import { verticalScale, moderateScale, scale } from 'react-native-size-matters';
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
const Loader = ({
|
|
9
|
+
message = 'Loading...',
|
|
10
|
+
overlay = false,
|
|
11
|
+
color = Colors.primary,
|
|
12
|
+
style
|
|
13
|
+
}) => {
|
|
14
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
15
|
+
style: [styles.container, overlay ? styles.overlay : null, style],
|
|
16
|
+
children: [/*#__PURE__*/_jsx(ActivityIndicator, {
|
|
17
|
+
size: "large",
|
|
18
|
+
color: color
|
|
19
|
+
}), message ? /*#__PURE__*/_jsx(Text, {
|
|
20
|
+
style: styles.text,
|
|
21
|
+
children: message
|
|
22
|
+
}) : null]
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
export default Loader;
|
|
26
|
+
const styles = StyleSheet.create({
|
|
27
|
+
container: {
|
|
28
|
+
paddingVertical: verticalScale(16),
|
|
29
|
+
paddingHorizontal: scale(12),
|
|
30
|
+
alignItems: 'center',
|
|
31
|
+
justifyContent: 'center',
|
|
32
|
+
backgroundColor: Colors.white
|
|
33
|
+
},
|
|
34
|
+
overlay: {
|
|
35
|
+
...StyleSheet.absoluteFillObject,
|
|
36
|
+
zIndex: 10,
|
|
37
|
+
backgroundColor: Colors.white50
|
|
38
|
+
},
|
|
39
|
+
text: {
|
|
40
|
+
marginTop: verticalScale(8),
|
|
41
|
+
fontSize: moderateScale(12),
|
|
42
|
+
color: Colors.black
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=Loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","Text","ActivityIndicator","StyleSheet","Colors","verticalScale","moderateScale","scale","jsx","_jsx","jsxs","_jsxs","Loader","message","overlay","color","primary","style","styles","container","children","size","text","create","paddingVertical","paddingHorizontal","alignItems","justifyContent","backgroundColor","white","absoluteFillObject","zIndex","white50","marginTop","fontSize","black"],"sourceRoot":"../../../src","sources":["components/Loader.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,EAAEC,iBAAiB,EAAEC,UAAU,QAAQ,cAAc;AAExE,SAASC,MAAM,QAAQ,wBAAqB;AAC5C,SAASC,aAAa,EAAEC,aAAa,EAAEC,KAAK,QAAQ,2BAA2B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAShF,MAAMC,MAA6B,GAAGA,CAAC;EACrCC,OAAO,GAAG,YAAY;EACtBC,OAAO,GAAG,KAAK;EACfC,KAAK,GAAGX,MAAM,CAACY,OAAO;EACtBC;AACF,CAAC,KAAK;EACJ,oBACEN,KAAA,CAACX,IAAI;IAACiB,KAAK,EAAE,CAACC,MAAM,CAACC,SAAS,EAAEL,OAAO,GAAGI,MAAM,CAACJ,OAAO,GAAG,IAAI,EAAEG,KAAK,CAAE;IAAAG,QAAA,gBACtEX,IAAA,CAACP,iBAAiB;MAACmB,IAAI,EAAC,OAAO;MAACN,KAAK,EAAEA;IAAM,CAAE,CAAC,EAC/CF,OAAO,gBAAGJ,IAAA,CAACR,IAAI;MAACgB,KAAK,EAAEC,MAAM,CAACI,IAAK;MAAAF,QAAA,EAAEP;IAAO,CAAO,CAAC,GAAG,IAAI;EAAA,CACxD,CAAC;AAEX,CAAC;AAED,eAAeD,MAAM;AAErB,MAAMM,MAAM,GAAGf,UAAU,CAACoB,MAAM,CAAC;EAC/BJ,SAAS,EAAE;IACTK,eAAe,EAAEnB,aAAa,CAAC,EAAE,CAAC;IAClCoB,iBAAiB,EAAElB,KAAK,CAAC,EAAE,CAAC;IAC5BmB,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,eAAe,EAAExB,MAAM,CAACyB;EAC1B,CAAC;EACDf,OAAO,EAAE;IACP,GAAGX,UAAU,CAAC2B,kBAAkB;IAChCC,MAAM,EAAE,EAAE;IACVH,eAAe,EAAExB,MAAM,CAAC4B;EAC1B,CAAC;EACDV,IAAI,EAAE;IACJW,SAAS,EAAE5B,aAAa,CAAC,CAAC,CAAC;IAC3B6B,QAAQ,EAAE5B,aAAa,CAAC,EAAE,CAAC;IAC3BS,KAAK,EAAEX,MAAM,CAAC+B;EAChB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -24,6 +24,9 @@ let globalConfig = {
|
|
|
24
24
|
* Initialize Salespanda SDK with custom configuration
|
|
25
25
|
*/
|
|
26
26
|
export function initializeSalespanda(config) {
|
|
27
|
+
// Debug log for toolkit usage
|
|
28
|
+
// Helps in verifying that initializeSalespanda is being called correctly from host app
|
|
29
|
+
console.log('[Salespanda][initializeSalespanda] called with config:', config);
|
|
27
30
|
globalConfig = {
|
|
28
31
|
...globalConfig,
|
|
29
32
|
...config,
|
|
@@ -36,12 +39,25 @@ export function initializeSalespanda(config) {
|
|
|
36
39
|
...config.features
|
|
37
40
|
}
|
|
38
41
|
};
|
|
42
|
+
|
|
43
|
+
// If host app passes tokens, make them available runtime-wide
|
|
44
|
+
if (config.auth?.token || config.auth?.accessToken) {
|
|
45
|
+
// Lazy import to avoid circular dep
|
|
46
|
+
const {
|
|
47
|
+
setRuntimeTokens
|
|
48
|
+
} = require('../services/api');
|
|
49
|
+
setRuntimeTokens({
|
|
50
|
+
token: config.auth?.token || null,
|
|
51
|
+
accessToken: config.auth?.accessToken || null
|
|
52
|
+
});
|
|
53
|
+
}
|
|
39
54
|
}
|
|
40
55
|
|
|
41
56
|
/**
|
|
42
57
|
* Get current Salespanda configuration
|
|
43
58
|
*/
|
|
44
59
|
export function getSalespandaConfig() {
|
|
60
|
+
console.log('[Salespanda][getSalespandaConfig] returning config:', globalConfig);
|
|
45
61
|
return globalConfig;
|
|
46
62
|
}
|
|
47
63
|
|
|
@@ -49,6 +65,7 @@ export function getSalespandaConfig() {
|
|
|
49
65
|
* Reset configuration to defaults
|
|
50
66
|
*/
|
|
51
67
|
export function resetSalespandaConfig() {
|
|
68
|
+
console.log('[Salespanda][resetSalespandaConfig] resetting config to defaults');
|
|
52
69
|
globalConfig = {
|
|
53
70
|
theme: {
|
|
54
71
|
primaryColor: '#4a148c',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["globalConfig","theme","primaryColor","secondaryColor","backgroundColor","textColor","accentColor","features","enablePremium","enableNotifications","enableReports","enableDrawer","initializeSalespanda","config","getSalespandaConfig","resetSalespandaConfig"],"sourceRoot":"../../../src","sources":["config/SalespandaConfig.ts"],"mappings":";;AAAA;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["globalConfig","theme","primaryColor","secondaryColor","backgroundColor","textColor","accentColor","features","enablePremium","enableNotifications","enableReports","enableDrawer","initializeSalespanda","config","console","log","auth","token","accessToken","setRuntimeTokens","require","getSalespandaConfig","resetSalespandaConfig"],"sourceRoot":"../../../src","sources":["config/SalespandaConfig.ts"],"mappings":";;AAAA;AACA;AACA;;AAyDA,IAAIA,YAA8B,GAAG;EACnCC,KAAK,EAAE;IACLC,YAAY,EAAE,SAAS;IACvBC,cAAc,EAAE,SAAS;IACzBC,eAAe,EAAE,MAAM;IACvBC,SAAS,EAAE,MAAM;IACjBC,WAAW,EAAE;EACf,CAAC;EACDC,QAAQ,EAAE;IACRC,aAAa,EAAE,IAAI;IACnBC,mBAAmB,EAAE,IAAI;IACzBC,aAAa,EAAE,IAAI;IACnBC,YAAY,EAAE;EAChB;AACF,CAAC;;AAED;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAACC,MAAwB,EAAQ;EACnE;EACA;EACAC,OAAO,CAACC,GAAG,CAAC,wDAAwD,EAAEF,MAAM,CAAC;EAE7Eb,YAAY,GAAG;IACb,GAAGA,YAAY;IACf,GAAGa,MAAM;IACTZ,KAAK,EAAE;MACL,GAAGD,YAAY,CAACC,KAAK;MACrB,GAAGY,MAAM,CAACZ;IACZ,CAAC;IACDM,QAAQ,EAAE;MACR,GAAGP,YAAY,CAACO,QAAQ;MACxB,GAAGM,MAAM,CAACN;IACZ;EACF,CAAC;;EAED;EACA,IAAIM,MAAM,CAACG,IAAI,EAAEC,KAAK,IAAIJ,MAAM,CAACG,IAAI,EAAEE,WAAW,EAAE;IAClD;IACA,MAAM;MAAEC;IAAiB,CAAC,GAAGC,OAAO,CAAC,iBAAiB,CAAC;IACvDD,gBAAgB,CAAC;MACfF,KAAK,EAAEJ,MAAM,CAACG,IAAI,EAAEC,KAAK,IAAI,IAAI;MACjCC,WAAW,EAAEL,MAAM,CAACG,IAAI,EAAEE,WAAW,IAAI;IAC3C,CAAC,CAAC;EACJ;AACF;;AAEA;AACA;AACA;AACA,OAAO,SAASG,mBAAmBA,CAAA,EAAqB;EACtDP,OAAO,CAACC,GAAG,CACT,qDAAqD,EACrDf,YACF,CAAC;EACD,OAAOA,YAAY;AACrB;;AAEA;AACA;AACA;AACA,OAAO,SAASsB,qBAAqBA,CAAA,EAAS;EAC5CR,OAAO,CAACC,GAAG,CACT,kEACF,CAAC;EAEDf,YAAY,GAAG;IACbC,KAAK,EAAE;MACLC,YAAY,EAAE,SAAS;MACvBC,cAAc,EAAE,SAAS;MACzBC,eAAe,EAAE,MAAM;MACvBC,SAAS,EAAE,MAAM;MACjBC,WAAW,EAAE;IACf,CAAC;IACDC,QAAQ,EAAE;MACRC,aAAa,EAAE,IAAI;MACnBC,mBAAmB,EAAE,IAAI;MACzBC,aAAa,EAAE,IAAI;MACnBC,YAAY,EAAE;IAChB;EACF,CAAC;AACH","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,45 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* Salespanda SDK
|
|
5
|
-
*
|
|
6
|
-
* This SDK can be used in two ways:
|
|
7
|
-
*
|
|
8
|
-
* 1. As a complete standalone app:
|
|
9
|
-
* import SalespandaApp from 'react-native-salespanda';
|
|
10
|
-
* <SalespandaApp />
|
|
11
|
-
*
|
|
12
|
-
* 2. As individual components/screens in your app:
|
|
13
|
-
* import { HomeScreen, ProfileScreen } from 'react-native-salespanda';
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
// Import gesture handler at the very top
|
|
17
|
-
|
|
18
|
-
// ============================================
|
|
19
|
-
// MAIN APP EXPORT (Default)
|
|
20
|
-
// ============================================
|
|
21
3
|
export { default } from "./SalespandaApp.js";
|
|
22
4
|
export { default as SalespandaApp } from "./SalespandaApp.js";
|
|
23
|
-
// ============================================
|
|
24
|
-
// CONFIGURATION
|
|
25
|
-
// ============================================
|
|
26
5
|
export { initializeSalespanda, getSalespandaConfig, resetSalespandaConfig } from "./config/SalespandaConfig.js";
|
|
27
|
-
|
|
28
|
-
// FLAVOR CONFIGURATION
|
|
29
|
-
// ============================================
|
|
6
|
+
export { login, logout, isAuthenticated, getCurrentUser, getCurrentToken } from "./services/authService.js";
|
|
30
7
|
export { getFlavorConfig } from "./config/FlavorConfig.js";
|
|
31
8
|
export { default as FlavorConfig } from "./config/FlavorConfig.js";
|
|
32
|
-
|
|
33
|
-
// ============================================
|
|
34
|
-
// NAVIGATION COMPONENTS
|
|
35
|
-
// ============================================
|
|
36
9
|
export { default as AppNavigator } from "./navigation/AppNavigator.js";
|
|
37
10
|
export { default as DrawerNavigator } from "./navigation/DrawerNavigator.js";
|
|
38
11
|
export { default as BottomTabNavigator } from "./navigation/BottomTabNavigator.js";
|
|
39
|
-
|
|
40
|
-
// ============================================
|
|
41
|
-
// SCREEN COMPONENTS (Library Mode)
|
|
42
|
-
// ============================================
|
|
43
12
|
export { default as HomeScreen } from "./screens/Tabs/HomeScreen.js";
|
|
44
13
|
export { default as ProfileScreen } from "./screens/Tabs/ActivityAnalytics.js";
|
|
45
14
|
export { default as NotificationsScreen } from "./screens/Tabs/NotificationsScreen.js";
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["default","SalespandaApp","initializeSalespanda","getSalespandaConfig","resetSalespandaConfig","getFlavorConfig","FlavorConfig","AppNavigator","DrawerNavigator","BottomTabNavigator","HomeScreen","ProfileScreen","NotificationsScreen","ReportsScreen","PremiumScreen"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA
|
|
1
|
+
{"version":3,"names":["default","SalespandaApp","initializeSalespanda","getSalespandaConfig","resetSalespandaConfig","login","logout","isAuthenticated","getCurrentUser","getCurrentToken","getFlavorConfig","FlavorConfig","AppNavigator","DrawerNavigator","BottomTabNavigator","HomeScreen","ProfileScreen","NotificationsScreen","ReportsScreen","PremiumScreen"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,oBAAiB;AACzC,SAASA,OAAO,IAAIC,aAAa,QAAQ,oBAAiB;AAG1D,SACEC,oBAAoB,EACpBC,mBAAmB,EACnBC,qBAAqB,QAChB,8BAA2B;AAGlC,SACEC,KAAK,EACLC,MAAM,EACNC,eAAe,EACfC,cAAc,EACdC,eAAe,QACV,2BAAwB;AAE/B,SAASC,eAAe,QAAQ,0BAAuB;AACvD,SAASV,OAAO,IAAIW,YAAY,QAAQ,0BAAuB;AAE/D,SAASX,OAAO,IAAIY,YAAY,QAAQ,8BAA2B;AACnE,SAASZ,OAAO,IAAIa,eAAe,QAAQ,iCAA8B;AACzE,SAASb,OAAO,IAAIc,kBAAkB,QAAQ,oCAAiC;AAE/E,SAASd,OAAO,IAAIe,UAAU,QAAQ,8BAA2B;AACjE,SAASf,OAAO,IAAIgB,aAAa,QAAQ,qCAAkC;AAC3E,SAAShB,OAAO,IAAIiB,mBAAmB,QAAQ,uCAAoC;AACnF,SAASjB,OAAO,IAAIkB,aAAa,QAAQ,4BAAyB;AAClE,SAASlB,OAAO,IAAImB,aAAa,QAAQ,6BAA0B","ignoreList":[]}
|
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { View, Text, StyleSheet, TouchableOpacity, ScrollView, Image, FlatList, Dimensions } from 'react-native';
|
|
5
|
-
import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
|
|
6
|
-
import { Colors } from "../../constants/Colors.js";
|
|
5
|
+
import { scale, verticalScale, moderateScale, moderateVerticalScale } from 'react-native-size-matters';
|
|
7
6
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
|
7
|
+
import Loader from "../../components/Loader.js";
|
|
8
8
|
import TabsHeader from "../../components/TabsHeader.js";
|
|
9
|
-
import {
|
|
9
|
+
import { Colors } from "../../constants/Colors.js";
|
|
10
|
+
import { useAuthenticateMutation, useLazyGetHomeQuery, useSpssoLoginMutation, loadPersistedTokens, persistTokens, setRuntimeTokens, clearPersistedTokens } from "../../services/api.js";
|
|
11
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
10
12
|
const MenuItem = ({
|
|
11
13
|
title,
|
|
12
|
-
|
|
14
|
+
imageUrl,
|
|
13
15
|
onPress
|
|
14
16
|
}) => {
|
|
15
17
|
return /*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
@@ -17,9 +19,14 @@ const MenuItem = ({
|
|
|
17
19
|
onPress: onPress,
|
|
18
20
|
children: [/*#__PURE__*/_jsx(View, {
|
|
19
21
|
style: styles.iconContainer,
|
|
20
|
-
children: /*#__PURE__*/_jsx(
|
|
22
|
+
children: imageUrl ? /*#__PURE__*/_jsx(Image, {
|
|
23
|
+
source: {
|
|
24
|
+
uri: imageUrl
|
|
25
|
+
},
|
|
26
|
+
style: styles.menuItemImage
|
|
27
|
+
}) : /*#__PURE__*/_jsx(Text, {
|
|
21
28
|
style: styles.iconText,
|
|
22
|
-
children:
|
|
29
|
+
children: "\uD83D\uDCCC"
|
|
23
30
|
})
|
|
24
31
|
}), /*#__PURE__*/_jsx(Text, {
|
|
25
32
|
style: styles.menuItemText,
|
|
@@ -28,7 +35,19 @@ const MenuItem = ({
|
|
|
28
35
|
});
|
|
29
36
|
};
|
|
30
37
|
const HomeScreen = () => {
|
|
31
|
-
const
|
|
38
|
+
const [loading, setLoading] = React.useState(false);
|
|
39
|
+
const [error, setError] = React.useState(null);
|
|
40
|
+
const [homeData, setHomeData] = React.useState(null);
|
|
41
|
+
const [authenticate] = useAuthenticateMutation();
|
|
42
|
+
const [spssoLogin] = useSpssoLoginMutation();
|
|
43
|
+
const [triggerHome, {
|
|
44
|
+
isFetching: isHomeFetching
|
|
45
|
+
}] = useLazyGetHomeQuery();
|
|
46
|
+
const bannerItems = React.useMemo(() => homeData?.home_banner && homeData.home_banner.length > 0 ? homeData.home_banner.map(item => ({
|
|
47
|
+
image: item.image,
|
|
48
|
+
title: item.title ?? undefined
|
|
49
|
+
})) : [], [homeData?.home_banner]);
|
|
50
|
+
const menuItems = React.useMemo(() => homeData?.menu ?? [], [homeData?.menu]);
|
|
32
51
|
const screenWidth = Dimensions.get('window').width;
|
|
33
52
|
const [activeIndex, setActiveIndex] = React.useState(0);
|
|
34
53
|
const flatListRef = React.useRef(null);
|
|
@@ -37,10 +56,78 @@ const HomeScreen = () => {
|
|
|
37
56
|
const index = Math.round(offsetX / screenWidth);
|
|
38
57
|
setActiveIndex(index);
|
|
39
58
|
};
|
|
59
|
+
const loadHomeData = React.useCallback(async isRetry => {
|
|
60
|
+
try {
|
|
61
|
+
setLoading(true);
|
|
62
|
+
setError(null);
|
|
63
|
+
const storedTokens = await loadPersistedTokens();
|
|
64
|
+
let accessToken = storedTokens.accessToken;
|
|
65
|
+
let token = storedTokens.token;
|
|
66
|
+
if (!accessToken) {
|
|
67
|
+
const authResp = await authenticate({}).unwrap();
|
|
68
|
+
accessToken = authResp.access_token;
|
|
69
|
+
setRuntimeTokens({
|
|
70
|
+
accessToken
|
|
71
|
+
});
|
|
72
|
+
await persistTokens({
|
|
73
|
+
accessToken
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (!token && accessToken) {
|
|
77
|
+
const ssoResp = await spssoLogin({
|
|
78
|
+
access_token: accessToken
|
|
79
|
+
}).unwrap();
|
|
80
|
+
token = ssoResp.token;
|
|
81
|
+
setRuntimeTokens({
|
|
82
|
+
token
|
|
83
|
+
});
|
|
84
|
+
await persistTokens({
|
|
85
|
+
token
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (!token) {
|
|
89
|
+
throw new Error('Missing auth token, please try again.');
|
|
90
|
+
}
|
|
91
|
+
const tokenHeader = token ?? undefined;
|
|
92
|
+
const homeResp = await triggerHome({
|
|
93
|
+
tokenOverride: tokenHeader
|
|
94
|
+
}).unwrap();
|
|
95
|
+
const isSuccess = homeResp.statusCode === '200' && homeResp.status?.toLowerCase() === 'success';
|
|
96
|
+
if (!isSuccess) {
|
|
97
|
+
const code = homeResp.statusCode;
|
|
98
|
+
|
|
99
|
+
// If unauthorized, clear tokens once and retry
|
|
100
|
+
if (!isRetry && code && (code === '1008' || code === '401' || code === '403')) {
|
|
101
|
+
await clearPersistedTokens();
|
|
102
|
+
setRuntimeTokens({
|
|
103
|
+
token: null,
|
|
104
|
+
accessToken: null
|
|
105
|
+
});
|
|
106
|
+
await loadHomeData(true);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
throw new Error(homeResp.message || 'Failed to load home data');
|
|
110
|
+
}
|
|
111
|
+
setHomeData(homeResp.response);
|
|
112
|
+
setLoading(false);
|
|
113
|
+
} catch (e) {
|
|
114
|
+
const statusCode = e?.status || e?.data?.statusCode;
|
|
115
|
+
if (statusCode === 401 || statusCode === 403) {
|
|
116
|
+
// For unauthorized keep loader spinning (no static fallback)
|
|
117
|
+
setError(null);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
setError(e?.data?.message || e?.message || 'Failed to load home data. Please try again.');
|
|
121
|
+
setLoading(false);
|
|
122
|
+
}
|
|
123
|
+
}, [authenticate, spssoLogin, triggerHome]);
|
|
124
|
+
React.useEffect(() => {
|
|
125
|
+
loadHomeData();
|
|
126
|
+
}, [loadHomeData]);
|
|
40
127
|
React.useEffect(() => {
|
|
41
128
|
const id = setInterval(() => {
|
|
42
129
|
setActiveIndex(prev => {
|
|
43
|
-
const next = (prev + 1) %
|
|
130
|
+
const next = bannerItems.length > 0 ? (prev + 1) % bannerItems.length : 0;
|
|
44
131
|
if (flatListRef.current) {
|
|
45
132
|
try {
|
|
46
133
|
flatListRef.current.scrollToIndex({
|
|
@@ -54,8 +141,10 @@ const HomeScreen = () => {
|
|
|
54
141
|
return next;
|
|
55
142
|
});
|
|
56
143
|
}, 2500);
|
|
57
|
-
return () =>
|
|
58
|
-
|
|
144
|
+
return () => {
|
|
145
|
+
clearInterval(id);
|
|
146
|
+
};
|
|
147
|
+
}, [bannerItems.length]);
|
|
59
148
|
return /*#__PURE__*/_jsx(SafeAreaView, {
|
|
60
149
|
style: styles.safeArea,
|
|
61
150
|
edges: ['top', 'bottom'],
|
|
@@ -63,19 +152,22 @@ const HomeScreen = () => {
|
|
|
63
152
|
style: styles.container,
|
|
64
153
|
children: [/*#__PURE__*/_jsx(TabsHeader, {
|
|
65
154
|
title: "Home"
|
|
66
|
-
}), /*#__PURE__*/_jsxs(
|
|
67
|
-
style: styles.
|
|
68
|
-
children: [/*#__PURE__*/
|
|
155
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
156
|
+
style: styles.contentWrapper,
|
|
157
|
+
children: [loading || isHomeFetching || !homeData ? /*#__PURE__*/_jsx(Loader, {
|
|
158
|
+
overlay: true,
|
|
159
|
+
message: "Loading home data..."
|
|
160
|
+
}) : null, /*#__PURE__*/_jsxs(View, {
|
|
69
161
|
style: styles.carouselContainer,
|
|
70
162
|
children: [/*#__PURE__*/_jsx(FlatList, {
|
|
71
163
|
ref: flatListRef,
|
|
72
|
-
data:
|
|
73
|
-
keyExtractor: (
|
|
164
|
+
data: bannerItems,
|
|
165
|
+
keyExtractor: (item, idx) => `${item.title || 'banner'}-${idx}`,
|
|
74
166
|
renderItem: ({
|
|
75
167
|
item
|
|
76
168
|
}) => /*#__PURE__*/_jsx(Image, {
|
|
77
169
|
source: {
|
|
78
|
-
uri: item
|
|
170
|
+
uri: item.image
|
|
79
171
|
},
|
|
80
172
|
style: [styles.carouselImage, {
|
|
81
173
|
width: screenWidth
|
|
@@ -92,58 +184,31 @@ const HomeScreen = () => {
|
|
|
92
184
|
})
|
|
93
185
|
}), /*#__PURE__*/_jsx(View, {
|
|
94
186
|
style: styles.carouselIndicatorsOverlay,
|
|
95
|
-
children:
|
|
187
|
+
children: bannerItems.map((_, idx) => /*#__PURE__*/_jsx(View, {
|
|
96
188
|
style: [styles.indicator, idx === activeIndex ? styles.activeIndicator : null]
|
|
97
189
|
}, idx))
|
|
98
190
|
})]
|
|
99
|
-
}), /*#__PURE__*/_jsxs(
|
|
100
|
-
style: styles.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}), /*#__PURE__*/_jsx(
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
})
|
|
120
|
-
title: "Quiz,Calculator & Referrals",
|
|
121
|
-
icon: "\u2753"
|
|
122
|
-
}), /*#__PURE__*/_jsx(MenuItem, {
|
|
123
|
-
title: "My Profile",
|
|
124
|
-
icon: "\uFFFD"
|
|
125
|
-
}), /*#__PURE__*/_jsx(MenuItem, {
|
|
126
|
-
title: "Microsite Setup",
|
|
127
|
-
icon: "\u2699\uFE0F"
|
|
128
|
-
}), /*#__PURE__*/_jsx(MenuItem, {
|
|
129
|
-
title: "My Activity",
|
|
130
|
-
icon: "\uD83D\uDCCA"
|
|
131
|
-
}), /*#__PURE__*/_jsx(MenuItem, {
|
|
132
|
-
title: "Internal Communication",
|
|
133
|
-
icon: "\uD83D\uDCAC"
|
|
134
|
-
}), /*#__PURE__*/_jsx(MenuItem, {
|
|
135
|
-
title: "Help Videos",
|
|
136
|
-
icon: "\uD83C\uDFA5"
|
|
137
|
-
}), /*#__PURE__*/_jsx(MenuItem, {
|
|
138
|
-
title: "Import Gmail",
|
|
139
|
-
icon: "\uFFFD"
|
|
140
|
-
}), /*#__PURE__*/_jsx(MenuItem, {
|
|
141
|
-
title: "Proposal",
|
|
142
|
-
icon: "\uD83D\uDCCB"
|
|
143
|
-
}), /*#__PURE__*/_jsx(MenuItem, {
|
|
144
|
-
title: "Courses",
|
|
145
|
-
icon: "\uD83C\uDF93"
|
|
146
|
-
})]
|
|
191
|
+
}), /*#__PURE__*/_jsxs(ScrollView, {
|
|
192
|
+
style: styles.scrollView,
|
|
193
|
+
contentContainerStyle: styles.scrollContent,
|
|
194
|
+
children: [error ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
195
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
196
|
+
style: styles.errorText,
|
|
197
|
+
children: error
|
|
198
|
+
}), /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
199
|
+
onPress: () => loadHomeData(),
|
|
200
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
201
|
+
style: styles.retryText,
|
|
202
|
+
children: "Tap to retry"
|
|
203
|
+
})
|
|
204
|
+
})]
|
|
205
|
+
}) : null, menuItems.length > 0 ? /*#__PURE__*/_jsx(View, {
|
|
206
|
+
style: styles.menuGrid,
|
|
207
|
+
children: menuItems.map(item => /*#__PURE__*/_jsx(MenuItem, {
|
|
208
|
+
title: item.title,
|
|
209
|
+
imageUrl: item.image
|
|
210
|
+
}, item.title))
|
|
211
|
+
}) : null]
|
|
147
212
|
})]
|
|
148
213
|
})]
|
|
149
214
|
})
|
|
@@ -163,21 +228,24 @@ const styles = StyleSheet.create({
|
|
|
163
228
|
flex: 1,
|
|
164
229
|
backgroundColor: Colors.white
|
|
165
230
|
},
|
|
231
|
+
scrollContent: {
|
|
232
|
+
paddingBottom: verticalScale(24)
|
|
233
|
+
},
|
|
166
234
|
carouselContainer: {
|
|
167
235
|
width: '100%',
|
|
168
236
|
backgroundColor: Colors.white,
|
|
169
|
-
// subtle backplate for image load
|
|
170
237
|
position: 'relative'
|
|
171
238
|
},
|
|
172
239
|
carouselImage: {
|
|
173
|
-
height: verticalScale(
|
|
174
|
-
resizeMode: '
|
|
240
|
+
height: verticalScale(155),
|
|
241
|
+
resizeMode: 'contain',
|
|
242
|
+
backgroundColor: Colors.white
|
|
175
243
|
},
|
|
176
244
|
carouselIndicatorsOverlay: {
|
|
177
245
|
position: 'absolute',
|
|
178
246
|
left: 0,
|
|
179
247
|
right: 0,
|
|
180
|
-
bottom: verticalScale(
|
|
248
|
+
bottom: verticalScale(20),
|
|
181
249
|
flexDirection: 'row',
|
|
182
250
|
justifyContent: 'center',
|
|
183
251
|
alignItems: 'center'
|
|
@@ -196,33 +264,28 @@ const styles = StyleSheet.create({
|
|
|
196
264
|
menuGrid: {
|
|
197
265
|
flexDirection: 'row',
|
|
198
266
|
flexWrap: 'wrap',
|
|
199
|
-
|
|
200
|
-
|
|
267
|
+
paddingTop: scale(8),
|
|
268
|
+
paddingBottom: verticalScale(16),
|
|
269
|
+
justifyContent: 'flex-start',
|
|
270
|
+
alignSelf: 'center',
|
|
271
|
+
width: '94%'
|
|
201
272
|
},
|
|
202
273
|
menuItem: {
|
|
203
|
-
width: '
|
|
274
|
+
width: '29.5%',
|
|
204
275
|
aspectRatio: 1,
|
|
205
276
|
backgroundColor: Colors.lightblue,
|
|
206
277
|
borderRadius: moderateScale(16),
|
|
207
|
-
padding:
|
|
208
|
-
marginBottom:
|
|
278
|
+
padding: moderateScale(12),
|
|
279
|
+
marginBottom: moderateVerticalScale(8),
|
|
280
|
+
marginHorizontal: scale(6),
|
|
209
281
|
alignItems: 'center',
|
|
210
282
|
justifyContent: 'center',
|
|
211
|
-
shadowColor: Colors.black,
|
|
212
|
-
shadowOffset: {
|
|
213
|
-
width: 0,
|
|
214
|
-
height: 0
|
|
215
|
-
},
|
|
216
|
-
shadowOpacity: 0.1,
|
|
217
|
-
shadowRadius: 0.5,
|
|
218
283
|
borderWidth: 1,
|
|
219
284
|
borderColor: Colors.border
|
|
220
285
|
},
|
|
221
286
|
iconContainer: {
|
|
222
287
|
width: scale(50),
|
|
223
288
|
height: scale(50),
|
|
224
|
-
borderRadius: moderateScale(25),
|
|
225
|
-
backgroundColor: Colors.divider,
|
|
226
289
|
justifyContent: 'center',
|
|
227
290
|
alignItems: 'center',
|
|
228
291
|
marginBottom: verticalScale(8)
|
|
@@ -230,11 +293,39 @@ const styles = StyleSheet.create({
|
|
|
230
293
|
iconText: {
|
|
231
294
|
fontSize: moderateScale(24)
|
|
232
295
|
},
|
|
296
|
+
menuItemImage: {
|
|
297
|
+
width: scale(40),
|
|
298
|
+
height: scale(40),
|
|
299
|
+
borderRadius: moderateScale(20),
|
|
300
|
+
resizeMode: 'cover'
|
|
301
|
+
},
|
|
233
302
|
menuItemText: {
|
|
234
303
|
fontSize: moderateScale(11),
|
|
235
304
|
textAlign: 'center',
|
|
236
305
|
color: Colors.black,
|
|
237
306
|
fontWeight: '500'
|
|
307
|
+
},
|
|
308
|
+
statusText: {
|
|
309
|
+
fontSize: moderateScale(12),
|
|
310
|
+
color: Colors.black,
|
|
311
|
+
paddingHorizontal: scale(12),
|
|
312
|
+
paddingTop: verticalScale(8)
|
|
313
|
+
},
|
|
314
|
+
errorText: {
|
|
315
|
+
fontSize: moderateScale(12),
|
|
316
|
+
color: 'red',
|
|
317
|
+
paddingHorizontal: scale(12),
|
|
318
|
+
paddingTop: verticalScale(4)
|
|
319
|
+
},
|
|
320
|
+
retryText: {
|
|
321
|
+
fontSize: moderateScale(12),
|
|
322
|
+
color: Colors.primary,
|
|
323
|
+
paddingHorizontal: scale(12),
|
|
324
|
+
paddingTop: verticalScale(6)
|
|
325
|
+
},
|
|
326
|
+
contentWrapper: {
|
|
327
|
+
flex: 1,
|
|
328
|
+
position: 'relative'
|
|
238
329
|
}
|
|
239
330
|
});
|
|
240
331
|
//# sourceMappingURL=HomeScreen.js.map
|