ordering-ui-react-native 0.16.83 → 0.16.84-release

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) 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 +10 -10
  7. package/src/components/BusinessesListing/index.tsx +1 -1
  8. package/src/components/LanguageSelector/index.tsx +21 -16
  9. package/src/components/Messages/index.tsx +2 -2
  10. package/src/components/OrderCreating/index.tsx +1 -21
  11. package/src/components/OrdersOption/index.tsx +54 -56
  12. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  13. package/src/components/SingleProductReview/index.tsx +7 -4
  14. package/src/components/VerifyPhone/styles.tsx +1 -2
  15. package/src/components/shared/OToast.tsx +4 -4
  16. package/src/utils/index.tsx +2 -1
  17. package/themes/business/index.tsx +2 -0
  18. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  19. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  20. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  21. package/themes/business/src/components/Chat/index.tsx +31 -31
  22. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  23. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  24. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  25. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  26. package/themes/business/src/components/LoginForm/index.tsx +236 -80
  27. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  28. package/themes/business/src/components/MapView/index.tsx +19 -8
  29. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  30. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  31. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  32. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +96 -50
  33. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  34. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  35. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  36. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  37. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  38. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  40. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  41. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  44. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  45. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  46. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  47. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  48. package/themes/business/src/components/PreviousOrders/index.tsx +447 -247
  49. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  50. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  51. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  52. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  53. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  54. package/themes/business/src/components/shared/OLink.tsx +33 -13
  55. package/themes/business/src/components/shared/OModal.tsx +16 -9
  56. package/themes/business/src/components/shared/OText.tsx +8 -2
  57. package/themes/business/src/types/index.tsx +35 -3
  58. package/themes/business/src/utils/index.tsx +53 -0
  59. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  60. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  61. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  62. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  63. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  64. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  65. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  66. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  67. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  68. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  69. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  70. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  71. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
  72. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  73. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  74. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  75. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  76. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  77. package/themes/kiosk/src/types/index.d.ts +13 -0
  78. package/themes/kiosk/src/utils/index.tsx +15 -0
  79. package/themes/original/index.tsx +8 -0
  80. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  81. package/themes/original/src/components/AddressForm/index.tsx +155 -139
  82. package/themes/original/src/components/AddressList/index.tsx +18 -18
  83. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  84. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  85. package/themes/original/src/components/BusinessBasicInformation/index.tsx +118 -76
  86. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  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 +12 -6
  90. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  91. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  92. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  93. package/themes/original/src/components/BusinessListingSearch/index.tsx +102 -155
  94. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  95. package/themes/original/src/components/BusinessPreorder/index.tsx +96 -15
  96. package/themes/original/src/components/BusinessProductsList/index.tsx +11 -8
  97. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  98. package/themes/original/src/components/BusinessProductsListing/index.tsx +564 -495
  99. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  100. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  101. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  102. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +116 -81
  103. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  104. package/themes/original/src/components/BusinessesListing/index.tsx +6 -6
  105. package/themes/original/src/components/Cart/index.tsx +83 -42
  106. package/themes/original/src/components/CartContent/index.tsx +80 -18
  107. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  108. package/themes/original/src/components/Checkout/index.tsx +74 -86
  109. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  110. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  111. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  112. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  113. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  114. package/themes/original/src/components/Favorite/index.tsx +7 -4
  115. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  116. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  117. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  118. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  119. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  120. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  121. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  122. package/themes/original/src/components/Help/index.tsx +8 -8
  123. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  124. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  125. package/themes/original/src/components/HelpGuide/index.tsx +13 -12
  126. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  127. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  128. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  129. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  130. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  131. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  132. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  133. package/themes/original/src/components/LoginForm/index.tsx +28 -8
  134. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  135. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  136. package/themes/original/src/components/Messages/index.tsx +42 -26
  137. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  138. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  139. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  140. package/themes/original/src/components/MultiCheckout/index.tsx +179 -77
  141. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  142. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  143. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  144. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  145. package/themes/original/src/components/NavBar/index.tsx +7 -6
  146. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  147. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  148. package/themes/original/src/components/Notifications/index.tsx +144 -0
  149. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  150. package/themes/original/src/components/OrderDetails/index.tsx +108 -218
  151. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  152. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  153. package/themes/original/src/components/OrderProgress/index.tsx +82 -106
  154. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  155. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  156. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  157. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +93 -97
  158. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  159. package/themes/original/src/components/OrdersOption/index.tsx +83 -91
  160. package/themes/original/src/components/PageBanner/index.tsx +146 -0
  161. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  162. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  163. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  164. package/themes/original/src/components/PaymentOptions/index.tsx +2 -2
  165. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  166. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  167. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  168. package/themes/original/src/components/ProductForm/index.tsx +240 -256
  169. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  170. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  171. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  172. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  173. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  174. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  175. package/themes/original/src/components/ProfessionalProfile/index.tsx +54 -14
  176. package/themes/original/src/components/Promotions/index.tsx +234 -220
  177. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  178. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  179. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  180. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  181. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  182. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  183. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  184. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  185. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  186. package/themes/original/src/components/ServiceForm/index.tsx +377 -270
  187. package/themes/original/src/components/Sessions/index.tsx +11 -8
  188. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  189. package/themes/original/src/components/SignupForm/index.tsx +78 -66
  190. package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
  191. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  192. package/themes/original/src/components/SingleProductCard/index.tsx +112 -77
  193. package/themes/original/src/components/SingleProductCard/styles.tsx +14 -13
  194. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  195. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  196. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  197. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  198. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  199. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  200. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  201. package/themes/original/src/components/UserFormDetails/index.tsx +50 -54
  202. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  203. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  204. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  205. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  206. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  207. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  208. package/themes/original/src/components/Wallets/index.tsx +177 -164
  209. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  210. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  211. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  212. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  213. package/themes/original/src/components/shared/OButton.tsx +9 -4
  214. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  215. package/themes/original/src/components/shared/OInput.tsx +10 -1
  216. package/themes/original/src/layouts/Container.tsx +13 -9
  217. package/themes/original/src/types/index.tsx +42 -7
  218. package/themes/original/src/utils/index.tsx +321 -58
  219. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,7 +1,7 @@
1
- import React from 'react'
2
- import { LanguageSelector as LanguageSelectorController, useOrder } from 'ordering-components/native'
1
+ import React, { useState } from 'react'
2
+ import { LanguageSelector as LanguageSelectorController, useOrder, useLanguage } from 'ordering-components/native'
3
3
  import { useTheme } from 'styled-components/native';
4
- import { Platform, StyleSheet, View } from 'react-native'
4
+ import { StyleSheet, View } from 'react-native'
5
5
 
6
6
  import RNPickerSelect from 'react-native-picker-select'
7
7
  import { Container, DummyContainer } from './styles'
@@ -9,9 +9,17 @@ import { LanguageSelectorParams } from '../../types'
9
9
  import { OIcon } from '../shared'
10
10
 
11
11
  const LanguageSelectorUI = (props: LanguageSelectorParams) => {
12
+ const {
13
+ languagesState,
14
+ currentLanguage,
15
+ handleChangeLanguage,
16
+ iconColor,
17
+ pickerStyle
18
+ } = props
12
19
 
13
20
  const [orderState] = useOrder()
14
-
21
+ const [state] = useLanguage()
22
+ const [languagePressed, setLanguagePressed] = useState(currentLanguage)
15
23
  const theme = useTheme();
16
24
 
17
25
  const _pickerStyle = StyleSheet.create({
@@ -41,14 +49,11 @@ const LanguageSelectorUI = (props: LanguageSelectorParams) => {
41
49
  color: theme.colors.secundaryContrast
42
50
  }
43
51
  })
44
-
45
- const {
46
- languagesState,
47
- currentLanguage,
48
- handleChangeLanguage,
49
- iconColor,
50
- pickerStyle
51
- } = props
52
+
53
+ const changeLanguage = (lang : string) => {
54
+ setLanguagePressed(lang)
55
+ handleChangeLanguage(lang)
56
+ }
52
57
 
53
58
  const _languages = languagesState?.languages?.map((language: any) => {
54
59
  return {
@@ -67,14 +72,14 @@ const LanguageSelectorUI = (props: LanguageSelectorParams) => {
67
72
  <>
68
73
  {iconColor && <OIcon src={theme.images.general.language} color={iconColor} style={{ marginEnd: 14 }} width={16} />}
69
74
  <RNPickerSelect
70
- onValueChange={handleChangeLanguage}
75
+ onValueChange={changeLanguage}
71
76
  items={_languages || []}
72
77
  value={currentLanguage}
73
78
  style={pickerStyle ? pickerStyle : _pickerStyle}
74
79
  useNativeAndroidPickerStyle={false}
75
80
  placeholder={{}}
76
81
  Icon={() => <View style={pickerStyle ? pickerStyle.icon : _pickerStyle.icon}><OIcon src={theme.images.general.arrow_down} color={theme.colors.white} style={{ width: '100%' }} /></View>}
77
- disabled={orderState.loading}
82
+ disabled={orderState.loading || state.loading || state?.language?.code !== languagePressed}
78
83
  />
79
84
  </>
80
85
  ) : <DummyContainer />}
@@ -6,6 +6,7 @@ import { NotFoundSource } from '../NotFoundSource'
6
6
 
7
7
  import { ItemWrap } from './styles'
8
8
  import { OrdersOptionParams } from '../../types'
9
+ import { getOrderStatus } from '../../utils'
9
10
 
10
11
  import {
11
12
  Placeholder,
@@ -67,40 +68,6 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
67
68
  return moment(dateStr).format('MMMM DD,YYYY - hh:mm a');
68
69
  }
69
70
 
70
- const getOrderStatus = (s: string) => {
71
- const status = parseInt(s)
72
- const orderStatus = [
73
- { key: 0, value: t('PENDING', 'Pending') },
74
- { key: 1, value: t('COMPLETED', 'Completed') },
75
- { key: 2, value: t('REJECTED', 'Rejected') },
76
- { key: 3, value: t('DRIVER_IN_BUSINESS', 'Driver in business') },
77
- { key: 4, value: t('PREPARATION_COMPLETED', 'Preparation Completed') },
78
- { key: 5, value: t('REJECTED_BY_BUSINESS', 'Rejected by business') },
79
- { key: 6, value: t('REJECTED_BY_DRIVER', 'Rejected by Driver') },
80
- { key: 7, value: t('ACCEPTED_BY_BUSINESS', 'Accepted by business') },
81
- { key: 8, value: t('ACCEPTED_BY_DRIVER', 'Accepted by driver') },
82
- { key: 9, value: t('PICK_UP_COMPLETED_BY_DRIVER', 'Pick up completed by driver') },
83
- { key: 10, value: t('PICK_UP_FAILED_BY_DRIVER', 'Pick up Failed by driver') },
84
- { key: 11, value: t('DELIVERY_COMPLETED_BY_DRIVER', 'Delivery completed by driver') },
85
- { key: 12, value: t('DELIVERY_FAILED_BY_DRIVER', 'Delivery Failed by driver') },
86
- { key: 13, value: t('PREORDER', 'PreOrder') },
87
- { key: 14, value: t('ORDER_NOT_READY', 'Order not ready') },
88
- { key: 15, value: t('ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER', 'Order picked up completed by customer') },
89
- { key: 16, value: t('CANCELLED_BY_CUSTOMER', 'Cancelled by customer') },
90
- { key: 17, value: t('ORDER_NOT_PICKEDUP_BY_CUSTOMER', 'Order not picked up by customer') },
91
- { key: 18, value: t('DRIVER_ALMOST_ARRIVED_TO_BUSINESS', 'Driver almost arrived to business') },
92
- { key: 19, value: t('DRIVER_ALMOST_ARRIVED_TO_CUSTOMER', 'Driver almost arrived to customer') },
93
- { key: 20, value: t('ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS', 'Customer almost arrived to business') },
94
- { key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') },
95
- { key: 22, value: t('ORDER_LOOKING_FOR_DRIVER', 'Looking for driver') },
96
- { key: 23, value: t('ORDER_DRIVER_ON_WAY', 'Driver on way') }
97
- ]
98
-
99
- const objectStatus = orderStatus.find((o) => o.key === status)
100
-
101
- return objectStatus && objectStatus
102
- }
103
-
104
71
  return (
105
72
  <>
106
73
  {/* {(orders.length > 0) && (
@@ -1,91 +1,107 @@
1
- import React, { useEffect } from 'react'
1
+ import React, { useEffect, useState } from 'react'
2
2
  import { formatSeconds } from '../../../utils'
3
3
  import { StyleSheet, TouchableOpacity } from 'react-native';
4
4
  import { useCountdownTimer } from '../../../../../../src/hooks/useCountdownTimer';
5
5
  import { useLanguage } from 'ordering-components/native';
6
6
  import { OTPContainer } from './styles';
7
7
  import { OText, OButton } from '../../shared';
8
- import OTPInputView from '@twotalltotems/react-native-otp-input'
8
+ import OtpInputs from 'react-native-otp-inputs';
9
9
  import { useTheme } from 'styled-components/native';
10
10
  import { otpParams } from '../../../types'
11
11
 
12
12
  export const Otp = (props: otpParams) => {
13
- const {
14
- willVerifyOtpState,
15
- setWillVerifyOtpState,
16
- onSubmit,
17
- handleLoginOtp,
18
- setAlertState,
19
- pinCount
20
- } = props
13
+ const {
14
+ willVerifyOtpState,
15
+ setWillVerifyOtpState,
16
+ onSubmit,
17
+ handleLoginOtp,
18
+ setAlertState,
19
+ pinCount
20
+ } = props
21
21
 
22
- const theme = useTheme();
23
- const [, t] = useLanguage();
24
- const [otpLeftTime, _, resetOtpLeftTime]: any = useCountdownTimer(
25
- 600, willVerifyOtpState)
22
+ const theme = useTheme();
23
+ const [, t] = useLanguage();
24
+ const [otpLeftTime, _, resetOtpLeftTime]: any = useCountdownTimer(
25
+ 600, willVerifyOtpState)
26
26
 
27
+ const [code, setCode] = useState('')
27
28
 
28
- const handleOnSubmit = () => {
29
- setAlertState({
30
- open: true,
31
- title: t('CODE_SENT', 'The code has been sent'),
32
- })
33
- resetOtpLeftTime()
34
- onSubmit()
29
+
30
+ const handleOnSubmit = () => {
31
+ setAlertState({
32
+ open: true,
33
+ title: t('CODE_SENT', 'The code has been sent'),
34
+ })
35
+ resetOtpLeftTime()
36
+ onSubmit()
37
+ }
38
+
39
+ useEffect(() => {
40
+ if (otpLeftTime === 0) {
41
+ setAlertState({
42
+ open: true,
43
+ title: t('TIME_IS_UP', 'Time is up'),
44
+ content: t('PLEASE_RESEND_CODE', 'Please resend code again')
45
+ })
35
46
  }
47
+ }, [otpLeftTime])
36
48
 
37
- useEffect(() => {
38
- if (otpLeftTime === 0) {
39
- setAlertState({
40
- open: true,
41
- title: t('TIME_IS_UP', 'Time is up'),
42
- content: t('PLEASE_RESEND_CODE', 'Please resend code again')
43
- })
44
- }
45
- }, [otpLeftTime])
49
+ useEffect(() => {
50
+ if (code?.length === (pinCount || 6)) {
51
+ handleLoginOtp(code)
52
+ }
53
+ }, [code])
46
54
 
47
- const loginStyle = StyleSheet.create({
48
- underlineStyleBase: {
49
- width: 45,
50
- height: 60,
51
- borderWidth: 1,
52
- fontSize: 16
53
- },
54
- underlineStyleHighLighted: {
55
- borderColor: theme.colors.primary,
56
- color: theme.colors.primary,
57
- fontSize: 16
58
- },
59
- });
55
+ const loginStyle = StyleSheet.create({
56
+ container: {
57
+ width: '100%',
58
+ flexDirection: 'row',
59
+ justifyContent: 'space-between',
60
+ marginVertical: 30
61
+ },
62
+ underlineStyleBase: {
63
+ width: 45,
64
+ height: 50,
65
+ borderWidth: 1,
66
+ fontSize: 16,
67
+ borderRadius: 8,
68
+ borderColor: theme.colors.lightGray,
69
+ textAlign: 'center'
70
+ },
71
+ underlineStyleHighLighted: {
72
+ borderColor: theme.colors.primary,
73
+ color: theme.colors.primary,
74
+ fontSize: 16
75
+ },
76
+ });
60
77
 
61
- return (
62
- <>
63
- <OTPContainer>
64
- <OText size={24}>
65
- {formatSeconds(otpLeftTime)}
66
- </OText>
67
- <OTPInputView
68
- style={{ width: '100%', height: 150 }}
69
- pinCount={pinCount || 6}
70
- codeInputFieldStyle={loginStyle.underlineStyleBase}
71
- codeInputHighlightStyle={loginStyle.underlineStyleHighLighted}
72
- onCodeFilled={(code: string) => handleLoginOtp(code)}
73
- selectionColor={theme.colors.primary}
74
- />
75
- <TouchableOpacity onPress={() => handleOnSubmit()} disabled={otpLeftTime > 520}>
76
- <OText size={16} mBottom={30} color={otpLeftTime > 520 ? theme.colors.disabled : theme.colors.primary}>
77
- {t('RESEND_CODE', 'Resend code')}
78
- </OText>
79
- </TouchableOpacity>
80
- <OButton
81
- onClick={() => setWillVerifyOtpState(false)}
82
- bgColor={theme.colors.white}
83
- borderColor={theme.colors.primary}
84
- textStyle={{ color: theme.colors.primary }}
85
- style={{ borderRadius: 8, width: '100%' }}
86
- text={t('CANCEL', 'Cancel')}
87
- />
88
- </OTPContainer>
89
- </>
90
- )
78
+ return (
79
+ <>
80
+ <OTPContainer>
81
+ <OText size={24}>
82
+ {formatSeconds(otpLeftTime)}
83
+ </OText>
84
+ <OtpInputs
85
+ autofillFromClipboard
86
+ numberOfInputs={pinCount || 6}
87
+ style={loginStyle.container}
88
+ inputStyles={loginStyle.underlineStyleBase}
89
+ handleChange={setCode}
90
+ />
91
+ <TouchableOpacity onPress={() => handleOnSubmit()} disabled={otpLeftTime > 520}>
92
+ <OText size={16} mBottom={30} color={otpLeftTime > 520 ? theme.colors.disabled : theme.colors.primary}>
93
+ {t('RESEND_CODE', 'Resend code')}
94
+ </OText>
95
+ </TouchableOpacity>
96
+ <OButton
97
+ onClick={() => setWillVerifyOtpState(false)}
98
+ bgColor={theme.colors.white}
99
+ borderColor={theme.colors.primary}
100
+ textStyle={{ color: theme.colors.primary }}
101
+ style={{ borderRadius: 8, width: '100%' }}
102
+ text={t('CANCEL', 'Cancel')}
103
+ />
104
+ </OTPContainer>
105
+ </>
106
+ )
91
107
  }
@@ -3,5 +3,4 @@ import styled from 'styled-components/native';
3
3
  export const OTPContainer = styled.View`
4
4
  padding: 20px;
5
5
  align-items: center;
6
- flex: 1
7
6
  `
@@ -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';
@@ -96,7 +96,7 @@ const LoginFormUI = (props: LoginParams) => {
96
96
  const [alertState, setAlertState] = useState({ open: false, title: '', content: [] })
97
97
  const [tabLayouts, setTabLayouts] = useState<any>({})
98
98
  const tabsRef = useRef<any>(null)
99
-
99
+ const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
100
100
  const theme = useTheme();
101
101
  const isOtpEmail = loginTab === 'otp' && otpType === 'email'
102
102
  const isOtpCellphone = loginTab === 'otp' && otpType === 'cellphone'
@@ -165,6 +165,7 @@ const LoginFormUI = (props: LoginParams) => {
165
165
  if (loginTab === 'otp') {
166
166
  if (phoneInputData.error && (loginTab !== 'otp' || (otpType === 'cellphone' && loginTab === 'otp'))) {
167
167
  showToast(ToastType.Error, t('INVALID_PHONE_NUMBER', 'Invalid phone number'));
168
+ Vibration.vibrate()
168
169
  return
169
170
  }
170
171
  if (loginTab === 'otp') {
@@ -177,6 +178,7 @@ const LoginFormUI = (props: LoginParams) => {
177
178
  } else {
178
179
  if (phoneInputData.error) {
179
180
  showToast(ToastType.Error, phoneInputData.error);
181
+ Vibration.vibrate()
180
182
  return;
181
183
  }
182
184
  handleButtonLoginClick({
@@ -189,6 +191,7 @@ const LoginFormUI = (props: LoginParams) => {
189
191
  const handleVerifyCodeClick = () => {
190
192
  if (phoneInputData.error) {
191
193
  showToast(ToastType.Error, phoneInputData.error);
194
+ Vibration.vibrate()
192
195
  return;
193
196
  }
194
197
  if (
@@ -203,6 +206,7 @@ const LoginFormUI = (props: LoginParams) => {
203
206
  'The field Mobile phone is required.',
204
207
  ),
205
208
  );
209
+ Vibration.vibrate()
206
210
  return;
207
211
  }
208
212
  handleSendVerifyCode && handleSendVerifyCode(phoneInputData.phone);
@@ -224,10 +228,12 @@ const LoginFormUI = (props: LoginParams) => {
224
228
  setRecaptchaVerified(false)
225
229
  if (!recaptchaConfig?.siteKey) {
226
230
  showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
231
+ Vibration.vibrate()
227
232
  return
228
233
  }
229
234
  if (!recaptchaConfig?.baseUrl) {
230
235
  showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
236
+ Vibration.vibrate()
231
237
  return
232
238
  }
233
239
 
@@ -304,6 +310,7 @@ const LoginFormUI = (props: LoginParams) => {
304
310
  baseUrl: configs?.security_recaptcha_base_url?.value || null
305
311
  })
306
312
  showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
313
+ Vibration.vibrate()
307
314
  return
308
315
  }
309
316
  formState.result?.result &&
@@ -313,6 +320,7 @@ const LoginFormUI = (props: LoginParams) => {
313
320
  ? formState.result?.result
314
321
  : formState.result?.result[0],
315
322
  );
323
+ formState.result?.result && Vibration.vibrate()
316
324
  }
317
325
  }, [formState]);
318
326
 
@@ -324,6 +332,7 @@ const LoginFormUI = (props: LoginParams) => {
324
332
  ? verifyPhoneState?.result?.result
325
333
  : verifyPhoneState?.result?.result[0];
326
334
  verifyPhoneState.result?.result && showToast(ToastType.Error, message);
335
+ verifyPhoneState.result?.result && Vibration.vibrate();
327
336
  setIsLoadingVerifyModal(false);
328
337
  return;
329
338
  }
@@ -363,6 +372,10 @@ const LoginFormUI = (props: LoginParams) => {
363
372
  }
364
373
  }, [checkPhoneCodeState])
365
374
 
375
+ useEffect(() => {
376
+ if (!!Object.values(errors)?.length) Vibration.vibrate()
377
+ }, [errors])
378
+
366
379
  return (
367
380
  <Container>
368
381
  <NavBar
@@ -680,7 +693,7 @@ const LoginFormUI = (props: LoginParams) => {
680
693
  {t('NEW_ON_PLATFORM', 'New on Ordering?')}
681
694
  </OText>
682
695
  <TouchableOpacity onPress={() => onNavigationRedirect('Signup')}>
683
- <OText size={14} mLeft={5} color={theme.colors.skyBlue}>
696
+ <OText size={14} mLeft={5} color={theme.colors.primary}>
684
697
  {t('CREATE_ACCOUNT', 'Create account')}
685
698
  </OText>
686
699
  </TouchableOpacity>
@@ -719,8 +732,9 @@ const LoginFormUI = (props: LoginParams) => {
719
732
  )}
720
733
 
721
734
  {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)) &&
735
+ (((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
736
+ ((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
737
+ ((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) &&
724
738
  (
725
739
  <>
726
740
  <View
@@ -748,7 +762,7 @@ const LoginFormUI = (props: LoginParams) => {
748
762
  facebookLoginEnabled && (
749
763
  <FacebookLogin
750
764
  notificationState={notificationState}
751
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
765
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
752
766
  handleLoading={(val: boolean) => setIsFBLoading(val)}
753
767
  handleSuccessFacebookLogin={handleSuccessFacebook}
754
768
  />
@@ -757,7 +771,7 @@ const LoginFormUI = (props: LoginParams) => {
757
771
  <GoogleLogin
758
772
  notificationState={notificationState}
759
773
  webClientId={configs?.google_login_client_id?.value}
760
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
774
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
761
775
  handleLoading={(val: boolean) => setIsFBLoading(val)}
762
776
  handleSuccessGoogleLogin={handleSuccessFacebook}
763
777
  />
@@ -765,7 +779,7 @@ const LoginFormUI = (props: LoginParams) => {
765
779
  {(configs?.apple_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && appleLoginEnabled && (
766
780
  <AppleLogin
767
781
  notificationState={notificationState}
768
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
782
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
769
783
  handleLoading={(val: boolean) => setIsFBLoading(val)}
770
784
  handleSuccessAppleLogin={handleSuccessFacebook}
771
785
  />
@@ -788,6 +802,12 @@ const LoginFormUI = (props: LoginParams) => {
788
802
  </Placeholder>
789
803
  </SkeletonWrapper>
790
804
  )}
805
+
806
+ {enabledPoweredByOrdering && (
807
+ <OText>
808
+ Powered By Ordering.co
809
+ </OText>
810
+ )}
791
811
  </FormSide>
792
812
  <OModal
793
813
  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