ordering-ui-react-native 0.16.49 → 0.16.50-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 (205) hide show
  1. package/package.json +6 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +8 -14
  5. package/src/components/BusinessInformation/index.tsx +33 -4
  6. package/src/components/BusinessInformation/styles.tsx +2 -2
  7. package/src/components/BusinessProductsList/index.tsx +10 -10
  8. package/src/components/BusinessesListing/index.tsx +1 -1
  9. package/src/components/Checkout/index.tsx +2 -1
  10. package/src/components/LanguageSelector/index.tsx +21 -16
  11. package/src/components/Messages/index.tsx +2 -2
  12. package/src/components/NotificationSetting/index.tsx +85 -0
  13. package/src/components/OrdersOption/index.tsx +54 -56
  14. package/src/components/PaymentOptions/index.tsx +298 -345
  15. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  16. package/src/components/ReviewProducts/index.tsx +11 -0
  17. package/src/components/SingleProductReview/index.tsx +8 -5
  18. package/src/components/StripeElementsForm/index.tsx +25 -16
  19. package/src/components/VerifyPhone/styles.tsx +1 -2
  20. package/src/components/shared/OBottomPopup.tsx +6 -2
  21. package/src/components/shared/OToast.tsx +4 -4
  22. package/src/index.tsx +2 -0
  23. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  24. package/src/utils/index.tsx +2 -1
  25. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +259 -238
  26. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  27. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  28. package/themes/business/src/components/Chat/index.tsx +40 -32
  29. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  30. package/themes/business/src/components/DriverSchedule/index.tsx +36 -19
  31. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  32. package/themes/business/src/components/MapView/index.tsx +12 -1
  33. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  34. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -41
  35. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +40 -30
  36. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  37. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  38. package/themes/business/src/components/OrdersOption/index.tsx +76 -77
  39. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  40. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  41. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  43. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  44. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  45. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  46. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  47. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  48. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  49. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  50. package/themes/business/src/components/PreviousOrders/index.tsx +332 -244
  51. package/themes/business/src/components/PreviousOrders/styles.tsx +30 -2
  52. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  53. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  54. package/themes/business/src/components/ScheduleBlocked/index.tsx +2 -2
  55. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  56. package/themes/business/src/components/UserProfileForm/index.tsx +2 -0
  57. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  58. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  59. package/themes/business/src/components/shared/OLink.tsx +24 -12
  60. package/themes/business/src/components/shared/OText.tsx +3 -2
  61. package/themes/business/src/types/index.tsx +25 -11
  62. package/themes/business/src/utils/index.tsx +10 -0
  63. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  64. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  65. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  66. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  67. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  68. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  69. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  70. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  71. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  72. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  73. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  74. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  75. package/themes/kiosk/src/types/index.d.ts +2 -0
  76. package/themes/original/index.tsx +8 -0
  77. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  78. package/themes/original/src/components/AddressForm/index.tsx +157 -140
  79. package/themes/original/src/components/AddressList/index.tsx +1 -1
  80. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  81. package/themes/original/src/components/BusinessBasicInformation/index.tsx +218 -147
  82. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +2 -2
  83. package/themes/original/src/components/BusinessController/index.tsx +203 -94
  84. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  85. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  86. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  87. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  88. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  89. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  90. package/themes/original/src/components/BusinessListingSearch/index.tsx +85 -137
  91. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  92. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  93. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  94. package/themes/original/src/components/BusinessProductsList/index.tsx +59 -60
  95. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  96. package/themes/original/src/components/BusinessProductsListing/index.tsx +179 -83
  97. package/themes/original/src/components/BusinessProductsListing/styles.tsx +19 -12
  98. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  99. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +15 -4
  100. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +3 -2
  101. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +276 -122
  102. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +48 -11
  103. package/themes/original/src/components/BusinessesListing/index.tsx +82 -28
  104. package/themes/original/src/components/Cart/index.tsx +82 -15
  105. package/themes/original/src/components/Cart/styles.tsx +4 -0
  106. package/themes/original/src/components/CartContent/index.tsx +27 -17
  107. package/themes/original/src/components/CartContent/styles.tsx +1 -1
  108. package/themes/original/src/components/Checkout/index.tsx +114 -118
  109. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  110. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  111. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  112. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  113. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  114. package/themes/original/src/components/FavoriteList/index.tsx +69 -45
  115. package/themes/original/src/components/FloatingButton/index.tsx +13 -11
  116. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  117. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  118. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  119. package/themes/original/src/components/GoogleMap/index.tsx +20 -12
  120. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +25 -10
  121. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +4 -0
  122. package/themes/original/src/components/HelpGuide/index.tsx +9 -8
  123. package/themes/original/src/components/HelpOrder/index.tsx +9 -8
  124. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  125. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  126. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  127. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  128. package/themes/original/src/components/LottieAnimation/index.tsx +69 -0
  129. package/themes/original/src/components/Messages/index.tsx +35 -20
  130. package/themes/original/src/components/MomentOption/index.tsx +8 -6
  131. package/themes/original/src/components/MultiCart/index.tsx +63 -0
  132. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  133. package/themes/original/src/components/MultiCheckout/index.tsx +10 -2
  134. package/themes/original/src/components/MultiOrdersDetails/index.tsx +34 -16
  135. package/themes/original/src/components/MyOrders/index.tsx +88 -24
  136. package/themes/original/src/components/NavBar/index.tsx +11 -5
  137. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  138. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  139. package/themes/original/src/components/Notifications/index.tsx +148 -0
  140. package/themes/original/src/components/Notifications/styles.tsx +17 -0
  141. package/themes/original/src/components/OrderDetails/index.tsx +162 -50
  142. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  143. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  144. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  145. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  146. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  147. package/themes/original/src/components/OrderSummary/index.tsx +2 -35
  148. package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
  149. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  150. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  151. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  152. package/themes/original/src/components/OrdersOption/index.tsx +91 -53
  153. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  154. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  155. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  156. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  157. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  158. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  159. package/themes/original/src/components/ProductForm/index.tsx +645 -664
  160. package/themes/original/src/components/ProductForm/styles.tsx +10 -11
  161. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  162. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  163. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  164. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +0 -1
  165. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  166. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  167. package/themes/original/src/components/Promotions/index.tsx +232 -219
  168. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  169. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  170. package/themes/original/src/components/ReviewOrder/index.tsx +120 -108
  171. package/themes/original/src/components/ReviewOrder/styles.tsx +5 -7
  172. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  173. package/themes/original/src/components/ReviewTrigger/index.tsx +136 -0
  174. package/themes/original/src/components/ReviewTrigger/styles.tsx +41 -0
  175. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  176. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  177. package/themes/original/src/components/ServiceForm/index.tsx +341 -267
  178. package/themes/original/src/components/SignupForm/index.tsx +160 -113
  179. package/themes/original/src/components/SingleOrderCard/index.tsx +219 -129
  180. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  181. package/themes/original/src/components/SingleProductCard/index.tsx +182 -105
  182. package/themes/original/src/components/SingleProductCard/styles.tsx +3 -10
  183. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  184. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  185. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  186. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
  187. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  188. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  189. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  190. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  191. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  192. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  193. package/themes/original/src/components/Wallets/index.tsx +176 -164
  194. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  195. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  196. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  197. package/themes/original/src/components/shared/OBottomPopup.tsx +48 -15
  198. package/themes/original/src/components/shared/OButton.tsx +10 -3
  199. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  200. package/themes/original/src/components/shared/OInput.tsx +10 -1
  201. package/themes/original/src/layouts/Container.tsx +13 -9
  202. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  203. package/themes/original/src/types/index.tsx +86 -28
  204. package/themes/original/src/utils/index.tsx +103 -58
  205. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,33 +1,38 @@
1
1
  import React, { useState } from 'react';
2
+ import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
2
3
  import {
3
4
  BusinessController as BusinessSingleCard,
4
5
  useUtils,
5
6
  useOrder,
6
7
  useLanguage,
7
- useConfig
8
+ useConfig,
9
+ useToast,
10
+ useSession,
11
+ ToastType
8
12
  } from 'ordering-components/native';
9
13
  import { OIcon, OText } from '../shared';
10
- import { StyleSheet, TouchableOpacity, View } from 'react-native';
14
+ import { Dimensions, StyleSheet, View } from 'react-native';
11
15
  import { InView } from 'react-native-intersection-observer'
12
16
  import { BusinessControllerParams } from '../../types';
13
17
  import { convertHoursToMinutes, shape } from '../../utils';
18
+
14
19
  import {
15
- Card,
16
20
  BusinessHero,
17
21
  BusinessContent,
18
- BusinessCategory,
19
22
  BusinessInfo,
20
23
  Metadata,
21
24
  BusinessState,
22
25
  BusinessLogo,
23
26
  Reviews,
24
27
  RibbonBox,
25
- ReviewAndFavorite
28
+ ReviewAndFavorite,
29
+ OfferBox
26
30
  } from './styles';
27
31
  import { useTheme } from 'styled-components/native';
28
32
  import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome5';
29
- import IconAntDesign from 'react-native-vector-icons/AntDesign'
30
33
  import FastImage from 'react-native-fast-image'
34
+ import { LottieAnimation } from '../LottieAnimation';
35
+ import { CardAnimation } from '../shared/CardAnimation';
31
36
 
32
37
  export const BusinessControllerUI = (props: BusinessControllerParams) => {
33
38
  const {
@@ -36,6 +41,7 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
36
41
  navigation,
37
42
  isBusinessOpen,
38
43
  style,
44
+ isCustomLayout,
39
45
  businessHeader,
40
46
  businessFeatured,
41
47
  businessLogo,
@@ -44,15 +50,32 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
44
50
  businessDeliveryTime,
45
51
  businessPickupTime,
46
52
  businessDistance,
47
- handleFavoriteBusiness
53
+ handleFavoriteBusiness,
54
+ enableIntersection,
55
+ getBusinessOffer
48
56
  } = props;
57
+
49
58
  const [{ parsePrice, parseDistance, parseNumber, optimizeImage }] = useUtils();
59
+ const [, { showToast }] = useToast()
50
60
  const [orderState] = useOrder();
61
+ const [{ auth }] = useSession()
51
62
  const [configState] = useConfig();
52
63
  const [, t] = useLanguage();
53
64
  const theme = useTheme()
54
- const [isIntersectionObserver, setIsIntersectionObserver] = useState(false)
65
+ const windowHeight = Dimensions.get('window').height
66
+ const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
67
+
68
+ const textSize = isCustomLayout ? 12 : 10
69
+ const cardHeight = windowHeight * 0.3
70
+
55
71
  const styles = StyleSheet.create({
72
+ container: {
73
+ marginVertical: 20,
74
+ borderRadius: 7.6,
75
+ width: '100%',
76
+ position: 'relative',
77
+ height: cardHeight
78
+ },
56
79
  headerStyle: {
57
80
  borderTopLeftRadius: 7.6,
58
81
  borderTopRightRadius: 7.6,
@@ -102,7 +125,7 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
102
125
  flexDirection: 'row',
103
126
  alignItems: 'center',
104
127
  justifyContent: 'flex-start',
105
- },
128
+ }
106
129
  });
107
130
 
108
131
  const types = ['food', 'laundry', 'alcohol', 'groceries'];
@@ -121,43 +144,58 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
121
144
  const handleBusinessClick = (selectedBusiness: any) => {
122
145
  if (business?.open) handleClick && handleClick(selectedBusiness)
123
146
  else {
124
- navigation.navigate('BusinessPreorder', { business: selectedBusiness, handleBusinessClick: handleClick })
147
+ if (configState?.configs?.preorder_status_enabled?.value === '1') {
148
+ navigation.navigate('BusinessPreorder', { business: selectedBusiness, handleBusinessClick: handleClick })
149
+ return
150
+ }
151
+ showToast(ToastType.Info, t('ERROR_ADD_PRODUCT_BUSINESS_CLOSED', 'The business is closed at the moment'));
125
152
  }
126
153
  }
127
154
 
128
155
  const handleChangeFavorite = () => {
129
- handleFavoriteBusiness && handleFavoriteBusiness(!business?.favorite)
156
+ if (auth) {
157
+ handleFavoriteBusiness && handleFavoriteBusiness(!business?.favorite)
158
+ } else {
159
+ navigation && navigation.navigate('Login');
160
+ }
161
+ }
162
+
163
+ const handleChangeInterSection = (inView: boolean) => {
164
+ setIsIntersectionObserver(inView)
130
165
  }
131
166
 
132
167
  return (
133
- <InView triggerOnce={true} onChange={(inView: boolean) => setIsIntersectionObserver(inView)}>
134
- <Card activeOpacity={1} onPress={() => handleBusinessClick(business)} style={style}>
135
- {business?.ribbon?.enabled && (
136
- <RibbonBox
137
- bgColor={business?.ribbon?.color}
138
- isRoundRect={business?.ribbon?.shape === shape?.rectangleRound}
139
- isCapsule={business?.ribbon?.shape === shape?.capsuleShape}
140
- >
141
- <OText
142
- size={10}
143
- weight={'400'}
144
- color={theme.colors.white}
145
- numberOfLines={2}
146
- ellipsizeMode='tail'
147
- lineHeight={13}
168
+ <InView style={{ minHeight: 200 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeInterSection(inView)}>
169
+ {isIntersectionObserver ? (
170
+ <CardAnimation
171
+ style={[style, styles.container]}
172
+ onClick={() => handleBusinessClick(business)}
173
+ >
174
+ {business?.ribbon?.enabled && (
175
+ <RibbonBox
176
+ bgColor={business?.ribbon?.color}
177
+ isRoundRect={business?.ribbon?.shape === shape?.rectangleRound}
178
+ isCapsule={business?.ribbon?.shape === shape?.capsuleShape}
148
179
  >
149
- {business?.ribbon?.text}
150
- </OText>
151
- </RibbonBox>
152
- )}
153
- {isIntersectionObserver && (
180
+ <OText
181
+ size={10}
182
+ weight={'400'}
183
+ color={theme.colors.white}
184
+ numberOfLines={2}
185
+ ellipsizeMode='tail'
186
+ lineHeight={13}
187
+ >
188
+ {business?.ribbon?.text}
189
+ </OText>
190
+ </RibbonBox>
191
+ )}
154
192
  <BusinessHero>
155
193
  <FastImage
156
- style={{ height: 120 }}
157
- source={{
194
+ style={{ height: isCustomLayout ? cardHeight * 0.66 : 120 }}
195
+ source={(businessHeader || business?.header) ? {
158
196
  uri: optimizeImage(businessHeader || business?.header, 'h_500,c_limit'),
159
197
  priority: FastImage.priority.normal,
160
- }}
198
+ } : theme.images.dummies.businessHeader}
161
199
  resizeMode={FastImage.resizeMode.cover}
162
200
  />
163
201
  {(businessFeatured ?? business?.featured) && (
@@ -165,6 +203,18 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
165
203
  <FontAwesomeIcon name="crown" size={26} color="gold" />
166
204
  </View>
167
205
  )}
206
+ {(!isCustomLayout) && (
207
+ getBusinessOffer((business?.offers)) &&
208
+ <OfferBox>
209
+ <OText
210
+ size={10}
211
+ weight={'400'}
212
+ numberOfLines={2}
213
+ ellipsizeMode='tail'
214
+ lineHeight={13}
215
+ >{getBusinessOffer((business?.offers)) || parsePrice(0)}</OText>
216
+ </OfferBox>
217
+ )}
168
218
  <BusinessState>
169
219
  {!isBusinessOpen && (configState?.configs?.preorder_status_enabled?.value === '1') && (
170
220
  <View style={styles.businessStateView}>
@@ -178,78 +228,137 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
178
228
  )}
179
229
  </BusinessState>
180
230
  </BusinessHero>
181
- )}
182
- <BusinessContent>
183
- <BusinessInfo>
184
- {isIntersectionObserver && (
231
+ <BusinessContent>
232
+ <BusinessInfo style={isCustomLayout && { position: 'absolute', bottom: 85, left: 15 }}>
185
233
  <BusinessLogo style={styles.businessLogo}>
186
234
  <FastImage
187
235
  style={{ width: 56, height: 56 }}
188
- source={{
236
+ source={(businessLogo || business?.logo) ? {
189
237
  uri: optimizeImage(businessLogo || business?.logo, 'h_150,c_limit'),
190
238
  priority: FastImage.priority.normal,
191
- }}
239
+ } : theme.images.dummies.businessLogo}
192
240
  resizeMode={FastImage.resizeMode.cover}
193
241
  />
194
242
  </BusinessLogo>
195
- )}
196
- <ReviewAndFavorite>
197
- {(businessReviews?.reviews?.total > 0 ?? business?.reviews?.total > 0) && (
198
- <Reviews>
199
- <OIcon src={theme.images.general.star} width={12} style={styles.starIcon} />
200
- <OText size={10} style={{ lineHeight: 15 }}>
201
- {parseNumber(businessReviews?.reviews?.total ?? business?.reviews?.total, { separator: '.' })}
243
+ {!isCustomLayout && (
244
+ <ReviewAndFavorite>
245
+ {(businessReviews?.reviews?.total > 0 ?? business?.reviews?.total > 0) && (
246
+ <Reviews>
247
+ <OIcon src={theme.images.general.star} width={12} style={styles.starIcon} />
248
+ <OText size={10} style={{ lineHeight: 15 }}>
249
+ {parseNumber(businessReviews?.reviews?.total ?? business?.reviews?.total, { separator: '.' })}
250
+ </OText>
251
+ </Reviews>
252
+ )}
253
+ <LottieAnimation
254
+ type='favorite'
255
+ onClick={handleChangeFavorite}
256
+ initialValue={business?.favorite ? 0.75 : 0}
257
+ toValue={business?.favorite ? 0 : 0.75}
258
+ disableAnimation={!auth}
259
+ iconProps={{ color: theme.colors.danger5, size: 18 }}
260
+ isActive={business?.favorite}
261
+ />
262
+ </ReviewAndFavorite>
263
+ )}
264
+ </BusinessInfo>
265
+ <View style={isCustomLayout && { width: '100%', flexDirection: 'row', justifyContent: 'space-between', marginTop: 5 }}>
266
+ <OText
267
+ size={textSize + 2}
268
+ style={{ lineHeight: 18, marginBottom: 6 }}
269
+ weight={'500'}>
270
+ {business?.name}
271
+ </OText>
272
+ {isCustomLayout && (
273
+ <ReviewAndFavorite>
274
+ {(businessReviews?.reviews?.total > 0 ?? business?.reviews?.total > 0) && (
275
+ <Reviews>
276
+ <OIcon src={theme.images.general.star} width={12} style={styles.starIcon} />
277
+ <OText size={10} style={{ lineHeight: 15 }}>
278
+ {parseNumber(businessReviews?.reviews?.total ?? business?.reviews?.total, { separator: '.' })}
279
+ </OText>
280
+ </Reviews>
281
+ )}
282
+ <LottieAnimation
283
+ type='favorite'
284
+ onClick={handleChangeFavorite}
285
+ initialValue={business?.favorite ? 0.75 : 0}
286
+ toValue={business?.favorite ? 0 : 0.75}
287
+ disableAnimation={!auth}
288
+ iconProps={{ color: theme.colors.danger5, size: 18 }}
289
+ isActive={business?.favorite}
290
+ />
291
+ </ReviewAndFavorite>
292
+ )}
293
+ </View>
294
+ <OText size={textSize} style={{ lineHeight: 15, marginBottom: 3 }} numberOfLines={isCustomLayout ? 1 : 2}>
295
+ {business?.address}
296
+ </OText>
297
+ <Metadata>
298
+ {!isBusinessOpen ? (
299
+ <View style={styles.closed}>
300
+ <OText size={10} color={theme.colors.red}>
301
+ {t('CLOSED', 'Closed')}
202
302
  </OText>
203
- </Reviews>
303
+ </View>
304
+ ) : (
305
+ <View style={styles.bullet}>
306
+ {orderState?.options?.type === 1 && (
307
+ <OText size={textSize} color={theme.colors.textSecondary}>
308
+ {`${t('DELIVERY_FEE', 'Delivery fee')} ${parsePrice(businessDeliveryPrice ?? business?.delivery_price) + ' \u2022 '}`}
309
+ </OText>
310
+ )}
311
+ <OText size={textSize} color={theme.colors.textSecondary}>{`${convertHoursToMinutes(
312
+ orderState?.options?.type === 1
313
+ ? (businessDeliveryTime ?? business?.delivery_time)
314
+ : (businessPickupTime ?? business?.pickup_time),
315
+ )} \u2022 `}</OText>
316
+ <OText size={textSize} color={theme.colors.textSecondary}>{parseDistance(businessDistance ?? business?.distance)}</OText>
317
+ </View>
204
318
  )}
205
- <TouchableOpacity
206
- onPress={handleChangeFavorite}
207
- >
208
- <IconAntDesign
209
- name={business?.favorite ? 'heart' : 'hearto'}
210
- color={theme.colors.danger5}
211
- size={18}
319
+ </Metadata>
320
+ </BusinessContent>
321
+ </CardAnimation>
322
+ ) : (
323
+ <Placeholder
324
+ Animation={Fade}
325
+ style={{ marginBottom: 20 }}>
326
+ <View style={{ width: '100%' }}>
327
+ <PlaceholderLine
328
+ height={200}
329
+ style={{ marginBottom: 20, borderRadius: 25 }}
330
+ />
331
+ <View style={{ paddingHorizontal: 10 }}>
332
+ <View
333
+ style={{
334
+ flexDirection: 'row',
335
+ justifyContent: 'space-between',
336
+ }}>
337
+ <PlaceholderLine
338
+ height={25}
339
+ width={40}
340
+ style={{ marginBottom: 10 }}
341
+ />
342
+ <PlaceholderLine
343
+ height={25}
344
+ width={20}
345
+ style={{ marginBottom: 10 }}
212
346
  />
213
- </TouchableOpacity>
214
- </ReviewAndFavorite>
215
- </BusinessInfo>
216
- <OText
217
- size={12}
218
- style={{ lineHeight: 18, marginBottom: 6 }}
219
- weight={'500'}>
220
- {business?.name}
221
- </OText>
222
- <OText size={10} style={{ lineHeight: 15, marginBottom: 3 }}>
223
- {business?.address}
224
- </OText>
225
- {/* <BusinessCategory>
226
- <OText>{getBusinessType()}</OText>
227
- </BusinessCategory> */}
228
- <Metadata>
229
- {!isBusinessOpen ? (
230
- <View style={styles.closed}>
231
- <OText size={10} color={theme.colors.red}>
232
- {t('CLOSED', 'Closed')}
233
- </OText>
234
- </View>
235
- ) : (
236
- <View style={styles.bullet}>
237
- {orderState?.options?.type === 1 && (
238
- <OText size={10} color={theme.colors.textSecondary}>
239
- {`${t('DELIVERY_FEE', 'Delivery fee')} ${parsePrice(businessDeliveryPrice ?? business?.delivery_price) + ' \u2022 '}`}
240
- </OText>
241
- )}
242
- <OText size={10} color={theme.colors.textSecondary}>{`${convertHoursToMinutes(
243
- orderState?.options?.type === 1
244
- ? (businessDeliveryTime ?? business?.delivery_time)
245
- : (businessPickupTime ?? business?.pickup_time),
246
- )} \u2022 `}</OText>
247
- <OText size={10} color={theme.colors.textSecondary}>{parseDistance(businessDistance ?? business?.distance)}</OText>
248
347
  </View>
249
- )}
250
- </Metadata>
251
- </BusinessContent>
252
- </Card>
348
+ <PlaceholderLine
349
+ height={20}
350
+ width={30}
351
+ style={{ marginBottom: 10 }}
352
+ />
353
+ <PlaceholderLine
354
+ height={20}
355
+ width={80}
356
+ style={{ marginBottom: 10 }}
357
+ />
358
+ </View>
359
+ </View>
360
+ </Placeholder>
361
+ )}
253
362
  </InView>
254
363
  );
255
364
  };
@@ -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
+ }
@@ -0,0 +1,59 @@
1
+ import { useLanguage, useUtils } from 'ordering-components/native'
2
+ import React from 'react'
3
+ import { View, TouchableOpacity, StyleSheet } from 'react-native'
4
+ import { OText } from '../../shared'
5
+
6
+ import { ProgressContentWrapper, ProgressBar } from './styles'
7
+
8
+ export const MaxSectionItem = (props: any) => {
9
+ const {
10
+ filters,
11
+ handleChangeFilters,
12
+ title,
13
+ options,
14
+ filter
15
+ } = props
16
+
17
+ const [, t] = useLanguage()
18
+ const [{ parsePrice }] = useUtils();
19
+
20
+ const styles = StyleSheet.create({
21
+ maxContainer: {
22
+ flexDirection: 'row',
23
+ justifyContent: 'space-between'
24
+ }
25
+ });
26
+
27
+ const parseValue = (option: number) => {
28
+ return filter === 'max_distance'
29
+ ? `${option / 1000} ${t('KM', 'Km')}`
30
+ : filter === 'max_eta'
31
+ ? `${option} ${t('MIN', 'min')}`
32
+ : parsePrice(option)
33
+ }
34
+ return (
35
+ <View style={{ marginBottom: 20 }}>
36
+ <OText weight='bold' mBottom={10} size={16}>
37
+ {title}
38
+ </OText>
39
+ <ProgressContentWrapper>
40
+ <ProgressBar style={{ width: `${((options.indexOf(filters?.[filter]) / 3) * 100) ?? 100}%` }} />
41
+ </ProgressContentWrapper>
42
+ <View style={styles.maxContainer}>
43
+ {options.map((option: any, i: number) => (
44
+ <TouchableOpacity
45
+ onPress={() => handleChangeFilters(filter, option)}
46
+ key={option}
47
+ >
48
+ <OText
49
+ size={12}
50
+ weight={filters?.[filter] === option || (option === 'default' && (filters?.[filter] === 'default' || !filters?.[filter])) ? 'bold' : '500'}
51
+ >
52
+ {option === 'default' ? `${parseValue(options[i - 1])}+` : parseValue(option)}
53
+ </OText>
54
+ </TouchableOpacity>
55
+ ))}
56
+ </View>
57
+ </View>
58
+ )
59
+ }