ordering-ui-react-native 0.22.37 → 0.22.38-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 (164) hide show
  1. package/package.json +6 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/Checkout/index.tsx +40 -39
  5. package/src/components/VerifyPhone/styles.tsx +1 -2
  6. package/src/context/OfflineActions/index.tsx +236 -0
  7. package/themes/business/index.tsx +2 -0
  8. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  9. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  10. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  11. package/themes/business/src/components/BusinessProductList/index.tsx +3 -2
  12. package/themes/business/src/components/Chat/index.tsx +15 -3
  13. package/themes/business/src/components/DriverMap/index.tsx +49 -26
  14. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  15. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  16. package/themes/business/src/components/LanguageSelector/index.tsx +1 -4
  17. package/themes/business/src/components/LoginForm/index.tsx +123 -98
  18. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  19. package/themes/business/src/components/MapView/index.tsx +46 -29
  20. package/themes/business/src/components/NewOrderNotification/index.tsx +38 -19
  21. package/themes/business/src/components/OrderDetails/Business.tsx +47 -27
  22. package/themes/business/src/components/OrderDetails/Delivery.tsx +134 -53
  23. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +156 -46
  24. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +51 -28
  25. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  26. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +17 -16
  27. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  28. package/themes/business/src/components/OrderSummary/index.tsx +6 -4
  29. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  30. package/themes/business/src/components/OrdersOption/index.tsx +332 -231
  31. package/themes/business/src/components/OrdersOption/styles.tsx +14 -0
  32. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  33. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +29 -18
  34. package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
  35. package/themes/business/src/components/PreviousOrders/styles.tsx +2 -1
  36. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  37. package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
  38. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  39. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  40. package/themes/business/src/components/PrinterSettings/index.tsx +162 -174
  41. package/themes/business/src/components/PrinterSettings/styles.tsx +14 -1
  42. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  43. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  44. package/themes/business/src/components/StoresList/index.tsx +2 -2
  45. package/themes/business/src/components/UserProfileForm/index.tsx +51 -19
  46. package/themes/business/src/components/UserProfileForm/styles.tsx +7 -0
  47. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  48. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  49. package/themes/business/src/config/currency.tsx +1010 -0
  50. package/themes/business/src/hooks/useLocation.tsx +16 -12
  51. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  52. package/themes/business/src/types/index.tsx +21 -7
  53. package/themes/business/src/utils/index.tsx +28 -3
  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/Checkout/index.tsx +9 -5
  58. package/themes/kiosk/src/components/CustomerName/index.tsx +1 -1
  59. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  60. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  61. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  62. package/themes/kiosk/src/components/PaymentOptions/index.tsx +121 -57
  63. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  64. package/themes/original/index.tsx +11 -0
  65. package/themes/original/src/components/AddressForm/index.tsx +27 -16
  66. package/themes/original/src/components/AddressList/index.tsx +8 -7
  67. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  68. package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
  69. package/themes/original/src/components/BusinessItemAccordion/index.tsx +14 -6
  70. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
  71. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +8 -6
  72. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  73. package/themes/original/src/components/BusinessPreorder/index.tsx +46 -28
  74. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  75. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  76. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  77. package/themes/original/src/components/BusinessProductsListing/index.tsx +10 -6
  78. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  79. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  80. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  81. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  82. package/themes/original/src/components/Cart/index.tsx +49 -15
  83. package/themes/original/src/components/CartContent/index.tsx +2 -4
  84. package/themes/original/src/components/Checkout/index.tsx +127 -77
  85. package/themes/original/src/components/CitiesControl/index.tsx +0 -3
  86. package/themes/original/src/components/CouponControl/index.tsx +1 -3
  87. package/themes/original/src/components/DriverTips/index.tsx +1 -3
  88. package/themes/original/src/components/Favorite/index.tsx +1 -5
  89. package/themes/original/src/components/FavoriteList/index.tsx +0 -1
  90. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
  91. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  92. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  93. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  94. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  95. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
  96. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  97. package/themes/original/src/components/Help/index.tsx +2 -0
  98. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  99. package/themes/original/src/components/Home/index.tsx +35 -19
  100. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  101. package/themes/original/src/components/LoginForm/index.tsx +13 -10
  102. package/themes/original/src/components/MessageListing/index.tsx +2 -1
  103. package/themes/original/src/components/Messages/index.tsx +27 -19
  104. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  105. package/themes/original/src/components/MomentOption/index.tsx +80 -52
  106. package/themes/original/src/components/MomentSelector/index.tsx +5 -2
  107. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -4
  108. package/themes/original/src/components/MultiCheckout/index.tsx +55 -27
  109. package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -0
  110. package/themes/original/src/components/MyOrders/index.tsx +2 -2
  111. package/themes/original/src/components/NavBar/index.tsx +7 -4
  112. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  113. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  114. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  115. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +16 -11
  116. package/themes/original/src/components/OrderDetails/index.tsx +44 -21
  117. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  118. package/themes/original/src/components/OrderProgress/index.tsx +4 -3
  119. package/themes/original/src/components/OrderSummary/index.tsx +32 -11
  120. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  121. package/themes/original/src/components/OrdersOption/index.tsx +3 -6
  122. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  123. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  124. package/themes/original/src/components/PaymentOptions/index.tsx +462 -461
  125. package/themes/original/src/components/PhoneInputNumber/index.tsx +92 -7
  126. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  127. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  128. package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
  129. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  130. package/themes/original/src/components/ProductItemAccordion/index.tsx +30 -38
  131. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  132. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  133. package/themes/original/src/components/Promotions/index.tsx +6 -9
  134. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  135. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  136. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  137. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  138. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  139. package/themes/original/src/components/Sessions/index.tsx +3 -3
  140. package/themes/original/src/components/SignupForm/index.tsx +44 -32
  141. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
  142. package/themes/original/src/components/SingleProductCard/index.tsx +5 -5
  143. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  144. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  145. package/themes/original/src/components/StripeCardsList/index.tsx +16 -3
  146. package/themes/original/src/components/StripeElementsForm/index.tsx +8 -4
  147. package/themes/original/src/components/StripeElementsForm/naked.tsx +1 -1
  148. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  149. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  150. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  151. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  152. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  153. package/themes/original/src/components/UserFormDetails/index.tsx +102 -74
  154. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  155. package/themes/original/src/components/UserVerification/index.tsx +15 -4
  156. package/themes/original/src/components/Wallets/index.tsx +6 -3
  157. package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
  158. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  159. package/themes/original/src/components/shared/OButton.tsx +5 -4
  160. package/themes/original/src/components/shared/OInput.tsx +4 -8
  161. package/themes/original/src/components/shared/OModal.tsx +7 -2
  162. package/themes/original/src/types/index.tsx +12 -4
  163. package/themes/original/src/utils/index.tsx +29 -0
  164. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -16,6 +16,8 @@ import { ListItem } from '../UserProfile/styles';
16
16
  import moment from 'moment';
17
17
  import { DatePickerUI } from '../DatePicker';
18
18
 
19
+ const CONDITIONAL_CODES = ['PR']
20
+
19
21
  export const UserFormDetailsUI = (props: any) => {
20
22
  const {
21
23
  isEdit,
@@ -36,7 +38,12 @@ export const UserFormDetailsUI = (props: any) => {
36
38
  isCheckout,
37
39
  setIsOpen,
38
40
  handleRemoveAccount,
39
- isProfile
41
+ isProfile,
42
+ isGuest,
43
+ isOrderTypeValidationField,
44
+ checkoutFields,
45
+ isCheckoutPlace,
46
+ setCellphoneStartZero
40
47
  } = props;
41
48
 
42
49
  const theme = useTheme();
@@ -78,7 +85,7 @@ export const UserFormDetailsUI = (props: any) => {
78
85
  const [, { showToast }] = useToast();
79
86
  const { handleSubmit, control, errors, setValue } = useForm();
80
87
 
81
- const [{ user }, { login }] = useSession();
88
+ const [{ user }, { login, logout }] = useSession();
82
89
  const [userPhoneNumber, setUserPhoneNumber] = useState<any>(null);
83
90
  const [isValid, setIsValid] = useState(false)
84
91
  const [isChanged, setIsChanged] = useState(false)
@@ -95,8 +102,8 @@ export const UserFormDetailsUI = (props: any) => {
95
102
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
96
103
 
97
104
  const isAdmin = user?.level === 0
98
- const showInputPhoneNumber = (validationFields?.fields?.checkout?.cellphone?.enabled ?? false) || configs?.verification_phone_required?.value === '1'
99
- const showInputBirthday = validationFields?.fields?.checkout?.birthdate?.enabled ?? false
105
+ const showInputPhoneNumber = isOrderTypeValidationField ? checkoutFields?.find(field => field?.validation_field?.code === 'mobile_phone')?.enabled : (validationFields?.fields?.checkout?.cellphone?.enabled ?? false)
106
+ const showInputBirthday = isOrderTypeValidationField ? checkoutFields?.find(field => field?.validation_field?.code === 'birthdate')?.enabled : (validationFields?.fields?.checkout?.birthdate?.enabled ?? false)
100
107
 
101
108
  const handleSuccessSignup = (user: any) => {
102
109
  login({
@@ -127,15 +134,27 @@ export const UserFormDetailsUI = (props: any) => {
127
134
  return rules;
128
135
  };
129
136
 
137
+ const cellphoneValue = () => {
138
+ let cellphone = user?.guest_id ? user?.guest_cellphone : user?.cellphone
139
+ if (cellphone && CONDITIONAL_CODES.includes(user?.country_code)) {
140
+ if (user?.country_code === 'PR') {
141
+ cellphone = user?.cellphone?.slice(3)
142
+ }
143
+ }
144
+ return cellphone
145
+ }
146
+
130
147
  const setUserCellPhone = (isEdit = false) => {
131
148
  if (userPhoneNumber && !userPhoneNumber.includes('null') && !isEdit) {
132
149
  setUserPhoneNumber(userPhoneNumber);
133
150
  return;
134
151
  }
135
- if (user?.cellphone) {
152
+ const cellphone = user?.guest_id ? user?.guest_cellphone : user?.cellphone
153
+
154
+ if (cellphone) {
136
155
  let phone = null;
137
156
  if (user?.country_phone_code) {
138
- phone = `+${user?.country_phone_code} ${user?.cellphone}`;
157
+ phone = `+${user?.country_phone_code} ${cellphone}`;
139
158
  } else {
140
159
  phone = user?.cellphone;
141
160
  }
@@ -144,17 +163,22 @@ export const UserFormDetailsUI = (props: any) => {
144
163
  ...phoneInputData,
145
164
  phone: {
146
165
  country_phone_code: user?.country_phone_code || null,
147
- cellphone: user?.cellphone || null,
166
+ cellphone: cellphoneValue()
148
167
  },
149
168
  });
150
169
  return;
151
170
  }
152
- setUserPhoneNumber(user?.cellphone || '');
171
+ setUserPhoneNumber(cellphone || '');
153
172
  };
154
173
 
155
174
  const onSubmit = () => {
175
+ let content = ''
176
+ if (requiredFields?.includes?.('birthdate') && !birthdate) {
177
+ content = content + `${t('VALIDATION_ERROR_BIRTHDATE_REQUIRED', 'Birthdate is required')}\n`
178
+ }
156
179
  if (phoneInputData.error) {
157
- showToast(ToastType.Error, phoneInputData.error);
180
+ content = content + `${phoneInputData.error}\n`
181
+ showToast(ToastType.Error, content);
158
182
  return;
159
183
  }
160
184
  if (Object.keys(formState.changes).length > 0) {
@@ -162,17 +186,16 @@ export const UserFormDetailsUI = (props: any) => {
162
186
  formState.changes?.cellphone === null &&
163
187
  ((validationFields?.fields?.checkout?.cellphone?.enabled &&
164
188
  validationFields?.fields?.checkout?.cellphone?.required) ||
165
- configs?.verification_phone_required?.value === '1')
189
+ (configs?.verification_phone_required?.value === '1' && !user?.guest_id))
166
190
  ) {
167
- showToast(
168
- ToastType.Error,
169
- t(
170
- 'VALIDATION_ERROR_MOBILE_PHONE_REQUIRED',
171
- 'The field Phone Number is required.',
172
- ),
173
- );
191
+ content = content + `${t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone Number is required.',)}\n`
192
+ showToast(ToastType.Error, content);
174
193
  return;
175
194
  }
195
+ if (content.length > 0) {
196
+ showToast(ToastType.Error, content);
197
+ return
198
+ }
176
199
  let changes = null;
177
200
  if (user?.cellphone && !userPhoneNumber) {
178
201
  changes = {
@@ -185,7 +208,7 @@ export const UserFormDetailsUI = (props: any) => {
185
208
  }
186
209
  };
187
210
 
188
- const handleChangePhoneNumber = (number: any) => {
211
+ const handleChangePhoneNumber = (number: any, rawNumber : any) => {
189
212
  setPhoneInputData(number);
190
213
  setIsChanged(true)
191
214
  let phoneNumber = {
@@ -198,6 +221,7 @@ export const UserFormDetailsUI = (props: any) => {
198
221
  value: number.phone.cellphone,
199
222
  },
200
223
  };
224
+ setCellphoneStartZero && setCellphoneStartZero(rawNumber?.number && rawNumber?.countryCallingCode ? rawNumber?.number : null)
201
225
  handleChangeInput(phoneNumber, true);
202
226
  };
203
227
 
@@ -223,9 +247,12 @@ export const UserFormDetailsUI = (props: any) => {
223
247
  open: true,
224
248
  content: [t('QUESTION_REMOVE_ACCOUNT', 'Are you sure that you want to remove your account?')],
225
249
  title: t('ACCOUNT_ALERT', 'Account alert'),
226
- handleOnAccept: () => {
250
+ handleOnAccept: async () => {
227
251
  setConfirm({ ...confirm, open: false })
228
- handleRemoveAccount && handleRemoveAccount(user?.id)
252
+ const response = await handleRemoveAccount?.(user?.id)
253
+ if (response === 'OK'){
254
+ logout()
255
+ }
229
256
  }
230
257
  })
231
258
  }
@@ -298,16 +325,16 @@ export const UserFormDetailsUI = (props: any) => {
298
325
  <>
299
326
  <UDForm>
300
327
  {!validationFields?.loading &&
301
- sortInputFields({ values: validationFields?.fields?.checkout })
328
+ sortInputFields({ values: isOrderTypeValidationField ? checkoutFields : validationFields?.fields?.checkout })
302
329
  .length > 0 && (
303
330
  <UDWrapper>
304
331
  {sortInputFields({
305
- values: validationFields.fields?.checkout,
332
+ values: isOrderTypeValidationField ? checkoutFields : validationFields?.fields?.checkout,
306
333
  }).map(
307
334
  (item: any) => {
308
335
  const field = item?.validation_field || item
309
- return (showField &&
310
- showField(field.code) && ((requiredFields && requiredFields.includes(field.code)) || !requiredFields) && (
336
+ return (
337
+ ((isOrderTypeValidationField ? item?.enabled : (showField && showField(field.code))) && ((requiredFields && requiredFields?.includes?.(field.code)) || !requiredFields || !isCheckoutPlace)) && (
311
338
  <React.Fragment key={field.id}>
312
339
  <Controller
313
340
  key={field.id}
@@ -331,7 +358,7 @@ export const UserFormDetailsUI = (props: any) => {
331
358
  isDisabled={false}
332
359
  value={
333
360
  formState?.changes[field.code] ??
334
- (user && user[field.code]) ??
361
+ (user && user?.guest_id && field.code === 'email' ? user?.guest_email : user?.[field.code]) ??
335
362
  ''
336
363
  }
337
364
  onChange={(val: any) => {
@@ -375,52 +402,58 @@ export const UserFormDetailsUI = (props: any) => {
375
402
  )}
376
403
  name={field.code}
377
404
  rules={getInputRules(field)}
378
- defaultValue={user && user[field.code]}
405
+ defaultValue={user && (field.code === 'email' && user?.guest_id ? user?.guest_email : user?.[field.code])}
379
406
  />
380
407
  </React.Fragment>
381
408
  ))
382
409
  },
383
410
  )}
384
- {showInputBirthday && (
385
- <>
386
- <WrapperBirthdate>
387
- <OText size={14} lineHeight={21} color={theme.colors.textNormal} weight={'500'} style={{ textTransform: 'capitalize', alignSelf: 'flex-start' }}>
388
- {t('BIRTHDATE', 'Birthdate')}
389
- </OText>
390
- <TouchableOpacity onPress={() => setShowDatePicker(!showDatePicker)}>
391
- <OText size={14} lineHeight={21} color={theme.colors.textNormal} weight={'500'} style={{ marginTop: 6 }}>
392
- {birthdate ? moment(birthdate).format('YYYY-MM-DD') : ''}
411
+ {((!user?.guest_id && showInputBirthday) || (isOrderTypeValidationField || user?.guest_id)) &&
412
+ showInputBirthday &&
413
+ ((requiredFields && requiredFields?.includes?.('birthdate')) || !requiredFields || !isCheckoutPlace) &&
414
+ (
415
+ <>
416
+ <WrapperBirthdate>
417
+ <OText size={14} lineHeight={21} color={theme.colors.textNormal} weight={'500'} style={{ textTransform: 'capitalize', alignSelf: 'flex-start' }}>
418
+ {t('BIRTHDATE', 'Birthdate')}
393
419
  </OText>
394
- </TouchableOpacity>
395
- </WrapperBirthdate>
396
- <DatePickerUI open={showDatePicker} birthdate={birthdate} onConfirm={_handleChangeDate} onCancel={() => setShowDatePicker(false)} />
397
- </>
398
- )}
399
- {!!showInputPhoneNumber && ((requiredFields && requiredFields.includes('cellphone')) || !requiredFields) && (
400
- <WrapperPhone>
401
- <OText size={14} lineHeight={21} weight={'500'} color={theme.colors.textNormal}>{t('PHONE', 'Phone')}</OText>
402
- <PhoneInputNumber
403
- data={phoneInputData}
404
- handleData={(val: any) => handleChangePhoneNumber(val)}
405
- changeCountry={(val: any) => changeCountry(val)}
406
- defaultValue={phoneUpdate ? '' : user?.cellphone}
407
- defaultCode={user?.country_code ?? user?.country_phone_code ?? null}
408
- boxStyle={styles.phoneSelect}
409
- inputStyle={styles.phoneInputStyle}
410
- textStyle={{ color: theme.colors.textNormal, fontSize: 12, padding: 0 }}
411
- noDropIcon
412
- />
413
- {phoneUpdate && (
414
- <OText
415
- size={10}
416
- color={theme.colors.error}
417
- style={{ marginHorizontal: 10, textAlign: 'center' }}>
418
- {t('YOUR_PREVIOUS_CELLPHONE', 'Your previous cellphone')}:{' '}
419
- {user?.cellphone}
420
- </OText>
421
- )}
422
- </WrapperPhone>
423
- )}
420
+ <TouchableOpacity onPress={() => setShowDatePicker(!showDatePicker)}>
421
+ <OText size={14} lineHeight={21} color={theme.colors.textNormal} weight={'500'} style={{ marginTop: 6 }}>
422
+ {birthdate ? moment(birthdate).format('YYYY-MM-DD') : ''}
423
+ </OText>
424
+ </TouchableOpacity>
425
+ </WrapperBirthdate>
426
+ <DatePickerUI open={showDatePicker} birthdate={birthdate} onConfirm={_handleChangeDate} onCancel={() => setShowDatePicker(false)} />
427
+ </>
428
+ )}
429
+ {((!user?.guest_id && !!showInputPhoneNumber) || (isOrderTypeValidationField || user?.guest_id)) &&
430
+ ((requiredFields && requiredFields?.includes?.('cellphone')) || !requiredFields || !isCheckoutPlace) &&
431
+ (
432
+ <WrapperPhone>
433
+ <OText size={14} lineHeight={21} weight={'500'} color={theme.colors.textNormal}>{t('PHONE', 'Phone')}</OText>
434
+ <PhoneInputNumber
435
+ data={phoneInputData}
436
+ handleData={handleChangePhoneNumber}
437
+ changeCountry={(val: any) => changeCountry(val)}
438
+ defaultValue={phoneUpdate ? '' : cellphoneValue()}
439
+ defaultCode={user?.country_code ?? user?.country_phone_code ?? null}
440
+ defaultCodeFallback={user?.country_phone_code}
441
+ boxStyle={styles.phoneSelect}
442
+ inputStyle={styles.phoneInputStyle}
443
+ textStyle={{ color: theme.colors.textNormal, fontSize: 12, padding: 0 }}
444
+ noDropIcon
445
+ />
446
+ {phoneUpdate && (
447
+ <OText
448
+ size={10}
449
+ color={theme.colors.error}
450
+ style={{ marginHorizontal: 10, textAlign: 'center' }}>
451
+ {t('YOUR_PREVIOUS_CELLPHONE', 'Your previous cellphone')}:{' '}
452
+ {cellphoneValue()}
453
+ </OText>
454
+ )}
455
+ </WrapperPhone>
456
+ )}
424
457
  {!requiredFields && (
425
458
  <Controller
426
459
  control={control}
@@ -484,9 +517,7 @@ export const UserFormDetailsUI = (props: any) => {
484
517
  ? t('UPDATING', 'Updating...')
485
518
  : t('UPDATE', 'Update')
486
519
  }
487
- bgColor={theme.colors.primary}
488
- textStyle={{ color: theme.colors.white, fontSize: 14 }}
489
- borderColor={theme.colors.primary}
520
+ textStyle={{ fontSize: 14 }}
490
521
  isDisabled={formState.loading}
491
522
  imgRightSrc={null}
492
523
  style={{ borderRadius: 7.6, shadowOpacity: 0, width: '100%', borderWidth: 1, marginTop: 20, marginBottom: 20 }}
@@ -495,7 +526,7 @@ export const UserFormDetailsUI = (props: any) => {
495
526
  )}
496
527
  </>
497
528
  )}
498
- {requiredFields && (
529
+ {isCheckoutPlace && (
499
530
  <OButton
500
531
  text={
501
532
  formState.loading
@@ -504,12 +535,10 @@ export const UserFormDetailsUI = (props: any) => {
504
535
  ? t('SIGN_UP_AND_PLACE_ORDER', 'Sign up and place order')
505
536
  : t('CONTINUE', 'Continue'))
506
537
  }
507
- bgColor={theme.colors.primary}
508
538
  textStyle={{
509
539
  color: !user?.guest_id && (formState.loading || !isValid) ? theme.colors.primary : theme.colors.white,
510
540
  fontSize: 14
511
541
  }}
512
- borderColor={theme.colors.primary}
513
542
  isDisabled={!user?.guest_id && (formState.loading || !isValid)}
514
543
  imgRightSrc={null}
515
544
  style={{
@@ -523,10 +552,10 @@ export const UserFormDetailsUI = (props: any) => {
523
552
  borderColor: !user?.guest_id && (formState.loading || !isValid) ? theme.colors.white : theme.colors.primary,
524
553
  opacity: !user?.guest_id && (formState.loading || !isValid) ? 0.3 : 1,
525
554
  }}
526
- onClick={!user?.guest_id ? handleSubmit(onSubmit) : () => setIsModalOpen(true)}
555
+ onClick={handleSubmit(onSubmit)}
527
556
  />
528
557
  )}
529
- {isCheckout && !!user?.guest_id && (
558
+ {isCheckout && !!user?.guest_id && !requiredFields && (
530
559
  <TouchableOpacity style={{ marginTop: 10 }} onPress={() => handlePlaceOrderAsGuest()}>
531
560
  <OText color={theme.colors.primary} style={{ textAlign: 'center' }}>{t('PLACE_ORDER_AS_GUEST', 'Place order as guest')}</OText>
532
561
  </TouchableOpacity>
@@ -556,4 +585,3 @@ export const UserFormDetailsUI = (props: any) => {
556
585
  </>
557
586
  );
558
587
  };
559
-
@@ -44,6 +44,7 @@ const ProfileListUI = (props: ProfileParams) => {
44
44
  handleRemoveAccount,
45
45
  removeAccountState,
46
46
  handleChangePromotions,
47
+ appVersion
47
48
  } = props;
48
49
 
49
50
  const theme = useTheme();
@@ -151,7 +152,7 @@ const ProfileListUI = (props: ProfileParams) => {
151
152
  const detailProps = {
152
153
  goToBack: () => props.navigation?.canGoBack() && props.navigation.goBack(),
153
154
  onNavigationRedirect: (route: string, params: any) => props.navigation.navigate(route, params),
154
- handleRemoveAccount
155
+ handleRemoveAccount,
155
156
  }
156
157
 
157
158
  useEffect(() => {
@@ -271,6 +272,13 @@ const ProfileListUI = (props: ProfileParams) => {
271
272
  </Actions>
272
273
  </ListWrap>
273
274
  <WebsocketStatus />
275
+ {appVersion && (
276
+ <View
277
+ style={{ alignItems: 'center' }}
278
+ >
279
+ <OText>v{appVersion}</OText>
280
+ </View>
281
+ )}
274
282
  <OAlert
275
283
  open={confirm.open}
276
284
  title={confirm.title}
@@ -37,6 +37,7 @@ import {
37
37
  WrapperActions
38
38
  } from './styles'
39
39
 
40
+ const CONDITIONAL_CODES = [1787]
40
41
  const TIME_COUNTDOWN = 60 * 10 // 10 minutes
41
42
 
42
43
  const UserDetails = (props: any) => {
@@ -176,9 +177,18 @@ const UserVerificationUI = (props: any) => {
176
177
  setTimer(`${TIME_COUNTDOWN / 60}:00`)
177
178
  setIsSendCodeAgain(true)
178
179
  if (opt === 'phone') {
180
+ let cellphone = phoneState?.cellphone
181
+ let country_phone_code = phoneState?.country_phone_code
182
+
183
+ if (CONDITIONAL_CODES.includes(Number(country_phone_code))) {
184
+ if (Number(country_phone_code) === 1787) {
185
+ cellphone = `787${cellphone}`
186
+ country_phone_code = '1'
187
+ }
188
+ }
179
189
  sendVerifyPhoneCode({
180
- cellphone: phoneState?.cellphone,
181
- country_phone_code: phoneState?.country_phone_code
190
+ cellphone,
191
+ country_phone_code
182
192
  })
183
193
  return
184
194
  }
@@ -188,8 +198,8 @@ const UserVerificationUI = (props: any) => {
188
198
  const setupUserPhoneNumber = () => {
189
199
  if (!user || !user?.cellphone || !user?.country_phone_code) return
190
200
  setPhoneState({
191
- cellphone: user?.cellphone,
192
- country_phone_code: user?.country_phone_code,
201
+ cellphone: user?.country_code === "PR" ? user?.cellphone.replace('787', '') : user?.cellphone,
202
+ country_phone_code: user?.country_code === "PR" ? '1787' : user?.country_phone_code,
193
203
  formatted: `+${user?.country_phone_code} ${user?.cellphone}`
194
204
  })
195
205
  }
@@ -399,6 +409,7 @@ const UserVerificationUI = (props: any) => {
399
409
  defaultCode={phoneState?.country_phone_code.replace('+', '')}
400
410
  boxStyle={style.phoneSelect}
401
411
  inputStyle={style.phoneInputStyle}
412
+ defaultCodeFallback={phoneState?.country_phone_code.replace('+', '')}
402
413
  textStyle={{ color: theme.colors.textNormal, fontSize: 12, padding: 0 }}
403
414
  noDropIcon
404
415
  isDisabled
@@ -141,6 +141,11 @@ const WalletsUI = (props: any) => {
141
141
  btnStyle={{ paddingLeft: 0 }}
142
142
  isVertical={!hideWalletsTheme}
143
143
  hideArrowLeft={!hideWalletsTheme}
144
+ buttonProps={{
145
+ bgColor: theme.colors.white,
146
+ borderColor: theme.colors.white,
147
+ textStyle: { color: theme.colors.btnFont }
148
+ }}
144
149
  />
145
150
  {isChewLayout && !openHistory && (
146
151
  <OButton
@@ -304,13 +309,11 @@ const WalletsUI = (props: any) => {
304
309
  borderWidth: 0,
305
310
  width: 26,
306
311
  height: 26,
307
- backgroundColor: '#FFF',
308
- borderColor: '#FFF',
309
- shadowColor: '#FFF',
310
312
  paddingLeft: 0,
311
313
  paddingRight: 0,
312
314
  marginBottom: 10
313
315
  }}
316
+ useArrow
314
317
  onClick={() => setOpenHistory(false)}
315
318
  icon={AntDesignIcon}
316
319
  iconProps={{
@@ -143,15 +143,12 @@ const SocketStatusUI = (props: any) => {
143
143
  <OButton
144
144
  onClick={() => setOpenModal(false)}
145
145
  bgColor={theme.colors.white}
146
- borderColor={theme.colors.primary}
147
146
  textStyle={{ color: theme.colors.primary }}
148
147
  style={{ borderRadius: 8, height: 48 }}
149
148
  text={t('CLOSE', 'Close')}
150
149
  />
151
- <OButton
150
+ <OButton
152
151
  onClick={() => RNRestart.Restart()}
153
- borderColor={theme.colors.primary}
154
- textStyle={{ color: theme.colors.white }}
155
152
  style={{ borderRadius: 8, marginLeft: 16, height: 48 }}
156
153
  text={t('UPDATE', 'Update')}
157
154
  />
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react'
2
2
  import styled, { css } from 'styled-components/native'
3
- import { Alert } from 'react-native'
3
+ import { Alert, Vibration } from 'react-native'
4
4
  import { useLanguage } from 'ordering-components/native'
5
5
 
6
6
  const Wrapper = styled.TouchableOpacity`
@@ -41,6 +41,7 @@ const OAlert = (props: Props) => {
41
41
  }
42
42
 
43
43
  const handleClick = () => {
44
+ Vibration.vibrate(100)
44
45
  props.onClick && props.onClick()
45
46
  createTwoButtonAlert()
46
47
  }
@@ -85,6 +85,7 @@ interface Props {
85
85
  isDisabledWithSameStyles?: boolean;
86
86
  icon?: any;
87
87
  iconProps?: any
88
+ useArrow?: boolean;
88
89
  }
89
90
 
90
91
  const OButton = (props: Props): React.ReactElement => {
@@ -94,8 +95,8 @@ const OButton = (props: Props): React.ReactElement => {
94
95
  if (props.isDisabled) {
95
96
  return (
96
97
  <View style={props.parentStyle}>
97
- <StyledButtonDisabled style={props.style}>
98
- <StyledTextDisabled style={props.textStyle}>
98
+ <StyledButtonDisabled style={{ ...props.style, backgroundColor: theme.colors.disabled }}>
99
+ <StyledTextDisabled style={{ ...props.textStyle, color: theme.colors.backgroundGray200 }}>
99
100
  {props.text}
100
101
  </StyledTextDisabled>
101
102
  </StyledButtonDisabled>
@@ -119,7 +120,7 @@ const OButton = (props: Props): React.ReactElement => {
119
120
  style={{ width: props.isCircle ? 52 : props.style?.width, ...props.parentStyle }}
120
121
  disabled={props.isDisabledWithSameStyles}
121
122
  >
122
- <StyledButton style={{ ...props.style, backgroundColor: props.bgColor ?? theme?.general?.components?.buttons?.color, borderColor: props.borderColor ?? theme?.general?.components?.buttons?.color, borderRadius: parseInt(theme?.general?.components?.buttons?.borderRadius) || props.style?.borderRadius }}>
123
+ <StyledButton style={{ ...props.style, backgroundColor: props.useArrow ? theme.colors.white : props.bgColor ?? theme.colors.primary, borderColor: props.useArrow ? theme.colors.white : props.borderColor ?? theme.colors.primary, borderRadius: props.style?.borderRadius }}>
123
124
  {props.icon ? (
124
125
  <props.icon {...props.iconProps} />
125
126
  ) : null}
@@ -127,7 +128,7 @@ const OButton = (props: Props): React.ReactElement => {
127
128
  <OIcon style={props.imgLeftStyle} src={props.imgLeftSrc} color={theme.colors.textNormal} />
128
129
  ) : null}
129
130
  {props.text ? (
130
- <StyledText style={{ ...props.textStyle, color: props?.textStyle?.color ?? theme?.general?.components?.buttons?.buttonTextColor }}>{props.text}</StyledText>
131
+ <StyledText style={{ ...props.textStyle, color: props.useArrow ? theme.colors.btnFont : props?.textStyle?.color ?? theme.colors.white }}>{props.text}</StyledText>
131
132
  ) : null}
132
133
  {props.imgRightSrc ? (
133
134
  <EndImage style={props.imgRightStyle} source={props.imgRightSrc} />
@@ -3,7 +3,7 @@ import { ImageSourcePropType, ImageStyle, ViewStyle, TextInputProps, TextStyle }
3
3
  import styled from 'styled-components/native';
4
4
  import OIcon from './OIcon';
5
5
  import MaterialIcon from 'react-native-vector-icons/MaterialIcons'
6
- import { useTheme, css } from 'styled-components/native';
6
+ import { useTheme } from 'styled-components/native';
7
7
 
8
8
  const Input = styled.TextInput`
9
9
  flex-grow: 1;
@@ -53,9 +53,6 @@ const Wrapper = styled.Pressable`
53
53
  align-items: center;
54
54
  justify-content: center;
55
55
  width: 100%;
56
- ${(props: any) => props?.borderRadius && css`
57
- border-radius: ${typeof props?.borderRadius === 'string' ? props?.borderRadius : `${props?.borderRadius}px`};
58
- `}
59
56
  `;
60
57
 
61
58
  const OInput = (props: Props): React.ReactElement => {
@@ -70,7 +67,6 @@ const OInput = (props: Props): React.ReactElement => {
70
67
  ? props.borderColor
71
68
  : inputFocused ? theme.colors.primary : theme.colors.border,
72
69
  ...props.style,
73
- borderRadius: parseInt(theme?.general?.components?.inputs?.borderRadius) || props.style?.borderRadius
74
70
  }}>
75
71
  {props.icon ? (
76
72
  <OIcon
@@ -105,9 +101,9 @@ const OInput = (props: Props): React.ReactElement => {
105
101
  props.forwardRef && (props.forwardRef.current = e)
106
102
  }}
107
103
  style={{
108
- ...(theme?.general?.components?.inputs?.color && {
109
- color: theme?.general?.components?.inputs?.color
110
- }),
104
+ ...(theme?.general?.components?.inputs?.color && {
105
+ color: theme?.general?.components?.inputs?.color
106
+ }),
111
107
  ...props?.inputStyle
112
108
  }}
113
109
  onFocus={() => setInputFocused(true)}
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { Modal, StyleSheet, Text, SafeAreaView, View, TouchableOpacity, Platform } from "react-native";
3
3
  import styled from 'styled-components/native';
4
4
  import AntDesignIcon from 'react-native-vector-icons/AntDesign'
5
-
5
+ import { Toast } from '../../../../../src/components/shared/OToast'
6
6
  interface Props {
7
7
  open?: boolean;
8
8
  title?: string;
@@ -22,6 +22,7 @@ interface Props {
22
22
  styleCloseButton?: any,
23
23
  isAvoidKeyBoardView?: boolean;
24
24
  styleContainerCloseButton?: any;
25
+ showToastInsideModal?: boolean;
25
26
  }
26
27
  const KeyboardView = styled.KeyboardAvoidingView`
27
28
  flex-grow: 1;
@@ -47,7 +48,8 @@ const OModal = (props: Props): React.ReactElement => {
47
48
  style,
48
49
  styleCloseButton,
49
50
  styleContainerCloseButton,
50
- isAvoidKeyBoardView
51
+ isAvoidKeyBoardView,
52
+ showToastInsideModal
51
53
  } = props
52
54
 
53
55
  const renderSafeAreaView = () => (
@@ -94,6 +96,9 @@ const OModal = (props: Props): React.ReactElement => {
94
96
  onRequestClose={() => onClose && onClose()}
95
97
  style={{ height: '100%', flex: 1, position: 'absolute', ...style, zIndex: 9999 }}
96
98
  >
99
+ {showToastInsideModal && (
100
+ <Toast />
101
+ )}
97
102
  {isAvoidKeyBoardView ? (
98
103
  <KeyboardView
99
104
  enabled
@@ -25,7 +25,8 @@ export interface LoginParams {
25
25
  generateOtpCode: (values?: any) => void,
26
26
  useLoginOtpEmail?: boolean,
27
27
  useLoginOtpCellphone?: boolean,
28
- useLoginOtp?: boolean
28
+ useLoginOtp?: boolean,
29
+ setCellphoneStartZero?: any
29
30
  }
30
31
  export interface ProfileParams {
31
32
  navigation?: any;
@@ -50,6 +51,7 @@ export interface ProfileParams {
50
51
  removeAccountState?: any;
51
52
  handleChangePromotions?: any;
52
53
  notificationsGroup?: any;
54
+ appVersion?: string
53
55
  }
54
56
 
55
57
  export interface AddressListParams {
@@ -130,6 +132,7 @@ export interface SignupParams {
130
132
  setSignUpTab?: (in1: string) => void;
131
133
  setWillVerifyOtpState?: (in1: boolean) => void;
132
134
  setOtpState?: (in1: string) => void;
135
+ setCellphoneStartZero?: any
133
136
  }
134
137
 
135
138
  export interface PhoneInputParams {
@@ -147,7 +150,8 @@ export interface PhoneInputParams {
147
150
  isDisabled?: any;
148
151
  isStartValidation?: any;
149
152
  changeCountry?: any;
150
- updateStateWithSubmit?: boolean
153
+ updateStateWithSubmit?: boolean,
154
+ defaultCodeFallback?: number
151
155
  }
152
156
 
153
157
  export interface LanguageSelectorParams {
@@ -451,7 +455,8 @@ export interface ProductItemAccordionParams {
451
455
  onEditProduct?: (product: any) => void,
452
456
  offsetDisabled?: any,
453
457
  isFromCheckout?: any,
454
- isDisabledEdit?: any
458
+ isDisabledEdit?: any,
459
+ productInfo?: any
455
460
  }
456
461
  export interface ReviewOrderParams {
457
462
  order?: { id: number, business_id: number, logo: string, driver: any, products: Array<any>, review: any, user_review: any };
@@ -607,7 +612,7 @@ export interface UpsellingProductsParams {
607
612
  business?: any;
608
613
  businessId?: number;
609
614
  cartProducts?: Array<any>;
610
- handleUpsellingPage: (cart ?: any) => void;
615
+ handleUpsellingPage: (cart?: any) => void;
611
616
  openUpselling: boolean;
612
617
  canOpenUpselling?: boolean;
613
618
  setCanOpenUpselling?: (value: any) => void;
@@ -637,6 +642,9 @@ export interface GoogleMapsParams {
637
642
  isIntGeoCoder: boolean,
638
643
  businessZones?: any
639
644
  delta?: number
645
+ setAutoCompleteAddress?: (val: boolean) => void,
646
+ autoCompleteAddress?: boolean,
647
+ manualZoom?: boolean
640
648
  }
641
649
 
642
650
  export interface HelpParams {