ordering-ui-react-native 0.16.75 → 0.16.76-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 (216) hide show
  1. package/package.json +6 -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 +10 -10
  7. package/src/components/BusinessesListing/index.tsx +1 -1
  8. package/src/components/LanguageSelector/index.tsx +21 -16
  9. package/src/components/Messages/index.tsx +2 -2
  10. package/src/components/OrderCreating/index.tsx +2 -2
  11. package/src/components/OrdersOption/index.tsx +54 -56
  12. package/src/components/PaymentOptions/index.tsx +298 -347
  13. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  14. package/src/components/SingleProductReview/index.tsx +7 -4
  15. package/src/components/VerifyPhone/styles.tsx +1 -2
  16. package/src/components/shared/OToast.tsx +4 -4
  17. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  18. package/src/utils/index.tsx +2 -1
  19. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  20. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  21. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  22. package/themes/business/src/components/Chat/index.tsx +31 -31
  23. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  24. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  25. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  26. package/themes/business/src/components/LoginForm/index.tsx +332 -140
  27. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  28. package/themes/business/src/components/MapView/index.tsx +14 -3
  29. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  30. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  31. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
  32. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  33. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  34. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  35. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  36. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  37. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  38. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  40. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  41. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  42. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  43. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  44. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  45. package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
  46. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  47. package/themes/business/src/components/ProductItemAccordion/index.tsx +24 -5
  48. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  49. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  50. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  51. package/themes/business/src/components/shared/OLink.tsx +33 -13
  52. package/themes/business/src/components/shared/OText.tsx +8 -2
  53. package/themes/business/src/types/index.tsx +29 -3
  54. package/themes/business/src/utils/index.tsx +26 -0
  55. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  56. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  57. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  58. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  59. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  60. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  61. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  62. package/themes/kiosk/src/components/LoginForm/index.tsx +545 -112
  63. package/themes/kiosk/src/components/LoginForm/styles.tsx +18 -0
  64. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  65. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  66. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  67. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
  68. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  69. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  70. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  71. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  72. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  73. package/themes/kiosk/src/types/index.d.ts +15 -0
  74. package/themes/kiosk/src/utils/index.tsx +15 -0
  75. package/themes/original/index.tsx +8 -0
  76. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  77. package/themes/original/src/components/AddressForm/index.tsx +155 -139
  78. package/themes/original/src/components/AddressList/index.tsx +18 -18
  79. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  80. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  81. package/themes/original/src/components/BusinessBasicInformation/index.tsx +47 -22
  82. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  83. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  84. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  85. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  86. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  87. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  88. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  89. package/themes/original/src/components/BusinessListingSearch/index.tsx +104 -155
  90. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  91. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  92. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  93. package/themes/original/src/components/BusinessProductsList/index.tsx +26 -52
  94. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  95. package/themes/original/src/components/BusinessProductsListing/index.tsx +563 -493
  96. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  97. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  98. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  99. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +116 -81
  100. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  101. package/themes/original/src/components/BusinessesListing/index.tsx +7 -6
  102. package/themes/original/src/components/Cart/index.tsx +75 -40
  103. package/themes/original/src/components/CartContent/index.tsx +80 -18
  104. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  105. package/themes/original/src/components/Checkout/index.tsx +102 -108
  106. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  107. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  108. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  109. package/themes/original/src/components/DriverTips/index.tsx +47 -37
  110. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  111. package/themes/original/src/components/Favorite/index.tsx +7 -4
  112. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  113. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  114. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  115. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  116. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  117. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  118. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  119. package/themes/original/src/components/Help/index.tsx +8 -8
  120. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  121. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  122. package/themes/original/src/components/HelpGuide/index.tsx +13 -12
  123. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  124. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  125. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  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 +98 -41
  131. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  132. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  133. package/themes/original/src/components/Messages/index.tsx +42 -26
  134. package/themes/original/src/components/MomentOption/index.tsx +23 -14
  135. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  136. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  137. package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
  138. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  139. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  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 +7 -6
  143. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  144. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  145. package/themes/original/src/components/Notifications/index.tsx +144 -0
  146. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  147. package/themes/original/src/components/OrderDetails/index.tsx +108 -218
  148. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  149. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  150. package/themes/original/src/components/OrderProgress/index.tsx +81 -105
  151. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  152. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  153. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  154. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +93 -97
  155. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  156. package/themes/original/src/components/OrdersOption/index.tsx +86 -92
  157. package/themes/original/src/components/PageBanner/index.tsx +146 -0
  158. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  159. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  160. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  161. package/themes/original/src/components/PaymentOptions/index.tsx +1 -1
  162. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  163. package/themes/original/src/components/PlaceSpot/index.tsx +16 -6
  164. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  165. package/themes/original/src/components/ProductForm/index.tsx +240 -254
  166. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  167. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  168. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  169. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  170. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  171. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  172. package/themes/original/src/components/ProfessionalProfile/index.tsx +20 -9
  173. package/themes/original/src/components/Promotions/index.tsx +234 -220
  174. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  175. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  176. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  177. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  178. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  179. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  180. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  181. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  182. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  183. package/themes/original/src/components/ServiceForm/index.tsx +360 -265
  184. package/themes/original/src/components/Sessions/index.tsx +11 -8
  185. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  186. package/themes/original/src/components/SignupForm/index.tsx +150 -100
  187. package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
  188. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  189. package/themes/original/src/components/SingleProductCard/index.tsx +116 -79
  190. package/themes/original/src/components/SingleProductCard/styles.tsx +14 -13
  191. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  192. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  193. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  194. package/themes/original/src/components/StripeElementsForm/index.tsx +3 -0
  195. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  196. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  197. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  198. package/themes/original/src/components/UserFormDetails/index.tsx +50 -54
  199. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  200. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  201. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  202. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  203. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  204. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  205. package/themes/original/src/components/Wallets/index.tsx +177 -164
  206. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  207. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  208. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  209. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  210. package/themes/original/src/components/shared/OButton.tsx +9 -4
  211. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  212. package/themes/original/src/components/shared/OInput.tsx +10 -1
  213. package/themes/original/src/layouts/Container.tsx +13 -9
  214. package/themes/original/src/types/index.tsx +42 -7
  215. package/themes/original/src/utils/index.tsx +322 -58
  216. 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 {
@@ -47,6 +47,10 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
47
47
  businessesSearchList,
48
48
  hideOrders,
49
49
  BusinessControllerSkeletons,
50
+ businesses,
51
+ businessPaginationProps,
52
+ handleUpdateProducts,
53
+ handleUpdateBusinesses
50
54
  } = props
51
55
 
52
56
  const theme = useTheme();
@@ -56,46 +60,45 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
56
60
  const [, { showToast }] = useToast()
57
61
  const { loading, error, orders: values } = orderList
58
62
  const [businessLoading, setBusinessLoading] = useState(true)
63
+ const [orders, setOrders] = useState([])
59
64
 
60
65
  const imageFails = activeOrders
61
66
  ? theme.images.general.emptyActiveOrders
62
67
  : theme.images.general.emptyPastOrders
63
68
 
64
- const orders = customArray || values || []
69
+ const _orders = customArray || values || []
70
+ const uniqueOrders: any = []
65
71
 
66
- const getOrderStatus = (s: string) => {
67
- const status = parseInt(s)
68
- const orderStatus = [
69
- { key: 0, value: t('PENDING', 'Pending') },
70
- { key: 1, value: t('COMPLETED', 'Completed') },
71
- { key: 2, value: t('REJECTED', 'Rejected') },
72
- { key: 3, value: t('DRIVER_IN_BUSINESS', 'Driver in business') },
73
- { key: 4, value: t('PREPARATION_COMPLETED', 'Preparation Completed') },
74
- { key: 5, value: t('REJECTED_BY_BUSINESS', 'Rejected by business') },
75
- { key: 6, value: t('REJECTED_BY_DRIVER', 'Rejected by Driver') },
76
- { key: 7, value: t('ACCEPTED_BY_BUSINESS', 'Accepted by business') },
77
- { key: 8, value: t('ACCEPTED_BY_DRIVER', 'Accepted by driver') },
78
- { key: 9, value: t('PICK_UP_COMPLETED_BY_DRIVER', 'Pick up completed by driver') },
79
- { key: 10, value: t('PICK_UP_FAILED_BY_DRIVER', 'Pick up Failed by driver') },
80
- { key: 11, value: t('DELIVERY_COMPLETED_BY_DRIVER', 'Delivery completed by driver') },
81
- { key: 12, value: t('DELIVERY_FAILED_BY_DRIVER', 'Delivery Failed by driver') },
82
- { key: 13, value: t('PREORDER', 'PreOrder') },
83
- { key: 14, value: t('ORDER_NOT_READY', 'Order not ready') },
84
- { key: 15, value: t('ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER', 'Order picked up completed by customer') },
85
- { key: 16, value: t('CANCELLED_BY_CUSTOMER', 'Cancelled by customer') },
86
- { key: 17, value: t('ORDER_NOT_PICKEDUP_BY_CUSTOMER', 'Order not picked up by customer') },
87
- { key: 18, value: t('DRIVER_ALMOST_ARRIVED_TO_BUSINESS', 'Driver almost arrived to business') },
88
- { key: 19, value: t('DRIVER_ALMOST_ARRIVED_TO_CUSTOMER', 'Driver almost arrived to customer') },
89
- { key: 20, value: t('ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS', 'Customer almost arrived to business') },
90
- { key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') },
91
- { key: 22, value: t('ORDER_LOOKING_FOR_DRIVER', 'Looking for driver') },
92
- { key: 23, value: t('ORDER_DRIVER_ON_WAY', 'Driver on way') }
93
- ]
94
-
95
- const objectStatus = orderStatus.find((o) => o.key === status)
96
-
97
- return objectStatus && objectStatus
98
- }
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])
99
102
 
100
103
  const onProductClick = (product: any) => {
101
104
  if (product?.product_id && product?.category_id && product?.businessId &&
@@ -141,7 +144,9 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
141
144
 
142
145
  useFocusEffect(
143
146
  React.useCallback(() => {
144
- loadOrders(false, false, false, true)
147
+ if (!businessesSearchList) {
148
+ loadOrders(false, false, false, true)
149
+ }
145
150
  }, [navigation])
146
151
  )
147
152
 
@@ -155,14 +160,14 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
155
160
  useEffect(() => {
156
161
  if (loading) return
157
162
 
158
- const updateOrders = orders.filter((order: any) => orderStatus.includes(order.status))
163
+ const updateOrders = _orders.filter((order: any) => orderStatus.includes(order.status))
159
164
 
160
165
  if (activeOrders) {
161
166
  setOrdersLength && setOrdersLength({ ...ordersLength, activeOrdersLength: updateOrders?.length })
162
167
  } else if (!preOrders) {
163
168
  setOrdersLength && setOrdersLength({ ...ordersLength, previousOrdersLength: updateOrders?.length })
164
169
  }
165
- }, [orders, activeOrders, preOrders])
170
+ }, [_orders, activeOrders, preOrders])
166
171
 
167
172
  useEffect(() => {
168
173
  if (refreshOrders) {
@@ -187,7 +192,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
187
192
 
188
193
  </NoOrdersWrapper>
189
194
  )}
190
- {(ordersLength?.activeOrdersLength > 0 || ordersLength?.previousOrdersLength > 0) && (
195
+ {((ordersLength?.activeOrdersLength > 0 && activeOrders) || (ordersLength?.previousOrdersLength > 0 && !activeOrders)) && (
191
196
  <>
192
197
  {((titleContent && ((isBusiness && businessOrderIds?.length > 0) || isProducts)) || !titleContent) && (
193
198
  <OptionTitle titleContent={!!titleContent} isBusinessesSearchList={!!businessesSearchList}>
@@ -200,47 +205,35 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
200
205
  </OText>
201
206
  </OptionTitle>
202
207
  )}
203
-
204
- {!(ordersLength?.activeOrdersLength === 0 && ordersLength?.previousOrdersLength === 0) &&
205
- !loading &&
206
- orders.filter((order: any) => orderStatus.includes(order.status)).length === 0 &&
207
- (
208
- <NotFoundSource
209
- content={t('NO_RESULTS_FOUND', 'Sorry, no results found')}
210
- image={imageFails}
211
- conditioned
212
- />
213
- )}
214
208
  </>
215
209
  )}
216
- {isBusiness && !!businessesSearchList && businessLoading && businessOrderIds?.length > 0 && (
210
+ {isBusiness && !!businessesSearchList && businesses?.loading && (
217
211
  <ScrollView horizontal>
218
- <BusinessControllerSkeletons />
212
+ <BusinessControllerSkeletons paginationProps={businessPaginationProps} />
219
213
  </ScrollView>
220
214
  )}
221
- {isBusiness && businessOrderIds?.length > 0 && (
215
+ {isBusiness && (
222
216
  <PreviousBusinessOrdered
223
- businessId={businessOrderIds}
224
- businessLoading={businessLoading}
225
- setBusinessLoading={setBusinessLoading}
226
217
  onNavigationRedirect={onNavigationRedirect}
227
- isLoadingOrders={loading}
228
218
  isBusinessesSearchList={!!businessesSearchList}
219
+ businesses={businesses}
220
+ handleUpdateBusinesses={handleUpdateBusinesses}
229
221
  />
230
222
  )}
231
223
 
232
- {isProducts && (
224
+ {isProducts && !loading && (
233
225
  <PreviousProductsOrdered
234
226
  products={products}
235
227
  onProductClick={onProductClick}
228
+ handleUpdateProducts={handleUpdateProducts}
236
229
  isBusinessesSearchList={!!businessesSearchList}
237
230
  />
238
231
  )}
239
232
  {(loading && isProducts) && (
240
233
  <>
241
- {[...Array(4).keys()].map(
234
+ {[...Array(!!businessesSearchList ? 1 : 4).keys()].map(
242
235
  (item, i) => (
243
- <Placeholder key={i} style={{ padding: 5, paddingLeft: 40 }} Animation={Fade}>
236
+ <Placeholder key={i} style={{ padding: 5, paddingLeft: !!businessesSearchList ? 0 : 40, marginBottom: !!businessesSearchList ? 38 : 0 }} Animation={Fade}>
244
237
  <View style={{ flexDirection: 'row' }}>
245
238
  <PlaceholderLine
246
239
  width={24}
@@ -257,38 +250,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
257
250
  )}
258
251
  </>
259
252
  )}
260
- {loading && !hideOrders && (
261
- <>
262
- {!activeOrders ? (
263
- <Placeholder style={{ marginTop: 30 }} Animation={Fade}>
264
- <View style={{ width: '100%', flexDirection: 'row' }}>
265
- <PlaceholderLine width={20} height={70} style={{ marginRight: 20, marginBottom: 35 }} />
266
- <Placeholder>
267
- <PlaceholderLine width={30} style={{ marginTop: 5 }} />
268
- <PlaceholderLine width={50} />
269
- <PlaceholderLine width={70} />
270
- </Placeholder>
271
- </View>
272
- </Placeholder>
273
- ) : (
274
- <View style={{ marginTop: 30 }}>
275
- {[...Array(5)].map((item, i) => (
276
- <Placeholder key={i} Animation={Fade}>
277
- <View style={{ width: '100%', flexDirection: 'row' }}>
278
- <PlaceholderLine width={20} height={70} style={{ marginRight: 20, marginBottom: 20 }} />
279
- <Placeholder>
280
- <PlaceholderLine width={30} style={{ marginTop: 5 }} />
281
- <PlaceholderLine width={50} />
282
- <PlaceholderLine width={20} />
283
- </Placeholder>
284
- </View>
285
- </Placeholder>
286
- ))}
287
- </View>
288
- )}
289
- </>
290
- )}
291
- {!loading && !error && orders.length > 0 && !hideOrders && (
253
+ {!error && orders.length > 0 && !hideOrders && (
292
254
  preOrders ? (
293
255
  <ActiveOrders
294
256
  orders={orders.filter((order: any) => orderStatus.includes(order.status))}
@@ -320,9 +282,41 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
320
282
  onNavigationRedirect={onNavigationRedirect}
321
283
  handleReorder={handleReorder}
322
284
  handleUpdateOrderList={handleUpdateOrderList}
285
+ loading={loading}
323
286
  />
324
287
  )
325
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
+ )}
326
320
  </>
327
321
  )
328
322
  }
@@ -0,0 +1,146 @@
1
+ import React, { useRef } from 'react'
2
+ import { useUtils, 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 carouselRef = useRef(null)
20
+
21
+ const windowWidth = Dimensions.get('window').width;
22
+
23
+ const styles = StyleSheet.create({
24
+ mainSwiper: {
25
+ height: 300,
26
+ },
27
+ swiperButton: {
28
+ position: 'absolute',
29
+ zIndex: 100,
30
+ alignItems: 'center',
31
+ justifyContent: 'center',
32
+ width: 32,
33
+ height: 32,
34
+ borderRadius: 16,
35
+ backgroundColor: 'rgba(208,208,208,0.5)'
36
+ },
37
+ sliderWrapper: {
38
+ width: '100%',
39
+ height: 300
40
+ }
41
+ })
42
+
43
+ const onRedirect = (route: string, params?: any) => {
44
+ navigation.navigate(route, params)
45
+ }
46
+
47
+ const handleGoToPage = (action: any) => {
48
+ if (!action?.url) return
49
+ let slug
50
+ if (action.type === 'business') {
51
+ slug = action.url.split('store/')[1]
52
+ onRedirect('Business', {
53
+ store: slug
54
+ })
55
+ }
56
+ if (action.type === 'product') {
57
+ slug = action.url.split('store/')[1]?.split('?')[0]
58
+ onRedirect('ProductDetails', {
59
+ businessSlug: slug,
60
+ businessId: action.business_id,
61
+ categoryId: action.category_id,
62
+ productId: action.product_id
63
+ })
64
+ }
65
+ }
66
+
67
+ const renderItem = ({ item, index }) => {
68
+ return (
69
+ <TouchableOpacity
70
+ onPress={() => handleGoToPage(item.action)}
71
+ >
72
+ <View style={styles.sliderWrapper}>
73
+ <FastImage
74
+ style={{ height: '100%', width: '100%' }}
75
+ resizeMode='cover'
76
+ source={{ uri: optimizeImage(item.url, 'h_300,c_limit') }}
77
+ />
78
+ </View>
79
+ </TouchableOpacity>
80
+ )
81
+ }
82
+
83
+ return (
84
+ <>
85
+ {pageBannerState.loading ? (
86
+ <PageBannerWrapper>
87
+ <Placeholder
88
+ Animation={Fade}
89
+ >
90
+ <PlaceholderLine
91
+ height={300}
92
+ style={{ marginBottom: 20, borderRadius: 8 }}
93
+ />
94
+ </Placeholder>
95
+ </PageBannerWrapper>
96
+ ) : (
97
+ <>
98
+ {pageBannerState.banner?.items && pageBannerState.banner?.items.length > 0 && (
99
+ <PageBannerWrapper>
100
+ <TouchableOpacity
101
+ style={[styles.swiperButton, { left: 25 }]}
102
+ onPress={() => carouselRef.current.snapToPrev()}
103
+ >
104
+ <IconAntDesign
105
+ name="caretleft"
106
+ color={theme.colors.white}
107
+ size={13}
108
+ />
109
+ </TouchableOpacity>
110
+ <TouchableOpacity
111
+ style={[styles.swiperButton, { right: 25 }]}
112
+ onPress={() => carouselRef.current.snapToNext()}
113
+ >
114
+ <IconAntDesign
115
+ name="caretright"
116
+ color={theme.colors.white}
117
+ size={13}
118
+ />
119
+ </TouchableOpacity>
120
+ <Carousel
121
+ ref={carouselRef}
122
+ loop={pageBannerState.banner?.items.length > 1}
123
+ data={pageBannerState.banner?.items}
124
+ renderItem={renderItem}
125
+ sliderWidth={windowWidth - 80}
126
+ itemWidth={windowWidth - 80}
127
+ inactiveSlideScale={1}
128
+ pagingEnabled
129
+ removeClippedSubviews={false}
130
+ inactiveSlideOpacity={1}
131
+ />
132
+ </PageBannerWrapper>
133
+ )}
134
+ </>
135
+ )}
136
+ </>
137
+ )
138
+ }
139
+
140
+ export const PageBanner = (props: any) => {
141
+ const pageBannerProps = {
142
+ ...props,
143
+ UIComponent: PageBannerUI
144
+ }
145
+ return <PageBannerController {...pageBannerProps} />
146
+ }
@@ -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>
@@ -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]
@@ -102,6 +103,10 @@ const PlaceSpotUI = (props: PlaceSpotParams) => {
102
103
  showToast(ToastType.Error, t('VALIDATION_ERROR_INTEGER', 'The _attribute_ must be an integer.').replace('_attribute_', placeholderText))
103
104
  return
104
105
  }
106
+ if (Number(spotNumber) < 0) {
107
+ showToast(ToastType.Error, t('VALIDATION_MUST_BIGGER_ZERO', '_attribute_ must be bigger than zero').replace('_attribute_', placeholderText))
108
+ return
109
+ }
105
110
  const isVehicle = Object.values(vehicle).every(e => e)
106
111
  const bodyToSend: any = {}
107
112
  spotNumber && (bodyToSend.spot_number = spotNumber)
@@ -131,10 +136,15 @@ const PlaceSpotUI = (props: PlaceSpotParams) => {
131
136
  useEffect(() => {
132
137
  if (spotState?.error?.length > 0) {
133
138
  const errorText = manageErrorsToShow(spotState?.error)
134
- showToast(ToastType.Error, errorText)
139
+ showToast(ToastType.Error, errorText)
135
140
  }
136
141
  }, [spotState?.error])
137
142
 
143
+ const onChangePlaceSpot = (value: string) => {
144
+ setSpotNumber(value)
145
+ setPlaceSpotNumber(value)
146
+ }
147
+
138
148
  return (
139
149
  <PlaceSpotContainer>
140
150
  {isInputMode ? (
@@ -216,12 +226,12 @@ const PlaceSpotUI = (props: PlaceSpotParams) => {
216
226
  value={spotNumber?.toString() ?? ''}
217
227
  placeholder={placeholderText}
218
228
  type='number-pad'
219
- onChange={(value: string) => setSpotNumber(value)}
229
+ onChange={(value: string) => onChangePlaceSpot(value)}
220
230
  style={{
221
231
  borderColor: theme.colors.border,
222
232
  borderRadius: 7.6
223
233
  }}
224
- inputStyle={{ fontSize: 12, color: theme.colors.textNormal }}
234
+ inputStyle={{ fontSize: 12, color: theme.colors.textNormal }}
225
235
  />
226
236
  <View style={{ alignItems: 'flex-start' }}>
227
237
  <OButton
@@ -274,7 +284,7 @@ const PlaceSpotUI = (props: PlaceSpotParams) => {
274
284
  onSelect={(place: any) => handlerChangePlace(place)}
275
285
  placeholder={t('SELECT_YOUR_SPOT', 'Select your spot')}
276
286
  options={getPlaces()}
277
- defaultValue={placesState?.places?.find((place : any) => place?.id === cart?.place_id)}
287
+ defaultValue={placesState?.places?.find((place: any) => place?.id === cart?.place_id)}
278
288
  isModal
279
289
  />
280
290
  </View>