ordering-ui-react-native 0.16.93 → 0.16.94-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 (209) hide show
  1. package/package.json +5 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/styles.tsx +8 -14
  4. package/src/components/BusinessInformation/index.tsx +19 -4
  5. package/src/components/BusinessInformation/styles.tsx +2 -2
  6. package/src/components/BusinessProductsList/index.tsx +1 -1
  7. package/src/components/BusinessesListing/index.tsx +1 -1
  8. package/src/components/OrderCreating/index.tsx +1 -21
  9. package/src/components/OrdersOption/index.tsx +54 -56
  10. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  11. package/src/components/SingleProductReview/index.tsx +7 -4
  12. package/src/components/VerifyPhone/styles.tsx +1 -2
  13. package/src/components/shared/OToast.tsx +4 -4
  14. package/src/utils/index.tsx +2 -1
  15. package/themes/business/index.tsx +2 -0
  16. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  17. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  18. package/themes/business/src/components/BusinessController/index.tsx +2 -3
  19. package/themes/business/src/components/Chat/index.tsx +146 -135
  20. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  21. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  22. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  23. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  24. package/themes/business/src/components/LoginForm/index.tsx +239 -80
  25. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  26. package/themes/business/src/components/MapView/index.tsx +18 -7
  27. package/themes/business/src/components/NewOrderNotification/index.tsx +33 -43
  28. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  29. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +96 -50
  30. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  31. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  32. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  33. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  34. package/themes/business/src/components/OrdersOption/index.tsx +33 -75
  35. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +1 -1
  36. package/themes/business/src/components/PreviousMessages/index.tsx +16 -18
  37. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  38. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  39. package/themes/business/src/components/PreviousOrders/index.tsx +447 -247
  40. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  41. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  42. package/themes/business/src/components/ReviewCustomer/index.tsx +42 -25
  43. package/themes/business/src/components/StoresList/index.tsx +2 -2
  44. package/themes/business/src/components/shared/OLink.tsx +33 -13
  45. package/themes/business/src/components/shared/OModal.tsx +16 -9
  46. package/themes/business/src/components/shared/OText.tsx +8 -2
  47. package/themes/business/src/types/index.tsx +33 -2
  48. package/themes/business/src/utils/index.tsx +53 -0
  49. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  50. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  51. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  52. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  53. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  54. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  55. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  56. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  57. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  58. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  59. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  60. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  61. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
  62. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  63. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  64. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  65. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  66. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  67. package/themes/kiosk/src/types/index.d.ts +13 -0
  68. package/themes/kiosk/src/utils/index.tsx +15 -0
  69. package/themes/original/index.tsx +8 -0
  70. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  71. package/themes/original/src/components/AddressForm/index.tsx +152 -116
  72. package/themes/original/src/components/AddressList/index.tsx +26 -21
  73. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  74. package/themes/original/src/components/AnalyticsSegment/index.tsx +164 -8
  75. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  76. package/themes/original/src/components/BusinessBasicInformation/index.tsx +125 -82
  77. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -4
  78. package/themes/original/src/components/BusinessController/index.tsx +145 -68
  79. package/themes/original/src/components/BusinessController/styles.tsx +22 -9
  80. package/themes/original/src/components/BusinessFeaturedController/index.tsx +4 -2
  81. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  82. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  83. package/themes/original/src/components/BusinessItemAccordion/index.tsx +23 -5
  84. package/themes/original/src/components/BusinessListingSearch/index.tsx +52 -24
  85. package/themes/original/src/components/BusinessPreorder/index.tsx +96 -15
  86. package/themes/original/src/components/BusinessProductsList/index.tsx +20 -11
  87. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  88. package/themes/original/src/components/BusinessProductsListing/index.tsx +617 -490
  89. package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -13
  90. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -3
  91. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  92. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +97 -77
  93. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  94. package/themes/original/src/components/BusinessesListing/index.tsx +6 -6
  95. package/themes/original/src/components/Cart/index.tsx +93 -43
  96. package/themes/original/src/components/CartContent/index.tsx +77 -15
  97. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  98. package/themes/original/src/components/Checkout/index.tsx +294 -175
  99. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  100. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  101. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  102. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  103. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  104. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  105. package/themes/original/src/components/Favorite/index.tsx +7 -4
  106. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  107. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  108. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  109. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  110. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  111. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  112. package/themes/original/src/components/Help/index.tsx +8 -8
  113. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  114. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  115. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  116. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  117. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  118. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  119. package/themes/original/src/components/Home/index.tsx +13 -4
  120. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  121. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  122. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  123. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  124. package/themes/original/src/components/LoginForm/index.tsx +43 -19
  125. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  126. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  127. package/themes/original/src/components/Messages/index.tsx +32 -10
  128. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  129. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  130. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  131. package/themes/original/src/components/MultiCheckout/index.tsx +210 -79
  132. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  133. package/themes/original/src/components/MultiOrdersDetails/index.tsx +67 -20
  134. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  135. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  136. package/themes/original/src/components/NavBar/index.tsx +6 -11
  137. package/themes/original/src/components/NotFoundSource/index.tsx +1 -1
  138. package/themes/original/src/components/Notifications/index.tsx +144 -0
  139. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  140. package/themes/original/src/components/OrderDetails/OrderEta.tsx +59 -0
  141. package/themes/original/src/components/OrderDetails/index.tsx +110 -221
  142. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  143. package/themes/original/src/components/OrderItAgain/index.tsx +47 -43
  144. package/themes/original/src/components/OrderProgress/index.tsx +74 -112
  145. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  146. package/themes/original/src/components/OrderSummary/index.tsx +52 -17
  147. package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -3
  148. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +28 -19
  149. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  150. package/themes/original/src/components/OrdersOption/index.tsx +76 -83
  151. package/themes/original/src/components/PageBanner/index.tsx +171 -0
  152. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  153. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  154. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  155. package/themes/original/src/components/PaymentOptions/index.tsx +2 -2
  156. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  157. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  158. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  159. package/themes/original/src/components/ProductForm/index.tsx +247 -269
  160. package/themes/original/src/components/ProductForm/styles.tsx +4 -7
  161. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  162. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  163. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  164. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  165. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  166. package/themes/original/src/components/ProfessionalProfile/index.tsx +54 -14
  167. package/themes/original/src/components/Promotions/index.tsx +234 -220
  168. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  169. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  170. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  171. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  172. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  173. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  174. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  175. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  176. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  177. package/themes/original/src/components/ServiceForm/index.tsx +377 -270
  178. package/themes/original/src/components/Sessions/index.tsx +11 -8
  179. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  180. package/themes/original/src/components/SignupForm/index.tsx +79 -66
  181. package/themes/original/src/components/SingleOrderCard/index.tsx +126 -57
  182. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  183. package/themes/original/src/components/SingleProductCard/index.tsx +111 -49
  184. package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
  185. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  186. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  187. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  188. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  189. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -218
  190. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  191. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  192. package/themes/original/src/components/UserFormDetails/index.tsx +53 -54
  193. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  194. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  195. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  196. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  197. package/themes/original/src/components/Wallets/index.tsx +20 -19
  198. package/themes/original/src/components/Wallets/styles.tsx +2 -0
  199. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  200. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  201. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  202. package/themes/original/src/components/shared/OButton.tsx +6 -2
  203. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  204. package/themes/original/src/components/shared/OInput.tsx +10 -1
  205. package/themes/original/src/components/shared/OModal.tsx +3 -3
  206. package/themes/original/src/layouts/Container.tsx +13 -9
  207. package/themes/original/src/types/index.tsx +45 -7
  208. package/themes/original/src/utils/index.tsx +359 -58
  209. 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 } 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 &&
@@ -159,14 +160,14 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
159
160
  useEffect(() => {
160
161
  if (loading) return
161
162
 
162
- const updateOrders = orders.filter((order: any) => orderStatus.includes(order.status))
163
+ const updateOrders = _orders.filter((order: any) => orderStatus.includes(order.status))
163
164
 
164
165
  if (activeOrders) {
165
166
  setOrdersLength && setOrdersLength({ ...ordersLength, activeOrdersLength: updateOrders?.length })
166
167
  } else if (!preOrders) {
167
168
  setOrdersLength && setOrdersLength({ ...ordersLength, previousOrdersLength: updateOrders?.length })
168
169
  }
169
- }, [orders, activeOrders, preOrders])
170
+ }, [_orders, activeOrders, preOrders])
170
171
 
171
172
  useEffect(() => {
172
173
  if (refreshOrders) {
@@ -191,7 +192,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
191
192
 
192
193
  </NoOrdersWrapper>
193
194
  )}
194
- {(ordersLength?.activeOrdersLength > 0 || ordersLength?.previousOrdersLength > 0) && (
195
+ {((ordersLength?.activeOrdersLength > 0 && activeOrders) || (ordersLength?.previousOrdersLength > 0 && !activeOrders)) && (
195
196
  <>
196
197
  {((titleContent && ((isBusiness && businessOrderIds?.length > 0) || isProducts)) || !titleContent) && (
197
198
  <OptionTitle titleContent={!!titleContent} isBusinessesSearchList={!!businessesSearchList}>
@@ -204,20 +205,9 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
204
205
  </OText>
205
206
  </OptionTitle>
206
207
  )}
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
208
  </>
219
209
  )}
220
- {isBusiness && !!businessesSearchList && businesses?.loading && (
210
+ {isBusiness && !!businessesSearchList && businesses?.loading && (
221
211
  <ScrollView horizontal>
222
212
  <BusinessControllerSkeletons paginationProps={businessPaginationProps} />
223
213
  </ScrollView>
@@ -227,6 +217,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
227
217
  onNavigationRedirect={onNavigationRedirect}
228
218
  isBusinessesSearchList={!!businessesSearchList}
229
219
  businesses={businesses}
220
+ handleUpdateBusinesses={handleUpdateBusinesses}
230
221
  />
231
222
  )}
232
223
 
@@ -234,6 +225,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
234
225
  <PreviousProductsOrdered
235
226
  products={products}
236
227
  onProductClick={onProductClick}
228
+ handleUpdateProducts={handleUpdateProducts}
237
229
  isBusinessesSearchList={!!businessesSearchList}
238
230
  />
239
231
  )}
@@ -258,38 +250,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
258
250
  )}
259
251
  </>
260
252
  )}
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 && (
253
+ {!error && orders.length > 0 && !hideOrders && (
293
254
  preOrders ? (
294
255
  <ActiveOrders
295
256
  orders={orders.filter((order: any) => orderStatus.includes(order.status))}
@@ -321,9 +282,41 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
321
282
  onNavigationRedirect={onNavigationRedirect}
322
283
  handleReorder={handleReorder}
323
284
  handleUpdateOrderList={handleUpdateOrderList}
285
+ loading={loading}
324
286
  />
325
287
  )
326
288
  )}
289
+ {loading && !hideOrders && (
290
+ <>
291
+ {!activeOrders ? (
292
+ <Placeholder style={{ marginTop: 30 }} Animation={Fade}>
293
+ <View style={{ width: '100%', flexDirection: 'row' }}>
294
+ <PlaceholderLine width={20} height={70} style={{ marginRight: 20, marginBottom: 35 }} />
295
+ <Placeholder>
296
+ <PlaceholderLine width={30} style={{ marginTop: 5 }} />
297
+ <PlaceholderLine width={50} />
298
+ <PlaceholderLine width={70} />
299
+ </Placeholder>
300
+ </View>
301
+ </Placeholder>
302
+ ) : (
303
+ <View style={{ marginTop: 30 }}>
304
+ {[...Array(5)].map((item, i) => (
305
+ <Placeholder key={i} Animation={Fade}>
306
+ <View style={{ width: '100%', flexDirection: 'row' }}>
307
+ <PlaceholderLine width={20} height={70} style={{ marginRight: 20, marginBottom: 20 }} />
308
+ <Placeholder>
309
+ <PlaceholderLine width={30} style={{ marginTop: 5 }} />
310
+ <PlaceholderLine width={50} />
311
+ <PlaceholderLine width={20} />
312
+ </Placeholder>
313
+ </View>
314
+ </Placeholder>
315
+ ))}
316
+ </View>
317
+ )}
318
+ </>
319
+ )}
327
320
  </>
328
321
  )
329
322
  }
@@ -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>
@@ -124,7 +124,7 @@ export const PhoneInputNumber = (props: PhoneInputParams) => {
124
124
  flagButtonStyle={flagStyle}
125
125
  countryPickerButtonStyle={{ ...style.countryBtn, ...boxStyle ? boxStyle : {} }}
126
126
  placeholder={t('PHONE_NUMBER', 'Phone Number')}
127
- textInputProps={{ autoCompleteType: 'tel', ref: forwardRef, ...textInputProps }}
127
+ textInputProps={{ keyboardType: 'number-pad', autoCompleteType: 'tel', textContentType: 'telephoneNumber', dataDetectorTypes: 'phoneNumber', ref: forwardRef, ...textInputProps }}
128
128
  containerStyle={{ width: '100%' }}
129
129
  renderDropdownImage={noDropIcon ? <View /> : <OIcon src={theme.images.general.arrow_down} width={13} color={'#B1BCCC'}></OIcon>}
130
130
  />
@@ -23,13 +23,14 @@ const PlaceSpotUI = (props: PlaceSpotParams) => {
23
23
  isInputMode,
24
24
  setSpotNumber,
25
25
  setVehicle,
26
- handleChangeSpot
26
+ handleChangeSpot,
27
+ setPlaceSpotNumber
27
28
  } = props
28
29
 
29
30
  const theme = useTheme()
30
31
  const [, t] = useLanguage()
31
32
  const [orderState] = useOrder()
32
- const [, { showToast }] = useToast();
33
+ const [, { showToast }] = useToast();
33
34
 
34
35
  const [placeGroupSelected, setPlaceGroupSelected] = useState<any>(null)
35
36
  const vehicleInputAllowed = [4, 5]
@@ -135,10 +136,15 @@ const PlaceSpotUI = (props: PlaceSpotParams) => {
135
136
  useEffect(() => {
136
137
  if (spotState?.error?.length > 0) {
137
138
  const errorText = manageErrorsToShow(spotState?.error)
138
- showToast(ToastType.Error, errorText)
139
+ showToast(ToastType.Error, errorText)
139
140
  }
140
141
  }, [spotState?.error])
141
142
 
143
+ const onChangePlaceSpot = (value: string) => {
144
+ setSpotNumber(value)
145
+ setPlaceSpotNumber(value)
146
+ }
147
+
142
148
  return (
143
149
  <PlaceSpotContainer>
144
150
  {isInputMode ? (
@@ -220,12 +226,12 @@ const PlaceSpotUI = (props: PlaceSpotParams) => {
220
226
  value={spotNumber?.toString() ?? ''}
221
227
  placeholder={placeholderText}
222
228
  type='number-pad'
223
- onChange={(value: string) => setSpotNumber(value)}
229
+ onChange={(value: string) => onChangePlaceSpot(value)}
224
230
  style={{
225
231
  borderColor: theme.colors.border,
226
232
  borderRadius: 7.6
227
233
  }}
228
- inputStyle={{ fontSize: 12, color: theme.colors.textNormal }}
234
+ inputStyle={{ fontSize: 12, color: theme.colors.textNormal }}
229
235
  />
230
236
  <View style={{ alignItems: 'flex-start' }}>
231
237
  <OButton
@@ -278,7 +284,7 @@ const PlaceSpotUI = (props: PlaceSpotParams) => {
278
284
  onSelect={(place: any) => handlerChangePlace(place)}
279
285
  placeholder={t('SELECT_YOUR_SPOT', 'Select your spot')}
280
286
  options={getPlaces()}
281
- defaultValue={placesState?.places?.find((place : any) => place?.id === cart?.place_id)}
287
+ defaultValue={placesState?.places?.find((place: any) => place?.id === cart?.place_id)}
282
288
  isModal
283
289
  />
284
290
  </View>