ordering-ui-react-native 0.17.97 → 0.17.98-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 (224) hide show
  1. package/package.json +9 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +10 -9
  4. package/src/components/BusinessesListing/index.tsx +1 -1
  5. package/src/components/OrderCreating/index.tsx +0 -20
  6. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  7. package/src/components/PhoneInputNumber/index.tsx +6 -2
  8. package/src/components/StripeMethodForm/index.tsx +136 -102
  9. package/src/components/VerifyPhone/styles.tsx +1 -2
  10. package/src/components/shared/OToast.tsx +3 -2
  11. package/src/types/index.tsx +5 -0
  12. package/src/utils/index.tsx +7 -2
  13. package/themes/business/index.tsx +2 -0
  14. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +36 -26
  15. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  16. package/themes/business/src/components/Chat/index.tsx +163 -123
  17. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  18. package/themes/business/src/components/DriverSchedule/index.tsx +45 -8
  19. package/themes/business/src/components/FloatingButton/index.tsx +34 -31
  20. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  21. package/themes/business/src/components/LoginForm/index.tsx +5 -2
  22. package/themes/business/src/components/MapView/index.tsx +14 -10
  23. package/themes/business/src/components/MessagesOption/index.tsx +22 -94
  24. package/themes/business/src/components/NewOrderNotification/index.tsx +123 -96
  25. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  26. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  27. package/themes/business/src/components/OrderDetails/Delivery.tsx +209 -15
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +84 -37
  29. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +87 -66
  30. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +200 -0
  31. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  32. package/themes/business/src/components/OrderMessage/index.tsx +19 -18
  33. package/themes/business/src/components/OrderSummary/index.tsx +114 -123
  34. package/themes/business/src/components/OrdersListManager/index.tsx +7 -2
  35. package/themes/business/src/components/OrdersListManager/utils.tsx +1 -1
  36. package/themes/business/src/components/OrdersOption/index.tsx +60 -47
  37. package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
  38. package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
  39. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +21 -29
  40. package/themes/business/src/components/PreviousOrders/OrderList.tsx +93 -0
  41. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
  42. package/themes/business/src/components/PreviousOrders/index.tsx +198 -221
  43. package/themes/business/src/components/PreviousOrders/styles.tsx +10 -0
  44. package/themes/business/src/components/ProductItemAccordion/index.tsx +7 -1
  45. package/themes/business/src/components/ReviewCustomer/index.tsx +18 -13
  46. package/themes/business/src/components/StoresList/index.tsx +3 -4
  47. package/themes/business/src/components/UserProfileForm/index.tsx +14 -15
  48. package/themes/business/src/components/WebsocketStatus/index.tsx +171 -0
  49. package/themes/business/src/components/WebsocketStatus/styles.tsx +28 -0
  50. package/themes/business/src/components/shared/OModal.tsx +16 -9
  51. package/themes/business/src/types/index.tsx +24 -10
  52. package/themes/business/src/utils/index.tsx +29 -2
  53. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  54. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  55. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  56. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  57. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  58. package/themes/kiosk/src/components/LoginForm/index.tsx +7 -5
  59. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  60. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  61. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  62. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +2 -2
  63. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  64. package/themes/original/index.tsx +7 -3
  65. package/themes/original/src/components/AddressDetails/index.tsx +19 -3
  66. package/themes/original/src/components/AddressForm/index.tsx +33 -15
  67. package/themes/original/src/components/AddressList/index.tsx +5 -8
  68. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  69. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  70. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  71. package/themes/original/src/components/BusinessBasicInformation/index.tsx +72 -36
  72. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
  73. package/themes/original/src/components/BusinessController/index.tsx +35 -44
  74. package/themes/original/src/components/BusinessController/styles.tsx +12 -5
  75. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  76. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  77. package/themes/original/src/components/BusinessInformation/index.tsx +140 -85
  78. package/themes/original/src/components/BusinessItemAccordion/index.tsx +21 -23
  79. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +1 -1
  80. package/themes/original/src/components/BusinessListingSearch/index.tsx +346 -340
  81. package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -18
  82. package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
  83. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
  84. package/themes/original/src/components/BusinessProductsList/index.tsx +15 -7
  85. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  86. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  87. package/themes/original/src/components/BusinessProductsListing/index.tsx +137 -32
  88. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -3
  89. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  90. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +69 -0
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +406 -0
  92. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListing.tsx +76 -0
  93. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +36 -403
  94. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  95. package/themes/original/src/components/Cart/index.tsx +44 -81
  96. package/themes/original/src/components/CartContent/index.tsx +70 -30
  97. package/themes/original/src/components/CartContent/styles.tsx +6 -6
  98. package/themes/original/src/components/Checkout/index.tsx +262 -35
  99. package/themes/original/src/components/CitiesControl/index.tsx +1 -1
  100. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  101. package/themes/original/src/components/DatePicker/index.tsx +17 -0
  102. package/themes/original/src/components/DatePicker/styles.tsx +20 -0
  103. package/themes/original/src/components/DriverTips/index.tsx +12 -4
  104. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  105. package/themes/original/src/components/Favorite/index.tsx +1 -5
  106. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  107. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +8 -3
  108. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +42 -5
  109. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +2 -0
  110. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +84 -8
  111. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  112. package/themes/original/src/components/GoogleMap/index.tsx +63 -7
  113. package/themes/original/src/components/Home/index.tsx +13 -4
  114. package/themes/original/src/components/LastOrder/index.tsx +2 -1
  115. package/themes/original/src/components/LastOrders/index.tsx +2 -1
  116. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -25
  117. package/themes/original/src/components/LoginForm/index.tsx +64 -34
  118. package/themes/original/src/components/LottieAnimation/index.tsx +88 -63
  119. package/themes/original/src/components/MessageListing/index.tsx +9 -2
  120. package/themes/original/src/components/Messages/index.tsx +15 -4
  121. package/themes/original/src/components/MomentOption/index.tsx +41 -36
  122. package/themes/original/src/components/MomentOption/styles.tsx +0 -15
  123. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  124. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +161 -49
  125. package/themes/original/src/components/MultiCheckout/index.tsx +347 -69
  126. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  127. package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -1
  128. package/themes/original/src/components/MyOrders/index.tsx +12 -1
  129. package/themes/original/src/components/NavBar/index.tsx +20 -13
  130. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  131. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  132. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +21 -5
  133. package/themes/original/src/components/OrderDetails/index.tsx +50 -38
  134. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  135. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  136. package/themes/original/src/components/OrderProgress/index.tsx +34 -25
  137. package/themes/original/src/components/OrderSummary/index.tsx +59 -56
  138. package/themes/original/src/components/OrderTypeSelector/index.tsx +5 -6
  139. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +13 -13
  140. package/themes/original/src/components/OrdersOption/index.tsx +43 -20
  141. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  142. package/themes/original/src/components/PageBanner/index.tsx +65 -29
  143. package/themes/original/src/components/PageBanner/styles.tsx +0 -3
  144. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  145. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
  146. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  147. package/themes/original/src/components/PaymentOptions/index.tsx +100 -34
  148. package/themes/original/src/components/PhoneInputNumber/index.tsx +18 -4
  149. package/themes/original/src/components/ProductForm/index.tsx +65 -34
  150. package/themes/original/src/components/ProductForm/styles.tsx +3 -3
  151. package/themes/original/src/components/ProductItemAccordion/index.tsx +8 -6
  152. package/themes/original/src/components/ProductOptionSubOption/index.tsx +49 -20
  153. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +10 -9
  154. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  155. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  156. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  157. package/themes/original/src/components/Promotions/index.tsx +2 -2
  158. package/themes/original/src/components/Promotions/styles.tsx +3 -1
  159. package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
  160. package/themes/original/src/components/ScheduleAccordion/index.tsx +3 -3
  161. package/themes/original/src/components/ServiceForm/index.tsx +40 -20
  162. package/themes/original/src/components/SignupForm/index.tsx +27 -16
  163. package/themes/original/src/components/SingleOrderCard/index.tsx +44 -20
  164. package/themes/original/src/components/SingleOrderCard/styles.tsx +1 -1
  165. package/themes/original/src/components/SingleProductCard/index.tsx +13 -10
  166. package/themes/original/src/components/SingleProductCard/styles.tsx +8 -3
  167. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  168. package/themes/original/src/components/StripeCardsList/index.tsx +61 -5
  169. package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
  170. package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
  171. package/themes/original/src/components/UpsellingProducts/index.tsx +3 -8
  172. package/themes/original/src/components/UserDetails/index.tsx +3 -1
  173. package/themes/original/src/components/UserFormDetails/index.tsx +84 -19
  174. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  175. package/themes/original/src/components/UserProfile/index.tsx +7 -25
  176. package/themes/original/src/components/UserProfileForm/index.tsx +30 -31
  177. package/themes/original/src/components/UserVerification/index.tsx +55 -50
  178. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  179. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  180. package/themes/original/src/components/Wallets/index.tsx +51 -61
  181. package/themes/original/src/components/Wallets/styles.tsx +2 -4
  182. package/themes/original/src/components/shared/OButton.tsx +3 -3
  183. package/themes/original/src/components/shared/OInput.tsx +4 -5
  184. package/themes/original/src/components/shared/OModal.tsx +3 -3
  185. package/themes/original/src/config/constants.tsx +0 -10
  186. package/themes/original/src/types/index.tsx +31 -15
  187. package/themes/original/src/utils/index.tsx +180 -13
  188. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  189. package/src/navigators/BottomNavigator.tsx +0 -117
  190. package/src/navigators/CheckoutNavigator.tsx +0 -66
  191. package/src/navigators/HomeNavigator.tsx +0 -202
  192. package/src/navigators/NavigationRef.tsx +0 -7
  193. package/src/navigators/RootNavigator.tsx +0 -269
  194. package/src/pages/Account.tsx +0 -34
  195. package/src/pages/AddressForm.tsx +0 -62
  196. package/src/pages/AddressList.tsx +0 -24
  197. package/src/pages/BusinessProductsList.tsx +0 -81
  198. package/src/pages/BusinessesListing.tsx +0 -43
  199. package/src/pages/CartList.tsx +0 -49
  200. package/src/pages/Checkout.tsx +0 -101
  201. package/src/pages/ForgotPassword.tsx +0 -24
  202. package/src/pages/Help.tsx +0 -23
  203. package/src/pages/HelpAccountAndPayment.tsx +0 -23
  204. package/src/pages/HelpGuide.tsx +0 -23
  205. package/src/pages/HelpOrder.tsx +0 -23
  206. package/src/pages/Home.tsx +0 -36
  207. package/src/pages/IntroductoryTutorial.tsx +0 -170
  208. package/src/pages/Login.tsx +0 -47
  209. package/src/pages/MomentOption.tsx +0 -30
  210. package/src/pages/MultiCheckout.tsx +0 -31
  211. package/src/pages/MultiOrdersDetails.tsx +0 -27
  212. package/src/pages/MyOrders.tsx +0 -40
  213. package/src/pages/NetworkError.tsx +0 -24
  214. package/src/pages/NotFound.tsx +0 -22
  215. package/src/pages/OrderDetails.tsx +0 -25
  216. package/src/pages/ProductDetails.tsx +0 -55
  217. package/src/pages/Profile.tsx +0 -36
  218. package/src/pages/ReviewDriver.tsx +0 -30
  219. package/src/pages/ReviewOrder.tsx +0 -32
  220. package/src/pages/ReviewProducts.tsx +0 -30
  221. package/src/pages/Sessions.tsx +0 -22
  222. package/src/pages/Signup.tsx +0 -53
  223. package/src/pages/SpinnerLoader.tsx +0 -10
  224. package/src/pages/Splash.tsx +0 -21
@@ -20,12 +20,11 @@ import {
20
20
 
21
21
  import { ProductItemAccordion } from '../ProductItemAccordion';
22
22
  import { CouponControl } from '../CouponControl';
23
- import { OInput, OModal, OText } from '../shared';
23
+ import { OInput, OModal, OText, OAlert } from '../shared';
24
24
  import { verifyDecimals } from '../../utils';
25
25
  import AntIcon from 'react-native-vector-icons/AntDesign'
26
26
  import { TaxInformation } from '../TaxInformation';
27
27
  import { TouchableOpacity } from 'react-native';
28
- import { OAlert } from '../../../../../src/components/shared'
29
28
  import { MomentOption } from '../MomentOption';
30
29
 
31
30
  const OrderSummaryUI = (props: any) => {
@@ -46,6 +45,8 @@ const OrderSummaryUI = (props: any) => {
46
45
  preorderMaximumDays,
47
46
  preorderMinimumDays,
48
47
  cateringTypes,
48
+ hideDeliveryFee,
49
+ loyaltyRewardRate,
49
50
  maxDate
50
51
  } = props;
51
52
 
@@ -56,8 +57,32 @@ const OrderSummaryUI = (props: any) => {
56
57
  const [{ parsePrice, parseNumber }] = useUtils();
57
58
  const [validationFields] = useValidationFields();
58
59
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, data: null, type: '' })
59
- const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
60
60
  const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled;
61
+ const hideCartComments = !validationFields?.fields?.checkout?.comments?.enabled
62
+
63
+ const cart = orderState?.carts?.[`businessId:${props.cart.business_id}`]
64
+
65
+ const walletName: any = {
66
+ cash: {
67
+ name: t('PAY_WITH_CASH_WALLET', 'Pay with Cash Wallet'),
68
+ },
69
+ credit_point: {
70
+ name: t('PAY_WITH_CREDITS_POINTS_WALLET', 'Pay with Credit Points Wallet'),
71
+ }
72
+ }
73
+
74
+ const getIncludedTaxes = () => {
75
+ if (cart?.taxes === null || !cart?.taxes) {
76
+ return cart?.business?.tax_type === 1 ? cart?.tax : 0
77
+ } else {
78
+ return cart?.taxes.reduce((taxIncluded: number, tax: any) => {
79
+ return taxIncluded + (tax.type === 1 ? tax.summary?.tax : 0)
80
+ }, 0)
81
+ }
82
+ }
83
+
84
+ const clearAmount = (value: any) => parseFloat((Math.trunc(value * 100) / 100).toFixed(configs.format_number_decimal_length?.value ?? 2))
85
+ const loyaltyRewardValue = clearAmount((cart?.subtotal + getIncludedTaxes()) * loyaltyRewardRate)
61
86
 
62
87
  const handleDeleteClick = (product: any) => {
63
88
  removeProduct(product, cart)
@@ -75,41 +100,20 @@ const OrderSummaryUI = (props: any) => {
75
100
  })
76
101
  }
77
102
 
78
- const getIncludedTaxes = () => {
79
- if (cart?.taxes === null || !cart?.taxes) {
80
- return cart.business.tax_type === 1 ? cart?.tax : 0
81
- } else {
82
- return cart?.taxes.reduce((taxIncluded: number, tax: any) => {
83
- return taxIncluded + (tax.type === 1 ? tax.summary?.tax : 0)
84
- }, 0)
85
- }
86
- }
87
-
88
103
  const getIncludedTaxesDiscounts = () => {
89
104
  return cart?.taxes?.filter((tax: any) => tax?.type === 1)?.reduce((carry: number, tax: any) => carry + (tax?.summary?.tax_after_discount ?? tax?.summary?.tax), 0)
90
105
  }
91
106
 
92
- const onRemoveOffer = (id: number) => {
93
- setConfirm({
94
- open: true,
95
- content: [t('QUESTION_DELETE_OFFER', 'Are you sure that you want to delete the offer?')],
96
- title: t('OFFER', 'Offer'),
97
- handleOnAccept: () => {
98
- setConfirm({ ...confirm, open: false })
99
- handleRemoveOfferClick(id)
100
- }
101
- })
102
- }
103
-
104
- const cart = orderState?.carts?.[`businessId:${props.cart.business_id}`]
105
-
106
- const walletName: any = {
107
- cash: {
108
- name: t('PAY_WITH_CASH_WALLET', 'Pay with Cash Wallet'),
109
- },
110
- credit_point: {
111
- name: t('PAY_WITH_CREDITS_POINTS_WALLET', 'Pay with Credit Points Wallet'),
112
- }
107
+ const OfferAlert = ({ offerId }: any) => {
108
+ return (
109
+ <OAlert
110
+ title={t('OFFER', 'Offer')}
111
+ message={t('QUESTION_DELETE_OFFER', 'Are you sure that you want to delete the offer?')}
112
+ onAccept={() => handleRemoveOfferClick(offerId)}
113
+ >
114
+ <AntIcon style={{ marginLeft: 3 }} name='closecircle' size={16} color={theme.colors.primary} />
115
+ </OAlert>
116
+ )
113
117
  }
114
118
 
115
119
  return (
@@ -165,9 +169,9 @@ const OrderSummaryUI = (props: any) => {
165
169
  <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => setOpenTaxModal({ open: true, data: offer, type: 'offer_target_1' })}>
166
170
  <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
167
171
  </TouchableOpacity>
168
- <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => onRemoveOffer(offer?.id)}>
169
- <AntIcon name='closecircle' size={16} color={theme.colors.primary} />
170
- </TouchableOpacity>
172
+ {!!offer?.id && (
173
+ <OfferAlert offerId={offer?.id} />
174
+ )}
171
175
  </OSRow>
172
176
  <OText size={12}>
173
177
  - {parsePrice(offer?.summary?.discount)}
@@ -205,8 +209,8 @@ const OrderSummaryUI = (props: any) => {
205
209
  ))
206
210
  }
207
211
  {
208
- cart?.fees?.length > 0 && cart?.fees?.filter((fee: any) => !(fee.fixed === 0 && fee.percentage === 0)).map((fee: any) => (
209
- <OSTable key={fee?.id}>
212
+ cart?.fees?.length > 0 && cart?.fees?.filter((fee: any) => !(fee.fixed === 0 && fee.percentage === 0)).map((fee: any, i: number) => (
213
+ <OSTable key={fee?.id + i}>
210
214
  <OSRow>
211
215
  <OText size={12} numberOfLines={1}>
212
216
  {fee.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}{' '}
@@ -231,9 +235,9 @@ const OrderSummaryUI = (props: any) => {
231
235
  <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => setOpenTaxModal({ open: true, data: offer, type: 'offer_target_3' })}>
232
236
  <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
233
237
  </TouchableOpacity>
234
- <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => onRemoveOffer(offer?.id)}>
235
- <AntIcon name='closecircle' size={16} color={theme.colors.primary} />
236
- </TouchableOpacity>
238
+ {!!offer?.id && (
239
+ <OfferAlert offerId={offer?.id} />
240
+ )}
237
241
  </OSRow>
238
242
  <OText size={12}>
239
243
  - {parsePrice(offer?.summary?.discount)}
@@ -241,10 +245,10 @@ const OrderSummaryUI = (props: any) => {
241
245
  </OSTable>
242
246
  ))
243
247
  }
244
- {orderState?.options?.type === 1 && cart?.delivery_price > 0 && (
248
+ {orderState?.options?.type === 1 && !hideDeliveryFee && (
245
249
  <OSTable>
246
250
  <OText size={12}>{t('DELIVERY_FEE', 'Delivery Fee')}</OText>
247
- <OText size={12}>{parsePrice(cart?.delivery_price)}</OText>
251
+ <OText size={12}>{parsePrice(cart?.delivery_price_with_discount)}</OText>
248
252
  </OSTable>
249
253
  )}
250
254
  {
@@ -258,9 +262,9 @@ const OrderSummaryUI = (props: any) => {
258
262
  <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => setOpenTaxModal({ open: true, data: offer, type: 'offer_target_2' })}>
259
263
  <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
260
264
  </TouchableOpacity>
261
- <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => onRemoveOffer(offer?.id)}>
262
- <AntIcon name='closecircle' size={16} color={theme.colors.primary} />
263
- </TouchableOpacity>
265
+ {!!offer?.id && (
266
+ <OfferAlert offerId={offer?.id} />
267
+ )}
264
268
  </OSRow>
265
269
  <OText size={12}>
266
270
  - {parsePrice(offer?.summary?.discount)}
@@ -310,9 +314,16 @@ const OrderSummaryUI = (props: any) => {
310
314
  {parsePrice(cart?.balance >= 0 ? cart?.balance : 0)}
311
315
  </OText>
312
316
  </OSTable>
317
+ {!!loyaltyRewardValue && (
318
+ <OSTable style={{ justifyContent: 'flex-end' }}>
319
+ <OText size={12} color={theme.colors.textNormal}>
320
+ {t('REWARD_LOYALTY_POINT', 'Reward :amount: on loyalty points').replace(':amount:', loyaltyRewardValue)}
321
+ </OText>
322
+ </OSTable>
323
+ )}
313
324
  </View>
314
325
  )}
315
- {cart?.business_id && cart?.status !== 2 && (
326
+ {cart?.business_id && cart?.status !== 2 && !hideCartComments && (
316
327
  <OSTable>
317
328
  <View style={{ width: '100%', marginTop: 20 }}>
318
329
  <OText size={12}>{t('COMMENTS', 'Comments')}</OText>
@@ -375,14 +386,6 @@ const OrderSummaryUI = (props: any) => {
375
386
  products={cart?.products}
376
387
  />
377
388
  </OModal>
378
- <OAlert
379
- open={confirm.open}
380
- title={confirm.title}
381
- content={confirm.content}
382
- onAccept={confirm.handleOnAccept}
383
- onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
384
- onClose={() => setConfirm({ ...confirm, open: false, title: null })}
385
- />
386
389
  </>
387
390
  )}
388
391
  </OSContainer>
@@ -31,14 +31,12 @@ const OrderTypeSelectorUI = (props: OrderTypeSelectParams) => {
31
31
  const [orderState] = useOrder();
32
32
  const [, t] = useLanguage();
33
33
  const _orderTypes = orderTypes.filter((type: any) => configTypes?.includes(type.value));
34
- const orderTypeTitle = (type : string) => theme?.header?.components?.order_types?.components?.[type]?.components?.title
35
- const orderTypeDescription = (type : string) => theme?.header?.components?.order_types?.components?.[type]?.components?.description
36
- const orderTypeCallAction = (type : string) => theme?.header?.components?.order_types?.components?.[type]?.components?.call_to_action
34
+
37
35
  const items = _orderTypes.map((type) => {
38
36
  return {
39
37
  value: type.value,
40
- label: orderTypeTitle(type.value) || t(type.content, type.content),
41
- description: orderTypeDescription(type.value) || t(type.description, 'Lorem ipsum dolor sit amet, consectetur.')
38
+ label: t(type.content, type.content),
39
+ description: t(type.description, 'Lorem ipsum dolor sit amet, consectetur.')
42
40
  }
43
41
  })
44
42
 
@@ -102,6 +100,7 @@ const OrderTypeSelectorUI = (props: OrderTypeSelectParams) => {
102
100
  style={{ paddingBottom: 0 }}
103
101
  title={t('HOW_WILL_YOU_DELIVERY_TYPE', 'How will your order type?')}
104
102
  titleAlign={'center'}
103
+ titleStyle={{ fontSize: 14 }}
105
104
  noMargin
106
105
  />
107
106
  {
@@ -115,7 +114,7 @@ const OrderTypeSelectorUI = (props: OrderTypeSelectParams) => {
115
114
  <OText size={12} lineHeight={18} color={theme.colors.white} weight={Platform.OS === 'android' ? 'bold' : '600'}>{item?.label}</OText>
116
115
  <OText size={10} lineHeight={15} color={theme.colors.white}>{item?.description}</OText>
117
116
  <View style={{ flexDirection: 'row', alignItems: 'center' }}>
118
- <OText size={10} lineHeight={15} color={theme.colors.white}>{orderTypeCallAction(item?.value) || t('START_MY_ORDER', 'Start my order')}</OText>
117
+ <OText size={10} lineHeight={15} color={theme.colors.white}>{t('START_MY_ORDER', 'Start my order')}</OText>
119
118
  <AntDesignIcon name='arrowleft' size={26} color={theme.colors.white} style={{ transform: [{ rotate: '180deg' }], marginStart: 4 }} />
120
119
  </View>
121
120
  </MaskCont>
@@ -23,21 +23,21 @@ export const PreviousProductsOrdered = (props: PreviousProductsOrderedParams) =>
23
23
  },
24
24
  });
25
25
 
26
- const ProductList = ({ style }: any) => {
26
+ const ProductList = () => {
27
27
  return (
28
28
  <>
29
29
  {products?.filter((product : any) => product?.business?.available)?.map((product: any) => (
30
- <SingleProductCard
31
- key={product?.id}
32
- isProductId
33
- isSoldOut={(product.inventoried && !product.quantity)}
34
- product={product}
35
- businessId={product?.business?.id}
36
- onProductClick={onProductClick}
37
- style={style}
38
- productAddedToCartLength={0}
39
- handleUpdateProducts={handleUpdateProducts}
40
- />
30
+ <SingleProductCard
31
+ key={product?.id}
32
+ isProductId
33
+ isSoldOut={(product.inventoried && !product.quantity)}
34
+ product={product}
35
+ businessId={product?.business?.id}
36
+ onProductClick={onProductClick}
37
+ style={{ width: windowWidth - (products?.length > 1 ? 120 : 80), marginRight: 20 }}
38
+ productAddedToCartLength={0}
39
+ handleUpdateProducts={handleUpdateProducts}
40
+ />
41
41
  ))}
42
42
  </>
43
43
  )
@@ -45,7 +45,7 @@ export const PreviousProductsOrdered = (props: PreviousProductsOrderedParams) =>
45
45
  return (
46
46
  <ScrollView horizontal={isBusinessesSearchList} style={styles.container} showsVerticalScrollIndicator={false}>
47
47
  {isBusinessesSearchList ? (
48
- <ProductList style={{ width: windowWidth - 80, marginRight: 20 }} />
48
+ <ProductList />
49
49
  ) : (
50
50
  <ListWrapper isBusinessesSearchList={isBusinessesSearchList}>
51
51
  <ProductList />
@@ -10,6 +10,7 @@ import { PreviousProductsOrdered } from './PreviousProductsOrdered'
10
10
  import { OptionTitle, NoOrdersWrapper } from './styles'
11
11
  import { OrdersOptionParams } from '../../types'
12
12
  import { _setStoreData } from '../../providers/StoreUtil';
13
+ import { NotFoundSource } from '../NotFoundSource';
13
14
  import {
14
15
  Placeholder,
15
16
  PlaceholderLine,
@@ -17,7 +18,7 @@ import {
17
18
  } from "rn-placeholder";
18
19
 
19
20
  import { View, ScrollView } from 'react-native'
20
- import { getOrderStatus } from '../../utils'
21
+ import { getOrderStatus, flatArray } from '../../utils'
21
22
 
22
23
  const OrdersOptionUI = (props: OrdersOptionParams) => {
23
24
  const {
@@ -50,7 +51,8 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
50
51
  businesses,
51
52
  businessPaginationProps,
52
53
  handleUpdateProducts,
53
- handleUpdateBusinesses
54
+ handleUpdateBusinesses,
55
+ businessId
54
56
  } = props
55
57
 
56
58
  const theme = useTheme();
@@ -98,7 +100,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
98
100
  return false
99
101
  })
100
102
  setOrders(orders)
101
- }, [_orders?.length])
103
+ }, [JSON.stringify(_orders)])
102
104
 
103
105
  const onProductClick = (product: any) => {
104
106
  if (product?.product_id && product?.category_id && product?.businessId &&
@@ -120,6 +122,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
120
122
  }
121
123
 
122
124
  useEffect(() => {
125
+ if (reorderState?.loading) return
123
126
  const _businessId = 'businessId:' + reorderState?.result?.business_id
124
127
  if (reorderState?.error) {
125
128
  if (reorderState?.result?.business_id) {
@@ -127,21 +130,39 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
127
130
  navigation.navigate('Business', { store: reorderState?.result?.business?.slug })
128
131
  }
129
132
  }
130
- if (!reorderState?.error && reorderState.loading === false && reorderState?.result?.business_id) {
133
+ if (!reorderState?.error && !reorderState.loading && reorderState?.result?.business_id) {
131
134
  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
135
 
135
- if (available && reorderState?.result?.uuid && (cartProducts?.length === orderProducts?.length)) {
136
- onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', { cartUuid: reorderState?.result.uuid })
136
+ const available = cartProducts.every((product: any) => product.valid)
137
+ const orderProducts = orders.find(
138
+ (order: any) => Array.isArray(order?.id)
139
+ ? order?.id?.includes(reorderState?.result?.orderId)
140
+ : order?.id === reorderState?.result?.orderId
141
+ )?.products
142
+
143
+ const productsFlatten = orderProducts?.length && flatArray(orderProducts)?.filter(product => product?.order_id === reorderState?.result?.orderId)
144
+
145
+ if (available && reorderState?.result?.uuid && (cartProducts?.length === productsFlatten?.length)) {
146
+ const multiOrders = flatArray(orderProducts)?.map(product => product.order_id)
147
+ const params = multiOrders?.length > 1
148
+ ? { screen: 'MultiCheckout', checkCarts: true }
149
+ : { cartUuid: reorderState?.result.uuid }
150
+
151
+ onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', params)
137
152
  } else {
138
153
  _setStoreData('adjust-cart-products', JSON.stringify(_businessId))
139
- cartProducts?.length !== orderProducts?.length && _setStoreData('already-removed', JSON.stringify('removed'))
154
+ cartProducts?.length !== productsFlatten?.length && _setStoreData('already-removed', JSON.stringify('removed'))
140
155
  navigation.navigate('Business', { store: reorderState?.result?.business?.slug })
141
156
  }
142
157
  }
143
158
  }, [reorderState])
144
159
 
160
+ useEffect(() => {
161
+ if (reorderState?.error) {
162
+ showToast(ToastType.Error, reorderState?.result)
163
+ }
164
+ }, [reorderState])
165
+
145
166
  useFocusEffect(
146
167
  React.useCallback(() => {
147
168
  if (!businessesSearchList) {
@@ -166,6 +187,8 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
166
187
  setOrdersLength && setOrdersLength({ ...ordersLength, activeOrdersLength: updateOrders?.length })
167
188
  } else if (!preOrders) {
168
189
  setOrdersLength && setOrdersLength({ ...ordersLength, previousOrdersLength: updateOrders?.length })
190
+ } else {
191
+ setOrdersLength && setOrdersLength({ ...ordersLength, preordersLength: updateOrders?.length })
169
192
  }
170
193
  }, [_orders, activeOrders, preOrders])
171
194
 
@@ -178,21 +201,21 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
178
201
 
179
202
  return (
180
203
  <>
181
- {!loading && ordersLength.activeOrdersLength === 0 && ordersLength.previousOrdersLength === 0 && !activeOrders && (
204
+ {!loading && ordersLength.activeOrdersLength === 0 && ordersLength.previousOrdersLength === 0 && ordersLength?.preordersLength === 0 && !activeOrders && !preOrders && (
182
205
  <NoOrdersWrapper>
183
- <OText size={14} numberOfLines={1}>
184
- {t('YOU_DONT_HAVE_ORDERS', 'You don\'t have any orders')}
185
- </OText>
186
- <OButton
187
- text={t('ORDER_NOW', 'Order now')}
188
- onClick={() => onNavigationRedirect && onNavigationRedirect('BusinessList')}
189
- textStyle={{ color: 'white', fontSize: 14 }}
190
- style={{ borderRadius: 7.6, marginBottom: 10, marginTop: 10, height: 44, paddingLeft: 10, paddingRight: 10 }}
206
+ <NotFoundSource
207
+ hideImage
208
+ btnStyle={{ borderRadius: 8 }}
209
+ content={t('YOU_DONT_HAVE_ORDERS', 'You don\'t have any orders')}
210
+ btnTitle={t('ORDER_NOW', 'Order now')}
211
+ onClickButton={() => onNavigationRedirect && (businessId ? onNavigationRedirect('Business') : onNavigationRedirect('BusinessList'))}
191
212
  />
192
-
193
213
  </NoOrdersWrapper>
194
214
  )}
195
- {((ordersLength?.activeOrdersLength > 0 && activeOrders) || (ordersLength?.previousOrdersLength > 0 && !activeOrders)) && (
215
+ {((ordersLength?.activeOrdersLength > 0 && activeOrders) ||
216
+ (ordersLength?.previousOrdersLength > 0 && !activeOrders && !preOrders) ||
217
+ (ordersLength?.preordersLength > 0 && preOrders)
218
+ ) && (
196
219
  <>
197
220
  {((titleContent && ((isBusiness && businessOrderIds?.length > 0) || isProducts)) || !titleContent) && (
198
221
  <OptionTitle titleContent={!!titleContent} isBusinessesSearchList={!!businessesSearchList}>
@@ -10,5 +10,5 @@ export const OptionTitle = styled.View`
10
10
  export const NoOrdersWrapper = styled.View`
11
11
  flex-direction: column;
12
12
  align-items: center;
13
- margin-top: 50px;
13
+ margin-top: 60px;
14
14
  `
@@ -1,5 +1,5 @@
1
- import React, { useRef } from 'react'
2
- import { useUtils, PageBanner as PageBannerController } from 'ordering-components/native'
1
+ import React, { useEffect, useState, useRef } from 'react'
2
+ import { useUtils, useEvent, PageBanner as PageBannerController } from 'ordering-components/native'
3
3
  import { View, StyleSheet, Dimensions, TouchableOpacity } from 'react-native'
4
4
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
5
5
  import Carousel from 'react-native-snap-carousel'
@@ -16,7 +16,10 @@ const PageBannerUI = (props: any) => {
16
16
 
17
17
  const theme = useTheme();
18
18
  const [{ optimizeImage }] = useUtils();
19
- const carouselRef = useRef(null)
19
+ const [events] = useEvent()
20
+ const carouselRef = useRef<any>(null)
21
+ const [currentIndex, setCurrentIndex] = useState(0)
22
+ const [viewedBanner, setViewedBanner] = useState<any>(null)
20
23
 
21
24
  const windowWidth = Dimensions.get('window').width;
22
25
 
@@ -41,10 +44,11 @@ const PageBannerUI = (props: any) => {
41
44
  })
42
45
 
43
46
  const onRedirect = (route: string, params?: any) => {
44
- navigation.navigate(route, params)
47
+ navigation.push(route, params)
45
48
  }
46
49
 
47
- const handleGoToPage = (action: any) => {
50
+ const handleGoToPage = (item: any) => {
51
+ const action = item.action
48
52
  if (!action?.url) return
49
53
  let slug
50
54
  if (action.type === 'business') {
@@ -59,15 +63,22 @@ const PageBannerUI = (props: any) => {
59
63
  businessSlug: slug,
60
64
  businessId: action.business_id,
61
65
  categoryId: action.category_id,
62
- productId: action.product_id
66
+ productId: action.product_id,
67
+ isRedirect: 'business',
68
+ business: {
69
+ store: slug
70
+ }
63
71
  })
64
72
  }
73
+ const clickedBanner = pageBannerState.result.find(banner => banner.id === item?.banner_id)
74
+ events.emit('promotion_clicked', clickedBanner)
65
75
  }
66
76
 
67
77
  const renderItem = ({ item, index }) => {
68
78
  return (
69
79
  <TouchableOpacity
70
- onPress={() => handleGoToPage(item.action)}
80
+ activeOpacity={1}
81
+ onPress={() => handleGoToPage(item)}
71
82
  >
72
83
  <View style={styles.sliderWrapper}>
73
84
  <FastImage
@@ -80,6 +91,24 @@ const PageBannerUI = (props: any) => {
80
91
  )
81
92
  }
82
93
 
94
+ const updateIndex = () => {
95
+ setCurrentIndex(carouselRef?.current?.currentIndex)
96
+ }
97
+
98
+ useEffect(() => {
99
+ if (pageBannerState.loading) return
100
+ if (pageBannerState.banner?.items && pageBannerState.banner?.items.length > 0) {
101
+ const bannerId = pageBannerState.banner.items[currentIndex]?.banner_id
102
+ if (pageBannerState.result && bannerId) {
103
+ const _viewedBanner = pageBannerState.result.find(banner => banner.id === bannerId)
104
+ if (_viewedBanner?.id !== viewedBanner?.id) {
105
+ setViewedBanner(_viewedBanner)
106
+ events.emit('promotion_viewed', _viewedBanner)
107
+ }
108
+ }
109
+ }
110
+ }, [pageBannerState.loading, currentIndex, viewedBanner])
111
+
83
112
  return (
84
113
  <>
85
114
  {pageBannerState.loading ? (
@@ -97,37 +126,44 @@ const PageBannerUI = (props: any) => {
97
126
  <>
98
127
  {pageBannerState.banner?.items && pageBannerState.banner?.items.length > 0 && (
99
128
  <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>
129
+ {pageBannerState.banner?.items.length > 1 && (
130
+ <>
131
+ <TouchableOpacity
132
+ activeOpacity={1}
133
+ style={[styles.swiperButton, { left: 25 }]}
134
+ onPress={() => carouselRef.current.snapToPrev()}
135
+ >
136
+ <IconAntDesign
137
+ name="caretleft"
138
+ color={theme.colors.white}
139
+ size={13}
140
+ />
141
+ </TouchableOpacity>
142
+ <TouchableOpacity
143
+ activeOpacity={1}
144
+ style={[styles.swiperButton, { right: 25 }]}
145
+ onPress={() => carouselRef.current.snapToNext()}
146
+ >
147
+ <IconAntDesign
148
+ name="caretright"
149
+ color={theme.colors.white}
150
+ size={13}
151
+ />
152
+ </TouchableOpacity>
153
+ </>
154
+ )}
120
155
  <Carousel
121
156
  ref={carouselRef}
122
157
  loop={pageBannerState.banner?.items.length > 1}
123
158
  data={pageBannerState.banner?.items}
124
159
  renderItem={renderItem}
125
- sliderWidth={windowWidth - 80}
126
- itemWidth={windowWidth - 80}
160
+ sliderWidth={windowWidth}
161
+ itemWidth={windowWidth}
127
162
  inactiveSlideScale={1}
128
163
  pagingEnabled
129
164
  removeClippedSubviews={false}
130
165
  inactiveSlideOpacity={1}
166
+ onSnapToItem={updateIndex}
131
167
  />
132
168
  </PageBannerWrapper>
133
169
  )}
@@ -1,10 +1,7 @@
1
1
  import styled from 'styled-components/native'
2
2
 
3
3
  export const PageBannerWrapper = styled.View`
4
- margin-horizontal: 40px;
5
- border-radius: 8px;
6
4
  overflow: hidden;
7
- margin-vertical: 30px;
8
5
  position: relative;
9
6
  flex-direction: row;
10
7
  align-items: center;