ordering-ui-react-native 0.16.67 → 0.16.68-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 (206) hide show
  1. package/package.json +6 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +8 -14
  5. package/src/components/BusinessInformation/index.tsx +19 -4
  6. package/src/components/BusinessInformation/styles.tsx +2 -2
  7. package/src/components/BusinessProductsList/index.tsx +10 -10
  8. package/src/components/BusinessesListing/index.tsx +1 -1
  9. package/src/components/Checkout/index.tsx +2 -1
  10. package/src/components/LanguageSelector/index.tsx +21 -16
  11. package/src/components/Messages/index.tsx +2 -2
  12. package/src/components/NotificationSetting/index.tsx +85 -0
  13. package/src/components/OrdersOption/index.tsx +54 -56
  14. package/src/components/PaymentOptions/index.tsx +298 -345
  15. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  16. package/src/components/SingleProductReview/index.tsx +7 -4
  17. package/src/components/StripeElementsForm/index.tsx +25 -16
  18. package/src/components/VerifyPhone/styles.tsx +1 -2
  19. package/src/components/shared/OBottomPopup.tsx +6 -2
  20. package/src/components/shared/OToast.tsx +4 -4
  21. package/src/index.tsx +2 -0
  22. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  23. package/src/utils/index.tsx +2 -1
  24. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  25. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  26. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  27. package/themes/business/src/components/Chat/index.tsx +31 -31
  28. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  29. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  30. package/themes/business/src/components/MapView/index.tsx +14 -3
  31. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  32. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  33. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
  34. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  35. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  36. package/themes/business/src/components/OrdersOption/index.tsx +74 -76
  37. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  38. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  40. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  41. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  44. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  45. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  46. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  47. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  48. package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
  49. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  50. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  51. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  52. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  53. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  54. package/themes/business/src/components/shared/OLink.tsx +33 -13
  55. package/themes/business/src/components/shared/OText.tsx +8 -2
  56. package/themes/business/src/types/index.tsx +22 -10
  57. package/themes/business/src/utils/index.tsx +10 -0
  58. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  59. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  60. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  61. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  62. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  63. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  64. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  65. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  66. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  67. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  68. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  69. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  70. package/themes/kiosk/src/types/index.d.ts +2 -0
  71. package/themes/original/index.tsx +8 -0
  72. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  73. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  74. package/themes/original/src/components/AddressList/index.tsx +18 -18
  75. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  76. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  77. package/themes/original/src/components/BusinessBasicInformation/index.tsx +49 -33
  78. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  79. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  80. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  81. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  82. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  83. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  84. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  85. package/themes/original/src/components/BusinessListingSearch/index.tsx +87 -142
  86. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  87. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  88. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  89. package/themes/original/src/components/BusinessProductsList/index.tsx +54 -60
  90. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  91. package/themes/original/src/components/BusinessProductsListing/index.tsx +561 -477
  92. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  93. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  94. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  95. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +93 -98
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  97. package/themes/original/src/components/BusinessesListing/index.tsx +13 -8
  98. package/themes/original/src/components/Cart/index.tsx +63 -38
  99. package/themes/original/src/components/CartContent/index.tsx +80 -18
  100. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  101. package/themes/original/src/components/Checkout/index.tsx +110 -114
  102. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  103. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  104. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  105. package/themes/original/src/components/DriverTips/index.tsx +47 -37
  106. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  107. package/themes/original/src/components/Favorite/index.tsx +7 -4
  108. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  109. package/themes/original/src/components/FavoriteList/index.tsx +69 -45
  110. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  111. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  112. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  113. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  114. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  115. package/themes/original/src/components/Help/index.tsx +7 -7
  116. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  117. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  118. package/themes/original/src/components/HelpGuide/index.tsx +12 -11
  119. package/themes/original/src/components/HelpGuide/styles.tsx +5 -0
  120. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  121. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  122. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  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 +98 -41
  126. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  127. package/themes/original/src/components/MessageListing/index.tsx +7 -7
  128. package/themes/original/src/components/Messages/index.tsx +35 -20
  129. package/themes/original/src/components/MomentOption/index.tsx +17 -11
  130. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  131. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  132. package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
  133. package/themes/original/src/components/MultiOrdersDetails/index.tsx +60 -33
  134. package/themes/original/src/components/MyOrders/index.tsx +86 -20
  135. package/themes/original/src/components/NavBar/index.tsx +7 -6
  136. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  137. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  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/index.tsx +114 -15
  141. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  142. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  143. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  144. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  145. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  146. package/themes/original/src/components/OrderSummary/index.tsx +3 -36
  147. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  148. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  149. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  150. package/themes/original/src/components/OrdersOption/index.tsx +97 -55
  151. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  152. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  153. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  154. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  155. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  156. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  157. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  158. package/themes/original/src/components/ProductForm/index.tsx +212 -253
  159. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  160. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  161. package/themes/original/src/components/ProductOptionSubOption/index.tsx +17 -9
  162. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +0 -1
  163. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  164. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  165. package/themes/original/src/components/Promotions/index.tsx +234 -220
  166. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  167. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  168. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  169. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  170. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  171. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  172. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  173. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  174. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  175. package/themes/original/src/components/ServiceForm/index.tsx +328 -264
  176. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  177. package/themes/original/src/components/SingleOrderCard/index.tsx +129 -54
  178. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  179. package/themes/original/src/components/SingleProductCard/index.tsx +101 -85
  180. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  181. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  182. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  183. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  184. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  185. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  186. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  187. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  188. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  189. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  190. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  191. package/themes/original/src/components/UserProfileForm/index.tsx +19 -28
  192. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  193. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  194. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  195. package/themes/original/src/components/Wallets/index.tsx +176 -164
  196. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  197. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  198. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  199. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  200. package/themes/original/src/components/shared/OButton.tsx +9 -4
  201. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  202. package/themes/original/src/components/shared/OInput.tsx +10 -1
  203. package/themes/original/src/layouts/Container.tsx +13 -9
  204. package/themes/original/src/types/index.tsx +55 -5
  205. package/themes/original/src/utils/index.tsx +103 -58
  206. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -20,6 +20,7 @@ const BusinessesListingUI = (props: any) => {
20
20
  const {
21
21
  navigation,
22
22
  businessesList,
23
+ paginationProps,
23
24
  handleBusinessClick,
24
25
  } = props;
25
26
 
@@ -78,7 +79,7 @@ const BusinessesListingUI = (props: any) => {
78
79
  </CardsContainer>
79
80
 
80
81
 
81
- {!businessesList.loading && businessesList.businesses.length === 0 && (
82
+ {!businessesList.loading && businessesList.businesses.length === 0 && paginationProps.totalPages !== null && (
82
83
  <NotFoundSource
83
84
  content={t(
84
85
  'NOT_FOUND_BUSINESSES',
@@ -50,6 +50,12 @@ const CheckoutUI = (props: any) => {
50
50
  }
51
51
  }, [cart])
52
52
 
53
+ useEffect(() => {
54
+ if (!cartState.loading && cart && !cart?.valid && cart?.status === 2) {
55
+ navigation?.canGoBack() && navigation.goBack()
56
+ }
57
+ }, [cart])
58
+
53
59
  return (
54
60
  <>
55
61
  <PaymentOptions
@@ -1,10 +1,15 @@
1
- import React, { useEffect, useState } from 'react';
1
+ import React, { useEffect, useState, useRef } from 'react';
2
2
  import { StyleSheet, View } from 'react-native';
3
3
  import { useForm, Controller } from 'react-hook-form';
4
4
  import { useTheme } from 'styled-components/native';
5
+ import { TouchableOpacity } from 'react-native-gesture-handler';
6
+ import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
7
+ import Recaptcha from 'react-native-recaptcha-that-works'
8
+ import ReCaptcha from '@fatnlazycat/react-native-recaptcha-v3'
5
9
 
6
10
  import {
7
11
  LoginForm as LoginFormController,
12
+ useConfig,
8
13
  useLanguage,
9
14
  ToastType,
10
15
  useToast,
@@ -13,7 +18,8 @@ import {
13
18
 
14
19
  import {
15
20
  WelcomeTextContainer,
16
- LogoWrapper
21
+ LogoWrapper,
22
+ RecaptchaButton
17
23
  } from './styles';
18
24
 
19
25
  import { OText, OButton, OInput, OIcon } from '../shared';
@@ -26,14 +32,20 @@ const LoginFormUI = (props: LoginParams) => {
26
32
  loginButtonText,
27
33
  formState,
28
34
  handleButtonLoginClick,
29
- useRootPoint
35
+ useRootPoint,
36
+ handleReCaptcha,
37
+ enableReCaptcha
30
38
  } = props;
31
39
 
32
40
  const theme = useTheme()
41
+ const [{ configs }] = useConfig()
33
42
  const [ordering, { setOrdering }] = useApi();
34
43
  const [, { showToast }] = useToast();
35
44
  const [, t] = useLanguage();
36
- const {control, handleSubmit, formState: {errors}} = useForm();
45
+ const [recaptchaConfig, setRecaptchaConfig] = useState<any>({})
46
+ const [recaptchaVerified, setRecaptchaVerified] = useState(false)
47
+ const recaptchaRef = useRef<any>({});
48
+ const { control, handleSubmit, formState: { errors } } = useForm();
37
49
  const [orientationState] = useDeviceOrientation();
38
50
 
39
51
  const [formsStateValues, setFormsStateValues] = useState<any>({ isSubmitted: false })
@@ -60,6 +72,25 @@ const LoginFormUI = (props: LoginParams) => {
60
72
  onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
61
73
  };
62
74
 
75
+ const handleOpenRecaptcha = () => {
76
+ setRecaptchaVerified(false)
77
+ if (!recaptchaConfig?.siteKey) {
78
+ showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
79
+ return
80
+ }
81
+ if (!recaptchaConfig?.baseUrl) {
82
+ showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
83
+ return
84
+ }
85
+
86
+ recaptchaRef.current.open()
87
+ }
88
+
89
+ const onRecaptchaVerify = (token: any) => {
90
+ setRecaptchaVerified(true)
91
+ handleReCaptcha && handleReCaptcha({ code: token, version: recaptchaConfig?.version })
92
+ }
93
+
63
94
  const styles = StyleSheet.create({
64
95
  logo: {
65
96
  height: 80,
@@ -87,6 +118,20 @@ const LoginFormUI = (props: LoginParams) => {
87
118
 
88
119
  useEffect(() => {
89
120
  if (!formState.loading && formState.result?.error) {
121
+ if (formState.result?.result?.[0] === 'ERROR_AUTH_VERIFICATION_CODE') {
122
+ setRecaptchaVerified(false)
123
+ setRecaptchaConfig({
124
+ version: 'v2',
125
+ siteKey: configs?.security_recaptcha_site_key?.value || null,
126
+ baseUrl: configs?.security_recaptcha_base_url?.value || null
127
+ })
128
+ showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
129
+ setFormsStateValues({
130
+ ...formsStateValues,
131
+ isSubmitted: false,
132
+ })
133
+ return
134
+ }
90
135
  formState.result?.result && showToast(
91
136
  ToastType.Error,
92
137
  typeof formState.result?.result === 'string'
@@ -122,9 +167,32 @@ const LoginFormUI = (props: LoginParams) => {
122
167
  }
123
168
  }, [errors]);
124
169
 
170
+ useEffect(() => {
171
+ if (configs && Object.keys(configs).length > 0 && enableReCaptcha) {
172
+ if (configs?.security_recaptcha_type?.value === 'v3' &&
173
+ configs?.security_recaptcha_score_v3?.value > 0 &&
174
+ configs?.security_recaptcha_site_key_v3?.value
175
+ ) {
176
+ setRecaptchaConfig({
177
+ version: 'v3',
178
+ siteKey: configs?.security_recaptcha_site_key_v3?.value || null,
179
+ baseUrl: configs?.security_recaptcha_base_url?.value || null
180
+ })
181
+ return
182
+ }
183
+ if (configs?.security_recaptcha_site_key?.value) {
184
+ setRecaptchaConfig({
185
+ version: 'v2',
186
+ siteKey: configs?.security_recaptcha_site_key?.value || null,
187
+ baseUrl: configs?.security_recaptcha_base_url?.value || null
188
+ })
189
+ }
190
+ }
191
+ }, [configs, enableReCaptcha])
192
+
125
193
  const logo = (
126
194
  <LogoWrapper>
127
- <OIcon src={theme.images.logos.logotype} style={styles.logo}/>
195
+ <OIcon src={theme.images.logos.logotype} style={styles.logo} />
128
196
  </LogoWrapper>
129
197
  );
130
198
 
@@ -144,7 +212,7 @@ const LoginFormUI = (props: LoginParams) => {
144
212
  value={value}
145
213
  autoCapitalize='none'
146
214
  autoCorrect={false}
147
- inputStyle={{textAlign: 'center'}}
215
+ inputStyle={{ textAlign: 'center' }}
148
216
  onChange={(e: any) => {
149
217
  onChange(e?.target?.value);
150
218
  setFormsStateValues({
@@ -167,7 +235,7 @@ const LoginFormUI = (props: LoginParams) => {
167
235
  autoCapitalize="none"
168
236
  autoCorrect={false}
169
237
  type="email-address"
170
- inputStyle={{textAlign: 'center'}}
238
+ inputStyle={{ textAlign: 'center' }}
171
239
  onChange={(e: any) => {
172
240
  handleChangeInputEmail(e, onChange);
173
241
  }}
@@ -199,7 +267,7 @@ const LoginFormUI = (props: LoginParams) => {
199
267
  style={styles.inputStyle}
200
268
  value={value}
201
269
  onChange={(val: any) => onChange(val)}
202
- inputStyle={{textAlign: 'center'}}
270
+ inputStyle={{ textAlign: 'center' }}
203
271
  />
204
272
  )}
205
273
  name="password"
@@ -211,7 +279,49 @@ const LoginFormUI = (props: LoginParams) => {
211
279
  }}
212
280
  defaultValue=""
213
281
  />
214
-
282
+ {(recaptchaConfig?.version) && (
283
+ <>
284
+ {recaptchaConfig?.version === 'v3' ? (
285
+ <ReCaptcha
286
+ url={recaptchaConfig?.baseUrl}
287
+ siteKey={recaptchaConfig?.siteKey}
288
+ containerStyle={{ height: 40 }}
289
+ onExecute={onRecaptchaVerify}
290
+ reCaptchaType={1}
291
+ />
292
+ ) : (
293
+ <>
294
+ <TouchableOpacity
295
+ onPress={handleOpenRecaptcha}
296
+ >
297
+ <RecaptchaButton>
298
+ {recaptchaVerified ? (
299
+ <MaterialCommunityIcons
300
+ name="checkbox-marked"
301
+ size={26}
302
+ color={theme.colors.primary}
303
+ />
304
+ ) : (
305
+ <MaterialCommunityIcons
306
+ name="checkbox-blank-outline"
307
+ size={26}
308
+ color={theme.colors.mediumGray}
309
+ />
310
+ )}
311
+ <OText size={14} mLeft={8}>{t('VERIFY_ReCAPTCHA', 'Verify reCAPTCHA')}</OText>
312
+ </RecaptchaButton>
313
+ </TouchableOpacity>
314
+ <Recaptcha
315
+ ref={recaptchaRef}
316
+ siteKey={recaptchaConfig?.siteKey}
317
+ baseUrl={recaptchaConfig?.baseUrl}
318
+ onVerify={onRecaptchaVerify}
319
+ onExpire={() => setRecaptchaVerified(false)}
320
+ />
321
+ </>)
322
+ }
323
+ </>
324
+ )}
215
325
  <OButton
216
326
  onClick={handleSubmit(onSubmit)}
217
327
  text={loginButtonText}
@@ -280,7 +390,7 @@ const LoginFormUI = (props: LoginParams) => {
280
390
  ? 0 : 0,
281
391
  }}
282
392
  >
283
- { welcome }
393
+ {welcome}
284
394
  {orientationState?.orientation === LANDSCAPE && (
285
395
  <View style={{
286
396
  justifyContent: 'flex-end',
@@ -327,6 +437,7 @@ export const LoginForm = (props: any) => {
327
437
  const loginProps = {
328
438
  ...props,
329
439
  UIComponent: LoginFormUI,
440
+ isRecaptchaEnable: true
330
441
  };
331
442
  return <LoginFormController {...loginProps} />;
332
443
  };
@@ -7,3 +7,8 @@ export const LogoWrapper = styled.View`
7
7
  export const WelcomeTextContainer = styled.View`
8
8
  margin-bottom: 30px;
9
9
  `;
10
+ export const RecaptchaButton = styled.View`
11
+ flex-direction: row;
12
+ align-items: center;
13
+ margin-bottom: 10px;
14
+ `
@@ -4,6 +4,7 @@ import { OIcon, OButton, OText } from '../shared'
4
4
  import { ImageStyle, TextStyle, View, Platform, TouchableOpacity } from 'react-native'
5
5
  import { useConfig, useLanguage, useOrder } from 'ordering-components/native'
6
6
  import { useTheme } from 'styled-components/native'
7
+
7
8
  const Wrapper = styled.View`
8
9
  background-color: ${(props: any) => props.theme.colors.white};
9
10
  padding: 10px 0px 20px 0px;
@@ -65,28 +66,27 @@ const NavBar = (props: Props) => {
65
66
 
66
67
  return (
67
68
  <Wrapper style={{ paddingTop: props.paddingTop, ...props.style }}>
68
- {(props?.onActionLeft) && (
69
+ {(props?.onActionLeft || props?.leftImg) && (
69
70
  <OButton
70
- imgLeftSrc={props.leftImg}
71
+ imgLeftSrc={props.leftImg || theme.images.general.arrow_left}
71
72
  imgRightSrc={null}
72
73
  style={{ ...btnBackArrow, ...props.btnStyle }}
73
74
  onClick={props.onActionLeft}
74
- imgLeftStyle={props.imgLeftStyle}
75
- {...(!props.leftImg && { iconProps: { name: 'arrowleft', size: 28, color: props.btnStyle?.color } })}
75
+ imgLeftStyle= {props.imgLeftStyle}
76
76
  />)
77
77
  }
78
78
  <TitleTopWrapper>
79
79
  {props.withIcon
80
80
  ? (
81
- <OIcon
82
- url={props.icon}
83
- style={{
84
- borderColor: theme.colors.lightGray,
85
- borderRadius: 20,
86
- }}
87
- width={60}
88
- height={60}
89
- />
81
+ <OIcon
82
+ url={props.icon}
83
+ style={{
84
+ borderColor: theme.colors.lightGray,
85
+ borderRadius: 20,
86
+ }}
87
+ width={60}
88
+ height={60}
89
+ />
90
90
  )
91
91
  : null
92
92
  }
@@ -134,7 +134,7 @@ const NavBar = (props: Props) => {
134
134
  </View>
135
135
  )}
136
136
 
137
- {props.rightComponent}
137
+ { props.rightComponent }
138
138
  </Wrapper>
139
139
  )
140
140
  }
@@ -95,7 +95,7 @@ interface Props {
95
95
  style?: ViewStyle;
96
96
  bgImage: ImageSourcePropType;
97
97
  innerStyle?: ViewStyle;
98
- icon?: ImageSourcePropType;
98
+ icon: ImageSourcePropType;
99
99
  iconStyle?: ImageStyle;
100
100
  callToActionText: string;
101
101
  callToActionTextStyle?: TextStyle;
@@ -15,8 +15,6 @@ import { Container } from '../../layouts/Container'
15
15
  import NavBar from '../NavBar'
16
16
  import { LANDSCAPE, PORTRAIT, useDeviceOrientation } from '../../../../../src/hooks/DeviceOrientation'
17
17
  import GridContainer from '../../layouts/GridContainer'
18
- import AntDesignIcon from 'react-native-vector-icons/AntDesign'
19
- import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons'
20
18
 
21
19
  const OrderTypeSelectorCardUI = (props: OrderTypeSelectParams) => {
22
20
  const {
@@ -29,7 +27,7 @@ const OrderTypeSelectorCardUI = (props: OrderTypeSelectParams) => {
29
27
  callback
30
28
  } = props
31
29
 
32
- const theme = useTheme();
30
+ const theme = useTheme();
33
31
  const [, t] = useLanguage();
34
32
  const [orientationState] = useDeviceOrientation();
35
33
  const [orderState] = useOrder()
@@ -47,7 +45,7 @@ const OrderTypeSelectorCardUI = (props: OrderTypeSelectParams) => {
47
45
  }
48
46
 
49
47
  useEffect(() => {
50
- if (isCardCliked) {
48
+ if(isCardCliked){
51
49
  callback?.()
52
50
  setIsCardClicked(false)
53
51
  setIsLoadingCard(null)
@@ -85,13 +83,13 @@ const OrderTypeSelectorCardUI = (props: OrderTypeSelectParams) => {
85
83
  style={cardStyle}
86
84
  isDisabled={isCardCliked}
87
85
  isLoading={isLoadingCard === 'Eat In'}
88
- title={t('EAT_IN', 'Eat In')}
86
+ title={t('EAT_IN','Eat In')}
89
87
  description={t('EAT_IN_DESCRIPTION', 'We are very glad to have you here. Bon appetit!')}
90
88
  bgImage={theme.images.general.eatIn}
91
- VectorIcon={() => <MaterialIcon name='pin-outline' size={28} color='white' style={{ marginBottom: 10 }} />}
89
+ icon={theme.images.general.pushPin}
92
90
  callToActionText={t('START_MY_ORDER', 'Start my order')}
93
91
  onClick={() => {
94
- if (_eatIn?.value !== orderState?.options?.type) {
92
+ if(_eatIn?.value !== orderState?.options?.type){
95
93
  handleChangeOrderType(_eatIn?.value);
96
94
  setIsCardClicked(true)
97
95
  setIsLoadingCard('Eat In')
@@ -108,15 +106,15 @@ const OrderTypeSelectorCardUI = (props: OrderTypeSelectParams) => {
108
106
 
109
107
  <OptionCard
110
108
  style={cardStyle}
111
- title={t('TAKE_OUT', 'Take out')}
109
+ title={t('TAKE_OUT','Take out')}
112
110
  isDisabled={isCardCliked}
113
111
  isLoading={isLoadingCard === 'Take out'}
114
112
  description={t('TAKE_OUT_DESCRIPTION', 'You are very welcome anytime you visit us!')}
115
113
  bgImage={theme.images.general.takeOut}
116
- VectorIcon={() => <AntDesignIcon name='shoppingcart' size={28} color='white' style={{ marginBottom: 10 }} />}
114
+ icon={theme.images.general.shoppingCart}
117
115
  callToActionText={t('START_MY_ORDER', 'Start my order')}
118
116
  onClick={() => {
119
- if (_takeOut?.value !== orderState?.options?.type) {
117
+ if(_takeOut?.value !== orderState?.options?.type){
120
118
  handleChangeOrderType(_takeOut?.value);
121
119
  setIsCardClicked(true)
122
120
  setIsLoadingCard('Take out')
@@ -550,7 +550,7 @@ export const ProductOptionsUI = (props: any) => {
550
550
  </View>
551
551
  )}
552
552
  <View style={{ width: isSoldOut || maxProductQuantity <= 0 ? '100%' : isDrawer ? '70%' : '80%' }}>
553
- {productCart && !isSoldOut && maxProductQuantity > 0 && auth && orderState.options?.address_id && (
553
+ {productCart && !isSoldOut && maxProductQuantity > 0 && auth && (
554
554
  <OButton
555
555
  onClick={() => handleSaveProduct()}
556
556
  imgRightSrc=''
@@ -563,19 +563,6 @@ export const ProductOptionsUI = (props: any) => {
563
563
  }}
564
564
  />
565
565
  )}
566
- {auth && !orderState.options?.address_id && (
567
- orderState.loading ? (
568
- <OButton
569
- isDisabled
570
- text={t('LOADING', 'Loading')}
571
- imgRightSrc=''
572
- />
573
- ) : (
574
- <OButton
575
- onClick={navigation?.navigate('AddressList')}
576
- />
577
- )
578
- )}
579
566
  {(!auth || isSoldOut || maxProductQuantity <= 0) && (
580
567
  <OButton
581
568
  isDisabled={isSoldOut || maxProductQuantity <= 0}
@@ -10,8 +10,6 @@ import {
10
10
 
11
11
  import * as React from 'react';
12
12
  import styled from 'styled-components/native';
13
- import AntDesignIcon from 'react-native-vector-icons/AntDesign'
14
- import { Icon, IconProps } from 'react-native-vector-icons/Icon';
15
13
 
16
14
  const StyledButton = styled.View<Props>`
17
15
  background-color: ${(props: any) => props.theme.colors.primary};
@@ -79,19 +77,17 @@ interface Props {
79
77
  isCircle?: boolean;
80
78
  bgColor?: string;
81
79
  borderColor?: string;
82
- iconProps?: IconProps;
83
- IconCustom?: React.FunctionComponent
84
80
  }
85
81
 
86
82
  const OButton = (props: Props): React.ReactElement => {
87
83
  if (props.isDisabled) {
88
84
  return (
89
85
  <View style={props.parentStyle}>
90
- <StyledButtonDisabled style={props.style}>
91
- <StyledTextDisabled style={props.disabledTextStyle ? props.disabledTextStyle : props.textStyle}>
92
- {props.text}
93
- </StyledTextDisabled>
94
- </StyledButtonDisabled>
86
+ <StyledButtonDisabled style={props.style}>
87
+ <StyledTextDisabled style={props.disabledTextStyle ? props.disabledTextStyle : props.textStyle}>
88
+ {props.text}
89
+ </StyledTextDisabled>
90
+ </StyledButtonDisabled>
95
91
  </View>
96
92
  );
97
93
  }
@@ -115,15 +111,6 @@ const OButton = (props: Props): React.ReactElement => {
115
111
  {props.imgLeftSrc ? (
116
112
  <StyledImage style={props.imgLeftStyle} source={props.imgLeftSrc} />
117
113
  ) : null}
118
- {props.iconProps ? (
119
- <>
120
- {props?.IconCustom ? (
121
- <props.IconCustom {...props.iconProps} />
122
- ) : (
123
- <AntDesignIcon {...props.iconProps} />
124
- )}
125
- </>
126
- ) : null}
127
114
  {props.text ? (
128
115
  <StyledText style={props.textStyle}>{props.text}</StyledText>
129
116
  ) : null}
@@ -82,6 +82,8 @@ export interface LoginParams {
82
82
  handleSendVerifyCode?: any;
83
83
  handleCheckPhoneCode?: any;
84
84
  useRootPoint?: any;
85
+ enableReCaptcha?: boolean;
86
+ handleReCaptcha?: (vlaue: any) => void;
85
87
  }
86
88
 
87
89
  export interface ProductItemAccordionParams {
@@ -51,6 +51,7 @@ import { LastOrders } from './src/components/LastOrders';
51
51
  import { MultiCheckout } from './src/components/MultiCheckout'
52
52
  import { MultiOrdersDetails } from './src/components/MultiOrdersDetails'
53
53
  import NavBar from './src/components/NavBar';
54
+ import { NotificationsList } from './src/components/Notifications'
54
55
  import { BusinessTypeFilter } from './src/components/BusinessTypeFilter';
55
56
  import { BusinessController } from './src/components/BusinessController';
56
57
  import { BusinessFeaturedController } from './src/components/BusinessFeaturedController';
@@ -59,6 +60,7 @@ import { PaymentOptions } from './src/components/PaymentOptions';
59
60
  import { DriverTips } from './src/components/DriverTips';
60
61
  import { UserDetails } from './src/components/UserDetails';
61
62
  import { OrderSummary } from './src/components/OrderSummary';
63
+ import { OrderItAgain } from './src/components/OrderItAgain';
62
64
  import { CartStoresListing } from './src/components/CartStoresListing';
63
65
  import { PaymentOptionsWebView } from '../../src/components/PaymentOptionsWebView';
64
66
  import { GoogleMap } from './src/components/GoogleMap';
@@ -66,6 +68,7 @@ import { SingleProductCard } from './src/components/SingleProductCard';
66
68
  import { SingleOrderCard } from './src/components/SingleOrderCard';
67
69
  import { UpsellingRedirect } from './src/components/BusinessProductsListing/UpsellingRedirect';
68
70
  import { ProductItemAccordion } from './src/components/ProductItemAccordion';
71
+ import { ScheduleAccordion } from './src/components/ScheduleAccordion';
69
72
  import { BusinessItemAccordion } from './src/components/BusinessItemAccordion';
70
73
  import { CouponControl } from './src/components/CouponControl';
71
74
  import { TaxInformation } from './src/components/TaxInformation';
@@ -93,6 +96,7 @@ import { LogoutButton } from './src/components/LogoutButton';
93
96
  import { UserFormDetailsUI } from './src/components/UserFormDetails';
94
97
  import { WalletTransactionItem } from './src/components/WalletTransactionItem';
95
98
  import { Promotions } from './src/components/Promotions'
99
+ import { MultiCart } from './src/components/MultiCart'
96
100
  import { USER_TYPE, ORDER_TYPES } from './src/config/constants'
97
101
 
98
102
  import { OSBill, OSTable, OSCoupon, OSTotal, OSRow } from './src/components/OrderSummary/styles';
@@ -182,6 +186,7 @@ export {
182
186
  OrderDetails,
183
187
  OrderProgress,
184
188
  BusinessPreorder,
189
+ NotificationsList,
185
190
  UserProfileForm,
186
191
  ReviewOrder,
187
192
  ReviewProducts,
@@ -219,6 +224,7 @@ export {
219
224
  DriverTips,
220
225
  UserDetails,
221
226
  OrderSummary,
227
+ OrderItAgain,
222
228
  CartStoresListing,
223
229
  PaymentOptionsWebView,
224
230
  GoogleMap,
@@ -226,6 +232,7 @@ export {
226
232
  SingleOrderCard,
227
233
  UpsellingRedirect,
228
234
  ProductItemAccordion,
235
+ ScheduleAccordion,
229
236
  BusinessItemAccordion,
230
237
  CouponControl,
231
238
  TaxInformation,
@@ -254,6 +261,7 @@ export {
254
261
  WalletTransactionItem,
255
262
  Promotions,
256
263
  MyOrders,
264
+ MultiCart,
257
265
  ORDER_TYPES,
258
266
  USER_TYPE,
259
267
 
@@ -24,13 +24,15 @@ const AddressDetailsUI = (props: any) => {
24
24
  return (
25
25
  <ADContainer>
26
26
  <ADHeader>
27
- <OText
28
- size={16}
29
- lineHeight={24}
30
- color={theme.colors.textNormal}
31
- weight={'500'}>
32
- {t('DELIVERY_ADDRESS', 'Delivery address')}
33
- </OText>
27
+ {props.HeaderTitle ?? (
28
+ <OText
29
+ size={16}
30
+ lineHeight={24}
31
+ color={theme.colors.textNormal}
32
+ >
33
+ {t('DELIVERY_ADDRESS', 'Delivery address')}
34
+ </OText>
35
+ )}
34
36
  </ADHeader>
35
37
  {!!apiKey && (
36
38
  <ADMap
@@ -57,7 +59,7 @@ const AddressDetailsUI = (props: any) => {
57
59
  }>
58
60
  <OText
59
61
  size={12}
60
- color={theme.colors.textSecondary}
62
+ color={theme.colors.primary}
61
63
  style={{ textDecorationLine: 'underline' }}>
62
64
  {t('CHANGE', 'Change')}
63
65
  </OText>