ordering-ui-react-native 0.17.64 → 0.17.65-release

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/package.json +8 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/OrderCreating/index.tsx +1 -21
  5. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  6. package/src/components/PhoneInputNumber/index.tsx +6 -2
  7. package/src/components/StripeMethodForm/index.tsx +136 -102
  8. package/src/components/VerifyPhone/styles.tsx +1 -2
  9. package/src/components/shared/OToast.tsx +2 -1
  10. package/src/types/index.tsx +5 -0
  11. package/src/utils/index.tsx +5 -0
  12. package/themes/business/index.tsx +2 -0
  13. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +270 -245
  14. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  15. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  16. package/themes/business/src/components/Chat/index.tsx +123 -111
  17. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  18. package/themes/business/src/components/DriverSchedule/index.tsx +42 -5
  19. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  20. package/themes/business/src/components/LoginForm/Otp/index.tsx +31 -3
  21. package/themes/business/src/components/LoginForm/index.tsx +15 -22
  22. package/themes/business/src/components/MapView/index.tsx +10 -10
  23. package/themes/business/src/components/NewOrderNotification/index.tsx +35 -21
  24. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  25. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  26. package/themes/business/src/components/OrderDetails/Delivery.tsx +191 -6
  27. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +133 -65
  28. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +64 -63
  29. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  30. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  31. package/themes/business/src/components/OrderMessage/index.tsx +19 -18
  32. package/themes/business/src/components/OrderSummary/index.tsx +114 -123
  33. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +249 -0
  35. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  36. package/themes/business/src/components/PreviousOrders/index.tsx +444 -242
  37. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  38. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  39. package/themes/business/src/components/ReviewCustomer/index.tsx +30 -15
  40. package/themes/business/src/components/StoresList/index.tsx +3 -4
  41. package/themes/business/src/components/UserProfileForm/index.tsx +11 -13
  42. package/themes/business/src/components/shared/OLink.tsx +33 -13
  43. package/themes/business/src/components/shared/OModal.tsx +16 -9
  44. package/themes/business/src/components/shared/OText.tsx +8 -2
  45. package/themes/business/src/types/index.tsx +28 -12
  46. package/themes/business/src/utils/index.tsx +29 -2
  47. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  48. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  49. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  50. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  51. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  52. package/themes/kiosk/src/components/LoginForm/index.tsx +7 -9
  53. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  54. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  55. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  56. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +2 -2
  57. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  58. package/themes/original/index.tsx +4 -0
  59. package/themes/original/src/components/AddressDetails/index.tsx +19 -3
  60. package/themes/original/src/components/AddressForm/index.tsx +61 -39
  61. package/themes/original/src/components/AddressList/index.tsx +27 -22
  62. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  63. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  64. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  65. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  66. package/themes/original/src/components/BusinessBasicInformation/index.tsx +153 -96
  67. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
  68. package/themes/original/src/components/BusinessController/index.tsx +94 -66
  69. package/themes/original/src/components/BusinessController/styles.tsx +22 -3
  70. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  71. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  72. package/themes/original/src/components/BusinessInformation/index.tsx +142 -109
  73. package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
  74. package/themes/original/src/components/BusinessListingSearch/index.tsx +349 -339
  75. package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -18
  76. package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
  77. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
  78. package/themes/original/src/components/BusinessProductsList/index.tsx +15 -7
  79. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  80. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  81. package/themes/original/src/components/BusinessProductsListing/index.tsx +684 -555
  82. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
  83. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  84. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  85. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +83 -48
  86. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +0 -1
  87. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  88. package/themes/original/src/components/Cart/index.tsx +77 -50
  89. package/themes/original/src/components/CartContent/index.tsx +117 -20
  90. package/themes/original/src/components/CartContent/styles.tsx +17 -7
  91. package/themes/original/src/components/Checkout/index.tsx +356 -124
  92. package/themes/original/src/components/CitiesControl/index.tsx +1 -1
  93. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  94. package/themes/original/src/components/DriverTips/index.tsx +52 -34
  95. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  96. package/themes/original/src/components/Favorite/index.tsx +8 -9
  97. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  98. package/themes/original/src/components/FavoriteList/index.tsx +1 -35
  99. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  100. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  101. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  102. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  103. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  104. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  105. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  106. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +191 -0
  107. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  108. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  109. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  110. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  111. package/themes/original/src/components/GoogleMap/index.tsx +60 -5
  112. package/themes/original/src/components/Help/index.tsx +8 -8
  113. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +10 -31
  114. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +5 -3
  115. package/themes/original/src/components/HelpGuide/index.tsx +6 -6
  116. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  117. package/themes/original/src/components/HelpOrder/index.tsx +6 -15
  118. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  119. package/themes/original/src/components/Home/index.tsx +13 -4
  120. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  121. package/themes/original/src/components/LoginForm/Otp/index.tsx +54 -15
  122. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  123. package/themes/original/src/components/LoginForm/index.tsx +59 -34
  124. package/themes/original/src/components/LottieAnimation/index.tsx +89 -55
  125. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  126. package/themes/original/src/components/Messages/index.tsx +29 -7
  127. package/themes/original/src/components/MomentOption/index.tsx +195 -90
  128. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  129. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  130. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +162 -51
  131. package/themes/original/src/components/MultiCheckout/index.tsx +308 -88
  132. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  133. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  134. package/themes/original/src/components/MultiOrdersDetails/index.tsx +68 -21
  135. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  136. package/themes/original/src/components/MyOrders/index.tsx +40 -29
  137. package/themes/original/src/components/NavBar/index.tsx +20 -17
  138. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  139. package/themes/original/src/components/Notifications/index.tsx +46 -50
  140. package/themes/original/src/components/Notifications/styles.tsx +6 -3
  141. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  142. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +15 -3
  143. package/themes/original/src/components/OrderDetails/index.tsx +190 -363
  144. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  145. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  146. package/themes/original/src/components/OrderProgress/index.tsx +33 -56
  147. package/themes/original/src/components/OrderSummary/index.tsx +88 -59
  148. package/themes/original/src/components/OrderTypeSelector/index.tsx +2 -1
  149. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
  150. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
  151. package/themes/original/src/components/OrdersOption/index.tsx +78 -67
  152. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  153. package/themes/original/src/components/PageBanner/index.tsx +106 -31
  154. package/themes/original/src/components/PageBanner/styles.tsx +4 -4
  155. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  156. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  157. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  158. package/themes/original/src/components/PaymentOptions/index.tsx +78 -35
  159. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  160. package/themes/original/src/components/ProductForm/index.tsx +105 -30
  161. package/themes/original/src/components/ProductForm/styles.tsx +5 -5
  162. package/themes/original/src/components/ProductItemAccordion/index.tsx +14 -11
  163. package/themes/original/src/components/ProductOptionSubOption/index.tsx +20 -18
  164. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +5 -9
  165. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  166. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  167. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  168. package/themes/original/src/components/Promotions/index.tsx +5 -4
  169. package/themes/original/src/components/Promotions/styles.tsx +3 -1
  170. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  171. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  172. package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
  173. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  174. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  175. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  176. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  177. package/themes/original/src/components/ServiceForm/index.tsx +66 -17
  178. package/themes/original/src/components/Sessions/index.tsx +11 -8
  179. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  180. package/themes/original/src/components/SignupForm/index.tsx +43 -27
  181. package/themes/original/src/components/SingleOrderCard/index.tsx +130 -56
  182. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -2
  183. package/themes/original/src/components/SingleProductCard/index.tsx +72 -31
  184. package/themes/original/src/components/SingleProductCard/styles.tsx +20 -4
  185. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  186. package/themes/original/src/components/StripeCardsList/index.tsx +49 -5
  187. package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
  188. package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
  189. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
  190. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  191. package/themes/original/src/components/UserDetails/index.tsx +3 -1
  192. package/themes/original/src/components/UserFormDetails/index.tsx +76 -7
  193. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  194. package/themes/original/src/components/UserProfile/index.tsx +88 -79
  195. package/themes/original/src/components/UserProfileForm/index.tsx +27 -29
  196. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  197. package/themes/original/src/components/UserVerification/index.tsx +52 -49
  198. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  199. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  200. package/themes/original/src/components/Wallets/index.tsx +66 -30
  201. package/themes/original/src/components/Wallets/styles.tsx +3 -4
  202. package/themes/original/src/components/shared/OButton.tsx +6 -2
  203. package/themes/original/src/components/shared/OInput.tsx +6 -1
  204. package/themes/original/src/components/shared/OModal.tsx +3 -3
  205. package/themes/original/src/types/index.tsx +36 -10
  206. package/themes/original/src/utils/index.tsx +273 -1
  207. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,15 +1,15 @@
1
1
  import React from 'react'
2
2
  import { useLanguage } from 'ordering-components/native'
3
3
  import { HelpOrderParams } from '../../types'
4
- import { OText, OButton, OIcon } from '../shared'
4
+ import { OText, OIcon } from '../shared'
5
5
  import { useTheme } from 'styled-components/native'
6
- import { StyleSheet, TouchableOpacity } from 'react-native'
6
+ import { StyleSheet } from 'react-native'
7
7
  import { WebView } from 'react-native-webview'
8
- import AntDesignIcon from 'react-native-vector-icons/AntDesign'
9
8
  import NavBar from '../NavBar'
10
9
 
11
10
  import {
12
- Content
11
+ Content,
12
+ Container
13
13
  } from './styles'
14
14
 
15
15
  export const HelpOrder = (props: HelpOrderParams) => {
@@ -20,15 +20,6 @@ export const HelpOrder = (props: HelpOrderParams) => {
20
20
  const theme = useTheme()
21
21
 
22
22
  const styles = StyleSheet.create({
23
- btnBackArrow: {
24
- borderWidth: 0,
25
- backgroundColor: theme.colors.white,
26
- borderColor: theme.colors.white,
27
- shadowColor: theme.colors.white,
28
- display: 'flex',
29
- justifyContent: 'flex-start',
30
- paddingLeft: 0,
31
- },
32
23
  imageStyle: {
33
24
  width: '100%',
34
25
  height: 120
@@ -42,7 +33,7 @@ export const HelpOrder = (props: HelpOrderParams) => {
42
33
  const goToBack = () => navigation?.canGoBack() && navigation.goBack()
43
34
 
44
35
  return (
45
- <>
36
+ <Container>
46
37
  <NavBar
47
38
  title={t('HELP_WITH_ORDER', 'Help with an order')}
48
39
  onActionLeft={goToBack}
@@ -75,6 +66,6 @@ export const HelpOrder = (props: HelpOrderParams) => {
75
66
  style={styles.videoStyle}
76
67
  />
77
68
  </Content>
78
- </>
69
+ </Container>
79
70
  )
80
71
  }
@@ -3,4 +3,11 @@ import styled from 'styled-components/native'
3
3
  export const Content = styled.View`
4
4
  padding-vertical: 20px;
5
5
  margin-bottom: 20px;
6
- `
6
+ `
7
+
8
+ export const Container = styled.ScrollView`
9
+ position: relative;
10
+ flex: 1;
11
+ margin: 10px 0;
12
+ `
13
+
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { useLanguage, useOrder } from 'ordering-components/native';
1
+ import React, { useEffect } from 'react';
2
+ import { useLanguage, useOrder, useConfig } from 'ordering-components/native';
3
3
  import { useTheme } from 'styled-components/native';
4
4
  import { StyleSheet, View } from 'react-native';
5
5
  import { OButton, OIcon, OText } from '../shared';
@@ -8,12 +8,21 @@ import { TouchableOpacity } from 'react-native-gesture-handler';
8
8
  import { useWindowDimensions, Platform } from 'react-native';
9
9
 
10
10
  export const Home = (props: any) => {
11
- const { onNavigationRedirect } = props;
11
+ const { onNavigationRedirect, businessSlug } = props;
12
12
  const { width, height } = useWindowDimensions();
13
13
  const [, t] = useLanguage();
14
14
  const [orderState] = useOrder();
15
+ const [{ configs }] = useConfig()
15
16
 
16
17
  const theme = useTheme();
18
+ const unaddressedTypes = configs?.unaddressed_order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
19
+ const isAllowUnaddressOrderType = unaddressedTypes.includes(orderState?.options?.type)
20
+
21
+ useEffect(() => {
22
+ if (isAllowUnaddressOrderType) {
23
+ onNavigationRedirect(!!businessSlug ? 'Business' : 'BusinessList')
24
+ }
25
+ }, [isAllowUnaddressOrderType])
17
26
 
18
27
  return (
19
28
  <View style={styles.container}>
@@ -60,7 +69,7 @@ export const Home = (props: any) => {
60
69
  style={{ ...styles.textLink, marginTop: 12 }}
61
70
  onPress={() =>
62
71
  orderState?.options?.address?.address
63
- ? onNavigationRedirect('BusinessList', { isGuestUser: true })
72
+ ? onNavigationRedirect(!!businessSlug ? 'Business' : 'BusinessList', { isGuestUser: true })
64
73
  : onNavigationRedirect('AddressForm', { isGuestUser: true })
65
74
  }>
66
75
  <OText weight="normal" size={18} color={theme.colors.white}>
@@ -6,6 +6,7 @@ import { NotFoundSource } from '../NotFoundSource'
6
6
 
7
7
  import { ItemWrap } from './styles'
8
8
  import { OrdersOptionParams } from '../../types'
9
+ import { getOrderStatus } from '../../utils'
9
10
 
10
11
  import {
11
12
  Placeholder,
@@ -67,40 +68,6 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
67
68
  return moment(dateStr).format('MMMM DD,YYYY - hh:mm a');
68
69
  }
69
70
 
70
- const getOrderStatus = (s: string) => {
71
- const status = parseInt(s)
72
- const orderStatus = [
73
- { key: 0, value: t('PENDING', 'Pending') },
74
- { key: 1, value: t('COMPLETED', 'Completed') },
75
- { key: 2, value: t('REJECTED', 'Rejected') },
76
- { key: 3, value: t('DRIVER_IN_BUSINESS', 'Driver in business') },
77
- { key: 4, value: t('PREPARATION_COMPLETED', 'Preparation Completed') },
78
- { key: 5, value: t('REJECTED_BY_BUSINESS', 'Rejected by business') },
79
- { key: 6, value: t('REJECTED_BY_DRIVER', 'Rejected by Driver') },
80
- { key: 7, value: t('ACCEPTED_BY_BUSINESS', 'Accepted by business') },
81
- { key: 8, value: t('ACCEPTED_BY_DRIVER', 'Accepted by driver') },
82
- { key: 9, value: t('PICK_UP_COMPLETED_BY_DRIVER', 'Pick up completed by driver') },
83
- { key: 10, value: t('PICK_UP_FAILED_BY_DRIVER', 'Pick up Failed by driver') },
84
- { key: 11, value: t('DELIVERY_COMPLETED_BY_DRIVER', 'Delivery completed by driver') },
85
- { key: 12, value: t('DELIVERY_FAILED_BY_DRIVER', 'Delivery Failed by driver') },
86
- { key: 13, value: t('PREORDER', 'PreOrder') },
87
- { key: 14, value: t('ORDER_NOT_READY', 'Order not ready') },
88
- { key: 15, value: t('ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER', 'Order picked up completed by customer') },
89
- { key: 16, value: t('CANCELLED_BY_CUSTOMER', 'Cancelled by customer') },
90
- { key: 17, value: t('ORDER_NOT_PICKEDUP_BY_CUSTOMER', 'Order not picked up by customer') },
91
- { key: 18, value: t('DRIVER_ALMOST_ARRIVED_TO_BUSINESS', 'Driver almost arrived to business') },
92
- { key: 19, value: t('DRIVER_ALMOST_ARRIVED_TO_CUSTOMER', 'Driver almost arrived to customer') },
93
- { key: 20, value: t('ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS', 'Customer almost arrived to business') },
94
- { key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') },
95
- { key: 22, value: t('ORDER_LOOKING_FOR_DRIVER', 'Looking for driver') },
96
- { key: 23, value: t('ORDER_DRIVER_ON_WAY', 'Driver on way') }
97
- ]
98
-
99
- const objectStatus = orderStatus.find((o) => o.key === status)
100
-
101
- return objectStatus && objectStatus
102
- }
103
-
104
71
  return (
105
72
  <>
106
73
  {/* {(orders.length > 0) && (
@@ -1,10 +1,10 @@
1
- import React, { useEffect, useState } from 'react'
1
+ import React, { useEffect, useRef, useState } from 'react'
2
2
  import { formatSeconds } from '../../../utils'
3
- import { StyleSheet, TouchableOpacity } from 'react-native';
3
+ import { StyleSheet, TouchableOpacity, View, SafeAreaView } from 'react-native';
4
4
  import { useCountdownTimer } from '../../../../../../src/hooks/useCountdownTimer';
5
5
  import { useLanguage } from 'ordering-components/native';
6
6
  import { OTPContainer } from './styles';
7
- import { OText, OButton } from '../../shared';
7
+ import { OText, OButton, OIcon } from '../../shared';
8
8
  import OtpInputs from 'react-native-otp-inputs';
9
9
  import { useTheme } from 'styled-components/native';
10
10
  import { otpParams } from '../../../types'
@@ -16,7 +16,9 @@ export const Otp = (props: otpParams) => {
16
16
  onSubmit,
17
17
  handleLoginOtp,
18
18
  setAlertState,
19
- pinCount
19
+ pinCount,
20
+ otpError,
21
+ setOtpError
20
22
  } = props
21
23
 
22
24
  const theme = useTheme();
@@ -25,7 +27,7 @@ export const Otp = (props: otpParams) => {
25
27
  600, willVerifyOtpState)
26
28
 
27
29
  const [code, setCode] = useState('')
28
-
30
+ const inputRef = useRef<any>()
29
31
 
30
32
  const handleOnSubmit = () => {
31
33
  setAlertState({
@@ -36,6 +38,16 @@ export const Otp = (props: otpParams) => {
36
38
  onSubmit()
37
39
  }
38
40
 
41
+ const handleChangeCode = (code : string) => {
42
+ setCode(code)
43
+ setOtpError(null)
44
+ }
45
+
46
+ const handleCloseOtp = () => {
47
+ setWillVerifyOtpState(false)
48
+ setOtpError(null)
49
+ }
50
+
39
51
  useEffect(() => {
40
52
  if (otpLeftTime === 0) {
41
53
  setAlertState({
@@ -49,6 +61,7 @@ export const Otp = (props: otpParams) => {
49
61
  useEffect(() => {
50
62
  if (code?.length === (pinCount || 6)) {
51
63
  handleLoginOtp(code)
64
+ inputRef?.current?.reset()
52
65
  }
53
66
  }, [code])
54
67
 
@@ -59,11 +72,6 @@ export const Otp = (props: otpParams) => {
59
72
  justifyContent: 'space-between',
60
73
  marginVertical: 30
61
74
  },
62
- focusStyles: {
63
- borderColor: theme.colors.primary,
64
- borderWidth: 1,
65
- borderRadius: 8
66
- },
67
75
  underlineStyleBase: {
68
76
  width: 45,
69
77
  height: 50,
@@ -78,29 +86,60 @@ export const Otp = (props: otpParams) => {
78
86
  color: theme.colors.primary,
79
87
  fontSize: 16
80
88
  },
89
+ wrapperIcon: {
90
+ alignItems: 'center',
91
+ justifyContent: 'center',
92
+ paddingRight: 20
93
+ },
94
+ closeContainer: {
95
+ width: '100%',
96
+ flexDirection: 'row',
97
+ alignItems: 'center'
98
+ }
81
99
  });
82
100
 
83
101
  return (
84
- <>
102
+ <SafeAreaView style={{ flex: 1, backgroundColor: theme.colors.backgroundPage }}>
85
103
  <OTPContainer>
104
+ <View
105
+ style={loginStyle.closeContainer}>
106
+ <TouchableOpacity onPress={() => handleCloseOtp()} style={loginStyle.wrapperIcon}>
107
+ <OIcon
108
+ src={theme.images.general.close}
109
+ width={22}
110
+ />
111
+ </TouchableOpacity>
112
+ <OText size={22}>
113
+ {t('ENTER_VERIFICATION_CODE', 'Enter verification code')}
114
+ </OText>
115
+ </View>
86
116
  <OText size={24}>
87
117
  {formatSeconds(otpLeftTime)}
88
118
  </OText>
89
119
  <OtpInputs
120
+ ref={inputRef}
90
121
  autofillFromClipboard
91
122
  numberOfInputs={pinCount || 6}
92
123
  style={loginStyle.container}
93
124
  inputStyles={loginStyle.underlineStyleBase}
94
- focusStyles={loginStyle.focusStyles}
95
- handleChange={setCode}
125
+ handleChange={handleChangeCode}
96
126
  />
127
+ {!!otpError && (
128
+ <OText
129
+ color={theme?.colors?.error}
130
+ size={20}
131
+ mBottom={10}
132
+ >
133
+ {t(otpError, otpError)}
134
+ </OText>
135
+ )}
97
136
  <TouchableOpacity onPress={() => handleOnSubmit()} disabled={otpLeftTime > 520}>
98
137
  <OText size={16} mBottom={30} color={otpLeftTime > 520 ? theme.colors.disabled : theme.colors.primary}>
99
138
  {t('RESEND_CODE', 'Resend code')}
100
139
  </OText>
101
140
  </TouchableOpacity>
102
141
  <OButton
103
- onClick={() => setWillVerifyOtpState(false)}
142
+ onClick={() => handleCloseOtp()}
104
143
  bgColor={theme.colors.white}
105
144
  borderColor={theme.colors.primary}
106
145
  textStyle={{ color: theme.colors.primary }}
@@ -108,6 +147,6 @@ export const Otp = (props: otpParams) => {
108
147
  text={t('CANCEL', 'Cancel')}
109
148
  />
110
149
  </OTPContainer>
111
- </>
150
+ </SafeAreaView>
112
151
  )
113
152
  }
@@ -3,5 +3,4 @@ import styled from 'styled-components/native';
3
3
  export const OTPContainer = styled.View`
4
4
  padding: 20px;
5
5
  align-items: center;
6
- flex: 1
7
6
  `
@@ -1,11 +1,12 @@
1
1
  import React, { useEffect, useState, useRef } from 'react';
2
- import { StyleSheet, View, Keyboard, Vibration } from 'react-native';
2
+ import { StyleSheet, View, Keyboard, Modal } from 'react-native';
3
3
  import Spinner from 'react-native-loading-spinner-overlay';
4
4
  import { useForm, Controller } from 'react-hook-form';
5
5
  import { PhoneInputNumber } from '../PhoneInputNumber';
6
6
  import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
7
7
  import Recaptcha from 'react-native-recaptcha-that-works'
8
8
  import ReCaptcha from '@fatnlazycat/react-native-recaptcha-v3'
9
+ import ReactNativeHapticFeedback from "react-native-haptic-feedback";
9
10
 
10
11
  import {
11
12
  LoginForm as LoginFormController,
@@ -72,6 +73,7 @@ const LoginFormUI = (props: LoginParams) => {
72
73
  generateOtpCode,
73
74
  useLoginOtpEmail,
74
75
  useLoginOtpCellphone,
76
+ isGuest
75
77
  } = props;
76
78
 
77
79
  const [, { showToast }] = useToast();
@@ -95,6 +97,7 @@ const LoginFormUI = (props: LoginParams) => {
95
97
  const [recaptchaVerified, setRecaptchaVerified] = useState(false)
96
98
  const [alertState, setAlertState] = useState({ open: false, title: '', content: [] })
97
99
  const [tabLayouts, setTabLayouts] = useState<any>({})
100
+ const [otpError, setOtpError] = useState(null)
98
101
  const tabsRef = useRef<any>(null)
99
102
  const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
100
103
  const theme = useTheme();
@@ -160,12 +163,24 @@ const LoginFormUI = (props: LoginParams) => {
160
163
  handleCategoryScroll(otpType ? `${val}_${otpType}` : val)
161
164
  };
162
165
 
166
+ const vibrateApp = (impact?: string) => {
167
+ const options = {
168
+ enableVibrateFallback: true,
169
+ ignoreAndroidSystemSettings: false
170
+ };
171
+ ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
172
+ }
173
+
163
174
  const onSubmit = (values?: any) => {
164
175
  Keyboard.dismiss();
165
176
  if (loginTab === 'otp') {
166
177
  if (phoneInputData.error && (loginTab !== 'otp' || (otpType === 'cellphone' && loginTab === 'otp'))) {
167
178
  showToast(ToastType.Error, t('INVALID_PHONE_NUMBER', 'Invalid phone number'));
168
- Vibration.vibrate()
179
+ vibrateApp()
180
+ return
181
+ }
182
+ if (otpType === 'cellphone' && phoneInputData?.error && !phoneInputData?.phone?.cellphone) {
183
+ showToast(ToastType.Error, t('PHONE_NUMBER_REQUIRED', 'Phone number is required'));
169
184
  return
170
185
  }
171
186
  if (loginTab === 'otp') {
@@ -178,7 +193,7 @@ const LoginFormUI = (props: LoginParams) => {
178
193
  } else {
179
194
  if (phoneInputData.error) {
180
195
  showToast(ToastType.Error, phoneInputData.error);
181
- Vibration.vibrate()
196
+ vibrateApp()
182
197
  return;
183
198
  }
184
199
  handleButtonLoginClick({
@@ -191,7 +206,7 @@ const LoginFormUI = (props: LoginParams) => {
191
206
  const handleVerifyCodeClick = () => {
192
207
  if (phoneInputData.error) {
193
208
  showToast(ToastType.Error, phoneInputData.error);
194
- Vibration.vibrate()
209
+ vibrateApp()
195
210
  return;
196
211
  }
197
212
  if (
@@ -206,7 +221,7 @@ const LoginFormUI = (props: LoginParams) => {
206
221
  'The field Mobile phone is required.',
207
222
  ),
208
223
  );
209
- Vibration.vibrate()
224
+ vibrateApp()
210
225
  return;
211
226
  }
212
227
  handleSendVerifyCode && handleSendVerifyCode(phoneInputData.phone);
@@ -221,19 +236,19 @@ const LoginFormUI = (props: LoginParams) => {
221
236
  };
222
237
 
223
238
  const handleChangeInputEmail = (value: string, onChange: any) => {
224
- onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
239
+ onChange(value.toLowerCase().trim().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
225
240
  };
226
241
 
227
242
  const handleOpenRecaptcha = () => {
228
243
  setRecaptchaVerified(false)
229
244
  if (!recaptchaConfig?.siteKey) {
230
245
  showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
231
- Vibration.vibrate()
246
+ vibrateApp()
232
247
  return
233
248
  }
234
249
  if (!recaptchaConfig?.baseUrl) {
235
250
  showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
236
- Vibration.vibrate()
251
+ vibrateApp()
237
252
  return
238
253
  }
239
254
 
@@ -250,9 +265,14 @@ const LoginFormUI = (props: LoginParams) => {
250
265
  setOtpType(type)
251
266
  }
252
267
 
253
- const handleLoginOtp = (code: string) => {
254
- handleButtonLoginClick({ code })
255
- setWillVerifyOtpState(false)
268
+ const handleLoginOtp = async (code: string) => {
269
+ if (!code) return
270
+ const logged = await handleButtonLoginClick({ code })
271
+ if (logged) {
272
+ setWillVerifyOtpState(false)
273
+ } else {
274
+ setOtpError(t('OTP_CODE_INCORRECT', 'Otp code incorrect'))
275
+ }
256
276
  }
257
277
 
258
278
  const closeAlert = () => {
@@ -310,7 +330,7 @@ const LoginFormUI = (props: LoginParams) => {
310
330
  baseUrl: configs?.security_recaptcha_base_url?.value || null
311
331
  })
312
332
  showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
313
- Vibration.vibrate()
333
+ vibrateApp()
314
334
  return
315
335
  }
316
336
  formState.result?.result &&
@@ -320,7 +340,7 @@ const LoginFormUI = (props: LoginParams) => {
320
340
  ? formState.result?.result
321
341
  : formState.result?.result[0],
322
342
  );
323
- formState.result?.result && Vibration.vibrate()
343
+ formState.result?.result && vibrateApp()
324
344
  }
325
345
  }, [formState]);
326
346
 
@@ -332,7 +352,7 @@ const LoginFormUI = (props: LoginParams) => {
332
352
  ? verifyPhoneState?.result?.result
333
353
  : verifyPhoneState?.result?.result[0];
334
354
  verifyPhoneState.result?.result && showToast(ToastType.Error, message);
335
- verifyPhoneState.result?.result && Vibration.vibrate();
355
+ verifyPhoneState.result?.result && vibrateApp();
336
356
  setIsLoadingVerifyModal(false);
337
357
  return;
338
358
  }
@@ -373,20 +393,24 @@ const LoginFormUI = (props: LoginParams) => {
373
393
  }, [checkPhoneCodeState])
374
394
 
375
395
  useEffect(() => {
376
- if (!!Object.values(errors)?.length) Vibration.vibrate()
396
+ if (!!Object.values(errors)?.length) vibrateApp()
377
397
  }, [errors])
378
398
 
379
399
  return (
380
400
  <Container>
381
- <NavBar
382
- title={t('LOGIN', 'Login')}
383
- titleAlign={'center'}
384
- onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
385
- showCall={false}
386
- btnStyle={{ paddingLeft: 0 }}
387
- titleWrapStyle={{ paddingHorizontal: 0 }}
388
- titleStyle={{ marginRight: 0, marginLeft: 0 }}
389
- />
401
+ {isGuest ? (
402
+ <OText style={{ textAlign: 'center', marginBottom: 10 }} size={18}>{t('LOGIN', 'Login')}</OText>
403
+ ) : (
404
+ <NavBar
405
+ title={t('LOGIN', 'Login')}
406
+ titleAlign={'center'}
407
+ onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
408
+ showCall={false}
409
+ btnStyle={{ paddingLeft: 0 }}
410
+ titleWrapStyle={{ paddingHorizontal: 0 }}
411
+ titleStyle={{ marginRight: 0, marginLeft: 0 }}
412
+ />
413
+ )}
390
414
  <FormSide>
391
415
  {(Number(useLoginByEmail) + Number(useLoginByCellphone) + Number(useLoginOtpEmail) + Number(useLoginOtpCellphone) > 1) && (
392
416
  <LoginWith>
@@ -733,7 +757,7 @@ const LoginFormUI = (props: LoginParams) => {
733
757
  {configs && Object.keys(configs).length > 0 ? (
734
758
  (((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
735
759
  ((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
736
- ((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) &&
760
+ ((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) && !isGuest &&
737
761
  (
738
762
  <>
739
763
  <View
@@ -761,7 +785,7 @@ const LoginFormUI = (props: LoginParams) => {
761
785
  facebookLoginEnabled && (
762
786
  <FacebookLogin
763
787
  notificationState={notificationState}
764
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
788
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
765
789
  handleLoading={(val: boolean) => setIsFBLoading(val)}
766
790
  handleSuccessFacebookLogin={handleSuccessFacebook}
767
791
  />
@@ -770,7 +794,7 @@ const LoginFormUI = (props: LoginParams) => {
770
794
  <GoogleLogin
771
795
  notificationState={notificationState}
772
796
  webClientId={configs?.google_login_client_id?.value}
773
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
797
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
774
798
  handleLoading={(val: boolean) => setIsFBLoading(val)}
775
799
  handleSuccessGoogleLogin={handleSuccessFacebook}
776
800
  />
@@ -778,7 +802,7 @@ const LoginFormUI = (props: LoginParams) => {
778
802
  {(configs?.apple_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && appleLoginEnabled && (
779
803
  <AppleLogin
780
804
  notificationState={notificationState}
781
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
805
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
782
806
  handleLoading={(val: boolean) => setIsFBLoading(val)}
783
807
  handleSuccessAppleLogin={handleSuccessFacebook}
784
808
  />
@@ -824,20 +848,21 @@ const LoginFormUI = (props: LoginParams) => {
824
848
  onClose={() => setIsModalVisible(false)}
825
849
  />
826
850
  </OModal>
827
- <OModal
828
- open={willVerifyOtpState}
829
- onClose={() => setWillVerifyOtpState(false)}
830
- entireModal
831
- title={t('ENTER_VERIFICATION_CODE', 'Enter verification code')}
851
+ <Modal
852
+ visible={willVerifyOtpState}
853
+ onDismiss={() => setWillVerifyOtpState(false)}
854
+ animationType='slide'
832
855
  >
833
856
  <Otp
834
857
  willVerifyOtpState={willVerifyOtpState}
858
+ otpError={otpError}
859
+ setOtpError={setOtpError}
835
860
  setWillVerifyOtpState={setWillVerifyOtpState}
836
861
  handleLoginOtp={handleLoginOtp}
837
862
  onSubmit={onSubmit}
838
863
  setAlertState={setAlertState}
839
864
  />
840
- </OModal>
865
+ </Modal>
841
866
  <Alert
842
867
  open={alertState.open}
843
868
  content={alertState.content}