ordering-ui-react-native 0.16.76 → 0.16.77-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 (215) hide show
  1. package/package.json +6 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/styles.tsx +8 -14
  4. package/src/components/BusinessInformation/index.tsx +19 -4
  5. package/src/components/BusinessInformation/styles.tsx +2 -2
  6. package/src/components/BusinessProductsList/index.tsx +10 -10
  7. package/src/components/BusinessesListing/index.tsx +1 -1
  8. package/src/components/LanguageSelector/index.tsx +21 -16
  9. package/src/components/Messages/index.tsx +2 -2
  10. package/src/components/OrderCreating/index.tsx +2 -2
  11. package/src/components/OrdersOption/index.tsx +54 -56
  12. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  13. package/src/components/SingleProductReview/index.tsx +7 -4
  14. package/src/components/VerifyPhone/styles.tsx +1 -2
  15. package/src/components/shared/OToast.tsx +4 -4
  16. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  17. package/src/utils/index.tsx +2 -1
  18. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  19. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  20. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  21. package/themes/business/src/components/Chat/index.tsx +31 -31
  22. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  23. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  24. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  25. package/themes/business/src/components/LoginForm/index.tsx +332 -140
  26. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  27. package/themes/business/src/components/MapView/index.tsx +14 -3
  28. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  29. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  30. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
  31. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  32. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  33. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  34. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  35. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  36. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  37. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  38. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  40. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  41. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  42. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  43. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  44. package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
  45. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  46. package/themes/business/src/components/ProductItemAccordion/index.tsx +24 -5
  47. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  48. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  49. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  50. package/themes/business/src/components/shared/OLink.tsx +33 -13
  51. package/themes/business/src/components/shared/OText.tsx +8 -2
  52. package/themes/business/src/types/index.tsx +29 -3
  53. package/themes/business/src/utils/index.tsx +26 -0
  54. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  55. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  56. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  57. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  58. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  59. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  60. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  61. package/themes/kiosk/src/components/LoginForm/index.tsx +545 -112
  62. package/themes/kiosk/src/components/LoginForm/styles.tsx +18 -0
  63. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  64. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  65. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  66. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
  67. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  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/components/shared/OModal.tsx +14 -11
  71. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  72. package/themes/kiosk/src/types/index.d.ts +15 -0
  73. package/themes/kiosk/src/utils/index.tsx +15 -0
  74. package/themes/original/index.tsx +8 -0
  75. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  76. package/themes/original/src/components/AddressForm/index.tsx +155 -139
  77. package/themes/original/src/components/AddressList/index.tsx +18 -18
  78. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  79. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  80. package/themes/original/src/components/BusinessBasicInformation/index.tsx +47 -22
  81. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  82. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  83. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  84. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  85. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  86. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  87. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  88. package/themes/original/src/components/BusinessListingSearch/index.tsx +104 -155
  89. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  90. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  91. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  92. package/themes/original/src/components/BusinessProductsList/index.tsx +26 -52
  93. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  94. package/themes/original/src/components/BusinessProductsListing/index.tsx +563 -493
  95. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  96. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  97. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  98. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +116 -81
  99. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  100. package/themes/original/src/components/BusinessesListing/index.tsx +7 -6
  101. package/themes/original/src/components/Cart/index.tsx +75 -40
  102. package/themes/original/src/components/CartContent/index.tsx +80 -18
  103. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  104. package/themes/original/src/components/Checkout/index.tsx +102 -108
  105. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  106. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  107. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  108. package/themes/original/src/components/DriverTips/index.tsx +47 -37
  109. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  110. package/themes/original/src/components/Favorite/index.tsx +7 -4
  111. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  112. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  113. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  114. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  115. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  116. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  117. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  118. package/themes/original/src/components/Help/index.tsx +8 -8
  119. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  120. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  121. package/themes/original/src/components/HelpGuide/index.tsx +13 -12
  122. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  123. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  124. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  125. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  126. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  127. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  128. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  129. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  130. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  131. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  132. package/themes/original/src/components/Messages/index.tsx +42 -26
  133. package/themes/original/src/components/MomentOption/index.tsx +23 -14
  134. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  135. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  136. package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
  137. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  138. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  139. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  140. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  141. package/themes/original/src/components/NavBar/index.tsx +7 -6
  142. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  143. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  144. package/themes/original/src/components/Notifications/index.tsx +144 -0
  145. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  146. package/themes/original/src/components/OrderDetails/index.tsx +108 -218
  147. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  148. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  149. package/themes/original/src/components/OrderProgress/index.tsx +81 -105
  150. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  151. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  152. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  153. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +93 -97
  154. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  155. package/themes/original/src/components/OrdersOption/index.tsx +86 -92
  156. package/themes/original/src/components/PageBanner/index.tsx +146 -0
  157. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  158. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  159. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  160. package/themes/original/src/components/PaymentOptions/index.tsx +1 -1
  161. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  162. package/themes/original/src/components/PlaceSpot/index.tsx +16 -6
  163. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  164. package/themes/original/src/components/ProductForm/index.tsx +240 -254
  165. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  166. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  167. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  168. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  169. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  170. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  171. package/themes/original/src/components/ProfessionalProfile/index.tsx +20 -9
  172. package/themes/original/src/components/Promotions/index.tsx +234 -220
  173. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  174. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  175. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  176. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  177. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  178. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  179. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  180. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  181. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  182. package/themes/original/src/components/ServiceForm/index.tsx +360 -265
  183. package/themes/original/src/components/Sessions/index.tsx +11 -8
  184. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  185. package/themes/original/src/components/SignupForm/index.tsx +150 -100
  186. package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
  187. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  188. package/themes/original/src/components/SingleProductCard/index.tsx +116 -79
  189. package/themes/original/src/components/SingleProductCard/styles.tsx +14 -13
  190. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  191. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  192. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  193. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  194. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  195. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  196. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  197. package/themes/original/src/components/UserFormDetails/index.tsx +50 -54
  198. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  199. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  200. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  201. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  202. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  203. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  204. package/themes/original/src/components/Wallets/index.tsx +177 -164
  205. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  206. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  207. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  208. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  209. package/themes/original/src/components/shared/OButton.tsx +9 -4
  210. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  211. package/themes/original/src/components/shared/OInput.tsx +10 -1
  212. package/themes/original/src/layouts/Container.tsx +13 -9
  213. package/themes/original/src/types/index.tsx +42 -7
  214. package/themes/original/src/utils/index.tsx +322 -58
  215. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,16 +1,16 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { Platform, StyleSheet, TouchableOpacity } from 'react-native';
2
+ import { Platform, StyleSheet, TouchableOpacity, ScrollView } from 'react-native';
3
3
  import { useSession, useLanguage, ToastType, useToast, useConfig } from 'ordering-components/native';
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import { useForm, Controller } from 'react-hook-form';
6
+ import { SignupForm } from '../SignupForm'
6
7
 
7
8
  import { UDForm, UDLoader, UDWrapper, WrapperPhone } from './styles';
8
9
 
9
- import { OText, OButton, OInput } from '../shared';
10
+ import { OText, OButton, OInput, OModal } from '../shared';
10
11
 
11
12
  import { PhoneInputNumber } from '../PhoneInputNumber';
12
13
  import { sortInputFields } from '../../utils';
13
- import CheckBox from '@react-native-community/checkbox';
14
14
 
15
15
  export const UserFormDetailsUI = (props: any) => {
16
16
  const {
@@ -18,7 +18,6 @@ export const UserFormDetailsUI = (props: any) => {
18
18
  formState,
19
19
  showField,
20
20
  requiredFields,
21
- onClose,
22
21
  setIsSubmit,
23
22
  cleanFormState,
24
23
  onCloseProfile,
@@ -29,12 +28,12 @@ export const UserFormDetailsUI = (props: any) => {
29
28
  phoneUpdate,
30
29
  hideUpdateButton,
31
30
  setWillVerifyOtpState,
32
- handleChangePromotions,
31
+ handlePlaceOrderAsGuest,
32
+ isCheckout
33
33
  } = props;
34
34
 
35
35
  const theme = useTheme();
36
36
 
37
-
38
37
  const styles = StyleSheet.create({
39
38
  btnOutline: {
40
39
  backgroundColor: '#FFF',
@@ -64,10 +63,6 @@ export const UserFormDetailsUI = (props: any) => {
64
63
  paddingStart: 0,
65
64
  paddingBottom: 0,
66
65
  marginBottom: -0,
67
- },
68
- checkBoxStyle: {
69
- width: 25,
70
- height: 25,
71
66
  }
72
67
  });
73
68
 
@@ -76,10 +71,11 @@ export const UserFormDetailsUI = (props: any) => {
76
71
  const [, { showToast }] = useToast();
77
72
  const { handleSubmit, control, errors, setValue } = useForm();
78
73
 
79
- const [{ user }] = useSession();
74
+ const [{ user }, { login }] = useSession();
80
75
  const [userPhoneNumber, setUserPhoneNumber] = useState<any>(null);
81
76
  const [isValid, setIsValid] = useState(false)
82
- const [isChanged, setIsChanged] = useState(false)
77
+ const [isChanged, setIsChanged] = useState(false)
78
+ const [isModalOpen, setIsModalOpen] = useState(false)
83
79
  const [phoneInputData, setPhoneInputData] = useState({
84
80
  error: '',
85
81
  phone: {
@@ -90,6 +86,14 @@ export const UserFormDetailsUI = (props: any) => {
90
86
 
91
87
  const showInputPhoneNumber = (validationFields?.fields?.checkout?.cellphone?.enabled ?? false) || configs?.verification_phone_required?.value === '1'
92
88
 
89
+ const handleSuccessSignup = (user: any) => {
90
+ login({
91
+ user,
92
+ token: user?.session?.access_token
93
+ })
94
+ handlePlaceOrderAsGuest && handlePlaceOrderAsGuest()
95
+ }
96
+
93
97
  const getInputRules = (field: any) => {
94
98
  const rules: any = {
95
99
  required: isRequiredField(field.code)
@@ -195,6 +199,11 @@ export const UserFormDetailsUI = (props: any) => {
195
199
  handleChangeInput(countryCode, true);
196
200
  }
197
201
 
202
+ const handleClickBtn = () => {
203
+ if (!user?.guest_id) handleSubmit(onSubmit)
204
+ else setIsModalOpen(true)
205
+ }
206
+
198
207
  useEffect(() => {
199
208
  if (Object.keys(errors).length > 0) {
200
209
  const list = Object.values(errors);
@@ -243,10 +252,10 @@ export const UserFormDetailsUI = (props: any) => {
243
252
 
244
253
  useEffect(() => {
245
254
  if (!requiredFields || formState?.changes?.length === 0) return
246
- const _isValid = requiredFields.every((key: any) => formState?.changes[key])
247
- setIsValid(_isValid)
248
- }, [formState?.changes, requiredFields])
249
-
255
+ const _isValid = requiredFields.every((key: any) => formState?.changes[key])
256
+ setIsValid(_isValid)
257
+ }, [formState?.changes, requiredFields])
258
+
250
259
  return (
251
260
  <>
252
261
  <UDForm>
@@ -333,7 +342,7 @@ export const UserFormDetailsUI = (props: any) => {
333
342
  ),
334
343
  )}
335
344
 
336
- {!!showInputPhoneNumber &&((requiredFields && requiredFields.includes('cellphone')) || !requiredFields) && (
345
+ {!!showInputPhoneNumber && ((requiredFields && requiredFields.includes('cellphone')) || !requiredFields) && (
337
346
  <WrapperPhone>
338
347
  <OText size={14} lineHeight={21} weight={'500'} color={theme.colors.textNormal}>{t('PHONE', 'Phone')}</OText>
339
348
  <PhoneInputNumber
@@ -395,39 +404,6 @@ export const UserFormDetailsUI = (props: any) => {
395
404
  defaultValue=''
396
405
  />
397
406
  )}
398
- {!requiredFields && (
399
- <Controller
400
- control={control}
401
- render={({ onChange, value }: any) => (
402
- <TouchableOpacity
403
- style={{ flexDirection: 'row', alignItems: 'center', marginBottom: 20, width: '100%' }}
404
- onPress={() => {
405
- onChange(!value)
406
- handleChangePromotions(!value)
407
- }}
408
- >
409
- <CheckBox
410
- value={value}
411
- boxType={'square'}
412
- tintColors={{
413
- true: theme.colors.primary,
414
- false: theme.colors.disabled
415
- }}
416
- tintColor={theme.colors.disabled}
417
- onCheckColor={theme.colors.primary}
418
- onTintColor={theme.colors.primary}
419
- style={Platform.OS === 'ios' && styles.checkBoxStyle}
420
- />
421
- <OText style={{ fontSize: 14, paddingHorizontal: 5, paddingLeft: 10 }}>{t('RECEIVE_NEWS_EXCLUSIVE_PROMOTIONS', 'Receive newsletters and exclusive promotions')}</OText>
422
- </TouchableOpacity>
423
- )}
424
- name='promotions'
425
- defaultValue={formState?.result?.result
426
- ? !!formState?.result?.result?.settings?.notification?.newsletter
427
- : !!(formState?.changes?.settings?.notification?.newsletter ?? (user && user?.settings?.notification?.newsletter))}
428
- />
429
- )}
430
-
431
407
  </UDWrapper>
432
408
  )}
433
409
  {validationFields?.loading && (
@@ -464,18 +440,38 @@ export const UserFormDetailsUI = (props: any) => {
464
440
  text={
465
441
  formState.loading
466
442
  ? t('UPDATING', 'Updating...')
467
- : t('CONTINUE', 'Continue')
443
+ : ((isCheckout && !!user?.guest_id)
444
+ ? t('SIGN_UP_AND_PLACE_ORDER', 'Sign up and place order')
445
+ : t('CONTINUE', 'Continue'))
468
446
  }
469
447
  bgColor={theme.colors.white}
470
448
  textStyle={{ color: theme.colors.primary, fontSize: 14 }}
471
449
  borderColor={theme.colors.primary}
472
- isDisabled={formState.loading || !isValid}
450
+ isDisabled={!user?.guest_id && (formState.loading || !isValid)}
473
451
  imgRightSrc={null}
474
452
  style={{ borderRadius: 7.6, shadowOpacity: 0, width: '100%', borderWidth: 1, marginTop: 20, marginBottom: 20 }}
475
- onClick={handleSubmit(onSubmit)}
453
+ onClick={handleClickBtn}
476
454
  />
477
455
  )}
456
+ {isCheckout && !!user?.guest_id && (
457
+ <TouchableOpacity style={{ marginTop: 10 }} onPress={() => handlePlaceOrderAsGuest()}>
458
+ <OText color={theme.colors.primary} style={{ textAlign: 'center' }}>{t('PLACE_ORDER_AS_GUEST', 'Place order as guest')}</OText>
459
+ </TouchableOpacity>
460
+ )}
461
+ <OModal
462
+ open={isModalOpen}
463
+ onClose={() => setIsModalOpen(false)}
464
+ >
465
+ <ScrollView style={{ paddingHorizontal: 20, width: '100%'}}>
466
+ <SignupForm
467
+ handleSuccessSignup={handleSuccessSignup}
468
+ isGuest
469
+ signupButtonText={t('SIGNUP', 'Signup')}
470
+ useSignupByEmail
471
+ useChekoutFileds
472
+ />
473
+ </ScrollView>
474
+ </OModal>
478
475
  </>
479
476
  );
480
477
  };
481
-
@@ -17,7 +17,7 @@ import { LanguageSelector } from '../LanguageSelector'
17
17
  import MessageCircle from 'react-native-vector-icons/AntDesign'
18
18
  import Ionicons from 'react-native-vector-icons/Ionicons'
19
19
  import MaterialIcons from 'react-native-vector-icons/MaterialIcons'
20
- import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'
20
+ import FontAwesome from 'react-native-vector-icons/FontAwesome'
21
21
  import FastImage from 'react-native-fast-image'
22
22
  import { OAlert } from '../../../../../src/components/shared'
23
23
 
@@ -29,21 +29,27 @@ import {
29
29
  CenterView,
30
30
  Actions,
31
31
  ListWrap,
32
- ListItem
32
+ ListItem,
33
+ NotificationsWrapper,
34
+ NotificationBadge
33
35
  } from './styles';
34
36
  import { useWindowDimensions } from 'react-native';
35
37
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
38
+ import styled from 'styled-components';
39
+ import ToggleSwitch from 'toggle-switch-react-native';
36
40
 
37
41
  const ProfileListUI = (props: ProfileParams) => {
38
42
  const {
39
43
  navigation,
40
- formState,
44
+ notificationsGroup,
41
45
  handleRemoveAccount,
42
- removeAccountState
46
+ removeAccountState,
47
+ handleChangePromotions,
43
48
  } = props;
44
49
 
45
50
  const theme = useTheme();
46
51
 
52
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
47
53
 
48
54
  const langPickerStyle = StyleSheet.create({
49
55
  inputAndroid: {
@@ -85,8 +91,7 @@ const ProfileListUI = (props: ProfileParams) => {
85
91
  marginEnd: 14
86
92
  },
87
93
  pagePadding: {
88
- paddingLeft: 40,
89
- paddingRight: 40
94
+ paddingHorizontal: isChewLayout ? 20 : 40
90
95
  },
91
96
  messageIconStyle: {
92
97
  fontSize: 18,
@@ -108,22 +113,19 @@ const ProfileListUI = (props: ProfileParams) => {
108
113
  const { top, bottom } = useSafeAreaInsets();
109
114
 
110
115
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
111
-
112
- const isWalletEnabled = configs?.cash_wallet?.value && configs?.wallet_enabled?.value === '1' && (configs?.wallet_cash_enabled?.value === '1' || configs?.wallet_credit_point_enabled?.value === '1')
116
+ const isWalletEnabled = configs?.cash_wallet?.value && configs?.wallet_enabled?.value === '1' && (configs?.wallet_cash_enabled?.value === '1' || configs?.wallet_credit_point_enabled?.value === '1')
113
117
  const IsPromotionsEnabled = configs?.advanced_offers_module?.value === '1' || configs?.advanced_offers_module?.value === true
114
118
  const onRedirect = (route: string, params?: any) => {
115
119
  navigation.navigate(route, params)
116
120
  }
117
121
 
118
122
  useEffect(() => {
119
- if (formState.result.result && !formState.loading) {
120
- if (formState.result?.error) {
121
- showToast(ToastType.Error, formState.result.result);
122
- } else {
123
+ if (notificationsGroup.result.result && !notificationsGroup.loading) {
124
+ if (!notificationsGroup.result?.error) {
123
125
  showToast(ToastType.Success, t('UPDATE_SUCCESSFULLY', 'Update successfully'));
124
126
  }
125
127
  }
126
- }, [formState.result])
128
+ }, [notificationsGroup.result])
127
129
 
128
130
  useEffect(() => {
129
131
  if (Object.keys(errors).length > 0) {
@@ -139,21 +141,20 @@ const ProfileListUI = (props: ProfileParams) => {
139
141
  }, [errors]);
140
142
 
141
143
  const detailProps = {
142
-
143
144
  goToBack: () => props.navigation?.canGoBack() && props.navigation.goBack(),
144
145
  onNavigationRedirect: (route: string, params: any) => props.navigation.navigate(route, params)
145
146
  }
146
147
 
147
148
  const onRemoveAccount = () => {
148
149
  setConfirm({
149
- open: true,
150
- content: [t('QUESTION_REMOVE_ACCOUNT', 'Are you sure that you want to remove your account?')],
151
- title: t('ACCOUNT_ALERT', 'Account alert'),
152
- handleOnAccept: () => {
153
- setConfirm({ ...confirm, open: false })
154
- handleRemoveAccount && handleRemoveAccount(user?.id)
155
- }
156
- })
150
+ open: true,
151
+ content: [t('QUESTION_REMOVE_ACCOUNT', 'Are you sure that you want to remove your account?')],
152
+ title: t('ACCOUNT_ALERT', 'Account alert'),
153
+ handleOnAccept: () => {
154
+ setConfirm({ ...confirm, open: false })
155
+ handleRemoveAccount && handleRemoveAccount(user?.id)
156
+ }
157
+ })
157
158
  }
158
159
 
159
160
  useEffect(() => {
@@ -163,10 +164,7 @@ const ProfileListUI = (props: ProfileParams) => {
163
164
  }, [removeAccountState])
164
165
 
165
166
  return (
166
- <View style={{ flex: 1, height: height - top - bottom - 62, paddingTop: 20 }}>
167
- {/* <OText size={24} style={{ marginTop: 15, paddingHorizontal: 40 }}>
168
- {t('PROFILE', 'Profile')}
169
- </OText> */}
167
+ <View style={{ flex: 1, height: height - top - bottom, paddingTop: 20 }}>
170
168
  <CenterView style={styles.pagePadding}>
171
169
  {user?.photo && (
172
170
  <View style={styles.photo}>
@@ -183,12 +181,12 @@ const ProfileListUI = (props: ProfileParams) => {
183
181
  <View style={{ flexBasis: '70%' }}>
184
182
  <OText size={20} lineHeight={30} weight={Platform.OS === 'ios' ? '500' : 'bold'} color={theme.colors.textNormal}>{user?.name} {user?.lastname}</OText>
185
183
  <TouchableOpacity onPress={() => navigation.navigate('ProfileForm', { ...detailProps })}>
186
- <OText size={12} lineHeight={18} color={theme.colors.textSecondary} style={{ textDecorationLine: 'underline' }}>{t('VIEW_ACCOUNT', 'View account')}</OText>
184
+ <OText size={12} lineHeight={18} color={theme.colors.primary} style={{ textDecorationLine: 'underline' }}>{t('VIEW_ACCOUNT', 'View account')}</OText>
187
185
  </TouchableOpacity>
188
186
  </View>
189
187
  </CenterView>
190
188
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginVertical: 32 }} />
191
- <Spinner visible={formState?.loading} />
189
+ <Spinner visible={notificationsGroup?.loading} />
192
190
  <ListWrap style={{ ...styles.pagePadding }}>
193
191
  <Actions>
194
192
  <ListItem onPress={() => onRedirect('AddressList', { isFromProfile: true, isGoBack: true })} activeOpacity={0.7}>
@@ -199,6 +197,10 @@ const ProfileListUI = (props: ProfileParams) => {
199
197
  <MessageCircle name='message1' style={styles.messageIconStyle} color={theme.colors.textNormal} />
200
198
  <OText size={14} lineHeight={24} weight={'400'} color={theme.colors.textNormal}>{t('MESSAGES', 'Messages')}</OText>
201
199
  </ListItem>
200
+ <ListItem onPress={() => onRedirect('MyOrders', { isFromProfile: true, isGoBack: true })} activeOpacity={0.7}>
201
+ <FontAwesome name='list-alt' style={styles.messageIconStyle} color={theme.colors.textNormal} />
202
+ <OText size={14} lineHeight={24} weight={'400'} color={theme.colors.textNormal}>{t('MY_ORDERS', 'My Orders')}</OText>
203
+ </ListItem>
202
204
  {isWalletEnabled && (
203
205
  <ListItem onPress={() => onRedirect('Wallets', { isFromProfile: true, isGoBack: true })} activeOpacity={0.7}>
204
206
  <Ionicons name='wallet-outline' style={styles.messageIconStyle} color={theme.colors.textNormal} />
@@ -215,6 +217,27 @@ const ProfileListUI = (props: ProfileParams) => {
215
217
  <OIcon src={theme.images.general.ic_help} width={16} color={theme.colors.textNormal} style={{ marginEnd: 14 }} />
216
218
  <OText size={14} lineHeight={24} weight={'400'} color={theme.colors.textNormal}>{t('HELP', 'Help')}</OText>
217
219
  </ListItem>
220
+ <ListItem onPress={() => navigation.navigate('Notifications', { isFromProfile: true, isGoBack: true })} activeOpacity={0.7}>
221
+ <NotificationBadge style={{ borderRadius: 100 / 2 }} />
222
+ <Ionicons name='notifications-outline' style={styles.messageIconStyle} color={theme.colors.textNormal} />
223
+ <OText size={14} lineHeight={24} weight={'400'} color={theme.colors.textNormal}>{t('NOTIFICATIONS', 'Notifications')}
224
+ </OText>
225
+ <NotificationsWrapper>
226
+ <ToggleSwitch
227
+ isOn={user && (!!user?.settings?.notification?.newsletter ||
228
+ !!user?.settings?.sms?.newsletter ||
229
+ !!user?.settings?.email?.newsletter)}
230
+ onColor={theme.colors.primary}
231
+ size="small"
232
+ disabled={notificationsGroup?.loading}
233
+ offColor={theme.colors.disabled}
234
+ animationSpeed={400}
235
+ onToggle={() => handleChangePromotions(!(user && (!!user?.settings?.notification?.newsletter ||
236
+ !!user?.settings?.sms?.newsletter ||
237
+ !!user?.settings?.email?.newsletter)))}
238
+ />
239
+ </NotificationsWrapper>
240
+ </ListItem>
218
241
  <ListItem onPress={() => navigation.navigate('Sessions')} activeOpacity={0.7}>
219
242
  <Ionicons name='md-list-outline' style={styles.messageIconStyle} color={theme.colors.textNormal} />
220
243
  <OText size={14} lineHeight={24} weight={'400'} color={theme.colors.textNormal}>{t('SESSIONS', 'Sessions')}</OText>
@@ -237,13 +260,13 @@ const ProfileListUI = (props: ProfileParams) => {
237
260
  </Actions>
238
261
  </ListWrap>
239
262
  <OAlert
240
- open={confirm.open}
241
- title={confirm.title}
242
- content={confirm.content}
243
- onAccept={confirm.handleOnAccept}
244
- onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
245
- onClose={() => setConfirm({ ...confirm, open: false, title: null })}
246
- />
263
+ open={confirm.open}
264
+ title={confirm.title}
265
+ content={confirm.content}
266
+ onAccept={confirm.handleOnAccept}
267
+ onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
268
+ onClose={() => setConfirm({ ...confirm, open: false, title: null })}
269
+ />
247
270
  </View>
248
271
  );
249
272
  };
@@ -1,5 +1,8 @@
1
+ import { useTheme } from 'styled-components';
1
2
  import styled from 'styled-components/native'
2
3
 
4
+ const theme = useTheme();
5
+
3
6
  export const CenterView = styled.View`
4
7
  flex-direction: row;
5
8
  justify-content: flex-start;
@@ -40,3 +43,17 @@ export const ListItem = styled.TouchableOpacity`
40
43
  margin-bottom: 24px;
41
44
  `
42
45
 
46
+ export const NotificationsWrapper = styled.View`
47
+ position: absolute;
48
+ right: 0;
49
+ `
50
+
51
+ export const NotificationBadge = styled.View`
52
+ width: 10px;
53
+ height: 10px;
54
+ z-index: 2000;
55
+ background-color: ${theme.colors.red};
56
+ position: absolute;
57
+ left: -2px;
58
+ top: 3px;
59
+ `;
@@ -16,9 +16,8 @@ import { ProfileParams } from '../../types';
16
16
  import { UserFormDetailsUI } from '../UserFormDetails';
17
17
 
18
18
  import { OIcon, OIconButton, OModal } from '../shared';
19
- import { CenterView } from './styles';
19
+ import { CenterView, Container } from './styles';
20
20
  import NavBar from '../NavBar';
21
- import { Container } from '../../layouts/Container';
22
21
  import { VerifyPhone } from '../VerifyPhone'
23
22
  import Ionicons from 'react-native-vector-icons/Ionicons'
24
23
  import FastImage from 'react-native-fast-image'
@@ -51,11 +50,6 @@ const ProfileUI = (props: ProfileParams) => {
51
50
  shadowOpacity: 0.2,
52
51
  backgroundColor: theme.colors.white,
53
52
  },
54
- pagePadding: {
55
- paddingLeft: 40,
56
- paddingRight: 40,
57
- justifyContent: 'center',
58
- },
59
53
  navBarStyle: {
60
54
  paddingLeft: 40,
61
55
  paddingRight: 40,
@@ -284,17 +278,18 @@ const ProfileUI = (props: ProfileParams) => {
284
278
 
285
279
  return (
286
280
  <>
287
- <NavBar
288
- title={t('ACCOUNT', 'Account')}
289
- titleAlign={'center'}
290
- onActionLeft={() => navigation.goBack()}
291
- showCall={false}
292
- style={{ paddingHorizontal: 40, paddingVertical: Platform.OS === 'ios' ? 0 : 30 }}
293
- />
294
- <KeyboardAvoidingView behavior={Platform.OS == 'ios' ? 'padding' : 'height'} enabled style={{ flex: 1, flexDirection: 'column', justifyContent: 'center' }}>
295
- <Container noPadding>
296
-
297
- <CenterView style={styles.pagePadding}>
281
+ <Container
282
+ pdng={Platform.OS === 'ios' ? '20px' : '10px'}
283
+ >
284
+ <NavBar
285
+ title={t('ACCOUNT', 'Account')}
286
+ titleAlign={'center'}
287
+ onActionLeft={() => navigation.goBack()}
288
+ showCall={false}
289
+ btnStyle={{ paddingLeft: 0 }}
290
+ />
291
+ <KeyboardAvoidingView behavior={Platform.OS == 'ios' ? 'padding' : 'height'} enabled style={{ flex: 1, flexDirection: 'column', justifyContent: 'center' }}>
292
+ <CenterView>
298
293
  <View style={styles.photo}>
299
294
  {user?.photo ? (
300
295
  <FastImage
@@ -317,17 +312,15 @@ const ProfileUI = (props: ProfileParams) => {
317
312
  onClick={() => handleImagePicker()}
318
313
  />
319
314
  </CenterView>
320
- <View style={{ height: 8, marginLeft: -40, marginRight: -40, backgroundColor: theme.colors.backgroundGray100, marginVertical: 32, zIndex: 10 }} />
315
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginVertical: 32, zIndex: 10 }} />
321
316
  <Spinner visible={formState?.loading || verifyPhoneState?.loading} />
322
- <View style={styles.pagePadding}>
323
- <UserFormDetailsUI
324
- {...props}
325
- isEdit
326
- setWillVerifyOtpState={setWillVerifyOtpState}
327
- />
328
- </View>
329
- </Container>
330
- </KeyboardAvoidingView>
317
+ <UserFormDetailsUI
318
+ {...props}
319
+ isEdit
320
+ setWillVerifyOtpState={setWillVerifyOtpState}
321
+ />
322
+ </KeyboardAvoidingView>
323
+ </Container>
331
324
  <OModal
332
325
  open={isModalVisible}
333
326
  onClose={() => setIsModalVisible(false)}
@@ -9,6 +9,13 @@ export const UserData = styled.View`
9
9
  text-align: center;
10
10
  `
11
11
 
12
+ export const Container = styled.ScrollView`
13
+ position: relative;
14
+ flex: 1;
15
+ padding-top: ${(props: any) => props.pdng};
16
+ margin-bottom: 40px;
17
+ `
18
+
12
19
  export const Names = styled.View`
13
20
  flex-direction: row;
14
21
  `
@@ -0,0 +1,76 @@
1
+ import React from 'react'
2
+ import { View } from 'react-native'
3
+ import { useLanguage } from 'ordering-components/native'
4
+ import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
5
+ import { useTheme } from 'styled-components/native'
6
+ import { OText } from '../shared';
7
+ import { WalletTransactionItem } from '../WalletTransactionItem'
8
+ import { NotFoundSource } from '../NotFoundSource';
9
+
10
+ import {
11
+ Container,
12
+ TransactionsWrapper
13
+ } from './styles'
14
+
15
+ export const WalletTransactions = (props: any) => {
16
+ const {
17
+ transactionsList,
18
+ currentWalletSelected
19
+ } = props
20
+
21
+ const theme = useTheme()
22
+ const [, t] = useLanguage()
23
+
24
+ return (
25
+ <Container>
26
+ <View style={{ width: '100%', paddingHorizontal: 1, paddingBottom: 40 }}>
27
+ {!transactionsList?.loading &&
28
+ !transactionsList?.error &&
29
+ transactionsList.list?.[`wallet:${currentWalletSelected?.id}`]?.length > 0 &&
30
+ (
31
+ <>
32
+ <OText style={{fontSize: 20, color: theme.colors.textNormal, marginBottom: 30}}>
33
+ {t('TRANSACTIONS_HISTORY', 'Transactions history')}
34
+ </OText>
35
+ <TransactionsWrapper>
36
+ {transactionsList.list?.[`wallet:${currentWalletSelected?.id}`]?.map((transaction: any, i: number) =>(
37
+ <WalletTransactionItem
38
+ idx={i}
39
+ type={currentWalletSelected?.type}
40
+ key={transaction.id}
41
+ item={transaction}
42
+ withFormatPrice={currentWalletSelected?.type === 'cash'}
43
+ />
44
+ ))}
45
+ </TransactionsWrapper>
46
+ </>
47
+ )}
48
+
49
+ {(transactionsList?.loading || !transactionsList.list?.[`wallet:${currentWalletSelected?.id}`]) && (
50
+ <View>
51
+ {[...Array(4).keys()].map(i => (
52
+ <View style={{ marginBottom: 10 }} key={i}>
53
+ <Placeholder Animation={Fade}>
54
+ <PlaceholderLine width={100} height={100} style={{ marginBottom: 0, borderRadius: 8 }} />
55
+ </Placeholder>
56
+ </View>
57
+ ))}
58
+ </View>
59
+ )}
60
+
61
+ {!transactionsList?.loading &&
62
+ !(transactionsList?.loading && transactionsList.list?.[`wallet:${currentWalletSelected?.id}`]) &&
63
+ (transactionsList?.error ||
64
+ !transactionsList.list?.[`wallet:${currentWalletSelected?.id}`]?.length) &&
65
+ (
66
+ <NotFoundSource
67
+ content={transactionsList?.error
68
+ ? t('ERROR_NOT_FOUND_TRANSACTIONS', 'Sorry, an error has occurred')
69
+ : t('NOT_FOUND_TRANSACTIONS', 'No transactions to show at this time.')
70
+ }
71
+ />
72
+ )}
73
+ </View>
74
+ </Container>
75
+ )
76
+ }
@@ -0,0 +1,13 @@
1
+ import styled from 'styled-components/native'
2
+
3
+ export const Container = styled.View`
4
+ display: flex;
5
+ flex-direction: column;
6
+ `
7
+
8
+ export const TransactionsWrapper = styled.View`
9
+ display: flex;
10
+ flex-direction: column;
11
+ border-left-width: 2px;
12
+ border-left-color: ${(props: any) => props.theme.colors.disabled};
13
+ `