ordering-ui-react-native 0.17.10 → 0.17.11-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 (214) hide show
  1. package/package.json +5 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +11 -4
  4. package/src/components/BusinessInformation/styles.tsx +2 -2
  5. package/src/components/BusinessesListing/index.tsx +1 -1
  6. package/src/components/OrderCreating/index.tsx +1 -21
  7. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  8. package/src/components/SingleProductReview/index.tsx +0 -24
  9. package/src/components/SingleProductReview/styles.tsx +0 -12
  10. package/src/components/StripeMethodForm/index.tsx +6 -14
  11. package/src/components/VerifyPhone/styles.tsx +1 -2
  12. package/src/components/shared/OToast.tsx +4 -4
  13. package/src/utils/index.tsx +7 -1
  14. package/themes/business/index.tsx +2 -0
  15. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  16. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  17. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  18. package/themes/business/src/components/Chat/index.tsx +118 -107
  19. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  20. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  21. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  22. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  23. package/themes/business/src/components/LoginForm/index.tsx +238 -80
  24. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  25. package/themes/business/src/components/MapView/index.tsx +18 -7
  26. package/themes/business/src/components/NewOrderNotification/index.tsx +43 -50
  27. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +98 -50
  29. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  30. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  31. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  32. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  33. package/themes/business/src/components/OrderSummary/index.tsx +113 -121
  34. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  35. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  36. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  37. package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
  38. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  39. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  40. package/themes/business/src/components/ReviewCustomer/index.tsx +41 -24
  41. package/themes/business/src/components/StoresList/index.tsx +2 -2
  42. package/themes/business/src/components/shared/OLink.tsx +33 -13
  43. package/themes/business/src/components/shared/OModal.tsx +16 -9
  44. package/themes/business/src/components/shared/OText.tsx +8 -2
  45. package/themes/business/src/types/index.tsx +33 -2
  46. package/themes/business/src/utils/index.tsx +51 -0
  47. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  48. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  49. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  50. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  51. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  52. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  53. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  54. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  55. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  56. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  57. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  58. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  59. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +3 -2
  60. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  61. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  62. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  63. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  64. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  65. package/themes/kiosk/src/types/index.d.ts +13 -0
  66. package/themes/kiosk/src/utils/index.tsx +15 -0
  67. package/themes/original/index.tsx +8 -0
  68. package/themes/original/src/components/AddressDetails/index.tsx +29 -11
  69. package/themes/original/src/components/AddressForm/index.tsx +41 -16
  70. package/themes/original/src/components/AddressList/index.tsx +26 -21
  71. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  72. package/themes/original/src/components/AnalyticsSegment/index.tsx +189 -9
  73. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  74. package/themes/original/src/components/BusinessBasicInformation/index.tsx +125 -82
  75. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -4
  76. package/themes/original/src/components/BusinessController/index.tsx +145 -68
  77. package/themes/original/src/components/BusinessController/styles.tsx +22 -9
  78. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  79. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  80. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  81. package/themes/original/src/components/BusinessItemAccordion/index.tsx +24 -23
  82. package/themes/original/src/components/BusinessListingSearch/index.tsx +350 -323
  83. package/themes/original/src/components/BusinessPreorder/index.tsx +97 -16
  84. package/themes/original/src/components/BusinessProductsList/index.tsx +20 -11
  85. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  86. package/themes/original/src/components/BusinessProductsListing/index.tsx +617 -492
  87. package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -13
  88. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  89. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -3
  90. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +98 -78
  92. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  93. package/themes/original/src/components/BusinessesListing/index.tsx +5 -3
  94. package/themes/original/src/components/Cart/index.tsx +88 -43
  95. package/themes/original/src/components/CartContent/index.tsx +110 -19
  96. package/themes/original/src/components/CartContent/styles.tsx +15 -1
  97. package/themes/original/src/components/Checkout/index.tsx +311 -178
  98. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  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/CouponControl/index.tsx +10 -3
  102. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  103. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  104. package/themes/original/src/components/Favorite/index.tsx +7 -4
  105. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  106. package/themes/original/src/components/FavoriteList/index.tsx +51 -80
  107. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  108. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  109. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  110. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  111. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  112. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  113. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  114. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +178 -0
  115. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  116. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  117. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  118. package/themes/original/src/components/Help/index.tsx +8 -8
  119. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  120. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  121. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  122. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  123. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  124. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  125. package/themes/original/src/components/Home/index.tsx +13 -4
  126. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  127. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  128. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  129. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  130. package/themes/original/src/components/LoginForm/index.tsx +43 -19
  131. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  132. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  133. package/themes/original/src/components/Messages/index.tsx +32 -10
  134. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  135. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  136. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +117 -96
  137. package/themes/original/src/components/MultiCheckout/index.tsx +248 -83
  138. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  139. package/themes/original/src/components/MultiOrdersDetails/index.tsx +67 -20
  140. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  141. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  142. package/themes/original/src/components/NavBar/index.tsx +6 -11
  143. package/themes/original/src/components/Notifications/index.tsx +144 -0
  144. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  145. package/themes/original/src/components/OrderDetails/OrderEta.tsx +61 -0
  146. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +10 -3
  147. package/themes/original/src/components/OrderDetails/index.tsx +262 -347
  148. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  149. package/themes/original/src/components/OrderItAgain/index.tsx +47 -43
  150. package/themes/original/src/components/OrderProgress/index.tsx +74 -112
  151. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  152. package/themes/original/src/components/OrderSummary/index.tsx +67 -29
  153. package/themes/original/src/components/OrderTypeSelector/index.tsx +3 -2
  154. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +28 -19
  155. package/themes/original/src/components/OrdersOption/index.tsx +99 -89
  156. package/themes/original/src/components/PageBanner/index.tsx +171 -0
  157. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  158. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  159. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  160. package/themes/original/src/components/PaymentOptions/index.tsx +3 -3
  161. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  162. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  163. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  164. package/themes/original/src/components/ProductForm/index.tsx +231 -253
  165. package/themes/original/src/components/ProductForm/styles.tsx +4 -7
  166. package/themes/original/src/components/ProductItemAccordion/index.tsx +197 -138
  167. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  168. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  169. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  170. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  171. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  172. package/themes/original/src/components/Promotions/index.tsx +234 -220
  173. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  174. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  175. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  176. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  177. package/themes/original/src/components/ReviewProducts/index.tsx +7 -4
  178. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  179. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  180. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  181. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  182. package/themes/original/src/components/ServiceForm/index.tsx +358 -275
  183. package/themes/original/src/components/Sessions/index.tsx +11 -8
  184. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  185. package/themes/original/src/components/SignupForm/index.tsx +82 -67
  186. package/themes/original/src/components/SingleOrderCard/index.tsx +148 -62
  187. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -9
  188. package/themes/original/src/components/SingleProductCard/index.tsx +99 -55
  189. package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
  190. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  191. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  192. package/themes/original/src/components/StripeCardsList/index.tsx +9 -2
  193. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  194. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -218
  195. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  196. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  197. package/themes/original/src/components/UserFormDetails/index.tsx +53 -54
  198. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  199. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  200. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  201. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  202. package/themes/original/src/components/Wallets/index.tsx +31 -17
  203. package/themes/original/src/components/Wallets/styles.tsx +2 -0
  204. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  205. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  206. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  207. package/themes/original/src/components/shared/OButton.tsx +6 -2
  208. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  209. package/themes/original/src/components/shared/OInput.tsx +10 -1
  210. package/themes/original/src/components/shared/OModal.tsx +3 -3
  211. package/themes/original/src/layouts/Container.tsx +13 -9
  212. package/themes/original/src/types/index.tsx +43 -9
  213. package/themes/original/src/utils/index.tsx +375 -58
  214. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useState, useRef } from 'react';
2
- import { StyleSheet, View, Keyboard } from 'react-native';
2
+ import { StyleSheet, View, Keyboard, Vibration } from 'react-native';
3
3
  import Spinner from 'react-native-loading-spinner-overlay';
4
4
  import { useForm, Controller } from 'react-hook-form';
5
5
  import { PhoneInputNumber } from '../PhoneInputNumber';
@@ -72,6 +72,7 @@ const LoginFormUI = (props: LoginParams) => {
72
72
  generateOtpCode,
73
73
  useLoginOtpEmail,
74
74
  useLoginOtpCellphone,
75
+ isGuest
75
76
  } = props;
76
77
 
77
78
  const [, { showToast }] = useToast();
@@ -96,7 +97,7 @@ const LoginFormUI = (props: LoginParams) => {
96
97
  const [alertState, setAlertState] = useState({ open: false, title: '', content: [] })
97
98
  const [tabLayouts, setTabLayouts] = useState<any>({})
98
99
  const tabsRef = useRef<any>(null)
99
-
100
+ const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
100
101
  const theme = useTheme();
101
102
  const isOtpEmail = loginTab === 'otp' && otpType === 'email'
102
103
  const isOtpCellphone = loginTab === 'otp' && otpType === 'cellphone'
@@ -165,6 +166,7 @@ const LoginFormUI = (props: LoginParams) => {
165
166
  if (loginTab === 'otp') {
166
167
  if (phoneInputData.error && (loginTab !== 'otp' || (otpType === 'cellphone' && loginTab === 'otp'))) {
167
168
  showToast(ToastType.Error, t('INVALID_PHONE_NUMBER', 'Invalid phone number'));
169
+ Vibration.vibrate()
168
170
  return
169
171
  }
170
172
  if (loginTab === 'otp') {
@@ -177,6 +179,7 @@ const LoginFormUI = (props: LoginParams) => {
177
179
  } else {
178
180
  if (phoneInputData.error) {
179
181
  showToast(ToastType.Error, phoneInputData.error);
182
+ Vibration.vibrate()
180
183
  return;
181
184
  }
182
185
  handleButtonLoginClick({
@@ -189,6 +192,7 @@ const LoginFormUI = (props: LoginParams) => {
189
192
  const handleVerifyCodeClick = () => {
190
193
  if (phoneInputData.error) {
191
194
  showToast(ToastType.Error, phoneInputData.error);
195
+ Vibration.vibrate()
192
196
  return;
193
197
  }
194
198
  if (
@@ -203,6 +207,7 @@ const LoginFormUI = (props: LoginParams) => {
203
207
  'The field Mobile phone is required.',
204
208
  ),
205
209
  );
210
+ Vibration.vibrate()
206
211
  return;
207
212
  }
208
213
  handleSendVerifyCode && handleSendVerifyCode(phoneInputData.phone);
@@ -217,17 +222,19 @@ const LoginFormUI = (props: LoginParams) => {
217
222
  };
218
223
 
219
224
  const handleChangeInputEmail = (value: string, onChange: any) => {
220
- onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
225
+ onChange(value.toLowerCase().trim().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
221
226
  };
222
227
 
223
228
  const handleOpenRecaptcha = () => {
224
229
  setRecaptchaVerified(false)
225
230
  if (!recaptchaConfig?.siteKey) {
226
231
  showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
232
+ Vibration.vibrate()
227
233
  return
228
234
  }
229
235
  if (!recaptchaConfig?.baseUrl) {
230
236
  showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
237
+ Vibration.vibrate()
231
238
  return
232
239
  }
233
240
 
@@ -304,6 +311,7 @@ const LoginFormUI = (props: LoginParams) => {
304
311
  baseUrl: configs?.security_recaptcha_base_url?.value || null
305
312
  })
306
313
  showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
314
+ Vibration.vibrate()
307
315
  return
308
316
  }
309
317
  formState.result?.result &&
@@ -313,6 +321,7 @@ const LoginFormUI = (props: LoginParams) => {
313
321
  ? formState.result?.result
314
322
  : formState.result?.result[0],
315
323
  );
324
+ formState.result?.result && Vibration.vibrate()
316
325
  }
317
326
  }, [formState]);
318
327
 
@@ -324,6 +333,7 @@ const LoginFormUI = (props: LoginParams) => {
324
333
  ? verifyPhoneState?.result?.result
325
334
  : verifyPhoneState?.result?.result[0];
326
335
  verifyPhoneState.result?.result && showToast(ToastType.Error, message);
336
+ verifyPhoneState.result?.result && Vibration.vibrate();
327
337
  setIsLoadingVerifyModal(false);
328
338
  return;
329
339
  }
@@ -363,18 +373,25 @@ const LoginFormUI = (props: LoginParams) => {
363
373
  }
364
374
  }, [checkPhoneCodeState])
365
375
 
376
+ useEffect(() => {
377
+ if (!!Object.values(errors)?.length) Vibration.vibrate()
378
+ }, [errors])
379
+
366
380
  return (
367
381
  <Container>
368
- <NavBar
369
- title={t('LOGIN', 'Login')}
370
- titleAlign={'center'}
371
- onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
372
- showCall={false}
373
- btnStyle={{ paddingLeft: 0 }}
374
- style={{ flexDirection: 'column', alignItems: 'flex-start' }}
375
- titleWrapStyle={{ paddingHorizontal: 0 }}
376
- titleStyle={{ marginRight: 0, marginLeft: 0 }}
377
- />
382
+ {isGuest ? (
383
+ <OText style={{ textAlign: 'center', marginBottom: 10 }} size={18}>{t('LOGIN', 'Login')}</OText>
384
+ ) : (
385
+ <NavBar
386
+ title={t('LOGIN', 'Login')}
387
+ titleAlign={'center'}
388
+ onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
389
+ showCall={false}
390
+ btnStyle={{ paddingLeft: 0 }}
391
+ titleWrapStyle={{ paddingHorizontal: 0 }}
392
+ titleStyle={{ marginRight: 0, marginLeft: 0 }}
393
+ />
394
+ )}
378
395
  <FormSide>
379
396
  {(Number(useLoginByEmail) + Number(useLoginByCellphone) + Number(useLoginOtpEmail) + Number(useLoginOtpCellphone) > 1) && (
380
397
  <LoginWith>
@@ -680,7 +697,7 @@ const LoginFormUI = (props: LoginParams) => {
680
697
  {t('NEW_ON_PLATFORM', 'New on Ordering?')}
681
698
  </OText>
682
699
  <TouchableOpacity onPress={() => onNavigationRedirect('Signup')}>
683
- <OText size={14} mLeft={5} color={theme.colors.skyBlue}>
700
+ <OText size={14} mLeft={5} color={theme.colors.primary}>
684
701
  {t('CREATE_ACCOUNT', 'Create account')}
685
702
  </OText>
686
703
  </TouchableOpacity>
@@ -719,8 +736,9 @@ const LoginFormUI = (props: LoginParams) => {
719
736
  )}
720
737
 
721
738
  {configs && Object.keys(configs).length > 0 ? (
722
- (((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value) ||
723
- (configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null)) &&
739
+ (((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
740
+ ((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
741
+ ((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) && !isGuest &&
724
742
  (
725
743
  <>
726
744
  <View
@@ -748,7 +766,7 @@ const LoginFormUI = (props: LoginParams) => {
748
766
  facebookLoginEnabled && (
749
767
  <FacebookLogin
750
768
  notificationState={notificationState}
751
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
769
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
752
770
  handleLoading={(val: boolean) => setIsFBLoading(val)}
753
771
  handleSuccessFacebookLogin={handleSuccessFacebook}
754
772
  />
@@ -757,7 +775,7 @@ const LoginFormUI = (props: LoginParams) => {
757
775
  <GoogleLogin
758
776
  notificationState={notificationState}
759
777
  webClientId={configs?.google_login_client_id?.value}
760
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
778
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
761
779
  handleLoading={(val: boolean) => setIsFBLoading(val)}
762
780
  handleSuccessGoogleLogin={handleSuccessFacebook}
763
781
  />
@@ -765,7 +783,7 @@ const LoginFormUI = (props: LoginParams) => {
765
783
  {(configs?.apple_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && appleLoginEnabled && (
766
784
  <AppleLogin
767
785
  notificationState={notificationState}
768
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
786
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
769
787
  handleLoading={(val: boolean) => setIsFBLoading(val)}
770
788
  handleSuccessAppleLogin={handleSuccessFacebook}
771
789
  />
@@ -788,6 +806,12 @@ const LoginFormUI = (props: LoginParams) => {
788
806
  </Placeholder>
789
807
  </SkeletonWrapper>
790
808
  )}
809
+
810
+ {enabledPoweredByOrdering && (
811
+ <OText>
812
+ Powered By Ordering.co
813
+ </OText>
814
+ )}
791
815
  </FormSide>
792
816
  <OModal
793
817
  open={isModalVisible}
@@ -0,0 +1,78 @@
1
+ import React, { useRef, useState } from 'react'
2
+ import Lottie from 'lottie-react-native';
3
+ import { TouchableOpacity, Easing, ViewStyle, Animated } from 'react-native';
4
+ import IconAntDesign from 'react-native-vector-icons/AntDesign'
5
+ import { useTheme } from 'styled-components';
6
+
7
+ interface Props {
8
+ initialValue: number,
9
+ onClick: any,
10
+ disableAnimation?: boolean
11
+ toValue: number,
12
+ style?: ViewStyle,
13
+ duration?: number,
14
+ type: 'favorite', // animation types
15
+ isActive: boolean,
16
+ animationType?: ((value: number) => number);
17
+ useNativeDriver?: boolean,
18
+ iconProps?: { color?: string, size?: number, style?: ViewStyle }
19
+ }
20
+
21
+ export const LottieAnimation = (props: Props) => {
22
+ const {
23
+ initialValue,
24
+ onClick,
25
+ disableAnimation,
26
+ toValue,
27
+ style,
28
+ duration,
29
+ type,
30
+ isActive,
31
+ useNativeDriver,
32
+ animationType,
33
+ iconProps
34
+ } = props
35
+ const theme = useTheme()
36
+ const animationProgress = useRef(new Animated.Value(initialValue))
37
+ const [isHide, setIsHide] = useState(true)
38
+ const favoriteArray = ['heart', 'hearto']
39
+ const icon = type === 'favorite' ? favoriteArray : []
40
+ const animationGif = type === 'favorite' ? theme.images?.general?.heart : ''
41
+ const onPressLottie = () => {
42
+ if (!disableAnimation) {
43
+ setIsHide(false)
44
+ Animated.timing(animationProgress.current, {
45
+ toValue,
46
+ duration: duration || 5000,
47
+ easing: animationType || Easing.linear,
48
+ useNativeDriver: useNativeDriver ?? true
49
+ }).start();
50
+ hideLottie()
51
+ }
52
+ onClick()
53
+ }
54
+
55
+ const hideLottie = () => {
56
+ setTimeout(() => setIsHide(true), 4500)
57
+ }
58
+
59
+ return (
60
+ <TouchableOpacity
61
+ onPress={onPressLottie}
62
+ style={style}
63
+ >
64
+ {!isHide &&
65
+ <Lottie
66
+ progress={animationProgress.current}
67
+ source={animationGif}
68
+ />
69
+ }
70
+ <IconAntDesign
71
+ name={isActive ? icon[0] : icon[1]}
72
+ color={iconProps?.color || theme.colors.danger5}
73
+ size={iconProps?.size || 16}
74
+ style={iconProps?.style}
75
+ />
76
+ </TouchableOpacity>
77
+ )
78
+ }
@@ -16,11 +16,12 @@ import {
16
16
  PlaceholderLine,
17
17
  Fade
18
18
  } from "rn-placeholder";
19
- import { View, BackHandler } from 'react-native'
19
+ import { View, BackHandler, Platform } from 'react-native'
20
20
  import {
21
21
  MessageListingWrapper,
22
22
  MessageContainer
23
23
  } from './styles';
24
+ import { getOrderStatus } from '../../utils'
24
25
 
25
26
  const OrdersOptionUI = (props: OrdersOptionParams) => {
26
27
  const {
@@ -51,40 +52,6 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
51
52
  : theme.images.general.emptyPastOrders
52
53
  const orders = customArray || values || []
53
54
 
54
- const getOrderStatus = (s: string) => {
55
- const status = parseInt(s)
56
- const orderStatus = [
57
- { key: 0, value: t('PENDING', 'Pending') },
58
- { key: 1, value: t('COMPLETED', 'Completed') },
59
- { key: 2, value: t('REJECTED', 'Rejected') },
60
- { key: 3, value: t('DRIVER_IN_BUSINESS', 'Driver in business') },
61
- { key: 4, value: t('PREPARATION_COMPLETED', 'Preparation Completed') },
62
- { key: 5, value: t('REJECTED_BY_BUSINESS', 'Rejected by business') },
63
- { key: 6, value: t('REJECTED_BY_DRIVER', 'Rejected by Driver') },
64
- { key: 7, value: t('ACCEPTED_BY_BUSINESS', 'Accepted by business') },
65
- { key: 8, value: t('ACCEPTED_BY_DRIVER', 'Accepted by driver') },
66
- { key: 9, value: t('PICK_UP_COMPLETED_BY_DRIVER', 'Pick up completed by driver') },
67
- { key: 10, value: t('PICK_UP_FAILED_BY_DRIVER', 'Pick up Failed by driver') },
68
- { key: 11, value: t('DELIVERY_COMPLETED_BY_DRIVER', 'Delivery completed by driver') },
69
- { key: 12, value: t('DELIVERY_FAILED_BY_DRIVER', 'Delivery Failed by driver') },
70
- { key: 13, value: t('PREORDER', 'PreOrder') },
71
- { key: 14, value: t('ORDER_NOT_READY', 'Order not ready') },
72
- { key: 15, value: t('ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER', 'Order picked up completed by customer') },
73
- { key: 16, value: t('CANCELLED_BY_CUSTOMER', 'Cancelled by customer') },
74
- { key: 17, value: t('ORDER_NOT_PICKEDUP_BY_CUSTOMER', 'Order not picked up by customer') },
75
- { key: 18, value: t('DRIVER_ALMOST_ARRIVED_TO_BUSINESS', 'Driver almost arrived to business') },
76
- { key: 19, value: t('DRIVER_ALMOST_ARRIVED_TO_CUSTOMER', 'Driver almost arrived to customer') },
77
- { key: 20, value: t('ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS', 'Customer almost arrived to business') },
78
- { key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') },
79
- { key: 22, value: t('ORDER_LOOKING_FOR_DRIVER', 'Looking for driver') },
80
- { key: 23, value: t('ORDER_DRIVER_ON_WAY', 'Driver on way') }
81
- ]
82
-
83
- const objectStatus = orderStatus.find((o) => o.key === status)
84
-
85
- return objectStatus && objectStatus
86
- }
87
-
88
55
  const handleClickOrder = (uuid: string) => {
89
56
  setSelectedOrderId(uuid)
90
57
  setOpenMessges(true)
@@ -102,7 +69,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
102
69
  }, [orderList, loading])
103
70
 
104
71
  useEffect(() => {
105
- if(refreshOrders){
72
+ if (refreshOrders) {
106
73
  loadOrders(false, false, false, true)
107
74
  setRefreshOrders && setRefreshOrders(false)
108
75
  }
@@ -156,7 +123,9 @@ const OrderMessageUI = (props: any) => {
156
123
  setMessages,
157
124
  readMessages,
158
125
  messagesReadList,
159
- setOpenMessges
126
+ setOpenMessges,
127
+ setSeletedOrder,
128
+ setSelectedOrderId
160
129
  } = props;
161
130
  const [openModalForBusiness, setOpenModalForBusiness] = useState(false);
162
131
  const [openModalForDriver, setOpenModalForDriver] = useState(false);
@@ -173,6 +142,8 @@ const OrderMessageUI = (props: any) => {
173
142
 
174
143
  const handleClose = () => {
175
144
  setOpenMessges(false)
145
+ setSeletedOrder(null)
146
+ setSelectedOrderId(null)
176
147
  }
177
148
 
178
149
  const handleOpenMessages = (data: any) => {
@@ -225,7 +196,7 @@ const OrderMessageUI = (props: any) => {
225
196
  }
226
197
 
227
198
  export const OrderListing = (props: OrdersOptionParams) => {
228
- const [businessState] = useBusiness();
199
+ const [businessState] = useBusiness();
229
200
  const OrderListingProps = {
230
201
  ...props,
231
202
  UIComponent: OrdersOptionUI,
@@ -236,7 +207,7 @@ export const OrderListing = (props: OrdersOptionParams) => {
236
207
  pageSize: 10,
237
208
  controlType: 'infinity'
238
209
  },
239
- businessId: businessState?.business?.id,
210
+ businessId: businessState?.business?.id,
240
211
  profileMessages: true,
241
212
  orderBy: 'last_direct_message_at',
242
213
  orderDirection: 'asc'
@@ -292,7 +263,7 @@ export const MessageListing = (props: MessageListingParams) => {
292
263
  titleAlign={'center'}
293
264
  onActionLeft={goToBack}
294
265
  showCall={false}
295
- paddingTop={10}
266
+ paddingTop={Platform.OS === 'ios' ? 20 : 10}
296
267
  btnStyle={{ paddingLeft: 0 }}
297
268
  />
298
269
  <OrderListing
@@ -300,9 +271,9 @@ export const MessageListing = (props: MessageListingParams) => {
300
271
  setSelectedOrderId={setSelectedOrderId}
301
272
  setOrderList={setOrderListStatus}
302
273
  setOpenMessges={setOpenMessges}
303
- franchiseId={props.franchiseId}
274
+ franchiseId={props.franchiseId}
304
275
  />
305
- {openMessages && seletedOrder && (
276
+ {openMessages && !!seletedOrder?.id && (
306
277
  <OModal
307
278
  open={openMessages}
308
279
  entireModal
@@ -311,7 +282,10 @@ export const MessageListing = (props: MessageListingParams) => {
311
282
  >
312
283
  <MessagesView
313
284
  order={seletedOrder}
285
+ orderId={seletedOrder?.id}
314
286
  setOpenMessges={setOpenMessges}
287
+ setSeletedOrder={setSeletedOrder}
288
+ setSelectedOrderId={setSelectedOrderId}
315
289
  />
316
290
  </OModal>
317
291
  )}
@@ -1,4 +1,5 @@
1
1
  import React, { useEffect, useState } from 'react'
2
+ import Clipboard from '@react-native-clipboard/clipboard';
2
3
  import { Messages as MessagesController, useSession, useUtils, useLanguage, ToastType, useToast } from 'ordering-components/native'
3
4
  import { useTheme } from 'styled-components/native';
4
5
  import { launchImageLibrary } from 'react-native-image-picker'
@@ -12,6 +13,7 @@ import { Header, TitleHeader, Wrapper, QuickMessageContainer, ProfileMessageHead
12
13
  import { MessagesParams } from '../../types'
13
14
  import { useWindowDimensions } from 'react-native'
14
15
  import { useSafeAreaInsets } from 'react-native-safe-area-context'
16
+ import { getLogisticTag } from '../../utils'
15
17
 
16
18
  const ORDER_STATUS: any = {
17
19
  0: 'ORDER_STATUS_PENDING',
@@ -126,7 +128,7 @@ const MessagesUI = (props: MessagesParams) => {
126
128
  ?
127
129
  `${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${filterSpecialStatus.includes(message.change.attribute) ?
128
130
  `${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}` :
129
- `${message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])} ${t('TO', 'to')} ${t(ORDER_STATUS[parseInt(message.change.new, 10)])}`
131
+ `${message.change?.attribute !== 'logistic_status' ? message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)]) : message.change.old !== null && getLogisticTag(message.change.old)} ${t('TO', 'to')} ${message.change?.attribute !== 'logistic_status' ? t(ORDER_STATUS[parseInt(message.change.new, 10)]) : getLogisticTag(message.change.new)}`
130
132
  }`
131
133
  : message.change.new
132
134
  ?
@@ -141,7 +143,7 @@ const MessagesUI = (props: MessagesParams) => {
141
143
  const firstMessage = {
142
144
  _id: 0,
143
145
  text: _console,
144
- createdAt: order?.created_at,
146
+ createdAt: parseDate(order?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
145
147
  system: true
146
148
  }
147
149
  const newMessage: any = [];
@@ -150,13 +152,13 @@ const MessagesUI = (props: MessagesParams) => {
150
152
  newMessage.push({
151
153
  _id: message?.id,
152
154
  text: message.type === 1 ? messageConsole(message) : message.comment,
153
- createdAt: message.type !== 0 && message.created_at,
155
+ createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
154
156
  image: message.source,
155
157
  system: message.type === 1,
156
158
  user: {
157
- _id: message.author.id,
158
- name: message.author.name,
159
- avatar: message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo
159
+ _id: message.author && message.author.id,
160
+ name: message.author && message.author.name,
161
+ avatar: message.author && (message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo)
160
162
  }
161
163
  });
162
164
  }
@@ -165,13 +167,13 @@ const MessagesUI = (props: MessagesParams) => {
165
167
  newMessage.push({
166
168
  _id: message?.id,
167
169
  text: message.type === 1 ? messageConsole(message) : message.comment,
168
- createdAt: message.type !== 0 && message.created_at,
170
+ createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
169
171
  image: message.source,
170
172
  system: message.type === 1,
171
173
  user: {
172
- _id: message.author.id,
173
- name: message.author.name,
174
- avatar: message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo
174
+ _id: message.author && message.author.id,
175
+ name: message.author && message.author.name,
176
+ avatar: message.author && (message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo)
175
177
  }
176
178
  });
177
179
  }
@@ -240,6 +242,7 @@ const MessagesUI = (props: MessagesParams) => {
240
242
 
241
243
  const renderAccessory = () => {
242
244
  return (
245
+ !chatDisabled &&
243
246
  <QuickMessageContainer
244
247
  style={{
245
248
  marginLeft: 10,
@@ -397,6 +400,24 @@ const MessagesUI = (props: MessagesParams) => {
397
400
  }
398
401
  }
399
402
 
403
+ const onLongPress = (context: any, message: any) => {
404
+ const options = [
405
+ t('COPY_TEXT', 'Copy text'),
406
+ t('CANCEL', 'Cancel'),
407
+ ];
408
+ const cancelButtonIndex = options.length - 1;
409
+ context.actionSheet().showActionSheetWithOptions({
410
+ options,
411
+ cancelButtonIndex
412
+ }, (buttonIndex: any) => buttonIndex === 0 && Clipboard.setString(message.text)
413
+ );
414
+ }
415
+
416
+ useEffect(() => {
417
+ if (!order?.id || messages?.loading) return
418
+ readMessages && readMessages()
419
+ }, [order?.id, messages?.loading])
420
+
400
421
  return (
401
422
  <View style={{ height: getViewHeight(), width: '100%', paddingTop: 12, backgroundColor: 'white' }}>
402
423
  <Wrapper>
@@ -473,6 +494,7 @@ const MessagesUI = (props: MessagesParams) => {
473
494
  onSend={onSubmit}
474
495
  onInputTextChanged={onChangeMessage}
475
496
  alignTop
497
+ onLongPress={(context: any, message: any) => onLongPress(context, message)}
476
498
  scrollToBottom
477
499
  renderAvatarOnTop
478
500
  renderUsernameOnMessage