ordering-ui-react-native 0.16.23 → 0.16.24-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 (198) 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 +33 -4
  9. package/src/components/BusinessInformation/styles.tsx +2 -2
  10. package/src/components/BusinessProductsList/index.tsx +10 -10
  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 +2 -20
  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/pages/BusinessesListing.tsx +7 -6
  32. package/src/pages/OrderDetails.tsx +1 -1
  33. package/src/pages/ReviewDriver.tsx +2 -2
  34. package/src/pages/ReviewOrder.tsx +2 -2
  35. package/src/theme.json +0 -1
  36. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  37. package/src/types/index.tsx +13 -9
  38. package/src/utils/index.tsx +0 -1
  39. package/themes/business/index.tsx +4 -0
  40. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  41. package/themes/business/src/components/Chat/index.tsx +42 -34
  42. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  43. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  44. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  45. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  46. package/themes/business/src/components/MapView/index.tsx +12 -1
  47. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  48. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  49. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +25 -19
  50. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  51. package/themes/business/src/components/OrdersOption/index.tsx +65 -21
  52. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  53. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  54. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  55. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  56. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  57. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  58. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  59. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  60. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  61. package/themes/business/src/components/PreviousOrders/index.tsx +21 -23
  62. package/themes/business/src/components/ProductItemAccordion/index.tsx +5 -4
  63. package/themes/business/src/components/ReviewCustomer/index.tsx +1 -1
  64. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  65. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  66. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  67. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  68. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  69. package/themes/business/src/components/shared/OModal.tsx +40 -37
  70. package/themes/business/src/types/index.tsx +15 -9
  71. package/themes/business/src/utils/index.tsx +10 -0
  72. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  73. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  74. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  75. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  76. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  77. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  78. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  79. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  80. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  81. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  82. package/themes/kiosk/src/types/index.d.ts +2 -0
  83. package/themes/original/index.tsx +12 -0
  84. package/themes/original/src/components/AddressForm/index.tsx +139 -135
  85. package/themes/original/src/components/AddressList/index.tsx +1 -1
  86. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  87. package/themes/original/src/components/BusinessBasicInformation/index.tsx +311 -161
  88. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  89. package/themes/original/src/components/BusinessController/index.tsx +175 -110
  90. package/themes/original/src/components/BusinessItemAccordion/index.tsx +8 -6
  91. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  92. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  93. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  94. package/themes/original/src/components/BusinessListingSearch/index.tsx +101 -125
  95. package/themes/original/src/components/BusinessListingSearch/styles.tsx +18 -13
  96. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  97. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  98. package/themes/original/src/components/BusinessProductsList/index.tsx +49 -52
  99. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  100. package/themes/original/src/components/BusinessProductsListing/index.tsx +287 -175
  101. package/themes/original/src/components/BusinessProductsListing/styles.tsx +22 -8
  102. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  103. package/themes/original/src/components/BusinessTypeFilter/index.tsx +109 -40
  104. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  105. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +561 -0
  106. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -10
  107. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +676 -0
  108. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  109. package/themes/original/src/components/BusinessesListing/index.tsx +105 -519
  110. package/themes/original/src/components/Cart/index.tsx +42 -10
  111. package/themes/original/src/components/Cart/styles.tsx +4 -0
  112. package/themes/original/src/components/CartContent/index.tsx +22 -16
  113. package/themes/original/src/components/Checkout/index.tsx +105 -65
  114. package/themes/original/src/components/Checkout/styles.tsx +0 -1
  115. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  116. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  117. package/themes/original/src/components/Favorite/index.tsx +1 -0
  118. package/themes/original/src/components/FavoriteList/index.tsx +32 -2
  119. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  120. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  121. package/themes/original/src/components/GoogleMap/index.tsx +20 -12
  122. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +8 -3
  123. package/themes/original/src/components/HelpGuide/index.tsx +8 -3
  124. package/themes/original/src/components/HelpOrder/index.tsx +8 -3
  125. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  126. package/themes/original/src/components/LoginForm/Otp/index.tsx +3 -2
  127. package/themes/original/src/components/LoginForm/index.tsx +82 -44
  128. package/themes/original/src/components/Messages/index.tsx +17 -17
  129. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  130. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  131. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -92
  132. package/themes/original/src/components/MultiCheckout/index.tsx +6 -0
  133. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -16
  134. package/themes/original/src/components/MyOrders/index.tsx +70 -6
  135. package/themes/original/src/components/NavBar/index.tsx +15 -9
  136. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  137. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  138. package/themes/original/src/components/Notifications/index.tsx +148 -0
  139. package/themes/original/src/components/Notifications/styles.tsx +17 -0
  140. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  141. package/themes/original/src/components/OrderDetails/index.tsx +190 -35
  142. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  143. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  144. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  145. package/themes/original/src/components/OrderProgress/index.tsx +8 -2
  146. package/themes/original/src/components/OrderSummary/index.tsx +1 -34
  147. package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
  148. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  149. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +100 -106
  150. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +17 -12
  151. package/themes/original/src/components/OrdersOption/index.tsx +71 -55
  152. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  153. package/themes/original/src/components/PaymentOptions/index.tsx +42 -24
  154. package/themes/original/src/components/PhoneInputNumber/index.tsx +4 -10
  155. package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
  156. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  157. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  158. package/themes/original/src/components/ProductForm/index.tsx +710 -653
  159. package/themes/original/src/components/ProductForm/styles.tsx +9 -7
  160. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  161. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  162. package/themes/original/src/components/ProfessionalFilter/index.tsx +129 -0
  163. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  164. package/themes/original/src/components/ProfessionalProfile/index.tsx +309 -0
  165. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  166. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  167. package/themes/original/src/components/ReviewOrder/index.tsx +18 -3
  168. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  169. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  170. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  171. package/themes/original/src/components/SearchBar/index.tsx +5 -3
  172. package/themes/original/src/components/ServiceForm/index.tsx +631 -0
  173. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  174. package/themes/original/src/components/SignupForm/index.tsx +350 -206
  175. package/themes/original/src/components/SingleOrderCard/index.tsx +214 -179
  176. package/themes/original/src/components/SingleProductCard/index.tsx +198 -104
  177. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -2
  178. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  179. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  180. package/themes/original/src/components/StripeElementsForm/index.tsx +15 -7
  181. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
  182. package/themes/original/src/components/UserDetails/index.tsx +31 -17
  183. package/themes/original/src/components/UserFormDetails/index.tsx +74 -81
  184. package/themes/original/src/components/UserProfile/index.tsx +54 -29
  185. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  186. package/themes/original/src/components/UserProfileForm/index.tsx +15 -10
  187. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  188. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  189. package/themes/original/src/components/Wallets/index.tsx +174 -162
  190. package/themes/original/src/components/Wallets/styles.tsx +10 -8
  191. package/themes/original/src/components/shared/OBottomPopup.tsx +47 -14
  192. package/themes/original/src/components/shared/OButton.tsx +10 -3
  193. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  194. package/themes/original/src/components/shared/OInput.tsx +3 -2
  195. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  196. package/themes/original/src/types/index.tsx +122 -30
  197. package/themes/original/src/utils/index.tsx +77 -0
  198. 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 {
@@ -10,6 +10,7 @@ import {
10
10
  useConfig
11
11
  } from 'ordering-components/native';
12
12
  import { useTheme } from 'styled-components/native';
13
+ import { showLocation } from 'react-native-map-link';
13
14
  import {
14
15
  OrderDetailsContainer,
15
16
  Header,
@@ -30,7 +31,9 @@ import {
30
31
  OrderDriver,
31
32
  Map,
32
33
  Divider,
33
- OrderAction
34
+ OrderAction,
35
+ PlaceSpotWrapper,
36
+ ProfessionalPhoto
34
37
  } from './styles';
35
38
  import { OButton, OIcon, OModal, OText } from '../shared';
36
39
  import { ProductItemAccordion } from '../ProductItemAccordion';
@@ -43,6 +46,8 @@ import AntIcon from 'react-native-vector-icons/AntDesign'
43
46
  import { TaxInformation } from '../TaxInformation';
44
47
  import { Placeholder, PlaceholderLine } from 'rn-placeholder';
45
48
  import NavBar from '../NavBar'
49
+ import { OrderHistory } from './OrderHistory';
50
+ import { PlaceSpot } from '../PlaceSpot'
46
51
  export const OrderDetailsUI = (props: OrderDetailsParams) => {
47
52
  const {
48
53
  navigation,
@@ -53,7 +58,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
53
58
  driverLocation,
54
59
  onNavigationRedirect,
55
60
  reorderState,
56
- handleReorder
61
+ handleReorder,
62
+ getOrder
57
63
  } = props;
58
64
 
59
65
  const theme = useTheme();
@@ -64,6 +70,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
64
70
  },
65
71
  statusBar: {
66
72
  height: 12,
73
+ borderRadius: 8
67
74
  },
68
75
  logo: {
69
76
  width: 75,
@@ -85,6 +92,17 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
85
92
  width: 30,
86
93
  marginTop: Platform.OS === 'ios' ? 0 : 30
87
94
  },
95
+ linkWrapper: {
96
+ display: 'flex',
97
+ alignItems: 'center',
98
+ flexDirection: 'row'
99
+ },
100
+ professionalBlock: {
101
+ borderBottomColor: theme.colors.border,
102
+ borderBottomWidth: 1,
103
+ marginVertical: 10,
104
+ paddingVertical: 5
105
+ }
88
106
  });
89
107
 
90
108
  const [, t] = useLanguage();
@@ -93,9 +111,13 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
93
111
  const [{ carts }] = useOrder()
94
112
 
95
113
  const [isReviewed, setIsReviewed] = useState(false)
114
+ const [isOrderHistory, setIsOrderHistory] = useState(false)
96
115
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, tax: null, type: '' })
116
+ const [refreshing] = useState(false);
97
117
  const { order, businessData } = props.order;
98
118
  const mapValidStatuses = [9, 19, 23]
119
+ const placeSpotTypes = [3, 4, 5]
120
+ const directionTypes = [2, 3, 4, 5]
99
121
 
100
122
  const walletName: any = {
101
123
  cash: {
@@ -364,6 +386,19 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
364
386
  )
365
387
  }
366
388
 
389
+ const handleTriggerReview = () => {
390
+ setIsOrderHistory(false);
391
+ (
392
+ parseInt(order?.status) === 1 ||
393
+ parseInt(order?.status) === 11 ||
394
+ parseInt(order?.status) === 15
395
+ ) && !order.review && !isReviewed && handleClickOrderReview(order)
396
+ }
397
+
398
+
399
+ const resfreshOrder = () => {
400
+ getOrder()
401
+ }
367
402
 
368
403
  useEffect(() => {
369
404
  const _businessId = 'businessId:' + businessData?.id
@@ -375,7 +410,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
375
410
  }
376
411
  if (!reorderState?.error && reorderState.loading === false && businessData?.id) {
377
412
  const products = carts?.[_businessId]?.products
378
- const available = products.every((product: any) => product.valid === true)
413
+ const available = products?.every((product: any) => product.valid === true)
379
414
 
380
415
  if (available && reorderState?.result?.uuid && (products?.length === order?.products.length)) {
381
416
  onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', { cartUuid: reorderState?.result.uuid })
@@ -422,6 +457,59 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
422
457
  lng: parseFloat(location?.location?.split(',')[1].replace(/[^-.0-9]/g, ''))
423
458
  } : location)
424
459
 
460
+ const getProductList = () => {
461
+ const professionalList = order?.products.reduce((prev: any, current: any) => {
462
+ const found = prev.find((item: any) => item.id === current?.calendar_event?.professional?.id)
463
+ if (found || !current?.calendar_event) {
464
+ return prev
465
+ }
466
+ return [...prev, current?.calendar_event?.professional]
467
+ }, [])
468
+
469
+ return (
470
+ <>
471
+ {professionalList?.length > 0 && professionalList.map((professional: any, i: number) => (
472
+ <View key={i} style={styles.professionalBlock}>
473
+ <View style={{ flexDirection: 'row', alignItems: 'center', width: '100%' }}>
474
+ {professional?.photo ? (
475
+ <ProfessionalPhoto
476
+ source={{
477
+ uri: professional?.photo
478
+ }}
479
+ imageStyle={{ borderRadius: 8 }}
480
+ />
481
+ ) : (
482
+ <OIcon
483
+ src={theme.images.general.user}
484
+ cover={false}
485
+ width={80}
486
+ height={80}
487
+ />
488
+ )}
489
+ <OText size={12} lineHeight={18} weight={'500'} numberOfLines={1}>{professional?.name} {professional?.lastname}</OText>
490
+ </View>
491
+ {order?.products.filter((product: any) => product?.calendar_event?.professional?.id === professional?.id).map((product: any, i: number) => (
492
+ <ProductItemAccordion
493
+ key={product?.id || i}
494
+ product={product}
495
+ isFromCheckout
496
+ />
497
+ ))}
498
+ </View>
499
+ ))}
500
+ {order?.products.filter((product: any) => !product?.calendar_event).map((product: any, i: number) => (
501
+ <ProductItemAccordion
502
+ key={product?.id || i}
503
+ product={product}
504
+ isFromCheckout
505
+ />
506
+ ))}
507
+ </>
508
+ )
509
+ }
510
+
511
+ const sortedProductList = useMemo(() => getProductList(), [order?.products])
512
+
425
513
  useEffect(() => {
426
514
  if (driverLocation) {
427
515
  parsedLocations[0] = {
@@ -432,7 +520,15 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
432
520
  }, [driverLocation]);
433
521
 
434
522
  return (
435
- <OrderDetailsContainer keyboardShouldPersistTaps="handled">
523
+ <OrderDetailsContainer
524
+ keyboardShouldPersistTaps="handled"
525
+ refreshControl={
526
+ <RefreshControl
527
+ refreshing={refreshing}
528
+ onRefresh={() => resfreshOrder()}
529
+ />
530
+ }
531
+ >
436
532
  {(!order || Object.keys(order).length === 0) && (
437
533
  <Placeholder style={{ marginTop: 30 }}>
438
534
  <Header>
@@ -505,28 +601,45 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
505
601
  />
506
602
  <OrderInfo>
507
603
  <OrderData>
508
- {
509
- (
510
- parseInt(order?.status) === 1 ||
511
- parseInt(order?.status) === 11 ||
512
- parseInt(order?.status) === 15
513
- ) && !order.review && !isReviewed && (
514
- <TouchableOpacity
515
- activeOpacity={0.7}
516
- style={{ marginTop: 6 }}
517
- onPress={() => handleClickOrderReview(order)}
604
+ <View style={styles.linkWrapper}>
605
+ {
606
+ (
607
+ parseInt(order?.status) === 1 ||
608
+ parseInt(order?.status) === 11 ||
609
+ parseInt(order?.status) === 15
610
+ ) && !order.review && !isReviewed && (
611
+ <TouchableOpacity
612
+ activeOpacity={0.7}
613
+ style={{ marginTop: 6, marginRight: 10 }}
614
+ onPress={() => handleClickOrderReview(order)}
615
+ >
616
+ <OText
617
+ size={10}
618
+ lineHeight={15}
619
+ color={theme.colors.primary}
620
+ style={{ textDecorationLine: 'underline' }}
621
+ >
622
+ {t('REVIEW_YOUR_ORDER', 'Review your order')}
623
+ </OText>
624
+ </TouchableOpacity>
625
+ )}
626
+ <TouchableOpacity
627
+ activeOpacity={0.7}
628
+ style={{ marginTop: 6 }}
629
+ onPress={() => setIsOrderHistory(true)}
518
630
 
631
+ >
632
+ <OText
633
+ size={10}
634
+ lineHeight={15}
635
+ color={theme.colors.primary}
636
+ style={{ textDecorationLine: 'underline', textTransform: 'capitalize' }}
519
637
  >
520
- <OText
521
- size={10}
522
- lineHeight={15}
523
- color={theme.colors.textSecondary}
524
- style={{ textDecorationLine: 'underline' }}
525
- >
526
- {t('REVIEW_YOUR_ORDER', 'Review your order')}
527
- </OText>
528
- </TouchableOpacity>
529
- )}
638
+ {t('VIEW_DETAILS', 'View Details')}
639
+ </OText>
640
+ </TouchableOpacity>
641
+ </View>
642
+
530
643
  <StaturBar>
531
644
  <LinearGradient
532
645
  start={{ x: 0.0, y: 0.0 }}
@@ -632,7 +745,39 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
632
745
  {order?.business?.address}
633
746
  </OText>
634
747
  </View>
748
+ {directionTypes.includes(order?.delivery_type) && (
749
+ <OButton
750
+ text={t('GET_DIRECTIONS', 'Get Directions')}
751
+ imgRightSrc=''
752
+ textStyle={{ color: theme.colors.white }}
753
+ style={{
754
+ alignSelf: 'center',
755
+ borderRadius: 10,
756
+ marginTop: 30
757
+ }}
758
+ onClick={() => showLocation({
759
+ latitude: order?.business?.location?.lat,
760
+ longitude: order?.business?.location?.lng,
761
+ naverCallerName: 'com.reactnativeappstemplate5',
762
+ dialogTitle: t('GET_DIRECTIONS', 'Get Directions'),
763
+ dialogMessage: t('WHAT_APP_WOULD_YOU_USE', 'What app would you like to use?'),
764
+ cancelText: t('CANCEL', 'Cancel'),
765
+ })}
766
+ />
767
+ )}
635
768
  </OrderBusiness>
769
+
770
+ {placeSpotTypes.includes(order?.delivery_type) && (
771
+ <PlaceSpotWrapper>
772
+ <PlaceSpot
773
+ isInputMode
774
+ cart={order}
775
+ spotNumberDefault={order?.spot_number}
776
+ vehicleDefault={order?.vehicle}
777
+ />
778
+ </PlaceSpotWrapper>
779
+ )}
780
+
636
781
  <View
637
782
  style={{
638
783
  height: 8,
@@ -699,7 +844,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
699
844
  <>
700
845
  {order?.driver?.location && mapValidStatuses.includes(parseInt(order?.status)) && (
701
846
  <Map>
702
- <GoogleMap
847
+ <GoogleMap
703
848
  location={typeof order?.driver?.location?.location === 'string'
704
849
  ? {
705
850
  lat: parseFloat(driverLocationString[0]),
@@ -813,14 +958,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
813
958
  </OrderAction>
814
959
  </HeaderInfo>
815
960
  <OrderProducts>
816
- {order?.products?.length &&
817
- order?.products.map((product: any, i: number) => (
818
- <ProductItemAccordion
819
- key={product?.id || i}
820
- product={product}
821
- isFromCheckout
822
- />
823
- ))}
961
+ {sortedProductList}
824
962
  </OrderProducts>
825
963
  <OrderBill>
826
964
  <View style={{ height: 1, backgroundColor: theme.colors.border, marginBottom: 17 }} />
@@ -1054,6 +1192,23 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1054
1192
  products={order?.products}
1055
1193
  />
1056
1194
  </OModal>
1195
+ <OModal
1196
+ open={isOrderHistory}
1197
+ onClose={() => setIsOrderHistory(false)}
1198
+ entireModal
1199
+ >
1200
+ <OrderHistory
1201
+ order={order}
1202
+ messages={messages}
1203
+ enableReview={(
1204
+ parseInt(order?.status) === 1 ||
1205
+ parseInt(order?.status) === 11 ||
1206
+ parseInt(order?.status) === 15
1207
+ ) && !order.review && !isReviewed}
1208
+ onClose={() => setIsOrderHistory(false)}
1209
+ handleTriggerReview={handleTriggerReview}
1210
+ />
1211
+ </OModal>
1057
1212
  </OrderDetailsContainer>
1058
1213
  );
1059
1214
  };
@@ -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}