ordering-ui-react-native 0.16.86 → 0.16.87-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/ActiveOrders/styles.tsx +8 -14
  4. package/src/components/BusinessInformation/index.tsx +19 -4
  5. package/src/components/BusinessInformation/styles.tsx +2 -2
  6. package/src/components/BusinessProductsList/index.tsx +1 -1
  7. package/src/components/BusinessesListing/index.tsx +1 -1
  8. package/src/components/OrderCreating/index.tsx +1 -21
  9. package/src/components/OrdersOption/index.tsx +54 -56
  10. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  11. package/src/components/SingleProductReview/index.tsx +7 -4
  12. package/src/components/VerifyPhone/styles.tsx +1 -2
  13. package/src/components/shared/OToast.tsx +4 -4
  14. package/src/utils/index.tsx +2 -1
  15. package/themes/business/index.tsx +2 -0
  16. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  17. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  18. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  19. package/themes/business/src/components/Chat/index.tsx +31 -31
  20. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  21. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  22. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  23. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  24. package/themes/business/src/components/LoginForm/index.tsx +239 -80
  25. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  26. package/themes/business/src/components/MapView/index.tsx +19 -8
  27. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  28. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  29. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  30. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +96 -50
  31. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  32. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  33. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  34. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  35. package/themes/business/src/components/OrdersOption/index.tsx +79 -87
  36. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  37. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  38. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  40. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  41. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  44. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  45. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  46. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  47. package/themes/business/src/components/PreviousOrders/index.tsx +447 -247
  48. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  49. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  50. package/themes/business/src/components/ReviewCustomer/index.tsx +54 -27
  51. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  52. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  53. package/themes/business/src/components/shared/OLink.tsx +33 -13
  54. package/themes/business/src/components/shared/OModal.tsx +16 -9
  55. package/themes/business/src/components/shared/OText.tsx +8 -2
  56. package/themes/business/src/types/index.tsx +35 -3
  57. package/themes/business/src/utils/index.tsx +53 -0
  58. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  59. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  60. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  61. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  62. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  63. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  64. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  65. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  66. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  67. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  68. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  69. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  70. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
  71. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  72. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  73. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  74. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  75. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  76. package/themes/kiosk/src/types/index.d.ts +13 -0
  77. package/themes/kiosk/src/utils/index.tsx +15 -0
  78. package/themes/original/index.tsx +8 -0
  79. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  80. package/themes/original/src/components/AddressForm/index.tsx +155 -139
  81. package/themes/original/src/components/AddressList/index.tsx +18 -18
  82. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  83. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  84. package/themes/original/src/components/BusinessBasicInformation/index.tsx +118 -76
  85. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +1 -4
  86. package/themes/original/src/components/BusinessController/index.tsx +100 -47
  87. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  88. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  89. package/themes/original/src/components/BusinessItemAccordion/index.tsx +9 -3
  90. package/themes/original/src/components/BusinessListingSearch/index.tsx +87 -34
  91. package/themes/original/src/components/BusinessListingSearch/styles.tsx +6 -0
  92. package/themes/original/src/components/BusinessPreorder/index.tsx +96 -15
  93. package/themes/original/src/components/BusinessProductsList/index.tsx +10 -8
  94. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  95. package/themes/original/src/components/BusinessProductsListing/index.tsx +564 -495
  96. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  97. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  98. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  99. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +116 -81
  100. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  101. package/themes/original/src/components/BusinessesListing/index.tsx +6 -6
  102. package/themes/original/src/components/Cart/index.tsx +83 -42
  103. package/themes/original/src/components/CartContent/index.tsx +77 -15
  104. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  105. package/themes/original/src/components/Checkout/index.tsx +280 -173
  106. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  107. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  108. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  109. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  110. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  111. package/themes/original/src/components/Favorite/index.tsx +7 -4
  112. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  113. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  114. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  115. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  116. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  117. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  118. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  119. package/themes/original/src/components/Help/index.tsx +8 -8
  120. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  121. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  122. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  123. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  124. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  125. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  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 +7 -40
  133. package/themes/original/src/components/Messages/index.tsx +26 -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 +92 -93
  137. package/themes/original/src/components/MultiCheckout/index.tsx +193 -79
  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/NetworkError/index.tsx +5 -3
  144. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  145. package/themes/original/src/components/Notifications/index.tsx +144 -0
  146. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  147. package/themes/original/src/components/OrderDetails/index.tsx +109 -219
  148. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  149. package/themes/original/src/components/OrderItAgain/index.tsx +44 -42
  150. package/themes/original/src/components/OrderProgress/index.tsx +74 -104
  151. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  152. package/themes/original/src/components/OrderSummary/index.tsx +52 -17
  153. package/themes/original/src/components/OrderTypeSelector/index.tsx +9 -3
  154. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +29 -20
  155. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  156. package/themes/original/src/components/OrdersOption/index.tsx +76 -83
  157. package/themes/original/src/components/PageBanner/index.tsx +146 -0
  158. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  159. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  160. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  161. package/themes/original/src/components/PaymentOptions/index.tsx +2 -2
  162. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  163. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  164. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  165. package/themes/original/src/components/ProductForm/index.tsx +240 -256
  166. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  167. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  168. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  169. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  170. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  171. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  172. package/themes/original/src/components/ProfessionalProfile/index.tsx +54 -14
  173. package/themes/original/src/components/Promotions/index.tsx +234 -220
  174. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  175. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  176. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  177. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  178. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  179. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  180. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  181. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  182. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  183. package/themes/original/src/components/ServiceForm/index.tsx +377 -270
  184. package/themes/original/src/components/Sessions/index.tsx +11 -8
  185. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  186. package/themes/original/src/components/SignupForm/index.tsx +79 -67
  187. package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
  188. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  189. package/themes/original/src/components/SingleProductCard/index.tsx +104 -45
  190. package/themes/original/src/components/SingleProductCard/styles.tsx +14 -13
  191. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  192. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  193. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  194. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  195. package/themes/original/src/components/UpsellingProducts/index.tsx +243 -218
  196. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  197. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  198. package/themes/original/src/components/UserFormDetails/index.tsx +53 -54
  199. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  200. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  201. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  202. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  203. package/themes/original/src/components/Wallets/index.tsx +96 -93
  204. package/themes/original/src/components/Wallets/styles.tsx +2 -0
  205. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  206. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  207. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  208. package/themes/original/src/components/shared/OButton.tsx +6 -2
  209. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  210. package/themes/original/src/components/shared/OInput.tsx +10 -1
  211. package/themes/original/src/layouts/Container.tsx +13 -9
  212. package/themes/original/src/types/index.tsx +37 -5
  213. package/themes/original/src/utils/index.tsx +321 -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
  }
@@ -225,7 +192,7 @@ const OrderMessageUI = (props: any) => {
225
192
  }
226
193
 
227
194
  export const OrderListing = (props: OrdersOptionParams) => {
228
- const [businessState] = useBusiness();
195
+ const [businessState] = useBusiness();
229
196
  const OrderListingProps = {
230
197
  ...props,
231
198
  UIComponent: OrdersOptionUI,
@@ -236,7 +203,7 @@ export const OrderListing = (props: OrdersOptionParams) => {
236
203
  pageSize: 10,
237
204
  controlType: 'infinity'
238
205
  },
239
- businessId: businessState?.business?.id,
206
+ businessId: businessState?.business?.id,
240
207
  profileMessages: true,
241
208
  orderBy: 'last_direct_message_at',
242
209
  orderDirection: 'asc'
@@ -292,7 +259,7 @@ export const MessageListing = (props: MessageListingParams) => {
292
259
  titleAlign={'center'}
293
260
  onActionLeft={goToBack}
294
261
  showCall={false}
295
- paddingTop={10}
262
+ paddingTop={Platform.OS === 'ios' ? 20 : 10}
296
263
  btnStyle={{ paddingLeft: 0 }}
297
264
  />
298
265
  <OrderListing
@@ -300,7 +267,7 @@ export const MessageListing = (props: MessageListingParams) => {
300
267
  setSelectedOrderId={setSelectedOrderId}
301
268
  setOrderList={setOrderListStatus}
302
269
  setOpenMessges={setOpenMessges}
303
- franchiseId={props.franchiseId}
270
+ franchiseId={props.franchiseId}
304
271
  />
305
272
  {openMessages && seletedOrder && (
306
273
  <OModal
@@ -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
  }
@@ -397,6 +399,19 @@ const MessagesUI = (props: MessagesParams) => {
397
399
  }
398
400
  }
399
401
 
402
+ const onLongPress = (context: any, message: any) => {
403
+ const options = [
404
+ t('COPY_TEXT', 'Copy text'),
405
+ t('CANCEL', 'Cancel'),
406
+ ];
407
+ const cancelButtonIndex = options.length - 1;
408
+ context.actionSheet().showActionSheetWithOptions({
409
+ options,
410
+ cancelButtonIndex
411
+ }, (buttonIndex: any) => buttonIndex === 0 && Clipboard.setString(message.text)
412
+ );
413
+ }
414
+
400
415
  return (
401
416
  <View style={{ height: getViewHeight(), width: '100%', paddingTop: 12, backgroundColor: 'white' }}>
402
417
  <Wrapper>
@@ -473,6 +488,7 @@ const MessagesUI = (props: MessagesParams) => {
473
488
  onSend={onSubmit}
474
489
  onInputTextChanged={onChangeMessage}
475
490
  alignTop
491
+ onLongPress={(context: any, message: any) => onLongPress(context, message)}
476
492
  scrollToBottom
477
493
  renderAvatarOnTop
478
494
  renderUsernameOnMessage