ordering-ui-react-native 0.15.85 → 0.15.86-release

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 (241) hide show
  1. package/package.json +7 -3
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +1 -1
  5. package/src/components/AddressForm/index.tsx +18 -2
  6. package/src/components/BusinessBasicInformation/index.tsx +11 -19
  7. package/src/components/BusinessController/index.tsx +16 -8
  8. package/src/components/BusinessInformation/index.tsx +14 -0
  9. package/src/components/BusinessTypeFilter/index.tsx +1 -2
  10. package/src/components/BusinessesListing/index.tsx +1 -1
  11. package/src/components/Checkout/index.tsx +25 -3
  12. package/src/components/DriverTips/index.tsx +11 -6
  13. package/src/components/LanguageSelector/index.tsx +21 -16
  14. package/src/components/LoginForm/index.tsx +120 -30
  15. package/src/components/LoginForm/styles.tsx +6 -0
  16. package/src/components/Messages/index.tsx +2 -2
  17. package/src/components/NotificationSetting/index.tsx +85 -0
  18. package/src/components/OrderDetails/index.tsx +7 -21
  19. package/src/components/PaymentOptions/index.tsx +335 -365
  20. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  21. package/src/components/ReviewDriver/index.tsx +1 -1
  22. package/src/components/ReviewOrder/index.tsx +2 -1
  23. package/src/components/ReviewProducts/index.tsx +11 -0
  24. package/src/components/SignupForm/index.tsx +145 -61
  25. package/src/components/SingleProductCard/index.tsx +16 -4
  26. package/src/components/SingleProductReview/index.tsx +1 -1
  27. package/src/components/StripeElementsForm/index.tsx +25 -16
  28. package/src/components/StripeMethodForm/index.tsx +22 -24
  29. package/src/components/UpsellingProducts/index.tsx +1 -1
  30. package/src/components/UserProfileForm/index.tsx +63 -6
  31. package/src/components/UserProfileForm/styles.tsx +8 -0
  32. package/src/components/VerifyPhone/styles.tsx +1 -2
  33. package/src/components/shared/OBottomPopup.tsx +6 -2
  34. package/src/components/shared/OModal.tsx +1 -1
  35. package/src/hooks/useCountdownTimer.tsx +26 -0
  36. package/src/index.tsx +2 -0
  37. package/src/navigators/CheckoutNavigator.tsx +6 -0
  38. package/src/navigators/HomeNavigator.tsx +6 -0
  39. package/src/pages/BusinessesListing.tsx +7 -6
  40. package/src/pages/MultiCheckout.tsx +31 -0
  41. package/src/pages/MultiOrdersDetails.tsx +27 -0
  42. package/src/pages/OrderDetails.tsx +1 -1
  43. package/src/pages/ReviewDriver.tsx +2 -2
  44. package/src/pages/ReviewOrder.tsx +2 -2
  45. package/src/theme.json +0 -1
  46. package/src/types/index.tsx +18 -11
  47. package/src/utils/index.tsx +28 -29
  48. package/themes/business/index.tsx +4 -0
  49. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +100 -60
  50. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  51. package/themes/business/src/components/Chat/index.tsx +52 -92
  52. package/themes/business/src/components/DriverMap/index.tsx +6 -5
  53. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  54. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  55. package/themes/business/src/components/LoginForm/index.tsx +89 -2
  56. package/themes/business/src/components/LoginForm/styles.tsx +6 -0
  57. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  58. package/themes/business/src/components/MapView/index.tsx +1 -1
  59. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  60. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -13
  61. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  62. package/themes/business/src/components/OrderDetails/Delivery.tsx +17 -7
  63. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +26 -18
  64. package/themes/business/src/components/OrdersListManager/index.tsx +11 -4
  65. package/themes/business/src/components/OrdersOption/index.tsx +66 -20
  66. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  67. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  68. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  69. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  70. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  71. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  72. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  73. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  74. package/themes/business/src/components/PreviousMessages/index.tsx +1 -0
  75. package/themes/business/src/components/PreviousOrders/index.tsx +7 -7
  76. package/themes/business/src/components/ProductItemAccordion/index.tsx +5 -4
  77. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  78. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  79. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  80. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  81. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  82. package/themes/business/src/components/shared/OModal.tsx +41 -38
  83. package/themes/business/src/types/index.tsx +15 -7
  84. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  85. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  86. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  87. package/themes/kiosk/src/components/BusinessMenu/index.tsx +25 -26
  88. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -3
  89. package/themes/kiosk/src/components/Cart/index.tsx +10 -11
  90. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +9 -2
  91. package/themes/kiosk/src/components/CartContent/index.tsx +0 -11
  92. package/themes/kiosk/src/components/CartItem/index.tsx +4 -3
  93. package/themes/kiosk/src/components/CategoriesMenu/index.tsx +107 -62
  94. package/themes/kiosk/src/components/Checkout/index.tsx +40 -22
  95. package/themes/kiosk/src/components/CustomerName/index.tsx +0 -6
  96. package/themes/kiosk/src/components/DrawerView/index.tsx +1 -0
  97. package/themes/kiosk/src/components/DrawerView/styles.tsx +2 -2
  98. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  99. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  100. package/themes/kiosk/src/components/OrderDetails/index.tsx +2 -2
  101. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +9 -11
  102. package/themes/kiosk/src/components/PaymentOptions/index.tsx +55 -53
  103. package/themes/kiosk/src/components/ProductForm/index.tsx +6 -7
  104. package/themes/kiosk/src/components/ProductOptionSubOption/index.tsx +3 -1
  105. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +16 -5
  106. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  107. package/themes/kiosk/src/types/index.d.ts +1 -0
  108. package/themes/original/index.tsx +22 -0
  109. package/themes/original/src/components/ActiveOrders/index.tsx +15 -132
  110. package/themes/original/src/components/ActiveOrders/styles.tsx +0 -54
  111. package/themes/original/src/components/AddressForm/index.tsx +7 -6
  112. package/themes/original/src/components/AddressList/index.tsx +1 -1
  113. package/themes/original/src/components/AppleLogin/index.tsx +6 -8
  114. package/themes/original/src/components/BusinessBasicInformation/index.tsx +291 -150
  115. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  116. package/themes/original/src/components/BusinessController/index.tsx +179 -96
  117. package/themes/original/src/components/BusinessController/styles.tsx +5 -0
  118. package/themes/original/src/components/BusinessItemAccordion/index.tsx +11 -8
  119. package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -1
  120. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  121. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  122. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  123. package/themes/original/src/components/BusinessListingSearch/index.tsx +185 -120
  124. package/themes/original/src/components/BusinessListingSearch/styles.tsx +23 -11
  125. package/themes/original/src/components/BusinessPreorder/index.tsx +1 -1
  126. package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -2
  127. package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +44 -0
  128. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  129. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  130. package/themes/original/src/components/BusinessProductsList/index.tsx +66 -73
  131. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  132. package/themes/original/src/components/BusinessProductsListing/index.tsx +311 -176
  133. package/themes/original/src/components/BusinessProductsListing/styles.tsx +18 -0
  134. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  135. package/themes/original/src/components/BusinessTypeFilter/index.tsx +106 -38
  136. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  137. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +561 -0
  138. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -2
  139. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +663 -0
  140. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  141. package/themes/original/src/components/BusinessesListing/index.tsx +104 -462
  142. package/themes/original/src/components/Cart/index.tsx +83 -38
  143. package/themes/original/src/components/Cart/styles.tsx +4 -0
  144. package/themes/original/src/components/CartContent/index.tsx +3 -3
  145. package/themes/original/src/components/Checkout/index.tsx +128 -67
  146. package/themes/original/src/components/Checkout/styles.tsx +0 -1
  147. package/themes/original/src/components/DriverTips/index.tsx +17 -12
  148. package/themes/original/src/components/Favorite/index.tsx +92 -0
  149. package/themes/original/src/components/Favorite/styles.tsx +22 -0
  150. package/themes/original/src/components/FavoriteList/index.tsx +298 -0
  151. package/themes/original/src/components/FavoriteList/styles.tsx +5 -0
  152. package/themes/original/src/components/ForgotPasswordForm/index.tsx +13 -4
  153. package/themes/original/src/components/GPSButton/index.tsx +15 -8
  154. package/themes/original/src/components/GoogleMap/index.tsx +11 -11
  155. package/themes/original/src/components/Help/index.tsx +21 -4
  156. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +8 -3
  157. package/themes/original/src/components/HelpGuide/index.tsx +8 -3
  158. package/themes/original/src/components/HelpOrder/index.tsx +8 -3
  159. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +18 -1
  160. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  161. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -0
  162. package/themes/original/src/components/LoginForm/Otp/styles.tsx +7 -0
  163. package/themes/original/src/components/LoginForm/index.tsx +332 -164
  164. package/themes/original/src/components/LoginForm/styles.tsx +1 -3
  165. package/themes/original/src/components/Messages/index.tsx +17 -17
  166. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  167. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  168. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +243 -0
  169. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/styles.tsx +46 -0
  170. package/themes/original/src/components/MultiCheckout/index.tsx +304 -0
  171. package/themes/original/src/components/MultiCheckout/styles.tsx +59 -0
  172. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +372 -0
  173. package/themes/original/src/components/MultiOrdersDetails/index.tsx +262 -0
  174. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +50 -0
  175. package/themes/original/src/components/MyOrders/index.tsx +132 -27
  176. package/themes/original/src/components/MyOrders/styles.tsx +8 -1
  177. package/themes/original/src/components/NavBar/index.tsx +11 -5
  178. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  179. package/themes/original/src/components/OrderDetails/index.tsx +164 -81
  180. package/themes/original/src/components/OrderDetails/styles.tsx +5 -2
  181. package/themes/original/src/components/OrderItAgain/index.tsx +73 -0
  182. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  183. package/themes/original/src/components/OrderProgress/index.tsx +8 -2
  184. package/themes/original/src/components/OrderSummary/index.tsx +2 -35
  185. package/themes/original/src/components/OrderTypeSelector/index.tsx +78 -35
  186. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  187. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +140 -0
  188. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +6 -0
  189. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +53 -0
  190. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +6 -0
  191. package/themes/original/src/components/OrdersOption/index.tsx +138 -46
  192. package/themes/original/src/components/OrdersOption/styles.tsx +4 -1
  193. package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
  194. package/themes/original/src/components/PaymentOptionWallet/index.tsx +15 -22
  195. package/themes/original/src/components/PaymentOptions/index.tsx +57 -37
  196. package/themes/original/src/components/PhoneInputNumber/index.tsx +4 -10
  197. package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
  198. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  199. package/themes/original/src/components/PreviousOrders/index.tsx +18 -147
  200. package/themes/original/src/components/ProductForm/index.tsx +714 -673
  201. package/themes/original/src/components/ProductForm/styles.tsx +9 -7
  202. package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
  203. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  204. package/themes/original/src/components/ProductOptionSubOption/index.tsx +13 -9
  205. package/themes/original/src/components/ProfessionalFilter/index.tsx +128 -0
  206. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  207. package/themes/original/src/components/ProfessionalProfile/index.tsx +298 -0
  208. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  209. package/themes/original/src/components/Promotions/index.tsx +22 -6
  210. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  211. package/themes/original/src/components/ReviewOrder/index.tsx +1 -1
  212. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  213. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  214. package/themes/original/src/components/SearchBar/index.tsx +13 -5
  215. package/themes/original/src/components/ServiceForm/index.tsx +579 -0
  216. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  217. package/themes/original/src/components/SignupForm/index.tsx +237 -126
  218. package/themes/original/src/components/SingleOrderCard/index.tsx +316 -0
  219. package/themes/original/src/components/SingleOrderCard/styles.tsx +54 -0
  220. package/themes/original/src/components/SingleProductCard/index.tsx +197 -95
  221. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -2
  222. package/themes/original/src/components/StripeElementsForm/index.tsx +25 -9
  223. package/themes/original/src/components/StripeElementsForm/naked.tsx +2 -2
  224. package/themes/original/src/components/UpsellingProducts/index.tsx +7 -3
  225. package/themes/original/src/components/UserDetails/index.tsx +32 -18
  226. package/themes/original/src/components/UserFormDetails/index.tsx +108 -74
  227. package/themes/original/src/components/UserProfile/index.tsx +5 -1
  228. package/themes/original/src/components/UserProfileForm/index.tsx +15 -10
  229. package/themes/original/src/components/UserVerification/index.tsx +178 -192
  230. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  231. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  232. package/themes/original/src/components/Wallets/index.tsx +177 -163
  233. package/themes/original/src/components/Wallets/styles.tsx +10 -8
  234. package/themes/original/src/components/shared/OBottomPopup.tsx +47 -14
  235. package/themes/original/src/components/shared/OButton.tsx +10 -3
  236. package/themes/original/src/components/shared/OInput.tsx +3 -2
  237. package/themes/original/src/components/shared/OModal.tsx +4 -2
  238. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  239. package/themes/original/src/types/index.tsx +212 -44
  240. package/themes/original/src/utils/index.tsx +94 -1
  241. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,5 +1,5 @@
1
1
  import React, { useState, useEffect } from 'react';
2
- import { View, StyleSheet, BackHandler, Platform, Linking } from 'react-native';
2
+ import { View, StyleSheet, BackHandler, Platform, Linking, RefreshControl } from 'react-native';
3
3
  import LinearGradient from 'react-native-linear-gradient';
4
4
  import { _setStoreData } from '../../providers/StoreUtil';
5
5
  import {
@@ -30,7 +30,8 @@ import {
30
30
  OrderDriver,
31
31
  Map,
32
32
  Divider,
33
- OrderAction
33
+ OrderAction,
34
+ PlaceSpotWrapper
34
35
  } from './styles';
35
36
  import { OButton, OIcon, OModal, OText } from '../shared';
36
37
  import { ProductItemAccordion } from '../ProductItemAccordion';
@@ -42,7 +43,9 @@ import { OSRow } from '../OrderSummary/styles';
42
43
  import AntIcon from 'react-native-vector-icons/AntDesign'
43
44
  import { TaxInformation } from '../TaxInformation';
44
45
  import { Placeholder, PlaceholderLine } from 'rn-placeholder';
45
-
46
+ import NavBar from '../NavBar'
47
+ import { OrderHistory } from './OrderHistory';
48
+ import { PlaceSpot } from '../PlaceSpot'
46
49
  export const OrderDetailsUI = (props: OrderDetailsParams) => {
47
50
  const {
48
51
  navigation,
@@ -53,7 +56,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
53
56
  driverLocation,
54
57
  onNavigationRedirect,
55
58
  reorderState,
56
- handleReorder
59
+ handleReorder,
60
+ getOrder
57
61
  } = props;
58
62
 
59
63
  const theme = useTheme();
@@ -82,8 +86,14 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
82
86
  justifyContent: 'flex-start',
83
87
  paddingLeft: 0,
84
88
  height: 30,
85
- width: 40,
89
+ width: 30,
90
+ marginTop: Platform.OS === 'ios' ? 0 : 30
86
91
  },
92
+ linkWrapper: {
93
+ display: 'flex',
94
+ alignItems: 'center',
95
+ flexDirection: 'row'
96
+ }
87
97
  });
88
98
 
89
99
  const [, t] = useLanguage();
@@ -92,9 +102,12 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
92
102
  const [{ carts }] = useOrder()
93
103
 
94
104
  const [isReviewed, setIsReviewed] = useState(false)
105
+ const [isOrderHistory, setIsOrderHistory] = useState(false)
95
106
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, tax: null, type: '' })
107
+ const [refreshing] = useState(false);
96
108
  const { order, businessData } = props.order;
97
109
  const mapValidStatuses = [9, 19, 23]
110
+ const placeSpotTypes = [3, 4, 5]
98
111
 
99
112
  const walletName: any = {
100
113
  cash: {
@@ -332,7 +345,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
332
345
  };
333
346
 
334
347
  const getIncludedTaxes = () => {
335
- if (order?.taxes?.length === 0) {
348
+ if (order?.taxes?.length === 0 || !order?.taxes) {
336
349
  return order.tax_type === 1 ? order?.summary?.tax ?? 0 : 0
337
350
  } else {
338
351
  return order?.taxes.reduce((taxIncluded: number, tax: any) => {
@@ -363,39 +376,39 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
363
376
  )
364
377
  }
365
378
 
366
- const RenderGoogleMap = () => {
367
- const driverLocationString = typeof order?.driver?.location?.location === 'string' && order?.driver?.location?.location?.split(',').map((l : string) => l.replace(/[^-.0-9]/g, ''))
368
- const parsedLocations = locations.map(location => typeof location?.location === 'string' ? {
369
- ...location,
370
- lat: parseFloat(location?.location?.split(',')[0].replace(/[^-.0-9]/g, '')),
371
- lng: parseFloat(location?.location?.split(',')[1].replace(/[^-.0-9]/g, ''))
372
- } : location)
379
+ const handleTriggerReview = () => {
380
+ setIsOrderHistory(false);
381
+ (
382
+ parseInt(order?.status) === 1 ||
383
+ parseInt(order?.status) === 11 ||
384
+ parseInt(order?.status) === 15
385
+ ) && !order.review && !isReviewed && handleClickOrderReview(order)
386
+ }
373
387
 
374
- return (
375
- <GoogleMap
376
- location={typeof order?.driver?.location?.location === 'string'
377
- ? {
378
- lat: parseFloat(driverLocationString[0]),
379
- lng: parseFloat(driverLocationString[1]),
380
- } : order?.driver?.location
381
- }
382
- locations={parsedLocations}
383
- readOnly
384
- />
385
- )
388
+
389
+ const resfreshOrder = () => {
390
+ getOrder()
386
391
  }
387
392
 
388
393
  useEffect(() => {
394
+ const _businessId = 'businessId:' + businessData?.id
389
395
  if (reorderState?.error) {
390
- const _businessId = 'businessId:' + businessData?.id
391
- const _uuid = carts[_businessId]?.uuid
392
- if (_uuid) {
393
- _setStoreData('remove-cartId', JSON.stringify(_uuid))
396
+ if (businessData?.id) {
397
+ _setStoreData('adjust-cart-products', JSON.stringify(_businessId))
394
398
  navigation.navigate('Business', { store: businessData?.slug })
395
399
  }
396
400
  }
397
- if (!reorderState?.error && reorderState?.result?.uuid) {
398
- onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', { cartUuid: reorderState?.result.uuid })
401
+ if (!reorderState?.error && reorderState.loading === false && businessData?.id) {
402
+ const products = carts?.[_businessId]?.products
403
+ const available = products?.every((product: any) => product.valid === true)
404
+
405
+ if (available && reorderState?.result?.uuid && (products?.length === order?.products.length)) {
406
+ onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', { cartUuid: reorderState?.result.uuid })
407
+ } else {
408
+ _setStoreData('adjust-cart-products', JSON.stringify(_businessId))
409
+ products?.length !== order?.products.length && _setStoreData('already-removed', JSON.stringify('removed'))
410
+ navigation.navigate('Business', { store: businessData?.slug })
411
+ }
399
412
  }
400
413
  }, [reorderState])
401
414
 
@@ -427,15 +440,32 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
427
440
  'https://res.cloudinary.com/demo/image/upload/c_thumb,g_face,r_max/d_avatar.png/non_existing_id.png',
428
441
  },
429
442
  ];
443
+ const driverLocationString = typeof order?.driver?.location?.location === 'string' && order?.driver?.location?.location?.split(',').map((l: string) => l.replace(/[^-.0-9]/g, ''))
444
+ const parsedLocations = locations.map(location => typeof location?.location === 'string' ? {
445
+ ...location,
446
+ lat: parseFloat(location?.location?.split(',')[0].replace(/[^-.0-9]/g, '')),
447
+ lng: parseFloat(location?.location?.split(',')[1].replace(/[^-.0-9]/g, ''))
448
+ } : location)
430
449
 
431
450
  useEffect(() => {
432
451
  if (driverLocation) {
433
- locations[0] = driverLocation;
452
+ parsedLocations[0] = {
453
+ ...locations[0],
454
+ ...driverLocation
455
+ }
434
456
  }
435
457
  }, [driverLocation]);
436
458
 
437
459
  return (
438
- <OrderDetailsContainer keyboardShouldPersistTaps="handled">
460
+ <OrderDetailsContainer
461
+ keyboardShouldPersistTaps="handled"
462
+ refreshControl={
463
+ <RefreshControl
464
+ refreshing={refreshing}
465
+ onRefresh={() => resfreshOrder()}
466
+ />
467
+ }
468
+ >
439
469
  {(!order || Object.keys(order).length === 0) && (
440
470
  <Placeholder style={{ marginTop: 30 }}>
441
471
  <Header>
@@ -491,49 +521,62 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
491
521
  {order && Object.keys(order).length > 0 && (
492
522
  <>
493
523
  <Header>
494
- <OButton
495
- imgLeftSrc={theme.images.general.arrow_left}
496
- imgRightSrc={null}
497
- style={styles.btnBackArrow}
498
- onClick={() => handleArrowBack()}
499
- imgLeftStyle={{ tintColor: theme.colors.disabled }}
524
+ <NavBar
525
+ title={`${t('ORDER', 'Order')} #${order?.id}`}
526
+ titleAlign={'center'}
527
+ onActionLeft={handleArrowBack}
528
+ showCall={false}
529
+ btnStyle={{ paddingLeft: 0 }}
530
+ style={{ marginTop: Platform.OS === 'ios' ? 0 : 20 }}
531
+ titleWrapStyle={{ paddingHorizontal: 0 }}
532
+ titleStyle={{ marginRight: 0, marginLeft: 0 }}
533
+ subTitle={<OText size={12} lineHeight={18} color={theme.colors.textNormal}>
534
+ {order?.delivery_datetime_utc
535
+ ? parseDate(order?.delivery_datetime_utc)
536
+ : parseDate(order?.delivery_datetime, { utc: false })}
537
+ </OText>}
500
538
  />
501
539
  <OrderInfo>
502
540
  <OrderData>
503
- <OText
504
- size={20}
505
- lineHeight={30}
506
- weight={'600'}
507
- color={theme.colors.textNormal}>
508
- {t('ORDER', 'Order')} #{order?.id}
509
- </OText>
510
- <OText size={12} lineHeight={18} color={theme.colors.textNormal}>
511
- {order?.delivery_datetime_utc
512
- ? parseDate(order?.delivery_datetime_utc)
513
- : parseDate(order?.delivery_datetime, { utc: false })}
514
- </OText>
515
- {
516
- (
517
- parseInt(order?.status) === 1 ||
518
- parseInt(order?.status) === 11 ||
519
- parseInt(order?.status) === 15
520
- ) && !order.review && !isReviewed && (
521
- <TouchableOpacity
522
- activeOpacity={0.7}
523
- style={{ marginTop: 6 }}
524
- onPress={() => handleClickOrderReview(order)}
541
+ <View style={styles.linkWrapper}>
542
+ {
543
+ (
544
+ parseInt(order?.status) === 1 ||
545
+ parseInt(order?.status) === 11 ||
546
+ parseInt(order?.status) === 15
547
+ ) && !order.review && !isReviewed && (
548
+ <TouchableOpacity
549
+ activeOpacity={0.7}
550
+ style={{ marginTop: 6, marginRight: 10 }}
551
+ onPress={() => handleClickOrderReview(order)}
552
+ >
553
+ <OText
554
+ size={10}
555
+ lineHeight={15}
556
+ color={theme.colors.primary}
557
+ style={{ textDecorationLine: 'underline' }}
558
+ >
559
+ {t('REVIEW_YOUR_ORDER', 'Review your order')}
560
+ </OText>
561
+ </TouchableOpacity>
562
+ )}
563
+ <TouchableOpacity
564
+ activeOpacity={0.7}
565
+ style={{ marginTop: 6 }}
566
+ onPress={() => setIsOrderHistory(true)}
525
567
 
568
+ >
569
+ <OText
570
+ size={10}
571
+ lineHeight={15}
572
+ color={theme.colors.primary}
573
+ style={{ textDecorationLine: 'underline', textTransform: 'capitalize' }}
526
574
  >
527
- <OText
528
- size={10}
529
- lineHeight={15}
530
- color={theme.colors.textSecondary}
531
- style={{ textDecorationLine: 'underline' }}
532
- >
533
- {t('REVIEW_YOUR_ORDER', 'Review your order')}
534
- </OText>
535
- </TouchableOpacity>
536
- )}
575
+ {t('VIEW_DETAILS', 'View Details')}
576
+ </OText>
577
+ </TouchableOpacity>
578
+ </View>
579
+
537
580
  <StaturBar>
538
581
  <LinearGradient
539
582
  start={{ x: 0.0, y: 0.0 }}
@@ -640,6 +683,18 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
640
683
  </OText>
641
684
  </View>
642
685
  </OrderBusiness>
686
+
687
+ {placeSpotTypes.includes(order?.delivery_type) && (
688
+ <PlaceSpotWrapper>
689
+ <PlaceSpot
690
+ isInputMode
691
+ cart={order}
692
+ spotNumberDefault={order?.spot_number}
693
+ vehicleDefault={order?.vehicle}
694
+ />
695
+ </PlaceSpotWrapper>
696
+ )}
697
+
643
698
  <View
644
699
  style={{
645
700
  height: 8,
@@ -673,13 +728,15 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
673
728
  mBottom={2}>
674
729
  {order?.customer?.address}
675
730
  </OText>
676
- <OText
677
- size={12}
678
- lineHeight={18}
679
- color={theme.colors.textNormal}
680
- mBottom={2}>
681
- {order?.customer?.cellphone}
682
- </OText>
731
+ {(!!order?.customer?.cellphone) && (
732
+ <OText
733
+ size={12}
734
+ lineHeight={18}
735
+ color={theme.colors.textNormal}
736
+ mBottom={2}>
737
+ {`${!!order?.customer?.country_phone_code ? '+' + order?.customer?.country_phone_code : ''} ${order?.customer?.cellphone}`}
738
+ </OText>
739
+ )}
683
740
  </InfoBlock>
684
741
  </Customer>
685
742
  {order?.delivery_option !== undefined && order?.delivery_type === 1 && (
@@ -692,7 +749,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
692
749
  </OText>
693
750
  </View>
694
751
  )}
695
- {order?.comment && (
752
+ {!!order?.comment && (
696
753
  <View style={{ marginTop: 15 }}>
697
754
  <OText size={16} style={{ textAlign: 'left' }} color={theme.colors.textNormal}>
698
755
  {t('COMMENT', 'Comment')}
@@ -704,7 +761,16 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
704
761
  <>
705
762
  {order?.driver?.location && mapValidStatuses.includes(parseInt(order?.status)) && (
706
763
  <Map>
707
- <RenderGoogleMap />
764
+ <GoogleMap
765
+ location={typeof order?.driver?.location?.location === 'string'
766
+ ? {
767
+ lat: parseFloat(driverLocationString[0]),
768
+ lng: parseFloat(driverLocationString[1]),
769
+ } : driverLocation ?? order?.driver?.location
770
+ }
771
+ locations={parsedLocations}
772
+ readOnly
773
+ />
708
774
  </Map>
709
775
  )}
710
776
  </>
@@ -1028,7 +1094,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1028
1094
  )}
1029
1095
  </View>
1030
1096
  <OText>
1031
- -{parsePrice(event.amount)}
1097
+ -{parsePrice(event.amount, { isTruncable: true })}
1032
1098
  </OText>
1033
1099
  </View>
1034
1100
  ))}
@@ -1050,6 +1116,23 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1050
1116
  products={order?.products}
1051
1117
  />
1052
1118
  </OModal>
1119
+ <OModal
1120
+ open={isOrderHistory}
1121
+ onClose={() => setIsOrderHistory(false)}
1122
+ entireModal
1123
+ >
1124
+ <OrderHistory
1125
+ order={order}
1126
+ messages={messages}
1127
+ enableReview={(
1128
+ parseInt(order?.status) === 1 ||
1129
+ parseInt(order?.status) === 11 ||
1130
+ parseInt(order?.status) === 15
1131
+ ) && !order.review && !isReviewed}
1132
+ onClose={() => setIsOrderHistory(false)}
1133
+ handleTriggerReview={handleTriggerReview}
1134
+ />
1135
+ </OModal>
1053
1136
  </OrderDetailsContainer>
1054
1137
  );
1055
1138
  };
@@ -5,7 +5,6 @@ export const OrderDetailsContainer = styled.ScrollView`
5
5
  `
6
6
 
7
7
  export const NavBack = styled.TouchableOpacity`
8
-
9
8
  `
10
9
 
11
10
 
@@ -127,4 +126,8 @@ export const Divider = styled.View`
127
126
  `
128
127
  export const OrderAction = styled.View`
129
128
  flex-direction: row;
130
- `
129
+ `
130
+
131
+ export const PlaceSpotWrapper = styled.View`
132
+ padding-horizontal: 40px;
133
+ `
@@ -0,0 +1,73 @@
1
+ import React from 'react'
2
+ import { OText } from '../shared'
3
+ import { useLanguage } from 'ordering-components/native'
4
+ import { useTheme } from 'styled-components/native'
5
+ import { SingleProductCard } from '../SingleProductCard'
6
+ import { OrderItAgainParams } from '../../types'
7
+ import { ScrollView, Dimensions } from 'react-native'
8
+ import moment from 'moment';
9
+ import {
10
+ Container,
11
+ ProductWrapper
12
+ } from './styles'
13
+
14
+ export const OrderItAgain = (props: OrderItAgainParams) => {
15
+ const {
16
+ onProductClick,
17
+ productList,
18
+ businessId,
19
+ categoryState,
20
+ currentCart,
21
+ handleUpdateProducts,
22
+ navigation,
23
+ searchValue
24
+ } = props
25
+
26
+ const [, t] = useLanguage()
27
+ const theme = useTheme()
28
+ const { width } = Dimensions.get('window');
29
+ const productsFilterd = productList?.length > 0 && productList?.sort((a: any, b:any) => moment(b?.last_ordered_date).valueOf() - moment(a?.last_ordered_date).valueOf()).filter((product : any) => product?.name?.toLowerCase()?.includes(searchValue?.toLowerCase()))
30
+ return (
31
+ <Container hide={productsFilterd?.length === 0}>
32
+ <OText
33
+ size={16}
34
+ lineHeight={24}
35
+ color={theme.colors.textNormal}
36
+ style={{
37
+ fontWeight: '600',
38
+ marginBottom: 6
39
+ }}
40
+ >
41
+ {t('ORDER_IT_AGAIN', 'Order it again')}
42
+ </OText>
43
+ <OText
44
+ size={12}
45
+ lineHeight={18}
46
+ color={theme.colors.disabled}
47
+ >
48
+ {t('ORDER_IT_AGAIN_DESC', 'Quickly add items from your past orders.')}
49
+ </OText>
50
+ <ScrollView
51
+ horizontal
52
+ showsVerticalScrollIndicator={false}
53
+ showsHorizontalScrollIndicator={false}
54
+ >
55
+ {productsFilterd.map((product: any, i: number) => (
56
+ <ProductWrapper key={'prod_' + product.id + `_${i}`} style={{ width: width - 120, }}>
57
+ <SingleProductCard
58
+ isSoldOut={product.inventoried && !product.quantity}
59
+ product={product}
60
+ businessId={businessId}
61
+ categoryState={categoryState}
62
+ onProductClick={() => onProductClick(product)}
63
+ productAddedToCartLength={currentCart?.products?.reduce((productsLength: number, Cproduct: any) => { return productsLength + (Cproduct?.id === product?.id ? Cproduct?.quantity : 0) }, 0)}
64
+ handleUpdateProducts={handleUpdateProducts}
65
+ navigation={navigation}
66
+ isPreviously
67
+ />
68
+ </ProductWrapper>
69
+ ))}
70
+ </ScrollView>
71
+ </Container>
72
+ )
73
+ }
@@ -0,0 +1,10 @@
1
+ import styled from 'styled-components/native'
2
+
3
+ export const Container = styled.View`
4
+ margin-top: 20px;
5
+ `
6
+
7
+ export const ProductWrapper = styled.View`
8
+ margin-right: 20px;
9
+ padding-top: 30px;
10
+ `
@@ -33,6 +33,7 @@ const OrderProgressUI = (props: any) => {
33
33
  const [{ optimizeImage, parseDate, parseTime }] = useUtils()
34
34
  const [lastOrder, setLastOrder] = useState<any>(null)
35
35
  const imageFails = theme.images.general.emptyActiveOrders
36
+ const [initialLoaded, setInitialLoaded] = useState(false)
36
37
 
37
38
  const styles = StyleSheet.create({
38
39
  main: {
@@ -135,16 +136,21 @@ const OrderProgressUI = (props: any) => {
135
136
  }
136
137
  }, [isFocused])
137
138
 
139
+ useEffect(() => {
140
+ if (orderList.loading || initialLoaded) return
141
+ setInitialLoaded(true)
142
+ }, [orderList.loading, initialLoaded])
143
+
138
144
  return (
139
145
  <>
140
- {orderList?.loading && (
146
+ {(orderList?.loading && !initialLoaded) && (
141
147
  <Placeholder Animation={Fade} height={Platform.OS === 'ios' ? 147.5 : 158}>
142
148
  <PlaceholderLine height={60} style={{ borderRadius: 8, marginBottom: 10 }} />
143
149
  <PlaceholderLine height={20} style={{ marginBottom: 10 }} />
144
150
  <PlaceholderLine height={40} style={{ borderRadius: 8, marginBottom: 10 }} />
145
151
  </Placeholder>
146
152
  )}
147
- {!orderList?.loading && orderList?.orders?.length > 0 && lastOrder && (
153
+ {(!orderList?.loading || initialLoaded) && orderList?.orders?.length > 0 && lastOrder && (
148
154
  <View style={styles.main}>
149
155
  <OrderInfoWrapper style={{ flex: 1 }}>
150
156
  <View style={styles.logoWrapper}>
@@ -26,7 +26,6 @@ import AntIcon from 'react-native-vector-icons/AntDesign'
26
26
  import { TaxInformation } from '../TaxInformation';
27
27
  import { TouchableOpacity } from 'react-native';
28
28
  import { OAlert } from '../../../../../src/components/shared'
29
- import { PlaceSpot } from '../PlaceSpot'
30
29
 
31
30
  const OrderSummaryUI = (props: any) => {
32
31
  const {
@@ -50,9 +49,7 @@ const OrderSummaryUI = (props: any) => {
50
49
  const [validationFields] = useValidationFields();
51
50
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, data: null, type: '' })
52
51
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
53
- const [openPlaceModal, setOpenPlaceModal] = useState(false)
54
52
  const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled;
55
- const placeSpotTypes = [3, 4]
56
53
 
57
54
  const handleDeleteClick = (product: any) => {
58
55
  removeProduct(product, cart)
@@ -71,7 +68,7 @@ const OrderSummaryUI = (props: any) => {
71
68
  }
72
69
 
73
70
  const getIncludedTaxes = () => {
74
- if (cart?.taxes === null) {
71
+ if (cart?.taxes === null || !cart?.taxes) {
75
72
  return cart.business.tax_type === 1 ? cart?.tax : 0
76
73
  } else {
77
74
  return cart?.taxes.reduce((taxIncluded: number, tax: any) => {
@@ -299,29 +296,11 @@ const OrderSummaryUI = (props: any) => {
299
296
  {t('TOTAL', 'Total')}
300
297
  </OText>
301
298
  <OText size={14} style={{ fontWeight: 'bold' }} >
302
- {parsePrice(cart?.total >= 0 ? cart?.total : 0)}
299
+ {parsePrice(cart?.balance >= 0 ? cart?.balance : 0)}
303
300
  </OText>
304
301
  </OSTable>
305
302
  </View>
306
303
  )}
307
- {placeSpotTypes.includes(orderState?.options?.type) && (
308
- <OSTable style={{ marginTop: 15 }}>
309
- <OText size={14} lineHeight={21} weight={'600'}>
310
- {t('SPOT', 'Spot')}: {cart?.place?.name || t('NO_SELECTED', 'No selected')}
311
- </OText>
312
- <TouchableOpacity onPress={() => setOpenPlaceModal(true)}>
313
- <OText
314
- size={14}
315
- lineHeight={21}
316
- weight={'600'}
317
- color={theme.colors.primary}
318
- style={{ textDecorationLine: 'underline' }}
319
- >
320
- {t('EDIT', 'Edit')}
321
- </OText>
322
- </TouchableOpacity>
323
- </OSTable>
324
- )}
325
304
  {cart?.status !== 2 && (
326
305
  <OSTable>
327
306
  <View style={{ width: '100%', marginTop: 20 }}>
@@ -370,18 +349,6 @@ const OrderSummaryUI = (props: any) => {
370
349
  products={cart?.products}
371
350
  />
372
351
  </OModal>
373
- <OModal
374
- open={openPlaceModal}
375
- title={t('CHOOSE_YOUR_SPOT', 'Choose your spot')}
376
- onClose={() => setOpenPlaceModal(false)}
377
- entireModal
378
- >
379
- <PlaceSpot
380
- cart={cart}
381
- isOpenPlaceSpot={openPlaceModal}
382
- setOpenPlaceModal={setOpenPlaceModal}
383
- />
384
- </OModal>
385
352
  <OAlert
386
353
  open={confirm.open}
387
354
  title={confirm.title}