ordering-ui-react-native 0.15.77 → 0.15.78-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 (221) hide show
  1. package/package.json +7 -3
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +1 -1
  5. package/src/components/AddressForm/index.tsx +18 -2
  6. package/src/components/BusinessBasicInformation/index.tsx +11 -19
  7. package/src/components/BusinessController/index.tsx +16 -8
  8. package/src/components/BusinessInformation/index.tsx +14 -0
  9. package/src/components/BusinessTypeFilter/index.tsx +1 -2
  10. package/src/components/BusinessesListing/index.tsx +1 -1
  11. package/src/components/Checkout/index.tsx +25 -3
  12. package/src/components/DriverTips/index.tsx +11 -6
  13. package/src/components/LanguageSelector/index.tsx +6 -2
  14. package/src/components/LoginForm/index.tsx +120 -30
  15. package/src/components/LoginForm/styles.tsx +6 -0
  16. package/src/components/NotificationSetting/index.tsx +85 -0
  17. package/src/components/OrderDetails/index.tsx +7 -21
  18. package/src/components/PaymentOptions/index.tsx +335 -365
  19. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  20. package/src/components/ReviewDriver/index.tsx +1 -1
  21. package/src/components/ReviewOrder/index.tsx +2 -1
  22. package/src/components/ReviewProducts/index.tsx +11 -0
  23. package/src/components/SignupForm/index.tsx +145 -61
  24. package/src/components/SingleProductCard/index.tsx +16 -4
  25. package/src/components/SingleProductReview/index.tsx +1 -1
  26. package/src/components/StripeElementsForm/index.tsx +25 -16
  27. package/src/components/StripeMethodForm/index.tsx +22 -24
  28. package/src/components/UpsellingProducts/index.tsx +1 -1
  29. package/src/components/UserProfileForm/index.tsx +63 -6
  30. package/src/components/UserProfileForm/styles.tsx +8 -0
  31. package/src/components/VerifyPhone/styles.tsx +1 -2
  32. package/src/components/shared/OBottomPopup.tsx +6 -2
  33. package/src/components/shared/OModal.tsx +1 -1
  34. package/src/hooks/useCountdownTimer.tsx +26 -0
  35. package/src/index.tsx +2 -0
  36. package/src/navigators/CheckoutNavigator.tsx +6 -0
  37. package/src/navigators/HomeNavigator.tsx +12 -0
  38. package/src/pages/BusinessesListing.tsx +7 -6
  39. package/src/pages/MultiCheckout.tsx +31 -0
  40. package/src/pages/MultiOrdersDetails.tsx +27 -0
  41. package/src/pages/OrderDetails.tsx +1 -1
  42. package/src/pages/ReviewDriver.tsx +2 -2
  43. package/src/pages/ReviewOrder.tsx +2 -2
  44. package/src/pages/Sessions.tsx +22 -0
  45. package/src/theme.json +0 -1
  46. package/src/types/index.tsx +18 -11
  47. package/src/utils/index.tsx +28 -29
  48. package/themes/business/index.tsx +4 -0
  49. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +100 -60
  50. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  51. package/themes/business/src/components/Chat/index.tsx +51 -91
  52. package/themes/business/src/components/DriverMap/index.tsx +6 -5
  53. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  54. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  55. package/themes/business/src/components/LoginForm/index.tsx +89 -2
  56. package/themes/business/src/components/LoginForm/styles.tsx +6 -0
  57. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  58. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -13
  59. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  60. package/themes/business/src/components/OrderDetails/Delivery.tsx +28 -11
  61. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +9 -2
  62. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +6 -0
  63. package/themes/business/src/components/OrdersListManager/index.tsx +11 -4
  64. package/themes/business/src/components/OrdersOption/index.tsx +16 -4
  65. package/themes/business/src/components/PreviousOrders/index.tsx +7 -7
  66. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  67. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  68. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  69. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  70. package/themes/business/src/components/shared/OModal.tsx +41 -38
  71. package/themes/business/src/types/index.tsx +14 -7
  72. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  73. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  74. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  75. package/themes/kiosk/src/components/BusinessMenu/index.tsx +39 -28
  76. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -3
  77. package/themes/kiosk/src/components/Cart/index.tsx +11 -12
  78. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +9 -2
  79. package/themes/kiosk/src/components/CartContent/index.tsx +0 -11
  80. package/themes/kiosk/src/components/CartItem/index.tsx +4 -3
  81. package/themes/kiosk/src/components/CategoriesMenu/index.tsx +107 -62
  82. package/themes/kiosk/src/components/Checkout/index.tsx +40 -22
  83. package/themes/kiosk/src/components/CustomerName/index.tsx +0 -6
  84. package/themes/kiosk/src/components/DrawerView/index.tsx +1 -0
  85. package/themes/kiosk/src/components/DrawerView/styles.tsx +2 -2
  86. package/themes/kiosk/src/components/NavBar/index.tsx +29 -20
  87. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  88. package/themes/kiosk/src/components/OrderDetails/index.tsx +32 -27
  89. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +9 -11
  90. package/themes/kiosk/src/components/PaymentOptions/index.tsx +56 -54
  91. package/themes/kiosk/src/components/ProductForm/index.tsx +6 -7
  92. package/themes/kiosk/src/components/ProductItemAccordion/index.tsx +2 -2
  93. package/themes/kiosk/src/components/ProductOption/index.tsx +1 -1
  94. package/themes/kiosk/src/components/ProductOptionSubOption/index.tsx +3 -1
  95. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +16 -5
  96. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  97. package/themes/kiosk/src/types/index.d.ts +1 -0
  98. package/themes/original/index.tsx +24 -0
  99. package/themes/original/src/components/ActiveOrders/index.tsx +15 -132
  100. package/themes/original/src/components/ActiveOrders/styles.tsx +0 -54
  101. package/themes/original/src/components/AddressForm/index.tsx +7 -6
  102. package/themes/original/src/components/AddressList/index.tsx +2 -2
  103. package/themes/original/src/components/AppleLogin/index.tsx +6 -8
  104. package/themes/original/src/components/BusinessBasicInformation/index.tsx +291 -150
  105. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  106. package/themes/original/src/components/BusinessController/index.tsx +201 -96
  107. package/themes/original/src/components/BusinessController/styles.tsx +5 -0
  108. package/themes/original/src/components/BusinessItemAccordion/index.tsx +8 -5
  109. package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -1
  110. package/themes/original/src/components/BusinessListingSearch/index.tsx +234 -64
  111. package/themes/original/src/components/BusinessListingSearch/styles.tsx +22 -2
  112. package/themes/original/src/components/BusinessPreorder/index.tsx +1 -1
  113. package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -2
  114. package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +44 -0
  115. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  116. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  117. package/themes/original/src/components/BusinessProductsList/index.tsx +65 -73
  118. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  119. package/themes/original/src/components/BusinessProductsListing/index.tsx +315 -176
  120. package/themes/original/src/components/BusinessProductsListing/styles.tsx +11 -0
  121. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  122. package/themes/original/src/components/BusinessTypeFilter/index.tsx +106 -38
  123. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  124. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +560 -0
  125. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -2
  126. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +661 -0
  127. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  128. package/themes/original/src/components/BusinessesListing/index.tsx +104 -462
  129. package/themes/original/src/components/Cart/index.tsx +84 -39
  130. package/themes/original/src/components/Cart/styles.tsx +4 -0
  131. package/themes/original/src/components/Checkout/index.tsx +100 -50
  132. package/themes/original/src/components/Checkout/styles.tsx +0 -1
  133. package/themes/original/src/components/DriverTips/index.tsx +17 -12
  134. package/themes/original/src/components/Favorite/index.tsx +92 -0
  135. package/themes/original/src/components/Favorite/styles.tsx +22 -0
  136. package/themes/original/src/components/FavoriteList/index.tsx +298 -0
  137. package/themes/original/src/components/FavoriteList/styles.tsx +5 -0
  138. package/themes/original/src/components/ForgotPasswordForm/index.tsx +84 -4
  139. package/themes/original/src/components/GPSButton/index.tsx +15 -8
  140. package/themes/original/src/components/GoogleMap/index.tsx +11 -11
  141. package/themes/original/src/components/Help/index.tsx +21 -4
  142. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +18 -1
  143. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  144. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -0
  145. package/themes/original/src/components/LoginForm/Otp/styles.tsx +7 -0
  146. package/themes/original/src/components/LoginForm/index.tsx +332 -164
  147. package/themes/original/src/components/LoginForm/styles.tsx +1 -3
  148. package/themes/original/src/components/Messages/index.tsx +1 -1
  149. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  150. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  151. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +243 -0
  152. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/styles.tsx +46 -0
  153. package/themes/original/src/components/MultiCheckout/index.tsx +304 -0
  154. package/themes/original/src/components/MultiCheckout/styles.tsx +59 -0
  155. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +372 -0
  156. package/themes/original/src/components/MultiOrdersDetails/index.tsx +258 -0
  157. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +50 -0
  158. package/themes/original/src/components/MyOrders/index.tsx +132 -27
  159. package/themes/original/src/components/MyOrders/styles.tsx +8 -1
  160. package/themes/original/src/components/NavBar/index.tsx +4 -4
  161. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  162. package/themes/original/src/components/OrderDetails/index.tsx +148 -63
  163. package/themes/original/src/components/OrderDetails/styles.tsx +1 -2
  164. package/themes/original/src/components/OrderItAgain/index.tsx +72 -0
  165. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  166. package/themes/original/src/components/OrderSummary/index.tsx +5 -5
  167. package/themes/original/src/components/OrderTypeSelector/index.tsx +77 -35
  168. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  169. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +153 -0
  170. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +6 -0
  171. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +53 -0
  172. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +6 -0
  173. package/themes/original/src/components/OrdersOption/index.tsx +139 -46
  174. package/themes/original/src/components/OrdersOption/styles.tsx +4 -1
  175. package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
  176. package/themes/original/src/components/PaymentOptionWallet/index.tsx +15 -22
  177. package/themes/original/src/components/PaymentOptions/index.tsx +57 -37
  178. package/themes/original/src/components/PhoneInputNumber/index.tsx +5 -11
  179. package/themes/original/src/components/PreviousOrders/index.tsx +18 -147
  180. package/themes/original/src/components/ProductForm/index.tsx +712 -673
  181. package/themes/original/src/components/ProductForm/styles.tsx +9 -7
  182. package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
  183. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  184. package/themes/original/src/components/ProductOptionSubOption/index.tsx +13 -9
  185. package/themes/original/src/components/ProfessionalFilter/index.tsx +128 -0
  186. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  187. package/themes/original/src/components/ProfessionalProfile/index.tsx +298 -0
  188. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  189. package/themes/original/src/components/Promotions/index.tsx +145 -128
  190. package/themes/original/src/components/Promotions/styles.tsx +2 -0
  191. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  192. package/themes/original/src/components/ReviewOrder/index.tsx +1 -1
  193. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  194. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  195. package/themes/original/src/components/SearchBar/index.tsx +13 -5
  196. package/themes/original/src/components/ServiceForm/index.tsx +579 -0
  197. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  198. package/themes/original/src/components/Sessions/index.tsx +160 -0
  199. package/themes/original/src/components/Sessions/styles.tsx +15 -0
  200. package/themes/original/src/components/SignupForm/index.tsx +237 -126
  201. package/themes/original/src/components/SingleOrderCard/index.tsx +316 -0
  202. package/themes/original/src/components/SingleOrderCard/styles.tsx +54 -0
  203. package/themes/original/src/components/SingleProductCard/index.tsx +220 -94
  204. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -2
  205. package/themes/original/src/components/StripeElementsForm/index.tsx +25 -9
  206. package/themes/original/src/components/StripeElementsForm/naked.tsx +2 -2
  207. package/themes/original/src/components/UpsellingProducts/index.tsx +2 -6
  208. package/themes/original/src/components/UserDetails/index.tsx +32 -18
  209. package/themes/original/src/components/UserFormDetails/index.tsx +108 -74
  210. package/themes/original/src/components/UserProfile/index.tsx +10 -1
  211. package/themes/original/src/components/UserProfileForm/index.tsx +14 -9
  212. package/themes/original/src/components/UserVerification/index.tsx +178 -192
  213. package/themes/original/src/components/Wallets/index.tsx +2 -2
  214. package/themes/original/src/components/shared/OBottomPopup.tsx +47 -14
  215. package/themes/original/src/components/shared/OButton.tsx +2 -0
  216. package/themes/original/src/components/shared/OInput.tsx +3 -2
  217. package/themes/original/src/components/shared/OModal.tsx +4 -2
  218. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  219. package/themes/original/src/types/index.tsx +199 -36
  220. package/themes/original/src/utils/index.tsx +94 -1
  221. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,13 +1,18 @@
1
- import React from 'react';
1
+ import React, { useState, useRef, useEffect } 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, View } from 'react-native';
14
+ import { StyleSheet, TouchableOpacity, View, Animated } from 'react-native';
15
+ import { InView } from 'react-native-intersection-observer'
11
16
  import { BusinessControllerParams } from '../../types';
12
17
  import { convertHoursToMinutes, shape } from '../../utils';
13
18
  import {
@@ -20,10 +25,12 @@ import {
20
25
  BusinessState,
21
26
  BusinessLogo,
22
27
  Reviews,
23
- RibbonBox
28
+ RibbonBox,
29
+ ReviewAndFavorite
24
30
  } from './styles';
25
31
  import { useTheme } from 'styled-components/native';
26
32
  import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome5';
33
+ import IconAntDesign from 'react-native-vector-icons/AntDesign'
27
34
  import FastImage from 'react-native-fast-image'
28
35
 
29
36
  export const BusinessControllerUI = (props: BusinessControllerParams) => {
@@ -40,13 +47,20 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
40
47
  businessDeliveryPrice,
41
48
  businessDeliveryTime,
42
49
  businessPickupTime,
43
- businessDistance
50
+ businessDistance,
51
+ handleFavoriteBusiness,
52
+ enableIntersection
44
53
  } = props;
45
54
  const [{ parsePrice, parseDistance, parseNumber, optimizeImage }] = useUtils();
55
+ const [, { showToast }] = useToast()
46
56
  const [orderState] = useOrder();
57
+ const [ { auth }] = useSession()
47
58
  const [configState] = useConfig();
48
59
  const [, t] = useLanguage();
49
60
  const theme = useTheme()
61
+ const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
62
+ const fadeAnim = useRef(new Animated.Value(0)).current;
63
+
50
64
  const styles = StyleSheet.create({
51
65
  headerStyle: {
52
66
  borderTopLeftRadius: 7.6,
@@ -116,115 +130,206 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
116
130
  const handleBusinessClick = (selectedBusiness: any) => {
117
131
  if (business?.open) handleClick && handleClick(selectedBusiness)
118
132
  else {
119
- navigation.navigate('BusinessPreorder', { business: selectedBusiness, handleBusinessClick: handleClick })
133
+ if (configState?.configs?.preorder_status_enabled?.value === '1') {
134
+ navigation.navigate('BusinessPreorder', { business: selectedBusiness, handleBusinessClick: handleClick })
135
+ return
136
+ }
137
+ showToast(ToastType.Info, t('ERROR_ADD_PRODUCT_BUSINESS_CLOSED', 'The business is closed at the moment'));
138
+ }
139
+ }
140
+
141
+ const handleChangeFavorite = () => {
142
+ if (auth) {
143
+ handleFavoriteBusiness && handleFavoriteBusiness(!business?.favorite)
144
+ } else {
145
+ navigation && navigation.navigate('Login');
120
146
  }
121
147
  }
122
148
 
149
+ const fadeIn = () => {
150
+ Animated.timing(fadeAnim, {
151
+ toValue: 1,
152
+ duration: 500,
153
+ useNativeDriver: true
154
+ }).start();
155
+ };
156
+
157
+ const handleChangeInterSection = (inView: boolean) => {
158
+ setIsIntersectionObserver(inView)
159
+ fadeIn()
160
+ }
161
+
162
+ useEffect(() => {
163
+ if (!enableIntersection) fadeIn()
164
+ }, [enableIntersection])
165
+
123
166
  return (
124
- <Card activeOpacity={1} onPress={() => handleBusinessClick(business)} style={style}>
125
- {business?.ribbon?.enabled && (
126
- <RibbonBox
127
- bgColor={business?.ribbon?.color}
128
- isRoundRect={business?.ribbon?.shape === shape?.rectangleRound}
129
- isCapsule={business?.ribbon?.shape === shape?.capsuleShape}
130
- >
131
- <OText
132
- size={10}
133
- weight={'400'}
134
- color={theme.colors.white}
135
- numberOfLines={2}
136
- ellipsizeMode='tail'
137
- lineHeight={13}
138
- >
139
- {business?.ribbon?.text}
140
- </OText>
141
- </RibbonBox>
142
- )}
143
- <BusinessHero>
144
- <FastImage
145
- style={{ height: 120 }}
146
- source={{
147
- uri: optimizeImage(businessHeader || business?.header, 'h_500,c_limit'),
148
- priority: FastImage.priority.normal,
149
- }}
150
- resizeMode={FastImage.resizeMode.cover}
151
- />
152
- {(businessFeatured ?? business?.featured) && (
153
- <View style={styles.featured}>
154
- <FontAwesomeIcon name="crown" size={26} color="gold" />
155
- </View>
156
- )}
157
- <BusinessState>
158
- {!isBusinessOpen && (configState?.configs?.preorder_status_enabled?.value === '1') && (
159
- <View style={styles.businessStateView}>
167
+ <InView style={{ minHeight: 200 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeInterSection(inView)}>
168
+ {isIntersectionObserver ? (
169
+ <Card activeOpacity={1} onPress={() => handleBusinessClick(business)} style={style}>
170
+ {business?.ribbon?.enabled && (
171
+ <RibbonBox
172
+ bgColor={business?.ribbon?.color}
173
+ isRoundRect={business?.ribbon?.shape === shape?.rectangleRound}
174
+ isCapsule={business?.ribbon?.shape === shape?.capsuleShape}
175
+ >
160
176
  <OText
161
- color={theme.colors.textThird}
162
177
  size={10}
163
- style={styles.businessStateText}>
164
- {t('PREORDER', 'PREORDER')}
178
+ weight={'400'}
179
+ color={theme.colors.white}
180
+ numberOfLines={2}
181
+ ellipsizeMode='tail'
182
+ lineHeight={13}
183
+ >
184
+ {business?.ribbon?.text}
165
185
  </OText>
166
- </View>
186
+ </RibbonBox>
167
187
  )}
168
- </BusinessState>
169
- </BusinessHero>
170
- <BusinessContent>
171
- <BusinessInfo>
172
- <BusinessLogo style={styles.businessLogo}>
188
+ <BusinessHero>
189
+ <Animated.View
190
+ style={[
191
+ {
192
+ opacity: fadeAnim
193
+ }
194
+ ]}
195
+ >
173
196
  <FastImage
174
- style={{ width: 56, height: 56 }}
197
+ style={{ height: 120 }}
175
198
  source={{
176
- uri: optimizeImage(businessLogo || business?.logo, 'h_150,c_limit'),
199
+ uri: optimizeImage(businessHeader || business?.header, 'h_500,c_limit'),
177
200
  priority: FastImage.priority.normal,
178
201
  }}
179
202
  resizeMode={FastImage.resizeMode.cover}
180
203
  />
181
- </BusinessLogo>
182
- {(businessReviews?.reviews?.total > 0 ?? business?.reviews?.total > 0) && (
183
- <Reviews>
184
- <OIcon src={theme.images.general.star} width={12} style={styles.starIcon} />
185
- <OText size={10} style={{ lineHeight: 15 }}>
186
- {parseNumber(businessReviews?.reviews?.total ?? business?.reviews?.total, { separator: '.' })}
187
- </OText>
188
- </Reviews>
189
- )}
190
- </BusinessInfo>
191
- <OText
192
- size={12}
193
- style={{ lineHeight: 18, marginBottom: 6 }}
194
- weight={'500'}>
195
- {business?.name}
196
- </OText>
197
- <OText size={10} style={{ lineHeight: 15, marginBottom: 3 }}>
198
- {business?.address}
199
- </OText>
200
- {/* <BusinessCategory>
204
+ </Animated.View>
205
+ {(businessFeatured ?? business?.featured) && (
206
+ <View style={styles.featured}>
207
+ <FontAwesomeIcon name="crown" size={26} color="gold" />
208
+ </View>
209
+ )}
210
+ <BusinessState>
211
+ {!isBusinessOpen && (configState?.configs?.preorder_status_enabled?.value === '1') && (
212
+ <View style={styles.businessStateView}>
213
+ <OText
214
+ color={theme.colors.textThird}
215
+ size={10}
216
+ style={styles.businessStateText}>
217
+ {t('PREORDER', 'PREORDER')}
218
+ </OText>
219
+ </View>
220
+ )}
221
+ </BusinessState>
222
+ </BusinessHero>
223
+ <BusinessContent>
224
+ <BusinessInfo>
225
+ <BusinessLogo style={styles.businessLogo}>
226
+ <FastImage
227
+ style={{ width: 56, height: 56 }}
228
+ source={{
229
+ uri: optimizeImage(businessLogo || business?.logo, 'h_150,c_limit'),
230
+ priority: FastImage.priority.normal,
231
+ }}
232
+ resizeMode={FastImage.resizeMode.cover}
233
+ />
234
+ </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}
251
+ />
252
+ </TouchableOpacity>
253
+ </ReviewAndFavorite>
254
+ </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 }}>
262
+ {business?.address}
263
+ </OText>
264
+ {/* <BusinessCategory>
201
265
  <OText>{getBusinessType()}</OText>
202
266
  </BusinessCategory> */}
203
- <Metadata>
204
- {!isBusinessOpen ? (
205
- <View style={styles.closed}>
206
- <OText size={10} color={theme.colors.red}>
207
- {t('CLOSED', 'Closed')}
208
- </OText>
209
- </View>
210
- ) : (
211
- <View style={styles.bullet}>
212
- {orderState?.options?.type === 1 && (
213
- <OText size={10} color={theme.colors.textSecondary}>
214
- {`${t('DELIVERY_FEE', 'Delivery fee')} ${parsePrice(businessDeliveryPrice ?? business?.delivery_price) + ' \u2022 '}`}
215
- </OText>
267
+ <Metadata>
268
+ {!isBusinessOpen ? (
269
+ <View style={styles.closed}>
270
+ <OText size={10} color={theme.colors.red}>
271
+ {t('CLOSED', 'Closed')}
272
+ </OText>
273
+ </View>
274
+ ) : (
275
+ <View style={styles.bullet}>
276
+ {orderState?.options?.type === 1 && (
277
+ <OText size={10} color={theme.colors.textSecondary}>
278
+ {`${t('DELIVERY_FEE', 'Delivery fee')} ${parsePrice(businessDeliveryPrice ?? business?.delivery_price) + ' \u2022 '}`}
279
+ </OText>
280
+ )}
281
+ <OText size={10} color={theme.colors.textSecondary}>{`${convertHoursToMinutes(
282
+ orderState?.options?.type === 1
283
+ ? (businessDeliveryTime ?? business?.delivery_time)
284
+ : (businessPickupTime ?? business?.pickup_time),
285
+ )} \u2022 `}</OText>
286
+ <OText size={10} color={theme.colors.textSecondary}>{parseDistance(businessDistance ?? business?.distance)}</OText>
287
+ </View>
216
288
  )}
217
- <OText size={10} color={theme.colors.textSecondary}>{`${convertHoursToMinutes(
218
- orderState?.options?.type === 1
219
- ? (businessDeliveryTime ?? business?.delivery_time)
220
- : (businessPickupTime ?? business?.pickup_time),
221
- )} \u2022 `}</OText>
222
- <OText size={10} color={theme.colors.textSecondary}>{parseDistance(businessDistance ?? business?.distance)}</OText>
289
+ </Metadata>
290
+ </BusinessContent>
291
+ </Card>
292
+ ) : (
293
+ <Placeholder
294
+ Animation={Fade}
295
+ style={{ marginBottom: 20 }}>
296
+ <View style={{ width: '100%' }}>
297
+ <PlaceholderLine
298
+ height={200}
299
+ style={{ marginBottom: 20, borderRadius: 25 }}
300
+ />
301
+ <View style={{ paddingHorizontal: 10 }}>
302
+ <View
303
+ style={{
304
+ flexDirection: 'row',
305
+ justifyContent: 'space-between',
306
+ }}>
307
+ <PlaceholderLine
308
+ height={25}
309
+ width={40}
310
+ style={{ marginBottom: 10 }}
311
+ />
312
+ <PlaceholderLine
313
+ height={25}
314
+ width={20}
315
+ style={{ marginBottom: 10 }}
316
+ />
317
+ </View>
318
+ <PlaceholderLine
319
+ height={20}
320
+ width={30}
321
+ style={{ marginBottom: 10 }}
322
+ />
323
+ <PlaceholderLine
324
+ height={20}
325
+ width={80}
326
+ style={{ marginBottom: 10 }}
327
+ />
223
328
  </View>
224
- )}
225
- </Metadata>
226
- </BusinessContent>
227
- </Card>
329
+ </View>
330
+ </Placeholder>
331
+ )}
332
+ </InView>
228
333
  );
229
334
  };
230
335
 
@@ -49,6 +49,11 @@ export const BusinessLogo = styled.View`
49
49
 
50
50
  `
51
51
 
52
+ export const ReviewAndFavorite = styled.View`
53
+ flex-direction: row;
54
+ align-items: center;
55
+ `
56
+
52
57
  export const Reviews = styled.View`
53
58
  flex-direction: row;
54
59
  align-items: center;
@@ -1,6 +1,6 @@
1
1
  import React, { useState, useRef, useEffect } from 'react';
2
2
  import { TouchableOpacity, View } from 'react-native';
3
- import { useOrder, useLanguage, useUtils } from 'ordering-components/native';
3
+ import { useOrder, useLanguage, useUtils, useConfig } from 'ordering-components/native';
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import {
6
6
  BIContainer,
@@ -21,17 +21,20 @@ export const BusinessItemAccordion = (props: any) => {
21
21
  singleBusiness,
22
22
  handleClearProducts,
23
23
  handleClickCheckout,
24
- checkoutButtonDisabled
24
+ checkoutButtonDisabled,
25
+ isMultiCheckout
25
26
  } = props
26
27
 
27
28
  const [orderState] = useOrder();
28
29
  const [, t] = useLanguage();
29
30
  const [{ parsePrice }] = useUtils();
31
+ const [{ configs }] = useConfig()
30
32
  const theme = useTheme();
31
33
 
32
34
  const isCartPending = cart?.status === 2
33
35
  const isClosed = !cart?.valid_schedule
34
36
  const isProducts = cart?.products?.length
37
+ const isBusinessChangeEnabled = configs?.cart_change_business_validation?.value === '1'
35
38
 
36
39
  const [isActive, setActiveState] = useState(!!singleBusiness)
37
40
 
@@ -44,7 +47,7 @@ export const BusinessItemAccordion = (props: any) => {
44
47
  }, [orderState?.carts])
45
48
 
46
49
  return (
47
- <BIContainer isClosed={isClosed} checkoutVisible={!isActive && !isClosed && !!isProducts && !checkoutButtonDisabled}>
50
+ <BIContainer isClosed={isClosed} isMultiCheckout={isMultiCheckout} checkoutVisible={!isActive && !isClosed && !!isProducts && !checkoutButtonDisabled}>
48
51
  <BIHeader
49
52
  isClosed={isClosed}
50
53
  onPress={() => !isClosed ? setActiveState(!isActive) : isClosed}
@@ -90,7 +93,7 @@ export const BusinessItemAccordion = (props: any) => {
90
93
  </OAlert>
91
94
  </>
92
95
  )}
93
- {props.handleChangeStore && (
96
+ {isBusinessChangeEnabled && props.handleChangeStore && (
94
97
  <>
95
98
  <OText color={theme.colors.textSecondary}>{' \u2022 '}</OText>
96
99
  <TouchableOpacity
@@ -139,7 +142,7 @@ export const BusinessItemAccordion = (props: any) => {
139
142
  )}
140
143
  </BIActions>
141
144
  </BIHeader>
142
- {!isActive && !isClosed && !!isProducts && (
145
+ {!isActive && !isClosed && !!isProducts && !isMultiCheckout && (
143
146
  <PriceContainer>
144
147
  <OText>{parsePrice(cart?.total)}</OText>
145
148
  {cart?.valid_products && (
@@ -7,7 +7,9 @@ export const BIContainer = styled.View`
7
7
  opacity: 1;
8
8
  border-radius: 7.6px;
9
9
  overflow: hidden;
10
- min-height: 120px;
10
+ ${(props: any) => !props.isMultiCheckout && css`
11
+ min-height: 120px;
12
+ `}
11
13
  ${(props: any) => props.isClosed && css`
12
14
  opacity: 0.5;
13
15
  min-height: 60px;