ordering-ui-react-native 0.16.13 → 0.16.14-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 (213) hide show
  1. package/package.json +7 -4
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +8 -14
  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 +10 -8
  8. package/src/components/BusinessInformation/index.tsx +22 -0
  9. package/src/components/BusinessProductsList/index.tsx +10 -10
  10. package/src/components/BusinessTypeFilter/index.tsx +1 -2
  11. package/src/components/BusinessesListing/index.tsx +1 -1
  12. package/src/components/Checkout/index.tsx +2 -1
  13. package/src/components/LanguageSelector/index.tsx +21 -16
  14. package/src/components/LoginForm/index.tsx +118 -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/OrdersOption/index.tsx +54 -56
  20. package/src/components/PaymentOptions/index.tsx +335 -365
  21. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  22. package/src/components/ReviewDriver/index.tsx +1 -1
  23. package/src/components/ReviewOrder/index.tsx +2 -1
  24. package/src/components/ReviewProducts/index.tsx +11 -0
  25. package/src/components/SignupForm/index.tsx +143 -61
  26. package/src/components/SingleProductReview/index.tsx +8 -5
  27. package/src/components/StripeElementsForm/index.tsx +25 -16
  28. package/src/components/VerifyPhone/styles.tsx +1 -2
  29. package/src/components/shared/OBottomPopup.tsx +6 -2
  30. package/src/index.tsx +2 -0
  31. package/src/navigators/CheckoutNavigator.tsx +6 -0
  32. package/src/navigators/HomeNavigator.tsx +6 -0
  33. package/src/pages/BusinessesListing.tsx +7 -6
  34. package/src/pages/MultiCheckout.tsx +31 -0
  35. package/src/pages/MultiOrdersDetails.tsx +27 -0
  36. package/src/pages/OrderDetails.tsx +1 -1
  37. package/src/pages/ReviewDriver.tsx +2 -2
  38. package/src/pages/ReviewOrder.tsx +2 -2
  39. package/src/theme.json +0 -1
  40. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  41. package/src/types/index.tsx +13 -9
  42. package/src/utils/index.tsx +0 -1
  43. package/themes/business/index.tsx +4 -0
  44. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  45. package/themes/business/src/components/Chat/index.tsx +42 -34
  46. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  47. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  48. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  49. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  50. package/themes/business/src/components/MapView/index.tsx +1 -1
  51. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  52. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  53. package/themes/business/src/components/OrderDetails/Delivery.tsx +3 -3
  54. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +19 -18
  55. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  56. package/themes/business/src/components/OrdersOption/index.tsx +65 -21
  57. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  58. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  59. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  60. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  61. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  62. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  63. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  64. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  65. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  66. package/themes/business/src/components/PreviousOrders/index.tsx +21 -23
  67. package/themes/business/src/components/ProductItemAccordion/index.tsx +5 -4
  68. package/themes/business/src/components/ReviewCustomer/index.tsx +1 -1
  69. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  70. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  71. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  72. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  73. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  74. package/themes/business/src/components/shared/OModal.tsx +40 -37
  75. package/themes/business/src/types/index.tsx +14 -9
  76. package/themes/business/src/utils/index.tsx +10 -0
  77. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  78. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  79. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  80. package/themes/kiosk/src/components/BusinessMenu/index.tsx +2 -1
  81. package/themes/kiosk/src/components/CartItem/index.tsx +4 -3
  82. package/themes/kiosk/src/components/CategoriesMenu/index.tsx +1 -0
  83. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  84. package/themes/kiosk/src/components/DrawerView/index.tsx +1 -0
  85. package/themes/kiosk/src/components/DrawerView/styles.tsx +2 -2
  86. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  87. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  88. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  89. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  90. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  91. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  92. package/themes/kiosk/src/types/index.d.ts +2 -0
  93. package/themes/original/index.tsx +16 -0
  94. package/themes/original/src/components/AddressForm/index.tsx +136 -133
  95. package/themes/original/src/components/AddressList/index.tsx +1 -1
  96. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  97. package/themes/original/src/components/BusinessBasicInformation/index.tsx +302 -160
  98. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  99. package/themes/original/src/components/BusinessController/index.tsx +173 -108
  100. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -9
  101. package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -1
  102. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  103. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  104. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  105. package/themes/original/src/components/BusinessListingSearch/index.tsx +106 -126
  106. package/themes/original/src/components/BusinessListingSearch/styles.tsx +18 -13
  107. package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +1 -1
  108. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  109. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  110. package/themes/original/src/components/BusinessProductsList/index.tsx +53 -53
  111. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  112. package/themes/original/src/components/BusinessProductsListing/index.tsx +290 -181
  113. package/themes/original/src/components/BusinessProductsListing/styles.tsx +18 -0
  114. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  115. package/themes/original/src/components/BusinessTypeFilter/index.tsx +109 -40
  116. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  117. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +561 -0
  118. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -2
  119. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +676 -0
  120. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  121. package/themes/original/src/components/BusinessesListing/index.tsx +100 -495
  122. package/themes/original/src/components/Cart/index.tsx +81 -36
  123. package/themes/original/src/components/Cart/styles.tsx +4 -0
  124. package/themes/original/src/components/CartContent/index.tsx +22 -16
  125. package/themes/original/src/components/Checkout/index.tsx +106 -66
  126. package/themes/original/src/components/Checkout/styles.tsx +0 -1
  127. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  128. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  129. package/themes/original/src/components/Favorite/index.tsx +1 -0
  130. package/themes/original/src/components/Favorite/styles.tsx +1 -0
  131. package/themes/original/src/components/FavoriteList/index.tsx +143 -94
  132. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  133. package/themes/original/src/components/GoogleMap/index.tsx +20 -12
  134. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +8 -3
  135. package/themes/original/src/components/HelpGuide/index.tsx +8 -3
  136. package/themes/original/src/components/HelpOrder/index.tsx +8 -3
  137. package/themes/original/src/components/LoginForm/Otp/index.tsx +3 -2
  138. package/themes/original/src/components/LoginForm/index.tsx +79 -42
  139. package/themes/original/src/components/Messages/index.tsx +17 -17
  140. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  141. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  142. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +243 -0
  143. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/styles.tsx +46 -0
  144. package/themes/original/src/components/MultiCheckout/index.tsx +304 -0
  145. package/themes/original/src/components/MultiCheckout/styles.tsx +59 -0
  146. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +372 -0
  147. package/themes/original/src/components/MultiOrdersDetails/index.tsx +262 -0
  148. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +50 -0
  149. package/themes/original/src/components/MyOrders/index.tsx +177 -27
  150. package/themes/original/src/components/MyOrders/styles.tsx +8 -1
  151. package/themes/original/src/components/NavBar/index.tsx +11 -5
  152. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  153. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  154. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  155. package/themes/original/src/components/OrderDetails/index.tsx +187 -49
  156. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  157. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  158. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  159. package/themes/original/src/components/OrderProgress/index.tsx +8 -2
  160. package/themes/original/src/components/OrderSummary/index.tsx +1 -34
  161. package/themes/original/src/components/OrderTypeSelector/index.tsx +84 -36
  162. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  163. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +144 -0
  164. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +6 -0
  165. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +56 -0
  166. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +6 -0
  167. package/themes/original/src/components/OrdersOption/index.tsx +126 -37
  168. package/themes/original/src/components/OrdersOption/styles.tsx +4 -1
  169. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  170. package/themes/original/src/components/PaymentOptions/index.tsx +57 -37
  171. package/themes/original/src/components/PhoneInputNumber/index.tsx +4 -10
  172. package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
  173. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  174. package/themes/original/src/components/ProductForm/index.tsx +712 -655
  175. package/themes/original/src/components/ProductForm/styles.tsx +9 -7
  176. package/themes/original/src/components/ProductItemAccordion/index.tsx +170 -128
  177. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  178. package/themes/original/src/components/ProfessionalFilter/index.tsx +129 -0
  179. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  180. package/themes/original/src/components/ProfessionalProfile/index.tsx +309 -0
  181. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  182. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  183. package/themes/original/src/components/ReviewOrder/index.tsx +18 -3
  184. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  185. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  186. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  187. package/themes/original/src/components/SearchBar/index.tsx +10 -5
  188. package/themes/original/src/components/ServiceForm/index.tsx +631 -0
  189. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  190. package/themes/original/src/components/SignupForm/index.tsx +301 -158
  191. package/themes/original/src/components/SingleOrderCard/index.tsx +213 -177
  192. package/themes/original/src/components/SingleProductCard/index.tsx +198 -110
  193. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -2
  194. package/themes/original/src/components/SingleProductReview/index.tsx +30 -3
  195. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  196. package/themes/original/src/components/StripeElementsForm/index.tsx +25 -9
  197. package/themes/original/src/components/StripeElementsForm/naked.tsx +2 -2
  198. package/themes/original/src/components/UpsellingProducts/index.tsx +14 -4
  199. package/themes/original/src/components/UserDetails/index.tsx +32 -18
  200. package/themes/original/src/components/UserFormDetails/index.tsx +107 -73
  201. package/themes/original/src/components/UserProfile/index.tsx +8 -1
  202. package/themes/original/src/components/UserProfileForm/index.tsx +15 -10
  203. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  204. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  205. package/themes/original/src/components/Wallets/index.tsx +174 -162
  206. package/themes/original/src/components/Wallets/styles.tsx +10 -8
  207. package/themes/original/src/components/shared/OBottomPopup.tsx +47 -14
  208. package/themes/original/src/components/shared/OButton.tsx +10 -3
  209. package/themes/original/src/components/shared/OInput.tsx +3 -2
  210. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  211. package/themes/original/src/types/index.tsx +163 -47
  212. package/themes/original/src/utils/index.tsx +77 -0
  213. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,5 +1,5 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { View, StyleSheet, BackHandler, Platform, Linking } from 'react-native';
1
+ import React, { useState, useEffect, useMemo } from 'react';
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,9 @@ import {
30
30
  OrderDriver,
31
31
  Map,
32
32
  Divider,
33
- OrderAction
33
+ OrderAction,
34
+ PlaceSpotWrapper,
35
+ ProfessionalPhoto
34
36
  } from './styles';
35
37
  import { OButton, OIcon, OModal, OText } from '../shared';
36
38
  import { ProductItemAccordion } from '../ProductItemAccordion';
@@ -43,6 +45,8 @@ import AntIcon from 'react-native-vector-icons/AntDesign'
43
45
  import { TaxInformation } from '../TaxInformation';
44
46
  import { Placeholder, PlaceholderLine } from 'rn-placeholder';
45
47
  import NavBar from '../NavBar'
48
+ import { OrderHistory } from './OrderHistory';
49
+ import { PlaceSpot } from '../PlaceSpot'
46
50
  export const OrderDetailsUI = (props: OrderDetailsParams) => {
47
51
  const {
48
52
  navigation,
@@ -53,7 +57,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
53
57
  driverLocation,
54
58
  onNavigationRedirect,
55
59
  reorderState,
56
- handleReorder
60
+ handleReorder,
61
+ getOrder
57
62
  } = props;
58
63
 
59
64
  const theme = useTheme();
@@ -64,6 +69,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
64
69
  },
65
70
  statusBar: {
66
71
  height: 12,
72
+ borderRadius: 8
67
73
  },
68
74
  logo: {
69
75
  width: 75,
@@ -85,6 +91,17 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
85
91
  width: 30,
86
92
  marginTop: Platform.OS === 'ios' ? 0 : 30
87
93
  },
94
+ linkWrapper: {
95
+ display: 'flex',
96
+ alignItems: 'center',
97
+ flexDirection: 'row'
98
+ },
99
+ professionalBlock: {
100
+ borderBottomColor: theme.colors.border,
101
+ borderBottomWidth: 1,
102
+ marginVertical: 10,
103
+ paddingVertical: 5
104
+ }
88
105
  });
89
106
 
90
107
  const [, t] = useLanguage();
@@ -93,9 +110,12 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
93
110
  const [{ carts }] = useOrder()
94
111
 
95
112
  const [isReviewed, setIsReviewed] = useState(false)
113
+ const [isOrderHistory, setIsOrderHistory] = useState(false)
96
114
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, tax: null, type: '' })
115
+ const [refreshing] = useState(false);
97
116
  const { order, businessData } = props.order;
98
117
  const mapValidStatuses = [9, 19, 23]
118
+ const placeSpotTypes = [3, 4, 5]
99
119
 
100
120
  const walletName: any = {
101
121
  cash: {
@@ -364,6 +384,19 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
364
384
  )
365
385
  }
366
386
 
387
+ const handleTriggerReview = () => {
388
+ setIsOrderHistory(false);
389
+ (
390
+ parseInt(order?.status) === 1 ||
391
+ parseInt(order?.status) === 11 ||
392
+ parseInt(order?.status) === 15
393
+ ) && !order.review && !isReviewed && handleClickOrderReview(order)
394
+ }
395
+
396
+
397
+ const resfreshOrder = () => {
398
+ getOrder()
399
+ }
367
400
 
368
401
  useEffect(() => {
369
402
  const _businessId = 'businessId:' + businessData?.id
@@ -375,7 +408,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
375
408
  }
376
409
  if (!reorderState?.error && reorderState.loading === false && businessData?.id) {
377
410
  const products = carts?.[_businessId]?.products
378
- const available = products.every((product: any) => product.valid === true)
411
+ const available = products?.every((product: any) => product.valid === true)
379
412
 
380
413
  if (available && reorderState?.result?.uuid && (products?.length === order?.products.length)) {
381
414
  onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', { cartUuid: reorderState?.result.uuid })
@@ -417,19 +450,83 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
417
450
  ];
418
451
  const driverLocationString = typeof order?.driver?.location?.location === 'string' && order?.driver?.location?.location?.split(',').map((l: string) => l.replace(/[^-.0-9]/g, ''))
419
452
  const parsedLocations = locations.map(location => typeof location?.location === 'string' ? {
420
- ...location,
421
- lat: parseFloat(location?.location?.split(',')[0].replace(/[^-.0-9]/g, '')),
422
- lng: parseFloat(location?.location?.split(',')[1].replace(/[^-.0-9]/g, ''))
423
- } : location)
453
+ ...location,
454
+ lat: parseFloat(location?.location?.split(',')[0].replace(/[^-.0-9]/g, '')),
455
+ lng: parseFloat(location?.location?.split(',')[1].replace(/[^-.0-9]/g, ''))
456
+ } : location)
457
+
458
+ const getProductList = () => {
459
+ const professionalList = order?.products.reduce((prev: any, current: any) => {
460
+ const found = prev.find((item: any) => item.id === current?.calendar_event?.professional?.id)
461
+ if (found || !current?.calendar_event) {
462
+ return prev
463
+ }
464
+ return [...prev, current?.calendar_event?.professional]
465
+ }, [])
466
+
467
+ return (
468
+ <>
469
+ {professionalList?.length > 0 && professionalList.map((professional: any, i: number) => (
470
+ <View key={i} style={styles.professionalBlock}>
471
+ <View style={{ flexDirection: 'row', alignItems: 'center', width: '100%' }}>
472
+ {professional?.photo ? (
473
+ <ProfessionalPhoto
474
+ source={{
475
+ uri: professional?.photo
476
+ }}
477
+ imageStyle={{ borderRadius: 8 }}
478
+ />
479
+ ) : (
480
+ <OIcon
481
+ src={theme.images.general.user}
482
+ cover={false}
483
+ width={80}
484
+ height={80}
485
+ />
486
+ )}
487
+ <OText size={12} lineHeight={18} weight={'500'} numberOfLines={1}>{professional?.name} {professional?.lastname}</OText>
488
+ </View>
489
+ {order?.products.filter((product: any) => product?.calendar_event?.professional?.id === professional?.id).map((product: any, i: number) => (
490
+ <ProductItemAccordion
491
+ key={product?.id || i}
492
+ product={product}
493
+ isFromCheckout
494
+ />
495
+ ))}
496
+ </View>
497
+ ))}
498
+ {order?.products.filter((product: any) => !product?.calendar_event).map((product: any, i: number) => (
499
+ <ProductItemAccordion
500
+ key={product?.id || i}
501
+ product={product}
502
+ isFromCheckout
503
+ />
504
+ ))}
505
+ </>
506
+ )
507
+ }
508
+
509
+ const sortedProductList = useMemo(() => getProductList(), [order?.products])
424
510
 
425
511
  useEffect(() => {
426
512
  if (driverLocation) {
427
- locations[0] = driverLocation;
513
+ parsedLocations[0] = {
514
+ ...locations[0],
515
+ ...driverLocation
516
+ }
428
517
  }
429
518
  }, [driverLocation]);
430
519
 
431
520
  return (
432
- <OrderDetailsContainer keyboardShouldPersistTaps="handled">
521
+ <OrderDetailsContainer
522
+ keyboardShouldPersistTaps="handled"
523
+ refreshControl={
524
+ <RefreshControl
525
+ refreshing={refreshing}
526
+ onRefresh={() => resfreshOrder()}
527
+ />
528
+ }
529
+ >
433
530
  {(!order || Object.keys(order).length === 0) && (
434
531
  <Placeholder style={{ marginTop: 30 }}>
435
532
  <Header>
@@ -502,28 +599,45 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
502
599
  />
503
600
  <OrderInfo>
504
601
  <OrderData>
505
- {
506
- (
507
- parseInt(order?.status) === 1 ||
508
- parseInt(order?.status) === 11 ||
509
- parseInt(order?.status) === 15
510
- ) && !order.review && !isReviewed && (
511
- <TouchableOpacity
512
- activeOpacity={0.7}
513
- style={{ marginTop: 6 }}
514
- onPress={() => handleClickOrderReview(order)}
602
+ <View style={styles.linkWrapper}>
603
+ {
604
+ (
605
+ parseInt(order?.status) === 1 ||
606
+ parseInt(order?.status) === 11 ||
607
+ parseInt(order?.status) === 15
608
+ ) && !order.review && !isReviewed && (
609
+ <TouchableOpacity
610
+ activeOpacity={0.7}
611
+ style={{ marginTop: 6, marginRight: 10 }}
612
+ onPress={() => handleClickOrderReview(order)}
613
+ >
614
+ <OText
615
+ size={10}
616
+ lineHeight={15}
617
+ color={theme.colors.primary}
618
+ style={{ textDecorationLine: 'underline' }}
619
+ >
620
+ {t('REVIEW_YOUR_ORDER', 'Review your order')}
621
+ </OText>
622
+ </TouchableOpacity>
623
+ )}
624
+ <TouchableOpacity
625
+ activeOpacity={0.7}
626
+ style={{ marginTop: 6 }}
627
+ onPress={() => setIsOrderHistory(true)}
515
628
 
629
+ >
630
+ <OText
631
+ size={10}
632
+ lineHeight={15}
633
+ color={theme.colors.primary}
634
+ style={{ textDecorationLine: 'underline', textTransform: 'capitalize' }}
516
635
  >
517
- <OText
518
- size={10}
519
- lineHeight={15}
520
- color={theme.colors.textSecondary}
521
- style={{ textDecorationLine: 'underline' }}
522
- >
523
- {t('REVIEW_YOUR_ORDER', 'Review your order')}
524
- </OText>
525
- </TouchableOpacity>
526
- )}
636
+ {t('VIEW_DETAILS', 'View Details')}
637
+ </OText>
638
+ </TouchableOpacity>
639
+ </View>
640
+
527
641
  <StaturBar>
528
642
  <LinearGradient
529
643
  start={{ x: 0.0, y: 0.0 }}
@@ -630,6 +744,18 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
630
744
  </OText>
631
745
  </View>
632
746
  </OrderBusiness>
747
+
748
+ {placeSpotTypes.includes(order?.delivery_type) && (
749
+ <PlaceSpotWrapper>
750
+ <PlaceSpot
751
+ isInputMode
752
+ cart={order}
753
+ spotNumberDefault={order?.spot_number}
754
+ vehicleDefault={order?.vehicle}
755
+ />
756
+ </PlaceSpotWrapper>
757
+ )}
758
+
633
759
  <View
634
760
  style={{
635
761
  height: 8,
@@ -663,13 +789,15 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
663
789
  mBottom={2}>
664
790
  {order?.customer?.address}
665
791
  </OText>
666
- <OText
667
- size={12}
668
- lineHeight={18}
669
- color={theme.colors.textNormal}
670
- mBottom={2}>
671
- {order?.customer?.cellphone}
672
- </OText>
792
+ {(!!order?.customer?.cellphone) && (
793
+ <OText
794
+ size={12}
795
+ lineHeight={18}
796
+ color={theme.colors.textNormal}
797
+ mBottom={2}>
798
+ {`${!!order?.customer?.country_phone_code ? '+' + order?.customer?.country_phone_code : ''} ${order?.customer?.cellphone}`}
799
+ </OText>
800
+ )}
673
801
  </InfoBlock>
674
802
  </Customer>
675
803
  {order?.delivery_option !== undefined && order?.delivery_type === 1 && (
@@ -694,9 +822,9 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
694
822
  <>
695
823
  {order?.driver?.location && mapValidStatuses.includes(parseInt(order?.status)) && (
696
824
  <Map>
697
- <GoogleMap
825
+ <GoogleMap
698
826
  location={typeof order?.driver?.location?.location === 'string'
699
- ? {
827
+ ? {
700
828
  lat: parseFloat(driverLocationString[0]),
701
829
  lng: parseFloat(driverLocationString[1]),
702
830
  } : driverLocation ?? order?.driver?.location
@@ -808,14 +936,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
808
936
  </OrderAction>
809
937
  </HeaderInfo>
810
938
  <OrderProducts>
811
- {order?.products?.length &&
812
- order?.products.map((product: any, i: number) => (
813
- <ProductItemAccordion
814
- key={product?.id || i}
815
- product={product}
816
- isFromCheckout
817
- />
818
- ))}
939
+ {sortedProductList}
819
940
  </OrderProducts>
820
941
  <OrderBill>
821
942
  <View style={{ height: 1, backgroundColor: theme.colors.border, marginBottom: 17 }} />
@@ -1027,7 +1148,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1027
1148
  )}
1028
1149
  </View>
1029
1150
  <OText>
1030
- -{parsePrice(event.amount, {isTruncable: true})}
1151
+ -{parsePrice(event.amount, { isTruncable: true })}
1031
1152
  </OText>
1032
1153
  </View>
1033
1154
  ))}
@@ -1049,6 +1170,23 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1049
1170
  products={order?.products}
1050
1171
  />
1051
1172
  </OModal>
1173
+ <OModal
1174
+ open={isOrderHistory}
1175
+ onClose={() => setIsOrderHistory(false)}
1176
+ entireModal
1177
+ >
1178
+ <OrderHistory
1179
+ order={order}
1180
+ messages={messages}
1181
+ enableReview={(
1182
+ parseInt(order?.status) === 1 ||
1183
+ parseInt(order?.status) === 11 ||
1184
+ parseInt(order?.status) === 15
1185
+ ) && !order.review && !isReviewed}
1186
+ onClose={() => setIsOrderHistory(false)}
1187
+ handleTriggerReview={handleTriggerReview}
1188
+ />
1189
+ </OModal>
1052
1190
  </OrderDetailsContainer>
1053
1191
  );
1054
1192
  };
@@ -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,18 @@ 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
+ `
134
+
135
+ export const ProfessionalPhoto = styled.ImageBackground`
136
+ width: 100%;
137
+ position: relative;
138
+ max-height: 80px;
139
+ height: 80px;
140
+ width: 80px;
141
+ resize-mode: cover;
142
+ margin-right: 10px;
143
+ `;
@@ -0,0 +1,75 @@
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.filter((product : any) => !searchValue || product?.name?.toLowerCase()?.includes(searchValue?.toLowerCase()))?.sort((a: any, b:any) => moment(b?.last_ordered_date).valueOf() - moment(a?.last_ordered_date).valueOf())
30
+ return (
31
+ productsFilterd?.length > 0 ? (
32
+ <Container>
33
+ <OText
34
+ size={16}
35
+ lineHeight={24}
36
+ color={theme.colors.textNormal}
37
+ style={{
38
+ fontWeight: '600',
39
+ marginBottom: 6
40
+ }}
41
+ >
42
+ {t('ORDER_IT_AGAIN', 'Order it again')}
43
+ </OText>
44
+ <OText
45
+ size={12}
46
+ lineHeight={18}
47
+ color={theme.colors.disabled}
48
+ >
49
+ {t('ORDER_IT_AGAIN_DESC', 'Quickly add items from your past orders.')}
50
+ </OText>
51
+ <ScrollView
52
+ horizontal
53
+ showsVerticalScrollIndicator={false}
54
+ showsHorizontalScrollIndicator={false}
55
+ >
56
+ {productsFilterd.map((product: any, i: number) => (
57
+ <ProductWrapper key={'prod_' + product.id + `_${i}`} style={{ width: width - 120, }}>
58
+ <SingleProductCard
59
+ isSoldOut={product.inventoried && !product.quantity}
60
+ product={product}
61
+ businessId={businessId}
62
+ categoryState={categoryState}
63
+ onProductClick={() => onProductClick(product)}
64
+ productAddedToCartLength={currentCart?.products?.reduce((productsLength: number, Cproduct: any) => { return productsLength + (Cproduct?.id === product?.id ? Cproduct?.quantity : 0) }, 0)}
65
+ handleUpdateProducts={handleUpdateProducts}
66
+ navigation={navigation}
67
+ isPreviously
68
+ />
69
+ </ProductWrapper>
70
+ ))}
71
+ </ScrollView>
72
+ </Container>
73
+ ) : null
74
+ )
75
+ }
@@ -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)
@@ -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}