ordering-ui-react-native 0.17.65 → 0.17.66-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 (207) hide show
  1. package/package.json +8 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/OrderCreating/index.tsx +1 -21
  5. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  6. package/src/components/PhoneInputNumber/index.tsx +6 -2
  7. package/src/components/StripeMethodForm/index.tsx +136 -102
  8. package/src/components/VerifyPhone/styles.tsx +1 -2
  9. package/src/components/shared/OToast.tsx +2 -1
  10. package/src/types/index.tsx +5 -0
  11. package/src/utils/index.tsx +5 -0
  12. package/themes/business/index.tsx +2 -0
  13. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +270 -245
  14. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  15. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  16. package/themes/business/src/components/Chat/index.tsx +123 -111
  17. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  18. package/themes/business/src/components/DriverSchedule/index.tsx +42 -5
  19. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  20. package/themes/business/src/components/LoginForm/Otp/index.tsx +31 -3
  21. package/themes/business/src/components/LoginForm/index.tsx +15 -22
  22. package/themes/business/src/components/MapView/index.tsx +10 -10
  23. package/themes/business/src/components/NewOrderNotification/index.tsx +35 -21
  24. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  25. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  26. package/themes/business/src/components/OrderDetails/Delivery.tsx +191 -6
  27. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +133 -65
  28. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +64 -63
  29. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  30. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  31. package/themes/business/src/components/OrderMessage/index.tsx +19 -18
  32. package/themes/business/src/components/OrderSummary/index.tsx +114 -123
  33. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +249 -0
  35. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  36. package/themes/business/src/components/PreviousOrders/index.tsx +444 -242
  37. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  38. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  39. package/themes/business/src/components/ReviewCustomer/index.tsx +30 -15
  40. package/themes/business/src/components/StoresList/index.tsx +3 -4
  41. package/themes/business/src/components/UserProfileForm/index.tsx +11 -13
  42. package/themes/business/src/components/shared/OLink.tsx +33 -13
  43. package/themes/business/src/components/shared/OModal.tsx +16 -9
  44. package/themes/business/src/components/shared/OText.tsx +8 -2
  45. package/themes/business/src/types/index.tsx +28 -12
  46. package/themes/business/src/utils/index.tsx +29 -2
  47. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  48. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  49. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  50. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  51. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  52. package/themes/kiosk/src/components/LoginForm/index.tsx +7 -9
  53. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  54. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  55. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  56. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +2 -2
  57. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  58. package/themes/original/index.tsx +4 -0
  59. package/themes/original/src/components/AddressDetails/index.tsx +19 -3
  60. package/themes/original/src/components/AddressForm/index.tsx +61 -39
  61. package/themes/original/src/components/AddressList/index.tsx +27 -22
  62. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  63. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  64. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  65. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  66. package/themes/original/src/components/BusinessBasicInformation/index.tsx +153 -96
  67. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
  68. package/themes/original/src/components/BusinessController/index.tsx +94 -66
  69. package/themes/original/src/components/BusinessController/styles.tsx +22 -3
  70. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  71. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  72. package/themes/original/src/components/BusinessInformation/index.tsx +142 -109
  73. package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
  74. package/themes/original/src/components/BusinessListingSearch/index.tsx +349 -339
  75. package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -18
  76. package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
  77. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
  78. package/themes/original/src/components/BusinessProductsList/index.tsx +15 -7
  79. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  80. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  81. package/themes/original/src/components/BusinessProductsListing/index.tsx +684 -555
  82. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
  83. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  84. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  85. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +83 -48
  86. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +0 -1
  87. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  88. package/themes/original/src/components/Cart/index.tsx +77 -50
  89. package/themes/original/src/components/CartContent/index.tsx +117 -20
  90. package/themes/original/src/components/CartContent/styles.tsx +17 -7
  91. package/themes/original/src/components/Checkout/index.tsx +356 -124
  92. package/themes/original/src/components/CitiesControl/index.tsx +1 -1
  93. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  94. package/themes/original/src/components/DriverTips/index.tsx +52 -34
  95. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  96. package/themes/original/src/components/Favorite/index.tsx +8 -9
  97. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  98. package/themes/original/src/components/FavoriteList/index.tsx +1 -35
  99. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  100. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  101. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  102. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  103. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  104. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  105. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  106. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +191 -0
  107. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  108. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  109. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  110. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  111. package/themes/original/src/components/GoogleMap/index.tsx +60 -5
  112. package/themes/original/src/components/Help/index.tsx +8 -8
  113. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +10 -31
  114. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +5 -3
  115. package/themes/original/src/components/HelpGuide/index.tsx +6 -6
  116. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  117. package/themes/original/src/components/HelpOrder/index.tsx +6 -15
  118. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  119. package/themes/original/src/components/Home/index.tsx +13 -4
  120. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  121. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -31
  122. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  123. package/themes/original/src/components/LoginForm/index.tsx +64 -34
  124. package/themes/original/src/components/LottieAnimation/index.tsx +89 -55
  125. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  126. package/themes/original/src/components/Messages/index.tsx +29 -7
  127. package/themes/original/src/components/MomentOption/index.tsx +195 -90
  128. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  129. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  130. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +162 -51
  131. package/themes/original/src/components/MultiCheckout/index.tsx +330 -99
  132. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  133. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  134. package/themes/original/src/components/MultiOrdersDetails/index.tsx +68 -21
  135. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  136. package/themes/original/src/components/MyOrders/index.tsx +40 -29
  137. package/themes/original/src/components/NavBar/index.tsx +20 -17
  138. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  139. package/themes/original/src/components/Notifications/index.tsx +46 -50
  140. package/themes/original/src/components/Notifications/styles.tsx +6 -3
  141. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  142. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +21 -5
  143. package/themes/original/src/components/OrderDetails/index.tsx +191 -363
  144. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  145. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  146. package/themes/original/src/components/OrderProgress/index.tsx +30 -56
  147. package/themes/original/src/components/OrderSummary/index.tsx +88 -59
  148. package/themes/original/src/components/OrderTypeSelector/index.tsx +2 -1
  149. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
  150. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
  151. package/themes/original/src/components/OrdersOption/index.tsx +78 -67
  152. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  153. package/themes/original/src/components/PageBanner/index.tsx +98 -38
  154. package/themes/original/src/components/PageBanner/styles.tsx +0 -10
  155. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  156. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  157. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  158. package/themes/original/src/components/PaymentOptions/index.tsx +78 -35
  159. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  160. package/themes/original/src/components/ProductForm/index.tsx +105 -30
  161. package/themes/original/src/components/ProductForm/styles.tsx +5 -5
  162. package/themes/original/src/components/ProductItemAccordion/index.tsx +14 -11
  163. package/themes/original/src/components/ProductOptionSubOption/index.tsx +20 -18
  164. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +5 -9
  165. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  166. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  167. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  168. package/themes/original/src/components/Promotions/index.tsx +5 -4
  169. package/themes/original/src/components/Promotions/styles.tsx +3 -1
  170. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  171. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  172. package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
  173. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  174. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  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 +66 -17
  178. package/themes/original/src/components/Sessions/index.tsx +11 -8
  179. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  180. package/themes/original/src/components/SignupForm/index.tsx +43 -27
  181. package/themes/original/src/components/SingleOrderCard/index.tsx +130 -56
  182. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -2
  183. package/themes/original/src/components/SingleProductCard/index.tsx +72 -31
  184. package/themes/original/src/components/SingleProductCard/styles.tsx +20 -4
  185. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  186. package/themes/original/src/components/StripeCardsList/index.tsx +49 -5
  187. package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
  188. package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
  189. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
  190. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  191. package/themes/original/src/components/UserDetails/index.tsx +3 -1
  192. package/themes/original/src/components/UserFormDetails/index.tsx +76 -7
  193. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  194. package/themes/original/src/components/UserProfile/index.tsx +88 -79
  195. package/themes/original/src/components/UserProfileForm/index.tsx +27 -29
  196. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  197. package/themes/original/src/components/UserVerification/index.tsx +52 -49
  198. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  199. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  200. package/themes/original/src/components/Wallets/index.tsx +66 -30
  201. package/themes/original/src/components/Wallets/styles.tsx +3 -4
  202. package/themes/original/src/components/shared/OButton.tsx +6 -2
  203. package/themes/original/src/components/shared/OInput.tsx +6 -1
  204. package/themes/original/src/components/shared/OModal.tsx +3 -3
  205. package/themes/original/src/types/index.tsx +42 -10
  206. package/themes/original/src/utils/index.tsx +273 -1
  207. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -7,7 +7,7 @@ export const TopHeader = styled.View`
7
7
  width: 100%;
8
8
  flex-direction: row;
9
9
  align-items: center;
10
- justify-content: space-between;
10
+ justify-content: ${({ hideArrow }: any) => hideArrow ? 'flex-end' : 'space-between'};
11
11
  z-index: 1;
12
12
  height: 60px;
13
13
  min-height: 60px;
@@ -24,7 +24,7 @@ export const WrapSearchBar = styled.View`
24
24
  flex: 1;
25
25
  `
26
26
  export const WrapContent = styled.View`
27
- padding: 10px 40px;
27
+ padding-vertical: 10px;
28
28
  `
29
29
 
30
30
  export const BusinessProductsListingContainer = styled.ScrollView`
@@ -3,6 +3,7 @@ import {
3
3
  BusinessReviews as BusinessReviewController,
4
4
  useLanguage,
5
5
  useOrder,
6
+ useUtils
6
7
  } from 'ordering-components/native';
7
8
  import { useTheme } from 'styled-components/native';
8
9
  import IconAntDesign from 'react-native-vector-icons/AntDesign';
@@ -30,6 +31,7 @@ const BusinessReviewsUI = (props: BusinessReviewsParams) => {
30
31
  const theme = useTheme();
31
32
  const [searchReview, setSearchReview] = useState('')
32
33
  const [orderState] = useOrder();
34
+ const [{ parseDate }] = useUtils()
33
35
 
34
36
  const styles = StyleSheet.create({
35
37
  starIcon: {
@@ -94,7 +96,7 @@ const BusinessReviewsUI = (props: BusinessReviewsParams) => {
94
96
  const ReviewItem = ({ comment, created_at, total }: any) => (
95
97
  <View style={{ marginBottom: 30 }}>
96
98
  <OText size={12} color={theme.colors.textSecondary}>
97
- {moment(created_at).format('MMMM d, yyyy • hh:mm')}
99
+ {parseDate(created_at, { outputFormat: 'MMMM D, YYYY • hh:mm A' })}
98
100
  </OText>
99
101
  <OText size={12} color={theme.colors.textNormal}>{comment}</OText>
100
102
  </View>
@@ -284,7 +284,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
284
284
  style={{ paddingTop: top + 20 }}>
285
285
  {!auth && (
286
286
  <TouchableOpacity onPress={() => navigation?.canGoBack() && navigation.goBack()} style={{ position: 'absolute', marginStart: 40, paddingVertical: 20 }}>
287
- <IconAntDesign name='arrowleft' size={26} />
287
+ <OIcon src={theme.images.general.arrow_left} color={theme.colors.textNormal} />
288
288
  </TouchableOpacity>
289
289
  )}
290
290
  <Search>
@@ -18,8 +18,7 @@ import {
18
18
  useSession,
19
19
  useOrder,
20
20
  useConfig,
21
- useUtils,
22
- useOrderingTheme
21
+ useUtils
23
22
  } from 'ordering-components/native';
24
23
  import { useTheme } from 'styled-components/native';
25
24
  import Ionicons from 'react-native-vector-icons/Ionicons'
@@ -74,13 +73,26 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
74
73
  logosLayout
75
74
  } = props;
76
75
  const theme = useTheme();
77
- const [orderingTheme] = useOrderingTheme()
78
76
  const isFocused = useIsFocused();
77
+
78
+ const [, t] = useLanguage();
79
+ const [{ user, auth }] = useSession();
80
+ const [orderState, { changeCityFilter }] = useOrder();
81
+ const [{ configs }] = useConfig();
82
+ const [{ parseDate }] = useUtils();
83
+
79
84
  const appState = useRef(AppState.currentState)
80
- const isChewLayout = theme?.header?.components?.layout?.type === 'chew'
81
- const hideCities = theme?.business_listing_view?.components?.cities?.hidden ?? true
85
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
82
86
  const [refreshing] = useState(false);
83
- const bgHeader = orderingTheme?.theme?.business_listing_view?.components?.business_hero?.components?.image
87
+ const allCitiesDisabled = citiesState?.cities?.every((city: any) => !city.enabled)
88
+ const hideCities = (theme?.business_listing_view?.components?.cities?.hidden || orderState?.options?.type !== 2 || allCitiesDisabled) ?? true
89
+ const hideHero = theme?.business_listing_view?.components?.business_hero?.hidden
90
+ const hidePreviousOrders = theme?.business_listing_view?.components?.previous_orders_block?.hidden
91
+ const hideHighestBusiness = theme?.business_listing_view?.components?.highest_rated_business_block?.hidden
92
+ const isAllCategoriesHidden = theme?.business_listing_view?.components?.categories?.hidden
93
+ const bgHeader = theme?.business_listing_view?.components?.business_hero?.components?.image
94
+ const bgHeaderHeight = theme?.business_listing_view?.components?.business_hero?.components?.style?.height
95
+
84
96
  const styles = StyleSheet.create({
85
97
  container: {
86
98
  marginBottom: 0,
@@ -144,19 +156,12 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
144
156
  },
145
157
  });
146
158
 
147
-
148
- const [, t] = useLanguage();
149
- const [{ user, auth }] = useSession();
150
- const [orderState, { changeCityFilter }] = useOrder();
151
- const [{ configs }] = useConfig();
152
- const [{ parseDate }] = useUtils();
153
-
154
159
  const { top } = useSafeAreaInsets();
155
160
 
156
161
  const [featuredBusiness, setFeaturedBusinesses] = useState(Array);
157
162
  const [isFarAway, setIsFarAway] = useState(false)
158
163
  const [businessTypes, setBusinessTypes] = useState(null)
159
- const [orderTypeValue, setOrderTypeValue] = useState(orderState?.options.value)
164
+ const [orderTypeValue, setOrderTypeValue] = useState(orderState?.options?.value)
160
165
  const [isOpenCities, setIsOpenCities] = useState(false)
161
166
  const isPreorderEnabled = (configs?.preorder_status_enabled?.value === '1' || configs?.preorder_status_enabled?.value === 'true') &&
162
167
  Number(configs?.max_days_preorder?.value) > 0
@@ -220,7 +225,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
220
225
 
221
226
  useEffect(() => {
222
227
  if (!businessesList?.loading) {
223
- const fb = businessesList.businesses.filter((b) => b.featured === true && b?.open);
228
+ const fb = businessesList.businesses.filter((b) => b?.featured && b?.open);
224
229
  const ary = [];
225
230
  while (fb.length > 0) {
226
231
  ary.push(fb.splice(0, 2));
@@ -289,6 +294,12 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
289
294
  setIsOpenCities(false)
290
295
  }, [orderState?.options?.city_id])
291
296
 
297
+ useEffect(() => {
298
+ if (!citiesState?.cities?.length || !orderState?.options?.city_id) return
299
+ const selectedCity = citiesState?.cities?.find((city: any) => city?.id === orderState?.options?.city_id)
300
+ if (!selectedCity || !selectedCity?.enabled) changeCityFilter(null)
301
+ }, [citiesState, orderState?.options?.city_id])
302
+
292
303
  if (logosLayout) {
293
304
  return (
294
305
  <BusinessLogosContainer
@@ -364,7 +375,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
364
375
  )}
365
376
  <View style={{
366
377
  height: !isPreOrderSetting && isChewLayout ? 150 : isChewLayout ? 200 : isFarAway ? 150 : 100,
367
- marginTop: Platform.OS == 'ios' ? 0 : 50,
378
+ marginTop: isChewLayout ? 0 : Platform.OS == 'ios' ? 0 : 50,
368
379
  backgroundColor: isChewLayout ? theme?.colors?.chew : theme.colors?.white
369
380
  }}
370
381
  >
@@ -466,18 +477,30 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
466
477
  )}
467
478
  </View>
468
479
  {!isChewLayout ? (
469
- <HeaderWrapper
470
- source={bgHeader ? { uri: bgHeader } : theme.images.backgrounds.business_list_header}
471
- style={{ paddingTop: top + 20 }}
472
- resizeMode='cover'
473
- >
474
- {!auth && (
475
-
476
- <TouchableOpacity onPress={() => navigation?.canGoBack() && navigation.goBack()} style={{ position: 'absolute', marginStart: 40, paddingVertical: 20 }}>
477
- <IconAntDesign name='arrowleft' size={26} />
478
- </TouchableOpacity>
480
+ <>
481
+ {!hideHero ? (
482
+ <HeaderWrapper
483
+ source={bgHeader ? { uri: bgHeader } : theme.images.backgrounds.business_list_header}
484
+ style={{ paddingTop: top + 20 }}
485
+ resizeMode='cover'
486
+ bgHeaderHeight={bgHeaderHeight}
487
+ >
488
+ {!auth && (
489
+ <TouchableOpacity onPress={() => navigation?.canGoBack() && navigation.goBack()} style={{ position: 'absolute', marginStart: 40, paddingVertical: 20 }}>
490
+ <OIcon src={theme.images.general.arrow_left} color={theme.colors.textNormal} />
491
+ </TouchableOpacity>
492
+ )}
493
+ </HeaderWrapper>
494
+ ) : (
495
+ <>
496
+ {!auth && (
497
+ <TouchableOpacity onPress={() => navigation?.canGoBack() && navigation.goBack()} style={{ position: 'absolute', marginStart: 40, paddingVertical: 20 }}>
498
+ <OIcon src={theme.images.general.arrow_left} color={theme.colors.textNormal} />
499
+ </TouchableOpacity>
500
+ )}
501
+ </>
479
502
  )}
480
- </HeaderWrapper>
503
+ </>
481
504
  ) : (
482
505
  <OrderTypesContainer>
483
506
  <OrderTypeSelector
@@ -502,10 +525,12 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
502
525
  </TouchableOpacity>
503
526
  </View>
504
527
  )}
505
- <OrderProgress
506
- {...props}
507
- isFocused={isFocused}
508
- />
528
+ {!hidePreviousOrders && (
529
+ <OrderProgress
530
+ {...props}
531
+ isFocused={isFocused}
532
+ />
533
+ )}
509
534
  {
510
535
  !businessId && !props.franchiseId && featuredBusiness && featuredBusiness.length > 0 && (
511
536
  <FeaturedWrapper>
@@ -538,23 +563,28 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
538
563
  </FeaturedWrapper>
539
564
  )
540
565
  }
541
- <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100 }} />
542
- {
543
- !businessId && !props.franchiseId && (
544
- <HighestRatedBusinesses
545
- onBusinessClick={handleBusinessClick}
546
- navigation={navigation}
547
- favoriteIds={favoriteIds}
548
- setFavoriteIds={setFavoriteIds}
549
- />
550
- )
551
- }
566
+ {!isChewLayout && !hideHighestBusiness && (
567
+ <>
568
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100 }} />
569
+ {
570
+ !businessId && !props.franchiseId && (
571
+ <HighestRatedBusinesses
572
+ propsToFetch={props.propsToFetch}
573
+ onBusinessClick={handleBusinessClick}
574
+ navigation={navigation}
575
+ favoriteIds={favoriteIds}
576
+ setFavoriteIds={setFavoriteIds}
577
+ />
578
+ )
579
+ }
580
+ </>
581
+ )}
552
582
 
553
- <PageBanner position='app_business_listing' />
583
+ <PageBanner position='app_business_listing' navigation={navigation} />
554
584
 
555
585
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100 }} />
556
- <ListWrapper>
557
- {!businessId && (
586
+ <ListWrapper style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}>
587
+ {!businessId && !isAllCategoriesHidden && (
558
588
  <BusinessTypeFilter
559
589
  images={props.images}
560
590
  businessTypes={props.businessTypes}
@@ -563,7 +593,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
563
593
  setBusinessTypes={setBusinessTypes}
564
594
  />
565
595
  )}
566
- {!businessesList.loading && businessesList.businesses.length === 0 && (
596
+ {!businessesList.loading && businessesList.businesses.length === 0 && businessesList?.fetched && (
567
597
  <NotFoundSource
568
598
  content={t(
569
599
  'NOT_FOUND_BUSINESSES',
@@ -576,7 +606,6 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
576
606
  <BusinessController
577
607
  key={`${business.id}_` + i}
578
608
  enableIntersection
579
- isCustomLayout={isChewLayout}
580
609
  business={business}
581
610
  isBusinessOpen={business.open}
582
611
  handleCustomClick={handleBusinessClick}
@@ -596,7 +625,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
596
625
  />
597
626
  )
598
627
  )}
599
- {businessesList.loading && (
628
+ {(businessesList.loading || !businessesList?.fetched) && (
600
629
  <>
601
630
  {[
602
631
  ...Array(
@@ -664,10 +693,16 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
664
693
  };
665
694
 
666
695
  export const BusinessesListing = (props: BusinessesListingParams) => {
696
+
667
697
  const BusinessesListingProps = {
668
698
  ...props,
669
699
  isForceSearch: Platform.OS === 'ios',
670
700
  UIComponent: BusinessesListingUI,
701
+ paginationSettings: {
702
+ initialPage: 1,
703
+ pageSize: 50,
704
+ controlType: 'infinity'
705
+ }
671
706
  };
672
707
 
673
708
  return <BusinessesListingController {...BusinessesListingProps} />;
@@ -67,7 +67,6 @@ export const HeaderWrapper = styled.ImageBackground`
67
67
 
68
68
  export const ListWrapper = styled.View`
69
69
  background-color: ${(props: any) => props.theme.colors.backgroundLight};
70
- padding-horizontal: 40px;
71
70
  `;
72
71
 
73
72
  export const FeaturedWrapper = styled.View`
@@ -1,4 +1,3 @@
1
-
2
1
  import React, { useState, useEffect } from 'react'
3
2
  import { useOrder, useSession, useLanguage, useConfig } from 'ordering-components/native';
4
3
 
@@ -8,7 +8,7 @@ import {
8
8
  useValidationFields,
9
9
  } from 'ordering-components/native';
10
10
  import { useTheme } from 'styled-components/native';
11
- import { CContainer, CheckoutAction, Divider, DriverTipsContainer } from './styles';
11
+ import { CContainer, CheckoutAction, DriverTipsContainer } from './styles';
12
12
 
13
13
  import { OSBill, OSTable, OSCoupon, OSTotal, OSRow } from '../OrderSummary/styles';
14
14
 
@@ -23,7 +23,7 @@ import { ActivityIndicator, TouchableOpacity, View } from 'react-native';
23
23
  import AntIcon from 'react-native-vector-icons/AntDesign'
24
24
  import { TaxInformation } from '../TaxInformation';
25
25
  import { CartStoresListing } from '../CartStoresListing';
26
- import { OAlert } from '../../../../../src/components/shared'
26
+ import { OAlert } from '../shared'
27
27
  import { PlaceSpot } from '../PlaceSpot'
28
28
  import { DriverTips } from '../DriverTips'
29
29
 
@@ -41,7 +41,17 @@ const CartUI = (props: any) => {
41
41
  commentState,
42
42
  onNavigationRedirect,
43
43
  handleRemoveOfferClick,
44
- isMultiCheckout
44
+ isMultiCheckout,
45
+ hideDeliveryFee,
46
+ hideDriverTip,
47
+ hideCouponInput,
48
+ preorderSlotInterval,
49
+ preorderLeadTime,
50
+ preorderTimeRange,
51
+ preorderMaximumDays,
52
+ preorderMinimumDays,
53
+ cateringTypes,
54
+ isFromUpselling
45
55
  } = props
46
56
 
47
57
  const theme = useTheme();
@@ -56,18 +66,15 @@ const CartUI = (props: any) => {
56
66
  const [openChangeStore, setOpenChangeStore] = useState(false)
57
67
  const [canOpenUpselling, setCanOpenUpselling] = useState(false)
58
68
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, data: null, type: '' })
59
- const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
60
69
  const [openPlaceModal, setOpenPlaceModal] = useState(false)
61
70
 
62
71
  const isCartPending = cart?.status === 2
63
72
  const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled
64
- const isCheckoutMultiBusinessEnabled: Boolean = configs?.checkout_multi_business_enabled?.value === '1'
65
- const openCarts = (Object.values(orderState?.carts)?.filter((cart: any) => cart?.products && cart?.products?.length && cart?.status !== 2 && cart?.valid_schedule && cart?.valid_products && cart?.valid_address && cart?.valid_maximum && cart?.valid_minimum && !cart?.wallets) || null) || []
66
-
67
73
  const business: any = (orderState?.carts && Object.values(orderState.carts).find((_cart: any) => _cart?.uuid === props.cartuuid)) ?? {}
68
74
  const businessId = business?.business_id ?? null
69
75
  const placeSpotTypes = [4]
70
-
76
+ const hideCartComments = theme?.business_view?.components?.cart?.components?.comments?.hidden
77
+ const hideCartDiscount = theme?.business_view?.components?.cart?.components?.discount?.hidden
71
78
  const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
72
79
  ? JSON.parse(configs?.driver_tip_options?.value) || []
73
80
  : configs?.driver_tip_options?.value || []
@@ -101,21 +108,45 @@ const CartUI = (props: any) => {
101
108
  }
102
109
  }
103
110
 
104
- const handleUpsellingPage = () => {
111
+ const handleUpsellingPage = (individualCart : any) => {
112
+ const isProductCartParam = !!individualCart?.products?.length
105
113
  setOpenUpselling(false)
106
114
  setCanOpenUpselling(false)
107
- if (isCheckoutMultiBusinessEnabled && openCarts.length > 1) {
108
- props.onNavigationRedirect('CheckoutNavigator', {
109
- screen: 'MultiCheckout'
110
- })
111
- } else {
112
- props.onNavigationRedirect('CheckoutNavigator', {
115
+
116
+ const cartsAvailable: any = Object.values(orderState?.carts)
117
+ ?.filter((_cart: any) => _cart?.valid && _cart?.status !== 2 && _cart?.products?.length)
118
+ ?.filter((_c: any) => !isProductCartParam ? _c.uuid !== individualCart?.uuid : _c)
119
+ if (cartsAvailable.length === 1 || !isMultiCheckout) {
120
+ const cart = isMultiCheckout ? cartsAvailable[0] : individualCart
121
+ onNavigationRedirect('CheckoutNavigator', {
113
122
  screen: 'CheckoutPage',
114
123
  cartUuid: cart?.uuid,
115
124
  businessLogo: cart?.business?.logo,
116
125
  businessName: cart?.business?.name,
117
126
  cartTotal: cart?.total
127
+ }, true)
128
+ } else {
129
+ const groupKeys: any = {}
130
+ cartsAvailable.forEach((_cart: any) => {
131
+ groupKeys[_cart?.group?.uuid]
132
+ ? groupKeys[_cart?.group?.uuid] += 1
133
+ : groupKeys[_cart?.group?.uuid ?? 'null'] = 1
118
134
  })
135
+
136
+ if (
137
+ (Object.keys(groupKeys).length === 1 && Object.keys(groupKeys)[0] === 'null') ||
138
+ Object.keys(groupKeys).length > 1
139
+ ) {
140
+ onNavigationRedirect('CheckoutNavigator', {
141
+ screen: 'MultiCheckout',
142
+ checkCarts: true
143
+ }, true)
144
+ } else {
145
+ onNavigationRedirect('CheckoutNavigator', {
146
+ screen: 'MultiCheckout',
147
+ cartUuid: cartsAvailable[0]?.group?.uuid
148
+ }, true)
149
+ }
119
150
  }
120
151
  }
121
152
 
@@ -133,16 +164,16 @@ const CartUI = (props: any) => {
133
164
  return cart?.taxes?.filter((tax: any) => tax?.type === 1)?.reduce((carry: number, tax: any) => carry + (tax?.summary?.tax_after_discount ?? tax?.summary?.tax), 0)
134
165
  }
135
166
 
136
- const onRemoveOffer = (id: number) => {
137
- setConfirm({
138
- open: true,
139
- content: [t('QUESTION_DELETE_OFFER', 'Are you sure that you want to delete the offer?')],
140
- title: t('OFFER', 'Offer'),
141
- handleOnAccept: () => {
142
- setConfirm({ ...confirm, open: false })
143
- handleRemoveOfferClick(id)
144
- }
145
- })
167
+ const OfferAlert = ({ offerId }: any) => {
168
+ return (
169
+ <OAlert
170
+ title={t('OFFER', 'Offer')}
171
+ message={t('QUESTION_DELETE_OFFER', 'Are you sure that you want to delete the offer?')}
172
+ onAccept={() => handleRemoveOfferClick(offerId)}
173
+ >
174
+ <AntIcon style={{ marginLeft: 3 }} name='closecircle' size={16} color={theme.colors.primary} />
175
+ </OAlert>
176
+ )
146
177
  }
147
178
 
148
179
  const walletName: any = {
@@ -186,12 +217,14 @@ const CartUI = (props: any) => {
186
217
  handleClickCheckout={() => setOpenUpselling(true)}
187
218
  checkoutButtonDisabled={(openUpselling && !canOpenUpselling) || subtotalWithTaxes < cart?.minimum || !cart?.valid_address}
188
219
  isMultiCheckout={isMultiCheckout}
220
+ isFromUpselling={isFromUpselling}
189
221
  >
190
222
  {cart?.products?.length > 0 && cart?.products.map((product: any, i: number) => (
191
223
  <ProductItemAccordion
192
224
  key={`${product.code}_${i}`}
193
225
  isCartPending={isCartPending}
194
226
  isCartProduct
227
+ isDisabledEdit={!cart?.business_id}
195
228
  product={product}
196
229
  changeQuantity={changeQuantity}
197
230
  getProductMax={getProductMax}
@@ -233,9 +266,9 @@ const CartUI = (props: any) => {
233
266
  <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => setOpenTaxModal({ open: true, data: offer, type: 'offer_target_1' })}>
234
267
  <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
235
268
  </TouchableOpacity>
236
- <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => onRemoveOffer(offer?.id)}>
237
- <AntIcon name='closecircle' size={16} color={theme.colors.primary} />
238
- </TouchableOpacity>
269
+ {!!offer?.id && (
270
+ <OfferAlert offerId={offer?.id} />
271
+ )}
239
272
  </OSRow>
240
273
  <OText size={12} lineHeight={18}>
241
274
  - {parsePrice(offer?.summary?.discount)}
@@ -297,9 +330,9 @@ const CartUI = (props: any) => {
297
330
  <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => setOpenTaxModal({ open: true, data: offer, type: 'offer_target_3' })}>
298
331
  <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
299
332
  </TouchableOpacity>
300
- <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => onRemoveOffer(offer?.id)}>
301
- <AntIcon name='closecircle' size={16} color={theme.colors.primary} />
302
- </TouchableOpacity>
333
+ {!!offer?.id && (
334
+ <OfferAlert offerId={offer?.id} />
335
+ )}
303
336
  </OSRow>
304
337
  <OText size={12} lineHeight={18}>
305
338
  - {parsePrice(offer?.summary?.discount)}
@@ -307,10 +340,10 @@ const CartUI = (props: any) => {
307
340
  </OSTable>
308
341
  ))
309
342
  }
310
- {orderState?.options?.type === 1 && cart?.delivery_price > 0 && (
343
+ {orderState?.options?.type === 1 && cart?.delivery_price_with_discount > 0 && !hideDeliveryFee && (
311
344
  <OSTable>
312
345
  <OText size={12} lineHeight={18}>{t('DELIVERY_FEE', 'Delivery Fee')}</OText>
313
- <OText size={12} lineHeight={18}>{parsePrice(cart?.delivery_price)}</OText>
346
+ <OText size={12} lineHeight={18}>{parsePrice(cart?.delivery_price_with_discount)}</OText>
314
347
  </OSTable>
315
348
  )}
316
349
  {
@@ -324,9 +357,9 @@ const CartUI = (props: any) => {
324
357
  <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => setOpenTaxModal({ open: true, data: offer, type: 'offer_target_2' })}>
325
358
  <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
326
359
  </TouchableOpacity>
327
- <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => onRemoveOffer(offer?.id)}>
328
- <AntIcon name='closecircle' size={16} color={theme.colors.primary} />
329
- </TouchableOpacity>
360
+ {!!offer?.id && (
361
+ <OfferAlert offerId={offer?.id} />
362
+ )}
330
363
  </OSRow>
331
364
  <OText size={12} lineHeight={18}>
332
365
  - {parsePrice(offer?.summary?.discount)}
@@ -334,7 +367,7 @@ const CartUI = (props: any) => {
334
367
  </OSTable>
335
368
  ))
336
369
  }
337
- {cart?.driver_tip > 0 && (
370
+ {cart?.driver_tip > 0 && !hideDriverTip && (
338
371
  <OSTable>
339
372
  <OText size={12} lineHeight={18}>
340
373
  {t('DRIVER_TIP', 'Driver tip')}
@@ -356,18 +389,19 @@ const CartUI = (props: any) => {
356
389
  <OText size={12}>-{parsePrice(event.amount, { isTruncable: true })}</OText>
357
390
  </OSTable>
358
391
  ))}
359
- {isCouponEnabled && !isCartPending && (
392
+ {isCouponEnabled && !isCartPending && !hideCouponInput && (
360
393
  <OSTable>
361
394
  <OSCoupon>
362
395
  <CouponControl
363
396
  businessId={businessId}
364
397
  price={cart.total}
398
+ cart={cart}
365
399
  />
366
400
  </OSCoupon>
367
401
  </OSTable>
368
402
  )}
369
403
 
370
- {isMultiCheckout &&
404
+ {!isMultiCheckout &&
371
405
  cart &&
372
406
  cart?.valid &&
373
407
  orderState?.options?.type === 1 &&
@@ -382,13 +416,14 @@ const CartUI = (props: any) => {
382
416
  <DriverTips
383
417
  uuid={cart?.uuid}
384
418
  businessId={cart?.business_id}
385
- driverTipsOptions={driverTipsOptions}
386
- isFixedPrice={parseInt(configs?.driver_tip_type?.value, 10) === 1 || !!parseInt(configs?.driver_tip_use_custom?.value, 10)}
419
+ driverTipsOptions={!driverTipsOptions.includes(0) ? [0, ...driverTipsOptions] : driverTipsOptions}
420
+ isFixedPrice={parseInt(configs?.driver_tip_type?.value, 10) === 1}
387
421
  isDriverTipUseCustom={!!parseInt(configs?.driver_tip_use_custom?.value, 10)}
388
- driverTip={parseInt(configs?.driver_tip_type?.value, 10) === 1 || !!parseInt(configs?.driver_tip_use_custom?.value, 10)
422
+ driverTip={parseInt(configs?.driver_tip_type?.value, 10) === 1
389
423
  ? cart?.driver_tip
390
424
  : cart?.driver_tip_rate}
391
425
  useOrderContext
426
+ cart={cart}
392
427
  />
393
428
  </DriverTipsContainer>
394
429
  )}
@@ -522,14 +557,6 @@ const CartUI = (props: any) => {
522
557
  setOpenPlaceModal={setOpenPlaceModal}
523
558
  />
524
559
  </OModal>
525
- <OAlert
526
- open={confirm.open}
527
- title={confirm.title}
528
- content={confirm.content}
529
- onAccept={confirm.handleOnAccept}
530
- onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
531
- onClose={() => setConfirm({ ...confirm, open: false, title: null })}
532
- />
533
560
  </CContainer>
534
561
  )
535
562
  }