ordering-ui-react-native 0.21.97 → 0.21.98-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 +6 -4
  5. package/src/components/VerifyPhone/styles.tsx +1 -2
  6. package/src/context/OfflineActions/index.tsx +236 -0
  7. package/src/types/index.tsx +3 -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 +74 -9
  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 +221 -0
  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 +267 -0
  41. package/themes/business/src/components/PrinterSettings/styles.tsx +30 -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/UserFormDetails/index.tsx +111 -107
  45. package/themes/business/src/components/UserProfileForm/index.tsx +43 -25
  46. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  47. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  48. package/themes/business/src/hooks/useLocation.tsx +2 -2
  49. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  50. package/themes/business/src/types/index.tsx +15 -5
  51. package/themes/business/src/utils/index.tsx +25 -1
  52. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  53. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  54. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  55. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  56. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  57. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  58. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  59. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  60. package/themes/original/index.tsx +11 -0
  61. package/themes/original/src/components/AddressForm/index.tsx +32 -17
  62. package/themes/original/src/components/AddressList/index.tsx +8 -7
  63. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  64. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  65. package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
  66. package/themes/original/src/components/BusinessController/index.tsx +5 -5
  67. package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
  68. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
  69. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
  70. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  71. package/themes/original/src/components/BusinessPreorder/index.tsx +20 -15
  72. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  73. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  74. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  75. package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
  76. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  77. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  78. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +1 -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 +38 -14
  82. package/themes/original/src/components/CartContent/index.tsx +2 -4
  83. package/themes/original/src/components/Checkout/index.tsx +102 -58
  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 +29 -17
  103. package/themes/original/src/components/MomentOption/index.tsx +13 -2
  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 +42 -19
  114. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  115. package/themes/original/src/components/OrderProgress/index.tsx +14 -7
  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 +14 -9
  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 -60
  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 +3 -2
  150. package/themes/original/src/components/UserFormDetails/index.tsx +154 -130
  151. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  152. package/themes/original/src/components/UserVerification/index.tsx +2 -2
  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
@@ -19,6 +19,7 @@ import { Favorite } from './src/components/Favorite';
19
19
  import { FavoriteList } from './src/components/FavoriteList';
20
20
  import { FloatingButton } from './src/components/FloatingButton';
21
21
  import { ForgotPasswordForm } from './src/components/ForgotPasswordForm';
22
+ import { GPSButton } from './src/components/GPSButton';
22
23
  import { MomentOption } from './src/components/MomentOption';
23
24
  import { OrdersOption } from './src/components/OrdersOption';
24
25
  import { OrderDetails } from './src/components/OrderDetails';
@@ -85,6 +86,7 @@ import { VerifyPhone } from './src/components/VerifyPhone';
85
86
  import { GoogleLogin } from './src/components/GoogleLogin';
86
87
  import { PreviousOrders } from './src/components/PreviousOrders';
87
88
  import { PaymentOptionCash } from './src/components/PaymentOptionCash';
89
+ import { SendGiftCard } from './src/components/GiftCard/SendGiftCard';
88
90
  import { StripeElementsForm } from './src/components/StripeElementsForm';
89
91
  import { StripeCardsList } from './src/components/StripeCardsList';
90
92
  import { ProductIngredient } from './src/components/ProductIngredient';
@@ -106,6 +108,8 @@ import { OSBill, OSTable, OSCoupon, OSTotal, OSRow } from './src/components/Orde
106
108
  import { FormInput, FormSide, ButtonsWrapper, LoginWith, OTab, OTabs } from './src/components/LoginForm/styles';
107
109
  import { OSItem, OSItemContent, OSItemActions } from './src/components/PaymentOptionStripe/styles';
108
110
 
111
+ import { orderTypeList, getTraduction, verifyDecimals, getOrderStatus, getOrderStatuPickUp } from './src/utils'
112
+
109
113
  import Alert from './src/providers/AlertProvider'
110
114
 
111
115
  import {
@@ -182,6 +186,7 @@ export {
182
186
  Checkout,
183
187
  Favorite,
184
188
  FavoriteList,
189
+ GPSButton,
185
190
  ForgotPasswordForm,
186
191
  MomentOption,
187
192
  OrdersOption,
@@ -256,6 +261,7 @@ export {
256
261
  ProductIngredient,
257
262
  ProductOption,
258
263
  ProductOptionSubOption,
264
+ SendGiftCard,
259
265
  Sessions,
260
266
  SingleProductReview,
261
267
  LogoutButton,
@@ -343,6 +349,11 @@ export {
343
349
  _setStoreData,
344
350
  _removeStoreData,
345
351
  _clearStoreData,
352
+ orderTypeList,
353
+ getTraduction,
354
+ verifyDecimals,
355
+ getOrderStatus,
356
+ getOrderStatuPickUp,
346
357
 
347
358
  // Date Picker
348
359
  DatePickerUI
@@ -66,7 +66,9 @@ const AddressFormUI = (props: AddressFormParams) => {
66
66
  isFromProductsList,
67
67
  hasAddressDefault,
68
68
  afterSignup,
69
- businessSlug
69
+ businessSlug,
70
+ isFromCheckout,
71
+ onNavigationRedirect
70
72
  } = props;
71
73
 
72
74
  const theme = useTheme();
@@ -132,6 +134,7 @@ const AddressFormUI = (props: AddressFormParams) => {
132
134
  const [configState] = useConfig();
133
135
  const [orderState] = useOrder();
134
136
  const { handleSubmit, errors, control, setValue } = useForm();
137
+ const [autoCompleteAddress, setAutoCompleteAddress] = useState(false)
135
138
 
136
139
  const [toggleMap, setToggleMap] = useState(false);
137
140
  const [alertState, setAlertState] = useState<{
@@ -172,6 +175,8 @@ const AddressFormUI = (props: AddressFormParams) => {
172
175
  const isHideMap = theme?.address?.components?.map?.hidden
173
176
  const isHideIcons = theme?.address?.components?.icons?.hidden
174
177
  const continueAsGuest = () => navigation.navigate(!!businessSlug ? 'Business' : 'BusinessList', { isGuestUser: true });
178
+ const unaddressedTypes = configState?.configs?.unaddressed_order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
179
+ const isAllowUnaddressOrderType = unaddressedTypes.includes(orderState?.options?.type)
175
180
  const goToBack = () => navigation?.canGoBack() && navigation.goBack();
176
181
 
177
182
  const getAddressFormatted = (address: any) => {
@@ -351,9 +356,6 @@ const AddressFormUI = (props: AddressFormParams) => {
351
356
  map_data: { library: 'google', place_id: data.place_id },
352
357
  zip_code: data?.zip_code || null,
353
358
  };
354
- if (googleInput?.current) {
355
- googleInput?.current?.setAddressText(addressSelected.address);
356
- }
357
359
  updateChanges(addressSelected);
358
360
  };
359
361
 
@@ -371,6 +373,10 @@ const AddressFormUI = (props: AddressFormParams) => {
371
373
  setToggleMap(!toggleMap);
372
374
  };
373
375
 
376
+ const showFieldWithTheme = (name) => {
377
+ return !theme?.address?.components?.[name]?.hidden
378
+ }
379
+
374
380
  useEffect(() => {
375
381
  if (
376
382
  orderState.loading &&
@@ -379,9 +385,11 @@ const AddressFormUI = (props: AddressFormParams) => {
379
385
  auth &&
380
386
  !afterSignup
381
387
  ) {
382
- !isFromProductsList
383
- ? navigation.navigate('BottomTab')
384
- : navigation.navigate('Business');
388
+ isFromCheckout
389
+ ? navigation.goBack()
390
+ : !isFromProductsList
391
+ ? navigation.navigate('BottomTab')
392
+ : navigation.navigate('Business');
385
393
  }
386
394
  }, [orderState?.options?.address]);
387
395
 
@@ -520,6 +528,12 @@ const AddressFormUI = (props: AddressFormParams) => {
520
528
  setIsSignUpEffect(true);
521
529
  }, [orderState.loading]);
522
530
 
531
+ useEffect(() => {
532
+ if (isAllowUnaddressOrderType) {
533
+ onNavigationRedirect && onNavigationRedirect(!!businessSlug ? 'Business' : 'BusinessList')
534
+ }
535
+ }, [isAllowUnaddressOrderType])
536
+
523
537
  return (
524
538
  <ScrollView
525
539
  keyboardShouldPersistTaps='always'
@@ -565,6 +579,7 @@ const AddressFormUI = (props: AddressFormParams) => {
565
579
  placeholder={t('ADD_ADDRESS', 'Add a address')}
566
580
  onPress={(data, details: any) => {
567
581
  handleChangeAddress(data, details);
582
+ setAutoCompleteAddress(true);
568
583
  }}
569
584
  query={{
570
585
  key: googleMapsApiKey,
@@ -579,6 +594,7 @@ const AddressFormUI = (props: AddressFormParams) => {
579
594
  target: { name: 'address', value: text },
580
595
  });
581
596
  setValue('address', text);
597
+ setAutoCompleteAddress(true)
582
598
  }
583
599
  setIsFirstTime(false);
584
600
  setAddressEditing(text.length == 0);
@@ -666,13 +682,15 @@ const AddressFormUI = (props: AddressFormParams) => {
666
682
  setSaveLocation={setSaveMapLocation}
667
683
  handleToggleMap={handleToggleMap}
668
684
  isIntGeoCoder
685
+ setAutoCompleteAddress={setAutoCompleteAddress}
686
+ autoCompleteAddress={autoCompleteAddress}
669
687
  />
670
688
  </GoogleMapContainer>
671
689
  </View>
672
690
  )}
673
691
 
674
692
  <View style={{ flexDirection: 'row', flexBasis: '50%' }}>
675
- {showField && showField('internal_number') && (
693
+ {((isRequiredField && isRequiredField('internal_number')) || showFieldWithTheme('internal_number')) && (
676
694
  <Controller
677
695
  control={control}
678
696
  name="internal_number"
@@ -708,7 +726,7 @@ const AddressFormUI = (props: AddressFormParams) => {
708
726
  isFocusHighlight
709
727
  style={{
710
728
  ...styles.inputsStyle,
711
- marginRight: showField('internal_number') && showField('zipcode') ? 24 : 0
729
+ marginRight: showField?.('internal_number') && showField?.('zipcode') ? 24 : 0
712
730
  }}
713
731
  forwardRef={internalNumberRef}
714
732
  returnKeyType="next"
@@ -719,7 +737,7 @@ const AddressFormUI = (props: AddressFormParams) => {
719
737
  />
720
738
  )}
721
739
 
722
- {showField && showField('zipcode') && (
740
+ {((isRequiredField && isRequiredField('zipcode')) || showFieldWithTheme('zipcode')) && (
723
741
  <Controller
724
742
  control={control}
725
743
  name="zipcode"
@@ -764,7 +782,7 @@ const AddressFormUI = (props: AddressFormParams) => {
764
782
  )}
765
783
  </View>
766
784
 
767
- {showField && showField('address_notes') && (
785
+ {((isRequiredField && isRequiredField('address_notes')) || showFieldWithTheme('address_notes')) && (
768
786
  <Controller
769
787
  control={control}
770
788
  name="address_notes"
@@ -845,9 +863,6 @@ const AddressFormUI = (props: AddressFormParams) => {
845
863
  : t('LOADING', 'Loading')
846
864
  }
847
865
  onClick={handleSubmit(onSubmit)}
848
- bgColor={theme.colors.primary}
849
- borderColor={theme.colors.primary}
850
- textStyle={{ color: theme.colors.white }}
851
866
  isDisabled={formState.loading}
852
867
  style={{ borderRadius: 7.6, shadowOpacity: 0 }}
853
868
  showNextIcon
@@ -855,8 +870,9 @@ const AddressFormUI = (props: AddressFormParams) => {
855
870
  ) : (
856
871
  <OButton
857
872
  text={t('CANCEL', 'Cancel')}
858
- bgColor={theme.colors.white}
859
- borderColor={theme.colors.primary}
873
+ bgColor={theme.colors.secundary}
874
+ borderColor={theme.colors.secundary}
875
+ textStyle={{ color: theme.colors.textNormal }}
860
876
  style={{ borderRadius: 7.6, borderWidth: 1, shadowOpacity: 0 }}
861
877
  onClick={() => navigation?.canGoBack() && navigation.goBack()}
862
878
  />
@@ -882,7 +898,6 @@ const AddressFormUI = (props: AddressFormParams) => {
882
898
  )}
883
899
  <OButton
884
900
  text={t('SAVE', 'Save')}
885
- textStyle={{ color: theme.colors.white }}
886
901
  imgRightSrc={null}
887
902
  style={{ marginHorizontal: 30, marginBottom: 10 }}
888
903
  onClick={() => setSaveMapLocation(true)}
@@ -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,
@@ -311,6 +313,10 @@ const BusinessPreorderUI = (props: BusinessPreorderParams) => {
311
313
  }
312
314
  }, [dateSelected])
313
315
 
316
+ useEffect(() => {
317
+ setLocalMoment(moment, t)
318
+ }, [])
319
+
314
320
  useFocusEffect(
315
321
  React.useCallback(() => {
316
322
  handleAsap && handleAsap()
@@ -527,7 +533,6 @@ const BusinessPreorderUI = (props: BusinessPreorderParams) => {
527
533
  )}
528
534
  <OButton
529
535
  text={t('GO_TO_MENU', 'Go to menu')}
530
- textStyle={{ color: 'white' }}
531
536
  style={{ borderRadius: 7.6, marginBottom: 20, marginTop: 30 }}
532
537
  onClick={() => handleClickBusiness()}
533
538
  isDisabled={isAsap || !(dateSelected && timeSelected)}
@@ -553,21 +558,21 @@ export const BusinessPreorder = (props: any) => {
553
558
  currentDate.setMinutes(59)
554
559
 
555
560
  const cateringTypeString = orderState?.options?.type === 7
556
- ? 'catering_delivery'
557
- : orderState?.options?.type === 8
558
- ? 'catering_pickup'
559
- : null
561
+ ? 'catering_delivery'
562
+ : orderState?.options?.type === 8
563
+ ? 'catering_pickup'
564
+ : null
560
565
 
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'))
566
+ const splitCateringValue = (configName: string) =>
567
+ Object.values(props?.business?.configs || {})
568
+ ?.find(config => config?.key === configName)
569
+ ?.value?.split('|')
570
+ ?.find(val => val.includes(cateringTypeString || ''))?.split(',')[1]
571
+ const preorderSlotInterval = parseInt(splitCateringValue('preorder_slot_interval'))
572
+ const preorderLeadTime = parseInt(splitCateringValue('preorder_lead_time'))
573
+ const preorderTimeRange = parseInt(splitCateringValue('preorder_time_range'))
574
+ const preorderMaximumDays = parseInt(splitCateringValue('preorder_maximum_days'))
575
+ const preorderMinimumDays = parseInt(splitCateringValue('preorder_minimum_days'))
571
576
 
572
577
  const businessPreorderProps = {
573
578
  ...props,