@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,605 @@
1
+ import { call, put, select, takeLatest, all, delay } from "redux-saga/effects";
2
+ import { SagaIterator } from "redux-saga";
3
+ import {
4
+ addToCartApi,
5
+ checkoutApi,
6
+ createAddressApi,
7
+ dashboardInfoApi,
8
+ deleteAddressApi,
9
+ deleteCartApi,
10
+ deliverHereApi,
11
+ generateEVouchersApi,
12
+ generateOtpApi,
13
+ getAddressListApi,
14
+ getMyExistingCartApi,
15
+ myOrdersApi,
16
+ myOrdersGenerateOtpApi,
17
+ myOrdersValidateOtpApi,
18
+ myProductListApi,
19
+ myProfileApi,
20
+ pointsLogApi,
21
+ productCategoriesByTypeApi,
22
+ productDetailsByIdApi,
23
+ productTypesApi,
24
+ redemptionHistoryApi,
25
+ sdkAuthApi,
26
+ updateAddressApi,
27
+ updateCartApi,
28
+ uploadProfileImageApi,
29
+ validateEVouchersApi,
30
+ verifyMobileOtpApi,
31
+ viewMyCartApi,
32
+ } from "../services";
33
+ import {
34
+ addToCartFailure,
35
+ addToCartRequest,
36
+ addToCartSuccess,
37
+ addToExistingCartRequest,
38
+ checkoutFailure,
39
+ checkoutRequest,
40
+ checkoutSuccess,
41
+ createAddressFailure,
42
+ createAddressRequest,
43
+ createAddressSuccess,
44
+ dashboardInfoFailure,
45
+ dashboardInfoRequest,
46
+ dashboardInfoSuccess,
47
+ deleteAddressFailure,
48
+ deleteAddressRequest,
49
+ deleteAddressSuccess,
50
+ deleteCartFailure,
51
+ deleteCartRequest,
52
+ deleteCartSuccess,
53
+ deliverHereFailure,
54
+ deliverHereRequest,
55
+ deliverHereSuccess,
56
+ generateEVouchersFailure,
57
+ generateEVouchersRequest,
58
+ generateEVouchersSuccess,
59
+ generateOtpFailure,
60
+ generateOtpRequest,
61
+ generateOtpSuccess,
62
+ getAddressListFailure,
63
+ getAddressListRequest,
64
+ getAddressListSuccess,
65
+ myOrdersFailure,
66
+ myOrdersGenerateOtpFailure,
67
+ myOrdersGenerateOtpRequest,
68
+ myOrdersGenerateOtpSuccess,
69
+ myOrdersRequest,
70
+ myOrdersSuccess,
71
+ myOrdersValidateOtpFailure,
72
+ myOrdersValidateOtpRequest,
73
+ myOrdersValidateOtpSuccess,
74
+ myProductsListFailure,
75
+ myProductsListRequest,
76
+ myProductsListSuccess,
77
+ myProfileFailure,
78
+ myProfileRequest,
79
+ myProfileSuccess,
80
+ pointsLogFailure,
81
+ pointsLogRequest,
82
+ pointsLogSuccess,
83
+ productCategoriesByTypeFailure,
84
+ productCategoriesByTypeRequest,
85
+ productCategoriesByTypeSuccess,
86
+ productDetailsByIdFailure,
87
+ productDetailsByIdRequest,
88
+ productDetailsByIdSuccess,
89
+ productTypesFailure,
90
+ productTypesRequest,
91
+ productTypesSuccess,
92
+ redemptionHistoryFailure,
93
+ redemptionHistoryRequest,
94
+ redemptionHistorySuccess,
95
+ sdkAuthFailure,
96
+ sdkAuthRequest,
97
+ sdkAuthSuccess,
98
+ updateAddressFailure,
99
+ updateAddressRequest,
100
+ updateAddressSuccess,
101
+ updateCartFailure,
102
+ updateCartRequest,
103
+ updateCartSuccess,
104
+ uploadProfileImageFailure,
105
+ uploadProfileImageRequest,
106
+ uploadProfileImageSuccess,
107
+ validateEVouchersFailure,
108
+ validateEVouchersRequest,
109
+ validateEVouchersSuccess,
110
+ verifyMobileOtpFailure,
111
+ verifyMobileOtpRequest,
112
+ verifyMobileOtpSuccess,
113
+ viewMyCartFailure,
114
+ viewMyCartRequest,
115
+ viewMyCartSuccess,
116
+ } from "./authSlice";
117
+ import AsyncStorage from "@react-native-async-storage/async-storage";
118
+ import { RootState } from "./store";
119
+
120
+ function* handleGenerateOtp(
121
+ action: ReturnType<typeof generateOtpRequest>
122
+ ): SagaIterator {
123
+ try {
124
+ const response = yield call(generateOtpApi, action.payload);
125
+ if (response.data?.status === false) {
126
+ yield put(generateOtpFailure(response.data?.message || 'OTP generation failed'));
127
+ } else {
128
+ yield put(generateOtpSuccess(response.data));
129
+ }
130
+ } catch (error: any) {
131
+ yield put(generateOtpFailure(error?.response?.data?.message || error?.message || 'Network error'));
132
+ }
133
+ }
134
+
135
+ function* handleVerifyMobileOtp(
136
+ action: ReturnType<typeof verifyMobileOtpRequest>
137
+ ): SagaIterator {
138
+ try {
139
+ const response = yield call(verifyMobileOtpApi, action.payload);
140
+ const token = response?.data?.session?.token;
141
+
142
+ if (token) {
143
+ yield call(AsyncStorage.setItem, "accessToken", token);
144
+ yield call(AsyncStorage.getItem, "accessToken");
145
+ }
146
+
147
+ yield put(verifyMobileOtpSuccess(response.data));
148
+ yield put(myOrdersRequest({}));
149
+ } catch (error: any) {
150
+ yield put(verifyMobileOtpFailure(error?.response?.data?.message));
151
+ }
152
+ }
153
+
154
+ function* handleMyOrders(): SagaIterator {
155
+ try {
156
+ const response = yield call(myOrdersApi);
157
+ yield put(myOrdersSuccess(response.data));
158
+ } catch (error: any) {
159
+ yield put(myOrdersFailure(error?.response?.data?.message));
160
+ }
161
+ }
162
+
163
+ function* handleMyProductList(
164
+ action: ReturnType<typeof myProductsListRequest>
165
+ ): SagaIterator {
166
+ const name = action.payload?.name;
167
+ const product_types = action.payload?.product_types;
168
+ const category_ids = action.payload?.category_ids;
169
+ try {
170
+ const response = yield call(
171
+ myProductListApi,
172
+ name,
173
+ product_types,
174
+ category_ids
175
+ );
176
+ yield put(myProductsListSuccess(response.data));
177
+ } catch (error: any) {
178
+ yield put(myProductsListFailure(error?.response?.data?.message));
179
+ }
180
+ }
181
+
182
+ function* handleMyProfile(): SagaIterator {
183
+ try {
184
+ const response = yield call(myProfileApi);
185
+ yield put(myProfileSuccess(response.data));
186
+ } catch (error: any) {
187
+ yield put(myProfileFailure(error?.response?.data?.message));
188
+ }
189
+ }
190
+
191
+ function* handleUploadProfileImage(
192
+ action: ReturnType<typeof uploadProfileImageRequest>
193
+ ): SagaIterator {
194
+ try {
195
+ const response = yield call(uploadProfileImageApi, action.payload);
196
+ yield put(uploadProfileImageSuccess(response.data));
197
+ yield put(myProfileRequest({}));
198
+ } catch (error: any) {
199
+ yield put(uploadProfileImageFailure(error?.response?.data?.message));
200
+ }
201
+ }
202
+
203
+ function* handleProductDetailsById(
204
+ action: ReturnType<typeof productDetailsByIdRequest>
205
+ ): SagaIterator {
206
+ try {
207
+ const response = yield call(productDetailsByIdApi, action.payload.id);
208
+ yield put(productDetailsByIdSuccess(response.data));
209
+ } catch (error: any) {
210
+ yield put(productDetailsByIdFailure(error?.response?.data?.message));
211
+ }
212
+ }
213
+
214
+ function* handleMyOrdersGenerateOtp(): SagaIterator {
215
+ try {
216
+ const response = yield call(myOrdersGenerateOtpApi);
217
+ yield put(myOrdersGenerateOtpSuccess(response.data));
218
+ } catch (error: any) {
219
+ yield put(myOrdersGenerateOtpFailure(error?.response?.data?.message));
220
+ }
221
+ }
222
+
223
+ function* handleMyOrdersValidateOtp(
224
+ action: ReturnType<typeof myOrdersValidateOtpRequest>
225
+ ): SagaIterator {
226
+ try {
227
+ const { otp } = action.payload || {};
228
+ const response = yield call(myOrdersValidateOtpApi, { otp });
229
+ yield put(myOrdersValidateOtpSuccess(response));
230
+ } catch (error: any) {
231
+ const apiMsg =
232
+ error?.response?.data?.message ||
233
+ error?.response?.data?.errors?.[0] ||
234
+ error?.message ||
235
+ 'Something went wrong';
236
+ yield put(
237
+ myOrdersValidateOtpFailure(
238
+ apiMsg
239
+ )
240
+ );
241
+ }
242
+ }
243
+
244
+ function* handleRedemptionHistory(
245
+ action: ReturnType<typeof redemptionHistoryRequest>
246
+ ): SagaIterator {
247
+ try {
248
+ const id = action.payload?.id;
249
+
250
+ if (!id) {
251
+ yield put(
252
+ redemptionHistoryFailure("ID is required for redemption history")
253
+ );
254
+ return;
255
+ }
256
+
257
+ const response = yield call(redemptionHistoryApi, id);
258
+ yield put(redemptionHistorySuccess(response.data));
259
+ } catch (error: any) {
260
+ yield put(
261
+ redemptionHistoryFailure(
262
+ error?.response?.data?.message ?? "Something went wrong"
263
+ )
264
+ );
265
+ }
266
+ }
267
+
268
+ function* handleProductTypes(): SagaIterator {
269
+ try {
270
+ const response = yield call(productTypesApi);
271
+ yield put(productTypesSuccess(response.data));
272
+ } catch (error: any) {
273
+ yield put(productTypesFailure(error?.response?.data?.message));
274
+ }
275
+ }
276
+
277
+ function* handleProductCategoriesByType(
278
+ action: ReturnType<typeof productCategoriesByTypeRequest>
279
+ ): SagaIterator {
280
+ const product_type = action.payload?.product_type;
281
+
282
+ try {
283
+ const response = yield call(productCategoriesByTypeApi, product_type);
284
+ yield put(productCategoriesByTypeSuccess(response.data));
285
+ } catch (error: any) {
286
+ yield put(productCategoriesByTypeFailure(error?.response?.data?.message));
287
+ }
288
+ }
289
+
290
+ function* handleViewMyCartById(
291
+ action: ReturnType<typeof viewMyCartRequest>
292
+ ): SagaIterator {
293
+ const id = action.payload.id;
294
+
295
+ if (!id) {
296
+ yield put(viewMyCartFailure("Cart ID is required"));
297
+ return;
298
+ }
299
+
300
+ try {
301
+ const response = yield call(viewMyCartApi, id);
302
+
303
+ yield put(
304
+ viewMyCartSuccess({
305
+ data: response.data,
306
+ successMessage: response.data.message || "Cart updated successfully",
307
+ })
308
+ );
309
+ } catch (error: any) {
310
+ yield put(viewMyCartFailure(error?.response?.data?.message));
311
+ }
312
+ }
313
+
314
+ function* handleDashboardInfo(): SagaIterator {
315
+ try {
316
+ const response = yield call(dashboardInfoApi);
317
+
318
+ yield put(dashboardInfoSuccess(response.data));
319
+ } catch (error: any) {
320
+ const msg =
321
+ error?.response?.data?.message ||
322
+ error?.message ||
323
+ "Unable to load dashboard info";
324
+ yield put(dashboardInfoFailure(msg));
325
+ }
326
+ }
327
+
328
+ function* handleGetAddressList(): SagaIterator {
329
+ try {
330
+ const response = yield call(getAddressListApi);
331
+ yield put(getAddressListSuccess(response.data));
332
+ } catch (error: any) {
333
+ yield put(getAddressListFailure(error.message));
334
+ }
335
+ }
336
+
337
+ function* handleCreateAddress(
338
+ action: ReturnType<typeof createAddressRequest>
339
+ ): SagaIterator {
340
+ try {
341
+ const response = yield call(createAddressApi, action.payload);
342
+ yield put(createAddressSuccess(response.data));
343
+ yield put(getAddressListRequest({}));
344
+ } catch (error: any) {
345
+ yield put(createAddressFailure(error?.response?.data?.message));
346
+ }
347
+ }
348
+
349
+ function* handleUpdateAddress(
350
+ action: ReturnType<typeof updateAddressRequest>
351
+ ): SagaIterator {
352
+ try {
353
+ const response = yield call(
354
+ updateAddressApi,
355
+ action.payload,
356
+ action.payload.id
357
+ );
358
+ yield put(updateAddressSuccess(response.data));
359
+ yield put(getAddressListRequest({}));
360
+ } catch (error: any) {
361
+ yield put(updateAddressFailure(error?.response?.data?.message));
362
+ }
363
+ }
364
+
365
+ function* handleDeleteAddress(
366
+ action: ReturnType<typeof deleteAddressRequest>
367
+ ): SagaIterator {
368
+ try {
369
+ const response = yield call(deleteAddressApi, action.payload.id);
370
+ yield put(deleteAddressSuccess(response.data));
371
+ yield put(getAddressListRequest({}));
372
+ } catch (error: any) {
373
+ yield put(deleteAddressFailure(error.message));
374
+ }
375
+ }
376
+
377
+ function* handleUpdateCart(
378
+ action: ReturnType<typeof updateCartRequest>
379
+ ): SagaIterator {
380
+ try {
381
+ const { id, item } = action.payload;
382
+ const response = yield call(updateCartApi, id, item);
383
+ yield put(updateCartSuccess(response.data));
384
+ yield put(viewMyCartRequest({ id }));
385
+ } catch (error: any) {
386
+ yield put(updateCartFailure(error?.response?.data?.errors));
387
+ }
388
+ }
389
+
390
+ function* handleDeleteCart(
391
+ action: ReturnType<typeof deleteCartRequest>
392
+ ): SagaIterator {
393
+ try {
394
+ const { id, item } = action.payload;
395
+ const response = yield call(deleteCartApi, id, item);
396
+ yield put(deleteCartSuccess(response.data));
397
+ yield put(viewMyCartRequest({ id }));
398
+ } catch (error: any) {
399
+ yield put(deleteCartFailure(error.message));
400
+ }
401
+ }
402
+
403
+ function* handleAddToCart(
404
+ action: ReturnType<typeof addToCartRequest>
405
+ ): SagaIterator {
406
+ try {
407
+ let cartId = yield select((state: RootState) => state.auth.cartId);
408
+
409
+ let response;
410
+
411
+ if (!cartId || cartId === "null" || cartId === "") {
412
+ response = yield call(addToCartApi, action.payload);
413
+
414
+ yield put(addToCartSuccess(response.data));
415
+
416
+ const newCartId =
417
+ response.data?.response?.id ||
418
+ response.data?.id ||
419
+ response.data?.order?.id;
420
+
421
+ if (newCartId) {
422
+ cartId = newCartId;
423
+ }
424
+ } else {
425
+ const addToExistingPayload = {
426
+ product_variation_id:
427
+ action.payload.order.items[0].product_variation_id,
428
+ quantity: action.payload.order.items[0].quantity,
429
+ shipping_address: action.payload.order.items[0].shipping_address,
430
+ };
431
+
432
+ response = yield call(getMyExistingCartApi, cartId, addToExistingPayload);
433
+ yield put(addToCartSuccess(response.data));
434
+ }
435
+
436
+ if (cartId && cartId !== "" && cartId !== "null") {
437
+ yield put(
438
+ viewMyCartRequest({
439
+ id: cartId,
440
+ successMessage: response.data.message,
441
+ })
442
+ );
443
+ }
444
+ } catch (error: any) {
445
+ console.log("failure of cart...",error?.response);
446
+
447
+ yield put(addToCartFailure(error?.response?.data));
448
+ }
449
+ }
450
+
451
+ function* handlePointsLog(): SagaIterator {
452
+ try {
453
+ const response = yield call(pointsLogApi);
454
+ yield put(pointsLogSuccess(response.data));
455
+ } catch (error: any) {
456
+ yield put(pointsLogFailure(error?.response?.data?.message));
457
+ }
458
+ }
459
+
460
+ function* handleGenerateEVouchers(): SagaIterator {
461
+ try {
462
+ const response = yield call(generateEVouchersApi);
463
+ yield put(generateEVouchersSuccess(response.data));
464
+ } catch (error: any) {
465
+ yield put(generateEVouchersFailure(error?.response?.data?.message));
466
+ }
467
+ }
468
+
469
+ function* handleValidateEVouchers(
470
+ action: ReturnType<typeof validateEVouchersRequest>
471
+ ): SagaIterator {
472
+ try {
473
+ const otp = action.payload?.otp;
474
+ const response = yield call(validateEVouchersApi, otp);
475
+ yield put(validateEVouchersSuccess(response.data));
476
+ } catch (error: any) {
477
+ yield put(validateEVouchersFailure(error?.response?.data?.message));
478
+ }
479
+ }
480
+
481
+ function* handleCheckout(
482
+ action: ReturnType<typeof checkoutRequest>
483
+ ): SagaIterator {
484
+ try {
485
+ const { orderId } = action.payload;
486
+
487
+ if (!orderId) {
488
+ yield put(checkoutFailure("Order ID is required for checkout"));
489
+ return;
490
+ }
491
+
492
+ const response = yield call(checkoutApi, orderId, action.payload);
493
+
494
+ yield put(checkoutSuccess(response.data));
495
+ } catch (error: any) {
496
+ let errorMessage = "Checkout failed. Please try again.";
497
+
498
+ if (error?.response) {
499
+ if (error.response.data?.message) {
500
+ errorMessage = error.response.data.message;
501
+ } else if (error.response.status === 500) {
502
+ errorMessage = "Server error. Please try again later.";
503
+ } else if (error.response.status === 400) {
504
+ errorMessage = "Invalid request. Please check your order details.";
505
+ }
506
+ } else if (error?.message) {
507
+ errorMessage = error.message;
508
+ }
509
+
510
+ yield put(checkoutFailure(errorMessage));
511
+ }
512
+ }
513
+
514
+ function* handleDeliverHere(
515
+ action: ReturnType<typeof deliverHereRequest>
516
+ ): SagaIterator {
517
+ try {
518
+ const { order_id } = action.payload;
519
+
520
+ if (!order_id) {
521
+ yield put(deliverHereFailure("Order ID is required for deliver here"));
522
+ return;
523
+ }
524
+
525
+ const response = yield call(deliverHereApi, order_id, action.payload);
526
+
527
+ const serializableData = {
528
+ data: response.data,
529
+ status: response.status,
530
+ statusText: response.statusText
531
+ };
532
+
533
+ yield put(deliverHereSuccess(serializableData));
534
+ } catch (error: any) {
535
+ let errorMessage = "Deliver here failed. Please try again.";
536
+
537
+ if (error?.response) {
538
+ if (error.response.data?.message) {
539
+ errorMessage = error.response.data.message;
540
+ } else if (error.response.status === 500) {
541
+ errorMessage = "Server error. Please try again later.";
542
+ } else if (error.response.status === 400) {
543
+ errorMessage = "Invalid request. Please check your order details.";
544
+ }
545
+ } else if (error?.message) {
546
+ errorMessage = error.message;
547
+ }
548
+
549
+ yield put(deliverHereFailure(errorMessage));
550
+ }
551
+ }
552
+
553
+ function* handleSdkAuth(): SagaIterator {
554
+ try {
555
+ const response = yield call(sdkAuthApi);
556
+
557
+ if (response.data?.status === true && response.data?.session?.token) {
558
+ const token = response.data.session.token;
559
+ yield call(AsyncStorage.setItem, "accessToken", token);
560
+ yield put(sdkAuthSuccess(response.data));
561
+ } else {
562
+ const errorMsg = response.data?.message || "SDK authentication failed";
563
+ yield put(sdkAuthFailure(errorMsg));
564
+ }
565
+ } catch (error: any) {
566
+ yield put(
567
+ sdkAuthFailure(
568
+ error?.response?.data?.message || error?.message || "SDK authentication failed"
569
+ )
570
+ );
571
+ }
572
+ }
573
+
574
+ export function* authSaga(): SagaIterator {
575
+ yield takeLatest(sdkAuthRequest.type, handleSdkAuth);
576
+ yield takeLatest(generateOtpRequest.type, handleGenerateOtp);
577
+ yield takeLatest(verifyMobileOtpRequest.type, handleVerifyMobileOtp);
578
+ yield takeLatest(myOrdersRequest.type, handleMyOrders);
579
+ yield takeLatest(myProductsListRequest.type, handleMyProductList);
580
+ yield takeLatest(myProfileRequest.type, handleMyProfile);
581
+ yield takeLatest(uploadProfileImageRequest.type, handleUploadProfileImage);
582
+ yield takeLatest(productDetailsByIdRequest.type, handleProductDetailsById);
583
+ yield takeLatest(myOrdersGenerateOtpRequest.type, handleMyOrdersGenerateOtp);
584
+ yield takeLatest(myOrdersValidateOtpRequest.type, handleMyOrdersValidateOtp);
585
+ yield takeLatest(redemptionHistoryRequest.type, handleRedemptionHistory);
586
+ yield takeLatest(productTypesRequest.type, handleProductTypes);
587
+ yield takeLatest(
588
+ productCategoriesByTypeRequest.type,
589
+ handleProductCategoriesByType
590
+ );
591
+ yield takeLatest(viewMyCartRequest.type, handleViewMyCartById);
592
+ yield takeLatest(dashboardInfoRequest.type, handleDashboardInfo);
593
+ yield takeLatest(getAddressListRequest.type, handleGetAddressList);
594
+ yield takeLatest(createAddressRequest.type, handleCreateAddress);
595
+ yield takeLatest(updateAddressRequest.type, handleUpdateAddress);
596
+ yield takeLatest(deleteAddressRequest.type, handleDeleteAddress);
597
+ yield takeLatest(updateCartRequest.type, handleUpdateCart);
598
+ yield takeLatest(deleteCartRequest.type, handleDeleteCart);
599
+ yield takeLatest(addToCartRequest.type, handleAddToCart);
600
+ yield takeLatest(pointsLogRequest.type, handlePointsLog);
601
+ yield takeLatest(generateEVouchersRequest.type, handleGenerateEVouchers);
602
+ yield takeLatest(validateEVouchersRequest.type, handleValidateEVouchers);
603
+ yield takeLatest(checkoutRequest.type, handleCheckout);
604
+ yield takeLatest(deliverHereRequest.type, handleDeliverHere);
605
+ }