react-native-salespanda 0.4.3 → 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.
Files changed (42) hide show
  1. package/lib/module/SalespandaApp.js +16 -8
  2. package/lib/module/SalespandaApp.js.map +1 -1
  3. package/lib/module/assets/images/index.js +20 -0
  4. package/lib/module/assets/images/index.js.map +1 -0
  5. package/lib/module/components/Loader.js +45 -0
  6. package/lib/module/components/Loader.js.map +1 -0
  7. package/lib/module/config/SalespandaConfig.js +17 -0
  8. package/lib/module/config/SalespandaConfig.js.map +1 -1
  9. package/lib/module/index.js +1 -32
  10. package/lib/module/index.js.map +1 -1
  11. package/lib/module/screens/Tabs/HomeScreen.js +174 -83
  12. package/lib/module/screens/Tabs/HomeScreen.js.map +1 -1
  13. package/lib/module/services/api.js +132 -0
  14. package/lib/module/services/api.js.map +1 -0
  15. package/lib/module/services/authService.js +59 -0
  16. package/lib/module/services/authService.js.map +1 -0
  17. package/lib/module/store/index.js +13 -0
  18. package/lib/module/store/index.js.map +1 -0
  19. package/lib/typescript/src/SalespandaApp.d.ts.map +1 -1
  20. package/lib/typescript/src/components/Loader.d.ts +11 -0
  21. package/lib/typescript/src/components/Loader.d.ts.map +1 -0
  22. package/lib/typescript/src/config/SalespandaConfig.d.ts +14 -0
  23. package/lib/typescript/src/config/SalespandaConfig.d.ts.map +1 -1
  24. package/lib/typescript/src/index.d.ts +1 -12
  25. package/lib/typescript/src/index.d.ts.map +1 -1
  26. package/lib/typescript/src/screens/Tabs/HomeScreen.d.ts.map +1 -1
  27. package/lib/typescript/src/services/api.d.ts +638 -0
  28. package/lib/typescript/src/services/api.d.ts.map +1 -0
  29. package/lib/typescript/src/services/authService.d.ts +13 -0
  30. package/lib/typescript/src/services/authService.d.ts.map +1 -0
  31. package/lib/typescript/src/store/index.d.ts +36 -0
  32. package/lib/typescript/src/store/index.d.ts.map +1 -0
  33. package/package.json +9 -3
  34. package/react-native.config.js +8 -5
  35. package/src/SalespandaApp.tsx +18 -10
  36. package/src/components/Loader.tsx +48 -0
  37. package/src/config/SalespandaConfig.ts +37 -0
  38. package/src/index.tsx +8 -30
  39. package/src/screens/Tabs/HomeScreen.tsx +220 -61
  40. package/src/services/api.ts +173 -0
  41. package/src/services/authService.ts +75 -0
  42. 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(AppContent, {});
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(SafeAreaProvider, {
53
- initialMetrics: initialWindowMetrics,
54
- children: /*#__PURE__*/_jsx(NavigationContainer, {
55
- ref: navigationRef,
56
- onReady: onReady,
57
- theme: navTheme,
58
- children: /*#__PURE__*/_jsx(AppContent, {})
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","children","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,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,CAACL,cAAc,IAAE,CAAC;AAC3B,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMO,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,oBAAON,IAAA,CAACC,UAAU,IAAE,CAAC;EACvB;;EAEA;EACA,MAAMQ,QAAQ,GAAG;IACf,GAAGjB,YAAY;IACfkB,MAAM,EAAE;MACN,GAAGlB,YAAY,CAACkB,MAAM;MACtBC,UAAU,EAAEb,MAAM,CAACa,UAAU;MAC7BC,OAAO,EAAEd,MAAM,CAACc,OAAO;MACvBC,IAAI,EAAEf,MAAM,CAACgB,KAAK;MAClBC,IAAI,EAAEjB,MAAM,CAACkB,KAAK;MAClBC,MAAM,EAAEnB,MAAM,CAACmB;IACjB;EACF,CAAC;EAED,MAAMC,iBAAiB,gBACrBlB,IAAA,CAACJ,gBAAgB;IAACuB,cAAc,EAAEtB,oBAAqB;IAAAuB,QAAA,eACrDpB,IAAA,CAACT,mBAAmB;MAClB8B,GAAG,EAAElB,aAAc;MACnBI,OAAO,EAAEA,OAAQ;MACjBH,KAAK,EAAEK,QAAS;MAAAW,QAAA,eAEhBpB,IAAA,CAACC,UAAU,IAAE;IAAC,CACK;EAAC,CACN,CACnB;;EAED;EACA;EACA,IAAIO,sBAAsB,EAAE;IAC1B,oBACER,IAAA,CAACP,sBAAsB;MAAC6B,KAAK,EAAEC,MAAM,CAACC,SAAU;MAAAJ,QAAA,EAC7CF;IAAiB,CACI,CAAC;EAE7B;EAEA,OAAOA,iBAAiB;AAC1B,CAAC;AAED,eAAehB,aAAa;AAE5B,MAAMqB,MAAM,GAAG7B,UAAU,CAAC+B,MAAM,CAAC;EAC/BD,SAAS,EAAE;IACTE,IAAI,EAAE;EACR;AACF,CAAC,CAAC","ignoreList":[]}
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":[]}
@@ -11,4 +11,24 @@ export const diaryIcon = require('./bottomtabs/diary.png');
11
11
  export const diaryIconActive = require('./bottomtabs/diaryactive.png');
12
12
  export const notificationIcon = require('./bottomtabs/notification.png');
13
13
  export const notificationIconActive = require('./bottomtabs/notificationactive.png');
14
+ //# sourceMappingURL=index.js.map: homeIcon,
15
+ active: homeIconActive
16
+ },
17
+ analytics: {
18
+ default: analyticsIcon,
19
+ active: analyticsIconActive
20
+ },
21
+ crm: {
22
+ default: crmIcon,
23
+ active: crmIconActive
24
+ },
25
+ diary: {
26
+ default: diaryIcon,
27
+ active: diaryIconActive
28
+ },
29
+ notification: {
30
+ default: notificationIcon,
31
+ active: notificationIconActive
32
+ }
33
+ };
14
34
  //# sourceMappingURL=index.js.map
@@ -1 +1,2 @@
1
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;;AA0CA,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;EACnEb,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;AACH;;AAEA;AACA;AACA;AACA,OAAO,SAASO,mBAAmBA,CAAA,EAAqB;EACtD,OAAOd,YAAY;AACrB;;AAEA;AACA;AACA;AACA,OAAO,SAASe,qBAAqBA,CAAA,EAAS;EAC5Cf,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":[]}
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":[]}
@@ -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";
@@ -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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,oBAAiB;AACzC,SAASA,OAAO,IAAIC,aAAa,QAAQ,oBAAiB;AAG1D;AACA;AACA;AACA,SACEC,oBAAoB,EACpBC,mBAAmB,EACnBC,qBAAqB,QAChB,8BAA2B;AAGlC;AACA;AACA;AACA,SAASC,eAAe,QAAQ,0BAAuB;AACvD,SAASL,OAAO,IAAIM,YAAY,QAAQ,0BAAuB;;AAE/D;AACA;AACA;AACA,SAASN,OAAO,IAAIO,YAAY,QAAQ,8BAA2B;AACnE,SAASP,OAAO,IAAIQ,eAAe,QAAQ,iCAA8B;AACzE,SAASR,OAAO,IAAIS,kBAAkB,QAAQ,oCAAiC;;AAE/E;AACA;AACA;AACA,SAAST,OAAO,IAAIU,UAAU,QAAQ,8BAA2B;AACjE,SAASV,OAAO,IAAIW,aAAa,QAAQ,qCAAkC;AAC3E,SAASX,OAAO,IAAIY,mBAAmB,QAAQ,uCAAoC;AACnF,SAASZ,OAAO,IAAIa,aAAa,QAAQ,4BAAyB;AAClE,SAASb,OAAO,IAAIc,aAAa,QAAQ,6BAA0B","ignoreList":[]}
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 { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
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
- icon,
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(Text, {
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: icon
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 images = ['https://images.unsplash.com/photo-1500530855697-b586d89ba3ee?q=80&w=1200&auto=format&fit=crop', 'https://images.unsplash.com/photo-1482192596544-9eb780fc7f66?q=80&w=1200&auto=format&fit=crop', 'https://images.unsplash.com/photo-1522071820081-009f0129c71c?q=80&w=1200&auto=format&fit=crop', 'https://images.unsplash.com/photo-1501785888041-af3ef285b470?q=80&w=1200&auto=format&fit=crop', 'https://images.unsplash.com/photo-1460353581641-37baddab0fa2?q=80&w=1200&auto=format&fit=crop', 'https://images.unsplash.com/photo-1496302662116-35cc4f36df92?q=80&w=1200&auto=format&fit=crop'];
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) % images.length;
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 () => clearInterval(id);
58
- }, [images.length]);
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(ScrollView, {
67
- style: styles.scrollView,
68
- children: [/*#__PURE__*/_jsxs(View, {
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: images,
73
- keyExtractor: (_, idx) => `${idx}`,
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: images.map((_, idx) => /*#__PURE__*/_jsx(View, {
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(View, {
100
- style: styles.menuGrid,
101
- children: [/*#__PURE__*/_jsx(MenuItem, {
102
- title: "Content Library",
103
- icon: "\uD83D\uDCDA"
104
- }), /*#__PURE__*/_jsx(MenuItem, {
105
- title: "DigiCard",
106
- icon: "\uFFFD"
107
- }), /*#__PURE__*/_jsx(MenuItem, {
108
- title: "Leads",
109
- icon: "\uD83C\uDFAF"
110
- }), /*#__PURE__*/_jsx(MenuItem, {
111
- title: "Email Campaign",
112
- icon: "\uD83D\uDCE7"
113
- }), /*#__PURE__*/_jsx(MenuItem, {
114
- title: "Cadence",
115
- icon: "\u23F0"
116
- }), /*#__PURE__*/_jsx(MenuItem, {
117
- title: "Social Setup",
118
- icon: "\uFFFD"
119
- }), /*#__PURE__*/_jsx(MenuItem, {
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(200),
174
- resizeMode: 'cover'
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(12),
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
- padding: scale(8),
200
- justifyContent: 'space-between'
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: '31%',
274
+ width: '29.5%',
204
275
  aspectRatio: 1,
205
276
  backgroundColor: Colors.lightblue,
206
277
  borderRadius: moderateScale(16),
207
- padding: scale(12),
208
- marginBottom: verticalScale(12),
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