ordering-ui-react-native 0.16.70 → 0.16.71-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 (202) 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/Checkout/index.tsx +2 -1
  9. package/src/components/LanguageSelector/index.tsx +21 -16
  10. package/src/components/Messages/index.tsx +2 -2
  11. package/src/components/OrdersOption/index.tsx +54 -56
  12. package/src/components/PaymentOptions/index.tsx +298 -345
  13. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  14. package/src/components/SingleProductReview/index.tsx +7 -4
  15. package/src/components/StripeElementsForm/index.tsx +25 -16
  16. package/src/components/VerifyPhone/styles.tsx +1 -2
  17. package/src/components/shared/OToast.tsx +4 -4
  18. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  19. package/src/utils/index.tsx +2 -1
  20. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  21. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  22. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  23. package/themes/business/src/components/Chat/index.tsx +31 -31
  24. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  25. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  26. package/themes/business/src/components/MapView/index.tsx +14 -3
  27. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  28. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  29. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
  30. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  31. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  32. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  33. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  34. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  35. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  36. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  37. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  38. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  40. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  41. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  42. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  43. package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
  44. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  45. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  46. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  47. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  48. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  49. package/themes/business/src/components/shared/OLink.tsx +33 -13
  50. package/themes/business/src/components/shared/OText.tsx +8 -2
  51. package/themes/business/src/types/index.tsx +14 -3
  52. package/themes/business/src/utils/index.tsx +10 -0
  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/BusinessesListing/index.tsx +2 -1
  57. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  58. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  59. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  60. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  61. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  62. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  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/types/index.d.ts +2 -0
  66. package/themes/original/index.tsx +6 -0
  67. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  68. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  69. package/themes/original/src/components/AddressList/index.tsx +18 -18
  70. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  71. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  72. package/themes/original/src/components/BusinessBasicInformation/index.tsx +49 -25
  73. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  74. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  75. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  76. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  77. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  78. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  79. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  80. package/themes/original/src/components/BusinessListingSearch/index.tsx +87 -142
  81. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  82. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  83. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  84. package/themes/original/src/components/BusinessProductsList/index.tsx +41 -62
  85. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  86. package/themes/original/src/components/BusinessProductsListing/index.tsx +561 -479
  87. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  88. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  89. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  90. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +93 -99
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  92. package/themes/original/src/components/BusinessesListing/index.tsx +8 -8
  93. package/themes/original/src/components/Cart/index.tsx +75 -42
  94. package/themes/original/src/components/CartContent/index.tsx +80 -18
  95. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  96. package/themes/original/src/components/Checkout/index.tsx +92 -105
  97. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  98. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  99. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  100. package/themes/original/src/components/DriverTips/index.tsx +47 -37
  101. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  102. package/themes/original/src/components/Favorite/index.tsx +7 -4
  103. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  104. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  105. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  106. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  107. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  108. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  109. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  110. package/themes/original/src/components/Help/index.tsx +7 -7
  111. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  112. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  113. package/themes/original/src/components/HelpGuide/index.tsx +12 -11
  114. package/themes/original/src/components/HelpGuide/styles.tsx +5 -0
  115. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  116. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  117. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  118. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  119. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  120. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  121. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  122. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  123. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  124. package/themes/original/src/components/Messages/index.tsx +35 -20
  125. package/themes/original/src/components/MomentOption/index.tsx +17 -11
  126. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  127. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  128. package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
  129. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  130. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  131. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  132. package/themes/original/src/components/MyOrders/index.tsx +86 -20
  133. package/themes/original/src/components/NavBar/index.tsx +7 -6
  134. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  135. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  136. package/themes/original/src/components/Notifications/index.tsx +144 -0
  137. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  138. package/themes/original/src/components/OrderDetails/index.tsx +100 -215
  139. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  140. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  141. package/themes/original/src/components/OrderProgress/index.tsx +79 -100
  142. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  143. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  144. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  145. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  146. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  147. package/themes/original/src/components/OrdersOption/index.tsx +97 -88
  148. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  149. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  150. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  151. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  152. package/themes/original/src/components/PlaceSpot/index.tsx +22 -8
  153. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  154. package/themes/original/src/components/ProductForm/index.tsx +212 -253
  155. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  156. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  157. package/themes/original/src/components/ProductOptionSubOption/index.tsx +17 -9
  158. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  159. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  160. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  161. package/themes/original/src/components/Promotions/index.tsx +234 -220
  162. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  163. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  164. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  165. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  166. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  167. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  168. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  169. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  170. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  171. package/themes/original/src/components/ServiceForm/index.tsx +328 -264
  172. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  173. package/themes/original/src/components/SingleOrderCard/index.tsx +129 -54
  174. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  175. package/themes/original/src/components/SingleProductCard/index.tsx +85 -82
  176. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  177. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  178. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  179. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  180. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  181. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  182. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  183. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  184. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  185. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  186. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  187. package/themes/original/src/components/UserProfileForm/index.tsx +19 -28
  188. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  189. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  190. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  191. package/themes/original/src/components/Wallets/index.tsx +176 -164
  192. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  193. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  194. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  195. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  196. package/themes/original/src/components/shared/OButton.tsx +9 -4
  197. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  198. package/themes/original/src/components/shared/OInput.tsx +10 -1
  199. package/themes/original/src/layouts/Container.tsx +13 -9
  200. package/themes/original/src/types/index.tsx +35 -5
  201. package/themes/original/src/utils/index.tsx +305 -58
  202. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,6 +1,7 @@
1
1
  import React, { useState, useEffect } from 'react';
2
2
  import { StyleSheet, View, TouchableOpacity, Linking, Pressable } from 'react-native';
3
- import { useUtils, useOrder, useLanguage, useOrderingTheme } from 'ordering-components/native';
3
+ import FastImage from 'react-native-fast-image'
4
+ import { useUtils, useOrder, useLanguage } from 'ordering-components/native';
4
5
  import { useTheme } from 'styled-components/native';
5
6
  import { OIcon, OText, OModal } from '../shared';
6
7
  import { BusinessBasicInformationParams } from '../../types';
@@ -38,7 +39,6 @@ export const BusinessBasicInformation = (
38
39
  const { business, loading } = businessState;
39
40
 
40
41
  const theme = useTheme();
41
- const [orderingTheme] = useOrderingTheme()
42
42
  const [orderState] = useOrder();
43
43
  const [, t] = useLanguage();
44
44
  const [{ parsePrice, parseDistance, optimizeImage }] = useUtils();
@@ -46,8 +46,8 @@ export const BusinessBasicInformation = (
46
46
  const [openBusinessReviews, setOpenBusinessReviews] = useState(false);
47
47
  const [businessInformationObtained, setBusinessInformationObtained] = useState(false)
48
48
  const [businessReviewsObtained, setBusinessReviewsObtainedbtained] = useState(false)
49
- const isChewLayout = orderingTheme?.theme?.business_view?.components?.header?.components?.layout?.type === 'chew'
50
- const showLogo = !orderingTheme?.theme?.business_view?.components?.header?.components?.business?.components?.logo?.hidden
49
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
50
+ const showLogo = !theme?.business_view?.components?.header?.components?.business?.components?.logo?.hidden
51
51
 
52
52
  const styles = StyleSheet.create({
53
53
  businesInfoheaderStyle: {
@@ -56,12 +56,12 @@ export const BusinessBasicInformation = (
56
56
  headerStyle: {
57
57
  height: isChewLayout ? 170 : 260,
58
58
  },
59
- businessLogo: {
59
+ logoStyle: {
60
60
  width: 72,
61
61
  height: 72,
62
62
  borderRadius: 7.6,
63
63
  justifyContent: 'flex-start',
64
- alignItems: 'flex-start',
64
+ alignItems: 'flex-start'
65
65
  },
66
66
  businessInfo: {
67
67
  paddingHorizontal: 40,
@@ -104,7 +104,10 @@ export const BusinessBasicInformation = (
104
104
  height: 12,
105
105
  width: 12,
106
106
  margin: 0,
107
- padding: 0
107
+ padding: 0,
108
+ display: 'flex',
109
+ justifyContent: 'center',
110
+ alignItems: 'center'
108
111
  },
109
112
  headerChewStyle: {
110
113
  paddingHorizontal: 30,
@@ -222,7 +225,8 @@ export const BusinessBasicInformation = (
222
225
  <View style={styles.tiktokIcon}>
223
226
  <OIcon
224
227
  src={theme.images.general.tiktok}
225
- style={{ width: '100%', height: '100%' }}
228
+ style={{ width: 10, height: 12 }}
229
+ cover
226
230
  />
227
231
  </View>
228
232
  </Pressable>
@@ -247,7 +251,11 @@ export const BusinessBasicInformation = (
247
251
  )}
248
252
  {isChewLayout && (
249
253
  <TouchableOpacity onPress={() => handleClickBusinessInformation()}>
250
- <OText style={{ textDecorationColor: theme.colors.black, textDecorationLine: 'underline' }}>
254
+ <OText
255
+ color={theme.colors.primary}
256
+ style={{ textDecorationColor: theme.colors.primary, textDecorationLine: 'underline' }}
257
+ size={12}
258
+ >
251
259
  {t('SEE_MORE_DESCRIPTION', 'See more')}
252
260
  </OText>
253
261
  </TouchableOpacity>
@@ -267,11 +275,11 @@ export const BusinessBasicInformation = (
267
275
  ? styles.businesInfoheaderStyle
268
276
  : { ...styles.headerStyle, backgroundColor: theme.colors.backgroundGray }
269
277
  }
270
- source={{
271
- uri:
272
- header ||
273
- optimizeImage(businessState?.business?.header, 'h_250,c_limit'),
274
- }}
278
+ {...(!loading && {
279
+ source: (header || businessState?.business?.header) ? {
280
+ uri: header || optimizeImage(businessState?.business?.header, 'h_250,c_limit')
281
+ } : theme?.images?.dummies?.businessHeader
282
+ })}
275
283
  imageStyle={{ opacity: isChewLayout ? 0.5 : 1 }}
276
284
  >
277
285
  {!isBusinessInfoShow && !isChewLayout && (
@@ -279,7 +287,7 @@ export const BusinessBasicInformation = (
279
287
  <OIcon src={theme.images.general.info} width={24} />
280
288
  </WrapBusinessInfo>
281
289
  )}
282
- {isChewLayout && (
290
+ {isChewLayout && !loading && (
283
291
  <View style={styles.headerChewStyle}>
284
292
  <OText size={24} weight={'600'} mBottom={-5}>
285
293
  {business?.name}
@@ -299,13 +307,21 @@ export const BusinessBasicInformation = (
299
307
  {showLogo && (
300
308
  <BusinessLogo isChewLayout={isChewLayout}>
301
309
  {!isBusinessInfoShow && (
302
- <OIcon
303
- url={
304
- logo ||
305
- optimizeImage(businessState?.business?.logo, 'h_70,c_limit')
306
- }
307
- style={styles.businessLogo}
308
- />
310
+ logo || businessState?.business?.logo ?
311
+ <FastImage
312
+ style={styles.logoStyle}
313
+ source={{
314
+ uri: logo || optimizeImage(businessState?.business?.logo, 'h_70,c_limit'),
315
+ priority: FastImage.priority.high,
316
+ cache: FastImage.cacheControl.web
317
+ }}
318
+ resizeMode={FastImage.resizeMode.contain}
319
+ />
320
+ :
321
+ <OIcon
322
+ src={theme?.images?.dummies?.businessLogo}
323
+ style={styles.logoStyle}
324
+ />
309
325
  )}
310
326
  </BusinessLogo>
311
327
  )}
@@ -404,15 +420,23 @@ export const BusinessBasicInformation = (
404
420
  {isPreOrder && (!business?.professionals || business?.professionals?.length === 0) && (
405
421
  <>
406
422
  <TouchableOpacity onPress={() => navigation.navigate('BusinessPreorder', { business: businessState?.business, handleBusinessClick: () => navigation?.goBack() })}>
407
- <OText color={theme.colors.textSecondary} style={{ textDecorationLine: 'underline' }}>
408
- {t('PRE_ORDER', 'Preorder')}
423
+ <OText
424
+ color={theme.colors.primary}
425
+ style={{ textDecorationColor: theme.colors.primary, textDecorationLine: 'underline' }}
426
+ size={12}
427
+ >
428
+ {t('PREORDER', 'Preorder')}
409
429
  </OText>
410
430
  </TouchableOpacity>
411
431
  <OText size={12} color={theme.colors.textSecondary}>{' \u2022 '}</OText>
412
432
  </>
413
433
  )}
414
434
  <TouchableOpacity onPress={() => handleClickBusinessReviews()}>
415
- <OText color={theme.colors.textSecondary} style={{ textDecorationLine: 'underline' }}>
435
+ <OText
436
+ color={theme.colors.primary}
437
+ style={{ textDecorationColor: theme.colors.primary, textDecorationLine: 'underline' }}
438
+ size={12}
439
+ >
416
440
  {t('REVIEWS', 'Reviews')}
417
441
  </OText>
418
442
  </TouchableOpacity>
@@ -1,4 +1,4 @@
1
- import React, { useState, useRef, useEffect } from 'react';
1
+ import React, { useState } from 'react';
2
2
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
3
3
  import {
4
4
  BusinessController as BusinessSingleCard,
@@ -11,27 +11,28 @@ import {
11
11
  ToastType
12
12
  } from 'ordering-components/native';
13
13
  import { OIcon, OText } from '../shared';
14
- import { StyleSheet, TouchableOpacity, View, Animated } from 'react-native';
14
+ import { Dimensions, StyleSheet, Vibration, View } from 'react-native';
15
15
  import { InView } from 'react-native-intersection-observer'
16
16
  import { BusinessControllerParams } from '../../types';
17
17
  import { convertHoursToMinutes, shape } from '../../utils';
18
+
18
19
  import {
19
- Card,
20
20
  BusinessHero,
21
21
  BusinessContent,
22
- BusinessCategory,
23
22
  BusinessInfo,
24
23
  Metadata,
25
24
  BusinessState,
26
25
  BusinessLogo,
27
26
  Reviews,
28
27
  RibbonBox,
29
- ReviewAndFavorite
28
+ ReviewAndFavorite,
29
+ OfferBox
30
30
  } from './styles';
31
31
  import { useTheme } from 'styled-components/native';
32
32
  import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome5';
33
- import IconAntDesign from 'react-native-vector-icons/AntDesign'
34
33
  import FastImage from 'react-native-fast-image'
34
+ import { LottieAnimation } from '../LottieAnimation';
35
+ import { CardAnimation } from '../shared/CardAnimation';
35
36
 
36
37
  export const BusinessControllerUI = (props: BusinessControllerParams) => {
37
38
  const {
@@ -40,6 +41,7 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
40
41
  navigation,
41
42
  isBusinessOpen,
42
43
  style,
44
+ isCustomLayout,
43
45
  businessHeader,
44
46
  businessFeatured,
45
47
  businessLogo,
@@ -49,19 +51,31 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
49
51
  businessPickupTime,
50
52
  businessDistance,
51
53
  handleFavoriteBusiness,
52
- enableIntersection
54
+ enableIntersection,
55
+ getBusinessOffer
53
56
  } = props;
57
+
54
58
  const [{ parsePrice, parseDistance, parseNumber, optimizeImage }] = useUtils();
55
59
  const [, { showToast }] = useToast()
56
60
  const [orderState] = useOrder();
57
- const [ { auth }] = useSession()
61
+ const [{ auth }] = useSession()
58
62
  const [configState] = useConfig();
59
63
  const [, t] = useLanguage();
60
64
  const theme = useTheme()
65
+ const windowHeight = Dimensions.get('window').height
61
66
  const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
62
- const fadeAnim = useRef(new Animated.Value(0)).current;
67
+
68
+ const textSize = isCustomLayout ? 12 : 10
69
+ const cardHeight = windowHeight * 0.3
63
70
 
64
71
  const styles = StyleSheet.create({
72
+ container: {
73
+ marginVertical: 20,
74
+ borderRadius: 7.6,
75
+ width: '100%',
76
+ position: 'relative',
77
+ height: cardHeight
78
+ },
65
79
  headerStyle: {
66
80
  borderTopLeftRadius: 7.6,
67
81
  borderTopRightRadius: 7.6,
@@ -111,7 +125,7 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
111
125
  flexDirection: 'row',
112
126
  alignItems: 'center',
113
127
  justifyContent: 'flex-start',
114
- },
128
+ }
115
129
  });
116
130
 
117
131
  const types = ['food', 'laundry', 'alcohol', 'groceries'];
@@ -128,6 +142,7 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
128
142
  };
129
143
 
130
144
  const handleBusinessClick = (selectedBusiness: any) => {
145
+ Vibration.vibrate()
131
146
  if (business?.open) handleClick && handleClick(selectedBusiness)
132
147
  else {
133
148
  if (configState?.configs?.preorder_status_enabled?.value === '1') {
@@ -146,27 +161,17 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
146
161
  }
147
162
  }
148
163
 
149
- const fadeIn = () => {
150
- Animated.timing(fadeAnim, {
151
- toValue: 1,
152
- duration: 500,
153
- useNativeDriver: true
154
- }).start();
155
- };
156
-
157
164
  const handleChangeInterSection = (inView: boolean) => {
158
165
  setIsIntersectionObserver(inView)
159
- fadeIn()
160
166
  }
161
167
 
162
- useEffect(() => {
163
- if (!enableIntersection) fadeIn()
164
- }, [enableIntersection])
165
-
166
168
  return (
167
169
  <InView style={{ minHeight: 200 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeInterSection(inView)}>
168
170
  {isIntersectionObserver ? (
169
- <Card activeOpacity={1} onPress={() => handleBusinessClick(business)} style={style}>
171
+ <CardAnimation
172
+ style={[style, styles.container]}
173
+ onClick={() => handleBusinessClick(business)}
174
+ >
170
175
  {business?.ribbon?.enabled && (
171
176
  <RibbonBox
172
177
  bgColor={business?.ribbon?.color}
@@ -186,27 +191,31 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
186
191
  </RibbonBox>
187
192
  )}
188
193
  <BusinessHero>
189
- <Animated.View
190
- style={[
191
- {
192
- opacity: fadeAnim
193
- }
194
- ]}
195
- >
196
194
  <FastImage
197
- style={{ height: 120 }}
198
- source={{
195
+ style={{ height: isCustomLayout ? cardHeight * 0.66 : 120 }}
196
+ source={(businessHeader || business?.header) ? {
199
197
  uri: optimizeImage(businessHeader || business?.header, 'h_500,c_limit'),
200
198
  priority: FastImage.priority.normal,
201
- }}
199
+ } : theme.images.dummies.businessHeader}
202
200
  resizeMode={FastImage.resizeMode.cover}
203
201
  />
204
- </Animated.View>
205
202
  {(businessFeatured ?? business?.featured) && (
206
203
  <View style={styles.featured}>
207
204
  <FontAwesomeIcon name="crown" size={26} color="gold" />
208
205
  </View>
209
206
  )}
207
+ {(!isCustomLayout) && (
208
+ getBusinessOffer((business?.offers)) &&
209
+ <OfferBox>
210
+ <OText
211
+ size={10}
212
+ weight={'400'}
213
+ numberOfLines={2}
214
+ ellipsizeMode='tail'
215
+ lineHeight={13}
216
+ >{getBusinessOffer((business?.offers)) || parsePrice(0)}</OText>
217
+ </OfferBox>
218
+ )}
210
219
  <BusinessState>
211
220
  {!isBusinessOpen && (configState?.configs?.preorder_status_enabled?.value === '1') && (
212
221
  <View style={styles.businessStateView}>
@@ -221,49 +230,71 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
221
230
  </BusinessState>
222
231
  </BusinessHero>
223
232
  <BusinessContent>
224
- <BusinessInfo>
233
+ <BusinessInfo style={isCustomLayout && { position: 'absolute', bottom: 85, left: 15 }}>
225
234
  <BusinessLogo style={styles.businessLogo}>
226
235
  <FastImage
227
236
  style={{ width: 56, height: 56 }}
228
- source={{
237
+ source={(businessLogo || business?.logo) ? {
229
238
  uri: optimizeImage(businessLogo || business?.logo, 'h_150,c_limit'),
230
239
  priority: FastImage.priority.normal,
231
- }}
240
+ } : theme.images.dummies.businessLogo}
232
241
  resizeMode={FastImage.resizeMode.cover}
233
242
  />
234
243
  </BusinessLogo>
235
- <ReviewAndFavorite>
236
- {(businessReviews?.reviews?.total > 0 ?? business?.reviews?.total > 0) && (
237
- <Reviews>
238
- <OIcon src={theme.images.general.star} width={12} style={styles.starIcon} />
239
- <OText size={10} style={{ lineHeight: 15 }}>
240
- {parseNumber(businessReviews?.reviews?.total ?? business?.reviews?.total, { separator: '.' })}
241
- </OText>
242
- </Reviews>
243
- )}
244
- <TouchableOpacity
245
- onPress={handleChangeFavorite}
246
- >
247
- <IconAntDesign
248
- name={business?.favorite ? 'heart' : 'hearto'}
249
- color={theme.colors.danger5}
250
- size={18}
244
+ {!isCustomLayout && (
245
+ <ReviewAndFavorite>
246
+ {(businessReviews?.reviews?.total > 0 ?? business?.reviews?.total > 0) && (
247
+ <Reviews>
248
+ <OIcon src={theme.images.general.star} width={12} style={styles.starIcon} />
249
+ <OText size={10} style={{ lineHeight: 15 }}>
250
+ {parseNumber(businessReviews?.reviews?.total ?? business?.reviews?.total, { separator: '.' })}
251
+ </OText>
252
+ </Reviews>
253
+ )}
254
+ <LottieAnimation
255
+ type='favorite'
256
+ onClick={handleChangeFavorite}
257
+ initialValue={business?.favorite ? 0.75 : 0}
258
+ toValue={business?.favorite ? 0 : 0.75}
259
+ disableAnimation={!auth}
260
+ iconProps={{ color: theme.colors.danger5, size: 18 }}
261
+ isActive={business?.favorite}
251
262
  />
252
- </TouchableOpacity>
253
- </ReviewAndFavorite>
263
+ </ReviewAndFavorite>
264
+ )}
254
265
  </BusinessInfo>
255
- <OText
256
- size={12}
257
- style={{ lineHeight: 18, marginBottom: 6 }}
258
- weight={'500'}>
259
- {business?.name}
260
- </OText>
261
- <OText size={10} style={{ lineHeight: 15, marginBottom: 3 }}>
266
+ <View style={isCustomLayout && { width: '100%', flexDirection: 'row', justifyContent: 'space-between', marginTop: 5 }}>
267
+ <OText
268
+ size={textSize + 2}
269
+ style={{ lineHeight: 18, marginBottom: 6 }}
270
+ weight={'500'}>
271
+ {business?.name}
272
+ </OText>
273
+ {isCustomLayout && (
274
+ <ReviewAndFavorite>
275
+ {(businessReviews?.reviews?.total > 0 ?? business?.reviews?.total > 0) && (
276
+ <Reviews>
277
+ <OIcon src={theme.images.general.star} width={12} style={styles.starIcon} />
278
+ <OText size={10} style={{ lineHeight: 15 }}>
279
+ {parseNumber(businessReviews?.reviews?.total ?? business?.reviews?.total, { separator: '.' })}
280
+ </OText>
281
+ </Reviews>
282
+ )}
283
+ <LottieAnimation
284
+ type='favorite'
285
+ onClick={handleChangeFavorite}
286
+ initialValue={business?.favorite ? 0.75 : 0}
287
+ toValue={business?.favorite ? 0 : 0.75}
288
+ disableAnimation={!auth}
289
+ iconProps={{ color: theme.colors.danger5, size: 18 }}
290
+ isActive={business?.favorite}
291
+ />
292
+ </ReviewAndFavorite>
293
+ )}
294
+ </View>
295
+ <OText size={textSize} style={{ lineHeight: 15, marginBottom: 3 }} numberOfLines={isCustomLayout ? 1 : 2}>
262
296
  {business?.address}
263
297
  </OText>
264
- {/* <BusinessCategory>
265
- <OText>{getBusinessType()}</OText>
266
- </BusinessCategory> */}
267
298
  <Metadata>
268
299
  {!isBusinessOpen ? (
269
300
  <View style={styles.closed}>
@@ -274,21 +305,21 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
274
305
  ) : (
275
306
  <View style={styles.bullet}>
276
307
  {orderState?.options?.type === 1 && (
277
- <OText size={10} color={theme.colors.textSecondary}>
308
+ <OText size={textSize} color={theme.colors.textSecondary}>
278
309
  {`${t('DELIVERY_FEE', 'Delivery fee')} ${parsePrice(businessDeliveryPrice ?? business?.delivery_price) + ' \u2022 '}`}
279
310
  </OText>
280
311
  )}
281
- <OText size={10} color={theme.colors.textSecondary}>{`${convertHoursToMinutes(
312
+ <OText size={textSize} color={theme.colors.textSecondary}>{`${convertHoursToMinutes(
282
313
  orderState?.options?.type === 1
283
314
  ? (businessDeliveryTime ?? business?.delivery_time)
284
315
  : (businessPickupTime ?? business?.pickup_time),
285
316
  )} \u2022 `}</OText>
286
- <OText size={10} color={theme.colors.textSecondary}>{parseDistance(businessDistance ?? business?.distance)}</OText>
317
+ <OText size={textSize} color={theme.colors.textSecondary}>{parseDistance(businessDistance ?? business?.distance)}</OText>
287
318
  </View>
288
319
  )}
289
320
  </Metadata>
290
321
  </BusinessContent>
291
- </Card>
322
+ </CardAnimation>
292
323
  ) : (
293
324
  <Placeholder
294
325
  Animation={Fade}
@@ -1,12 +1,5 @@
1
1
  import styled, { css } from 'styled-components/native';
2
2
 
3
- export const Card = styled.TouchableOpacity`
4
- margin-vertical: 20px;
5
- border-radius: 7.6px;
6
- width: 100%;
7
- position: relative;
8
- `
9
-
10
3
  export const BusinessHero = styled.View`
11
4
  position: relative;
12
5
  border-top-right-radius: 7.6px;
@@ -16,7 +9,7 @@ export const BusinessHero = styled.View`
16
9
 
17
10
  export const BusinessContent = styled.View`
18
11
  padding-horizontal: 18px;
19
- padding-bottom: 18px;
12
+ padding-bottom: 10px;
20
13
  border-bottom-left-radius: 7.6px;
21
14
  border-bottom-right-radius: 7.6px;
22
15
  border-width: 1px;
@@ -46,7 +39,7 @@ export const BusinessState = styled.View`
46
39
  `
47
40
 
48
41
  export const BusinessLogo = styled.View`
49
-
42
+
50
43
  `
51
44
 
52
45
  export const ReviewAndFavorite = styled.View`
@@ -80,3 +73,15 @@ export const RibbonBox = styled.View`
80
73
  border-radius: 50px;
81
74
  `}
82
75
  `
76
+
77
+ export const OfferBox = styled.View`
78
+ position: absolute;
79
+ z-index: 1;
80
+ top: 20px;
81
+ right: 10px;
82
+ border-radius: 50px;
83
+ color: ${(props: any) => props.theme.colors.textThird};
84
+ background: ${(props: any) => props.theme.colors.inputBorderColor};
85
+ padding: 3px 8px;
86
+ max-width: 180px;
87
+ `
@@ -16,26 +16,19 @@ import {
16
16
  DivideView,
17
17
  MediaWrapper,
18
18
  } from './styles';
19
- import { Platform, StyleSheet, View } from 'react-native';
19
+ import { StyleSheet, View } from 'react-native';
20
20
  import { BusinessInformationParams } from '../../types';
21
21
  import { GoogleMap } from '../GoogleMap';
22
22
  import { WebView } from 'react-native-webview';
23
23
  import { formatUrlVideo } from '../../utils'
24
+ import { ScheduleAccordion } from '../ScheduleAccordion';
24
25
  const BusinessInformationUI = (props: BusinessInformationParams) => {
25
26
  const { businessState, businessSchedule, businessLocation } = props;
26
27
 
27
28
  const theme = useTheme();
28
29
  const [, t] = useLanguage();
29
30
  const [{ optimizeImage }] = useUtils();
30
- const daysOfWeek = [
31
- t('SUNDAY_ABBREVIATION', 'Sun'),
32
- t('MONDAY_ABBREVIATION', 'Mon'),
33
- t('TUESDAY_ABBREVIATION', 'Tues'),
34
- t('WEDNESDAY_ABBREVIATION', 'Wed'),
35
- t('THURSDAY_ABBREVIATION', 'Thur'),
36
- t('FRIDAY_ABBREVIATION', 'Fri'),
37
- t('SATURDAY_ABBREVIATION', 'Sat'),
38
- ];
31
+
39
32
  const scheduleFormatted = ({
40
33
  hour,
41
34
  minute,
@@ -112,25 +105,11 @@ const BusinessInformationUI = (props: BusinessInformationParams) => {
112
105
  <WrapScheduleBlock>
113
106
  {businessSchedule.map((schedule: any, i: number) => (
114
107
  <ScheduleBlock key={i}>
115
- <OText
116
- lineHeight={21}
117
- mBottom={16}
118
- size={14}
119
- weight={Platform.OS === 'android' ? 'bold' : '600'}
120
- style={{ flexBasis: '20%' }}>
121
- {daysOfWeek[i].toUpperCase()}
122
- </OText>
123
- {schedule.enabled ? (
124
- <OText mBottom={16}>
125
- {scheduleFormatted(schedule.lapses[0].open) +
126
- ' - ' +
127
- scheduleFormatted(schedule.lapses[0].close)}
128
- </OText>
129
- ) : (
130
- <OText color={theme.colors.red} mBottom={16}>
131
- {t('CLOSED', 'Closed')}
132
- </OText>
133
- )}
108
+ <ScheduleAccordion
109
+ weekIndex={i}
110
+ scheduleFormatted={scheduleFormatted}
111
+ schedule={schedule}
112
+ />
134
113
  </ScheduleBlock>
135
114
  ))}
136
115
  </WrapScheduleBlock>
@@ -152,10 +131,10 @@ const BusinessInformationUI = (props: BusinessInformationParams) => {
152
131
  style={{ width: 210, height: 127, borderRadius: 7.6 }}
153
132
  javaScriptEnabled={true}
154
133
  domStorageEnabled={true}
155
- source={{
134
+ source={{
156
135
  html: `
157
136
  <iframe width='80%' height='80%' src="${formatUrlVideo(v.video)}" frameBorder='0' allow='autoplay; encrypted-media' allowFullScreen />
158
- `,
137
+ `,
159
138
  }}
160
139
  mediaPlaybackRequiresUserAction={true}
161
140
  />
@@ -41,10 +41,16 @@ export const BusinessItemAccordion = (props: any) => {
41
41
  useEffect(() => {
42
42
  const cartsArray = Object.values(orderState?.carts)
43
43
  const cartsLength = cartsArray.filter((cart: any) => cart.products.length > 0).length ?? 0
44
- if ((cartsLength === 1) && !isClosed) {
45
- setActiveState(true)
44
+ if (cartsLength === 1) {
45
+ setActiveState(!isClosed)
46
46
  }
47
- }, [orderState?.carts])
47
+ }, [orderState?.carts, isClosed])
48
+
49
+ const subtotalWithTaxes = cart?.taxes?.reduce((acc: any, item: any) => {
50
+ if (item?.type === 1)
51
+ return acc = acc + item?.summary?.tax
52
+ return acc = acc
53
+ }, cart?.subtotal)
48
54
 
49
55
  return (
50
56
  <BIContainer isClosed={isClosed} isMultiCheckout={isMultiCheckout} checkoutVisible={!isActive && !isClosed && !!isProducts && !checkoutButtonDisabled}>
@@ -102,7 +108,7 @@ export const BusinessItemAccordion = (props: any) => {
102
108
  <OText
103
109
  size={12}
104
110
  lineHeight={18}
105
- color={theme.colors.textSecondary}
111
+ color={theme.colors.primary}
106
112
  style={{ textDecorationLine: 'underline' }}
107
113
  >
108
114
  {t('CHANGE_STORE', 'Change store')}
@@ -149,9 +155,9 @@ export const BusinessItemAccordion = (props: any) => {
149
155
  <OButton
150
156
  onClick={handleClickCheckout}
151
157
  textStyle={{ color: 'white', textAlign: 'center', flex: 1 }}
152
- style={{ width: 160, flexDirection: 'row', justifyContent: 'center', borderRadius: 7.6, shadowOpacity: 0 }}
158
+ style={{ width: 180, flexDirection: 'row', justifyContent: 'center', borderRadius: 7.6, shadowOpacity: 0 }}
153
159
  text={t('CHECKOUT', 'Checkout')}
154
- bgColor={(cart?.subtotal < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary}
160
+ bgColor={(subtotalWithTaxes < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary}
155
161
  borderColor={theme.colors.primary}
156
162
  isDisabled={checkoutButtonDisabled}
157
163
  />
@@ -0,0 +1,57 @@
1
+ import React from 'react'
2
+ import { View } from 'react-native'
3
+ import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder'
4
+
5
+ export const BusinessControllerSkeletons = ({ paginationProps }: any) => {
6
+ return (
7
+ <>
8
+ {[
9
+ ...Array(
10
+ paginationProps.nextPageItems
11
+ ? paginationProps.nextPageItems
12
+ : 3,
13
+ ).keys(),
14
+ ].map((item, i) => (
15
+ <Placeholder
16
+ Animation={Fade}
17
+ key={i}
18
+ style={{ width: 320, marginRight: 20, marginTop: 20 }}>
19
+ <View style={{ width: 320 }}>
20
+ <PlaceholderLine
21
+ height={155}
22
+ style={{ marginBottom: 20, borderRadius: 25 }}
23
+ />
24
+ <View style={{ paddingHorizontal: 10 }}>
25
+ <View
26
+ style={{
27
+ flexDirection: 'row',
28
+ justifyContent: 'space-between',
29
+ }}>
30
+ <PlaceholderLine
31
+ height={25}
32
+ width={40}
33
+ style={{ marginBottom: 10 }}
34
+ />
35
+ <PlaceholderLine
36
+ height={25}
37
+ width={20}
38
+ style={{ marginBottom: 10 }}
39
+ />
40
+ </View>
41
+ <PlaceholderLine
42
+ height={20}
43
+ width={30}
44
+ style={{ marginBottom: 10 }}
45
+ />
46
+ <PlaceholderLine
47
+ height={20}
48
+ width={80}
49
+ style={{ marginBottom: 0 }}
50
+ />
51
+ </View>
52
+ </View>
53
+ </Placeholder>
54
+ ))}
55
+ </>
56
+ )
57
+ }