ordering-ui-react-native 0.22.13 → 0.22.14-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 (164) hide show
  1. package/package.json +6 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/Checkout/index.tsx +40 -39
  5. package/src/components/StripeMethodForm/index.tsx +4 -2
  6. package/src/components/VerifyPhone/styles.tsx +1 -2
  7. package/src/context/OfflineActions/index.tsx +236 -0
  8. package/src/types/index.tsx +2 -1
  9. package/themes/business/index.tsx +2 -0
  10. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  11. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  12. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  13. package/themes/business/src/components/BusinessProductList/index.tsx +2 -1
  14. package/themes/business/src/components/Chat/index.tsx +15 -3
  15. package/themes/business/src/components/DriverMap/index.tsx +49 -26
  16. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  17. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  18. package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
  19. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  20. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  21. package/themes/business/src/components/MapView/index.tsx +36 -17
  22. package/themes/business/src/components/NewOrderNotification/index.tsx +40 -27
  23. package/themes/business/src/components/OrderDetails/Business.tsx +47 -27
  24. package/themes/business/src/components/OrderDetails/Delivery.tsx +134 -53
  25. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +128 -41
  26. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +46 -19
  27. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  28. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +46 -21
  29. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  30. package/themes/business/src/components/OrderSummary/index.tsx +7 -5
  31. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  32. package/themes/business/src/components/OrdersOption/index.tsx +217 -156
  33. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  34. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  35. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +39 -16
  36. package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
  37. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  38. package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
  39. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  40. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  41. package/themes/business/src/components/PrinterSettings/index.tsx +162 -174
  42. package/themes/business/src/components/PrinterSettings/styles.tsx +14 -1
  43. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  44. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  45. package/themes/business/src/components/StoresList/index.tsx +2 -2
  46. package/themes/business/src/components/UserProfileForm/index.tsx +16 -17
  47. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  48. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  49. package/themes/business/src/config/currency.tsx +1010 -0
  50. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  51. package/themes/business/src/types/index.tsx +13 -4
  52. package/themes/business/src/utils/index.tsx +33 -3
  53. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  54. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  55. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  56. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  57. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  58. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  59. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  60. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  61. package/themes/original/index.tsx +11 -0
  62. package/themes/original/src/components/AddressForm/index.tsx +32 -17
  63. package/themes/original/src/components/AddressList/index.tsx +8 -7
  64. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  65. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  66. package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
  67. package/themes/original/src/components/BusinessController/index.tsx +3 -3
  68. package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
  69. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
  70. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +8 -6
  71. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  72. package/themes/original/src/components/BusinessPreorder/index.tsx +46 -28
  73. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  74. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  75. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  76. package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
  77. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  78. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  79. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  80. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  81. package/themes/original/src/components/Cart/index.tsx +46 -14
  82. package/themes/original/src/components/CartContent/index.tsx +2 -4
  83. package/themes/original/src/components/Checkout/index.tsx +113 -59
  84. package/themes/original/src/components/CitiesControl/index.tsx +0 -3
  85. package/themes/original/src/components/CouponControl/index.tsx +1 -3
  86. package/themes/original/src/components/DriverTips/index.tsx +1 -3
  87. package/themes/original/src/components/Favorite/index.tsx +1 -5
  88. package/themes/original/src/components/FavoriteList/index.tsx +0 -1
  89. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
  90. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  91. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  92. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  93. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  94. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
  95. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  96. package/themes/original/src/components/Help/index.tsx +2 -0
  97. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  98. package/themes/original/src/components/Home/index.tsx +3 -11
  99. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  100. package/themes/original/src/components/LoginForm/index.tsx +4 -7
  101. package/themes/original/src/components/MessageListing/index.tsx +2 -1
  102. package/themes/original/src/components/Messages/index.tsx +27 -19
  103. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  104. package/themes/original/src/components/MomentOption/index.tsx +80 -51
  105. package/themes/original/src/components/MomentSelector/index.tsx +5 -2
  106. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  107. package/themes/original/src/components/MultiCheckout/index.tsx +55 -27
  108. package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -0
  109. package/themes/original/src/components/MyOrders/index.tsx +2 -2
  110. package/themes/original/src/components/NavBar/index.tsx +7 -4
  111. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  112. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  113. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  114. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +13 -10
  115. package/themes/original/src/components/OrderDetails/index.tsx +44 -21
  116. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  117. package/themes/original/src/components/OrderProgress/index.tsx +5 -4
  118. package/themes/original/src/components/OrderSummary/index.tsx +29 -10
  119. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  120. package/themes/original/src/components/OrdersOption/index.tsx +3 -6
  121. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  122. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  123. package/themes/original/src/components/PaymentOptions/index.tsx +0 -2
  124. package/themes/original/src/components/PhoneInputNumber/index.tsx +74 -4
  125. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  126. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  127. package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
  128. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  129. package/themes/original/src/components/ProductItemAccordion/index.tsx +50 -43
  130. package/themes/original/src/components/ProductItemAccordion/styles.tsx +0 -3
  131. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  132. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  133. package/themes/original/src/components/Promotions/index.tsx +6 -9
  134. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  135. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  136. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  137. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  138. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  139. package/themes/original/src/components/Sessions/index.tsx +3 -3
  140. package/themes/original/src/components/SignupForm/index.tsx +86 -78
  141. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
  142. package/themes/original/src/components/SingleProductCard/index.tsx +5 -5
  143. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  144. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  145. package/themes/original/src/components/StripeCardsList/index.tsx +10 -3
  146. package/themes/original/src/components/StripeElementsForm/index.tsx +76 -62
  147. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  148. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  149. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  150. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  151. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  152. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  153. package/themes/original/src/components/UserFormDetails/index.tsx +161 -134
  154. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  155. package/themes/original/src/components/UserVerification/index.tsx +15 -4
  156. package/themes/original/src/components/Wallets/index.tsx +6 -3
  157. package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
  158. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  159. package/themes/original/src/components/shared/OButton.tsx +5 -4
  160. package/themes/original/src/components/shared/OInput.tsx +4 -8
  161. package/themes/original/src/components/shared/OModal.tsx +7 -2
  162. package/themes/original/src/types/index.tsx +7 -2
  163. package/themes/original/src/utils/index.tsx +30 -1
  164. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -217,7 +217,8 @@ const AddressListUI = (props: AddressListParams) => {
217
217
  onSaveAddress: handleSaveAddress,
218
218
  isSelectedAfterAdd: true,
219
219
  isFromProductsList: isFromProductsList,
220
- hasAddressDefault: !!orderState.options?.address?.location
220
+ hasAddressDefault: !!orderState.options?.address?.location,
221
+ isFromCheckout: route?.params?.isFromCheckout
221
222
  }
222
223
  ) : onNavigationRedirect(
223
224
  'AddressFormInitial',
@@ -228,7 +229,8 @@ const AddressListUI = (props: AddressListParams) => {
228
229
  onSaveAddress: handleSaveAddress,
229
230
  isSelectedAfterAdd: true,
230
231
  isFromProductsList: isFromProductsList,
231
- hasAddressDefault: !!orderState.options?.address?.location
232
+ hasAddressDefault: !!orderState.options?.address?.location,
233
+ isFromCheckout: route?.params?.isFromCheckout
232
234
  })}
233
235
  >
234
236
  <OIcon src={theme.images.general.pencil} width={16} style={{ marginHorizontal: 4 }} />
@@ -293,10 +295,7 @@ const AddressListUI = (props: AddressListParams) => {
293
295
  <OButton
294
296
  text={t('ADD_NEW_ADDRESS', 'Add new Address')}
295
297
  imgRightSrc=''
296
- bgColor={theme.colors.primary}
297
- textStyle={{ color: theme.colors.white }}
298
298
  style={styles.button}
299
- borderColor={theme.colors.primary}
300
299
  onClick={() => !afterSignup ? onNavigationRedirect(
301
300
  'AddressForm',
302
301
  {
@@ -305,7 +304,8 @@ const AddressListUI = (props: AddressListParams) => {
305
304
  addressesList: addressList?.addresses,
306
305
  nopadding: true,
307
306
  isSelectedAfterAdd: true,
308
- hasAddressDefault: !!orderState.options?.address?.location
307
+ hasAddressDefault: !!orderState.options?.address?.location,
308
+ isFromCheckout: route?.params?.isFromCheckout
309
309
  }) : onNavigationRedirect(
310
310
  'AddressFormInitial',
311
311
  {
@@ -314,7 +314,8 @@ const AddressListUI = (props: AddressListParams) => {
314
314
  addressesList: addressList?.addresses,
315
315
  nopadding: true,
316
316
  isSelectedAfterAdd: true,
317
- hasAddressDefault: !!orderState.options?.address?.location
317
+ hasAddressDefault: !!orderState.options?.address?.location,
318
+ isFormCheckout: route?.params?.isFromCheckout
318
319
  })}
319
320
  />
320
321
  </>
@@ -23,8 +23,7 @@ export const AnalyticsSegment = (props: any) => {
23
23
  segmentClient.track('Product List Viewed', {
24
24
  business_id: category?.business_id,
25
25
  category_id: category?.id,
26
- category: category?.name,
27
- products: category?.products
26
+ category: category?.name
28
27
  })
29
28
  }
30
29
 
@@ -62,11 +61,12 @@ export const AnalyticsSegment = (props: any) => {
62
61
  })
63
62
  }
64
63
 
65
- const handleProductAdded = (product: any) => {
64
+ const handleProductAdded = (product: any, result: any) => {
66
65
  segmentClient.track('Product Added', {
67
- id: product.id,
66
+ cart_id: result.uuid,
67
+ product_id: product.id,
68
68
  name: product.name,
69
- category: product.category_id,
69
+ category: product.category_id || product?.categoryId,
70
70
  price: product.price,
71
71
  quantity: product.quantity
72
72
  })
@@ -101,7 +101,7 @@ export const AnalyticsSegment = (props: any) => {
101
101
 
102
102
  const handleOrderPlaced = (order: any) => {
103
103
  segmentClient.track('Order Placed', {
104
- id: order.id,
104
+ order_id: order.id,
105
105
  affiliation: order.business?.name,
106
106
  revenue: order.total,
107
107
  tax: order.tax_total,
@@ -21,7 +21,7 @@ export const AppleLogin = (props: any) => {
21
21
  const [{ configs }] = useConfig();
22
22
  const [credentialStateForUser, updateCredentialStateForUser] = useState<any>(-1);
23
23
 
24
- let user : any= null
24
+ let user: any = null
25
25
 
26
26
  const buttonText = auth
27
27
  ? t('CONTINUE_WITH_APPLE', 'Logout with Apple')
@@ -53,7 +53,7 @@ export const AppleLogin = (props: any) => {
53
53
  }
54
54
  }
55
55
 
56
- const fetchAndUpdateCredentialState = async (updateCredentialStateForUser : any) => {
56
+ const fetchAndUpdateCredentialState = async (updateCredentialStateForUser: any) => {
57
57
  if (user === null) {
58
58
  updateCredentialStateForUser('N/A');
59
59
  } else {
@@ -66,7 +66,7 @@ export const AppleLogin = (props: any) => {
66
66
  }
67
67
  }
68
68
 
69
- const onIOSButtonPress = async (updateCredentialStateForUser : any) => {
69
+ const onIOSButtonPress = async (updateCredentialStateForUser: any) => {
70
70
  try {
71
71
  const appleAuthRequestResponse = await appleAuth.performRequest({
72
72
  requestedOperation: appleAuth.Operation.LOGIN,
@@ -79,7 +79,7 @@ export const AppleLogin = (props: any) => {
79
79
  identityToken,
80
80
  authorizationCode
81
81
  } = appleAuthRequestResponse;
82
-
82
+
83
83
  user = newUser;
84
84
 
85
85
  fetchAndUpdateCredentialState(updateCredentialStateForUser).catch(error =>
@@ -26,7 +26,6 @@ import {
26
26
  SocialListWrapper
27
27
  } from './styles';
28
28
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
29
- const types = ['food', 'laundry', 'alcohol', 'groceries'];
30
29
 
31
30
  let BusinessInformation: null | React.ElementType = null
32
31
  let BusinessReviews: null | React.ElementType = null
@@ -36,6 +35,7 @@ export const BusinessBasicInformation = (
36
35
  ) => {
37
36
  const { navigation, businessState, isBusinessInfoShow, logo, header, isPreOrder } = props;
38
37
  const { business, loading } = businessState;
38
+ const types = business?.types && business?.types?.filter(({ enabled }) => (enabled)).map(({ name }) => (name))
39
39
 
40
40
  const theme = useTheme();
41
41
  const [orderState] = useOrder();
@@ -146,14 +146,11 @@ export const BusinessBasicInformation = (
146
146
  }
147
147
 
148
148
  const getBusinessType = () => {
149
- if (Object.keys(business || {}).length <= 0) return t('GENERAL', 'General');
149
+ if (!types) return t('GENERAL', 'General');
150
150
  const _types: any = [];
151
151
  types.forEach(
152
- (type) =>
153
- business[type] &&
154
- _types.push(
155
- t(`BUSINESS_TYPE_${type?.replace(/\s/g, '_')?.toUpperCase()}`, type),
156
- ),
152
+ (type: any) =>
153
+ _types.push(type)
157
154
  );
158
155
  return _types.join(', ');
159
156
  };
@@ -455,7 +452,7 @@ export const BusinessBasicInformation = (
455
452
  </BusinessInfoItem>
456
453
  </View>
457
454
  <WrapReviews>
458
- {!isBusinessInfoShow && (
455
+ {!isBusinessInfoShow && !loading && (
459
456
  <>
460
457
  {isPreOrder && (!business?.professionals || business?.professionals?.length === 0) && (
461
458
  <>
@@ -232,7 +232,7 @@ export const BusinessControllerUI = React.memo((props: BusinessControllerParams)
232
232
  </View>
233
233
  )}
234
234
  {!hideBusinessOffer && (
235
- getBusinessOffer((business?.offers)) &&
235
+ !!getBusinessOffer((business?.offers)) &&
236
236
  <OfferBox
237
237
  isClosed={!isBusinessOpen && (configState?.configs?.preorder_status_enabled?.value === '1')}
238
238
  isRibbon={business?.ribbon?.enabled && !!business?.ribbon?.text}
@@ -244,7 +244,7 @@ export const BusinessControllerUI = React.memo((props: BusinessControllerParams)
244
244
  numberOfLines={2}
245
245
  ellipsizeMode='tail'
246
246
  lineHeight={13}
247
- >{t('DISCOUNT', 'Discount')}{' '}{getBusinessOffer((business?.offers)) || parsePrice(0)}</OText>
247
+ >{t('DISCOUNT', 'Discount')}{' '}{getBusinessOffer((business?.offers))}</OText>
248
248
  </OfferBox>
249
249
  )}
250
250
  <BusinessState isRibbon={business?.ribbon?.enabled && !!business?.ribbon?.text}>
@@ -309,7 +309,7 @@ export const BusinessControllerUI = React.memo((props: BusinessControllerParams)
309
309
  </ReviewAndFavorite>
310
310
  )}
311
311
  </View>
312
- <OText size={textSize} style={{ lineHeight: 15, marginBottom: 3 }} numberOfLines={2}>
312
+ <OText size={textSize} style={{ lineHeight: 15, marginBottom: 3, fontFamily: undefined }} numberOfLines={1}>
313
313
  {business?.address}
314
314
  </OText>
315
315
  <Metadata>
@@ -1,5 +1,5 @@
1
1
  import React, { useState, useRef, useEffect } from 'react';
2
- import { TouchableOpacity, View } from 'react-native';
2
+ import { TouchableOpacity, View, Vibration } from 'react-native';
3
3
  import { useOrder, useLanguage, useUtils, useConfig, useEvent } from 'ordering-components/native';
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import {
@@ -57,6 +57,9 @@ export const BusinessItemAccordion = (props: any) => {
57
57
  return acc = acc
58
58
  }, cart?.subtotal)
59
59
 
60
+ const bgStyle = (subtotalWithTaxes < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary
61
+ const textStyles = (subtotalWithTaxes < cart?.minimum || !cart?.valid_address) ? theme.colors.black : theme.colors.white
62
+
60
63
  useEffect(() => {
61
64
  if (isActive && !isFromUpselling) {
62
65
  if (cart?.uuid !== viewedCart?.uuid) {
@@ -66,6 +69,11 @@ export const BusinessItemAccordion = (props: any) => {
66
69
  }
67
70
  }, [isActive, viewedCart])
68
71
 
72
+ const handleGoToStore = () => {
73
+ Vibration.vibrate(100)
74
+ props.onNavigationRedirect('Business', { store: cart?.business?.slug })
75
+ }
76
+
69
77
  return (
70
78
  <BIContainer isClosed={isClosed} isMultiCheckout={isMultiCheckout} checkoutVisible={!isActive && !isClosed && !!isProducts && !checkoutButtonDisabled}>
71
79
  <BIHeader
@@ -79,7 +87,7 @@ export const BusinessItemAccordion = (props: any) => {
79
87
  <View style={{ flexDirection: 'row' }}>
80
88
  {props.onNavigationRedirect && !isClosed && !isGiftCart && (
81
89
  <>
82
- <TouchableOpacity onPress={() => props.onNavigationRedirect('Business', { store: cart?.business?.slug })}>
90
+ <TouchableOpacity onPress={() => handleGoToStore()}>
83
91
  <OText color={theme.colors.primary} size={12} lineHeight={18} style={{ textDecorationLine: 'underline' }}>{t('GO_TO_STORE', 'Go to store')}</OText>
84
92
  </TouchableOpacity>
85
93
  </>
@@ -153,11 +161,11 @@ export const BusinessItemAccordion = (props: any) => {
153
161
  {cart?.valid_products && (
154
162
  <OButton
155
163
  onClick={handleClickCheckout}
156
- textStyle={{ color: 'white', textAlign: 'center', flex: 1 }}
164
+ textStyle={{ color: textStyles, textAlign: 'center', flex: 1 }}
157
165
  style={{ width: 180, flexDirection: 'row', justifyContent: 'center', borderRadius: 7.6, shadowOpacity: 0 }}
158
166
  text={t('CHECKOUT', 'Checkout')}
159
- bgColor={(subtotalWithTaxes < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary}
160
- borderColor={theme.colors.primary}
167
+ bgColor={bgStyle}
168
+ borderColor={bgStyle}
161
169
  isDisabled={checkoutButtonDisabled}
162
170
  />
163
171
  )}
@@ -1,5 +1,5 @@
1
- import React, { useState } from 'react'
2
- import { useLanguage, useOrder } from 'ordering-components/native'
1
+ import React from 'react'
2
+ import { useLanguage, useOrder, useConfig } from 'ordering-components/native'
3
3
  import { ScrollView, StyleSheet, TouchableOpacity, View, Dimensions } from 'react-native'
4
4
  import { useTheme } from 'styled-components/native'
5
5
  import { OButton, OModal, OText } from '../shared'
@@ -38,6 +38,7 @@ export const BusinessSearchFooter = (props: any) => {
38
38
  const [orderState] = useOrder()
39
39
 
40
40
  const [, t] = useLanguage()
41
+ const [{ configs }] = useConfig()
41
42
 
42
43
  const maxDeliveryFeeOptions = [15, 25, 35, 'default']
43
44
  // const maxProductPriceOptions = [5, 10, 15, 'default']
@@ -57,6 +58,8 @@ export const BusinessSearchFooter = (props: any) => {
57
58
  { level: '5', content: '$$$$$' }
58
59
  ]
59
60
 
61
+ const filterOptionsEnabled = configs?.filter_search_options?.value?.split('|') || []
62
+
60
63
  const styles = StyleSheet.create({
61
64
  container: {
62
65
  paddingHorizontal: 40,
@@ -165,90 +168,97 @@ export const BusinessSearchFooter = (props: any) => {
165
168
  >
166
169
  {t('FILTER', 'Filter')}
167
170
  </OText>
168
- <SortContainer>
169
- <OText weight='bold' mBottom={7} size={16}>
170
- {t('SORT', 'Sort')}
171
- </OText>
172
- {sortItems?.filter(item => !(orderState?.options?.type === 1 && item?.value === 'pickup_time') && !(orderState?.options?.type === 2 && item?.value === 'delivery_time'))?.map(item => (
173
- <TouchableOpacity
174
- key={item?.value}
175
- onPress={() => handleChangeFilters('orderBy', item?.value)}
176
- style={{ marginBottom: 7 }}
171
+ {filterOptionsEnabled.includes('sort') && (
172
+ <SortContainer>
173
+ <OText weight='bold' mBottom={7} size={16}>
174
+ {t('SORT', 'Sort')}
175
+ </OText>
176
+ {sortItems?.filter(item => !(orderState?.options?.type === 1 && item?.value === 'pickup_time') && !(orderState?.options?.type === 2 && item?.value === 'delivery_time'))?.map(item => (
177
+ <TouchableOpacity
178
+ key={item?.value}
179
+ onPress={() => handleChangeFilters('orderBy', item?.value)}
180
+ style={{ marginBottom: 7 }}
181
+ >
182
+ <OText
183
+ weight={filters?.orderBy?.includes(item?.value) ? 'bold' : '500'}
184
+ mBottom={filters?.orderBy?.includes(item?.value) ? 5 : 0}
185
+ >
186
+ {item?.text} {(filters?.orderBy?.includes(item?.value)) && <>{filters?.orderBy?.includes('-') ? <AntDesignIcon name='caretup' /> : <AntDesignIcon name='caretdown' />}</>}
187
+ </OText>
188
+ </TouchableOpacity>
189
+ ))}
190
+ </SortContainer>
191
+ )}
192
+ {filterOptionsEnabled.includes('brands') && (
193
+
194
+ <BrandContainer>
195
+ <OText
196
+ size={16}
197
+ weight='bold'
198
+ lineHeight={24}
199
+ style={{ marginBottom: 10 }}
177
200
  >
178
- <OText
179
- weight={filters?.orderBy?.includes(item?.value) ? 'bold' : '500'}
180
- mBottom={filters?.orderBy?.includes(item?.value) ? 5 : 0}
201
+ {t('BRANDS', 'Brands')}
202
+ </OText>
203
+ {!brandList?.loading && !brandList?.error && brandList?.brands?.length > 0 && (
204
+ <ScrollView
205
+ style={{ maxHeight: 300, marginBottom: 10 }}
206
+ showsVerticalScrollIndicator={true}
207
+ nestedScrollEnabled={true}
181
208
  >
182
- {item?.text} {(filters?.orderBy?.includes(item?.value)) && <>{filters?.orderBy?.includes('-') ? <AntDesignIcon name='caretup' /> : <AntDesignIcon name='caretdown' />}</>}
183
- </OText>
184
- </TouchableOpacity>
185
- ))}
186
- </SortContainer>
187
- <BrandContainer>
188
- <OText
189
- size={16}
190
- weight='bold'
191
- lineHeight={24}
192
- style={{ marginBottom: 10 }}
193
- >
194
- {t('BRANDS', 'Brands')}
195
- </OText>
196
- {!brandList?.loading && !brandList?.error && brandList?.brands?.length > 0 && (
197
- <ScrollView
198
- style={{ maxHeight: 300, marginBottom: 10 }}
199
- showsVerticalScrollIndicator={true}
200
- nestedScrollEnabled={true}
209
+ {brandList?.brands.map((brand: any, i: number) => brand?.enabled && (
210
+ <BrandItem
211
+ key={i}
212
+ onPress={() => handleChangeBrandFilter(brand?.id)}
213
+ >
214
+ <OText
215
+ size={14}
216
+ weight={'400'}
217
+ lineHeight={24}
218
+ >
219
+ {brand?.name}
220
+ </OText>
221
+ {filters?.franchise_ids?.includes(brand?.id) && (
222
+ <AntDesignIcon
223
+ name='check'
224
+ color={theme.colors.success500}
225
+ size={16}
226
+ />
227
+ )}
228
+ </BrandItem>
229
+ ))}
230
+ </ScrollView>
231
+ )}
232
+ {!brandList?.loading && ((brandList?.brands?.filter((brand: any) => brand?.enabled))?.length === 0) && (
233
+ <OText size={14} weight='400'>{t('NO_RESULTS_FOUND', 'Sorry, no results found')}</OText>
234
+ )}
235
+ </BrandContainer>
236
+ )}
237
+ {filterOptionsEnabled.includes('price_range') && (
238
+ <PriceFilterWrapper>
239
+ <OText
240
+ size={16}
241
+ weight='bold'
242
+ lineHeight={24}
243
+ style={{ marginBottom: 5 }}
201
244
  >
202
- {brandList?.brands.map((brand: any, i: number) => brand?.enabled && (
203
- <BrandItem
245
+ {t('PRICE_RANGE', 'Price range')}
246
+ </OText>
247
+ <View style={styles.priceContainer}>
248
+ {priceList.map((price: any, i: number) => (
249
+ <OButton
204
250
  key={i}
205
- onPress={() => handleChangeBrandFilter(brand?.id)}
206
- >
207
- <OText
208
- size={14}
209
- weight={'400'}
210
- lineHeight={24}
211
- >
212
- {brand?.name}
213
- </OText>
214
- {filters?.franchise_ids?.includes(brand?.id) && (
215
- <AntDesignIcon
216
- name='check'
217
- color={theme.colors.success500}
218
- size={16}
219
- />
220
- )}
221
- </BrandItem>
251
+ bgColor={(filters?.price_level === price?.level) ? theme.colors.primary : theme.colors.backgroundGray200}
252
+ onClick={() => handleChangePriceRange(price?.level)}
253
+ text={`${price.content} ${(filters?.price_level === price?.level) ? ' X' : ''}`}
254
+ style={styles.priceItem}
255
+ textStyle={{ fontSize: 10, color: (filters?.price_level === price?.level) ? theme.colors.white : theme.colors.textNormal }}
256
+ />
222
257
  ))}
223
- </ScrollView>
224
- )}
225
- {!brandList?.loading && ((brandList?.brands?.filter((brand: any) => brand?.enabled))?.length === 0) && (
226
- <OText size={14} weight='400'>{t('NO_RESULTS_FOUND', 'Sorry, no results found')}</OText>
227
- )}
228
- </BrandContainer>
229
- <PriceFilterWrapper>
230
- <OText
231
- size={16}
232
- weight='bold'
233
- lineHeight={24}
234
- style={{ marginBottom: 5 }}
235
- >
236
- {t('PRICE_RANGE', 'Price range')}
237
- </OText>
238
- <View style={styles.priceContainer}>
239
- {priceList.map((price: any, i: number) => (
240
- <OButton
241
- key={i}
242
- bgColor={(filters?.price_level === price?.level) ? theme.colors.primary : theme.colors.backgroundGray200}
243
- onClick={() => handleChangePriceRange(price?.level)}
244
- text={`${price.content} ${(filters?.price_level === price?.level) ? ' X' : ''}`}
245
- style={styles.priceItem}
246
- textStyle={{ fontSize: 10, color: (filters?.price_level === price?.level) ? theme.colors.backgroundLight : theme.colors.textNormal }}
247
- />
248
- ))}
249
- </View>
250
- </PriceFilterWrapper>
251
- {orderState?.options?.type === 1 && (
258
+ </View>
259
+ </PriceFilterWrapper>
260
+ )}
261
+ {orderState?.options?.type === 1 && filterOptionsEnabled.includes('max_delivery_fee') && (
252
262
  <MaxSectionItem
253
263
  filters={filters}
254
264
  title={t('MAX_DELIVERY_FEE', 'Max delivery fee')}
@@ -257,7 +267,7 @@ export const BusinessSearchFooter = (props: any) => {
257
267
  handleChangeFilters={handleChangeFilters}
258
268
  />
259
269
  )}
260
- {[1, 2].includes(orderState?.options?.type) && (
270
+ {[1, 2].includes(orderState?.options?.type) && filterOptionsEnabled.includes('max_delivery_time') && (
261
271
  <MaxSectionItem
262
272
  filters={filters}
263
273
  title={orderState?.options?.type === 1 ? t('MAX_DELIVERY_TIME', 'Max delivery time') : t('MAX_PICKUP_TIME', 'Max pickup time')}
@@ -266,14 +276,16 @@ export const BusinessSearchFooter = (props: any) => {
266
276
  handleChangeFilters={handleChangeFilters}
267
277
  />
268
278
  )}
269
- <MaxSectionItem
270
- filters={filters}
271
- title={t('MAX_DISTANCE', 'Max distance')}
272
- options={maxDistanceOptions}
273
- filter='max_distance'
274
- handleChangeFilters={handleChangeFilters}
275
- />
276
- {businessTypes?.length > 0 && (
279
+ {filterOptionsEnabled.includes('max_distance') && (
280
+ <MaxSectionItem
281
+ filters={filters}
282
+ title={t('MAX_DISTANCE', 'Max distance')}
283
+ options={maxDistanceOptions}
284
+ filter='max_distance'
285
+ handleChangeFilters={handleChangeFilters}
286
+ />
287
+ )}
288
+ {businessTypes?.length > 0 && filterOptionsEnabled.includes('business_categories') && (
277
289
  <TagsContainer>
278
290
  <OText weight='bold' mBottom={7} size={16}>{t('BUSINESS_CATEGORIES', 'Business categories')}</OText>
279
291
  <View style={styles.businessTypesContainer}>
@@ -284,7 +296,7 @@ export const BusinessSearchFooter = (props: any) => {
284
296
  onClick={() => handleChangeActiveBusinessType(type)}
285
297
  text={`${t(`BUSINESS_TYPE_${type.name.replace(/\s/g, '_').toUpperCase()}`, type.name)} ${filters?.business_types?.includes(type?.id) ? 'X' : ''}`}
286
298
  style={styles.categoryStyle}
287
- textStyle={{ fontSize: 10, color: (filters?.business_types?.includes(type?.id) || (type?.id === null && filters?.business_types?.length === 0)) ? '#fff' : theme.colors.textNormal }}
299
+ textStyle={{ fontSize: 10, color: (filters?.business_types?.includes(type?.id) || (type?.id === null && filters?.business_types?.length === 0)) ? theme.colors.white : theme.colors.textNormal }}
288
300
  />
289
301
  ))}
290
302
  </View>
@@ -296,7 +308,6 @@ export const BusinessSearchFooter = (props: any) => {
296
308
  <OButton
297
309
  text={t('APPLY', 'Apply')}
298
310
  parentStyle={styles.applyButton}
299
- textStyle={{ color: '#fff' }}
300
311
  onClick={() => handleApplyFilters()}
301
312
  />
302
313
  </View>
@@ -1,5 +1,5 @@
1
- import React, { useEffect, useState } from 'react'
2
- import { useLanguage } from 'ordering-components/native'
1
+ import React from 'react'
2
+ import { useLanguage, useConfig } from 'ordering-components/native'
3
3
  import { View, Platform, StyleSheet, Dimensions } from 'react-native'
4
4
  import { HeaderTitle, OButton, OText } from '../shared'
5
5
  import { SearchBar } from '../SearchBar';
@@ -20,6 +20,8 @@ export const BusinessSearchHeader = (props: any) => {
20
20
  } = props
21
21
  const theme = useTheme()
22
22
  const [, t] = useLanguage()
23
+ const [{ configs }] = useConfig()
24
+
23
25
  const noResults = (!businessesSearchList.loading && !businessesSearchList.lengthError && businessesSearchList?.businesses?.length === 0)
24
26
  const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
25
27
  const hideBrowse = theme?.bar_menu?.components?.browse?.hidden
@@ -47,13 +49,11 @@ export const BusinessSearchHeader = (props: any) => {
47
49
  borderWidth: 0,
48
50
  width: 26,
49
51
  height: 26,
50
- backgroundColor: '#FFF',
51
- borderColor: '#FFF',
52
- shadowColor: '#FFF',
53
52
  paddingLeft: 0,
54
53
  paddingRight: 0,
55
54
  marginTop: 50,
56
55
  }}
56
+ useArrow
57
57
  onClick={() => props.navigation.goBack()}
58
58
  icon={AntDesignIcon}
59
59
  iconProps={{
@@ -63,7 +63,9 @@ export const BusinessSearchHeader = (props: any) => {
63
63
  />
64
64
  )}
65
65
  <HeaderTitle ph={20} text={t('SEARCH', 'Search')} />
66
- <AntDesignIcon name='filter' size={18} style={{ marginLeft: 'auto', marginTop: Platform.OS === 'ios' ? 35 : 55, paddingHorizontal: 20 }} onPress={() => handleOpenfilters()} />
66
+ {configs?.filter_search_options?.value !== '' && (
67
+ <AntDesignIcon name='filter' size={18} style={{ marginLeft: 'auto', marginTop: Platform.OS === 'ios' ? 35 : 55, paddingHorizontal: 20 }} onPress={() => handleOpenfilters()} />
68
+ )}
67
69
  </View>
68
70
  <BContainer
69
71
  style={{ paddingHorizontal: 20 }}
@@ -230,7 +230,7 @@ export const BusinessListingSearchUI = (props: BusinessSearchParams) => {
230
230
  </BusinessInfoItem>
231
231
  <OButton
232
232
  onClick={() => onBusinessClick(business)}
233
- textStyle={{ color: theme.colors.primary, fontSize: 10 }}
233
+ textStyle={{ fontSize: 10 }}
234
234
  text={t('GO_TO_STORE', 'Go to store')}
235
235
  style={{
236
236
  borderRadius: 23,
@@ -238,7 +238,6 @@ export const BusinessListingSearchUI = (props: BusinessSearchParams) => {
238
238
  paddingRight: 10,
239
239
  height: 23,
240
240
  shadowOpacity: 0,
241
- backgroundColor: theme.colors.primaryContrast,
242
241
  borderWidth: 0
243
242
  }}
244
243
  />