ordering-ui-react-native 0.17.17 → 0.17.18-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 (209) hide show
  1. package/package.json +5 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/OrderCreating/index.tsx +1 -21
  5. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  6. package/src/components/StripeMethodForm/index.tsx +108 -77
  7. package/src/components/VerifyPhone/styles.tsx +1 -2
  8. package/src/components/shared/OToast.tsx +4 -4
  9. package/src/types/index.tsx +5 -0
  10. package/src/utils/index.tsx +7 -1
  11. package/themes/business/index.tsx +2 -0
  12. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  13. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  14. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  15. package/themes/business/src/components/Chat/index.tsx +118 -107
  16. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  17. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  18. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  19. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  20. package/themes/business/src/components/LoginForm/index.tsx +238 -80
  21. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  22. package/themes/business/src/components/MapView/index.tsx +10 -10
  23. package/themes/business/src/components/NewOrderNotification/index.tsx +43 -50
  24. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  25. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +90 -47
  26. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  27. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  28. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  29. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  30. package/themes/business/src/components/OrderSummary/index.tsx +113 -121
  31. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  32. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  33. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  34. package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
  35. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  36. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  37. package/themes/business/src/components/ReviewCustomer/index.tsx +41 -24
  38. package/themes/business/src/components/StoresList/index.tsx +2 -2
  39. package/themes/business/src/components/shared/OLink.tsx +33 -13
  40. package/themes/business/src/components/shared/OModal.tsx +16 -9
  41. package/themes/business/src/components/shared/OText.tsx +8 -2
  42. package/themes/business/src/types/index.tsx +32 -2
  43. package/themes/business/src/utils/index.tsx +44 -1
  44. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  45. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  46. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  47. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  48. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  49. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  50. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  51. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  52. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  53. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  54. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  55. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  56. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +3 -2
  57. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  58. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  59. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  60. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  61. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  62. package/themes/kiosk/src/types/index.d.ts +13 -0
  63. package/themes/kiosk/src/utils/index.tsx +15 -0
  64. package/themes/original/index.tsx +10 -2
  65. package/themes/original/src/components/AddressDetails/index.tsx +29 -11
  66. package/themes/original/src/components/AddressForm/index.tsx +41 -16
  67. package/themes/original/src/components/AddressList/index.tsx +26 -21
  68. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  69. package/themes/original/src/components/AnalyticsSegment/index.tsx +195 -12
  70. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  71. package/themes/original/src/components/BusinessBasicInformation/index.tsx +166 -89
  72. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -7
  73. package/themes/original/src/components/BusinessController/index.tsx +145 -68
  74. package/themes/original/src/components/BusinessController/styles.tsx +22 -9
  75. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  76. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  77. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  78. package/themes/original/src/components/BusinessItemAccordion/index.tsx +23 -22
  79. package/themes/original/src/components/BusinessListingSearch/index.tsx +350 -323
  80. package/themes/original/src/components/BusinessPreorder/index.tsx +97 -16
  81. package/themes/original/src/components/BusinessProductsList/index.tsx +20 -11
  82. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  83. package/themes/original/src/components/BusinessProductsListing/index.tsx +616 -495
  84. package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -9
  85. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  86. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  87. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +105 -78
  88. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  89. package/themes/original/src/components/BusinessesListing/index.tsx +5 -3
  90. package/themes/original/src/components/Cart/index.tsx +88 -43
  91. package/themes/original/src/components/CartContent/index.tsx +110 -19
  92. package/themes/original/src/components/CartContent/styles.tsx +15 -1
  93. package/themes/original/src/components/Checkout/index.tsx +323 -178
  94. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  95. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  96. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  97. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  98. package/themes/original/src/components/DriverTips/index.tsx +49 -34
  99. package/themes/original/src/components/Favorite/index.tsx +7 -4
  100. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  101. package/themes/original/src/components/FavoriteList/index.tsx +51 -80
  102. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  103. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  104. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  105. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  106. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  107. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  108. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  109. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +178 -0
  110. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  111. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  112. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  113. package/themes/original/src/components/Help/index.tsx +8 -8
  114. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  115. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  116. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  117. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  118. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  119. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  120. package/themes/original/src/components/Home/index.tsx +13 -4
  121. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  122. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  123. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  124. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  125. package/themes/original/src/components/LoginForm/index.tsx +48 -19
  126. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  127. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  128. package/themes/original/src/components/Messages/index.tsx +32 -10
  129. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  130. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  131. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +195 -116
  132. package/themes/original/src/components/MultiCheckout/index.tsx +262 -83
  133. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  134. package/themes/original/src/components/MultiOrdersDetails/index.tsx +67 -20
  135. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  136. package/themes/original/src/components/MyOrders/index.tsx +55 -51
  137. package/themes/original/src/components/NavBar/index.tsx +6 -11
  138. package/themes/original/src/components/Notifications/index.tsx +144 -0
  139. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  140. package/themes/original/src/components/OrderDetails/OrderEta.tsx +64 -0
  141. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +15 -3
  142. package/themes/original/src/components/OrderDetails/index.tsx +262 -347
  143. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  144. package/themes/original/src/components/OrderItAgain/index.tsx +47 -43
  145. package/themes/original/src/components/OrderProgress/index.tsx +74 -112
  146. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  147. package/themes/original/src/components/OrderSummary/index.tsx +67 -29
  148. package/themes/original/src/components/OrderTypeSelector/index.tsx +3 -2
  149. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
  150. package/themes/original/src/components/OrdersOption/index.tsx +96 -88
  151. package/themes/original/src/components/PageBanner/index.tsx +171 -0
  152. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  153. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  154. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  155. package/themes/original/src/components/PaymentOptions/index.tsx +34 -6
  156. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  157. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  158. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  159. package/themes/original/src/components/ProductForm/index.tsx +231 -253
  160. package/themes/original/src/components/ProductForm/styles.tsx +4 -7
  161. package/themes/original/src/components/ProductItemAccordion/index.tsx +197 -138
  162. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  163. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  164. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  165. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  166. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  167. package/themes/original/src/components/Promotions/index.tsx +234 -220
  168. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  169. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  170. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  171. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  172. package/themes/original/src/components/ReviewProducts/index.tsx +7 -4
  173. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  174. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  175. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  176. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  177. package/themes/original/src/components/ServiceForm/index.tsx +366 -288
  178. package/themes/original/src/components/Sessions/index.tsx +11 -8
  179. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  180. package/themes/original/src/components/SignupForm/index.tsx +82 -67
  181. package/themes/original/src/components/SingleOrderCard/index.tsx +148 -62
  182. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -9
  183. package/themes/original/src/components/SingleProductCard/index.tsx +99 -55
  184. package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
  185. package/themes/original/src/components/SingleProductReview/index.tsx +8 -2
  186. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  187. package/themes/original/src/components/StripeCardsList/index.tsx +9 -2
  188. package/themes/original/src/components/StripeElementsForm/index.tsx +28 -15
  189. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -218
  190. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  191. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  192. package/themes/original/src/components/UserFormDetails/index.tsx +53 -54
  193. package/themes/original/src/components/UserProfile/index.tsx +57 -41
  194. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  195. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  196. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  197. package/themes/original/src/components/Wallets/index.tsx +31 -17
  198. package/themes/original/src/components/Wallets/styles.tsx +2 -0
  199. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  200. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  201. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  202. package/themes/original/src/components/shared/OButton.tsx +6 -2
  203. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  204. package/themes/original/src/components/shared/OInput.tsx +10 -1
  205. package/themes/original/src/components/shared/OModal.tsx +3 -3
  206. package/themes/original/src/layouts/Container.tsx +13 -9
  207. package/themes/original/src/types/index.tsx +41 -10
  208. package/themes/original/src/utils/index.tsx +375 -58
  209. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -16,6 +16,8 @@ import {
16
16
  useToast,
17
17
  ToastType
18
18
  } from 'ordering-components/native';
19
+ import { DeviceOrientationMethods } from '../../../../../src/hooks/DeviceOrientation'
20
+
19
21
  import { GooglePlacesAutocomplete } from 'react-native-google-places-autocomplete';
20
22
  import Spinner from 'react-native-loading-spinner-overlay';
21
23
  import { useForm, Controller } from 'react-hook-form';
@@ -38,6 +40,8 @@ import {
38
40
  import { GPSButton } from '../GPSButton';
39
41
  import { ScrollView } from 'react-native-gesture-handler';
40
42
 
43
+ const { useDeviceOrientation } = DeviceOrientationMethods
44
+
41
45
  const inputNames = [
42
46
  { name: 'address', code: 'Address' },
43
47
  { name: 'internal_number', code: 'Internal number' },
@@ -62,9 +66,13 @@ const AddressFormUI = (props: AddressFormParams) => {
62
66
  isFromProductsList,
63
67
  hasAddressDefault,
64
68
  afterSignup,
69
+ businessSlug
65
70
  } = props;
66
71
 
67
72
  const theme = useTheme();
73
+ const [orientationState] = useDeviceOrientation();
74
+
75
+ const [autoCompleteInputFocused, setAutoCompleteInputFocused] = useState(false)
68
76
 
69
77
  const tagsName = [
70
78
  { icon: theme.images.general.tag_home, value: 'home' },
@@ -73,6 +81,8 @@ const AddressFormUI = (props: AddressFormParams) => {
73
81
  { icon: theme.images.general.tag_plus, value: 'other' },
74
82
  ];
75
83
 
84
+ const HEIGHT_SCREEN = orientationState?.dimensions?.height
85
+
76
86
  const styles = StyleSheet.create({
77
87
  iconContainer: {
78
88
  display: 'flex',
@@ -83,7 +93,6 @@ const AddressFormUI = (props: AddressFormParams) => {
83
93
  backgroundColor: theme.colors.clear
84
94
  },
85
95
  inputsStyle: {
86
- borderColor: theme.colors.border,
87
96
  borderRadius: 10,
88
97
  marginBottom: 20,
89
98
  height: 50,
@@ -92,7 +101,6 @@ const AddressFormUI = (props: AddressFormParams) => {
92
101
  flex: 1,
93
102
  },
94
103
  textAreaStyles: {
95
- borderColor: theme.colors.border,
96
104
  borderRadius: 10,
97
105
  marginBottom: 20,
98
106
  height: 104,
@@ -106,6 +114,12 @@ const AddressFormUI = (props: AddressFormParams) => {
106
114
  end: 0,
107
115
  top: 12,
108
116
  zIndex: 1002,
117
+ right: autoCompleteInputFocused && (
118
+ !!address?.address ||
119
+ !!formState.changes?.address ||
120
+ !!addressState.address.address
121
+ ) ? 30 : 15,
122
+ width: 16
109
123
  },
110
124
  wrapperNavbar: Platform.OS === 'ios'
111
125
  ? { paddingVertical: 0, paddingHorizontal: 40 }
@@ -154,8 +168,10 @@ const AddressFormUI = (props: AddressFormParams) => {
154
168
  'true';
155
169
  const maxLimitLocation =
156
170
  configState?.configs?.meters_to_change_address?.value;
157
-
158
- const continueAsGuest = () => navigation.navigate('BusinessList', { isGuestUser: true });
171
+ const countryCode = configState?.configs?.country_autocomplete?.value
172
+ const isHideMap = theme?.address?.components?.map?.hidden
173
+ const isHideIcons = theme?.address?.components?.icons?.hidden
174
+ const continueAsGuest = () => navigation.navigate(!!businessSlug ? 'Business' : 'BusinessList', { isGuestUser: true });
159
175
  const goToBack = () => navigation?.canGoBack() && navigation.goBack();
160
176
 
161
177
  const getAddressFormatted = (address: any) => {
@@ -357,7 +373,7 @@ const AddressFormUI = (props: AddressFormParams) => {
357
373
  if (
358
374
  orderState.loading &&
359
375
  !addressesList &&
360
- orderState.options.address &&
376
+ orderState?.options?.address &&
361
377
  auth &&
362
378
  !afterSignup
363
379
  ) {
@@ -365,7 +381,7 @@ const AddressFormUI = (props: AddressFormParams) => {
365
381
  ? navigation.navigate('BottomTab')
366
382
  : navigation.navigate('Business');
367
383
  }
368
- }, [orderState.options.address]);
384
+ }, [orderState?.options?.address]);
369
385
 
370
386
  useEffect(() => {
371
387
  if (alertState.open && alertState?.key !== 'ERROR_MAX_LIMIT_LOCATION') {
@@ -516,7 +532,7 @@ const AddressFormUI = (props: AddressFormParams) => {
516
532
  />
517
533
  </View>
518
534
  <TouchableWithoutFeedback onPress={Keyboard.dismiss}>
519
- <AddressFormContainer style={{ height: 600, overflow: 'scroll' }}>
535
+ <AddressFormContainer style={{ height: HEIGHT_SCREEN * .78, overflow: 'scroll' }}>
520
536
  <View>
521
537
  <FormInput>
522
538
  <AutocompleteInput>
@@ -544,7 +560,10 @@ const AddressFormUI = (props: AddressFormParams) => {
544
560
  onPress={(data, details: any) => {
545
561
  handleChangeAddress(data, details);
546
562
  }}
547
- query={{ key: googleMapsApiKey }}
563
+ query={{
564
+ key: googleMapsApiKey,
565
+ components: countryCode && countryCode !== '*' ? `country:${countryCode}` : ''
566
+ }}
548
567
  fetchDetails
549
568
  ref={googleInput}
550
569
  textInputProps={{
@@ -563,6 +582,8 @@ const AddressFormUI = (props: AddressFormParams) => {
563
582
  autoCorrect: false,
564
583
  blurOnSubmit: false,
565
584
  returnKeyType: 'next',
585
+ onFocus: () => setAutoCompleteInputFocused(true),
586
+ onBlur: () => setAutoCompleteInputFocused(false)
566
587
  }}
567
588
  onFail={(error) =>
568
589
  setAlertState({
@@ -586,13 +607,14 @@ const AddressFormUI = (props: AddressFormParams) => {
586
607
  textInput: {
587
608
  borderWidth: 1,
588
609
  borderRadius: 7.6,
589
- borderColor: theme.colors.border,
610
+ borderColor: autoCompleteInputFocused ? theme.colors.primary : theme.colors.border,
590
611
  flexGrow: 1,
591
612
  fontSize: 15,
592
- paddingHorizontal: 16,
613
+ paddingLeft: 16,
614
+ paddingRight: 32,
593
615
  minHeight: 50,
594
616
  fontFamily: 'Poppins-Regular',
595
- marginBottom: 24,
617
+ marginBottom: 24
596
618
  },
597
619
  }}
598
620
  />
@@ -600,10 +622,10 @@ const AddressFormUI = (props: AddressFormParams) => {
600
622
  />
601
623
 
602
624
  {(
603
- (!isEditing && !isGuestUser && !formState.changes?.address) ||
604
- (isEditing && !isGuestUser && !formState.changes?.address && formState.changes?.address !== undefined)) ||
605
- (isGuestUser && !formState.changes?.address && formState.changes?.address !== undefined) &&
606
- (
625
+ ((!isEditing && !isGuestUser) ||
626
+ (isEditing && !isGuestUser)) ||
627
+ (isGuestUser)) &&
628
+ (
607
629
  <View style={styles.pinIcon}>
608
630
  <GPSButton
609
631
  apiKey={googleMapsApiKey}
@@ -617,7 +639,7 @@ const AddressFormUI = (props: AddressFormParams) => {
617
639
  IconButton={<OIcon src={theme.images.general.pin} width={16} />}
618
640
  />
619
641
  </View>
620
- )}
642
+ )}
621
643
  </AutocompleteInput>
622
644
 
623
645
  {(locationChange || formState.changes?.location) && (
@@ -675,6 +697,7 @@ const AddressFormUI = (props: AddressFormParams) => {
675
697
  addressState?.address?.internal_number ||
676
698
  ''
677
699
  }
700
+ isFocusHighlight
678
701
  style={{
679
702
  ...styles.inputsStyle,
680
703
  marginRight: showField('internal_number') && showField('zipcode') ? 24 : 0
@@ -721,6 +744,7 @@ const AddressFormUI = (props: AddressFormParams) => {
721
744
  addressState.address.zipcode ||
722
745
  ''
723
746
  }
747
+ isFocusHighlight
724
748
  style={styles.inputsStyle}
725
749
  forwardRef={zipCodeRef}
726
750
  returnKeyType="next"
@@ -766,6 +790,7 @@ const AddressFormUI = (props: AddressFormParams) => {
766
790
  ''
767
791
  }
768
792
  multiline
793
+ isFocusHighlight
769
794
  style={styles.textAreaStyles}
770
795
  returnKeyType="done"
771
796
  forwardRef={addressNotesRef}
@@ -1,9 +1,8 @@
1
1
  import React, { useEffect } from 'react'
2
2
  import { AddressList as AddressListController, useLanguage, useOrder, useSession } from 'ordering-components/native'
3
- import { AddressListContainer, AddressItem } from './styles'
3
+ import { AddressItem, Container } from './styles'
4
4
  import { Platform, RefreshControl, StyleSheet, View } from 'react-native'
5
5
  import { OButton, OText, OAlert, OModal, OIcon } from '../shared'
6
- import { Container } from '../../layouts/Container'
7
6
  import { AddressListParams } from '../../types'
8
7
  import { NotFoundSource } from '../NotFoundSource'
9
8
  import NavBar from '../NavBar'
@@ -40,9 +39,6 @@ const AddressListUI = (props: AddressListParams) => {
40
39
 
41
40
  const [isProfile, setIsProfile] = useState(isFromProfile || route?.params?.isFromProfile);
42
41
 
43
- const goToBack = () => navigation?.canGoBack() && navigation.goBack()
44
- const onNavigationRedirect = (route: string, params?: any) => navigation.navigate(route, params)
45
-
46
42
  const onNavigatorRedirect = () => {
47
43
  if (route && (isFromBusinesses || isGoBack)) {
48
44
  isGoBack ? goToBack() : onNavigationRedirect('BottomTab')
@@ -104,7 +100,6 @@ const AddressListUI = (props: AddressListParams) => {
104
100
  const handleSetAddress = (address: any) => {
105
101
  if (address.id === orderState?.options?.address_id) return
106
102
  handleSetDefault(address)
107
- onNavigatorRedirect()
108
103
  }
109
104
 
110
105
  const handleSaveAddress = (address: any) => {
@@ -133,13 +128,21 @@ const AddressListUI = (props: AddressListParams) => {
133
128
  }
134
129
  }
135
130
 
131
+ const goToBack = () => navigation?.canGoBack() && navigation.goBack()
132
+ const onNavigationRedirect = (route: string, params?: any) => navigation.navigate(route, params)
133
+
134
+ useEffect(() => {
135
+ if (orderState.loading && auth && orderState.options.address?.location) {
136
+ onNavigatorRedirect()
137
+ }
138
+ }, [orderState.options.address])
139
+
136
140
  useEffect(() => {
137
141
  console.log('From profile : ' + isProfile)
138
142
  }, [])
139
143
 
140
144
  return (
141
- <Container
142
- noPadding
145
+ <Container
143
146
  refreshControl={
144
147
  <RefreshControl
145
148
  refreshing={refreshing}
@@ -147,17 +150,18 @@ const AddressListUI = (props: AddressListParams) => {
147
150
  />
148
151
  }
149
152
  >
150
- {isProfile && (
151
- <NavBar
152
- title={t('SAVED_PLACES', 'My saved places')}
153
- titleAlign={'center'}
154
- onActionLeft={goToBack}
155
- showCall={false}
156
- style={{ paddingHorizontal: 40, paddingVertical: Platform.OS === 'ios' ? 0 : 20, marginTop: Platform.OS === 'ios' ? 0 : 30 }}
157
- />
158
- )}
159
153
  {(!addressList.loading || (isFromProductsList || isFromBusinesses || isFromProfile || isProfile)) && (
160
- <AddressListContainer>
154
+ <>
155
+ {isProfile && (
156
+ <NavBar
157
+ title={t('SAVED_PLACES', 'My saved places')}
158
+ titleAlign={'center'}
159
+ onActionLeft={goToBack}
160
+ showCall={false}
161
+ paddingTop={10}
162
+ btnStyle={{ paddingLeft: 0 }}
163
+ />
164
+ )}
161
165
  {
162
166
  route &&
163
167
  (
@@ -173,8 +177,8 @@ const AddressListUI = (props: AddressListParams) => {
173
177
  onActionLeft={() => goToBack()}
174
178
  showCall={false}
175
179
  btnStyle={{ paddingLeft: 0 }}
176
- paddingTop={0}
177
- style={{ marginTop: Platform.OS === 'ios' ? 0 : 40 }}
180
+ paddingTop={10}
181
+ style={{ marginTop: 0 }}
178
182
  titleWrapStyle={{ paddingHorizontal: 0 }}
179
183
  titleStyle={{ marginLeft: 0, marginRight: 0 }}
180
184
  />
@@ -323,7 +327,8 @@ const AddressListUI = (props: AddressListParams) => {
323
327
  />
324
328
  </>
325
329
  )}
326
- </AddressListContainer>
330
+ </>
331
+
327
332
  )}
328
333
  </Container>
329
334
  )
@@ -1,10 +1,12 @@
1
1
  import styled from 'styled-components/native'
2
2
 
3
- export const AddressListContainer = styled.View`
3
+ export const Container = styled.ScrollView`
4
+ position: relative;
4
5
  flex: 1;
5
6
  paddingLeft: 40px;
6
7
  paddingRight: 40px;
7
- paddingBottom: 20px;
8
+ margin-bottom: 40px;
9
+ padding-top: 10px;
8
10
  `
9
11
 
10
12
  export const AddressItem = styled.TouchableOpacity`
@@ -1,14 +1,49 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { createClient, AnalyticsProvider } from '@segment/analytics-react-native';
3
- import { useEvent, useConfig } from 'ordering-components/native';
2
+ import {
3
+ createClient,
4
+ // AnalyticsProvider
5
+ } from '@segment/analytics-react-native';
6
+ import { useEvent, useConfig, useLanguage } from 'ordering-components/native';
4
7
 
5
8
  export const AnalyticsSegment = (props: any) => {
6
9
  const { children } = props
7
10
 
8
11
  const [events] = useEvent()
9
12
  const [configState] = useConfig()
13
+ const [, t] = useLanguage()
10
14
  const [segmentClient, setSegmentClient] = useState<any>({})
11
15
 
16
+ const handleProductsSearched = (query: any) => {
17
+ segmentClient.track('Products Searched', {
18
+ query: query
19
+ })
20
+ }
21
+
22
+ const handleProductListViewed = (category: any) => {
23
+ segmentClient.track('Product List Viewed', {
24
+ business_id: category?.business_id,
25
+ category_id: category?.id,
26
+ category: category?.name,
27
+ products: category?.products
28
+ })
29
+ }
30
+
31
+ const handlePromotionViewed = (promotion: any) => {
32
+ segmentClient.track('Promotion Viewed', {
33
+ promotion_id: (promotion?.id || '').toString(),
34
+ name: promotion.name,
35
+ position: promotion.position
36
+ })
37
+ }
38
+
39
+ const handlePromotionClicked = (promotion: any) => {
40
+ segmentClient.track('Promotion Clicked', {
41
+ promotion_id: (promotion?.id || '').toString(),
42
+ name: promotion.name,
43
+ position: promotion.position
44
+ })
45
+ }
46
+
12
47
  const handleClickProduct = (product: any) => {
13
48
  segmentClient.track('Product Clicked', {
14
49
  id: product.id,
@@ -18,6 +53,15 @@ export const AnalyticsSegment = (props: any) => {
18
53
  })
19
54
  }
20
55
 
56
+ const handleProductViewed = (product: any) => {
57
+ segmentClient.track('Product Viewed', {
58
+ id: product.id,
59
+ name: product.name,
60
+ category: product.category_id,
61
+ price: product.price
62
+ })
63
+ }
64
+
21
65
  const handleProductAdded = (product: any) => {
22
66
  segmentClient.track('Product Added', {
23
67
  id: product.id,
@@ -38,6 +82,23 @@ export const AnalyticsSegment = (props: any) => {
38
82
  })
39
83
  }
40
84
 
85
+ const handleCartViewed = (cart: any) => {
86
+ segmentClient.track('Cart Viewed', {
87
+ id: cart.uuid,
88
+ products: cart?.products
89
+ })
90
+ }
91
+
92
+ const handleCheckoutStarted = (cart: any) => {
93
+ segmentClient.track('Checkout Started', {
94
+ cart_id: cart?.uuid,
95
+ affiliation: cart?.business?.name,
96
+ revenue: cart?.total,
97
+ tax: cart?.tax_total,
98
+ shipping: cart?.delivery_zone_price
99
+ })
100
+ }
101
+
41
102
  const handleOrderPlaced = (order: any) => {
42
103
  segmentClient.track('Order Placed', {
43
104
  id: order.id,
@@ -65,6 +126,35 @@ export const AnalyticsSegment = (props: any) => {
65
126
  tax: order.tax_total,
66
127
  shipping: order.delivery_zone_price
67
128
  })
129
+
130
+ if (order?.history?.length) {
131
+ const lasthistory = order.history[order.history.length - 1]
132
+ if (lasthistory?.data) {
133
+ lasthistory.data.forEach(item => {
134
+ if (item.attribute === 'status') {
135
+ if (item.new === 15) {
136
+ segmentClient.track('Order Completed', {
137
+ id: order.id,
138
+ affiliation: order.business?.name,
139
+ revenue: order.total,
140
+ tax: order.tax_total,
141
+ shipping: order.delivery_zone_price
142
+ })
143
+ }
144
+ const orderCancelled = [2, 5, 6, 10, 12, 16, 17]
145
+ if (orderCancelled.includes(item.new)) {
146
+ segmentClient.track('Order Cancelled', {
147
+ id: order.id,
148
+ affiliation: order.business?.name,
149
+ revenue: order.total,
150
+ tax: order.tax_total,
151
+ shipping: order.delivery_zone_price
152
+ })
153
+ }
154
+ }
155
+ })
156
+ }
157
+ }
68
158
  }
69
159
 
70
160
  const handleAddOrder = (order: any) => {
@@ -77,6 +167,51 @@ export const AnalyticsSegment = (props: any) => {
77
167
  })
78
168
  }
79
169
 
170
+ const handleCouponEntered = (cart: any) => {
171
+ segmentClient.track('Coupon Entered', {
172
+ cart_id: cart.uuid,
173
+ coupon: cart.coupon
174
+ })
175
+ }
176
+
177
+ const handleCouponApplied = (cart: any) => {
178
+ const coupon: any = cart?.offers?.find(offer => offer.type === 2)
179
+ if (coupon) {
180
+ segmentClient.track('Coupon Applied', {
181
+ cart_id: cart.uuid,
182
+ coupon_id: coupon.id,
183
+ coupon_name: coupon?.name,
184
+ discount: coupon?.summary?.discount
185
+ })
186
+ }
187
+ }
188
+
189
+ const handleCouponDenied = (coupon: any) => {
190
+ segmentClient.track('Coupon Denied', {
191
+ business_id: coupon.business_id,
192
+ coupon: coupon.coupon,
193
+ user_id: coupon?.user_id,
194
+ reason: typeof coupon.reason === 'string' ? t(coupon.reason) : t(coupon.reason[0])
195
+ })
196
+ }
197
+
198
+ const handleCouponRemoved = (coupon: any) => {
199
+ segmentClient.track('Coupon Removed', {
200
+ business_id: coupon.business_id,
201
+ coupon_id: coupon.offer_id,
202
+ })
203
+ }
204
+
205
+ const handleProductReviewed = (products: any) => {
206
+ products.forEach((product: any) => {
207
+ segmentClient.track('Product Reviewed', {
208
+ product_id: product.product_id,
209
+ review_body: product.comment,
210
+ rating: product.qualification
211
+ })
212
+ })
213
+ }
214
+
80
215
  const handleLogin = (data: any) => {
81
216
  segmentClient.identify(data.id, {
82
217
  email: data.email,
@@ -84,25 +219,74 @@ export const AnalyticsSegment = (props: any) => {
84
219
  })
85
220
  }
86
221
 
222
+ const handleProductAddedToWishlist = (product: any) => {
223
+ segmentClient.track('Product Added to Wishlist', product)
224
+ }
225
+
226
+ const handleProductRemovedFromWishlist = (product: any) => {
227
+ segmentClient.track('Product Removed from Wishlist', product)
228
+ }
229
+
230
+ const handleWishlistProductAddedToCart = (product: any, result: any) => {
231
+ segmentClient.track('Wishlist Product Added to Cart', {
232
+ cart_id: result.uuid,
233
+ product_id: product.id,
234
+ name: product.name,
235
+ category: product.categoryId,
236
+ price: product.price,
237
+ quantity: product.quantity
238
+ })
239
+ }
240
+
87
241
  useEffect(() => {
88
242
  if (segmentClient?.config?.writeKey) {
243
+ events.on('products_searched', handleProductsSearched)
244
+ events.on('product_list_viewed', handleProductListViewed)
245
+ events.on('promotion_viewed', handlePromotionViewed)
246
+ events.on('promotion_clicked', handlePromotionClicked)
89
247
  events.on('product_clicked', handleClickProduct)
90
- events.on('userLogin', handleLogin)
248
+ events.on('product_viewed', handleProductViewed)
91
249
  events.on('product_added', handleProductAdded)
92
- events.on('order_placed', handleOrderPlaced)
250
+ events.on('cart_product_removed', handleProductRemoved)
251
+ events.on('cart_viewed', handleCartViewed)
252
+ events.on('checkout_started', handleCheckoutStarted)
93
253
  events.on('order_updated', handleUpdateOrder)
254
+ events.on('coupon_entered', handleCouponEntered)
255
+ events.on('offer_applied', handleCouponApplied)
256
+ events.on('offer_denied', handleCouponDenied)
257
+ events.on('offer_removed', handleCouponRemoved)
258
+ events.on('product_reviewed', handleProductReviewed)
259
+ events.on('userLogin', handleLogin)
260
+ events.on('order_placed', handleOrderPlaced)
94
261
  events.on('order_added', handleAddOrder)
95
- events.on('cart_product_removed', handleProductRemoved)
262
+ events.on('product_added_to_wishlist', handleProductAddedToWishlist)
263
+ events.on('product_removed_from_wishlist', handleProductRemovedFromWishlist)
264
+ events.on('wishlist_product_added_to_cart', handleWishlistProductAddedToCart)
96
265
  }
97
266
  return () => {
98
267
  if (segmentClient?.config?.writeKey) {
268
+ events.off('products_searched', handleProductsSearched)
269
+ events.off('product_list_viewed', handleProductListViewed)
270
+ events.off('promotion_viewed', handlePromotionViewed)
271
+ events.off('promotion_clicked', handlePromotionClicked)
99
272
  events.off('product_clicked', handleClickProduct)
100
- events.off('userLogin', handleLogin)
273
+ events.off('product_viewed', handleProductViewed)
101
274
  events.off('product_added', handleProductAdded)
102
- events.off('order_placed', handleOrderPlaced)
275
+ events.off('cart_product_removed', handleProductRemoved)
276
+ events.off('cart_viewed', handleCartViewed)
277
+ events.off('checkout_started', handleCheckoutStarted)
103
278
  events.off('order_updated', handleUpdateOrder)
279
+ events.off('coupon_entered', handleCouponEntered)
280
+ events.off('offer_applied', handleCouponApplied)
281
+ events.off('offer_denied', handleCouponDenied)
282
+ events.off('offer_removed', handleCouponRemoved)
283
+ events.off('product_reviewed', handleProductReviewed)
284
+ events.off('userLogin', handleLogin)
285
+ events.off('order_placed', handleOrderPlaced)
104
286
  events.off('order_added', handleAddOrder)
105
- events.off('cart_product_removed', handleProductRemoved)
287
+ events.off('product_added_to_wishlist', handleProductAddedToWishlist)
288
+ events.off('product_removed_from_wishlist', handleProductRemovedFromWishlist)
289
+ events.off('wishlist_product_added_to_cart', handleWishlistProductAddedToCart)
106
290
  }
107
291
  }
108
292
  }, [segmentClient])
@@ -110,7 +294,7 @@ export const AnalyticsSegment = (props: any) => {
110
294
  useEffect(() => {
111
295
  if (configState?.configs?.segment_track_id?.value) {
112
296
  const _segmentClient: any = createClient({
113
- writeKey: configState?.configs?.segment_track_id?.value
297
+ writeKey: configState?.configs?.segment_track_id?.value,
114
298
  });
115
299
  setSegmentClient(_segmentClient)
116
300
  }
@@ -118,10 +302,9 @@ export const AnalyticsSegment = (props: any) => {
118
302
 
119
303
  return (
120
304
  <>
121
- <AnalyticsProvider client={segmentClient}>
305
+ {/* <AnalyticsProvider client={segmentClient}>
122
306
  {children}
123
- </AnalyticsProvider>
307
+ </AnalyticsProvider> */}
124
308
  </>
125
-
126
309
  )
127
310
  }
@@ -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 =>