ordering-ui-react-native 0.15.66 → 0.15.68-release

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/package.json +7 -3
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +1 -1
  5. package/src/components/AddressForm/index.tsx +18 -2
  6. package/src/components/BusinessBasicInformation/index.tsx +11 -19
  7. package/src/components/BusinessController/index.tsx +16 -8
  8. package/src/components/BusinessInformation/index.tsx +14 -0
  9. package/src/components/BusinessTypeFilter/index.tsx +1 -2
  10. package/src/components/BusinessesListing/index.tsx +1 -1
  11. package/src/components/Checkout/index.tsx +23 -2
  12. package/src/components/DriverTips/index.tsx +11 -6
  13. package/src/components/LanguageSelector/index.tsx +6 -2
  14. package/src/components/LoginForm/index.tsx +120 -30
  15. package/src/components/LoginForm/styles.tsx +6 -0
  16. package/src/components/OrderDetails/index.tsx +7 -21
  17. package/src/components/PaymentOptions/index.tsx +67 -50
  18. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  19. package/src/components/ReviewDriver/index.tsx +1 -1
  20. package/src/components/ReviewOrder/index.tsx +2 -1
  21. package/src/components/ReviewProducts/index.tsx +11 -0
  22. package/src/components/SignupForm/index.tsx +145 -61
  23. package/src/components/SingleProductCard/index.tsx +16 -4
  24. package/src/components/SingleProductReview/index.tsx +1 -1
  25. package/src/components/StripeMethodForm/index.tsx +22 -24
  26. package/src/components/UpsellingProducts/index.tsx +1 -1
  27. package/src/components/UserProfileForm/index.tsx +63 -6
  28. package/src/components/UserProfileForm/styles.tsx +8 -0
  29. package/src/components/VerifyPhone/styles.tsx +1 -2
  30. package/src/components/shared/OModal.tsx +1 -1
  31. package/src/hooks/useCountdownTimer.tsx +26 -0
  32. package/src/navigators/CheckoutNavigator.tsx +6 -0
  33. package/src/navigators/HomeNavigator.tsx +12 -0
  34. package/src/pages/BusinessesListing.tsx +7 -6
  35. package/src/pages/MultiCheckout.tsx +31 -0
  36. package/src/pages/MultiOrdersDetails.tsx +27 -0
  37. package/src/pages/OrderDetails.tsx +1 -1
  38. package/src/pages/ReviewDriver.tsx +2 -2
  39. package/src/pages/ReviewOrder.tsx +2 -2
  40. package/src/pages/Sessions.tsx +22 -0
  41. package/src/theme.json +0 -1
  42. package/src/types/index.tsx +18 -11
  43. package/src/utils/index.tsx +68 -1
  44. package/themes/business/index.tsx +4 -0
  45. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +103 -15
  46. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -0
  47. package/themes/business/src/components/Chat/index.tsx +42 -90
  48. package/themes/business/src/components/DriverMap/index.tsx +6 -5
  49. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  50. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  51. package/themes/business/src/components/LoginForm/index.tsx +89 -2
  52. package/themes/business/src/components/LoginForm/styles.tsx +6 -0
  53. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  54. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -13
  55. package/themes/business/src/components/OrderDetails/Business.tsx +2 -2
  56. package/themes/business/src/components/OrderDetails/Delivery.tsx +28 -11
  57. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +14 -7
  58. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +6 -0
  59. package/themes/business/src/components/OrdersListManager/index.tsx +1 -1
  60. package/themes/business/src/components/OrdersOption/index.tsx +8 -4
  61. package/themes/business/src/components/PreviousOrders/index.tsx +7 -7
  62. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  63. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  64. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  65. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  66. package/themes/business/src/components/shared/OModal.tsx +41 -38
  67. package/themes/business/src/types/index.tsx +8 -2
  68. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  69. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  70. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  71. package/themes/kiosk/src/components/BusinessMenu/index.tsx +39 -28
  72. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -3
  73. package/themes/kiosk/src/components/Cart/index.tsx +11 -12
  74. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +9 -2
  75. package/themes/kiosk/src/components/CartContent/index.tsx +0 -11
  76. package/themes/kiosk/src/components/CartItem/index.tsx +4 -3
  77. package/themes/kiosk/src/components/CategoriesMenu/index.tsx +107 -62
  78. package/themes/kiosk/src/components/Checkout/index.tsx +40 -22
  79. package/themes/kiosk/src/components/CustomerName/index.tsx +0 -6
  80. package/themes/kiosk/src/components/DrawerView/index.tsx +1 -0
  81. package/themes/kiosk/src/components/DrawerView/styles.tsx +2 -2
  82. package/themes/kiosk/src/components/NavBar/index.tsx +29 -20
  83. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  84. package/themes/kiosk/src/components/OrderDetails/index.tsx +32 -27
  85. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +9 -11
  86. package/themes/kiosk/src/components/PaymentOptions/index.tsx +56 -54
  87. package/themes/kiosk/src/components/ProductForm/index.tsx +7 -8
  88. package/themes/kiosk/src/components/ProductItemAccordion/index.tsx +2 -2
  89. package/themes/kiosk/src/components/ProductOption/index.tsx +1 -1
  90. package/themes/kiosk/src/components/ProductOptionSubOption/index.tsx +3 -1
  91. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +16 -5
  92. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  93. package/themes/kiosk/src/types/index.d.ts +1 -0
  94. package/themes/original/index.tsx +30 -8
  95. package/themes/original/src/components/ActiveOrders/index.tsx +15 -132
  96. package/themes/original/src/components/ActiveOrders/styles.tsx +0 -54
  97. package/themes/original/src/components/AddressForm/index.tsx +7 -6
  98. package/themes/original/src/components/AddressList/index.tsx +30 -18
  99. package/themes/original/src/components/AppleLogin/index.tsx +6 -8
  100. package/themes/original/src/components/BusinessBasicInformation/index.tsx +304 -158
  101. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  102. package/themes/original/src/components/BusinessController/index.tsx +195 -96
  103. package/themes/original/src/components/BusinessController/styles.tsx +5 -0
  104. package/themes/original/src/components/BusinessItemAccordion/index.tsx +8 -5
  105. package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -1
  106. package/themes/original/src/components/BusinessListingSearch/index.tsx +231 -63
  107. package/themes/original/src/components/BusinessListingSearch/styles.tsx +22 -2
  108. package/themes/original/src/components/BusinessPreorder/index.tsx +1 -1
  109. package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -2
  110. package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +44 -0
  111. package/themes/original/src/components/BusinessProductsList/index.tsx +53 -52
  112. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  113. package/themes/original/src/components/BusinessProductsListing/index.tsx +318 -155
  114. package/themes/original/src/components/BusinessProductsListing/styles.tsx +32 -0
  115. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  116. package/themes/original/src/components/BusinessTypeFilter/index.tsx +106 -39
  117. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  118. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +560 -0
  119. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -2
  120. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +679 -0
  121. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  122. package/themes/original/src/components/BusinessesListing/index.tsx +99 -458
  123. package/themes/original/src/components/Cart/index.tsx +61 -42
  124. package/themes/original/src/components/Checkout/index.tsx +90 -39
  125. package/themes/original/src/components/DriverTips/index.tsx +17 -12
  126. package/themes/original/src/components/Favorite/index.tsx +92 -0
  127. package/themes/original/src/components/Favorite/styles.tsx +22 -0
  128. package/themes/original/src/components/FavoriteList/index.tsx +298 -0
  129. package/themes/original/src/components/FavoriteList/styles.tsx +5 -0
  130. package/themes/original/src/components/ForgotPasswordForm/index.tsx +84 -4
  131. package/themes/original/src/components/GPSButton/index.tsx +15 -8
  132. package/themes/original/src/components/GoogleMap/index.tsx +11 -11
  133. package/themes/original/src/components/Help/index.tsx +21 -4
  134. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +18 -1
  135. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  136. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -0
  137. package/themes/original/src/components/LoginForm/Otp/styles.tsx +7 -0
  138. package/themes/original/src/components/LoginForm/index.tsx +332 -164
  139. package/themes/original/src/components/LoginForm/styles.tsx +1 -3
  140. package/themes/original/src/components/MessageListing/index.tsx +10 -1
  141. package/themes/original/src/components/Messages/index.tsx +1 -1
  142. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  143. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  144. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +243 -0
  145. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/styles.tsx +46 -0
  146. package/themes/original/src/components/MultiCheckout/index.tsx +298 -0
  147. package/themes/original/src/components/MultiCheckout/styles.tsx +59 -0
  148. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +372 -0
  149. package/themes/original/src/components/MultiOrdersDetails/index.tsx +258 -0
  150. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +50 -0
  151. package/themes/original/src/components/MyOrders/index.tsx +120 -32
  152. package/themes/original/src/components/MyOrders/styles.tsx +8 -1
  153. package/themes/original/src/components/NavBar/index.tsx +4 -4
  154. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  155. package/themes/original/src/components/OrderDetails/index.tsx +148 -63
  156. package/themes/original/src/components/OrderDetails/styles.tsx +1 -2
  157. package/themes/original/src/components/OrderSummary/index.tsx +6 -6
  158. package/themes/original/src/components/OrderTypeSelector/index.tsx +79 -35
  159. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  160. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +153 -0
  161. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +6 -0
  162. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +53 -0
  163. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +6 -0
  164. package/themes/original/src/components/OrdersOption/index.tsx +137 -38
  165. package/themes/original/src/components/OrdersOption/styles.tsx +4 -1
  166. package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
  167. package/themes/original/src/components/PaymentOptionWallet/index.tsx +17 -23
  168. package/themes/original/src/components/PaymentOptionWallet/styles.tsx +1 -1
  169. package/themes/original/src/components/PaymentOptions/index.tsx +58 -37
  170. package/themes/original/src/components/PhoneInputNumber/index.tsx +5 -11
  171. package/themes/original/src/components/PreviousOrders/index.tsx +18 -147
  172. package/themes/original/src/components/ProductForm/index.tsx +718 -679
  173. package/themes/original/src/components/ProductForm/styles.tsx +6 -2
  174. package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
  175. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  176. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -12
  177. package/themes/original/src/components/ProfessionalFilter/index.tsx +128 -0
  178. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  179. package/themes/original/src/components/ProfessionalProfile/index.tsx +298 -0
  180. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  181. package/themes/original/src/components/Promotions/index.tsx +151 -133
  182. package/themes/original/src/components/Promotions/styles.tsx +3 -23
  183. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  184. package/themes/original/src/components/ReviewOrder/index.tsx +1 -1
  185. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  186. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  187. package/themes/original/src/components/SearchBar/index.tsx +13 -5
  188. package/themes/original/src/components/ServiceForm/index.tsx +579 -0
  189. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  190. package/themes/original/src/components/Sessions/index.tsx +160 -0
  191. package/themes/original/src/components/Sessions/styles.tsx +15 -0
  192. package/themes/original/src/components/SignupForm/index.tsx +237 -126
  193. package/themes/original/src/components/SingleOrderCard/index.tsx +275 -0
  194. package/themes/original/src/components/SingleOrderCard/styles.tsx +54 -0
  195. package/themes/original/src/components/SingleProductCard/index.tsx +215 -90
  196. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -2
  197. package/themes/original/src/components/StripeElementsForm/index.tsx +16 -8
  198. package/themes/original/src/components/StripeElementsForm/naked.tsx +2 -2
  199. package/themes/original/src/components/UpsellingProducts/index.tsx +86 -74
  200. package/themes/original/src/components/UserDetails/index.tsx +15 -81
  201. package/themes/original/src/components/UserFormDetails/index.tsx +98 -66
  202. package/themes/original/src/components/UserProfile/index.tsx +11 -2
  203. package/themes/original/src/components/UserProfileForm/index.tsx +33 -22
  204. package/themes/original/src/components/UserVerification/index.tsx +178 -192
  205. package/themes/original/src/components/VerifyPhone/index.tsx +10 -7
  206. package/themes/original/src/components/VerifyPhone/styles.tsx +2 -1
  207. package/themes/original/src/components/Wallets/index.tsx +25 -12
  208. package/themes/original/src/components/shared/OBottomPopup.tsx +44 -13
  209. package/themes/original/src/components/shared/OButton.tsx +2 -0
  210. package/themes/original/src/components/shared/OInput.tsx +3 -2
  211. package/themes/original/src/components/shared/OModal.tsx +4 -2
  212. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  213. package/themes/original/src/types/index.tsx +187 -35
  214. package/themes/original/src/utils/index.tsx +96 -2
  215. package/themes/single-business/src/components/OrderTypeSelector/index.tsx +1 -1
  216. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -39,6 +39,8 @@ import { VerifyPhone } from './src/components/VerifyPhone';
39
39
  import { DriverMap } from './src/components/DriverMap';
40
40
  import { MapViewUI as MapView } from './src/components/MapView'
41
41
  import { NewOrderNotification } from './src/components/NewOrderNotification';
42
+ import { DriverSchedule } from './src/components/DriverSchedule';
43
+ import { ScheduleBlocked } from './src/components/ScheduleBlocked';
42
44
  //OComponents
43
45
  import {
44
46
  OText,
@@ -106,6 +108,8 @@ export {
106
108
  UserFormDetailsUI,
107
109
  UserProfileForm,
108
110
  VerifyPhone,
111
+ DriverSchedule,
112
+ ScheduleBlocked,
109
113
  //OComponents
110
114
  OAlert,
111
115
  OButton,
@@ -1,20 +1,25 @@
1
1
  import React, { useState, useEffect, useRef } from 'react';
2
+ import FeatherIcon from 'react-native-vector-icons/Feather';
2
3
  import {
3
4
  Linking,
4
5
  Keyboard,
5
6
  Platform,
6
7
  View,
7
8
  KeyboardAvoidingView,
8
- TextInput
9
+ TextInput,
10
+ StyleSheet
9
11
  } from 'react-native';
10
12
  import { useTheme } from 'styled-components/native';
11
- import { useLanguage } from 'ordering-components/native';
12
- import { Content, Timer, TimeField, Header, Action, Comments } from './styles';
13
+ import SelectDropdown from 'react-native-select-dropdown'
14
+ import { useLanguage, useSession } from 'ordering-components/native';
15
+ import { Content, Timer, TimeField, Header, Action, Comments, CommentsButtonGroup } from './styles';
13
16
  import { FloatingButton } from '../FloatingButton';
14
17
  import { OText, OButton, OTextarea, OIconButton } from '../shared';
15
18
  import { AcceptOrRejectOrderParams } from '../../types';
16
19
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
17
20
 
21
+ import { orderCommentList } from '../../../../../src/utils'
22
+
18
23
  export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
19
24
  const {
20
25
  customerCellphone,
@@ -30,6 +35,7 @@ export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
30
35
  } = props;
31
36
 
32
37
  const [, t] = useLanguage();
38
+ const [{ user }] = useSession();
33
39
  const theme = useTheme();
34
40
  const scrollViewRef = useRef<any>(null);
35
41
  const viewRef = useRef<any>(null);
@@ -39,27 +45,62 @@ export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
39
45
  const [min, setMin] = useState('00');
40
46
  const [time, setTime] = useState('');
41
47
  const [comments, setComments] = useState('');
48
+ const [rejectReason, setRejectReason] = useState(null);
42
49
  const [isKeyboardShow, setIsKeyboardShow] = useState(false);
43
50
  const { top, bottom } = useSafeAreaInsets()
44
51
 
52
+ const isDriverApp = appTitle?.key === 'DELIVERY_APP'
53
+
54
+ const orderCommentsList = orderCommentList(action)
55
+
45
56
  let codeNumberPhone, numberPhone, numberToShow;
46
57
  const phoneNumber = customerCellphone;
47
58
  const titleOrder = t(orderTitle[action]?.key, orderTitle[action]?.text)
48
59
  const buttonText = t(orderTitle[action]?.btnKey, orderTitle[action]?.btnText)
49
60
  const showTextArea = ['reject', 'deliveryFailed', 'pickupFailed', 'notReady', 'forcePickUp', 'forceDelivery'].includes(action)
50
61
 
62
+ const styles = StyleSheet.create({
63
+ selectOption: {
64
+ alignItems: 'center',
65
+ justifyContent: 'space-between',
66
+ minHeight: 40,
67
+ width: '100%',
68
+ paddingHorizontal: 15,
69
+ backgroundColor: theme.colors.inputChat,
70
+ borderRadius: 7.6,
71
+ },
72
+ buttonTextStyle: {
73
+ textAlign: 'left',
74
+ marginHorizontal: 0,
75
+ fontSize: 16,
76
+ lineHeight: 24,
77
+ color: '#748194',
78
+ textTransform: 'capitalize'
79
+ },
80
+ dropdownStyle: {
81
+ borderWidth: 1,
82
+ borderRadius: 8,
83
+ paddingTop: 5,
84
+ backgroundColor: '#fff',
85
+ borderColor: theme.colors.lightGray,
86
+ overflow: 'hidden',
87
+ minHeight: 120
88
+ },
89
+ rowStyle: {
90
+ display: 'flex',
91
+ borderBottomWidth: 0,
92
+ height: 36,
93
+ alignItems: 'center',
94
+ paddingHorizontal: 10
95
+ },
96
+ })
97
+
51
98
  const handleFocus = () => {
52
99
  viewRef?.current?.measure((x: any, y: any) => {
53
100
  scrollViewRef?.current?.scrollTo({ x: 0, y });
54
101
  });
55
102
  };
56
103
 
57
- const handleFocusTimer = () => {
58
- timerRef?.current?.measure((x: any, y: any) => {
59
- scrollViewRef?.current?.scrollTo({ x: 0, y });
60
- });
61
- };
62
-
63
104
  useEffect(() => {
64
105
  const keyboardDidShowListener = Keyboard.addListener(
65
106
  'keyboardDidShow',
@@ -151,7 +192,6 @@ export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
151
192
 
152
193
  const handleAcceptOrReject = () => {
153
194
  handleFixTime();
154
-
155
195
  let minsToSend = min;
156
196
 
157
197
  if (min > '60') minsToSend = '59';
@@ -175,26 +215,32 @@ export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
175
215
  rejectByDriver: {
176
216
  comment: comments,
177
217
  status: 6,
218
+ reject_reason: rejectReason
178
219
  },
179
220
  pickupFailedByDriver: {
180
221
  comment: comments,
181
- status: 10
222
+ status: 10,
223
+ reject_reason: rejectReason
182
224
  },
183
225
  deliveryFailedByDriver: {
184
226
  comment: comments,
185
- status: 12
227
+ status: 12,
228
+ reject_reason: rejectReason
186
229
  },
187
230
  orderNotReady: {
188
231
  comment: comments,
189
- status: 14
232
+ status: 14,
233
+ reject_reason: rejectReason
190
234
  },
191
235
  forcePickUp: {
192
236
  reasons: comments,
193
- status: 9
237
+ status: 9,
238
+ reject_reason: rejectReason
194
239
  },
195
240
  forceDelivery: {
196
241
  reasons: comments,
197
- status: 11
242
+ status: 11,
243
+ reject_reason: rejectReason
198
244
  }
199
245
  };
200
246
 
@@ -387,6 +433,48 @@ export const AcceptOrRejectOrder = (props: AcceptOrRejectOrderParams) => {
387
433
  onBlur={() => actions && action === 'accept' && timerRef?.current?.focus?.()}
388
434
  />
389
435
 
436
+ {orderCommentsList && isDriverApp && (
437
+ <CommentsButtonGroup>
438
+ <SelectDropdown
439
+ defaultButtonText={t('REJECT_REASONS_OPTIONS', 'Reject reasons')}
440
+ data={orderCommentsList?.list}
441
+ onSelect={(selectedItem) => {
442
+ setRejectReason(selectedItem?.value)
443
+ }}
444
+ buttonTextAfterSelection={(selectedItem) => selectedItem.content}
445
+ rowTextForSelection={(item) => item.key}
446
+ buttonStyle={styles.selectOption}
447
+ buttonTextStyle={styles.buttonTextStyle}
448
+ renderDropdownIcon={isOpened => {
449
+ return <FeatherIcon name={isOpened ? 'chevron-up' : 'chevron-down'} color={'#444'} size={18} />;
450
+ }}
451
+ dropdownStyle={styles.dropdownStyle}
452
+ dropdownOverlayColor='transparent'
453
+ rowStyle={styles.rowStyle}
454
+ renderCustomizedRowChild={(item) => {
455
+ return (
456
+ <View
457
+ style={{
458
+ flexDirection: 'row',
459
+ alignItems: 'center'
460
+ }}
461
+ >
462
+ <View>
463
+ <OText
464
+ size={14}
465
+ color={'#748194'}
466
+ style={{ textTransform: 'capitalize' }}
467
+ >
468
+ {item?.content}
469
+ </OText>
470
+ </View>
471
+ </View>
472
+ );
473
+ }}
474
+ />
475
+ </CommentsButtonGroup>
476
+ )}
477
+
390
478
  {showTextArea && (
391
479
  <Comments ref={viewRef}>
392
480
  <OTextarea
@@ -35,3 +35,9 @@ export const Comments = styled.View`
35
35
  margin-top: 20px;
36
36
  padding-bottom: 40px;
37
37
  `;
38
+
39
+ export const CommentsButtonGroup = styled.View`
40
+ flex-direction: row;
41
+ flex-wrap: wrap;
42
+ margin-top: 15px;
43
+ `
@@ -44,6 +44,35 @@ 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
+ const filterSpecialStatus = ['prepared_in', 'delivered_in', 'delivery_datetime']
75
+
47
76
  const ChatUI = (props: MessagesParams) => {
48
77
  const {
49
78
  type,
@@ -317,71 +346,6 @@ const ChatUI = (props: MessagesParams) => {
317
346
  }
318
347
  };
319
348
 
320
- const getStatus = (status: number, attribute: any) => {
321
- const hour = Math.trunc(status / 60);
322
- const min = Math.round((status / 60 - hour) * 60);
323
-
324
- if (attribute === 'status') {
325
- switch (status) {
326
- case 0:
327
- return 'ORDER_STATUS_PENDING';
328
- case 1:
329
- return 'ORDERS_COMPLETED';
330
- case 2:
331
- return 'ORDER_REJECTED';
332
- case 3:
333
- return 'ORDER_STATUS_IN_BUSINESS';
334
- case 4:
335
- return 'ORDER_READY';
336
- case 5:
337
- return 'ORDER_REJECTED_RESTAURANT';
338
- case 6:
339
- return 'ORDER_STATUS_CANCELLEDBYDRIVER';
340
- case 7:
341
- return 'ORDER_STATUS_ACCEPTEDBYRESTAURANT';
342
- case 8:
343
- return 'ORDER_CONFIRMED_ACCEPTED_BY_DRIVER';
344
- case 9:
345
- return 'ORDER_PICKUP_COMPLETED_BY_DRIVER';
346
- case 10:
347
- return 'ORDER_PICKUP_FAILED_BY_DRIVER';
348
- case 11:
349
- return 'ORDER_DELIVERY_COMPLETED_BY_DRIVER';
350
- case 12:
351
- return 'ORDER_DELIVERY_FAILED_BY_DRIVER';
352
- case 13:
353
- return 'PREORDER';
354
- case 14:
355
- return 'ORDER_NOT_READY';
356
- case 15:
357
- return 'ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER';
358
- case 16:
359
- return 'ORDER_STATUS_CANCELLED_BY_CUSTOMER';
360
- case 17:
361
- return 'ORDER_NOT_PICKEDUP_BY_CUSTOMER';
362
- case 18:
363
- return 'ORDER_DRIVER_ALMOST_ARRIVED_BUSINESS';
364
- case 19:
365
- return 'ORDER_DRIVER_ALMOST_ARRIVED_CUSTOMER';
366
- case 20:
367
- return 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS';
368
- case 21:
369
- return 'ORDER_CUSTOMER_ARRIVED_BUSINESS';
370
- case 22:
371
- return 'ORDER_LOOKING_FOR_DRIVER'
372
- case 23:
373
- return 'ORDER_DRIVER_ON_WAY'
374
- default:
375
- return ``;
376
- }
377
- }
378
-
379
- if (attribute === 'prepared_in' || attribute === 'delivered_in') {
380
- return `${hour < 10 ? '0' + hour : hour}:${min < 10 ? '0' + min : min} ${status > 60 ? 'hours' : 'minutes'
381
- }`;
382
- }
383
- };
384
-
385
349
  const onSubmit = (values: any) => {
386
350
  handleSend && handleSend();
387
351
  setImage && setImage(null);
@@ -403,28 +367,16 @@ const ChatUI = (props: MessagesParams) => {
403
367
  numberOfLines={3}
404
368
  style={{ ...styles.firstMessageText, textAlign: 'center' }}>
405
369
  {message.change?.attribute !== 'driver_id'
406
- ? `${t('ORDER', 'Order')} ${t(
407
- message.change.attribute.toUpperCase(),
408
- message.change.attribute,
409
- )} ${t('CHANGED_FROM', 'Changed from')} ${message.change.old !== null
410
- ? t(
411
- getStatus(
412
- parseInt(message.change.old, 10),
413
- message.change?.attribute,
414
- ),
415
- )
416
- : '0'
417
- } ${t('TO', 'to')} ${t(
418
- getStatus(
419
- parseInt(message.change.new, 10),
420
- message.change?.attribute,
421
- ),
422
- )}`
370
+ ?
371
+ `${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${filterSpecialStatus.includes(message.change.attribute) ?
372
+ `${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}` :
373
+ `${message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])} ${t('TO', 'to')} ${t(ORDER_STATUS[parseInt(message.change.new, 10)])}`
374
+ }`
423
375
  : message.change.new
424
- ? `${message.driver?.name} ${message.driver?.lastname !== null ? message.driver.lastname : ''
425
- } ${t('WAS_ASSIGNED_AS_DRIVER', 'Was assigned as driver')} ${message.comment ? message.comment.length : ''
426
- }`
427
- : `${t('DRIVER_UNASSIGNED', 'Driver unassigned')}`}
376
+ ?
377
+ `${message.driver?.name} ${message.driver?.lastname !== null ? message.driver.lastname : ''} ${t('WAS_ASSIGNED_AS_DRIVER', 'Was assigned as driver')} ${message.comment ? message.comment.length : ''}`
378
+ :
379
+ `${t('DRIVER_UNASSIGNED', 'Driver unassigned')}`}
428
380
  </OText>
429
381
  <OText size={10} color={'#aaa'} style={{ alignSelf: 'flex-start' }}>
430
382
  {parseTime(message?.created_at, { outputFormat: 'hh:mma' })}
@@ -532,12 +484,12 @@ const ChatUI = (props: MessagesParams) => {
532
484
  image: message.source,
533
485
  system: message.type === 1,
534
486
  user: {
535
- _id: message.author.id,
536
- name: message.author.name,
487
+ _id: message.author?.id,
488
+ name: message.author?.name,
537
489
  can_see: message?.can_see,
538
- level: message.author.level,
490
+ level: message.author?.level,
539
491
  avatar:
540
- message.author.id !== user?.id && type === USER_TYPE.DRIVER
492
+ message.author?.id !== user?.id && type === USER_TYPE.DRIVER
541
493
  ? order?.driver?.photo
542
494
  : order?.business?.logo,
543
495
  },
@@ -327,6 +327,7 @@ export const DriverMap = (props: GoogleMapsParams) => {
327
327
  justifyContent: 'center',
328
328
  paddingVertical: 10,
329
329
  paddingHorizontal: 80,
330
+ position: 'absolute'
330
331
  },
331
332
  showButton: {
332
333
  alignSelf: 'center',
@@ -490,14 +491,14 @@ export const DriverMap = (props: GoogleMapsParams) => {
490
491
  </View>
491
492
  </View>
492
493
  </View>
493
- <View style={styles.buttonContainer}>
494
+ <View style={{
495
+ ...styles.buttonContainer,
496
+ bottom: showAcceptOrReject ? 80 : 0
497
+ }}>
494
498
  <OButton
495
499
  imgRightSrc=''
496
500
  textStyle={{ color: theme.colors.white }}
497
- style={{
498
- ...styles.showButton,
499
- bottom: showAcceptOrReject ? 80 : 0
500
- }}
501
+ style={styles.showButton}
501
502
  onClick={() => showLocation({
502
503
  latitude: destination.latitude,
503
504
  longitude: destination.longitude,
@@ -0,0 +1,71 @@
1
+ import React, { useState } from 'react'
2
+ import { RefreshControl, ScrollView, View } from 'react-native'
3
+ import { OText } from '../shared'
4
+ import { useLanguage, useSession } from 'ordering-components/native'
5
+ import { DayContainer } from './styles'
6
+ import { useTheme } from 'styled-components/native'
7
+ export const DriverSchedule = (props: any) => {
8
+ const { schedule } = props
9
+ const [, t] = useLanguage()
10
+ const theme = useTheme()
11
+ const [, { refreshUserInfo }] = useSession()
12
+ const [refreshing] = useState(false);
13
+
14
+ const daysOfWeek = [
15
+ t('SUNDAY_ABBREVIATION', 'Sun'),
16
+ t('MONDAY_ABBREVIATION', 'Mon'),
17
+ t('TUESDAY_ABBREVIATION', 'Tues'),
18
+ t('WEDNESDAY_ABBREVIATION', 'Wed'),
19
+ t('THURSDAY_ABBREVIATION', 'Thur'),
20
+ t('FRIDAY_ABBREVIATION', 'Fri'),
21
+ t('SATURDAY_ABBREVIATION', 'Sat')
22
+ ]
23
+
24
+ const scheduleFormatted = ({ hour, minute }: any) => {
25
+ const checkTime = (val: number) => val < 10 ? `0${val}` : val
26
+ return `${checkTime(hour)}:${checkTime(minute)}`
27
+ }
28
+
29
+ return (
30
+ <ScrollView
31
+ refreshControl={<RefreshControl
32
+ refreshing={refreshing}
33
+ onRefresh={() => refreshUserInfo()}
34
+ />}
35
+ >
36
+ <OText size={24} style={{ paddingLeft: 30 }}>
37
+ {t('SCHEDULE', 'Schedule')}
38
+ </OText>
39
+ <View style={{ padding: 30 }}>
40
+ {schedule.map((item: any, i: number) => (
41
+ <DayContainer key={daysOfWeek[i]}>
42
+ <OText style={{ width: '20%' }} size={22} weight={700}>{daysOfWeek[i]}</OText>
43
+ <View style={{ width: '80%', alignItems: 'center' }}>
44
+ <>
45
+ {item?.enabled ? (
46
+ <View>
47
+ {item?.lapses.map((lapse: any, i: number) => (
48
+ <View key={`${daysOfWeek[i]}_${i}`} style={{ marginTop: 3, marginBottom: 20, flexDirection: 'row', justifyContent: 'space-between' }}>
49
+ <OText size={18} style={{ width: '30%' }}>
50
+ {scheduleFormatted(lapse.open)}
51
+ </OText>
52
+ <OText size={18} style={{ width: 15 }}>
53
+ -
54
+ </OText>
55
+ <OText size={18} style={{ width: '30%' }}>
56
+ {scheduleFormatted(lapse.close)}
57
+ </OText>
58
+ </View>
59
+ ))}
60
+ </View>
61
+ ) : (
62
+ <OText size={18} style={{ marginTop: 3, marginBottom: 10 }} color={theme.colors.red}>{t('NOT_AVAILABLE', 'Not available')}</OText>
63
+ )}
64
+ </>
65
+ </View>
66
+ </DayContainer>
67
+ ))}
68
+ </View>
69
+ </ScrollView>
70
+ )
71
+ }
@@ -0,0 +1,6 @@
1
+ import styled from "styled-components/native";
2
+
3
+ export const DayContainer = styled.View`
4
+ flex-direction: row;
5
+ width: 100%;
6
+ `
@@ -8,6 +8,8 @@ import {
8
8
  ScrollView,
9
9
  } from 'react-native';
10
10
  import { useForm, Controller } from 'react-hook-form';
11
+ import Recaptcha from 'react-native-recaptcha-that-works'
12
+ import { TouchableOpacity } from 'react-native-gesture-handler';
11
13
  import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
12
14
  import {
13
15
  ToastType,
@@ -25,6 +27,7 @@ import {
25
27
  TabsContainer,
26
28
  OrSeparator,
27
29
  LineSeparator,
30
+ RecaptchaButton
28
31
  } from './styles';
29
32
  import { _setStoreData } from '../../providers/StoreUtil'
30
33
  import { OText, OButton, OInput, OIconButton, OModal } from '../shared';
@@ -47,7 +50,10 @@ const LoginFormUI = (props: LoginParams) => {
47
50
  handleCheckPhoneCode,
48
51
  setCheckPhoneCodeState,
49
52
  allowedLevels,
50
- useRootPoint
53
+ useRootPoint,
54
+ notificationState,
55
+ handleReCaptcha,
56
+ enableReCaptcha
51
57
  } = props;
52
58
 
53
59
  const [ordering, { setOrdering }] = useApi();
@@ -61,6 +67,7 @@ const LoginFormUI = (props: LoginParams) => {
61
67
  const inputRef = useRef<any>(null);
62
68
  const inputMailRef = useRef<any>(null);
63
69
 
70
+ const [projectName, setProjectName] = useState({name: '', isFocued: false});
64
71
  const [passwordSee, setPasswordSee] = useState(false);
65
72
  const [isLoadingVerifyModal, setIsLoadingVerifyModal] = useState(false);
66
73
  const [isModalVisible, setIsModalVisible] = useState(false);
@@ -84,6 +91,50 @@ const LoginFormUI = (props: LoginParams) => {
84
91
  const [submitted, setSubmitted] = useState(false);
85
92
  const [formValues, setFormValues] = useState(null);
86
93
 
94
+ const [recaptchaConfig, setRecaptchaConfig] = useState<any>({})
95
+ const [recaptchaVerified, setRecaptchaVerified] = useState(false)
96
+
97
+ const recaptchaRef = useRef<any>({});
98
+
99
+ 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])
125
+
126
+ useEffect(() => {
127
+ const projectInputInterval = setInterval(() => {
128
+ if (projectName.name && useRootPoint && projectName.isFocued) {
129
+ setOrdering({
130
+ ...ordering,
131
+ project: projectName.name
132
+ })
133
+ }
134
+ }, 1500)
135
+ return () => clearInterval(projectInputInterval);
136
+ }, [projectName])
137
+
87
138
  const getTraduction = (key: string) => {
88
139
  const keyList: any = {
89
140
  // Add the key and traduction that you need below
@@ -465,6 +516,7 @@ const LoginFormUI = (props: LoginParams) => {
465
516
  icon={theme.images.general.project}
466
517
  iconColor={theme.colors.arrowColor}
467
518
  onChange={(e: any) => {
519
+ setProjectName({name: e?.target?.value, isFocued: true})
468
520
  onChange(e?.target?.value);
469
521
  setSubmitted(false);
470
522
  }}
@@ -493,6 +545,7 @@ const LoginFormUI = (props: LoginParams) => {
493
545
  icon={theme.images.logos.emailInputIcon}
494
546
  iconColor={theme.colors.arrowColor}
495
547
  onChange={(e: any) => {
548
+ setProjectName({...projectName, isFocued: false})
496
549
  handleChangeInputEmail(e, onChange);
497
550
  }}
498
551
  selectionColor={theme.colors.primary}
@@ -590,7 +643,7 @@ const LoginFormUI = (props: LoginParams) => {
590
643
 
591
644
  {onNavigationRedirect && (
592
645
  <Pressable
593
- style={{ marginRight: 'auto', marginBottom: 35 }}
646
+ style={{ marginRight: 'auto', marginBottom: 20 }}
594
647
  onPress={() => onNavigationRedirect('Forgot')}>
595
648
  <OText style={styles.textForgot}>
596
649
  {t('FORGOT_YOUR_PASSWORD', 'Forgot your password?')}
@@ -598,6 +651,39 @@ const LoginFormUI = (props: LoginParams) => {
598
651
  </Pressable>
599
652
  )}
600
653
 
654
+ {enableReCaptcha && (
655
+ <>
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
+ />
684
+ </>
685
+ )}
686
+
601
687
  <OButton
602
688
  onClick={handleLogin}
603
689
  text={t('LOGIN', 'Login')}
@@ -657,6 +743,7 @@ const LoginFormUI = (props: LoginParams) => {
657
743
  export const LoginForm = (props: any) => {
658
744
  const loginProps = {
659
745
  ...props,
746
+ isRecaptchaEnable: true,
660
747
  UIComponent: LoginFormUI,
661
748
  };
662
749
 
@@ -46,3 +46,9 @@ export const LineSeparator = styled.View`
46
46
  height: 1px;
47
47
  background-color: ${(props: any) => props.theme.colors.disabled};
48
48
  `;
49
+
50
+ export const RecaptchaButton = styled.View`
51
+ flex-direction: row;
52
+ align-items: center;
53
+ margin-bottom: 10px;
54
+ `
@@ -15,7 +15,7 @@ const LogoutButtonUI = (props: any) => {
15
15
  const data = await _retrieveStoreData('notification_state');
16
16
  const res = await handleLogoutClick(data);
17
17
  if (res) {
18
- _clearStoreData({ excludedKeys: ['project_name'] });
18
+ _clearStoreData({ excludedKeys: ['isTutorial'] });
19
19
  }
20
20
  };
21
21