ordering-ui-react-native 0.17.5 → 0.17.6-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 +5 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +11 -4
  4. package/src/components/BusinessInformation/styles.tsx +2 -2
  5. package/src/components/BusinessesListing/index.tsx +1 -1
  6. package/src/components/OrderCreating/index.tsx +1 -21
  7. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  8. package/src/components/SingleProductReview/index.tsx +7 -4
  9. package/src/components/StripeMethodForm/index.tsx +6 -14
  10. package/src/components/VerifyPhone/styles.tsx +1 -2
  11. package/src/components/shared/OToast.tsx +4 -4
  12. package/src/utils/index.tsx +7 -1
  13. package/themes/business/index.tsx +2 -0
  14. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  15. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  16. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  17. package/themes/business/src/components/Chat/index.tsx +118 -107
  18. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  19. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  20. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  21. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  22. package/themes/business/src/components/LoginForm/index.tsx +238 -80
  23. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  24. package/themes/business/src/components/MapView/index.tsx +18 -7
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +43 -50
  26. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  27. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +96 -50
  28. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  29. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  30. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  31. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  32. package/themes/business/src/components/OrderSummary/index.tsx +113 -121
  33. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  35. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  36. package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
  37. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  38. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  39. package/themes/business/src/components/ReviewCustomer/index.tsx +41 -24
  40. package/themes/business/src/components/StoresList/index.tsx +2 -2
  41. package/themes/business/src/components/shared/OLink.tsx +33 -13
  42. package/themes/business/src/components/shared/OModal.tsx +16 -9
  43. package/themes/business/src/components/shared/OText.tsx +8 -2
  44. package/themes/business/src/types/index.tsx +33 -2
  45. package/themes/business/src/utils/index.tsx +51 -0
  46. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  47. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  48. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  49. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  50. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  51. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  52. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  53. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  54. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  55. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  56. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  57. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  58. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +3 -2
  59. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  60. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  61. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  62. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  63. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  64. package/themes/kiosk/src/types/index.d.ts +13 -0
  65. package/themes/kiosk/src/utils/index.tsx +15 -0
  66. package/themes/original/index.tsx +8 -0
  67. package/themes/original/src/components/AddressDetails/index.tsx +29 -11
  68. package/themes/original/src/components/AddressForm/index.tsx +41 -16
  69. package/themes/original/src/components/AddressList/index.tsx +26 -21
  70. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  71. package/themes/original/src/components/AnalyticsSegment/index.tsx +189 -9
  72. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  73. package/themes/original/src/components/BusinessBasicInformation/index.tsx +125 -82
  74. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -4
  75. package/themes/original/src/components/BusinessController/index.tsx +145 -68
  76. package/themes/original/src/components/BusinessController/styles.tsx +22 -9
  77. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  78. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  79. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  80. package/themes/original/src/components/BusinessItemAccordion/index.tsx +24 -23
  81. package/themes/original/src/components/BusinessListingSearch/index.tsx +52 -24
  82. package/themes/original/src/components/BusinessPreorder/index.tsx +97 -16
  83. package/themes/original/src/components/BusinessProductsList/index.tsx +20 -11
  84. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  85. package/themes/original/src/components/BusinessProductsListing/index.tsx +617 -490
  86. package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -13
  87. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  88. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -3
  89. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  90. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +98 -78
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  92. package/themes/original/src/components/BusinessesListing/index.tsx +5 -3
  93. package/themes/original/src/components/Cart/index.tsx +88 -43
  94. package/themes/original/src/components/CartContent/index.tsx +102 -3
  95. package/themes/original/src/components/CartContent/styles.tsx +15 -1
  96. package/themes/original/src/components/Checkout/index.tsx +311 -178
  97. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  98. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  99. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  100. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  101. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  102. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  103. package/themes/original/src/components/Favorite/index.tsx +7 -4
  104. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  105. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  106. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  107. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  108. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  109. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  110. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  111. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  112. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  113. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +178 -0
  114. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  115. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  116. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  117. package/themes/original/src/components/Help/index.tsx +8 -8
  118. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  119. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  120. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  121. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  122. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  123. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  124. package/themes/original/src/components/Home/index.tsx +13 -4
  125. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  126. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  127. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  128. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  129. package/themes/original/src/components/LoginForm/index.tsx +43 -19
  130. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  131. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  132. package/themes/original/src/components/Messages/index.tsx +32 -10
  133. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  134. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  135. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +117 -96
  136. package/themes/original/src/components/MultiCheckout/index.tsx +248 -83
  137. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  138. package/themes/original/src/components/MultiOrdersDetails/index.tsx +67 -20
  139. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  140. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  141. package/themes/original/src/components/NavBar/index.tsx +6 -11
  142. package/themes/original/src/components/Notifications/index.tsx +144 -0
  143. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  144. package/themes/original/src/components/OrderDetails/OrderEta.tsx +61 -0
  145. package/themes/original/src/components/OrderDetails/index.tsx +262 -347
  146. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  147. package/themes/original/src/components/OrderItAgain/index.tsx +47 -43
  148. package/themes/original/src/components/OrderProgress/index.tsx +74 -112
  149. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  150. package/themes/original/src/components/OrderSummary/index.tsx +68 -29
  151. package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -3
  152. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +28 -19
  153. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  154. package/themes/original/src/components/OrdersOption/index.tsx +101 -89
  155. package/themes/original/src/components/PageBanner/index.tsx +171 -0
  156. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  157. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  158. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  159. package/themes/original/src/components/PaymentOptions/index.tsx +3 -3
  160. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  161. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  162. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  163. package/themes/original/src/components/ProductForm/index.tsx +240 -261
  164. package/themes/original/src/components/ProductForm/styles.tsx +4 -7
  165. package/themes/original/src/components/ProductItemAccordion/index.tsx +197 -138
  166. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  167. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  168. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  169. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  170. package/themes/original/src/components/ProfessionalProfile/index.tsx +54 -14
  171. package/themes/original/src/components/Promotions/index.tsx +234 -220
  172. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  173. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  174. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  175. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  176. package/themes/original/src/components/ReviewProducts/index.tsx +7 -4
  177. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  178. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  179. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  180. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  181. package/themes/original/src/components/ServiceForm/index.tsx +377 -270
  182. package/themes/original/src/components/Sessions/index.tsx +11 -8
  183. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  184. package/themes/original/src/components/SignupForm/index.tsx +79 -66
  185. package/themes/original/src/components/SingleOrderCard/index.tsx +148 -62
  186. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -9
  187. package/themes/original/src/components/SingleProductCard/index.tsx +111 -56
  188. package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
  189. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  190. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  191. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  192. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  193. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -218
  194. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  195. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  196. package/themes/original/src/components/UserFormDetails/index.tsx +53 -54
  197. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  198. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  199. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  200. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  201. package/themes/original/src/components/Wallets/index.tsx +31 -17
  202. package/themes/original/src/components/Wallets/styles.tsx +2 -0
  203. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  204. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  205. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  206. package/themes/original/src/components/shared/OButton.tsx +6 -2
  207. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  208. package/themes/original/src/components/shared/OInput.tsx +10 -1
  209. package/themes/original/src/components/shared/OModal.tsx +3 -3
  210. package/themes/original/src/layouts/Container.tsx +13 -9
  211. package/themes/original/src/types/index.tsx +47 -9
  212. package/themes/original/src/utils/index.tsx +375 -58
  213. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -12,27 +12,28 @@ import {
12
12
  } from 'react-native';
13
13
  import { PreviousBusinessOrderedParams } from '../../../types';
14
14
 
15
- const BusinessControllerList = ({ businesses, onBusinessClick, navigation, orderState, style }: any) => {
15
+ const BusinessControllerList = ({ businesses, onBusinessClick, navigation, orderState, handleCustomUpdate, style }: any) => {
16
16
  return (
17
17
  <>
18
18
  {businesses?.result?.map((business: any, i: number) => (
19
- <BusinessController
20
- key={`${business.id}_` + i}
21
- business={business}
22
- isBusinessOpen={business.open}
23
- handleCustomClick={() => onBusinessClick(business)}
24
- orderType={orderState?.options?.type}
25
- navigation={navigation}
26
- businessHeader={business?.header}
27
- businessFeatured={business?.featured}
28
- businessLogo={business?.logo}
29
- businessReviews={business?.reviews}
30
- businessDeliveryPrice={business?.delivery_price}
31
- businessDeliveryTime={business?.delivery_time}
32
- businessPickupTime={business?.pickup_time}
33
- businessDistance={business?.distance}
34
- style={style}
35
- />
19
+ <View style={style} key={`${business.id}_` + i}>
20
+ <BusinessController
21
+ business={business}
22
+ isBusinessOpen={business.open}
23
+ handleCustomClick={() => onBusinessClick(business)}
24
+ orderType={orderState?.options?.type}
25
+ navigation={navigation}
26
+ businessHeader={business?.header}
27
+ businessFeatured={business?.featured}
28
+ businessLogo={business?.logo}
29
+ businessReviews={business?.reviews}
30
+ businessDeliveryPrice={business?.delivery_price}
31
+ businessDeliveryTime={business?.delivery_time}
32
+ businessPickupTime={business?.pickup_time}
33
+ businessDistance={business?.distance}
34
+ handleCustomUpdate={handleCustomUpdate}
35
+ />
36
+ </View>
36
37
  ))}
37
38
  </>
38
39
  )
@@ -92,6 +93,7 @@ export const PreviousBusinessOrdered = (props: PreviousBusinessOrderedParams) =>
92
93
  businesses,
93
94
  onNavigationRedirect,
94
95
  isBusinessesSearchList,
96
+ handleUpdateBusinesses,
95
97
  } = props
96
98
 
97
99
  const [orderState] = useOrder()
@@ -107,7 +109,12 @@ export const PreviousBusinessOrdered = (props: PreviousBusinessOrderedParams) =>
107
109
  });
108
110
 
109
111
  return (
110
- <ScrollView horizontal={isBusinessesSearchList} style={styles.container} showsVerticalScrollIndicator={false}>
112
+ <ScrollView
113
+ horizontal={isBusinessesSearchList}
114
+ style={styles.container}
115
+ showsVerticalScrollIndicator={false}
116
+ showsHorizontalScrollIndicator={false}
117
+ >
111
118
  {isBusinessesSearchList ? (
112
119
  <>
113
120
  {!businesses?.loading && (
@@ -117,6 +124,7 @@ export const PreviousBusinessOrdered = (props: PreviousBusinessOrderedParams) =>
117
124
  orderState={orderState}
118
125
  navigation={navigation}
119
126
  businesses={businesses}
127
+ handleCustomUpdate={handleUpdateBusinesses}
120
128
  />
121
129
  )}
122
130
  </>
@@ -130,6 +138,7 @@ export const PreviousBusinessOrdered = (props: PreviousBusinessOrderedParams) =>
130
138
  orderState={orderState}
131
139
  navigation={navigation}
132
140
  businesses={businesses}
141
+ handleCustomUpdate={handleUpdateBusinesses}
133
142
  />
134
143
  )}
135
144
  </ListWrapper>
@@ -11,6 +11,7 @@ export const PreviousProductsOrdered = (props: PreviousProductsOrderedParams) =>
11
11
  const {
12
12
  products,
13
13
  onProductClick,
14
+ handleUpdateProducts,
14
15
  isBusinessesSearchList
15
16
  } = props
16
17
 
@@ -28,12 +29,14 @@ export const PreviousProductsOrdered = (props: PreviousProductsOrderedParams) =>
28
29
  {products?.map((product: any) => (
29
30
  <SingleProductCard
30
31
  key={product?.id}
32
+ isProductId
31
33
  isSoldOut={(product.inventoried && !product.quantity)}
32
34
  product={product}
33
35
  businessId={product?.business?.id}
34
36
  onProductClick={onProductClick}
35
37
  style={style}
36
38
  productAddedToCartLength={0}
39
+ handleUpdateProducts={handleUpdateProducts}
37
40
  />
38
41
  ))}
39
42
  </>
@@ -3,7 +3,6 @@ import { OrderList, useLanguage, useOrder, ToastType, useToast } from 'ordering-
3
3
  import { useTheme } from 'styled-components/native';
4
4
  import { useFocusEffect } from '@react-navigation/native'
5
5
  import { OText, OButton } from '../shared'
6
- import { NotFoundSource } from '../NotFoundSource'
7
6
  import { ActiveOrders } from '../ActiveOrders'
8
7
  import { PreviousOrders } from '../PreviousOrders'
9
8
  import { PreviousBusinessOrdered } from './PreviousBusinessOrdered'
@@ -18,6 +17,7 @@ import {
18
17
  } from "rn-placeholder";
19
18
 
20
19
  import { View, ScrollView } from 'react-native'
20
+ import { getOrderStatus, flatArray } from '../../utils'
21
21
 
22
22
  const OrdersOptionUI = (props: OrdersOptionParams) => {
23
23
  const {
@@ -48,7 +48,9 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
48
48
  hideOrders,
49
49
  BusinessControllerSkeletons,
50
50
  businesses,
51
- businessPaginationProps
51
+ businessPaginationProps,
52
+ handleUpdateProducts,
53
+ handleUpdateBusinesses
52
54
  } = props
53
55
 
54
56
  const theme = useTheme();
@@ -58,46 +60,45 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
58
60
  const [, { showToast }] = useToast()
59
61
  const { loading, error, orders: values } = orderList
60
62
  const [businessLoading, setBusinessLoading] = useState(true)
63
+ const [orders, setOrders] = useState([])
61
64
 
62
65
  const imageFails = activeOrders
63
66
  ? theme.images.general.emptyActiveOrders
64
67
  : theme.images.general.emptyPastOrders
65
68
 
66
- const orders = customArray || values || []
69
+ const _orders = customArray || values || []
70
+ const uniqueOrders: any = []
67
71
 
68
- const getOrderStatus = (s: string) => {
69
- const status = parseInt(s)
70
- const orderStatus = [
71
- { key: 0, value: t('PENDING', 'Pending') },
72
- { key: 1, value: t('COMPLETED', 'Completed') },
73
- { key: 2, value: t('REJECTED', 'Rejected') },
74
- { key: 3, value: t('DRIVER_IN_BUSINESS', 'Driver in business') },
75
- { key: 4, value: t('PREPARATION_COMPLETED', 'Preparation Completed') },
76
- { key: 5, value: t('REJECTED_BY_BUSINESS', 'Rejected by business') },
77
- { key: 6, value: t('REJECTED_BY_DRIVER', 'Rejected by Driver') },
78
- { key: 7, value: t('ACCEPTED_BY_BUSINESS', 'Accepted by business') },
79
- { key: 8, value: t('ACCEPTED_BY_DRIVER', 'Accepted by driver') },
80
- { key: 9, value: t('PICK_UP_COMPLETED_BY_DRIVER', 'Pick up completed by driver') },
81
- { key: 10, value: t('PICK_UP_FAILED_BY_DRIVER', 'Pick up Failed by driver') },
82
- { key: 11, value: t('DELIVERY_COMPLETED_BY_DRIVER', 'Delivery completed by driver') },
83
- { key: 12, value: t('DELIVERY_FAILED_BY_DRIVER', 'Delivery Failed by driver') },
84
- { key: 13, value: t('PREORDER', 'PreOrder') },
85
- { key: 14, value: t('ORDER_NOT_READY', 'Order not ready') },
86
- { key: 15, value: t('ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER', 'Order picked up completed by customer') },
87
- { key: 16, value: t('CANCELLED_BY_CUSTOMER', 'Cancelled by customer') },
88
- { key: 17, value: t('ORDER_NOT_PICKEDUP_BY_CUSTOMER', 'Order not picked up by customer') },
89
- { key: 18, value: t('DRIVER_ALMOST_ARRIVED_TO_BUSINESS', 'Driver almost arrived to business') },
90
- { key: 19, value: t('DRIVER_ALMOST_ARRIVED_TO_CUSTOMER', 'Driver almost arrived to customer') },
91
- { key: 20, value: t('ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS', 'Customer almost arrived to business') },
92
- { key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') },
93
- { key: 22, value: t('ORDER_LOOKING_FOR_DRIVER', 'Looking for driver') },
94
- { key: 23, value: t('ORDER_DRIVER_ON_WAY', 'Driver on way') }
95
- ]
96
-
97
- const objectStatus = orderStatus.find((o) => o.key === status)
98
-
99
- return objectStatus && objectStatus
100
- }
72
+ useEffect(() => {
73
+ if (loading || error) return
74
+ const ordersReduced = _orders.map((order: any) => order?.cart_group_id
75
+ ? _orders
76
+ .filter((_order: any) => _order?.cart_group_id === order?.cart_group_id)
77
+ .map((_o: any, _: any, _ordersList: any) => {
78
+ const obj = {
79
+ ..._o,
80
+ id: _ordersList.map(o => o.id),
81
+ review: _o.review,
82
+ user_review: _o.user_review,
83
+ total: _ordersList.reduce((acc: any, o: any) => acc + o.summary.total, 0),
84
+ business: _ordersList.map((o: any) => o.business),
85
+ business_id: _ordersList.map((o: any) => o.business_id),
86
+ products: _ordersList.map((o: any) => o.products)
87
+ }
88
+ return obj
89
+ }).find((o: any) => o)
90
+ : order)
91
+ const orders = ordersReduced?.filter((order: any) => {
92
+ if (!order?.cart_group_id) return true
93
+ const isDuplicate = uniqueOrders.includes(order?.cart_group_id)
94
+ if (!isDuplicate) {
95
+ uniqueOrders.push(order?.cart_group_id)
96
+ return true
97
+ }
98
+ return false
99
+ })
100
+ setOrders(orders)
101
+ }, [_orders?.length])
101
102
 
102
103
  const onProductClick = (product: any) => {
103
104
  if (product?.product_id && product?.category_id && product?.businessId &&
@@ -119,6 +120,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
119
120
  }
120
121
 
121
122
  useEffect(() => {
123
+ if (reorderState?.loading) return
122
124
  const _businessId = 'businessId:' + reorderState?.result?.business_id
123
125
  if (reorderState?.error) {
124
126
  if (reorderState?.result?.business_id) {
@@ -126,21 +128,39 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
126
128
  navigation.navigate('Business', { store: reorderState?.result?.business?.slug })
127
129
  }
128
130
  }
129
- if (!reorderState?.error && reorderState.loading === false && reorderState?.result?.business_id) {
131
+ if (!reorderState?.error && !reorderState.loading && reorderState?.result?.business_id) {
130
132
  const cartProducts = carts?.[_businessId]?.products
131
- const available = cartProducts.every((product: any) => product.valid === true)
132
- const orderProducts = orders.find((order: any) => order?.id === reorderState?.result?.orderId)?.products
133
133
 
134
- if (available && reorderState?.result?.uuid && (cartProducts?.length === orderProducts?.length)) {
135
- onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', { cartUuid: reorderState?.result.uuid })
134
+ const available = cartProducts.every((product: any) => product.valid)
135
+ const orderProducts = orders.find(
136
+ (order: any) => Array.isArray(order?.id)
137
+ ? order?.id?.includes(reorderState?.result?.orderId)
138
+ : order?.id === reorderState?.result?.orderId
139
+ )?.products
140
+
141
+ const productsFlatten = orderProducts?.length && flatArray(orderProducts)?.filter(product => product?.order_id === reorderState?.result?.orderId)
142
+
143
+ if (available && reorderState?.result?.uuid && (cartProducts?.length === productsFlatten?.length)) {
144
+ const multiOrders = flatArray(orderProducts)?.map(product => product.order_id)
145
+ const params = multiOrders?.length > 1
146
+ ? { screen: 'MultiCheckout', checkCarts: true }
147
+ : { cartUuid: reorderState?.result.uuid }
148
+
149
+ onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', params)
136
150
  } else {
137
151
  _setStoreData('adjust-cart-products', JSON.stringify(_businessId))
138
- cartProducts?.length !== orderProducts?.length && _setStoreData('already-removed', JSON.stringify('removed'))
152
+ cartProducts?.length !== productsFlatten?.length && _setStoreData('already-removed', JSON.stringify('removed'))
139
153
  navigation.navigate('Business', { store: reorderState?.result?.business?.slug })
140
154
  }
141
155
  }
142
156
  }, [reorderState])
143
157
 
158
+ useEffect(() => {
159
+ if (reorderState?.error) {
160
+ showToast(ToastType.Error, reorderState?.result)
161
+ }
162
+ }, [reorderState])
163
+
144
164
  useFocusEffect(
145
165
  React.useCallback(() => {
146
166
  if (!businessesSearchList) {
@@ -159,14 +179,14 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
159
179
  useEffect(() => {
160
180
  if (loading) return
161
181
 
162
- const updateOrders = orders.filter((order: any) => orderStatus.includes(order.status))
182
+ const updateOrders = _orders.filter((order: any) => orderStatus.includes(order.status))
163
183
 
164
184
  if (activeOrders) {
165
185
  setOrdersLength && setOrdersLength({ ...ordersLength, activeOrdersLength: updateOrders?.length })
166
186
  } else if (!preOrders) {
167
187
  setOrdersLength && setOrdersLength({ ...ordersLength, previousOrdersLength: updateOrders?.length })
168
188
  }
169
- }, [orders, activeOrders, preOrders])
189
+ }, [_orders, activeOrders, preOrders])
170
190
 
171
191
  useEffect(() => {
172
192
  if (refreshOrders) {
@@ -191,7 +211,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
191
211
 
192
212
  </NoOrdersWrapper>
193
213
  )}
194
- {(ordersLength?.activeOrdersLength > 0 || ordersLength?.previousOrdersLength > 0) && (
214
+ {((ordersLength?.activeOrdersLength > 0 && activeOrders) || (ordersLength?.previousOrdersLength > 0 && !activeOrders)) && (
195
215
  <>
196
216
  {((titleContent && ((isBusiness && businessOrderIds?.length > 0) || isProducts)) || !titleContent) && (
197
217
  <OptionTitle titleContent={!!titleContent} isBusinessesSearchList={!!businessesSearchList}>
@@ -204,20 +224,9 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
204
224
  </OText>
205
225
  </OptionTitle>
206
226
  )}
207
-
208
- {!(ordersLength?.activeOrdersLength === 0 && ordersLength?.previousOrdersLength === 0) &&
209
- !loading &&
210
- orders.filter((order: any) => orderStatus.includes(order.status)).length === 0 &&
211
- (
212
- <NotFoundSource
213
- content={t('NO_RESULTS_FOUND', 'Sorry, no results found')}
214
- image={imageFails}
215
- conditioned
216
- />
217
- )}
218
227
  </>
219
228
  )}
220
- {isBusiness && !!businessesSearchList && businesses?.loading && (
229
+ {isBusiness && !!businessesSearchList && businesses?.loading && (
221
230
  <ScrollView horizontal>
222
231
  <BusinessControllerSkeletons paginationProps={businessPaginationProps} />
223
232
  </ScrollView>
@@ -227,6 +236,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
227
236
  onNavigationRedirect={onNavigationRedirect}
228
237
  isBusinessesSearchList={!!businessesSearchList}
229
238
  businesses={businesses}
239
+ handleUpdateBusinesses={handleUpdateBusinesses}
230
240
  />
231
241
  )}
232
242
 
@@ -234,6 +244,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
234
244
  <PreviousProductsOrdered
235
245
  products={products}
236
246
  onProductClick={onProductClick}
247
+ handleUpdateProducts={handleUpdateProducts}
237
248
  isBusinessesSearchList={!!businessesSearchList}
238
249
  />
239
250
  )}
@@ -258,38 +269,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
258
269
  )}
259
270
  </>
260
271
  )}
261
- {loading && !hideOrders && (
262
- <>
263
- {!activeOrders ? (
264
- <Placeholder style={{ marginTop: 30 }} Animation={Fade}>
265
- <View style={{ width: '100%', flexDirection: 'row' }}>
266
- <PlaceholderLine width={20} height={70} style={{ marginRight: 20, marginBottom: 35 }} />
267
- <Placeholder>
268
- <PlaceholderLine width={30} style={{ marginTop: 5 }} />
269
- <PlaceholderLine width={50} />
270
- <PlaceholderLine width={70} />
271
- </Placeholder>
272
- </View>
273
- </Placeholder>
274
- ) : (
275
- <View style={{ marginTop: 30 }}>
276
- {[...Array(5)].map((item, i) => (
277
- <Placeholder key={i} Animation={Fade}>
278
- <View style={{ width: '100%', flexDirection: 'row' }}>
279
- <PlaceholderLine width={20} height={70} style={{ marginRight: 20, marginBottom: 20 }} />
280
- <Placeholder>
281
- <PlaceholderLine width={30} style={{ marginTop: 5 }} />
282
- <PlaceholderLine width={50} />
283
- <PlaceholderLine width={20} />
284
- </Placeholder>
285
- </View>
286
- </Placeholder>
287
- ))}
288
- </View>
289
- )}
290
- </>
291
- )}
292
- {!loading && !error && orders.length > 0 && !hideOrders && (
272
+ {!error && orders.length > 0 && !hideOrders && (
293
273
  preOrders ? (
294
274
  <ActiveOrders
295
275
  orders={orders.filter((order: any) => orderStatus.includes(order.status))}
@@ -321,9 +301,41 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
321
301
  onNavigationRedirect={onNavigationRedirect}
322
302
  handleReorder={handleReorder}
323
303
  handleUpdateOrderList={handleUpdateOrderList}
304
+ loading={loading}
324
305
  />
325
306
  )
326
307
  )}
308
+ {loading && !hideOrders && (
309
+ <>
310
+ {!activeOrders ? (
311
+ <Placeholder style={{ marginTop: 30 }} Animation={Fade}>
312
+ <View style={{ width: '100%', flexDirection: 'row' }}>
313
+ <PlaceholderLine width={20} height={70} style={{ marginRight: 20, marginBottom: 35 }} />
314
+ <Placeholder>
315
+ <PlaceholderLine width={30} style={{ marginTop: 5 }} />
316
+ <PlaceholderLine width={50} />
317
+ <PlaceholderLine width={70} />
318
+ </Placeholder>
319
+ </View>
320
+ </Placeholder>
321
+ ) : (
322
+ <View style={{ marginTop: 30 }}>
323
+ {[...Array(5)].map((item, i) => (
324
+ <Placeholder key={i} Animation={Fade}>
325
+ <View style={{ width: '100%', flexDirection: 'row' }}>
326
+ <PlaceholderLine width={20} height={70} style={{ marginRight: 20, marginBottom: 20 }} />
327
+ <Placeholder>
328
+ <PlaceholderLine width={30} style={{ marginTop: 5 }} />
329
+ <PlaceholderLine width={50} />
330
+ <PlaceholderLine width={20} />
331
+ </Placeholder>
332
+ </View>
333
+ </Placeholder>
334
+ ))}
335
+ </View>
336
+ )}
337
+ </>
338
+ )}
327
339
  </>
328
340
  )
329
341
  }
@@ -0,0 +1,171 @@
1
+ import React, { useEffect, useState, useRef } from 'react'
2
+ import { useUtils, useEvent, PageBanner as PageBannerController } from 'ordering-components/native'
3
+ import { View, StyleSheet, Dimensions, TouchableOpacity } from 'react-native'
4
+ import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
5
+ import Carousel from 'react-native-snap-carousel'
6
+ import FastImage from 'react-native-fast-image';
7
+ import IconAntDesign from 'react-native-vector-icons/AntDesign';
8
+ import { useTheme } from 'styled-components/native';
9
+ import { PageBannerWrapper } from './styles'
10
+
11
+ const PageBannerUI = (props: any) => {
12
+ const {
13
+ pageBannerState,
14
+ navigation
15
+ } = props
16
+
17
+ const theme = useTheme();
18
+ const [{ optimizeImage }] = useUtils();
19
+ const [events] = useEvent()
20
+ const carouselRef = useRef<any>(null)
21
+ const [currentIndex, setCurrentIndex] = useState(0)
22
+ const [viewedBanner, setViewedBanner] = useState<any>(null)
23
+
24
+ const windowWidth = Dimensions.get('window').width;
25
+
26
+ const styles = StyleSheet.create({
27
+ mainSwiper: {
28
+ height: 300,
29
+ },
30
+ swiperButton: {
31
+ position: 'absolute',
32
+ zIndex: 100,
33
+ alignItems: 'center',
34
+ justifyContent: 'center',
35
+ width: 32,
36
+ height: 32,
37
+ borderRadius: 16,
38
+ backgroundColor: 'rgba(208,208,208,0.5)'
39
+ },
40
+ sliderWrapper: {
41
+ width: '100%',
42
+ height: 300
43
+ }
44
+ })
45
+
46
+ const onRedirect = (route: string, params?: any) => {
47
+ navigation.push(route, params)
48
+ }
49
+
50
+ const handleGoToPage = (item: any) => {
51
+ const action = item.action
52
+ if (!action?.url) return
53
+ let slug
54
+ if (action.type === 'business') {
55
+ slug = action.url.split('store/')[1]
56
+ onRedirect('Business', {
57
+ store: slug
58
+ })
59
+ }
60
+ if (action.type === 'product') {
61
+ slug = action.url.split('store/')[1]?.split('?')[0]
62
+ onRedirect('ProductDetails', {
63
+ businessSlug: slug,
64
+ businessId: action.business_id,
65
+ categoryId: action.category_id,
66
+ productId: action.product_id
67
+ })
68
+ }
69
+ const clickedBanner = pageBannerState.result.find(banner => banner.id === item?.banner_id)
70
+ events.emit('promotion_clicked', clickedBanner)
71
+ }
72
+
73
+ const renderItem = ({ item, index }) => {
74
+ return (
75
+ <TouchableOpacity
76
+ onPress={() => handleGoToPage(item)}
77
+ >
78
+ <View style={styles.sliderWrapper}>
79
+ <FastImage
80
+ style={{ height: '100%', width: '100%' }}
81
+ resizeMode='cover'
82
+ source={{ uri: optimizeImage(item.url, 'h_300,c_limit') }}
83
+ />
84
+ </View>
85
+ </TouchableOpacity>
86
+ )
87
+ }
88
+
89
+ const updateIndex = () => {
90
+ setCurrentIndex(carouselRef?.current?.currentIndex)
91
+ }
92
+
93
+ useEffect(() => {
94
+ if (pageBannerState.loading) return
95
+ if (pageBannerState.banner?.items && pageBannerState.banner?.items.length > 0) {
96
+ const bannerId = pageBannerState.banner.items[currentIndex]?.banner_id
97
+ if (pageBannerState.result && bannerId) {
98
+ const _viewedBanner = pageBannerState.result.find(banner => banner.id === bannerId)
99
+ if (_viewedBanner?.id !== viewedBanner?.id) {
100
+ setViewedBanner(_viewedBanner)
101
+ events.emit('promotion_viewed', _viewedBanner)
102
+ }
103
+ }
104
+ }
105
+ }, [pageBannerState.loading, currentIndex, viewedBanner])
106
+
107
+ return (
108
+ <>
109
+ {pageBannerState.loading ? (
110
+ <PageBannerWrapper>
111
+ <Placeholder
112
+ Animation={Fade}
113
+ >
114
+ <PlaceholderLine
115
+ height={300}
116
+ style={{ marginBottom: 20, borderRadius: 8 }}
117
+ />
118
+ </Placeholder>
119
+ </PageBannerWrapper>
120
+ ) : (
121
+ <>
122
+ {pageBannerState.banner?.items && pageBannerState.banner?.items.length > 0 && (
123
+ <PageBannerWrapper>
124
+ <TouchableOpacity
125
+ style={[styles.swiperButton, { left: 25 }]}
126
+ onPress={() => carouselRef.current.snapToPrev()}
127
+ >
128
+ <IconAntDesign
129
+ name="caretleft"
130
+ color={theme.colors.white}
131
+ size={13}
132
+ />
133
+ </TouchableOpacity>
134
+ <TouchableOpacity
135
+ style={[styles.swiperButton, { right: 25 }]}
136
+ onPress={() => carouselRef.current.snapToNext()}
137
+ >
138
+ <IconAntDesign
139
+ name="caretright"
140
+ color={theme.colors.white}
141
+ size={13}
142
+ />
143
+ </TouchableOpacity>
144
+ <Carousel
145
+ ref={carouselRef}
146
+ loop={pageBannerState.banner?.items.length > 1}
147
+ data={pageBannerState.banner?.items}
148
+ renderItem={renderItem}
149
+ sliderWidth={windowWidth - 80}
150
+ itemWidth={windowWidth - 80}
151
+ inactiveSlideScale={1}
152
+ pagingEnabled
153
+ removeClippedSubviews={false}
154
+ inactiveSlideOpacity={1}
155
+ onSnapToItem={updateIndex}
156
+ />
157
+ </PageBannerWrapper>
158
+ )}
159
+ </>
160
+ )}
161
+ </>
162
+ )
163
+ }
164
+
165
+ export const PageBanner = (props: any) => {
166
+ const pageBannerProps = {
167
+ ...props,
168
+ UIComponent: PageBannerUI
169
+ }
170
+ return <PageBannerController {...pageBannerProps} />
171
+ }
@@ -0,0 +1,11 @@
1
+ import styled from 'styled-components/native'
2
+
3
+ export const PageBannerWrapper = styled.View`
4
+ margin-horizontal: 40px;
5
+ border-radius: 8px;
6
+ overflow: hidden;
7
+ margin-vertical: 30px;
8
+ position: relative;
9
+ flex-direction: row;
10
+ align-items: center;
11
+ `
@@ -39,7 +39,7 @@ export const OSItem = styled.View`
39
39
  flex-direction: row;
40
40
  justify-content: space-between;
41
41
  align-items: center;
42
- padding: 20px 0px;
42
+ padding: 10px 0px;
43
43
  `;
44
44
 
45
45
  export const OSItemContent = styled.TouchableOpacity`