ordering-ui-react-native 0.16.51 → 0.16.52-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 (204) 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/SingleProductReview/index.tsx +7 -4
  17. package/src/components/StripeElementsForm/index.tsx +25 -16
  18. package/src/components/VerifyPhone/styles.tsx +1 -2
  19. package/src/components/shared/OBottomPopup.tsx +6 -2
  20. package/src/components/shared/OToast.tsx +4 -4
  21. package/src/index.tsx +2 -0
  22. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  23. package/src/utils/index.tsx +2 -1
  24. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +259 -238
  25. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  26. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  27. package/themes/business/src/components/Chat/index.tsx +40 -32
  28. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  29. package/themes/business/src/components/DriverSchedule/index.tsx +36 -19
  30. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  31. package/themes/business/src/components/MapView/index.tsx +12 -1
  32. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  33. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -41
  34. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +40 -30
  35. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  36. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  37. package/themes/business/src/components/OrdersOption/index.tsx +76 -77
  38. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  39. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  40. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  41. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  42. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  44. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  45. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  46. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  47. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  48. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  49. package/themes/business/src/components/PreviousOrders/index.tsx +332 -244
  50. package/themes/business/src/components/PreviousOrders/styles.tsx +30 -2
  51. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  52. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  53. package/themes/business/src/components/ScheduleBlocked/index.tsx +2 -2
  54. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  55. package/themes/business/src/components/UserProfileForm/index.tsx +2 -0
  56. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  57. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  58. package/themes/business/src/components/shared/OLink.tsx +24 -12
  59. package/themes/business/src/components/shared/OText.tsx +3 -2
  60. package/themes/business/src/types/index.tsx +25 -11
  61. package/themes/business/src/utils/index.tsx +10 -0
  62. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  63. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  64. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  65. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  66. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  67. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  68. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  69. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  70. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  71. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  72. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  73. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  74. package/themes/kiosk/src/types/index.d.ts +2 -0
  75. package/themes/original/index.tsx +8 -0
  76. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  77. package/themes/original/src/components/AddressForm/index.tsx +157 -140
  78. package/themes/original/src/components/AddressList/index.tsx +1 -1
  79. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  80. package/themes/original/src/components/BusinessBasicInformation/index.tsx +218 -147
  81. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +2 -2
  82. package/themes/original/src/components/BusinessController/index.tsx +192 -91
  83. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  84. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  85. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  86. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  87. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  88. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  89. package/themes/original/src/components/BusinessListingSearch/index.tsx +85 -137
  90. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  91. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  92. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  93. package/themes/original/src/components/BusinessProductsList/index.tsx +59 -61
  94. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  95. package/themes/original/src/components/BusinessProductsListing/index.tsx +179 -83
  96. package/themes/original/src/components/BusinessProductsListing/styles.tsx +19 -12
  97. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  98. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +37 -30
  99. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +3 -2
  100. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +299 -148
  101. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +47 -11
  102. package/themes/original/src/components/BusinessesListing/index.tsx +80 -25
  103. package/themes/original/src/components/Cart/index.tsx +82 -15
  104. package/themes/original/src/components/Cart/styles.tsx +4 -0
  105. package/themes/original/src/components/CartContent/index.tsx +27 -17
  106. package/themes/original/src/components/CartContent/styles.tsx +1 -1
  107. package/themes/original/src/components/Checkout/index.tsx +114 -118
  108. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  109. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  110. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  111. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  112. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  113. package/themes/original/src/components/FavoriteList/index.tsx +69 -45
  114. package/themes/original/src/components/FloatingButton/index.tsx +13 -11
  115. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  116. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  117. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  118. package/themes/original/src/components/GoogleMap/index.tsx +20 -12
  119. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +25 -10
  120. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +4 -0
  121. package/themes/original/src/components/HelpGuide/index.tsx +9 -8
  122. package/themes/original/src/components/HelpOrder/index.tsx +9 -8
  123. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  124. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  125. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  126. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  127. package/themes/original/src/components/LottieAnimation/index.tsx +69 -0
  128. package/themes/original/src/components/Messages/index.tsx +35 -20
  129. package/themes/original/src/components/MomentOption/index.tsx +8 -6
  130. package/themes/original/src/components/MultiCart/index.tsx +63 -0
  131. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  132. package/themes/original/src/components/MultiCheckout/index.tsx +10 -2
  133. package/themes/original/src/components/MultiOrdersDetails/index.tsx +34 -16
  134. package/themes/original/src/components/MyOrders/index.tsx +88 -24
  135. package/themes/original/src/components/NavBar/index.tsx +11 -5
  136. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  137. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  138. package/themes/original/src/components/Notifications/index.tsx +148 -0
  139. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  140. package/themes/original/src/components/OrderDetails/index.tsx +162 -50
  141. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  142. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  143. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  144. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  145. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  146. package/themes/original/src/components/OrderSummary/index.tsx +2 -35
  147. package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
  148. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  149. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  150. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  151. package/themes/original/src/components/OrdersOption/index.tsx +91 -53
  152. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  153. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  154. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  155. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  156. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  157. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  158. package/themes/original/src/components/ProductForm/index.tsx +365 -384
  159. package/themes/original/src/components/ProductForm/styles.tsx +7 -12
  160. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  161. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  162. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  163. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +0 -1
  164. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  165. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  166. package/themes/original/src/components/Promotions/index.tsx +232 -219
  167. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  168. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  169. package/themes/original/src/components/ReviewOrder/index.tsx +120 -108
  170. package/themes/original/src/components/ReviewOrder/styles.tsx +5 -7
  171. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  172. package/themes/original/src/components/ReviewTrigger/index.tsx +136 -0
  173. package/themes/original/src/components/ReviewTrigger/styles.tsx +41 -0
  174. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  175. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  176. package/themes/original/src/components/ServiceForm/index.tsx +341 -267
  177. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  178. package/themes/original/src/components/SingleOrderCard/index.tsx +219 -129
  179. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  180. package/themes/original/src/components/SingleProductCard/index.tsx +180 -104
  181. package/themes/original/src/components/SingleProductCard/styles.tsx +3 -10
  182. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  183. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  184. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  185. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
  186. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  187. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  188. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  189. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  190. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  191. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  192. package/themes/original/src/components/Wallets/index.tsx +176 -164
  193. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  194. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  195. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  196. package/themes/original/src/components/shared/OBottomPopup.tsx +48 -15
  197. package/themes/original/src/components/shared/OButton.tsx +10 -3
  198. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  199. package/themes/original/src/components/shared/OInput.tsx +10 -1
  200. package/themes/original/src/layouts/Container.tsx +13 -9
  201. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  202. package/themes/original/src/types/index.tsx +79 -23
  203. package/themes/original/src/utils/index.tsx +103 -58
  204. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,4 +1,5 @@
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,
@@ -6,30 +7,32 @@ import {
6
7
  useLanguage,
7
8
  useConfig,
8
9
  useToast,
10
+ useSession,
9
11
  ToastType
10
12
  } from 'ordering-components/native';
11
13
  import { OIcon, OText } from '../shared';
12
- import { StyleSheet, TouchableOpacity, View } from 'react-native';
14
+ import { Dimensions, StyleSheet, View } from 'react-native';
13
15
  import { InView } from 'react-native-intersection-observer'
14
16
  import { BusinessControllerParams } from '../../types';
15
17
  import { convertHoursToMinutes, shape } from '../../utils';
18
+
16
19
  import {
17
- Card,
18
20
  BusinessHero,
19
21
  BusinessContent,
20
- BusinessCategory,
21
22
  BusinessInfo,
22
23
  Metadata,
23
24
  BusinessState,
24
25
  BusinessLogo,
25
26
  Reviews,
26
27
  RibbonBox,
27
- ReviewAndFavorite
28
+ ReviewAndFavorite,
29
+ OfferBox
28
30
  } from './styles';
29
31
  import { useTheme } from 'styled-components/native';
30
32
  import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome5';
31
- import IconAntDesign from 'react-native-vector-icons/AntDesign'
32
33
  import FastImage from 'react-native-fast-image'
34
+ import { LottieAnimation } from '../LottieAnimation';
35
+ import { CardAnimation } from '../shared/CardAnimation';
33
36
 
34
37
  export const BusinessControllerUI = (props: BusinessControllerParams) => {
35
38
  const {
@@ -38,6 +41,7 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
38
41
  navigation,
39
42
  isBusinessOpen,
40
43
  style,
44
+ isCustomLayout,
41
45
  businessHeader,
42
46
  businessFeatured,
43
47
  businessLogo,
@@ -47,16 +51,31 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
47
51
  businessPickupTime,
48
52
  businessDistance,
49
53
  handleFavoriteBusiness,
50
- enableIntersection
54
+ enableIntersection,
55
+ getBusinessOffer
51
56
  } = props;
57
+
52
58
  const [{ parsePrice, parseDistance, parseNumber, optimizeImage }] = useUtils();
53
59
  const [, { showToast }] = useToast()
54
60
  const [orderState] = useOrder();
61
+ const [{ auth }] = useSession()
55
62
  const [configState] = useConfig();
56
63
  const [, t] = useLanguage();
57
64
  const theme = useTheme()
65
+ const windowHeight = Dimensions.get('window').height
58
66
  const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
67
+
68
+ const textSize = isCustomLayout ? 12 : 10
69
+ const cardHeight = windowHeight * 0.3
70
+
59
71
  const styles = StyleSheet.create({
72
+ container: {
73
+ marginVertical: 20,
74
+ borderRadius: 7.6,
75
+ width: '100%',
76
+ position: 'relative',
77
+ height: cardHeight
78
+ },
60
79
  headerStyle: {
61
80
  borderTopLeftRadius: 7.6,
62
81
  borderTopRightRadius: 7.6,
@@ -106,7 +125,7 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
106
125
  flexDirection: 'row',
107
126
  alignItems: 'center',
108
127
  justifyContent: 'flex-start',
109
- },
128
+ }
110
129
  });
111
130
 
112
131
  const types = ['food', 'laundry', 'alcohol', 'groceries'];
@@ -134,38 +153,49 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
134
153
  }
135
154
 
136
155
  const handleChangeFavorite = () => {
137
- 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)
138
165
  }
139
166
 
140
167
  return (
141
- <InView triggerOnce={true} onChange={(inView: boolean) => setIsIntersectionObserver(inView)}>
142
- <Card activeOpacity={1} onPress={() => handleBusinessClick(business)} style={style}>
143
- {business?.ribbon?.enabled && (
144
- <RibbonBox
145
- bgColor={business?.ribbon?.color}
146
- isRoundRect={business?.ribbon?.shape === shape?.rectangleRound}
147
- isCapsule={business?.ribbon?.shape === shape?.capsuleShape}
148
- >
149
- <OText
150
- size={10}
151
- weight={'400'}
152
- color={theme.colors.white}
153
- numberOfLines={2}
154
- ellipsizeMode='tail'
155
- 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}
156
179
  >
157
- {business?.ribbon?.text}
158
- </OText>
159
- </RibbonBox>
160
- )}
161
- {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
+ )}
162
192
  <BusinessHero>
163
193
  <FastImage
164
- style={{ height: 120 }}
165
- source={{
194
+ style={{ height: isCustomLayout ? cardHeight * 0.66 : 120 }}
195
+ source={(businessHeader || business?.header) ? {
166
196
  uri: optimizeImage(businessHeader || business?.header, 'h_500,c_limit'),
167
197
  priority: FastImage.priority.normal,
168
- }}
198
+ } : theme.images.dummies.businessHeader}
169
199
  resizeMode={FastImage.resizeMode.cover}
170
200
  />
171
201
  {(businessFeatured ?? business?.featured) && (
@@ -173,6 +203,18 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
173
203
  <FontAwesomeIcon name="crown" size={26} color="gold" />
174
204
  </View>
175
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
+ )}
176
218
  <BusinessState>
177
219
  {!isBusinessOpen && (configState?.configs?.preorder_status_enabled?.value === '1') && (
178
220
  <View style={styles.businessStateView}>
@@ -186,78 +228,137 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
186
228
  )}
187
229
  </BusinessState>
188
230
  </BusinessHero>
189
- )}
190
- <BusinessContent>
191
- <BusinessInfo>
192
- {isIntersectionObserver && (
231
+ <BusinessContent>
232
+ <BusinessInfo style={isCustomLayout && { position: 'absolute', bottom: 85, left: 15 }}>
193
233
  <BusinessLogo style={styles.businessLogo}>
194
234
  <FastImage
195
235
  style={{ width: 56, height: 56 }}
196
- source={{
236
+ source={(businessLogo || business?.logo) ? {
197
237
  uri: optimizeImage(businessLogo || business?.logo, 'h_150,c_limit'),
198
238
  priority: FastImage.priority.normal,
199
- }}
239
+ } : theme.images.dummies.businessLogo}
200
240
  resizeMode={FastImage.resizeMode.cover}
201
241
  />
202
242
  </BusinessLogo>
203
- )}
204
- <ReviewAndFavorite>
205
- {(businessReviews?.reviews?.total > 0 ?? business?.reviews?.total > 0) && (
206
- <Reviews>
207
- <OIcon src={theme.images.general.star} width={12} style={styles.starIcon} />
208
- <OText size={10} style={{ lineHeight: 15 }}>
209
- {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')}
210
302
  </OText>
211
- </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>
212
318
  )}
213
- <TouchableOpacity
214
- onPress={handleChangeFavorite}
215
- >
216
- <IconAntDesign
217
- name={business?.favorite ? 'heart' : 'hearto'}
218
- color={theme.colors.danger5}
219
- 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 }}
220
346
  />
221
- </TouchableOpacity>
222
- </ReviewAndFavorite>
223
- </BusinessInfo>
224
- <OText
225
- size={12}
226
- style={{ lineHeight: 18, marginBottom: 6 }}
227
- weight={'500'}>
228
- {business?.name}
229
- </OText>
230
- <OText size={10} style={{ lineHeight: 15, marginBottom: 3 }}>
231
- {business?.address}
232
- </OText>
233
- {/* <BusinessCategory>
234
- <OText>{getBusinessType()}</OText>
235
- </BusinessCategory> */}
236
- <Metadata>
237
- {!isBusinessOpen ? (
238
- <View style={styles.closed}>
239
- <OText size={10} color={theme.colors.red}>
240
- {t('CLOSED', 'Closed')}
241
- </OText>
242
- </View>
243
- ) : (
244
- <View style={styles.bullet}>
245
- {orderState?.options?.type === 1 && (
246
- <OText size={10} color={theme.colors.textSecondary}>
247
- {`${t('DELIVERY_FEE', 'Delivery fee')} ${parsePrice(businessDeliveryPrice ?? business?.delivery_price) + ' \u2022 '}`}
248
- </OText>
249
- )}
250
- <OText size={10} color={theme.colors.textSecondary}>{`${convertHoursToMinutes(
251
- orderState?.options?.type === 1
252
- ? (businessDeliveryTime ?? business?.delivery_time)
253
- : (businessPickupTime ?? business?.pickup_time),
254
- )} \u2022 `}</OText>
255
- <OText size={10} color={theme.colors.textSecondary}>{parseDistance(businessDistance ?? business?.distance)}</OText>
256
347
  </View>
257
- )}
258
- </Metadata>
259
- </BusinessContent>
260
- </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
+ )}
261
362
  </InView>
262
363
  );
263
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
+ }
@@ -0,0 +1,13 @@
1
+ import styled from 'styled-components/native';
2
+
3
+ export const ProgressBar = styled.View`
4
+ height: 4px;
5
+ background: ${(props: any) => props.theme.colors.textNormal};
6
+ `
7
+
8
+ export const ProgressContentWrapper = styled.View`
9
+ height: 4px;
10
+ background: #F8F9FA;
11
+ margin-bottom: 10px;
12
+ flex: 1;
13
+ `