ordering-ui-react-native 0.22.2 → 0.22.3-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 (161) 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/StripeMethodForm/index.tsx +4 -2
  5. package/src/components/VerifyPhone/styles.tsx +1 -2
  6. package/src/context/OfflineActions/index.tsx +236 -0
  7. package/src/types/index.tsx +2 -1
  8. package/themes/business/index.tsx +2 -0
  9. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  10. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  11. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  12. package/themes/business/src/components/BusinessProductList/index.tsx +2 -1
  13. package/themes/business/src/components/Chat/index.tsx +15 -3
  14. package/themes/business/src/components/DriverMap/index.tsx +49 -27
  15. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  16. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  17. package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
  18. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  19. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  20. package/themes/business/src/components/MapView/index.tsx +36 -17
  21. package/themes/business/src/components/NewOrderNotification/index.tsx +40 -27
  22. package/themes/business/src/components/OrderDetails/Business.tsx +54 -37
  23. package/themes/business/src/components/OrderDetails/Delivery.tsx +138 -55
  24. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +125 -43
  25. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +62 -24
  26. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  27. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +138 -64
  28. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  29. package/themes/business/src/components/OrderSummary/index.tsx +210 -65
  30. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  31. package/themes/business/src/components/OrdersOption/index.tsx +217 -156
  32. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  33. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +39 -16
  35. package/themes/business/src/components/PreviousOrders/index.tsx +76 -66
  36. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  37. package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
  38. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  39. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  40. package/themes/business/src/components/PrinterSettings/index.tsx +173 -154
  41. package/themes/business/src/components/PrinterSettings/styles.tsx +20 -0
  42. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  43. package/themes/business/src/components/StoresList/index.tsx +2 -2
  44. package/themes/business/src/components/UserProfileForm/index.tsx +16 -17
  45. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  46. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  47. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  48. package/themes/business/src/types/index.tsx +14 -5
  49. package/themes/business/src/utils/index.tsx +25 -1
  50. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  51. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  52. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  53. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  54. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  55. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  56. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  57. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  58. package/themes/original/index.tsx +11 -0
  59. package/themes/original/src/components/AddressForm/index.tsx +32 -17
  60. package/themes/original/src/components/AddressList/index.tsx +8 -7
  61. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  62. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  63. package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
  64. package/themes/original/src/components/BusinessController/index.tsx +5 -5
  65. package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
  66. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
  67. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
  68. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  69. package/themes/original/src/components/BusinessPreorder/index.tsx +44 -32
  70. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  71. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  72. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  73. package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
  74. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  75. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  76. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +1 -1
  77. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  78. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  79. package/themes/original/src/components/Cart/index.tsx +38 -14
  80. package/themes/original/src/components/CartContent/index.tsx +2 -4
  81. package/themes/original/src/components/Checkout/index.tsx +112 -58
  82. package/themes/original/src/components/CitiesControl/index.tsx +0 -3
  83. package/themes/original/src/components/CouponControl/index.tsx +1 -3
  84. package/themes/original/src/components/DriverTips/index.tsx +1 -3
  85. package/themes/original/src/components/Favorite/index.tsx +1 -5
  86. package/themes/original/src/components/FavoriteList/index.tsx +0 -1
  87. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
  88. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  89. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  90. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  91. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  92. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
  93. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  94. package/themes/original/src/components/Help/index.tsx +2 -0
  95. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  96. package/themes/original/src/components/Home/index.tsx +3 -11
  97. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  98. package/themes/original/src/components/LoginForm/index.tsx +4 -7
  99. package/themes/original/src/components/MessageListing/index.tsx +2 -1
  100. package/themes/original/src/components/Messages/index.tsx +29 -17
  101. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  102. package/themes/original/src/components/MomentOption/index.tsx +79 -56
  103. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  104. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  105. package/themes/original/src/components/MultiCheckout/index.tsx +55 -27
  106. package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -0
  107. package/themes/original/src/components/MyOrders/index.tsx +2 -2
  108. package/themes/original/src/components/NavBar/index.tsx +7 -4
  109. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  110. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  111. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  112. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +13 -10
  113. package/themes/original/src/components/OrderDetails/index.tsx +44 -21
  114. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  115. package/themes/original/src/components/OrderProgress/index.tsx +5 -4
  116. package/themes/original/src/components/OrderSummary/index.tsx +29 -10
  117. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  118. package/themes/original/src/components/OrdersOption/index.tsx +3 -6
  119. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  120. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  121. package/themes/original/src/components/PaymentOptions/index.tsx +10 -8
  122. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  123. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  124. package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
  125. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  126. package/themes/original/src/components/ProductItemAccordion/index.tsx +51 -44
  127. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  128. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  129. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  130. package/themes/original/src/components/Promotions/index.tsx +6 -9
  131. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  132. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  133. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  134. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  135. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  136. package/themes/original/src/components/Sessions/index.tsx +3 -3
  137. package/themes/original/src/components/SignupForm/index.tsx +86 -78
  138. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
  139. package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
  140. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  141. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  142. package/themes/original/src/components/StripeCardsList/index.tsx +10 -3
  143. package/themes/original/src/components/StripeElementsForm/index.tsx +76 -62
  144. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  145. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  146. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  147. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  148. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  149. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  150. package/themes/original/src/components/UserFormDetails/index.tsx +159 -133
  151. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  152. package/themes/original/src/components/UserVerification/index.tsx +14 -4
  153. package/themes/original/src/components/Wallets/index.tsx +6 -3
  154. package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
  155. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  156. package/themes/original/src/components/shared/OButton.tsx +5 -4
  157. package/themes/original/src/components/shared/OInput.tsx +4 -8
  158. package/themes/original/src/components/shared/OModal.tsx +7 -2
  159. package/themes/original/src/types/index.tsx +5 -1
  160. package/themes/original/src/utils/index.tsx +30 -1
  161. 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
  <>
@@ -35,9 +35,9 @@ import FastImage from 'react-native-fast-image'
35
35
  import { LottieAnimation } from '../LottieAnimation';
36
36
  import { CardAnimation } from '../shared/CardAnimation';
37
37
 
38
- function BusinessControllerPropsAreEqual (prevProps: any, nextProps: any) {
38
+ function BusinessControllerPropsAreEqual(prevProps: any, nextProps: any) {
39
39
  return JSON.stringify(prevProps.business) === JSON.stringify(nextProps.business) &&
40
- prevProps.isBusinessOpen === nextProps.isBusinessOpen
40
+ prevProps.isBusinessOpen === nextProps.isBusinessOpen
41
41
  }
42
42
 
43
43
  export const BusinessControllerUI = React.memo((props: BusinessControllerParams) => {
@@ -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
- >{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
  )}
@@ -243,7 +243,7 @@ export const BusinessSearchFooter = (props: any) => {
243
243
  onClick={() => handleChangePriceRange(price?.level)}
244
244
  text={`${price.content} ${(filters?.price_level === price?.level) ? ' X' : ''}`}
245
245
  style={styles.priceItem}
246
- textStyle={{ fontSize: 10, color: (filters?.price_level === price?.level) ? theme.colors.backgroundLight : theme.colors.textNormal }}
246
+ textStyle={{ fontSize: 10, color: (filters?.price_level === price?.level) ? theme.colors.white : theme.colors.textNormal }}
247
247
  />
248
248
  ))}
249
249
  </View>
@@ -284,7 +284,7 @@ export const BusinessSearchFooter = (props: any) => {
284
284
  onClick={() => handleChangeActiveBusinessType(type)}
285
285
  text={`${t(`BUSINESS_TYPE_${type.name.replace(/\s/g, '_').toUpperCase()}`, type.name)} ${filters?.business_types?.includes(type?.id) ? 'X' : ''}`}
286
286
  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 }}
287
+ 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
288
  />
289
289
  ))}
290
290
  </View>
@@ -296,7 +296,6 @@ export const BusinessSearchFooter = (props: any) => {
296
296
  <OButton
297
297
  text={t('APPLY', 'Apply')}
298
298
  parentStyle={styles.applyButton}
299
- textStyle={{ color: '#fff' }}
300
299
  onClick={() => handleApplyFilters()}
301
300
  />
302
301
  </View>
@@ -47,13 +47,11 @@ export const BusinessSearchHeader = (props: any) => {
47
47
  borderWidth: 0,
48
48
  width: 26,
49
49
  height: 26,
50
- backgroundColor: '#FFF',
51
- borderColor: '#FFF',
52
- shadowColor: '#FFF',
53
50
  paddingLeft: 0,
54
51
  paddingRight: 0,
55
52
  marginTop: 50,
56
53
  }}
54
+ useArrow
57
55
  onClick={() => props.navigation.goBack()}
58
56
  icon={AntDesignIcon}
59
57
  iconProps={{
@@ -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
  />
@@ -11,6 +11,8 @@ import { BusinessMenuList } from '../BusinessMenuList'
11
11
  import Spinner from 'react-native-loading-spinner-overlay'
12
12
  import { BusinessPreorderParams } from '../../types'
13
13
  import moment from 'moment'
14
+ import { setLocalMoment } from '../../utils';
15
+
14
16
  import SelectDropdown from 'react-native-select-dropdown'
15
17
  import {
16
18
  PreOrderContainer,
@@ -41,7 +43,8 @@ const BusinessPreorderUI = (props: BusinessPreorderParams) => {
41
43
  getActualSchedule,
42
44
  isAsap,
43
45
  cateringPreorder,
44
- preorderLeadTime
46
+ preorderLeadTime,
47
+ preorderMaximumDays
45
48
  } = props
46
49
 
47
50
  const theme = useTheme()
@@ -261,14 +264,23 @@ const BusinessPreorderUI = (props: BusinessPreorderParams) => {
261
264
  if (cateringPreorder) {
262
265
  let _timeLists = []
263
266
  const schedule = business && getActualSchedule()
264
- if (!schedule && cateringPreorder && Object.keys(business)?.length > 0) {
267
+ if (!schedule && business) {
268
+ setTimeList([])
265
269
  return
266
270
  }
271
+
267
272
  _timeLists = hoursList
268
- .filter(hour => ((Object.keys(business || {})?.length === 0) || schedule?.lapses?.some((lapse: any) =>
269
- moment(dateSelected + ` ${hour.startTime}`) >= moment(dateSelected + ` ${lapse.open.hour}:${lapse.open.minute}`).add(preorderLeadTime, 'minutes') && moment(dateSelected + ` ${hour.endTime}`) <= moment(dateSelected + ` ${lapse.close.hour}:${lapse.close.minute}`))) &&
270
- moment(dateSelected + ` ${hour.startTime}`) < moment(dateSelected + ` ${hour.endTime}`) &&
271
- (moment().add(preorderLeadTime, 'minutes') < moment(dateSelected + ` ${hour.startTime}`) || !cateringPreorder))
273
+ .filter(hour => {
274
+ return (Object.keys(business || {})?.length === 0 || schedule?.lapses?.some((lapse: any) => {
275
+ const openHour = lapse.open.hour < 10 ? `0${lapse.open.hour}` : lapse.open.hour
276
+ const openMinute = lapse.open.minute < 10 ? `0${lapse.open.minute}` : lapse.open.minute
277
+ const closeHour = lapse.close.hour < 10 ? `0${lapse.close.hour}` : lapse.close.hour
278
+ const closeMinute = lapse.close.minute < 10 ? `0${lapse.close.minute}` : lapse.close.minute
279
+ return moment(dateSelected + ` ${hour.startTime}`) >= moment(dateSelected + ` ${openHour}:${openMinute}`).add(preorderLeadTime, 'minutes') && moment(dateSelected + ` ${hour.endTime}`) <= moment(dateSelected + ` ${closeHour}:${closeMinute}`)
280
+ })) &&
281
+ (moment(dateSelected + ` ${hour.startTime}`) < moment(dateSelected + ` ${hour.endTime}`)) &&
282
+ (moment().add(preorderLeadTime, 'minutes') < moment(dateSelected + ` ${hour.startTime}`) || !cateringPreorder)
283
+ })
272
284
  .map(hour => {
273
285
  return {
274
286
  value: hour.startTime,
@@ -296,7 +308,7 @@ const BusinessPreorderUI = (props: BusinessPreorderParams) => {
296
308
  const _times = getTimes(selectDate, selectedMenu)
297
309
  setTimeList(_times)
298
310
  }
299
- }, [selectDate, menu, business, cateringPreorder, hoursList, dateSelected])
311
+ }, [selectDate, menu, JSON.stringify(datesWhitelist), JSON.stringify(business), cateringPreorder, JSON.stringify(hoursList), dateSelected])
300
312
 
301
313
  useEffect(() => {
302
314
  if (selectedPreorderType === 0 && Object.keys(menu).length > 0) setMenu({})
@@ -311,6 +323,10 @@ const BusinessPreorderUI = (props: BusinessPreorderParams) => {
311
323
  }
312
324
  }, [dateSelected])
313
325
 
326
+ useEffect(() => {
327
+ setLocalMoment(moment, t)
328
+ }, [])
329
+
314
330
  useFocusEffect(
315
331
  React.useCallback(() => {
316
332
  handleAsap && handleAsap()
@@ -435,22 +451,18 @@ const BusinessPreorderUI = (props: BusinessPreorderParams) => {
435
451
  {selectDate && datesWhitelist[0]?.start !== null && (
436
452
  <CalendarStrip
437
453
  scrollable
438
- style={styles.calendar}
439
- calendarHeaderContainerStyle={styles.calendarHeaderContainer}
440
- calendarHeaderStyle={styles.calendarHeader}
441
- dateNumberStyle={styles.dateNumber}
442
- dateNameStyle={styles.dateName}
443
- iconContainer={{ flex: 0.1 }}
444
- highlightDateNameStyle={styles.highlightDateName}
445
- highlightDateNumberStyle={styles.highlightDateNumber}
446
- dayContainerStyle={{ height: '100%' }}
447
- highlightDateContainerStyle={{ height: '100%' }}
448
454
  calendarHeaderFormat='MMMM, YYYY'
449
455
  iconStyle={{ borderWidth: 1 }}
450
456
  selectedDate={selectDate}
451
457
  datesWhitelist={datesWhitelist}
458
+ highlightDateNameStyle={styles.highlightDateName}
459
+ highlightDateNumberStyle={styles.highlightDateNumber}
460
+ minDate={moment()}
461
+ maxDate={cateringPreorder ? moment().add(preorderMaximumDays, 'days') : undefined}
452
462
  disabledDateNameStyle={styles.disabledDateName}
453
463
  disabledDateNumberStyle={styles.disabledDateNumber}
464
+ dateNumberStyle={styles.dateNumber}
465
+ dateNameStyle={styles.dateName}
454
466
  disabledDateOpacity={0.6}
455
467
  onDateSelected={(date) => onSelectDate(date)}
456
468
  leftSelector={<LeftSelector />}
@@ -527,7 +539,6 @@ const BusinessPreorderUI = (props: BusinessPreorderParams) => {
527
539
  )}
528
540
  <OButton
529
541
  text={t('GO_TO_MENU', 'Go to menu')}
530
- textStyle={{ color: 'white' }}
531
542
  style={{ borderRadius: 7.6, marginBottom: 20, marginTop: 30 }}
532
543
  onClick={() => handleClickBusiness()}
533
544
  isDisabled={isAsap || !(dateSelected && timeSelected)}
@@ -553,21 +564,22 @@ export const BusinessPreorder = (props: any) => {
553
564
  currentDate.setMinutes(59)
554
565
 
555
566
  const cateringTypeString = orderState?.options?.type === 7
556
- ? 'catering_delivery'
557
- : orderState?.options?.type === 8
558
- ? 'catering_pickup'
559
- : null
567
+ ? 'catering_delivery'
568
+ : orderState?.options?.type === 8
569
+ ? 'catering_pickup'
570
+ : null
571
+
572
+ const splitCateringValue = (configName: string) =>
573
+ Object.values(props?.business?.configs || {})
574
+ ?.find((config : any) => config?.key === configName)
575
+ ?.value?.split('|')
576
+ ?.find((val : any) => val.includes(cateringTypeString || ''))?.split(',')[1]
560
577
 
561
- const splitCateringValue = (configName : string) =>
562
- Object.values(props?.business?.configs || {})
563
- ?.find(config => config?.key === configName)
564
- ?.value?.split('|')
565
- ?.find(val => val.includes(cateringTypeString || ''))?.split(',')[1]
566
- const preorderSlotInterval = parseInt(splitCateringValue('preorder_slot_interval'))
567
- const preorderLeadTime = parseInt(splitCateringValue('preorder_lead_time'))
568
- const preorderTimeRange = parseInt(splitCateringValue('preorder_time_range'))
569
- const preorderMaximumDays = parseInt(splitCateringValue('preorder_maximum_days'))
570
- const preorderMinimumDays = parseInt(splitCateringValue('preorder_minimum_days'))
578
+ const preorderSlotInterval = parseInt(splitCateringValue('preorder_slot_interval'))
579
+ const preorderLeadTime = parseInt(splitCateringValue('preorder_lead_time'))
580
+ const preorderTimeRange = parseInt(splitCateringValue('preorder_time_range'))
581
+ const preorderMaximumDays = parseInt(splitCateringValue('preorder_maximum_days'))
582
+ const preorderMinimumDays = parseInt(splitCateringValue('preorder_minimum_days'))
571
583
 
572
584
  const businessPreorderProps = {
573
585
  ...props,
@@ -1,87 +1,90 @@
1
1
  import React from 'react'
2
- import { useTheme } from 'styled-components/native'
3
2
  import { StyleSheet } from 'react-native'
4
- import { SubCategoriesContainer, ContainerButton } from './styles'
5
- import { OButton } from '../../shared'
6
3
  import { useLanguage } from 'ordering-components/native'
4
+ import FIcon from 'react-native-vector-icons/Feather'
5
+ import { SubCategoriesContainer, ContainerButton } from './styles'
6
+ import { OButton, OText } from '../../shared'
7
7
 
8
8
  function SubcategoriesComponentPropsAreEqual(prev: any, next: any) {
9
- return prev.subcategoriesSelected === next.subcategoriesSelected &&
10
- prev.category === next.category
9
+ return prev.subcategoriesSelected === next.subcategoriesSelected &&
10
+ prev.category === next.category
11
11
  }
12
12
 
13
13
  interface SubcategoriesComponentParams {
14
- subcategoriesSelected?: any,
15
- category?: any,
16
- onClickSubcategory: any
14
+ subcategoriesSelected?: any,
15
+ category?: any,
16
+ onClickSubcategory: any
17
17
  }
18
18
 
19
- const SubcategoriesComponent = (props : SubcategoriesComponentParams) => {
20
- const {
21
- subcategoriesSelected,
22
- category,
23
- onClickSubcategory
24
- } = props
19
+ const SubcategoriesComponent = (props: SubcategoriesComponentParams) => {
20
+ const {
21
+ subcategoriesSelected,
22
+ category,
23
+ onClickSubcategory
24
+ } = props
25
25
 
26
- const theme = useTheme()
27
- const [, t] = useLanguage()
28
- const allsubcategorySelected = !subcategoriesSelected?.some((subcategory: any) => category?.id === subcategory?.parent_category_id)
26
+ const [, t] = useLanguage()
27
+ const allsubcategorySelected = !subcategoriesSelected?.some((subcategory: any) => category?.id === subcategory?.parent_category_id)
29
28
 
30
- const bpStyles = StyleSheet.create({
31
- catWrap: { flexDirection: 'row', alignItems: 'center', marginBottom: 19 },
32
- catIcon: {
33
- borderRadius: 7.6,
34
- shadowColor: '#000000',
35
- shadowOpacity: 0.1,
36
- shadowOffset: { width: 0, height: 0 },
37
- shadowRadius: 1,
38
- marginEnd: 13,
39
- },
40
- categoryButtonStyle: {
41
- borderWidth: 0,
42
- marginLeft: 5,
43
- marginRight: 5,
44
- marginBottom: 10,
45
- height: 35,
46
- paddingLeft: 3,
47
- paddingRight: 3,
48
- }
49
- });
29
+ const bpStyles = StyleSheet.create({
30
+ categoryButtonStyle: {
31
+ borderWidth: 0,
32
+ marginRight: 5,
33
+ borderRadius: 8,
34
+ marginBottom: 5,
35
+ height: 35,
36
+ padding: 0,
37
+ paddingLeft: 3,
38
+ paddingRight: 3,
39
+ }
40
+ });
50
41
 
51
42
 
52
- return (
53
- <SubCategoriesContainer>
54
- <ContainerButton
55
- isSelected={allsubcategorySelected}
56
- >
57
- <OButton
58
- onClick={() => onClickSubcategory(null, category)}
59
- bgColor={allsubcategorySelected ? theme.colors.primary : theme.colors.backgroundGray}
60
- text={`${t('ALL', 'All')} ${allsubcategorySelected ? 'X' : ''}`}
61
- style={bpStyles.categoryButtonStyle}
62
- textStyle={{ color: allsubcategorySelected ? theme.colors.white : theme.colors.textNormal, fontSize: 12 }}
63
- />
64
- </ContainerButton>
65
- {category?.subcategories?.map((subcategory: any) => {
66
- const isSubcategorySelected = subcategoriesSelected?.find((_subcategory: any) => _subcategory?.id === subcategory?.id)
67
- return (
68
- <ContainerButton
69
- key={subcategory?.id}
70
- isSelected={isSubcategorySelected}
71
- >
72
- <OButton
73
- onClick={() => onClickSubcategory(subcategory, category)}
74
- bgColor={isSubcategorySelected ? theme.colors.primary : theme.colors.backgroundGray}
75
- text={`${subcategory?.name} ${isSubcategorySelected ? 'X' : ''}`}
76
- style={bpStyles.categoryButtonStyle}
77
- textStyle={{ color: isSubcategorySelected ? theme.colors.white : theme.colors.textNormal, fontSize: 12 }}
78
- />
79
- </ContainerButton>
80
- )
81
- }
82
- )}
83
- </SubCategoriesContainer>
84
- )
43
+ return (
44
+ <SubCategoriesContainer>
45
+ <ContainerButton
46
+ isSelected={allsubcategorySelected}
47
+ >
48
+ <OButton
49
+ onClick={() => onClickSubcategory(null, category)}
50
+ text={
51
+ allsubcategorySelected
52
+ ? <OText color='#FFF'>
53
+ {t('ALL', 'All')}{' '}
54
+ <FIcon name='x-circle' size={16} />
55
+ </OText>
56
+ : t('ALL', 'All')
57
+ }
58
+ style={bpStyles.categoryButtonStyle}
59
+ textStyle={{ fontSize: 12 }}
60
+ />
61
+ </ContainerButton>
62
+ {category?.subcategories?.map((subcategory: any) => {
63
+ const isSubcategorySelected = subcategoriesSelected?.find((_subcategory: any) => _subcategory?.id === subcategory?.id)
64
+ return (
65
+ <ContainerButton
66
+ key={subcategory?.id}
67
+ isSelected={isSubcategorySelected}
68
+ >
69
+ <OButton
70
+ onClick={() => onClickSubcategory(subcategory, category)}
71
+ text={
72
+ isSubcategorySelected
73
+ ? <OText color='#FFF'>
74
+ {subcategory?.name}{' '}
75
+ <FIcon name='x-circle' size={16} />
76
+ </OText>
77
+ : subcategory?.name
78
+ }
79
+ style={bpStyles.categoryButtonStyle}
80
+ textStyle={{ fontSize: 12 }}
81
+ />
82
+ </ContainerButton>
83
+ )
84
+ }
85
+ )}
86
+ </SubCategoriesContainer>
87
+ )
85
88
  }
86
89
 
87
90
  export const SubcategoriesComponentMemoized = React.memo(SubcategoriesComponent, SubcategoriesComponentPropsAreEqual)
@@ -65,11 +65,10 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
65
65
  return
66
66
  }
67
67
  const categoryFounded = subcategoriesSelected.find((_subcategory: any) => subCategory?.id === _subcategory?.id)
68
- if (categoryFounded) {
69
- setSubcategoriesSelected?.(subcategoriesSelected.filter((_subcategory: any) => subCategory?.id !== _subcategory?.id))
70
- } else {
71
- setSubcategoriesSelected?.([...subcategoriesSelected, subCategory])
72
- }
68
+ setSubcategoriesSelected?.(categoryFounded
69
+ ? subcategoriesSelected.filter((_subcategory: any) => subCategory?.id !== _subcategory?.id)
70
+ : [...subcategoriesSelected, subCategory]
71
+ )
73
72
  }
74
73
 
75
74
  return (
@@ -214,11 +213,11 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
214
213
  text={t('VIEW_MORE', 'View more')}
215
214
  parentStyle={{ padding: 0 }}
216
215
  onClick={() => setOpenDescription(category)}
217
- bgColor='transparent'
216
+ bgColor={theme.colors.white}
217
+ borderColor={theme.colors.primary}
218
218
  textStyle={{
219
219
  fontSize: 12,
220
220
  borderBottomWidth: 1,
221
- borderBottomColor: theme.colors.primary,
222
221
  color: theme.colors.primary
223
222
  }}
224
223
  />