ordering-ui-react-native 0.16.68 → 0.16.69-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 (201) hide show
  1. package/package.json +6 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +8 -14
  5. package/src/components/BusinessInformation/index.tsx +19 -4
  6. package/src/components/BusinessInformation/styles.tsx +2 -2
  7. package/src/components/BusinessProductsList/index.tsx +10 -10
  8. package/src/components/BusinessesListing/index.tsx +1 -1
  9. package/src/components/Checkout/index.tsx +2 -1
  10. package/src/components/LanguageSelector/index.tsx +21 -16
  11. package/src/components/Messages/index.tsx +2 -2
  12. package/src/components/OrdersOption/index.tsx +54 -56
  13. package/src/components/PaymentOptions/index.tsx +298 -345
  14. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  15. package/src/components/SingleProductReview/index.tsx +7 -4
  16. package/src/components/StripeElementsForm/index.tsx +25 -16
  17. package/src/components/VerifyPhone/styles.tsx +1 -2
  18. package/src/components/shared/OToast.tsx +4 -4
  19. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  20. package/src/utils/index.tsx +2 -1
  21. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  22. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  23. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  24. package/themes/business/src/components/Chat/index.tsx +31 -31
  25. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  26. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  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 +3 -2
  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 +14 -3
  53. package/themes/business/src/utils/index.tsx +10 -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/index.tsx +121 -10
  60. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  61. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  62. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  63. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  64. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  65. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  66. package/themes/kiosk/src/types/index.d.ts +2 -0
  67. package/themes/original/index.tsx +6 -0
  68. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  69. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  70. package/themes/original/src/components/AddressList/index.tsx +18 -18
  71. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  72. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  73. package/themes/original/src/components/BusinessBasicInformation/index.tsx +49 -33
  74. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  75. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  76. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  77. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  78. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  79. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  80. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  81. package/themes/original/src/components/BusinessListingSearch/index.tsx +87 -142
  82. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  83. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  84. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  85. package/themes/original/src/components/BusinessProductsList/index.tsx +41 -62
  86. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  87. package/themes/original/src/components/BusinessProductsListing/index.tsx +561 -479
  88. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  89. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  90. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +93 -98
  92. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  93. package/themes/original/src/components/BusinessesListing/index.tsx +8 -8
  94. package/themes/original/src/components/Cart/index.tsx +63 -38
  95. package/themes/original/src/components/CartContent/index.tsx +80 -18
  96. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  97. package/themes/original/src/components/Checkout/index.tsx +110 -114
  98. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  99. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  100. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  101. package/themes/original/src/components/DriverTips/index.tsx +47 -37
  102. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  103. package/themes/original/src/components/Favorite/index.tsx +7 -4
  104. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  105. package/themes/original/src/components/FavoriteList/index.tsx +69 -45
  106. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  107. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  108. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  109. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  110. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  111. package/themes/original/src/components/Help/index.tsx +7 -7
  112. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  113. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  114. package/themes/original/src/components/HelpGuide/index.tsx +12 -11
  115. package/themes/original/src/components/HelpGuide/styles.tsx +5 -0
  116. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  117. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  118. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  119. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  120. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  121. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  122. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  123. package/themes/original/src/components/MessageListing/index.tsx +7 -7
  124. package/themes/original/src/components/Messages/index.tsx +35 -20
  125. package/themes/original/src/components/MomentOption/index.tsx +17 -11
  126. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  127. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  128. package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
  129. package/themes/original/src/components/MultiOrdersDetails/index.tsx +60 -33
  130. package/themes/original/src/components/MyOrders/index.tsx +86 -20
  131. package/themes/original/src/components/NavBar/index.tsx +7 -6
  132. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  133. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  134. package/themes/original/src/components/Notifications/index.tsx +144 -0
  135. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  136. package/themes/original/src/components/OrderDetails/index.tsx +114 -15
  137. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  138. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  139. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  140. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  141. package/themes/original/src/components/OrderSummary/index.tsx +3 -36
  142. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  143. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  144. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  145. package/themes/original/src/components/OrdersOption/index.tsx +97 -55
  146. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  147. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  148. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  149. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  150. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  151. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  152. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  153. package/themes/original/src/components/ProductForm/index.tsx +212 -253
  154. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  155. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  156. package/themes/original/src/components/ProductOptionSubOption/index.tsx +17 -9
  157. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  158. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  159. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  160. package/themes/original/src/components/Promotions/index.tsx +234 -220
  161. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  162. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  163. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  164. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  165. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  166. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  167. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  168. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  169. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  170. package/themes/original/src/components/ServiceForm/index.tsx +328 -264
  171. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  172. package/themes/original/src/components/SingleOrderCard/index.tsx +129 -54
  173. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  174. package/themes/original/src/components/SingleProductCard/index.tsx +85 -82
  175. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  176. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  177. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  178. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  179. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  180. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  181. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  182. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  183. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  184. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  185. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  186. package/themes/original/src/components/UserProfileForm/index.tsx +19 -28
  187. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  188. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  189. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  190. package/themes/original/src/components/Wallets/index.tsx +176 -164
  191. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  192. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  193. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  194. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  195. package/themes/original/src/components/shared/OButton.tsx +9 -4
  196. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  197. package/themes/original/src/components/shared/OInput.tsx +10 -1
  198. package/themes/original/src/layouts/Container.tsx +13 -9
  199. package/themes/original/src/types/index.tsx +44 -6
  200. package/themes/original/src/utils/index.tsx +103 -58
  201. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -44,33 +44,6 @@ import { USER_TYPE } from '../../config/constants';
44
44
 
45
45
  import SignatureScreen from 'react-native-signature-canvas';
46
46
 
47
- const ORDER_STATUS: any = {
48
- 0: 'ORDER_STATUS_PENDING',
49
- 1: 'ORDERS_COMPLETED',
50
- 2: 'ORDER_REJECTED',
51
- 3: 'ORDER_STATUS_IN_BUSINESS',
52
- 4: 'ORDER_READY',
53
- 5: 'ORDER_REJECTED_RESTAURANT',
54
- 6: 'ORDER_STATUS_CANCELLEDBYDRIVER',
55
- 7: 'ORDER_STATUS_ACCEPTEDBYRESTAURANT',
56
- 8: 'ORDER_CONFIRMED_ACCEPTED_BY_DRIVER',
57
- 9: 'ORDER_PICKUP_COMPLETED_BY_DRIVER',
58
- 10: 'ORDER_PICKUP_FAILED_BY_DRIVER',
59
- 11: 'ORDER_DELIVERY_COMPLETED_BY_DRIVER',
60
- 12: 'ORDER_DELIVERY_FAILED_BY_DRIVER',
61
- 13: 'PREORDER',
62
- 14: 'ORDER_NOT_READY',
63
- 15: 'ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER',
64
- 16: 'ORDER_STATUS_CANCELLED_BY_CUSTOMER',
65
- 17: 'ORDER_NOT_PICKEDUP_BY_CUSTOMER',
66
- 18: 'ORDER_DRIVER_ALMOST_ARRIVED_BUSINESS',
67
- 19: 'ORDER_DRIVER_ALMOST_ARRIVED_CUSTOMER',
68
- 20: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
69
- 21: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
70
- 22: 'ORDER_LOOKING_FOR_DRIVER',
71
- 23: 'ORDER_DRIVER_ON_WAY'
72
- }
73
-
74
47
  const filterSpecialStatus = ['prepared_in', 'delivered_in', 'delivery_datetime']
75
48
 
76
49
  const ChatUI = (props: MessagesParams) => {
@@ -97,6 +70,33 @@ const ChatUI = (props: MessagesParams) => {
97
70
  const theme = useTheme();
98
71
  const [messageList, setMessageList] = useState<any>([])
99
72
 
73
+ const ORDER_STATUS: any = {
74
+ 0: t('ORDER_STATUS_PENDING', 'Order status pending'),
75
+ 1: t('ORDERS_COMPLETED', 'Order completed'),
76
+ 2: t('ORDER_REJECTED', 'Order rejected'),
77
+ 3: t('ORDER_STATUS_IN_BUSINESS', 'Order status in business'),
78
+ 4: t('ORDER_READY', 'Order ready'),
79
+ 5: t('ORDER_REJECTED_RESTAURANT', 'Order rejected by restaurant'),
80
+ 6: t('ORDER_STATUS_CANCELLEDBYDRIVER', 'Order status cancelled by driver'),
81
+ 7: t('ORDER_STATUS_ACCEPTEDBYRESTAURANT', 'Order status accepted by restaurant'),
82
+ 8: t('ORDER_CONFIRMED_ACCEPTED_BY_DRIVER', 'Order confirmed accepted by driver'),
83
+ 9: t('ORDER_PICKUP_COMPLETED_BY_DRIVER', 'Order pickup completed by driver'),
84
+ 10: t('ORDER_PICKUP_FAILED_BY_DRIVER', 'Order pickup failed by driver'),
85
+ 11: t('ORDER_DELIVERY_COMPLETED_BY_DRIVER', 'Order delivery completed by driver'),
86
+ 12: t('ORDER_DELIVERY_FAILED_BY_DRIVER', 'Order delivery failed by driver'),
87
+ 13: t('PREORDER', 'Preorder'),
88
+ 14: t('ORDER_NOT_READY', 'Order not ready'),
89
+ 15: t('ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER', 'Order picked up completed by customer'),
90
+ 16: t('ORDER_STATUS_CANCELLED_BY_CUSTOMER', 'Order status cancelled by customer'),
91
+ 17: t('ORDER_NOT_PICKEDUP_BY_CUSTOMER', 'Order not picked up by customer'),
92
+ 18: t('ORDER_DRIVER_ALMOST_ARRIVED_BUSINESS', 'Order driver almost arrived to business'),
93
+ 19: t('ORDER_DRIVER_ALMOST_ARRIVED_CUSTOMER', 'Order driver almost arrived to customer'),
94
+ 20: t('ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS', 'Order customer almost arrived to business'),
95
+ 21: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Order customer arrived to business'),
96
+ 22: t('ORDER_LOOKING_FOR_DRIVER', 'Order looking for driver'),
97
+ 23: t('ORDER_DRIVER_ON_WAY', 'Driver on way')
98
+ }
99
+
100
100
  const storeMessageList: any = [
101
101
  { key: 'store_message_1', text: t('STORE_MESSAGE_1', 'store_message_1') },
102
102
  { key: 'store_message_2', text: t('STORE_MESSAGE_2', 'store_message_2') },
@@ -377,7 +377,7 @@ const ChatUI = (props: MessagesParams) => {
377
377
  ?
378
378
  `${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${filterSpecialStatus.includes(message.change.attribute) ?
379
379
  `${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}` :
380
- `${message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])} ${t('TO', 'to')} ${t(ORDER_STATUS[parseInt(message.change.new, 10)])}`
380
+ `${message.change.old !== null && ORDER_STATUS[parseInt(message.change.old, 10)]} ${t('TO', 'to')} ${ORDER_STATUS[parseInt(message.change.new, 10)]}`
381
381
  }`
382
382
  : message.change.new
383
383
  ?
@@ -472,7 +472,7 @@ const ChatUI = (props: MessagesParams) => {
472
472
  const firstMessage = {
473
473
  _id: 0,
474
474
  text: console,
475
- createdAt: order?.created_at,
475
+ createdAt: parseDate(order?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
476
476
  system: true,
477
477
  };
478
478
  messages?.messages.map((message: any) => {
@@ -488,7 +488,7 @@ const ChatUI = (props: MessagesParams) => {
488
488
  newMessage = {
489
489
  _id: message.id,
490
490
  text: message.type === 1 ? messageConsole(message) : message.comment,
491
- createdAt: message.type !== 0 && message.created_at,
491
+ createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
492
492
  image: message.source,
493
493
  system: message.type === 1,
494
494
  user: {
@@ -742,7 +742,7 @@ const ChatUI = (props: MessagesParams) => {
742
742
  color: '#414954'
743
743
  }}
744
744
  style={{ ...styles.editButton }}
745
- onClick={() => handleClickQuickMessage(quickMessage.text)}
745
+ onClick={() => handleClickQuickMessage(message?.length > 0 ? ' ' + quickMessage.text : quickMessage.text)}
746
746
  />
747
747
  </React.Fragment>
748
748
  ))}
@@ -13,6 +13,7 @@ import { useTheme } from 'styled-components/native';
13
13
  import { useLocation } from '../../hooks/useLocation';
14
14
  import { FloatingButton } from '../FloatingButton';
15
15
  import { showLocation } from 'react-native-map-link';
16
+ import { transformDistance } from '../../utils';
16
17
 
17
18
  export const DriverMap = (props: GoogleMapsParams) => {
18
19
  const {
@@ -56,6 +57,7 @@ export const DriverMap = (props: GoogleMapsParams) => {
56
57
  content: Array<string>;
57
58
  key?: string | null;
58
59
  }>({ open: false, content: [], key: null });
60
+ const distanceUnit = configState?.configs?.distance_unit?.value
59
61
 
60
62
  const {
61
63
  hasLocation,
@@ -475,9 +477,10 @@ export const DriverMap = (props: GoogleMapsParams) => {
475
477
  src={theme.images.general.arrow_distance}
476
478
  style={styles.arrowDistance}
477
479
  />
478
- <OText size={12} numberOfLines={3}>{`${(
479
- distancesFromTwoPlacesKm * 3280.84
480
- ).toFixed(0)} ${t('FT', 'Ft')}`}</OText>
480
+ <OText size={12} numberOfLines={3}>
481
+ {`${transformDistance(distancesFromTwoPlacesKm, distanceUnit)} ${t(distanceUnit.toUpperCase(), distanceUnit)}`}
482
+ </OText>
483
+
481
484
  </View>
482
485
  <View style={{ width: '75%', paddingRight: 20 }}>
483
486
  <OText
@@ -485,8 +488,7 @@ export const DriverMap = (props: GoogleMapsParams) => {
485
488
  size={13}
486
489
  numberOfLines={2}
487
490
  adjustsFontSizeToFit>
488
- {`${travelTime.toFixed(2)} - ${isMin ? t('MINNUTES', 'mins') : t('HOURS', 'hours')
489
- } ${distancesFromTwoPlacesKm.toFixed(2)} km`}
491
+ {`${travelTime.toFixed(2)} - ${isMin ? t('MINNUTES', 'mins') : t('HOURS', 'hours')}`}
490
492
  </OText>
491
493
  </View>
492
494
  </View>
@@ -9,6 +9,7 @@ import {
9
9
  } from 'react-native';
10
10
  import { useForm, Controller } from 'react-hook-form';
11
11
  import Recaptcha from 'react-native-recaptcha-that-works'
12
+ import ReCaptcha from '@fatnlazycat/react-native-recaptcha-v3'
12
13
  import { TouchableOpacity } from 'react-native-gesture-handler';
13
14
  import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
14
15
  import {
@@ -52,8 +53,8 @@ const LoginFormUI = (props: LoginParams) => {
52
53
  allowedLevels,
53
54
  useRootPoint,
54
55
  notificationState,
55
- handleReCaptcha,
56
- enableReCaptcha
56
+ handleReCaptcha,
57
+ enableReCaptcha
57
58
  } = props;
58
59
 
59
60
  const [ordering, { setOrdering }] = useApi();
@@ -67,7 +68,7 @@ const LoginFormUI = (props: LoginParams) => {
67
68
  const inputRef = useRef<any>(null);
68
69
  const inputMailRef = useRef<any>(null);
69
70
 
70
- const [projectName, setProjectName] = useState({name: '', isFocued: false});
71
+ const [projectName, setProjectName] = useState({ name: '', isFocued: false });
71
72
  const [passwordSee, setPasswordSee] = useState(false);
72
73
  const [isLoadingVerifyModal, setIsLoadingVerifyModal] = useState(false);
73
74
  const [isModalVisible, setIsModalVisible] = useState(false);
@@ -92,36 +93,50 @@ const LoginFormUI = (props: LoginParams) => {
92
93
  const [formValues, setFormValues] = useState(null);
93
94
 
94
95
  const [recaptchaConfig, setRecaptchaConfig] = useState<any>({})
95
- const [recaptchaVerified, setRecaptchaVerified] = useState(false)
96
+ const [recaptchaVerified, setRecaptchaVerified] = useState(false)
96
97
 
97
98
  const recaptchaRef = useRef<any>({});
98
99
 
99
100
  const handleOpenRecaptcha = () => {
100
- setRecaptchaVerified(false)
101
- if (!recaptchaConfig?.siteKey) {
102
- showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
103
- return
104
- }
105
- if (!recaptchaConfig?.baseUrl) {
106
- showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
107
- return
108
- }
109
- recaptchaRef.current.open()
110
- }
111
-
112
- const onRecaptchaVerify = (token: any) => {
113
- setRecaptchaVerified(true)
114
- handleReCaptcha(token)
115
- }
116
-
117
- useEffect(() => {
118
- if (configs && Object.keys(configs).length > 0 && enableReCaptcha) {
119
- setRecaptchaConfig({
120
- siteKey: configs?.security_recaptcha_site_key?.value || null,
121
- baseUrl: configs?.security_recaptcha_base_url?.value || null
122
- })
123
- }
124
- }, [configs, enableReCaptcha])
101
+ setRecaptchaVerified(false)
102
+ if (!recaptchaConfig?.siteKey) {
103
+ showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
104
+ return
105
+ }
106
+ if (!recaptchaConfig?.baseUrl) {
107
+ showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
108
+ return
109
+ }
110
+ recaptchaRef.current.open()
111
+ }
112
+
113
+ const onRecaptchaVerify = (token: any) => {
114
+ setRecaptchaVerified(true)
115
+ handleReCaptcha({ code: token, version: recaptchaConfig?.version })
116
+ }
117
+
118
+ useEffect(() => {
119
+ if (configs && Object.keys(configs).length > 0 && enableReCaptcha) {
120
+ if (configs?.security_recaptcha_type?.value === 'v3' &&
121
+ configs?.security_recaptcha_score_v3?.value > 0 &&
122
+ configs?.security_recaptcha_site_key_v3?.value
123
+ ) {
124
+ setRecaptchaConfig({
125
+ version: 'v3',
126
+ siteKey: configs?.security_recaptcha_site_key_v3?.value || null,
127
+ baseUrl: configs?.security_recaptcha_base_url?.value || null
128
+ })
129
+ return
130
+ }
131
+ if (configs?.security_recaptcha_site_key?.value) {
132
+ setRecaptchaConfig({
133
+ version: 'v2',
134
+ siteKey: configs?.security_recaptcha_site_key?.value || null,
135
+ baseUrl: configs?.security_recaptcha_base_url?.value || null
136
+ })
137
+ }
138
+ }
139
+ }, [configs, enableReCaptcha])
125
140
 
126
141
  useEffect(() => {
127
142
  const projectInputInterval = setInterval(() => {
@@ -164,6 +179,7 @@ const LoginFormUI = (props: LoginParams) => {
164
179
  'An error occurred while trying to pay by PayPal',
165
180
  ERROR_ADD_PRODUCT_VERY_FAR_FOR_DELIVERY:
166
181
  'Error adding product, very far for delivery',
182
+ ERROR_AUTH_DRIVER_LOGIN_VALIDATION: 'Error auth driver login validation'
167
183
  };
168
184
 
169
185
  return keyList[key] ? t(key, keyList[key]) : t(key);
@@ -245,6 +261,17 @@ const LoginFormUI = (props: LoginParams) => {
245
261
 
246
262
  useEffect(() => {
247
263
  if (!formState?.loading && formState?.result?.error) {
264
+ if (formState.result?.result?.[0] === 'ERROR_AUTH_VERIFICATION_CODE') {
265
+ setRecaptchaVerified(false)
266
+ setSubmitted(false)
267
+ setRecaptchaConfig({
268
+ version: 'v2',
269
+ siteKey: configs?.security_recaptcha_site_key?.value || null,
270
+ baseUrl: configs?.security_recaptcha_base_url?.value || null
271
+ })
272
+ showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
273
+ return
274
+ }
248
275
  formState?.result?.result &&
249
276
  showToast(
250
277
  ToastType.Error,
@@ -252,17 +279,17 @@ const LoginFormUI = (props: LoginParams) => {
252
279
  ? getTraduction(formState.result?.result)
253
280
  : loginTab === 'email' &&
254
281
  typeof formState.result?.result !== 'string'
255
- ? getTraduction(formState.result?.result[0])
256
- : loginTab === 'cellphone' &&
257
- typeof formState.result?.result === 'string'
258
- ? getTraduction(formState.result?.result).replace(
259
- t('USER', 'user').toLowerCase(),
260
- t('PHONE_NUMER', 'Phone number'),
261
- )
262
- : getTraduction(formState.result?.result[0]).replace(
263
- t('USER', 'user').toLowerCase(),
264
- t('PHONE_NUMER', 'Phone number'),
265
- ),
282
+ ? getTraduction(formState.result?.result[0])
283
+ : loginTab === 'cellphone' &&
284
+ typeof formState.result?.result === 'string'
285
+ ? getTraduction(formState.result?.result).replace(
286
+ t('USER', 'user').toLowerCase(),
287
+ t('PHONE_NUMER', 'Phone number'),
288
+ )
289
+ : getTraduction(formState.result?.result[0]).replace(
290
+ t('USER', 'user').toLowerCase(),
291
+ t('PHONE_NUMER', 'Phone number'),
292
+ ),
266
293
  );
267
294
  setSubmitted(false)
268
295
  }
@@ -516,7 +543,7 @@ const LoginFormUI = (props: LoginParams) => {
516
543
  icon={theme.images.general.project}
517
544
  iconColor={theme.colors.arrowColor}
518
545
  onChange={(e: any) => {
519
- setProjectName({name: e?.target?.value, isFocued: true})
546
+ setProjectName({ name: e?.target?.value, isFocued: true })
520
547
  onChange(e?.target?.value);
521
548
  setSubmitted(false);
522
549
  }}
@@ -545,7 +572,7 @@ const LoginFormUI = (props: LoginParams) => {
545
572
  icon={theme.images.logos.emailInputIcon}
546
573
  iconColor={theme.colors.arrowColor}
547
574
  onChange={(e: any) => {
548
- setProjectName({...projectName, isFocued: false})
575
+ setProjectName({ ...projectName, isFocued: false })
549
576
  handleChangeInputEmail(e, onChange);
550
577
  }}
551
578
  selectionColor={theme.colors.primary}
@@ -650,40 +677,50 @@ const LoginFormUI = (props: LoginParams) => {
650
677
  </OText>
651
678
  </Pressable>
652
679
  )}
653
-
654
- {enableReCaptcha && (
680
+ {(enableReCaptcha && recaptchaConfig?.version) && (
655
681
  <>
656
- <TouchableOpacity
657
- style={{ marginBottom: 15 }}
658
- onPress={handleOpenRecaptcha}
659
- >
660
- <RecaptchaButton>
661
- {recaptchaVerified ? (
662
- <MaterialCommunityIcons
663
- name="checkbox-marked"
664
- size={26}
665
- color={theme.colors.primary}
666
- />
667
- ) : (
668
- <MaterialCommunityIcons
669
- name="checkbox-blank-outline"
670
- size={26}
671
- color={theme.colors.mediumGray}
672
- />
673
- )}
674
- <OText size={14} mLeft={8}>{t('VERIFY_ReCAPTCHA', 'Verify reCAPTCHA')}</OText>
675
- </RecaptchaButton>
676
- </TouchableOpacity>
677
- <Recaptcha
678
- ref={recaptchaRef}
679
- siteKey={recaptchaConfig?.siteKey}
680
- baseUrl={recaptchaConfig?.baseUrl}
681
- onVerify={onRecaptchaVerify}
682
- onExpire={() => setRecaptchaVerified(false)}
683
- />
682
+ {recaptchaConfig?.version === 'v3' ? (
683
+ <ReCaptcha
684
+ url={recaptchaConfig?.baseUrl}
685
+ siteKey={recaptchaConfig?.siteKey}
686
+ containerStyle={{ height: 40 }}
687
+ onExecute={onRecaptchaVerify}
688
+ reCaptchaType={1}
689
+ />
690
+ ) : (
691
+ <>
692
+ <TouchableOpacity
693
+ style={{ marginBottom: 15 }}
694
+ onPress={handleOpenRecaptcha}
695
+ >
696
+ <RecaptchaButton>
697
+ {recaptchaVerified ? (
698
+ <MaterialCommunityIcons
699
+ name="checkbox-marked"
700
+ size={26}
701
+ color={theme.colors.primary}
702
+ />
703
+ ) : (
704
+ <MaterialCommunityIcons
705
+ name="checkbox-blank-outline"
706
+ size={26}
707
+ color={theme.colors.mediumGray}
708
+ />
709
+ )}
710
+ <OText size={14} mLeft={8}>{t('VERIFY_ReCAPTCHA', 'Verify reCAPTCHA')}</OText>
711
+ </RecaptchaButton>
712
+ </TouchableOpacity>
713
+ <Recaptcha
714
+ ref={recaptchaRef}
715
+ siteKey={recaptchaConfig?.siteKey}
716
+ baseUrl={recaptchaConfig?.baseUrl}
717
+ onVerify={onRecaptchaVerify}
718
+ onExpire={() => setRecaptchaVerified(false)}
719
+ />
720
+ </>)
721
+ }
684
722
  </>
685
- )}
686
-
723
+ )}
687
724
  <OButton
688
725
  onClick={handleLogin}
689
726
  text={t('LOGIN', 'Login')}
@@ -21,6 +21,7 @@ const MapViewComponent = (props: MapViewParams) => {
21
21
  customerMarkerGroups,
22
22
  alertState,
23
23
  setAlertState,
24
+ setDriverLocation,
24
25
  onNavigationRedirect,
25
26
  getBusinessLocations,
26
27
  } = props;
@@ -102,7 +103,7 @@ const MapViewComponent = (props: MapViewParams) => {
102
103
  return () => {
103
104
  stopFollowUserLocation();
104
105
  };
105
- }, []);
106
+ }, [isFocused]);
106
107
 
107
108
  useFocusEffect(
108
109
  useCallback(() => {
@@ -191,7 +192,7 @@ const MapViewComponent = (props: MapViewParams) => {
191
192
  {((customer && marker?.business?.zipcode) || (!customer && marker?.business?.zipcode)) && (
192
193
  <OText>{customer ? marker?.customer?.zipcode : marker?.business?.zipcode}</OText>
193
194
  )}
194
- {customer && marker?.customer?.internal_number && (
195
+ {customer && !!marker?.customer?.internal_number && (
195
196
  <OText>{marker?.customer?.internal_number}</OText>
196
197
  )}
197
198
  <OText textDecorationLine='underline' color={theme.colors.primary}>
@@ -211,6 +212,16 @@ const MapViewComponent = (props: MapViewParams) => {
211
212
  )
212
213
  }
213
214
 
215
+ useEffect(() => {
216
+ if (userLocation.latitude !== 0 && userLocation.longitude !== 0) {
217
+ const location = {
218
+ lat: userLocation.latitude,
219
+ lng: userLocation.longitude
220
+ }
221
+ setDriverLocation({ location })
222
+ }
223
+ }, [userLocation])
224
+
214
225
  return (
215
226
  <SafeAreaView style={{ flex: 1 }}>
216
227
  <View style={{ flex: 1 }}>
@@ -241,7 +252,7 @@ const MapViewComponent = (props: MapViewParams) => {
241
252
  orderIds={marker.map((order: any) => order.id).join(', ')}
242
253
  />
243
254
  ))}
244
- {Object.values(customerMarkerGroups).map((marker: any) => (
255
+ {Object.values(customerMarkerGroups).map((marker: any) => (
245
256
  <RenderMarker
246
257
  key={marker[0]?.customer_id}
247
258
  marker={marker[0]}
@@ -5,6 +5,7 @@ import {
5
5
  StyleSheet,
6
6
  Dimensions,
7
7
  ScrollView,
8
+ RefreshControl,
8
9
  } from 'react-native';
9
10
  import { Contacts, useLanguage } from 'ordering-components/native';
10
11
  import { useTheme } from 'styled-components/native';
@@ -24,6 +25,7 @@ const MessagesOptionUI = (props: MessagesOptionParams) => {
24
25
  messages,
25
26
  onNavigationRedirect,
26
27
  setSortBy,
28
+ getOrders
27
29
  } = props;
28
30
 
29
31
  const theme = useTheme();
@@ -55,6 +57,7 @@ const MessagesOptionUI = (props: MessagesOptionParams) => {
55
57
  const [tabsFilter, setTabsFilter] = useState(tabs[0].tags);
56
58
  const [activeTag, setActiveTag] = useState(tags[0].key);
57
59
  const [reload, setReload] = useState(false);
60
+ const [refreshing] = useState(false);
58
61
  const [unreadMessages, setUnreadMessages] = useState(
59
62
  values?.reduce(
60
63
  (total: number, order: any) => total + order.unread_count,
@@ -247,7 +250,14 @@ const MessagesOptionUI = (props: MessagesOptionParams) => {
247
250
  />
248
251
  )}
249
252
 
250
- <ScrollView showsVerticalScrollIndicator={false} style={{ flex: 1 }}>
253
+ <ScrollView
254
+ showsVerticalScrollIndicator={false}
255
+ style={{ flex: 1 }}
256
+ refreshControl={<RefreshControl
257
+ refreshing={refreshing}
258
+ onRefresh={() => getOrders?.()}
259
+ />}
260
+ >
251
261
  {!reload &&
252
262
  !error &&
253
263
  values.length > 0 &&
@@ -14,6 +14,8 @@ Sound.setCategory('Playback')
14
14
 
15
15
  const windowWidth = Dimensions.get('screen').width
16
16
 
17
+ const SOUND_LOOP = 3
18
+
17
19
  const NewOrderNotificationUI = (props: any) => {
18
20
  const { isBusinessApp } = props
19
21
  const [events] = useEvent()
@@ -22,8 +24,7 @@ const NewOrderNotificationUI = (props: any) => {
22
24
  const [{ user, token }] = useSession()
23
25
  const [ordering] = useApi()
24
26
  const { getCurrentLocation } = useLocation();
25
- const [soundTimeout, setSoundTimeout] = useState<any>(null)
26
- let [currentEvent, setCurrentEvent] = useState<any>(null)
27
+ const [currentEvent, setCurrentEvent] = useState<any>(null)
27
28
 
28
29
  const evtList: any = {
29
30
  1: {
@@ -43,29 +44,27 @@ const NewOrderNotificationUI = (props: any) => {
43
44
  },
44
45
  }
45
46
 
46
- const notificationSound = new Sound(theme.sounds.notification, (e) => { console.log(e) });
47
+ const notificationSound = new Sound(theme.sounds.notification);
47
48
 
48
- const handlePlayNotificationSound = () => {
49
- if (currentEvent) return
50
- let times = 0
51
- const _timeout = setInterval(function () {
52
- notificationSound.play(success => {
53
- if (success) {
54
- times = times + 1
55
- }
56
- })
57
- setSoundTimeout(_timeout)
58
- if (times === 3) {
59
- clearInterval(_timeout)
60
- clearInterval(soundTimeout)
61
- }
62
- }, 2500)
49
+ let _timeout: any = null
50
+
51
+ const handleCloseEvents = () => {
52
+ notificationSound.stop()
53
+ setCurrentEvent(null)
54
+ clearInterval(_timeout)
63
55
  }
64
56
 
65
- const handleCloseModal = () => {
66
- clearInterval(soundTimeout)
67
- currentEvent = null
68
- setCurrentEvent({ evt: null })
57
+ const handlePlayNotificationSound = (eventObj: any = null) => {
58
+ setCurrentEvent(eventObj)
59
+ let times = 1
60
+ if (times < SOUND_LOOP) {
61
+ _timeout = setInterval(() => {
62
+ notificationSound.setVolume(1).play(success => success && (times = times + 1))
63
+ if (times === SOUND_LOOP) {
64
+ clearInterval(_timeout)
65
+ }
66
+ }, 2500)
67
+ }
69
68
  }
70
69
 
71
70
  const handleEventNotification = async (evtType: number, value: any) => {
@@ -79,26 +78,15 @@ const NewOrderNotificationUI = (props: any) => {
79
78
  }),
80
79
  headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }
81
80
  })
82
- } catch (error) {
83
- console.log(error)
84
- }
81
+ } catch {}
85
82
  const duration = moment.duration(moment().diff(moment.utc(value?.last_driver_assigned_at)))
86
83
  const assignedSecondsDiff = duration.asSeconds()
87
84
  if (assignedSecondsDiff < 5 && !isBusinessApp) {
88
- handlePlayNotificationSound()
89
- clearInterval(soundTimeout)
90
- currentEvent = { evt: 2, orderId: value?.id }
91
- setCurrentEvent({ evt: 2, orderId: value?.id })
85
+ handlePlayNotificationSound({ evt: 2, orderId: value?.id })
92
86
  }
93
87
  }
94
88
  if (evtType === 3 || value.author_id === user.id) return
95
- handlePlayNotificationSound()
96
- clearInterval(soundTimeout)
97
- currentEvent = {
98
- evt: evtType,
99
- orderId: evtList[evtType].event === 'messages' ? value?.order_id : value?.id
100
- }
101
- setCurrentEvent({
89
+ handlePlayNotificationSound({
102
90
  evt: evtType,
103
91
  orderId: evtList[evtType].event === 'messages' ? value?.order_id : value?.id
104
92
  })
@@ -108,18 +96,20 @@ const NewOrderNotificationUI = (props: any) => {
108
96
  events.on('message_added_notification', (o: any) => handleEventNotification(1, o))
109
97
  events.on('order_added_notification', (o: any) => handleEventNotification(2, o))
110
98
  events.on('order_updated_notification', (o: any) => handleEventNotification(3, o))
99
+ events.on('request_register_notification', (o: any) => handleEventNotification(2, o))
100
+ events.on('request_update_notification', (o: any) => handleEventNotification(3, o))
101
+
111
102
  return () => {
112
103
  events.off('message_added_notification', (o: any) => handleEventNotification(1, o))
113
104
  events.off('order_added_notification', (o: any) => handleEventNotification(2, o))
114
105
  events.off('order_updated_notification', (o: any) => handleEventNotification(3, o))
106
+ events.off('request_register_notification', (o: any) => handleEventNotification(2, o))
107
+ events.off('request_update_notification', (o: any) => handleEventNotification(3, o))
115
108
  }
116
109
  }, [])
117
110
 
118
111
  useEffect(() => {
119
- notificationSound.setVolume(1);
120
- return () => {
121
- notificationSound.release();
122
- }
112
+ return () => handleCloseEvents()
123
113
  }, [])
124
114
 
125
115
  return (
@@ -133,7 +123,7 @@ const NewOrderNotificationUI = (props: any) => {
133
123
  <View style={styles.modalView}>
134
124
  <TouchableOpacity
135
125
  style={styles.wrapperIcon}
136
- onPress={() => handleCloseModal()}
126
+ onPress={() => handleCloseEvents()}
137
127
  >
138
128
  <Icon name="x" size={30} />
139
129
  </TouchableOpacity>