ordering-ui-react-native 0.16.12 → 0.16.13-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 +8 -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 +13 -10
  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 +44 -0
  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 +60 -77
  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 -484
  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 +25 -17
  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 +125 -40
  156. package/themes/original/src/components/OrderDetails/styles.tsx +5 -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 +40 -27
  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 +608 -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 +160 -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
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';
@@ -43,6 +44,8 @@ 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();
@@ -64,6 +68,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
64
68
  },
65
69
  statusBar: {
66
70
  height: 12,
71
+ borderRadius: 8
67
72
  },
68
73
  logo: {
69
74
  width: 75,
@@ -85,6 +90,11 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
85
90
  width: 30,
86
91
  marginTop: Platform.OS === 'ios' ? 0 : 30
87
92
  },
93
+ linkWrapper: {
94
+ display: 'flex',
95
+ alignItems: 'center',
96
+ flexDirection: 'row'
97
+ }
88
98
  });
89
99
 
90
100
  const [, t] = useLanguage();
@@ -93,9 +103,12 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
93
103
  const [{ carts }] = useOrder()
94
104
 
95
105
  const [isReviewed, setIsReviewed] = useState(false)
106
+ const [isOrderHistory, setIsOrderHistory] = useState(false)
96
107
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, tax: null, type: '' })
108
+ const [refreshing] = useState(false);
97
109
  const { order, businessData } = props.order;
98
110
  const mapValidStatuses = [9, 19, 23]
111
+ const placeSpotTypes = [3, 4, 5]
99
112
 
100
113
  const walletName: any = {
101
114
  cash: {
@@ -364,6 +377,19 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
364
377
  )
365
378
  }
366
379
 
380
+ const handleTriggerReview = () => {
381
+ setIsOrderHistory(false);
382
+ (
383
+ parseInt(order?.status) === 1 ||
384
+ parseInt(order?.status) === 11 ||
385
+ parseInt(order?.status) === 15
386
+ ) && !order.review && !isReviewed && handleClickOrderReview(order)
387
+ }
388
+
389
+
390
+ const resfreshOrder = () => {
391
+ getOrder()
392
+ }
367
393
 
368
394
  useEffect(() => {
369
395
  const _businessId = 'businessId:' + businessData?.id
@@ -375,7 +401,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
375
401
  }
376
402
  if (!reorderState?.error && reorderState.loading === false && businessData?.id) {
377
403
  const products = carts?.[_businessId]?.products
378
- const available = products.every((product: any) => product.valid === true)
404
+ const available = products?.every((product: any) => product.valid === true)
379
405
 
380
406
  if (available && reorderState?.result?.uuid && (products?.length === order?.products.length)) {
381
407
  onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', { cartUuid: reorderState?.result.uuid })
@@ -417,19 +443,30 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
417
443
  ];
418
444
  const driverLocationString = typeof order?.driver?.location?.location === 'string' && order?.driver?.location?.location?.split(',').map((l: string) => l.replace(/[^-.0-9]/g, ''))
419
445
  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)
446
+ ...location,
447
+ lat: parseFloat(location?.location?.split(',')[0].replace(/[^-.0-9]/g, '')),
448
+ lng: parseFloat(location?.location?.split(',')[1].replace(/[^-.0-9]/g, ''))
449
+ } : location)
424
450
 
425
451
  useEffect(() => {
426
452
  if (driverLocation) {
427
- locations[0] = driverLocation;
453
+ parsedLocations[0] = {
454
+ ...locations[0],
455
+ ...driverLocation
456
+ }
428
457
  }
429
458
  }, [driverLocation]);
430
459
 
431
460
  return (
432
- <OrderDetailsContainer keyboardShouldPersistTaps="handled">
461
+ <OrderDetailsContainer
462
+ keyboardShouldPersistTaps="handled"
463
+ refreshControl={
464
+ <RefreshControl
465
+ refreshing={refreshing}
466
+ onRefresh={() => resfreshOrder()}
467
+ />
468
+ }
469
+ >
433
470
  {(!order || Object.keys(order).length === 0) && (
434
471
  <Placeholder style={{ marginTop: 30 }}>
435
472
  <Header>
@@ -502,28 +539,45 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
502
539
  />
503
540
  <OrderInfo>
504
541
  <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)}
542
+ <View style={styles.linkWrapper}>
543
+ {
544
+ (
545
+ parseInt(order?.status) === 1 ||
546
+ parseInt(order?.status) === 11 ||
547
+ parseInt(order?.status) === 15
548
+ ) && !order.review && !isReviewed && (
549
+ <TouchableOpacity
550
+ activeOpacity={0.7}
551
+ style={{ marginTop: 6, marginRight: 10 }}
552
+ onPress={() => handleClickOrderReview(order)}
553
+ >
554
+ <OText
555
+ size={10}
556
+ lineHeight={15}
557
+ color={theme.colors.primary}
558
+ style={{ textDecorationLine: 'underline' }}
559
+ >
560
+ {t('REVIEW_YOUR_ORDER', 'Review your order')}
561
+ </OText>
562
+ </TouchableOpacity>
563
+ )}
564
+ <TouchableOpacity
565
+ activeOpacity={0.7}
566
+ style={{ marginTop: 6 }}
567
+ onPress={() => setIsOrderHistory(true)}
515
568
 
569
+ >
570
+ <OText
571
+ size={10}
572
+ lineHeight={15}
573
+ color={theme.colors.primary}
574
+ style={{ textDecorationLine: 'underline', textTransform: 'capitalize' }}
516
575
  >
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
- )}
576
+ {t('VIEW_DETAILS', 'View Details')}
577
+ </OText>
578
+ </TouchableOpacity>
579
+ </View>
580
+
527
581
  <StaturBar>
528
582
  <LinearGradient
529
583
  start={{ x: 0.0, y: 0.0 }}
@@ -630,6 +684,18 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
630
684
  </OText>
631
685
  </View>
632
686
  </OrderBusiness>
687
+
688
+ {placeSpotTypes.includes(order?.delivery_type) && (
689
+ <PlaceSpotWrapper>
690
+ <PlaceSpot
691
+ isInputMode
692
+ cart={order}
693
+ spotNumberDefault={order?.spot_number}
694
+ vehicleDefault={order?.vehicle}
695
+ />
696
+ </PlaceSpotWrapper>
697
+ )}
698
+
633
699
  <View
634
700
  style={{
635
701
  height: 8,
@@ -663,13 +729,15 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
663
729
  mBottom={2}>
664
730
  {order?.customer?.address}
665
731
  </OText>
666
- <OText
667
- size={12}
668
- lineHeight={18}
669
- color={theme.colors.textNormal}
670
- mBottom={2}>
671
- {order?.customer?.cellphone}
672
- </OText>
732
+ {(!!order?.customer?.cellphone) && (
733
+ <OText
734
+ size={12}
735
+ lineHeight={18}
736
+ color={theme.colors.textNormal}
737
+ mBottom={2}>
738
+ {`${!!order?.customer?.country_phone_code ? '+' + order?.customer?.country_phone_code : ''} ${order?.customer?.cellphone}`}
739
+ </OText>
740
+ )}
673
741
  </InfoBlock>
674
742
  </Customer>
675
743
  {order?.delivery_option !== undefined && order?.delivery_type === 1 && (
@@ -694,9 +762,9 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
694
762
  <>
695
763
  {order?.driver?.location && mapValidStatuses.includes(parseInt(order?.status)) && (
696
764
  <Map>
697
- <GoogleMap
765
+ <GoogleMap
698
766
  location={typeof order?.driver?.location?.location === 'string'
699
- ? {
767
+ ? {
700
768
  lat: parseFloat(driverLocationString[0]),
701
769
  lng: parseFloat(driverLocationString[1]),
702
770
  } : driverLocation ?? order?.driver?.location
@@ -1027,7 +1095,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1027
1095
  )}
1028
1096
  </View>
1029
1097
  <OText>
1030
- -{parsePrice(event.amount, {isTruncable: true})}
1098
+ -{parsePrice(event.amount, { isTruncable: true })}
1031
1099
  </OText>
1032
1100
  </View>
1033
1101
  ))}
@@ -1049,6 +1117,23 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1049
1117
  products={order?.products}
1050
1118
  />
1051
1119
  </OModal>
1120
+ <OModal
1121
+ open={isOrderHistory}
1122
+ onClose={() => setIsOrderHistory(false)}
1123
+ entireModal
1124
+ >
1125
+ <OrderHistory
1126
+ order={order}
1127
+ messages={messages}
1128
+ enableReview={(
1129
+ parseInt(order?.status) === 1 ||
1130
+ parseInt(order?.status) === 11 ||
1131
+ parseInt(order?.status) === 15
1132
+ ) && !order.review && !isReviewed}
1133
+ onClose={() => setIsOrderHistory(false)}
1134
+ handleTriggerReview={handleTriggerReview}
1135
+ />
1136
+ </OModal>
1052
1137
  </OrderDetailsContainer>
1053
1138
  );
1054
1139
  };
@@ -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,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}
@@ -1,4 +1,4 @@
1
- import React from 'react'
1
+ import React, { useEffect } from 'react'
2
2
  import {
3
3
  OrderTypeControl,
4
4
  useLanguage,
@@ -6,28 +6,32 @@ import {
6
6
  } from 'ordering-components/native'
7
7
  import { useTheme } from 'styled-components/native';
8
8
  import { Platform, View } from 'react-native'
9
- import { BgImage, ListWrapper, MaskCont, OrderTypeWrapper, Wrapper } from './styles'
9
+ import { BgImage, ListWrapper, MaskCont, OrderTypeWrapper, OTab, OTabs, TabBtn, Wrapper } from './styles'
10
10
  import { OrderTypeSelectParams } from '../../types'
11
11
  import { OIcon, OText } from '../shared'
12
12
  import NavBar from '../NavBar';
13
13
  import { ORDER_TYPES } from '../../config/constants';
14
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
14
15
 
15
16
  const OrderTypeSelectorUI = (props: OrderTypeSelectParams) => {
16
17
  const {
17
18
  navigation,
18
19
  handleChangeOrderType,
20
+ handleChangeType,
19
21
  typeSelected,
20
22
  defaultValue,
21
23
  configTypes,
22
24
  orderTypes,
23
- setOrderTypeValue
25
+ setOrderTypeValue,
26
+ isChewLayout,
27
+ chewOrderTypes
24
28
  } = props
25
29
 
26
30
  const theme = useTheme();
27
31
  const [orderState] = useOrder();
28
32
  const [, t] = useLanguage();
29
33
  const _orderTypes = orderTypes.filter((type: any) => configTypes?.includes(type.value));
30
-
34
+
31
35
  const items = _orderTypes.map((type) => {
32
36
  return {
33
37
  value: type.value,
@@ -42,43 +46,87 @@ const OrderTypeSelectorUI = (props: OrderTypeSelectParams) => {
42
46
  if (!orderState.loading) {
43
47
  setOrderTypeValue && setOrderTypeValue(orderType)
44
48
  handleChangeOrderType(orderType)
45
- goToBack();
49
+ if (!isChewLayout) {
50
+ goToBack();
51
+ }
46
52
  }
47
53
  }
48
54
 
55
+ useEffect(() => {
56
+ handleChangeType && handleChangeType(typeSelected)
57
+ }, [typeSelected])
58
+
49
59
  return (
50
60
  <Wrapper>
51
- <NavBar
52
- onActionLeft={() => goToBack()}
53
- btnStyle={{ paddingLeft: 0 }}
54
- paddingTop={0}
55
- style={{ paddingBottom: 0 }}
56
- title={t('HOW_WILL_YOU_DELIVERY_TYPE', 'How will your order type?')}
57
- titleAlign={'center'}
58
- titleStyle={{ fontSize: 14 }}
59
- />
60
- {
61
- items.length > 0 && (
62
- <ListWrapper>
63
- {
64
- items && items.map((item: any, idx: number) =>
65
- <OrderTypeWrapper activeOpacity={0.8} key={idx} disabled={orderState.loading} onPress={() => handleChangeOrderTypeCallback(item.value)}>
66
- <BgImage source={theme.images.orderTypes[`type${item?.value || 1}`]} resizeMode={'cover'} style={{opacity: item?.value == typeSelected || typeSelected === undefined ? 1 : 0.4}}>
67
- <MaskCont>
68
- <OText size={12} lineHeight={18} color={theme.colors.white} weight={Platform.OS === 'android' ? 'bold' : '600'}>{item?.label}</OText>
69
- <OText size={10} lineHeight={15} color={theme.colors.white}>{item?.description}</OText>
70
- <View style={{flexDirection: 'row', alignItems: 'center'}}>
71
- <OText size={10} lineHeight={15} color={theme.colors.white}>{t('START_MY_ORDER', 'Start my order')}</OText>
72
- <OIcon src={theme.images.general.arrow_left} width={16} color={theme.colors.white} style={{transform: [{ rotate: '180deg' }], marginStart: 4}} />
73
- </View>
74
- </MaskCont>
75
- </BgImage>
76
- </OrderTypeWrapper>
77
- )
78
- }
79
- </ListWrapper>
80
- )
81
- }
61
+ {isChewLayout ? (
62
+ <View>
63
+ <OTabs
64
+ horizontal
65
+ showsHorizontalScrollIndicator={false}
66
+ >
67
+ {chewOrderTypes?.map((type: any) => (
68
+ <TabBtn
69
+ key={type.value}
70
+ onPress={() => handleChangeOrderTypeCallback(type.value)}
71
+ >
72
+ <OTab
73
+ style={{
74
+ borderBottomColor:
75
+ type.value === typeSelected
76
+ ? theme.colors.textNormal
77
+ : theme.colors.border,
78
+ }}>
79
+ <OText
80
+ size={14}
81
+ color={
82
+ type.value === typeSelected
83
+ ? theme.colors.textNormal
84
+ : theme.colors.disabled
85
+ }
86
+ weight={type.value === typeSelected ? 'bold' : 'normal'}>
87
+ {type.name}
88
+ </OText>
89
+ </OTab>
90
+ </TabBtn>
91
+ ))}
92
+ </OTabs>
93
+ </View>
94
+ ) : (
95
+ <>
96
+ <NavBar
97
+ onActionLeft={() => goToBack()}
98
+ btnStyle={{ paddingLeft: 0 }}
99
+ paddingTop={0}
100
+ style={{ paddingBottom: 0 }}
101
+ title={t('HOW_WILL_YOU_DELIVERY_TYPE', 'How will your order type?')}
102
+ titleAlign={'center'}
103
+ titleStyle={{ fontSize: 14 }}
104
+ />
105
+ {
106
+ items.length > 0 && (
107
+ <ListWrapper>
108
+ {
109
+ items && items.map((item: any, idx: number) =>
110
+ <OrderTypeWrapper activeOpacity={0.8} key={idx} disabled={orderState.loading} onPress={() => handleChangeOrderTypeCallback(item.value)}>
111
+ <BgImage source={theme.images.orderTypes[`type${item?.value || 1}`]} resizeMode={'cover'} style={{ opacity: item?.value == typeSelected || typeSelected === undefined ? 1 : 0.4 }}>
112
+ <MaskCont>
113
+ <OText size={12} lineHeight={18} color={theme.colors.white} weight={Platform.OS === 'android' ? 'bold' : '600'}>{item?.label}</OText>
114
+ <OText size={10} lineHeight={15} color={theme.colors.white}>{item?.description}</OText>
115
+ <View style={{ flexDirection: 'row', alignItems: 'center' }}>
116
+ <OText size={10} lineHeight={15} color={theme.colors.white}>{t('START_MY_ORDER', 'Start my order')}</OText>
117
+ <AntDesignIcon name='arrowleft' size={26} color={theme.colors.white} style={{ transform: [{ rotate: '180deg' }], marginStart: 4 }} />
118
+ </View>
119
+ </MaskCont>
120
+ </BgImage>
121
+ </OrderTypeWrapper>
122
+ )
123
+ }
124
+ </ListWrapper>
125
+ )
126
+ }
127
+ </>
128
+ )}
129
+
82
130
  </Wrapper>
83
131
  )
84
132
  }
@@ -24,4 +24,22 @@ export const MaskCont = styled.View`
24
24
  padding: 16px 39px;
25
25
  background-color: #0000004D;
26
26
  height: 100%;
27
- `;
27
+ `;
28
+
29
+ export const OTabs = styled.View`
30
+ flex-direction: row;
31
+ width: 100%;
32
+ margin-bottom: -1px;
33
+ justify-content: space-between;
34
+ `;
35
+
36
+ export const OTab = styled.View`
37
+ padding-bottom: 10px;
38
+ border-bottom-width: 1px;
39
+ padding-horizontal: 10px;
40
+ `;
41
+
42
+ export const TabBtn = styled.TouchableOpacity`
43
+ min-height: 30px;
44
+ height: 30px;
45
+ `;