ordering-ui-react-native 0.21.83 → 0.21.84-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 (168) 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/PaymentOptionsWebView/index.tsx +1 -0
  5. package/src/components/StripeMethodForm/index.tsx +6 -4
  6. package/src/components/VerifyPhone/styles.tsx +1 -2
  7. package/src/types/index.tsx +3 -1
  8. package/themes/business/index.tsx +4 -0
  9. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  10. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  11. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  12. package/themes/business/src/components/BusinessProductList/index.tsx +2 -1
  13. package/themes/business/src/components/Chat/index.tsx +3 -1
  14. package/themes/business/src/components/DriverMap/index.tsx +44 -27
  15. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  16. package/themes/business/src/components/Home/index.tsx +5 -1
  17. package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
  18. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  19. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  20. package/themes/business/src/components/MapView/index.tsx +36 -17
  21. package/themes/business/src/components/NewOrderNotification/index.tsx +64 -28
  22. package/themes/business/src/components/OrderDetails/Business.tsx +65 -7
  23. package/themes/business/src/components/OrderDetails/Delivery.tsx +35 -20
  24. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +110 -40
  25. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +50 -24
  26. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  27. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +221 -0
  28. package/themes/business/src/components/OrderSummary/index.tsx +223 -73
  29. package/themes/business/src/components/OrdersListManager/index.tsx +9 -1
  30. package/themes/business/src/components/OrdersOption/index.tsx +247 -159
  31. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  32. package/themes/business/src/components/PreviousMessages/index.tsx +20 -3
  33. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +27 -16
  34. package/themes/business/src/components/PreviousOrders/index.tsx +5 -3
  35. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  36. package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
  37. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  38. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  39. package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
  40. package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
  41. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  42. package/themes/business/src/components/Sessions/index.tsx +187 -0
  43. package/themes/business/src/components/Sessions/styles.tsx +20 -0
  44. package/themes/business/src/components/StoresList/index.tsx +2 -2
  45. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  46. package/themes/business/src/components/UserProfileForm/index.tsx +63 -30
  47. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  48. package/themes/business/src/components/shared/OInput.tsx +2 -0
  49. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  50. package/themes/business/src/hooks/useLocation.tsx +5 -4
  51. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  52. package/themes/business/src/types/index.tsx +23 -5
  53. package/themes/business/src/utils/index.tsx +19 -1
  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 +6 -0
  58. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  59. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  60. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  61. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  62. package/themes/original/index.tsx +13 -1
  63. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  64. package/themes/original/src/components/AddressForm/index.tsx +32 -17
  65. package/themes/original/src/components/AddressList/index.tsx +8 -7
  66. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  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/BusinessController/index.tsx +12 -7
  70. package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
  71. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
  72. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
  73. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  74. package/themes/original/src/components/BusinessPreorder/index.tsx +20 -15
  75. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +5 -5
  76. package/themes/original/src/components/BusinessProductsList/index.tsx +2 -2
  77. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  78. package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
  79. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  80. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  81. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +1 -1
  82. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  83. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  84. package/themes/original/src/components/Cart/index.tsx +43 -15
  85. package/themes/original/src/components/CartContent/index.tsx +21 -8
  86. package/themes/original/src/components/Checkout/index.tsx +108 -60
  87. package/themes/original/src/components/CitiesControl/index.tsx +0 -3
  88. package/themes/original/src/components/CouponControl/index.tsx +1 -3
  89. package/themes/original/src/components/DriverTips/index.tsx +1 -3
  90. package/themes/original/src/components/Favorite/index.tsx +1 -5
  91. package/themes/original/src/components/FavoriteList/index.tsx +0 -1
  92. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
  93. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  94. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  95. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  96. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  97. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  98. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  99. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  100. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  101. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +82 -0
  102. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  103. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  104. package/themes/original/src/components/Help/index.tsx +2 -0
  105. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  106. package/themes/original/src/components/Home/index.tsx +2 -10
  107. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  108. package/themes/original/src/components/LoginForm/index.tsx +4 -7
  109. package/themes/original/src/components/MessageListing/index.tsx +1 -0
  110. package/themes/original/src/components/Messages/index.tsx +8 -7
  111. package/themes/original/src/components/MomentOption/index.tsx +13 -2
  112. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  113. package/themes/original/src/components/MultiCheckout/index.tsx +139 -87
  114. package/themes/original/src/components/MultiOrdersDetails/index.tsx +2 -1
  115. package/themes/original/src/components/MyOrders/index.tsx +21 -26
  116. package/themes/original/src/components/NavBar/index.tsx +4 -2
  117. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  118. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  119. package/themes/original/src/components/OrderDetails/OrderEta.tsx +1 -1
  120. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +9 -9
  121. package/themes/original/src/components/OrderDetails/index.tsx +32 -13
  122. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  123. package/themes/original/src/components/OrderProgress/index.tsx +22 -3
  124. package/themes/original/src/components/OrderSummary/index.tsx +28 -9
  125. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  126. package/themes/original/src/components/OrdersOption/index.tsx +2 -4
  127. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  128. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  129. package/themes/original/src/components/PaymentOptions/index.tsx +17 -9
  130. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  131. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  132. package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
  133. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  134. package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -49
  135. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  136. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  137. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  138. package/themes/original/src/components/Promotions/index.tsx +6 -9
  139. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  140. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  141. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  142. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  143. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  144. package/themes/original/src/components/Sessions/index.tsx +3 -3
  145. package/themes/original/src/components/SignupForm/index.tsx +86 -78
  146. package/themes/original/src/components/SingleOrderCard/index.tsx +7 -5
  147. package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
  148. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  149. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  150. package/themes/original/src/components/StripeCardsList/index.tsx +10 -3
  151. package/themes/original/src/components/StripeElementsForm/index.tsx +77 -60
  152. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  153. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  154. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  155. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  156. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  157. package/themes/original/src/components/UserDetails/index.tsx +3 -2
  158. package/themes/original/src/components/UserFormDetails/index.tsx +155 -131
  159. package/themes/original/src/components/UserProfile/index.tsx +11 -2
  160. package/themes/original/src/components/Wallets/index.tsx +6 -3
  161. package/themes/original/src/components/WebsocketStatus/index.tsx +169 -0
  162. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  163. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  164. package/themes/original/src/components/shared/OButton.tsx +5 -4
  165. package/themes/original/src/components/shared/OInput.tsx +4 -8
  166. package/themes/original/src/types/index.tsx +5 -1
  167. package/themes/original/src/utils/index.tsx +12 -1
  168. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -36,7 +36,8 @@ export const UserFormDetailsUI = (props: any) => {
36
36
  handleCancelEdit,
37
37
  toggleIsEdit,
38
38
  isCheckout,
39
- isAlsea
39
+ isAlsea,
40
+ allowDriverUpdateData
40
41
  } = props;
41
42
 
42
43
  const theme = useTheme();
@@ -66,9 +67,9 @@ export const UserFormDetailsUI = (props: any) => {
66
67
  const rules: any = {
67
68
  required: isRequiredField(field.code)
68
69
  ? t(
69
- `VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`,
70
- `${field.name} is required`,
71
- ).replace('_attribute_', t(field.name, field.code))
70
+ `VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`,
71
+ `${field.name} is required`,
72
+ ).replace('_attribute_', t(field.name, field.code))
72
73
  : null,
73
74
  };
74
75
  if (field.code && field.code === 'email') {
@@ -261,90 +262,93 @@ export const UserFormDetailsUI = (props: any) => {
261
262
  sortInputFields({ values: validationFields?.fields?.checkout })
262
263
  .length > 0 && (
263
264
  <UDWrapper>
264
- {sortInputFields({
265
- values: validationFields.fields?.checkout,
266
- }).map(
267
- (field: any) =>
268
- showField &&
269
- showField(field.code) &&
270
- !isAlsea
271
- && (
272
- <React.Fragment key={field.id}>
273
- <OText style={styles.label}>
274
- {t(field?.code.toUpperCase(), field?.name)}
275
- </OText>
265
+ {allowDriverUpdateData && (
266
+ <>
267
+ {sortInputFields({
268
+ values: validationFields.fields?.checkout,
269
+ }).map(
270
+ (field: any) =>
271
+ showField &&
272
+ showField(field.code) &&
273
+ !isAlsea
274
+ && (
275
+ <React.Fragment key={field.id}>
276
+ <OText style={styles.label}>
277
+ {t(field?.code.toUpperCase(), field?.name)}
278
+ </OText>
276
279
 
277
- <Controller
278
- key={field.id}
279
- control={control}
280
- render={() => (
281
- <OInput
282
- name={field.code}
283
- placeholder={t(
284
- field.code.toUpperCase(),
285
- field?.name,
286
- )}
287
- placeholderTextColor={theme.colors.arrowColor}
288
- style={styles.inputStyle}
289
- icon={
290
- field.code === 'email'
291
- ? theme.images.general.email
292
- : theme.images.general.user
293
- }
294
- autoCapitalize={
295
- field.code === 'email' ? 'none' : 'sentences'
296
- }
297
- isDisabled={!isEdit}
298
- value={
299
- formState?.changes[field.code] ??
300
- (user && user[field.code]) ??
301
- ''
302
- }
303
- onChange={(val: any) => {
304
- field.code !== 'email'
305
- ? setValue(field.code, val.target.value)
306
- : setValue(
307
- field.code,
308
- val.target.value
309
- .toLowerCase()
310
- .replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''),
311
- );
312
- field.code !== 'email'
313
- ? handleChangeInput(val)
314
- : handleChangeInput({
315
- target: {
316
- name: 'email',
317
- value: val.target.value
280
+ <Controller
281
+ key={field.id}
282
+ control={control}
283
+ render={() => (
284
+ <OInput
285
+ name={field.code}
286
+ placeholder={t(
287
+ field.code.toUpperCase(),
288
+ field?.name,
289
+ )}
290
+ placeholderTextColor={theme.colors.arrowColor}
291
+ style={styles.inputStyle}
292
+ icon={
293
+ field.code === 'email'
294
+ ? theme.images.general.email
295
+ : theme.images.general.user
296
+ }
297
+ autoCapitalize={
298
+ field.code === 'email' ? 'none' : 'sentences'
299
+ }
300
+ isDisabled={!isEdit}
301
+ value={
302
+ formState?.changes[field.code] ??
303
+ (user && user[field.code]) ??
304
+ ''
305
+ }
306
+ onChange={(val: any) => {
307
+ field.code !== 'email'
308
+ ? setValue(field.code, val.target.value)
309
+ : setValue(
310
+ field.code,
311
+ val.target.value
318
312
  .toLowerCase()
319
- .replace(
320
- /[&,()%";:ç?<>{}\\[\]\s]/g,
321
- '',
322
- ),
323
- },
324
- });
325
- }}
326
- autoCorrect={field.code === 'email' && false}
327
- type={
328
- field.code === 'email'
329
- ? 'email-address'
330
- : 'default'
331
- }
332
- returnKeyType="done"
333
- autoCompleteType={
334
- field.code === 'email' ? 'email' : 'off'
335
- }
336
- selectionColor={theme.colors.primary}
337
- color={theme.colors.textGray}
313
+ .replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''),
314
+ );
315
+ field.code !== 'email'
316
+ ? handleChangeInput(val)
317
+ : handleChangeInput({
318
+ target: {
319
+ name: 'email',
320
+ value: val.target.value
321
+ .toLowerCase()
322
+ .replace(
323
+ /[&,()%";:ç?<>{}\\[\]\s]/g,
324
+ '',
325
+ ),
326
+ },
327
+ });
328
+ }}
329
+ autoCorrect={field.code === 'email' && false}
330
+ type={
331
+ field.code === 'email'
332
+ ? 'email-address'
333
+ : 'default'
334
+ }
335
+ returnKeyType="done"
336
+ autoCompleteType={
337
+ field.code === 'email' ? 'email' : 'off'
338
+ }
339
+ selectionColor={theme.colors.primary}
340
+ color={theme.colors.textGray}
341
+ />
342
+ )}
343
+ name={field.code}
344
+ rules={getInputRules(field)}
345
+ defaultValue={user && user[field.code]}
338
346
  />
339
- )}
340
- name={field.code}
341
- rules={getInputRules(field)}
342
- defaultValue={user && user[field.code]}
343
- />
344
- </React.Fragment>
345
- ),
347
+ </React.Fragment>
348
+ ),
349
+ )}
350
+ </>
346
351
  )}
347
-
348
352
  <OText style={styles.label}>{t('PASSWORD', 'Password')}</OText>
349
353
 
350
354
  <Controller
@@ -445,7 +449,7 @@ export const UserFormDetailsUI = (props: any) => {
445
449
  </OText>
446
450
  )}
447
451
 
448
- {!!showInputPhoneNumber && !isAlsea && (
452
+ {!!showInputPhoneNumber && !isAlsea && allowDriverUpdateData && (
449
453
  <WrapperPhone>
450
454
  <PhoneInputNumber
451
455
  data={phoneInputData}
@@ -487,28 +491,28 @@ export const UserFormDetailsUI = (props: any) => {
487
491
  isEdit) ||
488
492
  (watchPassword?.length > 0 && watchConfirmPassword?.length > 0) ||
489
493
  formState?.loading) && (
490
- <View style={{ flex: 1, marginLeft: 5 }}>
491
- <OButton
492
- text={
493
- formState.loading
494
- ? t('UPDATING', 'Updating')
495
- : t('UPDATE', 'Update')
496
- }
497
- bgColor={theme.colors.primary}
498
- textStyle={{
499
- ...styles.btnText,
500
- color: formState.loading
501
- ? theme.colors.textGray
502
- : theme.colors.white,
503
- }}
504
- borderColor={theme.colors.primary}
505
- isDisabled={formState.loading}
506
- imgRightSrc={null}
507
- style={styles.editButton}
508
- onClick={handleSubmit(onSubmit)}
509
- />
510
- </View>
511
- )}
494
+ <View style={{ flex: 1, marginLeft: 5 }}>
495
+ <OButton
496
+ text={
497
+ formState.loading
498
+ ? t('UPDATING', 'Updating')
499
+ : t('UPDATE', 'Update')
500
+ }
501
+ bgColor={theme.colors.primary}
502
+ textStyle={{
503
+ ...styles.btnText,
504
+ color: formState.loading
505
+ ? theme.colors.textGray
506
+ : theme.colors.white,
507
+ }}
508
+ borderColor={theme.colors.primary}
509
+ isDisabled={formState.loading}
510
+ imgRightSrc={null}
511
+ style={styles.editButton}
512
+ onClick={handleSubmit(onSubmit)}
513
+ />
514
+ </View>
515
+ )}
512
516
  </EditButton>
513
517
  )}
514
518
  </>
@@ -11,6 +11,8 @@ import {
11
11
  useToast,
12
12
  useLanguage,
13
13
  useUtils,
14
+ useConfig,
15
+ useValidationFields
14
16
  } from 'ordering-components/native';
15
17
  import {
16
18
  CenterView,
@@ -23,6 +25,7 @@ import { LogoutButton } from '../LogoutButton';
23
25
  import { LanguageSelector } from '../LanguageSelector';
24
26
  import { UserFormDetailsUI } from '../UserFormDetails';
25
27
  import { DriverSchedule } from '../DriverSchedule'
28
+ import { PrinterSettings } from '../PrinterSettings'
26
29
  import ToggleSwitch from 'toggle-switch-react-native';
27
30
  import { UDWrapper } from '../UserFormDetails/styles';
28
31
  import {
@@ -47,17 +50,20 @@ const ProfileUI = (props: ProfileParams) => {
47
50
  cleanFormState,
48
51
  handleToggleAvalaibleStatusDriver,
49
52
  isAlsea,
50
- isHideDriverStatus
53
+ isShowDriverStatus,
54
+ navigation
51
55
  } = props;
52
56
 
53
57
  const [{ user, sessionLoading }] = useSession();
54
58
  const [, t] = useLanguage();
55
59
  const [, { showToast }] = useToast();
56
60
  const [{ optimizeImage }] = useUtils();
61
+ const [{ configs }] = useConfig();
62
+ const [{ loading }, { loadOriginalValidationFields }] = useValidationFields()
57
63
  const { errors } = useForm();
58
64
  const theme = useTheme();
59
65
 
60
- const [phoneInputData, setPhoneInputData] = useState({
66
+ const [phoneInputData, setPhoneInputData] = useState<any>({
61
67
  error: '',
62
68
  phone: {
63
69
  country_phone_code: null,
@@ -69,14 +75,11 @@ const ProfileUI = (props: ProfileParams) => {
69
75
  const [userPhoneNumber, setUserPhoneNumber] = useState<any>(null);
70
76
  const [phoneToShow, setPhoneToShow] = useState('');
71
77
  const [openModal, setOpenModal] = useState(false)
72
-
78
+ const allowDriverUpdateData = user?.level !== 4 || configs?.allow_driver_update_data?.value === "1"
73
79
  useEffect(() => {
74
80
  if (phoneInputData.phone.cellphone) {
75
- const codeNumberPhone = phoneInputData.phone.cellphone.slice(0, 3);
76
- const numberPhone = phoneInputData.phone.cellphone.slice(
77
- 3,
78
- phoneInputData.phone.cellphone?.length,
79
- );
81
+ const codeNumberPhone = phoneInputData.phone.country_phone_code
82
+ const numberPhone = phoneInputData.phone.cellphone
80
83
  setPhoneToShow(`(${codeNumberPhone}) ${numberPhone}`);
81
84
  }
82
85
  }, [phoneInputData.phone.cellphone]);
@@ -115,14 +118,14 @@ const ProfileUI = (props: ProfileParams) => {
115
118
  includeBase64: true,
116
119
  },
117
120
  (image: any) => {
118
- const response = image?.assets[0];
119
- if (response.didCancel) {
121
+ const response = image?.assets?.[0];
122
+ if (response?.didCancel) {
120
123
  console.log('User cancelled image picker');
121
- } else if (response.errorMessage) {
124
+ } else if (response?.errorMessage) {
122
125
  console.log('ImagePicker Error: ', response.errorMessage);
123
126
  showToast(ToastType.Error, response.errorMessage);
124
127
  } else {
125
- if (response.uri) {
128
+ if (response?.uri) {
126
129
  const url = `data:${response.type};base64,${response.base64}`;
127
130
  handleButtonUpdateClick(null, true, url);
128
131
  } else {
@@ -258,15 +261,17 @@ const ProfileUI = (props: ProfileParams) => {
258
261
 
259
262
  return (
260
263
  <>
261
- {validationFields?.error && (
264
+ {validationFields?.error && !loading && (
262
265
  <NotFoundSource
263
266
  content={
264
- validationFields?.error[0] ||
265
- validationFields?.error[0]?.message ||
267
+ validationFields?.error?.[0] ||
268
+ validationFields?.error?.[0]?.message ||
266
269
  t('NETWORK_ERROR', 'Network Error')
267
270
  }
268
271
  image={theme.images.general.notFound}
269
272
  conditioned={false}
273
+ onClickButton={() => loadOriginalValidationFields({ forceLoading: true })}
274
+ btnTitle={t('REFRESH_PROFILE', 'Refresh profile')}
270
275
  />
271
276
  )}
272
277
 
@@ -351,14 +356,15 @@ const ProfileUI = (props: ProfileParams) => {
351
356
  height={150}
352
357
  style={{ borderRadius: 7.2 }}
353
358
  />
354
-
355
- <OIconButton
356
- icon={theme.images.general.camera}
357
- borderColor={theme.colors.clear}
358
- iconStyle={{ width: 21, height: 21 }}
359
- style={{ maxWidth: 40 }}
360
- onClick={() => handleImagePicker()}
361
- />
359
+ {allowDriverUpdateData && (
360
+ <OIconButton
361
+ icon={theme.images.general.camera}
362
+ borderColor={theme.colors.clear}
363
+ iconStyle={{ width: 21, height: 21 }}
364
+ style={{ maxWidth: 40 }}
365
+ onClick={() => handleImagePicker()}
366
+ />
367
+ )}
362
368
  </CenterView>
363
369
 
364
370
  {user?.level === 4 && (
@@ -369,13 +375,13 @@ const ProfileUI = (props: ProfileParams) => {
369
375
  adjustsFontSizeToFit
370
376
  style={{ ...styles.label, paddingHorizontal: 0 }}>
371
377
  {t(
372
- `${isHideDriverStatus ? 'NOT_' : ''}AVAILABLE_TO_RECEIVE_ORDERS`,
373
- `${isHideDriverStatus ? 'You are not ' : ''}Available to receive orders`
378
+ `${!isShowDriverStatus ? 'NOT_' : ''}AVAILABLE_TO_RECEIVE_ORDERS`,
379
+ `${!isShowDriverStatus ? 'You are not ' : ''}Available to receive orders`
374
380
  )}
375
381
  </OText>
376
382
  </View>
377
383
 
378
- {!isHideDriverStatus && (
384
+ {isShowDriverStatus && (
379
385
  <>
380
386
  {userState.loadingDriver ? (
381
387
  <ActivityIndicator size="small" color={theme.colors.primary} />
@@ -458,7 +464,6 @@ const ProfileUI = (props: ProfileParams) => {
458
464
  />
459
465
 
460
466
  <OText style={styles.label}>{t('PHONE', 'Phone')}</OText>
461
-
462
467
  <OInput
463
468
  isSecured={true}
464
469
  placeholder={
@@ -481,6 +486,7 @@ const ProfileUI = (props: ProfileParams) => {
481
486
  handleCancelEdit={handleCancelEdit}
482
487
  toggleIsEdit={toggleIsEdit}
483
488
  isAlsea={isAlsea}
489
+ allowDriverUpdateData={allowDriverUpdateData}
484
490
  />
485
491
  </View>
486
492
  )}
@@ -498,9 +504,34 @@ const ProfileUI = (props: ProfileParams) => {
498
504
  />
499
505
  </EditButton>
500
506
  )}
501
- <Pressable style={{ marginBottom: 10 }} onPress={() => setOpenModal(true)}>
507
+ {!props.isBusinessApp ? (
508
+ <Pressable style={{ marginBottom: 10 }} onPress={() => setOpenModal(true)}>
509
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
510
+ <OText size={16}>{t('SCHEDULE', 'Schedule')}</OText>
511
+ <AntDesignIcon size={18} name='right' />
512
+ </View>
513
+ <View style={{
514
+ borderBottomColor: theme.colors.tabBar,
515
+ borderBottomWidth: 1,
516
+ marginTop: 10
517
+ }} />
518
+ </Pressable>
519
+ ) : (
520
+ <Pressable style={{ marginBottom: 10 }} onPress={() => navigation.navigate('PrinterSetup')}>
521
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
522
+ <OText size={16}>{t('PRINTER_SETTINGS', 'Printer Settings')}</OText>
523
+ <AntDesignIcon size={18} name='right' />
524
+ </View>
525
+ <View style={{
526
+ borderBottomColor: theme.colors.tabBar,
527
+ borderBottomWidth: 1,
528
+ marginTop: 10
529
+ }} />
530
+ </Pressable>
531
+ )}
532
+ <Pressable style={{ marginBottom: 10 }} onPress={() => navigation.navigate('Sessions')}>
502
533
  <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
503
- <OText size={16}>{t('SCHEDULE', 'Schedule')}</OText>
534
+ <OText size={16}>{t('SESSIONS', 'Sessions')}</OText>
504
535
  <AntDesignIcon size={18} name='right' />
505
536
  </View>
506
537
  <View style={{
@@ -520,7 +551,9 @@ const ProfileUI = (props: ProfileParams) => {
520
551
  entireModal
521
552
  hideIcons
522
553
  >
523
- <DriverSchedule schedule={user?.schedule} />
554
+ {!props.isBusinessApp && (
555
+ <DriverSchedule schedule={user?.schedule} />
556
+ )}
524
557
  </OModal>
525
558
  </ScrollView>
526
559
  )}
@@ -1,6 +1,6 @@
1
1
  import React, { useState } from 'react'
2
2
  import { useLanguage, useUtils, WebsocketStatus as WebsocketStatusController } from 'ordering-components/native'
3
- import { TouchableOpacity, View, StyleSheet } from 'react-native'
3
+ import { TouchableOpacity, View, StyleSheet, Platform } from 'react-native'
4
4
  import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons';
5
5
  import { useTheme } from 'styled-components/native'
6
6
  import RNRestart from 'react-native-restart'
@@ -37,7 +37,7 @@ const SocketStatusUI = (props: any) => {
37
37
  paddingLeft: 0,
38
38
  paddingRight: 0,
39
39
  marginBottom: 30,
40
- marginTop: 30
40
+ marginTop: Platform.OS === 'ios' ? 60 : 30
41
41
  },
42
42
  })
43
43
 
@@ -64,6 +64,7 @@ interface Props extends TextInputProps {
64
64
  onSubmitEditing?: any;
65
65
  blurOnSubmit?: any;
66
66
  color?: any;
67
+ isValueSync?: boolean
67
68
  }
68
69
 
69
70
  const OInput = (props: Props): React.ReactElement => {
@@ -118,6 +119,7 @@ const OInput = (props: Props): React.ReactElement => {
118
119
  selectionColor={props.selectionColor}
119
120
  color={props.color}
120
121
  maxLength={props.maxLength || 1000}
122
+ value={props.isValueSync && props.value}
121
123
  />
122
124
 
123
125
  {props.iconRight && (
@@ -4,8 +4,10 @@ import { useTheme } from 'styled-components/native';
4
4
 
5
5
  const Wrapper = styled.View`
6
6
  border-radius: 10px;
7
- border: 1px solid ${(props: any) => props.theme.colors.lightGray};
7
+ border-width: 1px;
8
+ border-color: ${(props: any) => props.theme.colors.lightGray};
8
9
  `;
10
+
9
11
  const Inner = styled.TextInput`
10
12
  height: 100px;
11
13
  padding: 5px 10px 5px 10px;
@@ -29,16 +31,13 @@ const OTextarea = (props: Props) => {
29
31
  ref={props.textTareaRef}
30
32
  onFocus={() => props.onFocus()}
31
33
  onChangeText={(txt: any) => props.onChange(txt)}
32
- textAlignVertical={'top'}
33
34
  placeholder={props.placeholder}
34
- placeholderTextColor={theme.colors.arrowColor}
35
- numberOfLines={props.lines}
36
- underlineColorAndroid={'transparent'}
37
- value={props.value}
35
+ placeholderTextColor={theme.colors.lightGray}
36
+ numberOfLines={props.lines}
37
+ underlineColorAndroid={'transparent'}
38
+ value={props.value}
39
+ multiline={true}
38
40
  autoFocus={props.autoFocus}
39
- multiline={true}
40
- selectionColor={theme.colors.primary}
41
- color={theme.colors.textGray}
42
41
  />
43
42
  </Wrapper>
44
43
  );
@@ -48,8 +48,8 @@ export const useLocation = () => {
48
48
  GeoLocation.getCurrentPosition(
49
49
  ({ coords }) => {
50
50
  resolve({
51
- latitude: coords.latitude,
52
- longitude: coords.longitude,
51
+ latitude: typeof coords.latitude === 'number' && !Number.isNaN(coords.latitude) ? coords.latitude : 0,
52
+ longitude: typeof coords.longitude === 'number' && !Number.isNaN(coords.longitude) ? coords.longitude : 0,
53
53
  speed: coords.speed,
54
54
  });
55
55
  },
@@ -63,9 +63,10 @@ export const useLocation = () => {
63
63
  watchId.current = GeoLocation.watchPosition(
64
64
  ({ coords }) => {
65
65
  if (!isMounted.current) return;
66
+ if (typeof coords.latitude !== 'number' || typeof coords.longitude !== 'number') return
66
67
  const location: Location = {
67
- latitude: coords.latitude,
68
- longitude: coords.longitude,
68
+ latitude: coords.latitude || 0,
69
+ longitude: coords.longitude || 0,
69
70
  speed: coords.speed,
70
71
  };
71
72
  setUserLocation(location);
@@ -1,12 +1,12 @@
1
- import React, { useState } from 'react';
1
+ import React, { useState, useEffect } from 'react';
2
2
  import {
3
3
  Dimensions,
4
4
  Platform,
5
5
  StatusBar,
6
- StyleSheet,
7
6
  View,
8
7
  } from 'react-native';
9
- import styled from 'styled-components/native';
8
+ import styled, { useTheme } from 'styled-components/native';
9
+ import { useNetInfo } from '@react-native-community/netinfo';
10
10
 
11
11
  export const SafeAreaContainer = styled.SafeAreaView`
12
12
  flex: 1;
@@ -14,6 +14,10 @@ export const SafeAreaContainer = styled.SafeAreaView`
14
14
  `;
15
15
 
16
16
  export const SafeAreaContainerLayout = (props: any) => {
17
+ const theme = useTheme();
18
+ const netInfo = useNetInfo()
19
+
20
+ const [statusColor, setStatusColor] = useState<string | null>(null)
17
21
  const [orientation, setOrientation] = useState(
18
22
  Dimensions.get('window').width < Dimensions.get('window').height
19
23
  ? 'Portrait'
@@ -28,22 +32,34 @@ export const SafeAreaContainerLayout = (props: any) => {
28
32
  }
29
33
  });
30
34
 
35
+ useEffect(() => {
36
+ if (netInfo.isConnected === false) {
37
+ setStatusColor(theme.colors.danger500)
38
+ }
39
+
40
+ if (netInfo.isConnected && statusColor) {
41
+ setStatusColor(theme.colors.success500)
42
+ setTimeout(() => {
43
+ setStatusColor(null)
44
+ }, 2000);
45
+ }
46
+ }, [netInfo.isConnected])
47
+
31
48
  return (
32
- <>
33
- <SafeAreaContainer>
34
- <View
35
- style={{
36
- paddingHorizontal: 30,
37
- paddingTop: 30,
38
- paddingBottom: 0,
39
- flex: 1,
40
- }}>
41
- <StatusBar
42
- barStyle={Platform.OS === 'ios' ? 'dark-content' : 'default'}
43
- />
44
- {props.children}
45
- </View>
46
- </SafeAreaContainer>
47
- </>
49
+ <SafeAreaContainer>
50
+ <View
51
+ style={{
52
+ paddingHorizontal: 30,
53
+ paddingTop: 0,
54
+ paddingBottom: 0,
55
+ flex: 1,
56
+ }}>
57
+ <StatusBar
58
+ barStyle={Platform.OS === 'ios' ? 'dark-content' : 'default'}
59
+ {...statusColor && ({ backgroundColor: statusColor })}
60
+ />
61
+ {props.children}
62
+ </View>
63
+ </SafeAreaContainer>
48
64
  );
49
65
  };