@propel-nsl/propel-react-native-sdk 1.0.0

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 (221) hide show
  1. package/assets/fonts/Lexend-Black.ttf +0 -0
  2. package/assets/fonts/Lexend-Bold.ttf +0 -0
  3. package/assets/fonts/Lexend-ExtraBold.ttf +0 -0
  4. package/assets/fonts/Lexend-ExtraLight.ttf +0 -0
  5. package/assets/fonts/Lexend-Light.ttf +0 -0
  6. package/assets/fonts/Lexend-Medium.ttf +0 -0
  7. package/assets/fonts/Lexend-Regular.ttf +0 -0
  8. package/assets/fonts/Lexend-SemiBold.ttf +0 -0
  9. package/assets/fonts/Lexend-Thin.ttf +0 -0
  10. package/assets/images/HomeGoods.png +0 -0
  11. package/assets/images/accessories.png +0 -0
  12. package/assets/images/amazon.png +0 -0
  13. package/assets/images/apnaClubLogo.png +0 -0
  14. package/assets/images/apparel.png +0 -0
  15. package/assets/images/backgroundblue.png +0 -0
  16. package/assets/images/bannerCard.png +0 -0
  17. package/assets/images/bottomWave.png +0 -0
  18. package/assets/images/coin_1_1.png +0 -0
  19. package/assets/images/flipkart.png +0 -0
  20. package/assets/images/frame_1171278967.png +0 -0
  21. package/assets/images/gift.png +0 -0
  22. package/assets/images/herobanner.png +0 -0
  23. package/assets/images/hinduPencilsLogo.png +0 -0
  24. package/assets/images/icons/addwhiteicon.png +0 -0
  25. package/assets/images/icons/arrow-back.png +0 -0
  26. package/assets/images/icons/arrowgreen.png +0 -0
  27. package/assets/images/icons/arrowred.png +0 -0
  28. package/assets/images/icons/arrowright.png +0 -0
  29. package/assets/images/icons/arrowup.png +0 -0
  30. package/assets/images/icons/blackarrowdown.png +0 -0
  31. package/assets/images/icons/blackarrowup.png +0 -0
  32. package/assets/images/icons/blackcross.png +0 -0
  33. package/assets/images/icons/call.png +0 -0
  34. package/assets/images/icons/camera.png +0 -0
  35. package/assets/images/icons/cart.png +0 -0
  36. package/assets/images/icons/chat.png +0 -0
  37. package/assets/images/icons/circleblack.png +0 -0
  38. package/assets/images/icons/copy.png +0 -0
  39. package/assets/images/icons/cross.png +0 -0
  40. package/assets/images/icons/delete.png +0 -0
  41. package/assets/images/icons/delivery.png +0 -0
  42. package/assets/images/icons/eVoucher.png +0 -0
  43. package/assets/images/icons/editIcon.png +0 -0
  44. package/assets/images/icons/email.png +0 -0
  45. package/assets/images/icons/eye.png +0 -0
  46. package/assets/images/icons/faq.png +0 -0
  47. package/assets/images/icons/filtericon.png +0 -0
  48. package/assets/images/icons/greyDownArrow.png +0 -0
  49. package/assets/images/icons/help.png +0 -0
  50. package/assets/images/icons/home.png +0 -0
  51. package/assets/images/icons/homeinactive.png +0 -0
  52. package/assets/images/icons/i_blackicon.png +0 -0
  53. package/assets/images/icons/i_icon.png +0 -0
  54. package/assets/images/icons/location.png +0 -0
  55. package/assets/images/icons/logout.png +0 -0
  56. package/assets/images/icons/minus.png +0 -0
  57. package/assets/images/icons/myOrders.png +0 -0
  58. package/assets/images/icons/orders.png +0 -0
  59. package/assets/images/icons/pencillogo.png +0 -0
  60. package/assets/images/icons/pending.png +0 -0
  61. package/assets/images/icons/plus.png +0 -0
  62. package/assets/images/icons/redCross.png +0 -0
  63. package/assets/images/icons/redCrossicon.png +0 -0
  64. package/assets/images/icons/redWarningicon.png +0 -0
  65. package/assets/images/icons/redeem.png +0 -0
  66. package/assets/images/icons/redeemactive.png +0 -0
  67. package/assets/images/icons/redemptionHistory.png +0 -0
  68. package/assets/images/icons/redhelpicon.png +0 -0
  69. package/assets/images/icons/search.png +0 -0
  70. package/assets/images/icons/stopwatch.png +0 -0
  71. package/assets/images/icons/successTick.gif +0 -0
  72. package/assets/images/icons/tick.png +0 -0
  73. package/assets/images/icons/tnc.png +0 -0
  74. package/assets/images/icons/user.png +0 -0
  75. package/assets/images/icons/userredicon.png +0 -0
  76. package/assets/images/icons/wavecorner.png +0 -0
  77. package/assets/images/logo.png +0 -0
  78. package/assets/images/myntra_copy.png +0 -0
  79. package/assets/images/nike.png +0 -0
  80. package/assets/images/oq3p0u0_1.png +0 -0
  81. package/assets/images/profileicon.png +0 -0
  82. package/assets/images/topWave.png +0 -0
  83. package/assets/images/zagglePropelLogo.png +0 -0
  84. package/index.ts +23 -0
  85. package/lib/index.ts +25 -0
  86. package/package.json +70 -0
  87. package/src/PropelSDKScreen.tsx +98 -0
  88. package/src/SDKApp.tsx +540 -0
  89. package/src/bridge/SDKBridge.ts +104 -0
  90. package/src/bridge/index.ts +3 -0
  91. package/src/components/SDKBackHandler.tsx +187 -0
  92. package/src/components/SDKProfile.tsx +87 -0
  93. package/src/components/SDKProfileWrapper.tsx +51 -0
  94. package/src/constants.ts +10 -0
  95. package/src/contexts/SDKContext.tsx +72 -0
  96. package/src/hooks/useSDKBackNavigation.ts +61 -0
  97. package/src/navigation/SDKMainTabNavigator.tsx +315 -0
  98. package/src/navigation/SDKNavigator.tsx +41 -0
  99. package/src/redux/store.ts +32 -0
  100. package/src/screens/Dashboard/index.tsx +531 -0
  101. package/src/screens/Dashboard/styles.ts +512 -0
  102. package/src/screens/DeliveryAddress/index.tsx +221 -0
  103. package/src/screens/DeliveryAddress/styles.ts +122 -0
  104. package/src/screens/E-Vouchers/index.tsx +157 -0
  105. package/src/screens/E-Vouchers/styles.ts +106 -0
  106. package/src/screens/Faq/Faq.constants.ts +164 -0
  107. package/src/screens/Faq/index.tsx +114 -0
  108. package/src/screens/Faq/styles.ts +131 -0
  109. package/src/screens/Help/index.tsx +128 -0
  110. package/src/screens/Help/styles.ts +121 -0
  111. package/src/screens/Login/index.tsx +215 -0
  112. package/src/screens/Login/styles.ts +134 -0
  113. package/src/screens/MyCart/MyCart.constants.ts +13 -0
  114. package/src/screens/MyCart/index.tsx +318 -0
  115. package/src/screens/MyCart/styles.ts +249 -0
  116. package/src/screens/MyOrders/index.tsx +87 -0
  117. package/src/screens/MyOrders/styles.ts +281 -0
  118. package/src/screens/MyProfile/index.tsx +72 -0
  119. package/src/screens/MyProfile/styles.ts +47 -0
  120. package/src/screens/NewDeliveryAddress/index.tsx +360 -0
  121. package/src/screens/NewDeliveryAddress/styles.ts +68 -0
  122. package/src/screens/Onboarding/index.tsx +57 -0
  123. package/src/screens/Onboarding/styles.ts +60 -0
  124. package/src/screens/OrdersDetails/index.tsx +333 -0
  125. package/src/screens/OrdersDetails/styles.ts +262 -0
  126. package/src/screens/OtpVerification/index.tsx +283 -0
  127. package/src/screens/OtpVerification/styles.ts +197 -0
  128. package/src/screens/PaymentMethod/index.tsx +389 -0
  129. package/src/screens/PaymentMethod/styles.ts +246 -0
  130. package/src/screens/PointsLog/index.tsx +286 -0
  131. package/src/screens/PointsLog/styles.ts +156 -0
  132. package/src/screens/ProductDetails/index.tsx +682 -0
  133. package/src/screens/ProductDetails/styles.ts +372 -0
  134. package/src/screens/Profile/index.tsx +368 -0
  135. package/src/screens/Profile/styles.ts +158 -0
  136. package/src/screens/RedemptionHistory/RedemptionHistory.constants.ts +4 -0
  137. package/src/screens/RedemptionHistory/index.tsx +304 -0
  138. package/src/screens/RedemptionHistory/styles.ts +84 -0
  139. package/src/screens/Reedem/index.tsx +345 -0
  140. package/src/screens/Reedem/styles.ts +269 -0
  141. package/src/screens/TnC/TnC.constants.ts +169 -0
  142. package/src/screens/TnC/index.tsx +83 -0
  143. package/src/screens/TnC/styles.ts +88 -0
  144. package/src/screens/TransactionSuccessful/index.tsx +77 -0
  145. package/src/screens/TransactionSuccessful/styles.ts +77 -0
  146. package/src/screens/Verification/index.tsx +58 -0
  147. package/src/screens/Verification/styles.ts +74 -0
  148. package/src/screens/index.ts +23 -0
  149. package/src/types/index.ts +46 -0
  150. package/src-app/components/AmountBreakDownModal/index.tsx +86 -0
  151. package/src-app/components/AmountBreakDownModal/styles.ts +110 -0
  152. package/src-app/components/BottomNavIcons.tsx +125 -0
  153. package/src-app/components/Button.tsx +120 -0
  154. package/src-app/components/Card.tsx +47 -0
  155. package/src-app/components/ConfirmPopup/ConfirmPopup.constants.ts +25 -0
  156. package/src-app/components/ConfirmPopup/index.tsx +48 -0
  157. package/src-app/components/ConfirmPopup/styles.ts +167 -0
  158. package/src-app/components/CustomButton/index.tsx +67 -0
  159. package/src-app/components/CustomButton/styles.ts +44 -0
  160. package/src-app/components/CustomCard/index.tsx +221 -0
  161. package/src-app/components/CustomCard/styles.ts +184 -0
  162. package/src-app/components/CustomError/index.tsx +54 -0
  163. package/src-app/components/CustomError/styles.ts +41 -0
  164. package/src-app/components/CustomImage/index.tsx +37 -0
  165. package/src-app/components/CustomImage/styles.ts +5 -0
  166. package/src-app/components/CustomLoader/index.tsx +45 -0
  167. package/src-app/components/CustomLoader/styles.ts +35 -0
  168. package/src-app/components/CustomMessagePopUp/index.tsx +51 -0
  169. package/src-app/components/CustomMessagePopUp/styles.ts +74 -0
  170. package/src-app/components/CustomProductCard/index.tsx +13 -0
  171. package/src-app/components/CustomProductCard/styles.ts +5 -0
  172. package/src-app/components/FilterModal.tsx +372 -0
  173. package/src-app/components/Footer/index.tsx +23 -0
  174. package/src-app/components/Footer/styles.ts +37 -0
  175. package/src-app/components/Icon.tsx +80 -0
  176. package/src-app/components/Logout/index.tsx +82 -0
  177. package/src-app/components/Logout/styles.ts +116 -0
  178. package/src-app/components/MobileHeader.tsx +141 -0
  179. package/src-app/components/NoDataFound/index.tsx +18 -0
  180. package/src-app/components/NoDataFound/styles.ts +26 -0
  181. package/src-app/components/OTPModal.tsx +747 -0
  182. package/src-app/components/ProfileField.tsx +47 -0
  183. package/src-app/components/QuantityModal/index.tsx +113 -0
  184. package/src-app/components/QuantityModal/styles.ts +84 -0
  185. package/src-app/components/TabBarIcons.tsx +110 -0
  186. package/src-app/components/TextInput.tsx +79 -0
  187. package/src-app/components/ToastConfig.tsx +60 -0
  188. package/src-app/components/index.ts +18 -0
  189. package/src-app/config/env.ts +22 -0
  190. package/src-app/constants/Fonts.ts +12 -0
  191. package/src-app/constants/Formatter.ts +39 -0
  192. package/src-app/constants/HtmlSanitization.ts +46 -0
  193. package/src-app/constants/Images.ts +81 -0
  194. package/src-app/constants/Labels.ts +8 -0
  195. package/src-app/constants/Messages.ts +108 -0
  196. package/src-app/constants/Routes.ts +17 -0
  197. package/src-app/constants/Scaling.ts +5 -0
  198. package/src-app/constants/Text.ts +8 -0
  199. package/src-app/constants/offSets.ts +18 -0
  200. package/src-app/hooks/useAppDispatch.ts +4 -0
  201. package/src-app/hooks/useAppSelector.ts +4 -0
  202. package/src-app/hooks/useBackHandler.ts +47 -0
  203. package/src-app/hooks/useScreenBackHandler.ts +91 -0
  204. package/src-app/navigation/AppNavigator.tsx +34 -0
  205. package/src-app/navigation/MainTabNavigator.tsx +294 -0
  206. package/src-app/redux/authSaga.ts +605 -0
  207. package/src-app/redux/authSlice.ts +754 -0
  208. package/src-app/redux/rootSaga.ts +6 -0
  209. package/src-app/redux/store.ts +25 -0
  210. package/src-app/services/api.ts +14 -0
  211. package/src-app/services/endpoints.ts +33 -0
  212. package/src-app/services/index.ts +574 -0
  213. package/src-app/services/sdkCredentials.ts +44 -0
  214. package/src-app/styles/colors.ts +85 -0
  215. package/src-app/styles/shared.ts +112 -0
  216. package/src-app/types/authTypes.ts +155 -0
  217. package/src-app/types/navigation.ts +99 -0
  218. package/src-app/utils/Validation.ts +48 -0
  219. package/src-app/utils/filterPins.ts +29 -0
  220. package/src-app/utils/navigationUtils.ts +43 -0
  221. package/src-app/utils/useHardwareBack.ts +21 -0
@@ -0,0 +1,81 @@
1
+ const Images = {
2
+ zaggleLogo: require('../../assets/images/zagglePropelLogo.png'),
3
+ apnaClubLogo: require('../../assets/images/apnaClubLogo.png'),
4
+ hinduPencilsLogo: require('../../assets/images/hinduPencilsLogo.png'),
5
+ topWave: require('../../assets/images/topWave.png'),
6
+ bottomWave: require('../../assets/images/bottomWave.png'),
7
+ logo: require('../../assets/images/logo.png'),
8
+ greyDownArrow: require('../../assets/images/icons/greyDownArrow.png'),
9
+ successTick: require('../../assets/images/icons/successTick.gif'),
10
+ i_icon: require('../../assets/images/icons/i_icon.png'),
11
+ homeInactive: require('../../assets/images/icons/homeinactive.png'),
12
+ redeemInactive: require('../../assets/images/icons/redeem.png'),
13
+ user: require('../../assets/images/icons/user.png'),
14
+ help: require('../../assets/images/icons/help.png'),
15
+ homeActive: require('../../assets/images/icons/home.png'),
16
+ redeemActive: require('../../assets/images/icons/redeemactive.png'),
17
+ redemptionHistory: require('../../assets/images/icons/redemptionHistory.png'),
18
+ myOrders: require('../../assets/images/icons/myOrders.png'),
19
+ eVoucher: require('../../assets/images/icons/eVoucher.png'),
20
+ cart: require('../../assets/images/icons/cart.png'),
21
+ bannerCard: require('../../assets/images/bannerCard.png'),
22
+ giftIcon: require('../../assets/images/gift.png'),
23
+ // New images for updated Home tab UI
24
+ floralBackground: require('../../assets/images/oq3p0u0_1.png'),
25
+ discountBanner: require('../../assets/images/herobanner.png'),
26
+ coinIcon: require('../../assets/images/coin_1_1.png'),
27
+ bellIcon: require('../../assets/images/icons/help.png'),
28
+ // Category images
29
+ categoryApparel: require('../../assets/images/apparel.png'),
30
+ categoryHomeGoods: require('../../assets/images/HomeGoods.png'),
31
+ categoryFootwear: require('../../assets/images/frame_1171278967.png'),
32
+ categoryAccessories: require('../../assets/images/accessories.png'),
33
+ // E-Voucher logos
34
+ myntraLogo: require('../../assets/images/myntra_copy.png'),
35
+ flipkartLogo: require('../../assets/images/flipkart.png'),
36
+ amazonLogo: require('../../assets/images/amazon.png'),
37
+ nikeLogo: require('../../assets/images/nike.png'),
38
+ crossIcon: require('../../assets/images/icons/cross.png'),
39
+ tickIcon: require('../../assets/images/icons/tick.png'),
40
+ redCrossIcon: require('../../assets/images/icons/redCross.png'),
41
+ pendingIcon: require('../../assets/images/icons/pending.png'),
42
+ i_blackIcon: require('../../assets/images/icons/i_blackicon.png'),
43
+ blackcrossIcon: require('../../assets/images/icons/blackcross.png'),
44
+ logout: require('../../assets/images/icons/logout.png'),
45
+ orders: require('../../assets/images/icons/orders.png'),
46
+ tnc: require('../../assets/images/icons/tnc.png'),
47
+ faq: require('../../assets/images/icons/faq.png'),
48
+ arrowright: require('../../assets/images/icons/arrowright.png'),
49
+ userRed: require('../../assets/images/icons/userredicon.png'),
50
+ plusIcon: require('../../assets/images/icons/plus.png'),
51
+ minusIcon: require('../../assets/images/icons/minus.png'),
52
+ arrowBack: require('../../assets/images/icons/arrow-back.png'),
53
+ chat: require('../../assets/images/icons/chat.png'),
54
+ email: require('../../assets/images/icons/email.png'),
55
+ call: require('../../assets/images/icons/call.png'),
56
+ camera: require('../../assets/images/icons/camera.png'),
57
+ filtericon: require('../../assets/images/icons/filtericon.png'),
58
+ search: require('../../assets/images/icons/search.png'),
59
+ delivery: require('../../assets/images/icons/delivery.png'),
60
+ arrowred: require('../../assets/images/icons/arrowred.png'),
61
+ delete: require('../../assets/images/icons/delete.png'),
62
+ editIcon: require('../../assets/images/icons/editIcon.png'),
63
+ addWhiteIcon: require('../../assets/images/icons/addwhiteicon.png'),
64
+ location: require('../../assets/images/icons/location.png'),
65
+ downArrow: require('../../assets/images/icons/blackarrowdown.png'),
66
+ upArrow: require('../../assets/images/icons/blackarrowup.png'),
67
+ arrowgreen: require('../../assets/images/icons/arrowgreen.png'),
68
+ pencillogo: require('../../assets/images/icons/pencillogo.png'),
69
+ wavecorner: require('../../assets/images/icons/wavecorner.png'),
70
+ backgroundblue: require('../../assets/images/backgroundblue.png'),
71
+ copy: require('../../assets/images/icons/copy.png'),
72
+ stopwatch: require('../../assets/images/icons/stopwatch.png'),
73
+ eye: require('../../assets/images/icons/eye.png'),
74
+ profileicon: require('../../assets/images/profileicon.png'),
75
+ redhelpicon: require('../../assets/images/icons/redhelpicon.png'),
76
+ redErrorCrossIcon: require('../../assets/images/icons/redCrossicon.png'),
77
+ warningIcon: require('../../assets/images/icons/redWarningicon.png'),
78
+ circleblack: require('../../assets/images/icons/circleblack.png'),
79
+ };
80
+
81
+ export default Images;
@@ -0,0 +1,8 @@
1
+ export const CATEGORY_LABELS: Record<string, string> = {
2
+ merchandise: "Merchandise",
3
+ physical_voucher: "Physical Voucher",
4
+ evoucher: "E - Voucher",
5
+ wallet: "Wallet",
6
+ kiosk_card: "Kiosk Card",
7
+ };
8
+
@@ -0,0 +1,108 @@
1
+ export const EMAIL_INVALID = 'Please enter a valid email address';
2
+ export const ENTER_4_DIGIT_CODE = 'Enter 4 Digit Code';
3
+ export const OTP_SENT = 'OTP has been sent to';
4
+ export const OTP = 'One-Time Password';
5
+ export const TEXT = 'text';
6
+ export const OTP_DIGIT = 'OTP digit';
7
+ export const OTP_LENGTH = 4;
8
+ export const DIDNT_RECEIVE_OTP = 'Didn\'t Receive OTP ?';
9
+ export const RESEND_OTP = 'Resend OTP';
10
+
11
+ // Login screen
12
+ export const LOGIN_WELCOME_BACK_TITLE = "Welcome Back.!";
13
+ export const LOGIN_ENTER_MOBILE_TITLE = "Enter Mobile Number";
14
+ export const LOGIN_SIGNIN_OR_SIGNUP_SUBTITLE =
15
+ "SignIn Or Signup With Your Mobile Number";
16
+ export const LOGIN_BTN_SEND_OTP = "Send OTP";
17
+ export const LOGIN_BTN_VERIFY = "Verify";
18
+ export const EDIT_DELIVERY_ADDRESS = "Edit Delivery Address";
19
+ export const ADD_NEW_DELIVERY_ADDRESS = "Add New Delivery Address";
20
+ export const OTP_SUBTITLE = "Enter the OTP sent to your registered mobile";
21
+ export const PROCESSING_ORDER = "Processing your order...";
22
+ export const OTP_TITLE = "Verify your order"
23
+ export const SEND_OTP_LOADER= "Please wait..."
24
+ export const OTP_VERIFY_LOADER="Verifying OTP..."
25
+
26
+ // Product Details screen
27
+ export const NO_VARIATION_SELECTED = 'No variation selected.';
28
+ export const ERROR = 'error';
29
+ export const SELECT_VARIANT = 'Select Varient';
30
+ export const QUANTITY = 'Quantity';
31
+ export const DELIVERY_WITHIN = 'Delivery within';
32
+ export const DAYS = "days";
33
+ export const DESCRIPTION = "Description";
34
+ export const REDEMPTION_TERMS = "Redemption Terms";
35
+ export const SHOPPING_HANDLING_TERMS = "Shopping & Handling Terms";
36
+ export const PRODUCT_DESCRIPTION_NOT_AVAILABLE = "Product description not available.";
37
+ export const REDEMPTION_TERMS_NOT_AVAILABLE = "Redemption terms not available.";
38
+ export const SHOPPING_HANDLING_TERMS_NOT_AVAILABLE = "Shopping and handling terms not available.";
39
+ export const VIEW_DETAILS = "View Details";
40
+ export const ADD_TO_CART = "Add to Cart";
41
+ export const ORDER_AMOUNT = "Order Amount";
42
+ export const DELIVERY_CHARGES = "Delivery Charges";
43
+ export const ERROR_TITLE = "Error";
44
+ export const ITEM_ADDED_TO_CART_SUCCESSFULLY = "Item added to cart successfully!";
45
+ export const SUCCESS = 'success';
46
+ export const INSUFFICIENT_BALANCE= "Insufficient Apna Points Balance";
47
+ export const EMPTY_CART_TITLE= "Your cart is empty";
48
+ export const EMPTY_CART_SUBTITLE= "Looks like you haven't added anything to your cart yet.";
49
+ export const ITEM_DELETE_TITLE="Are you sure you want to delete the item ?";
50
+ export const ITEM_DELETE_CONFIRM="Yes";
51
+ export const ITEM_DELETE_CANCEL="No";
52
+
53
+ // REEDEM
54
+ export const NUMBER = "number";
55
+
56
+ // NEW DELIVERY ADDRESS
57
+ export const FULL_NAME = "fullName";
58
+ export const MOBILE_NUMBER = "mobileNumber";
59
+ export const EMAIL_ID = "email";
60
+ export const ADDRESS = "address";
61
+ export const LANDMARK = "landmark";
62
+ export const CITY = "city";
63
+ export const STATE = "state";
64
+ export const PINCODE = "pincode";
65
+ export const UPDATE_AND_PROCEED = "Update and Proceed";
66
+ export const SAVE_AND_PROCEED = "Save and Proceed";
67
+
68
+ // NEW DELIVERY ADDRESS - Labels
69
+ export const FULL_NAME_LABEL = "Full Name";
70
+ export const MOBILE_NUMBER_LABEL = "Mobile Number";
71
+ export const EMAIL_ID_LABEL = "Email ID";
72
+ export const ADDRESS_LABEL = "Address";
73
+ export const LANDMARK_LABEL = "Landmark";
74
+ export const CITY_LABEL = "City";
75
+ export const STATE_LABEL = "State";
76
+ export const PINCODE_LABEL = "Pincode";
77
+ export const BILLING_ADDRESS = "billing_address";
78
+
79
+ // NEW DELIVERY ADDRESS - Other constants
80
+ export const COUNTRY_INDIA = "India";
81
+ export const ADDRESS_LINE_PREFIX = "Line: ";
82
+ export const ADDRESS_LANDMARK_PREFIX = "Landmark: ";
83
+
84
+ // Help screen
85
+ export const HELP_CENTER_TITLE = "Help Center";
86
+ export const HELP_CALL_TITLE = "Call for PROPEL";
87
+ export const HELP_CALL_SUBTITLE = "Call us at 1860 500 3748";
88
+ export const HELP_CHAT_TITLE = "Chat";
89
+ export const HELP_CHAT_SUBTITLE = "Chat with us on Whatsapp";
90
+ export const HELP_MAIL_TITLE = "Mail";
91
+ export const HELP_MAIL_SUBTITLE = "Write a mail at team@zaggle.in";
92
+ export const HELP_NOTE_TITLE = "Note:";
93
+ export const HELP_NOTE_TEXT = "Call Option is available from Monday to Saturday between 10:00 AM to 07:00 PM";
94
+ export const ORDER_DETAILS_SUPPORT_INTRO = "If you need any support, let us know";
95
+ export const ORDER_DETAILS_SUPPORT_EMAIL = "team@zaggle.in";
96
+ export const ORDER_DETAILS_SUPPORT_PHONE = "1860 500 3748";
97
+ export const ORDER_DETAILS_SUPPORT_HOURS = "( 10:00 AM - 07:00 PM, Mon-Fri )";
98
+ export const EMAIL = "Email :";
99
+ export const PHONE = "Phone :";
100
+ export const REMAINING_AMOUNT = "Remaining Amount";
101
+ export const DISCOUNTED_AMOUNT = "Discounted Amount";
102
+ export const DATE = "Date :";
103
+ export const ORDER_NO = "Order No :";
104
+
105
+ export const AMOUNT_TO_BE_PAID = "Amount to be Paid";
106
+ export const POINTS = "Points";
107
+ export const AMOUNT_BREAKDOWN = "Amount Breakdown"
108
+
@@ -0,0 +1,17 @@
1
+ export const ROUTES = {
2
+ MY_ORDERS: 'MyOrders',
3
+ MY_E_VOUCHERS: 'MyEVouchers',
4
+ REDEMPTION_HISTORY: 'RedemptionHistory',
5
+ FAQ: "FAQ",
6
+ PROFILE : "Profile",
7
+ DASHBOARD : "Dashboard",
8
+ REDEEM: "Redeem",
9
+ TnC : "TnC",
10
+ DashboardTab : "DashboardTab",
11
+ MyCart : "MyCart",
12
+ ProductDetail : "ProductDetail"
13
+
14
+
15
+ } as const;
16
+
17
+ export type RouteName = typeof ROUTES[keyof typeof ROUTES];
@@ -0,0 +1,5 @@
1
+ import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
2
+
3
+ export const SCALE = scale;
4
+ export const VSCALE = verticalScale;
5
+ export const MSCALE = moderateScale;
@@ -0,0 +1,8 @@
1
+ export const HTML_TAG_RE = /<\/?[a-z][\s\S]*?>/i;
2
+ export const HTML_ENTITY_RE = /&(?:[a-z]+|#\d+|#x[0-9a-f]+);/i;
3
+
4
+ export const isPureText = (v: unknown): v is string => {
5
+ if (typeof v !== 'string') return false;
6
+ const s = v.trim();
7
+ return !!s && !HTML_TAG_RE.test(s) && !HTML_ENTITY_RE.test(s);
8
+ };
@@ -0,0 +1,18 @@
1
+ import { Dimensions, Platform } from "react-native";
2
+ import { VSCALE } from "./Scaling";
3
+
4
+ const { height } = Dimensions.get('window');
5
+
6
+ let leftOffset = 0;
7
+
8
+ if (Platform.OS === 'ios') {
9
+ if (height === 812 && height < 956 ) {
10
+ leftOffset = VSCALE(10);
11
+ } else if (height === 956) {
12
+ leftOffset = VSCALE(40);
13
+ } else {
14
+ leftOffset = VSCALE(10);
15
+ }
16
+ }
17
+
18
+ export default leftOffset;
@@ -0,0 +1,4 @@
1
+ import { useDispatch } from 'react-redux';
2
+ import type { AppDispatch } from '../redux/store';
3
+
4
+ export const useAppDispatch = () => useDispatch<AppDispatch>();
@@ -0,0 +1,4 @@
1
+ import { useSelector } from 'react-redux';
2
+ import type { RootState } from '../redux/store';
3
+
4
+ export const useAppSelector = useSelector.withTypes<RootState>();
@@ -0,0 +1,47 @@
1
+ import { useEffect } from 'react';
2
+ import { BackHandler } from 'react-native';
3
+ import { useNavigation, useNavigationState } from '@react-navigation/native';
4
+
5
+ export const useBackHandler = (customHandler?: () => boolean) => {
6
+ const navigation = useNavigation();
7
+ const navigationState = useNavigationState(state => state);
8
+
9
+ useEffect(() => {
10
+ const backAction = () => {
11
+ // If custom handler is provided and returns true, prevent default behavior
12
+ if (customHandler && customHandler()) {
13
+ return true;
14
+ }
15
+
16
+ // Check if we're on a tab screen (root level)
17
+ const currentRoute = navigationState?.routes[navigationState.index];
18
+ const isOnTabScreen = currentRoute?.state?.index === 0 || !currentRoute?.state;
19
+
20
+ if (isOnTabScreen) {
21
+ // If on Dashboard tab, exit app
22
+ if (currentRoute?.name === 'DashboardTab') {
23
+ return false; // Allow default behavior (exit app)
24
+ }
25
+
26
+ // If on other tabs, navigate to Dashboard
27
+ navigation.navigate('DashboardTab' as never);
28
+ return true; // Prevent default behavior
29
+ }
30
+
31
+ // If in a stack, use default navigation back
32
+ if (navigation.canGoBack()) {
33
+ navigation.goBack();
34
+ return true;
35
+ }
36
+
37
+ // Default behavior (exit app)
38
+ return false;
39
+ };
40
+
41
+ const backHandler = BackHandler.addEventListener('hardwareBackPress', backAction);
42
+
43
+ return () => backHandler.remove();
44
+ }, [navigation, navigationState, customHandler]);
45
+ };
46
+
47
+ export default useBackHandler;
@@ -0,0 +1,91 @@
1
+ import { useEffect } from 'react';
2
+ import { BackHandler, Alert } from 'react-native';
3
+ import { useNavigation, useFocusEffect } from '@react-navigation/native';
4
+
5
+ interface BackHandlerOptions {
6
+ // Show confirmation dialog before going back
7
+ showConfirmation?: boolean;
8
+ confirmationTitle?: string;
9
+ confirmationMessage?: string;
10
+ // Custom back action
11
+ onBackPress?: () => boolean | void;
12
+ // Navigate to specific screen instead of default back
13
+ navigateTo?: string;
14
+ // Exit app confirmation (for root screens)
15
+ showExitConfirmation?: boolean;
16
+ }
17
+
18
+ export const useScreenBackHandler = (options: BackHandlerOptions = {}) => {
19
+ const navigation = useNavigation();
20
+
21
+ useFocusEffect(() => {
22
+ const backAction = () => {
23
+ // Custom back press handler
24
+ if (options.onBackPress) {
25
+ const result = options.onBackPress();
26
+ if (result === true) {
27
+ return true; // Prevent default behavior
28
+ }
29
+ }
30
+
31
+ // Show confirmation dialog
32
+ if (options.showConfirmation) {
33
+ Alert.alert(
34
+ options.confirmationTitle || 'Confirm',
35
+ options.confirmationMessage || 'Are you sure you want to go back?',
36
+ [
37
+ {
38
+ text: 'Cancel',
39
+ style: 'cancel',
40
+ },
41
+ {
42
+ text: 'Yes',
43
+ onPress: () => {
44
+ if (options.navigateTo) {
45
+ navigation.navigate(options.navigateTo as never);
46
+ } else if (navigation.canGoBack()) {
47
+ navigation.goBack();
48
+ }
49
+ },
50
+ },
51
+ ]
52
+ );
53
+ return true; // Prevent default behavior
54
+ }
55
+
56
+ // Navigate to specific screen
57
+ if (options.navigateTo) {
58
+ navigation.navigate(options.navigateTo as never);
59
+ return true;
60
+ }
61
+
62
+ // Show exit confirmation for root screens
63
+ if (options.showExitConfirmation && !navigation.canGoBack()) {
64
+ Alert.alert(
65
+ 'Exit App',
66
+ 'Are you sure you want to exit?',
67
+ [
68
+ {
69
+ text: 'Cancel',
70
+ style: 'cancel',
71
+ },
72
+ {
73
+ text: 'Exit',
74
+ onPress: () => BackHandler.exitApp(),
75
+ },
76
+ ]
77
+ );
78
+ return true;
79
+ }
80
+
81
+ // Default behavior
82
+ return false;
83
+ };
84
+
85
+ const backHandler = BackHandler.addEventListener('hardwareBackPress', backAction);
86
+
87
+ return () => backHandler.remove();
88
+ });
89
+ };
90
+
91
+ export default useScreenBackHandler;
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import { createStackNavigator } from '@react-navigation/stack';
3
+ import { RootStackParamList } from '../types/navigation';
4
+ import MainTabNavigator from './MainTabNavigator';
5
+ import {
6
+ Login,
7
+ MyProfile,
8
+ Onboarding,
9
+ OTPVerification,
10
+ Verification,
11
+ } from '../screens';
12
+
13
+ const Stack = createStackNavigator<RootStackParamList>();
14
+
15
+ const AppNavigator: React.FC = () => {
16
+ return (
17
+ <Stack.Navigator
18
+ screenOptions={{
19
+ headerShown: false,
20
+ gestureEnabled: false,
21
+ }}
22
+ initialRouteName="Login"
23
+ >
24
+ <Stack.Screen name="Onboarding" component={Onboarding} />
25
+ <Stack.Screen name="Login" component={Login} />
26
+ <Stack.Screen name="OTPVerification" component={OTPVerification} />
27
+ <Stack.Screen name="VerificationComplete" component={Verification} />
28
+ <Stack.Screen name="MainTabs" component={MainTabNavigator} options={{ gestureEnabled: false }} />
29
+ <Stack.Screen name="MyProfile" component={MyProfile} />
30
+ </Stack.Navigator>
31
+ );
32
+ };
33
+
34
+ export default AppNavigator;