ordering-ui-react-native 0.17.10 → 0.17.11-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 (214) 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 +0 -24
  9. package/src/components/SingleProductReview/styles.tsx +0 -12
  10. package/src/components/StripeMethodForm/index.tsx +6 -14
  11. package/src/components/VerifyPhone/styles.tsx +1 -2
  12. package/src/components/shared/OToast.tsx +4 -4
  13. package/src/utils/index.tsx +7 -1
  14. package/themes/business/index.tsx +2 -0
  15. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  16. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  17. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  18. package/themes/business/src/components/Chat/index.tsx +118 -107
  19. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  20. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  21. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  22. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  23. package/themes/business/src/components/LoginForm/index.tsx +238 -80
  24. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  25. package/themes/business/src/components/MapView/index.tsx +18 -7
  26. package/themes/business/src/components/NewOrderNotification/index.tsx +43 -50
  27. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +98 -50
  29. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  30. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  31. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  32. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  33. package/themes/business/src/components/OrderSummary/index.tsx +113 -121
  34. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  35. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  36. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  37. package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
  38. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  39. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  40. package/themes/business/src/components/ReviewCustomer/index.tsx +41 -24
  41. package/themes/business/src/components/StoresList/index.tsx +2 -2
  42. package/themes/business/src/components/shared/OLink.tsx +33 -13
  43. package/themes/business/src/components/shared/OModal.tsx +16 -9
  44. package/themes/business/src/components/shared/OText.tsx +8 -2
  45. package/themes/business/src/types/index.tsx +33 -2
  46. package/themes/business/src/utils/index.tsx +51 -0
  47. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  48. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  49. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  50. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  51. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  52. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  53. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  54. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  55. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  56. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  57. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  58. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  59. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +3 -2
  60. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  61. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  62. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  63. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  64. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  65. package/themes/kiosk/src/types/index.d.ts +13 -0
  66. package/themes/kiosk/src/utils/index.tsx +15 -0
  67. package/themes/original/index.tsx +8 -0
  68. package/themes/original/src/components/AddressDetails/index.tsx +29 -11
  69. package/themes/original/src/components/AddressForm/index.tsx +41 -16
  70. package/themes/original/src/components/AddressList/index.tsx +26 -21
  71. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  72. package/themes/original/src/components/AnalyticsSegment/index.tsx +189 -9
  73. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  74. package/themes/original/src/components/BusinessBasicInformation/index.tsx +125 -82
  75. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -4
  76. package/themes/original/src/components/BusinessController/index.tsx +145 -68
  77. package/themes/original/src/components/BusinessController/styles.tsx +22 -9
  78. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  79. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  80. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  81. package/themes/original/src/components/BusinessItemAccordion/index.tsx +24 -23
  82. package/themes/original/src/components/BusinessListingSearch/index.tsx +350 -323
  83. package/themes/original/src/components/BusinessPreorder/index.tsx +97 -16
  84. package/themes/original/src/components/BusinessProductsList/index.tsx +20 -11
  85. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  86. package/themes/original/src/components/BusinessProductsListing/index.tsx +617 -492
  87. package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -13
  88. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  89. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -3
  90. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +98 -78
  92. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  93. package/themes/original/src/components/BusinessesListing/index.tsx +5 -3
  94. package/themes/original/src/components/Cart/index.tsx +88 -43
  95. package/themes/original/src/components/CartContent/index.tsx +110 -19
  96. package/themes/original/src/components/CartContent/styles.tsx +15 -1
  97. package/themes/original/src/components/Checkout/index.tsx +311 -178
  98. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  99. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  100. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  101. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  102. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  103. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  104. package/themes/original/src/components/Favorite/index.tsx +7 -4
  105. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  106. package/themes/original/src/components/FavoriteList/index.tsx +51 -80
  107. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  108. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  109. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  110. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  111. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  112. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  113. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  114. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +178 -0
  115. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  116. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  117. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  118. package/themes/original/src/components/Help/index.tsx +8 -8
  119. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  120. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  121. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  122. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  123. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  124. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  125. package/themes/original/src/components/Home/index.tsx +13 -4
  126. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  127. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  128. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  129. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  130. package/themes/original/src/components/LoginForm/index.tsx +43 -19
  131. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  132. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  133. package/themes/original/src/components/Messages/index.tsx +32 -10
  134. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  135. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  136. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +117 -96
  137. package/themes/original/src/components/MultiCheckout/index.tsx +248 -83
  138. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  139. package/themes/original/src/components/MultiOrdersDetails/index.tsx +67 -20
  140. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  141. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  142. package/themes/original/src/components/NavBar/index.tsx +6 -11
  143. package/themes/original/src/components/Notifications/index.tsx +144 -0
  144. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  145. package/themes/original/src/components/OrderDetails/OrderEta.tsx +61 -0
  146. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +10 -3
  147. package/themes/original/src/components/OrderDetails/index.tsx +262 -347
  148. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  149. package/themes/original/src/components/OrderItAgain/index.tsx +47 -43
  150. package/themes/original/src/components/OrderProgress/index.tsx +74 -112
  151. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  152. package/themes/original/src/components/OrderSummary/index.tsx +67 -29
  153. package/themes/original/src/components/OrderTypeSelector/index.tsx +3 -2
  154. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +28 -19
  155. package/themes/original/src/components/OrdersOption/index.tsx +99 -89
  156. package/themes/original/src/components/PageBanner/index.tsx +171 -0
  157. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  158. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  159. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  160. package/themes/original/src/components/PaymentOptions/index.tsx +3 -3
  161. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  162. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  163. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  164. package/themes/original/src/components/ProductForm/index.tsx +231 -253
  165. package/themes/original/src/components/ProductForm/styles.tsx +4 -7
  166. package/themes/original/src/components/ProductItemAccordion/index.tsx +197 -138
  167. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  168. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  169. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  170. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  171. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  172. package/themes/original/src/components/Promotions/index.tsx +234 -220
  173. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  174. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  175. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  176. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  177. package/themes/original/src/components/ReviewProducts/index.tsx +7 -4
  178. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  179. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  180. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  181. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  182. package/themes/original/src/components/ServiceForm/index.tsx +358 -275
  183. package/themes/original/src/components/Sessions/index.tsx +11 -8
  184. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  185. package/themes/original/src/components/SignupForm/index.tsx +82 -67
  186. package/themes/original/src/components/SingleOrderCard/index.tsx +148 -62
  187. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -9
  188. package/themes/original/src/components/SingleProductCard/index.tsx +99 -55
  189. package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
  190. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  191. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  192. package/themes/original/src/components/StripeCardsList/index.tsx +9 -2
  193. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  194. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -218
  195. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  196. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  197. package/themes/original/src/components/UserFormDetails/index.tsx +53 -54
  198. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  199. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  200. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  201. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  202. package/themes/original/src/components/Wallets/index.tsx +31 -17
  203. package/themes/original/src/components/Wallets/styles.tsx +2 -0
  204. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  205. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  206. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  207. package/themes/original/src/components/shared/OButton.tsx +6 -2
  208. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  209. package/themes/original/src/components/shared/OInput.tsx +10 -1
  210. package/themes/original/src/components/shared/OModal.tsx +3 -3
  211. package/themes/original/src/layouts/Container.tsx +13 -9
  212. package/themes/original/src/types/index.tsx +43 -9
  213. package/themes/original/src/utils/index.tsx +375 -58
  214. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -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 {
@@ -49,7 +49,8 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
49
49
  BusinessControllerSkeletons,
50
50
  businesses,
51
51
  businessPaginationProps,
52
- handleUpdateProducts
52
+ handleUpdateProducts,
53
+ handleUpdateBusinesses
53
54
  } = props
54
55
 
55
56
  const theme = useTheme();
@@ -59,46 +60,45 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
59
60
  const [, { showToast }] = useToast()
60
61
  const { loading, error, orders: values } = orderList
61
62
  const [businessLoading, setBusinessLoading] = useState(true)
63
+ const [orders, setOrders] = useState([])
62
64
 
63
65
  const imageFails = activeOrders
64
66
  ? theme.images.general.emptyActiveOrders
65
67
  : theme.images.general.emptyPastOrders
66
68
 
67
- const orders = customArray || values || []
69
+ const _orders = customArray || values || []
70
+ const uniqueOrders: any = []
68
71
 
69
- const getOrderStatus = (s: string) => {
70
- const status = parseInt(s)
71
- const orderStatus = [
72
- { key: 0, value: t('PENDING', 'Pending') },
73
- { key: 1, value: t('COMPLETED', 'Completed') },
74
- { key: 2, value: t('REJECTED', 'Rejected') },
75
- { key: 3, value: t('DRIVER_IN_BUSINESS', 'Driver in business') },
76
- { key: 4, value: t('PREPARATION_COMPLETED', 'Preparation Completed') },
77
- { key: 5, value: t('REJECTED_BY_BUSINESS', 'Rejected by business') },
78
- { key: 6, value: t('REJECTED_BY_DRIVER', 'Rejected by Driver') },
79
- { key: 7, value: t('ACCEPTED_BY_BUSINESS', 'Accepted by business') },
80
- { key: 8, value: t('ACCEPTED_BY_DRIVER', 'Accepted by driver') },
81
- { key: 9, value: t('PICK_UP_COMPLETED_BY_DRIVER', 'Pick up completed by driver') },
82
- { key: 10, value: t('PICK_UP_FAILED_BY_DRIVER', 'Pick up Failed by driver') },
83
- { key: 11, value: t('DELIVERY_COMPLETED_BY_DRIVER', 'Delivery completed by driver') },
84
- { key: 12, value: t('DELIVERY_FAILED_BY_DRIVER', 'Delivery Failed by driver') },
85
- { key: 13, value: t('PREORDER', 'PreOrder') },
86
- { key: 14, value: t('ORDER_NOT_READY', 'Order not ready') },
87
- { key: 15, value: t('ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER', 'Order picked up completed by customer') },
88
- { key: 16, value: t('CANCELLED_BY_CUSTOMER', 'Cancelled by customer') },
89
- { key: 17, value: t('ORDER_NOT_PICKEDUP_BY_CUSTOMER', 'Order not picked up by customer') },
90
- { key: 18, value: t('DRIVER_ALMOST_ARRIVED_TO_BUSINESS', 'Driver almost arrived to business') },
91
- { key: 19, value: t('DRIVER_ALMOST_ARRIVED_TO_CUSTOMER', 'Driver almost arrived to customer') },
92
- { key: 20, value: t('ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS', 'Customer almost arrived to business') },
93
- { key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') },
94
- { key: 22, value: t('ORDER_LOOKING_FOR_DRIVER', 'Looking for driver') },
95
- { key: 23, value: t('ORDER_DRIVER_ON_WAY', 'Driver on way') }
96
- ]
97
-
98
- const objectStatus = orderStatus.find((o) => o.key === status)
99
-
100
- return objectStatus && objectStatus
101
- }
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])
102
102
 
103
103
  const onProductClick = (product: any) => {
104
104
  if (product?.product_id && product?.category_id && product?.businessId &&
@@ -120,6 +120,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
120
120
  }
121
121
 
122
122
  useEffect(() => {
123
+ if (reorderState?.loading) return
123
124
  const _businessId = 'businessId:' + reorderState?.result?.business_id
124
125
  if (reorderState?.error) {
125
126
  if (reorderState?.result?.business_id) {
@@ -127,21 +128,39 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
127
128
  navigation.navigate('Business', { store: reorderState?.result?.business?.slug })
128
129
  }
129
130
  }
130
- if (!reorderState?.error && reorderState.loading === false && reorderState?.result?.business_id) {
131
+ if (!reorderState?.error && !reorderState.loading && reorderState?.result?.business_id) {
131
132
  const cartProducts = carts?.[_businessId]?.products
132
- const available = cartProducts.every((product: any) => product.valid === true)
133
- const orderProducts = orders.find((order: any) => order?.id === reorderState?.result?.orderId)?.products
134
133
 
135
- if (available && reorderState?.result?.uuid && (cartProducts?.length === orderProducts?.length)) {
136
- 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)
137
150
  } else {
138
151
  _setStoreData('adjust-cart-products', JSON.stringify(_businessId))
139
- cartProducts?.length !== orderProducts?.length && _setStoreData('already-removed', JSON.stringify('removed'))
152
+ cartProducts?.length !== productsFlatten?.length && _setStoreData('already-removed', JSON.stringify('removed'))
140
153
  navigation.navigate('Business', { store: reorderState?.result?.business?.slug })
141
154
  }
142
155
  }
143
156
  }, [reorderState])
144
157
 
158
+ useEffect(() => {
159
+ if (reorderState?.error) {
160
+ showToast(ToastType.Error, reorderState?.result)
161
+ }
162
+ }, [reorderState])
163
+
145
164
  useFocusEffect(
146
165
  React.useCallback(() => {
147
166
  if (!businessesSearchList) {
@@ -160,14 +179,14 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
160
179
  useEffect(() => {
161
180
  if (loading) return
162
181
 
163
- const updateOrders = orders.filter((order: any) => orderStatus.includes(order.status))
182
+ const updateOrders = _orders.filter((order: any) => orderStatus.includes(order.status))
164
183
 
165
184
  if (activeOrders) {
166
185
  setOrdersLength && setOrdersLength({ ...ordersLength, activeOrdersLength: updateOrders?.length })
167
186
  } else if (!preOrders) {
168
187
  setOrdersLength && setOrdersLength({ ...ordersLength, previousOrdersLength: updateOrders?.length })
169
188
  }
170
- }, [orders, activeOrders, preOrders])
189
+ }, [_orders, activeOrders, preOrders])
171
190
 
172
191
  useEffect(() => {
173
192
  if (refreshOrders) {
@@ -192,7 +211,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
192
211
 
193
212
  </NoOrdersWrapper>
194
213
  )}
195
- {(ordersLength?.activeOrdersLength > 0 || ordersLength?.previousOrdersLength > 0) && (
214
+ {((ordersLength?.activeOrdersLength > 0 && activeOrders) || (ordersLength?.previousOrdersLength > 0 && !activeOrders)) && (
196
215
  <>
197
216
  {((titleContent && ((isBusiness && businessOrderIds?.length > 0) || isProducts)) || !titleContent) && (
198
217
  <OptionTitle titleContent={!!titleContent} isBusinessesSearchList={!!businessesSearchList}>
@@ -205,20 +224,9 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
205
224
  </OText>
206
225
  </OptionTitle>
207
226
  )}
208
-
209
- {!(ordersLength?.activeOrdersLength === 0 && ordersLength?.previousOrdersLength === 0) &&
210
- !loading &&
211
- orders.filter((order: any) => orderStatus.includes(order.status)).length === 0 &&
212
- (
213
- <NotFoundSource
214
- content={t('NO_RESULTS_FOUND', 'Sorry, no results found')}
215
- image={imageFails}
216
- conditioned
217
- />
218
- )}
219
227
  </>
220
228
  )}
221
- {isBusiness && !!businessesSearchList && businesses?.loading && (
229
+ {isBusiness && !!businessesSearchList && businesses?.loading && (
222
230
  <ScrollView horizontal>
223
231
  <BusinessControllerSkeletons paginationProps={businessPaginationProps} />
224
232
  </ScrollView>
@@ -228,6 +236,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
228
236
  onNavigationRedirect={onNavigationRedirect}
229
237
  isBusinessesSearchList={!!businessesSearchList}
230
238
  businesses={businesses}
239
+ handleUpdateBusinesses={handleUpdateBusinesses}
231
240
  />
232
241
  )}
233
242
 
@@ -260,38 +269,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
260
269
  )}
261
270
  </>
262
271
  )}
263
- {loading && !hideOrders && (
264
- <>
265
- {!activeOrders ? (
266
- <Placeholder style={{ marginTop: 30 }} Animation={Fade}>
267
- <View style={{ width: '100%', flexDirection: 'row' }}>
268
- <PlaceholderLine width={20} height={70} style={{ marginRight: 20, marginBottom: 35 }} />
269
- <Placeholder>
270
- <PlaceholderLine width={30} style={{ marginTop: 5 }} />
271
- <PlaceholderLine width={50} />
272
- <PlaceholderLine width={70} />
273
- </Placeholder>
274
- </View>
275
- </Placeholder>
276
- ) : (
277
- <View style={{ marginTop: 30 }}>
278
- {[...Array(5)].map((item, i) => (
279
- <Placeholder key={i} Animation={Fade}>
280
- <View style={{ width: '100%', flexDirection: 'row' }}>
281
- <PlaceholderLine width={20} height={70} style={{ marginRight: 20, marginBottom: 20 }} />
282
- <Placeholder>
283
- <PlaceholderLine width={30} style={{ marginTop: 5 }} />
284
- <PlaceholderLine width={50} />
285
- <PlaceholderLine width={20} />
286
- </Placeholder>
287
- </View>
288
- </Placeholder>
289
- ))}
290
- </View>
291
- )}
292
- </>
293
- )}
294
- {!loading && !error && orders.length > 0 && !hideOrders && (
272
+ {!error && orders.length > 0 && !hideOrders && (
295
273
  preOrders ? (
296
274
  <ActiveOrders
297
275
  orders={orders.filter((order: any) => orderStatus.includes(order.status))}
@@ -323,9 +301,41 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
323
301
  onNavigationRedirect={onNavigationRedirect}
324
302
  handleReorder={handleReorder}
325
303
  handleUpdateOrderList={handleUpdateOrderList}
304
+ loading={loading}
326
305
  />
327
306
  )
328
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
+ )}
329
339
  </>
330
340
  )
331
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`
@@ -45,7 +45,7 @@ const PaymentOptionWalletUI = (props: any) => {
45
45
  new Array(walletsState.result?.length).fill(false)
46
46
  );
47
47
 
48
- const creditBalance: any = (wallet: any) => ` = ${parsePrice(wallet.balance / wallet.redemption_rate, { isTruncable: true })}`
48
+ const creditBalance: any = (wallet: any) => ` = ${parsePrice(wallet.balance / wallet.redemption_rate)}`
49
49
 
50
50
  const walletName: any = {
51
51
  cash: {
@@ -87,65 +87,65 @@ const PaymentOptionWalletUI = (props: any) => {
87
87
  {!walletsState.loading &&
88
88
  !walletsState.error &&
89
89
  walletsState.result?.length > 0 &&
90
- (
91
- <>
92
- {walletsState.result?.map((wallet: any, idx: any) => wallet.valid && wallet.balance >= 0 && walletName[wallet.type]?.isActive && (
93
- <Container
94
- key={wallet.id}
95
- isBottomBorder={idx === walletsState.result?.filter((wallet: any) => wallet.valid)?.length - 1}
96
- onPress={() => handleOnChange(idx, wallet)}
97
- disabled={(cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0}
98
- >
99
- <SectionLeft>
100
- {checkedState[idx] ? (
101
- <MaterialCommunityIcons
102
- name="checkbox-marked"
103
- size={25}
104
- color={theme.colors.primary}
105
- />
106
- ) : (
107
- <MaterialCommunityIcons
108
- name="checkbox-blank-outline"
109
- size={25}
110
- color={theme.colors.disabled}
111
- />
112
- )}
113
- <View style={{ alignItems: 'baseline', marginLeft: 5 }}>
114
- <View>
115
- <OText
116
- style={((cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0) ? {
117
- color: theme.colors.disabled
118
- } : {}}
119
- >
120
- {walletName[wallet.type]?.name}
121
- </OText>
122
- </View>
90
+ (
91
+ <>
92
+ {walletsState.result?.map((wallet: any, idx: any) => wallet.valid && wallet.balance >= 0 && walletName[wallet.type]?.isActive && (
93
+ <Container
94
+ key={wallet.id}
95
+ isBottomBorder={idx === walletsState.result?.filter((wallet: any) => wallet.valid)?.length - 1}
96
+ onPress={() => handleOnChange(idx, wallet)}
97
+ disabled={(cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0}
98
+ >
99
+ <SectionLeft>
100
+ {checkedState[idx] ? (
101
+ <MaterialCommunityIcons
102
+ name="checkbox-marked"
103
+ size={25}
104
+ color={theme.colors.primary}
105
+ />
106
+ ) : (
107
+ <MaterialCommunityIcons
108
+ name="checkbox-blank-outline"
109
+ size={25}
110
+ color={theme.colors.disabled}
111
+ />
112
+ )}
113
+ <View style={{ alignItems: 'baseline', marginLeft: 5 }}>
114
+ <View>
115
+ <OText
116
+ style={((cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0) ?{
117
+ color: theme.colors.disabled
118
+ } : {}}
119
+ >
120
+ {walletName[wallet.type]?.name}
121
+ </OText>
123
122
  </View>
124
- </SectionLeft>
125
-
126
- <View style={{ maxWidth: '35%', alignItems: 'flex-end' }}>
127
- {wallet.type === 'cash' && (
128
- <OText>
129
- {parsePrice(wallet?.balance, { isTruncable: true })}
123
+ </View>
124
+ </SectionLeft>
125
+
126
+ <View style={{maxWidth: '35%', alignItems: 'flex-end' }}>
127
+ {wallet.type === 'cash' && (
128
+ <OText>
129
+ {parsePrice(wallet?.balance)}
130
+ </OText>
131
+ )}
132
+ {wallet.type === 'credit_point' && (
133
+ <OText>
134
+ <OText color={theme.colors.primary} weight='bold'>
135
+ {`${wallet?.balance} ${t('POINTS', 'Points')}`}
130
136
  </OText>
131
- )}
132
- {wallet.type === 'credit_point' && (
133
137
  <OText>
134
- <OText color={theme.colors.primary} weight='bold'>
135
- {`${wallet?.balance} ${t('POINTS', 'Points')}`}
136
- </OText>
137
- <OText>
138
- {wallet?.balance > 0
139
- ? creditBalance(wallet)
140
- : null}
141
- </OText>
138
+ {wallet?.balance > 0
139
+ ? creditBalance(wallet)
140
+ : null}
142
141
  </OText>
143
- )}
144
- </View>
145
- </Container>
146
- ))}
147
- </>
148
- )}
142
+ </OText>
143
+ )}
144
+ </View>
145
+ </Container>
146
+ ))}
147
+ </>
148
+ )}
149
149
 
150
150
  {walletsState?.loading && (
151
151
  <View>
@@ -75,7 +75,7 @@ const PaymentOptionsUI = (props: any) => {
75
75
  case 'paypal':
76
76
  return theme.images.general.paypal
77
77
  case 'stripe':
78
- return theme.images.general.stripe
78
+ return theme.images.general.creditCard
79
79
  case 'stripe_direct':
80
80
  return theme.images.general.stripecc
81
81
  case 'stripe_connect':
@@ -186,7 +186,7 @@ const PaymentOptionsUI = (props: any) => {
186
186
  )
187
187
  }
188
188
 
189
- const excludeIds: any = [32]; //exclude paypal & connect & redirect
189
+ const excludeIds: any = [32, 66]; //exclude paypal & connect & redirect
190
190
 
191
191
  return (
192
192
  <PMContainer>
@@ -287,7 +287,7 @@ const PaymentOptionsUI = (props: any) => {
287
287
  <StripeCardsList
288
288
  paymethod={isOpenMethod?.paymethod}
289
289
  businessId={props.businessId}
290
- publicKey={isOpenMethod?.paymethod?.credentials.publishable}
290
+ publicKey={isOpenMethod?.paymethod?.credentials?.publishable}
291
291
  payType={paymethodsList?.name}
292
292
  onSelectCard={handlePaymethodDataChange}
293
293
  onNavigationRedirect={onNavigationRedirect}